From c26dede97f626b52b7bf8962ed55d1dbda86abe8 Mon Sep 17 00:00:00 2001 From: Hilmar R Date: Sun, 28 Feb 2021 21:06:16 +0100 Subject: [PATCH] get dev --- .gitignore | 0 .homeinstall/zotserver-setup.sh | 0 .openshift/action_hooks/deploy | 0 .openshift/cron/weekly/chronograph | 0 CHANGELOG | 4 - Zotlabs/Access/AccessList.php | 3 +- Zotlabs/Access/PermissionLimits.php | 15 +- Zotlabs/Access/PermissionRoles.php | 10 +- Zotlabs/Access/Permissions.php | 89 +- Zotlabs/Daemon/Addon.php | 7 +- Zotlabs/Daemon/Cache_embeds.php | 1 - Zotlabs/Daemon/Cache_query.php | 36 + Zotlabs/Daemon/Checksites.php | 23 +- Zotlabs/Daemon/Convo.php | 58 + Zotlabs/Daemon/Cron.php | 129 +- Zotlabs/Daemon/Cron_daily.php | 26 +- Zotlabs/Daemon/Cron_weekly.php | 21 +- Zotlabs/Daemon/CurlAuth.php | 24 +- Zotlabs/Daemon/Deliver.php | 16 +- Zotlabs/Daemon/Deliver_hooks.php | 11 +- Zotlabs/Daemon/Directory.php | 40 +- Zotlabs/Daemon/Expire.php | 41 +- Zotlabs/Daemon/Externals.php | 177 +- Zotlabs/Daemon/Gprobe.php | 14 +- Zotlabs/Daemon/Importdoc.php | 14 +- Zotlabs/Daemon/Importfile.php | 23 +- Zotlabs/Daemon/Master.php | 37 +- Zotlabs/Daemon/Notifier.php | 406 +- Zotlabs/Daemon/Onedirsync.php | 20 +- Zotlabs/Daemon/Onepoll.php | 205 +- Zotlabs/Daemon/Poller.php | 143 +- Zotlabs/Daemon/Queue.php | 23 +- Zotlabs/Daemon/Thumbnail.php | 46 +- Zotlabs/Lib/ASCollection.php | 150 + Zotlabs/Lib/Activity.php | 2398 +- Zotlabs/Lib/ActivityStreams.php | 232 +- Zotlabs/Lib/Apps.php | 4 +- Zotlabs/Lib/Crypto.php | 206 + Zotlabs/Lib/Enotify.php | 2 +- Zotlabs/Lib/Hashpath.php | 55 + Zotlabs/Lib/JSalmon.php | 4 +- Zotlabs/Lib/Keyutils.php | 99 + Zotlabs/Lib/LDSignatures.php | 12 +- Zotlabs/Lib/Libsync.php | 529 +- Zotlabs/Lib/Libzot.php | 1364 +- Zotlabs/Lib/Libzotdir.php | 3 +- Zotlabs/Lib/NativeWikiPage.php | 11 +- Zotlabs/Lib/Queue.php | 10 +- Zotlabs/Lib/Share.php | 2 - Zotlabs/Lib/ThreadItem.php | 50 +- Zotlabs/Lib/Verify.php | 8 +- Zotlabs/Lib/ZotURL.php | 11 +- Zotlabs/Lib/Zotfinger.php | 13 +- Zotlabs/Module/Activity.php | 14 +- Zotlabs/Module/Article_edit.php | 5 +- Zotlabs/Module/Articles.php | 45 +- Zotlabs/Module/Attach.php | 67 +- Zotlabs/Module/Cal.php | 12 +- Zotlabs/Module/Card_edit.php | 5 +- Zotlabs/Module/Cards.php | 2 +- Zotlabs/Module/Cdav.php | 2 +- Zotlabs/Module/Channel.php | 407 +- Zotlabs/Module/Channel_calendar.php | 433 +- Zotlabs/Module/Chanview.php | 2 +- Zotlabs/Module/Cloud.php | 2 +- Zotlabs/Module/Connections.php | 5 +- Zotlabs/Module/Connedit.php | 293 +- Zotlabs/Module/Dav.php | 2 +- Zotlabs/Module/Display.php | 95 +- Zotlabs/Module/Editpost.php | 5 +- Zotlabs/Module/Embedphotos.php | 3 +- Zotlabs/Module/Fhublocs.php | 22 +- Zotlabs/Module/Getfile.php | 3 +- Zotlabs/Module/Import.php | 5 +- Zotlabs/Module/Item.php | 36 +- Zotlabs/Module/Like.php | 423 +- Zotlabs/Module/Network.php | 507 +- Zotlabs/Module/Notifications.php | 8 +- Zotlabs/Module/Pconfig.php | 70 +- Zotlabs/Module/Photo.php | 8 +- Zotlabs/Module/Pin.php | 3 +- Zotlabs/Module/Prate.php | 60 +- Zotlabs/Module/Probe.php | 17 +- Zotlabs/Module/Profile.php | 117 +- Zotlabs/Module/Profiles.php | 2 +- Zotlabs/Module/Rate.php | 70 +- Zotlabs/Module/Regver.php | 2 - Zotlabs/Module/Search.php | 289 +- Zotlabs/Module/Uexport.php | 7 +- Zotlabs/Module/Wfinger.php | 73 +- Zotlabs/Module/Xrd.php | 38 +- Zotlabs/Module/Zotfeed.php | 141 +- Zotlabs/Photo/PhotoDriver.php | 29 +- Zotlabs/Render/SimpleTemplate.php | 0 Zotlabs/Render/SmartyInterface.php | 2 +- Zotlabs/Render/SmartyTemplate.php | 0 Zotlabs/Render/TemplateEngine.php | 0 Zotlabs/Update/_1241.php | 21 +- Zotlabs/Update/_1242.php | 21 + Zotlabs/Update/_1243.php | 17 + Zotlabs/Web/HTTPSig.php | 27 +- Zotlabs/Web/Router.php | 85 +- Zotlabs/Web/WebServer.php | 8 +- Zotlabs/Zot/Auth.php | 38 +- Zotlabs/Zot/Finger.php | 5 +- Zotlabs/Zot/Receiver.php | 21 +- Zotlabs/Zot6/Receiver.php | 15 +- boot.php | 27 +- composer.json | 8 +- composer.lock | 225 +- .../admin/addons/assets/addon_repo_gui_1.png | Bin 0 -> 16983 bytes doc/context/pl/admin/addons/help.html | 14 + doc/context/pl/admin/logs/help.html | 20 + doc/context/pl/admin/queue/help.html | 7 + doc/context/pl/admin/security/help.html | 8 + doc/context/pl/appman/help.html | 10 + doc/context/pl/apps/edit/help.html | 7 + doc/context/pl/apps/help.html | 15 + doc/context/pl/cards/help.html | 31 + doc/context/pl/channel/help.html | 13 + doc/context/pl/chat/help.html | 19 + doc/context/pl/cloud/help.html | 17 + doc/context/pl/connections/help.html | 24 + .../pl/connections/ifpending/help.html | 24 + doc/context/pl/connedit/help.html | 44 + doc/context/pl/events/help.html | 18 + doc/context/pl/mail/help.html | 25 + doc/context/pl/network/help.html | 36 + doc/context/pl/photos/help.html | 15 + doc/context/pl/profile/help.html | 17 + doc/context/pl/profiles/help.html | 49 + doc/context/pl/settings/account/help.html | 49 + doc/context/pl/settings/channel/help.html | 49 + doc/context/pl/settings/features/help.html | 35 + doc/context/pl/settings/tokens/help.html | 43 + doc/context/pl/webpages/help.html | 24 + doc/context/pl/wiki/help.html | 29 + doc/hidden_configs.bb | 2 +- doc/macros/pl/addons_footer.bb | 2 + doc/macros/pl/cloud_footer.bb | 2 + doc/macros/pl/main_footer.bb | 1 + doc/macros/pl/troubleshooting_footer.bb | 2 + doc/pl/AdvancedSearch.md | 52 + doc/pl/Features.md | 107 + doc/pl/TermsOfService.md | 9 + doc/pl/Translations.md | 89 + doc/pl/about/about.bb | 181 + doc/pl/about/about_hub.bb | 7 + doc/pl/about/project.bb | 181 + doc/pl/accounts_profiles_channels_basics.bb | 20 + doc/pl/acl_dialog_post.html | 42 + doc/pl/addons.bb | 117 + doc/pl/addons_gnusocial.bb | 64 + doc/pl/admin/administrator_guide.md | 385 + doc/pl/admin/hub_snapshots.md | 127 + doc/pl/admins.bb | 15 + doc/pl/bugs.bb | 31 + doc/pl/checking_account_quota_usage.bb | 20 + doc/pl/general.bb | 18 + doc/pl/main.bb | 20 + doc/pl/member/assets/qr_text_to_post.png | Bin 0 -> 273 bytes doc/pl/member/assets/zat_dialog.png | Bin 0 -> 81837 bytes doc/pl/member/bbcode.html | 343 + doc/pl/member/member_faq.bb | 11 + doc/pl/member/member_guide.bb | 1024 + doc/pl/toc.html | 75 + ...bfedd230d2a7233d3915ac15d629f9dd845854.png | Bin 0 -> 249151 bytes ...41631745d16acdb7a44e50d148256c8ad26a67.png | Bin 0 -> 293314 bytes ...dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png | Bin 0 -> 178913 bytes ...00ba17a76ca6db4c246b3c4fa286b390cae7c8.png | Bin 0 -> 43797 bytes ...55b628d9be5f99ab04a78108ec404f53ec7bb5.png | Bin 0 -> 46752 bytes ...b6c3814e2975979aff12f873f43d81724c5e61.png | Bin 0 -> 257211 bytes ...aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png | Bin 0 -> 91478 bytes ...089217f2e136d4fcf8babe77bac00ecaad43ce.png | Bin 0 -> 293611 bytes ...b14dfffe1e5be098d1cd6e590bbead25b4cc05.png | Bin 0 -> 318766 bytes ...fe1d07be5af460cda4ba6cde9106ebc1564bb0.png | Bin 0 -> 298857 bytes ...e921756f825ee00f8ee464d3ef9fed971d2852.png | Bin 0 -> 532838 bytes ...6ba1364fac8ead173edd39340adaf78be11c9d.png | Bin 0 -> 137827 bytes ...d0680d1a721c85f2ae2bdd5739a8def466010e.png | Bin 0 -> 466641 bytes ...49412044cc6a0f8aebeac289d28786f2649d24.png | Bin 0 -> 240495 bytes ...61d35affbd053368056f562c58200fb41027b0.png | Bin 0 -> 665755 bytes ...92c3240b291eca8afa73133b3ac03b86f3302d.png | Bin 0 -> 324092 bytes ...8c69c17a87c910a39db2cd3b5292e4623ea4c4.png | Bin 0 -> 466584 bytes ...2055f0f24ed5e81ba622aca8cac576ccf5930e.png | Bin 0 -> 155763 bytes ...7b7863da5a8e39a5bc17d2c67fa160efef2056.png | Bin 0 -> 134643 bytes ...9bd4dc6d47edf1b66ea243f005b6b452ec366b.png | Bin 0 -> 306069 bytes ...397bb083bf7dc2a2b8f065e64da598b45b4a2b.png | Bin 0 -> 57185 bytes ...b2084c16a8410de1f7a6559633435817444aef.png | Bin 0 -> 255688 bytes ...2432fdc7b39692a094559aa504de99352940b1.png | Bin 0 -> 83265 bytes ...60fc416415271d9c51b81ad2a950fb0157222a.png | Bin 0 -> 264916 bytes ...514c907b3fdfe019918fc5553bb3f31388a36f.png | Bin 0 -> 68194 bytes ...8cd14b417c0d76de17af476be5f296b78d70e9.png | Bin 0 -> 99210 bytes doc/pl/tutorials/personal_channel.md | 116 + include/account.php | 595 +- include/api_zot.php | 9 +- include/attach.php | 4 +- include/bbcode.php | 143 +- include/bookmarks.php | 14 +- include/channel.php | 146 +- include/cli_startup.php | 2 +- include/connections.php | 4 +- include/contact_widgets.php | 38 +- include/conversation.php | 124 +- include/crypto.php | 81 +- include/dba/dba_driver.php | 0 include/dba/dba_pdo.php | 0 include/dir_fns.php | 3 +- include/feedutils.php | 20 +- include/follow.php | 18 +- include/help.php | 1 + include/html2bbcode.php | 3 + include/html2plain.php | 8 +- include/import.php | 2 +- include/items.php | 229 +- include/markdown.php | 9 +- include/message.php | 32 +- include/nav.php | 348 +- include/network.php | 29 +- include/oembed.php | 81 +- include/permissions.php | 2 +- include/photo/photo_driver.php | 116 +- include/plugin.php | 7 +- include/security.php | 243 +- include/taxonomy.php | 52 +- include/text.php | 19 +- include/xchan.php | 13 +- include/zid.php | 12 +- include/zot.php | 118 +- index.php | 0 install/htconfig.sample.php | 0 library/jgrowl/examples/jgrowl.html | 0 library/jgrowl/jquery.jgrowl.js | 0 library/jgrowl/less/jgrowl.core.less | 0 .../PHPGit/Command/ShortlogCommandTest.php | 0 tests/travis/gen_apidocs.sh | 0 tests/travis/prepare.sh | 0 tests/travis/prepare_mysql.sh | 0 tests/travis/prepare_pgsql.sh | 0 tests/unit/Lib/KeyutilsTest.php | 93 + tests/unit/Web/HttpSigTest.php | 6 +- util/.htaccess | 0 util/Doxyfile | 0 util/Doxygen.footer | 0 util/Doxygen_phpvarfilter.php | 0 util/README | 0 util/config.md | 0 util/connect | 4 +- util/db_update.php | 0 util/docblox_errorchecker.php | 0 util/extract.php | 0 util/fpostit/README | 0 util/fpostit/fpostit.js | 0 util/fpostit/fpostit.php | 0 util/fpostit/friendika-32.png | Bin util/fresh.md | 0 util/generate-hooks-index/.gitignore | 0 util/generate-hooks-index/CHANGELOG.md | 0 util/generate-hooks-index/LICENSE | 0 util/generate-hooks-index/README.md | 0 util/generate-hooks-index/doc/intro.md | 0 util/generate-hooks-index/project.clj | 0 .../src/generate_hooks_index/core.clj | 0 .../test/generate_hooks_index/core_test.clj | 0 util/hmessages.po | 2093 +- util/hstrings.php | 0 util/hubzilla_er/Makefile | 0 util/messages.po | 0 util/nconfig.php | 0 util/php2po.php | 0 util/po2php.php | 0 util/shredder/jansson-2.6.tar.gz | Bin util/shredder/jshon.tar.gz | Bin util/shredder/readme | 0 util/storageconv | 113 +- util/storageconv.sh | 6 + util/strings.php | 0 util/tpldebug.php | 0 util/typo.php | 0 util/typohelper.php | 0 util/z6convert.php | 0 util/zotsh/README.txt | 0 util/zotsh/easywebdav/LICENSE | 0 util/zotsh/easywebdav/__init__.py | 0 util/zotsh/easywebdav/__init__.pyc | Bin util/zotsh/easywebdav/__version__.py | 0 util/zotsh/easywebdav/__version__.pyc | Bin util/zotsh/easywebdav/client.py | 0 util/zotsh/easywebdav/client.pyc | Bin vendor/brick/math/CHANGELOG.md | 403 + vendor/brick/math/SECURITY.md | 3 +- vendor/brick/math/composer.json | 6 +- vendor/brick/math/psalm-baseline.xml | 40 - vendor/brick/math/psalm.xml | 56 - vendor/brick/math/random-tests.php | 28 +- vendor/brick/math/src/BigDecimal.php | 22 +- vendor/brick/math/src/BigInteger.php | 25 +- vendor/brick/math/src/BigNumber.php | 42 +- vendor/brick/math/src/BigRational.php | 16 +- vendor/brick/math/src/Internal/Calculator.php | 5 +- .../Internal/Calculator/BcMathCalculator.php | 26 +- .../Internal/Calculator/NativeCalculator.php | 28 +- .../commerceguys/intl/scripts/fetch_data.sh | 0 vendor/composer/ClassLoader.php | 32 + vendor/composer/InstalledVersions.php | 67 +- vendor/composer/autoload_classmap.php | 33 + vendor/composer/autoload_files.php | 1 + vendor/composer/autoload_psr4.php | 1 + vendor/composer/autoload_real.php | 2 +- vendor/composer/autoload_static.php | 42 + vendor/composer/installed.json | 237 +- vendor/composer/installed.php | 57 +- vendor/composer/platform_check.php | 4 +- vendor/phpseclib/phpseclib/AUTHORS | 6 + vendor/phpseclib/phpseclib/BACKERS.md | 8 + vendor/phpseclib/phpseclib/LICENSE | 20 + vendor/phpseclib/phpseclib/README.md | 94 + vendor/phpseclib/phpseclib/appveyor.yml | 27 + vendor/phpseclib/phpseclib/composer.json | 75 + .../phpseclib/phpseclib/Crypt/AES.php | 126 + .../phpseclib/phpseclib/Crypt/Base.php | 2699 ++ .../phpseclib/phpseclib/Crypt/Blowfish.php | 571 + .../phpseclib/phpseclib/Crypt/DES.php | 1443 + .../phpseclib/phpseclib/Crypt/Hash.php | 893 + .../phpseclib/phpseclib/Crypt/RC2.php | 688 + .../phpseclib/phpseclib/Crypt/RC4.php | 342 + .../phpseclib/phpseclib/Crypt/RSA.php | 3207 ++ .../phpseclib/phpseclib/Crypt/Random.php | 277 + .../phpseclib/phpseclib/Crypt/Rijndael.php | 936 + .../phpseclib/phpseclib/Crypt/TripleDES.php | 460 + .../phpseclib/phpseclib/Crypt/Twofish.php | 816 + .../phpseclib/phpseclib/File/ANSI.php | 577 + .../phpseclib/phpseclib/File/ASN1.php | 1415 + .../phpseclib/phpseclib/File/ASN1/Element.php | 47 + .../phpseclib/phpseclib/File/X509.php | 5094 +++ .../phpseclib/phpseclib/Math/BigInteger.php | 3787 +++ .../phpseclib/phpseclib/phpseclib/Net/SCP.php | 342 + .../phpseclib/phpseclib/Net/SFTP.php | 3231 ++ .../phpseclib/phpseclib/Net/SFTP/Stream.php | 794 + .../phpseclib/phpseclib/Net/SSH1.php | 1646 + .../phpseclib/phpseclib/Net/SSH2.php | 5153 +++ .../phpseclib/phpseclib/System/SSH/Agent.php | 351 + .../phpseclib/System/SSH/Agent/Identity.php | 241 + .../phpseclib/phpseclib/bootstrap.php | 16 + .../phpseclib/phpseclib/phpseclib/openssl.cnf | 6 + vendor/ramsey/collection/CHANGELOG.md | 120 - vendor/ramsey/collection/README.md | 148 +- vendor/ramsey/collection/SECURITY.md | 113 + vendor/ramsey/collection/composer.json | 10 +- .../ramsey/collection/src/AbstractArray.php | 37 +- .../collection/src/AbstractCollection.php | 268 +- vendor/ramsey/collection/src/AbstractSet.php | 24 +- .../ramsey/collection/src/ArrayInterface.php | 4 +- vendor/ramsey/collection/src/Collection.php | 8 +- .../collection/src/CollectionInterface.php | 53 +- .../collection/src/DoubleEndedQueue.php | 141 +- .../src/DoubleEndedQueueInterface.php | 31 +- vendor/ramsey/collection/src/GenericArray.php | 2 + .../ramsey/collection/src/Map/AbstractMap.php | 96 +- .../collection/src/Map/AbstractTypedMap.php | 22 +- .../src/Map/AssociativeArrayMap.php | 3 + .../collection/src/Map/MapInterface.php | 55 +- .../collection/src/Map/NamedParameterMap.php | 34 +- vendor/ramsey/collection/src/Map/TypedMap.php | 15 +- .../collection/src/Map/TypedMapInterface.php | 3 + vendor/ramsey/collection/src/Queue.php | 95 +- .../ramsey/collection/src/QueueInterface.php | 17 +- vendor/ramsey/collection/src/Set.php | 8 +- .../src/Tool/ValueExtractorTrait.php | 8 +- .../src/Tool/ValueToStringTrait.php | 7 +- vendor/sabre/dav/.gitignore | 40 - vendor/sabre/dav/.travis.yml | 2 +- vendor/sabre/dav/CHANGELOG.md | 2526 -- vendor/sabre/dav/CONTRIBUTING.md | 109 - vendor/sabre/dav/bin/build.php | 8 +- vendor/sabre/dav/bin/migrateto20.php | 5 +- vendor/sabre/dav/bin/migrateto21.php | 2 +- vendor/sabre/dav/bin/migrateto30.php | 2 +- vendor/sabre/dav/bin/migrateto32.php | 2 +- vendor/sabre/dav/bin/sabredav.php | 2 +- vendor/sabre/dav/composer.json | 2 +- vendor/sabre/dav/lib/CalDAV/Backend/PDO.php | 23 +- .../dav/lib/CalDAV/CalendarQueryValidator.php | 26 +- .../sabre/dav/lib/CalDAV/Schedule/Plugin.php | 1 + vendor/sabre/dav/lib/CalDAV/SharingPlugin.php | 4 - .../lib/CalDAV/Xml/Filter/CalendarData.php | 1 - vendor/sabre/dav/lib/CardDAV/Backend/PDO.php | 3 +- vendor/sabre/dav/lib/CardDAV/Plugin.php | 21 +- .../Xml/Request/AddressBookQueryReport.php | 1 - vendor/sabre/dav/lib/DAV/Browser/Plugin.php | 4 +- .../lib/DAV/Exception/MethodNotAllowed.php | 3 +- vendor/sabre/dav/lib/DAV/FSExt/File.php | 5 +- vendor/sabre/dav/lib/DAV/Server.php | 2 +- vendor/sabre/dav/lib/DAV/Sharing/Plugin.php | 1 - vendor/sabre/dav/lib/DAV/Tree.php | 2 + vendor/sabre/dav/lib/DAV/Version.php | 2 +- .../lib/DAV/Xml/Property/GetLastModified.php | 3 +- .../sabre/dav/lib/DAV/Xml/Property/Href.php | 3 - .../dav/lib/DAV/Xml/Property/ResourceType.php | 3 +- vendor/sabre/dav/phpstan.neon | 2 - .../Sabre/CalDAV/Backend/AbstractPDOTest.php | 1397 - .../Sabre/CalDAV/Backend/AbstractTest.php | 184 - .../dav/tests/Sabre/CalDAV/Backend/Mock.php | 247 - .../Sabre/CalDAV/Backend/PDOMySQLTest.php | 10 - .../Sabre/CalDAV/Backend/PDOSqliteTest.php | 10 - .../tests/Sabre/CalDAV/CalendarObjectTest.php | 351 - .../Sabre/CalDAV/CalendarQueryVAlarmTest.php | 121 - .../CalDAV/CalendarQueryValidatorTest.php | 823 - .../dav/tests/Sabre/CalDAV/CalendarTest.php | 229 - .../ExpandEventsDTSTARTandDTENDTest.php | 114 - .../ExpandEventsDTSTARTandDTENDbyDayTest.php | 104 - .../CalDAV/ExpandEventsDoubleEventsTest.php | 104 - .../tests/Sabre/CalDAV/FreeBusyReportTest.php | 158 - .../Sabre/CalDAV/GetEventsByTimerangeTest.php | 82 - .../Sabre/CalDAV/ICSExportPluginTest.php | 366 - .../dav/tests/Sabre/CalDAV/Issue166Test.php | 63 - .../dav/tests/Sabre/CalDAV/Issue172Test.php | 140 - .../dav/tests/Sabre/CalDAV/Issue203Test.php | 138 - .../dav/tests/Sabre/CalDAV/Issue205Test.php | 99 - .../dav/tests/Sabre/CalDAV/Issue211Test.php | 90 - .../dav/tests/Sabre/CalDAV/Issue220Test.php | 101 - .../dav/tests/Sabre/CalDAV/Issue228Test.php | 80 - .../CalDAV/Notifications/CollectionTest.php | 78 - .../Sabre/CalDAV/Notifications/NodeTest.php | 88 - .../dav/tests/Sabre/CalDAV/PluginTest.php | 1071 - .../Sabre/CalDAV/Principal/CollectionTest.php | 20 - .../Sabre/CalDAV/Principal/ProxyReadTest.php | 91 - .../Sabre/CalDAV/Principal/ProxyWriteTest.php | 39 - .../tests/Sabre/CalDAV/Principal/UserTest.php | 111 - .../Sabre/CalDAV/Schedule/OutboxTest.php | 47 - .../tests/Sabre/CalDAV/SharedCalendarTest.php | 172 - .../tests/Sabre/CalDAV/SharingPluginTest.php | 383 - .../sabre/dav/tests/Sabre/CalDAV/TestUtil.php | 102 - .../tests/Sabre/CalDAV/ValidateICalTest.php | 392 - .../Sabre/CardDAV/AbstractPluginTest.php | 43 - .../Sabre/CardDAV/AddressBookQueryTest.php | 351 - .../Sabre/CardDAV/AddressBookRootTest.php | 31 - .../tests/Sabre/CardDAV/AddressBookTest.php | 171 - .../Sabre/CardDAV/Backend/AbstractPDOTest.php | 351 - .../dav/tests/Sabre/CardDAV/Backend/Mock.php | 257 - .../Sabre/CardDAV/Backend/PDOMySQLTest.php | 10 - .../Sabre/CardDAV/Backend/PDOSqliteTest.php | 10 - .../dav/tests/Sabre/CardDAV/CardTest.php | 194 - .../tests/Sabre/CardDAV/IDirectoryTest.php | 28 - .../dav/tests/Sabre/CardDAV/MultiGetTest.php | 99 - .../dav/tests/Sabre/CardDAV/PluginTest.php | 101 - .../CardDAV/SogoStripContentTypeTest.php | 67 - .../dav/tests/Sabre/CardDAV/VCFExportTest.php | 130 - .../Sabre/CardDAV/ValidateFilterTest.php | 204 - .../tests/Sabre/CardDAV/ValidateVCardTest.php | 293 - .../dav/tests/Sabre/DAV/AbstractServer.php | 62 - .../DAV/Auth/Backend/AbstractBasicTest.php | 90 - .../DAV/Auth/Backend/AbstractDigestTest.php | 134 - .../DAV/Auth/Backend/AbstractPDOTest.php | 42 - .../Sabre/DAV/Auth/Backend/ApacheTest.php | 72 - .../tests/Sabre/DAV/Auth/Backend/FileTest.php | 38 - .../dav/tests/Sabre/DAV/Auth/Backend/Mock.php | 81 - .../Sabre/DAV/Auth/Backend/PDOMySQLTest.php | 10 - .../Sabre/DAV/Auth/Backend/PDOSqliteTest.php | 10 - .../dav/tests/Sabre/DAV/Auth/PluginTest.php | 127 - .../dav/tests/Sabre/DAV/BasicNodeTest.php | 124 - .../DAV/Browser/GuessContentTypeTest.php | 67 - .../DAV/Browser/MapGetToPropFindTest.php | 40 - .../tests/Sabre/DAV/Browser/PluginTest.php | 176 - .../sabre/dav/tests/Sabre/DAV/ClientMock.php | 36 - .../sabre/dav/tests/Sabre/DAV/ClientTest.php | 285 - .../tests/Sabre/DAV/Exception/LockedTest.php | 67 - .../DAV/Exception/PaymentRequiredTest.php | 14 - .../dav/tests/Sabre/DAV/ExceptionTest.php | 27 - .../dav/tests/Sabre/DAV/FSExt/FileTest.php | 99 - .../dav/tests/Sabre/DAV/FSExt/ServerTest.php | 252 - .../tests/Sabre/DAV/HTTPPreferParsingTest.php | 175 - .../dav/tests/Sabre/DAV/HttpDeleteTest.php | 131 - .../sabre/dav/tests/Sabre/DAV/HttpPutTest.php | 354 - .../sabre/dav/tests/Sabre/DAV/Issue33Test.php | 93 - .../Sabre/DAV/Locks/Backend/AbstractTest.php | 189 - .../Sabre/DAV/Locks/Backend/FileTest.php | 21 - .../Sabre/DAV/Locks/Backend/PDOMySQLTest.php | 10 - .../tests/Sabre/DAV/Locks/Backend/PDOTest.php | 20 - .../dav/tests/Sabre/DAV/Locks/MSWordTest.php | 119 - .../dav/tests/Sabre/DAV/Locks/PluginTest.php | 886 - .../dav/tests/Sabre/DAV/Mock/Collection.php | 157 - .../sabre/dav/tests/Sabre/DAV/Mock/File.php | 151 - .../dav/tests/Sabre/DAV/Mount/PluginTest.php | 54 - .../dav/tests/Sabre/DAV/ObjectTreeTest.php | 90 - .../Sabre/DAV/PartialUpdate/FileMock.php | 111 - .../Sabre/DAV/PartialUpdate/PluginTest.php | 122 - .../DAV/PartialUpdate/SpecificationTest.php | 90 - .../dav/tests/Sabre/DAV/ServerEventsTest.php | 114 - .../dav/tests/Sabre/DAV/ServerMKCOLTest.php | 354 - .../dav/tests/Sabre/DAV/ServerPluginTest.php | 96 - .../dav/tests/Sabre/DAV/ServerPropsTest.php | 194 - .../dav/tests/Sabre/DAV/ServerRangeTest.php | 252 - .../dav/tests/Sabre/DAV/ServerSimpleTest.php | 433 - .../Sabre/DAV/ServerUpdatePropertiesTest.php | 97 - .../dav/tests/Sabre/DAV/SimpleFileTest.php | 19 - .../dav/tests/Sabre/DAV/StringUtilTest.php | 119 - .../Sabre/DAV/TemporaryFileFilterTest.php | 204 - .../sabre/dav/tests/Sabre/DAV/TestPlugin.php | 35 - vendor/sabre/dav/tests/Sabre/DAV/TreeTest.php | 238 - .../dav/tests/Sabre/DAV/UUIDUtilTest.php | 24 - .../dav/tests/Sabre/DAVACL/ACLMethodTest.php | 311 - .../tests/Sabre/DAVACL/AllowAccessTest.php | 120 - .../tests/Sabre/DAVACL/BlockAccessTest.php | 180 - .../DAVACL/Exception/AceConflictTest.php | 37 - .../Exception/NeedPrivilegesExceptionTest.php | 47 - .../Sabre/DAVACL/Exception/NoAbstractTest.php | 37 - .../Exception/NotRecognizedPrincipalTest.php | 37 - .../Exception/NotSupportedPrivilegeTest.php | 37 - .../Sabre/DAVACL/ExpandPropertiesTest.php | 308 - .../dav/tests/Sabre/DAVACL/MockACLNode.php | 49 - .../dav/tests/Sabre/DAVACL/MockPrincipal.php | 58 - .../tests/Sabre/DAVACL/PluginAdminTest.php | 76 - .../Sabre/DAVACL/PluginPropertiesTest.php | 399 - .../DAVACL/PluginUpdatePropertiesTest.php | 111 - .../PrincipalBackend/AbstractPDOTest.php | 219 - .../Sabre/DAVACL/PrincipalBackend/Mock.php | 158 - .../DAVACL/PrincipalBackend/PDOMySQLTest.php | 10 - .../DAVACL/PrincipalBackend/PDOSqliteTest.php | 10 - .../Sabre/DAVACL/PrincipalCollectionTest.php | 55 - .../DAVACL/PrincipalPropertySearchTest.php | 389 - .../DAVACL/PrincipalSearchPropertySetTest.php | 135 - .../dav/tests/Sabre/DAVACL/PrincipalTest.php | 192 - .../tests/Sabre/DAVACL/SimplePluginTest.php | 302 - .../sabre/dav/tests/Sabre/DAVServerTest.php | 305 - .../dav/tests/Sabre/HTTP/ResponseMock.php | 23 - vendor/sabre/dav/tests/Sabre/TestUtil.php | 66 - vendor/sabre/dav/tests/bootstrap.php | 65 - vendor/sabre/vobject/.gitignore | 9 - vendor/sabre/vobject/.php_cs.dist | 12 - vendor/sabre/vobject/.travis.yml | 49 - vendor/sabre/vobject/CHANGELOG.md | 868 - .../vobject/bin/bench_freebusygenerator.php | 2 +- .../vobject/bin/bench_manipulatevcard.php | 2 +- .../sabre/vobject/bin/fetch_windows_zones.php | 5 +- .../vobject/bin/generateicalendardata.php | 4 +- vendor/sabre/vobject/bin/mergeduplicates.php | 4 +- vendor/sabre/vobject/bin/rrulebench.php | 2 +- vendor/sabre/vobject/composer.json | 3 +- vendor/sabre/vobject/lib/Cli.php | 9 +- vendor/sabre/vobject/lib/Component.php | 4 +- .../sabre/vobject/lib/Component/VCalendar.php | 2 +- vendor/sabre/vobject/lib/Component/VCard.php | 2 +- vendor/sabre/vobject/lib/FreeBusyData.php | 8 +- .../sabre/vobject/lib/FreeBusyGenerator.php | 3 +- vendor/sabre/vobject/lib/Parameter.php | 8 +- vendor/sabre/vobject/lib/Parser/MimeDir.php | 2 +- vendor/sabre/vobject/lib/Property/Boolean.php | 3 +- .../lib/Property/ICalendar/CalAddress.php | 3 +- .../lib/Property/ICalendar/DateTime.php | 2 +- .../vobject/lib/Property/IntegerValue.php | 3 +- .../lib/Property/VCard/LanguageTag.php | 3 +- .../sabre/vobject/lib/Recur/EventIterator.php | 2 +- .../sabre/vobject/lib/Recur/RRuleIterator.php | 12 +- vendor/sabre/vobject/lib/Version.php | 2 +- .../vobject/lib/timezonedata/windowszones.php | 17 +- vendor/sabre/vobject/phpstan.neon | 4 - vendor/sabre/vobject/tests/bootstrap.php | 15 - vendor/sabre/vobject/tests/phpunit.xml | 21 - vendor/simplepie/simplepie/.travis.yml | 0 .../simplepie/simplepie/library/SimplePie.php | 0 .../library/SimplePie/Cache/Memcached.php | 0 .../simplepie/library/SimplePie/Registry.php | 0 vendor/smarty/smarty/CHANGELOG.md | 17 + vendor/smarty/smarty/LICENSE | 2 +- vendor/smarty/smarty/composer.json | 2 +- .../lexer/smarty_internal_templateparser.y | 10 +- vendor/smarty/smarty/libs/Smarty.class.php | 7 +- vendor/smarty/smarty/libs/SmartyBC.class.php | 2 +- ...ernal_compile_private_special_variable.php | 4 +- .../smarty_internal_config_file_compiler.php | 4 +- .../smarty_internal_errorhandler.php | 2 +- .../smarty_internal_parsetree_template.php | 16 +- vendor/symfony/polyfill-ctype/bootstrap.php | 26 +- vendor/symfony/polyfill-ctype/bootstrap80.php | 46 + vendor/symfony/polyfill-ctype/composer.json | 2 +- .../twbs/bootstrap/.bundlewatch.config.json | 2 +- vendor/twbs/bootstrap/.eslintignore | 3 +- vendor/twbs/bootstrap/.eslintrc.json | 16 +- vendor/twbs/bootstrap/.github/CONTRIBUTING.md | 26 +- .../.github/workflows/browserstack.yml | 20 +- .../.github/workflows/bundlewatch.yml | 20 +- .../bootstrap/.github/workflows/codeql.yml | 19 +- .../twbs/bootstrap/.github/workflows/css.yml | 20 +- .../bootstrap/.github/workflows/dart-sass.yml | 16 +- .../twbs/bootstrap/.github/workflows/docs.yml | 52 +- .../twbs/bootstrap/.github/workflows/js.yml | 22 +- .../twbs/bootstrap/.github/workflows/lint.yml | 20 +- vendor/twbs/bootstrap/.gitignore | 8 - vendor/twbs/bootstrap/.stylelintignore | 1 + vendor/twbs/bootstrap/.stylelintrc | 4 + vendor/twbs/bootstrap/CODE_OF_CONDUCT.md | 5 +- vendor/twbs/bootstrap/Gemfile | 9 - vendor/twbs/bootstrap/LICENSE | 4 +- vendor/twbs/bootstrap/README.md | 26 +- vendor/twbs/bootstrap/_config.yml | 74 - vendor/twbs/bootstrap/build/build-plugins.js | 8 +- vendor/twbs/bootstrap/build/change-version.js | 4 +- vendor/twbs/bootstrap/build/generate-sri.js | 12 +- vendor/twbs/bootstrap/build/postcss.config.js | 24 +- vendor/twbs/bootstrap/build/rollup.config.js | 2 +- vendor/twbs/bootstrap/build/vnu-jar.js | 4 +- vendor/twbs/bootstrap/build/zip-examples.js | 75 +- vendor/twbs/bootstrap/config.yml | 79 + .../bootstrap/dist/css/bootstrap-grid.css | 6 +- .../bootstrap/dist/css/bootstrap-grid.css.map | 2 +- .../bootstrap/dist/css/bootstrap-grid.min.css | 6 +- .../dist/css/bootstrap-grid.min.css.map | 2 +- .../bootstrap/dist/css/bootstrap-reboot.css | 13 +- .../dist/css/bootstrap-reboot.css.map | 2 +- .../dist/css/bootstrap-reboot.min.css | 8 +- .../dist/css/bootstrap-reboot.min.css.map | 2 +- vendor/twbs/bootstrap/dist/css/bootstrap.css | 133 +- .../twbs/bootstrap/dist/css/bootstrap.css.map | 2 +- .../twbs/bootstrap/dist/css/bootstrap.min.css | 8 +- .../bootstrap/dist/css/bootstrap.min.css.map | 2 +- .../bootstrap/dist/js/bootstrap.bundle.js | 126 +- .../bootstrap/dist/js/bootstrap.bundle.js.map | 2 +- .../bootstrap/dist/js/bootstrap.bundle.min.js | 6 +- .../dist/js/bootstrap.bundle.min.js.map | 2 +- vendor/twbs/bootstrap/dist/js/bootstrap.js | 126 +- .../twbs/bootstrap/dist/js/bootstrap.js.map | 2 +- .../twbs/bootstrap/dist/js/bootstrap.min.js | 6 +- .../bootstrap/dist/js/bootstrap.min.js.map | 2 +- vendor/twbs/bootstrap/js/dist/alert.js | 25 +- vendor/twbs/bootstrap/js/dist/alert.js.map | 2 +- vendor/twbs/bootstrap/js/dist/button.js | 23 +- vendor/twbs/bootstrap/js/dist/button.js.map | 2 +- vendor/twbs/bootstrap/js/dist/carousel.js | 72 +- vendor/twbs/bootstrap/js/dist/carousel.js.map | 2 +- vendor/twbs/bootstrap/js/dist/collapse.js | 43 +- vendor/twbs/bootstrap/js/dist/collapse.js.map | 2 +- vendor/twbs/bootstrap/js/dist/dropdown.js | 49 +- vendor/twbs/bootstrap/js/dist/dropdown.js.map | 2 +- vendor/twbs/bootstrap/js/dist/index.js | 2 +- vendor/twbs/bootstrap/js/dist/modal.js | 97 +- vendor/twbs/bootstrap/js/dist/modal.js.map | 2 +- vendor/twbs/bootstrap/js/dist/popover.js | 49 +- vendor/twbs/bootstrap/js/dist/popover.js.map | 2 +- vendor/twbs/bootstrap/js/dist/scrollspy.js | 43 +- .../twbs/bootstrap/js/dist/scrollspy.js.map | 2 +- vendor/twbs/bootstrap/js/dist/tab.js | 25 +- vendor/twbs/bootstrap/js/dist/tab.js.map | 2 +- vendor/twbs/bootstrap/js/dist/toast.js | 43 +- vendor/twbs/bootstrap/js/dist/toast.js.map | 2 +- vendor/twbs/bootstrap/js/dist/tooltip.js | 56 +- vendor/twbs/bootstrap/js/dist/tooltip.js.map | 2 +- vendor/twbs/bootstrap/js/dist/util.js | 6 +- vendor/twbs/bootstrap/js/dist/util.js.map | 2 +- vendor/twbs/bootstrap/js/index.js | 34 + vendor/twbs/bootstrap/js/src/alert.js | 4 +- vendor/twbs/bootstrap/js/src/button.js | 4 +- vendor/twbs/bootstrap/js/src/carousel.js | 32 +- vendor/twbs/bootstrap/js/src/collapse.js | 4 +- vendor/twbs/bootstrap/js/src/dropdown.js | 10 +- vendor/twbs/bootstrap/js/src/index.js | 34 - vendor/twbs/bootstrap/js/src/modal.js | 68 +- vendor/twbs/bootstrap/js/src/popover.js | 4 +- vendor/twbs/bootstrap/js/src/scrollspy.js | 4 +- vendor/twbs/bootstrap/js/src/tab.js | 4 +- vendor/twbs/bootstrap/js/src/toast.js | 4 +- .../twbs/bootstrap/js/src/tools/sanitizer.js | 2 +- vendor/twbs/bootstrap/js/src/tooltip.js | 9 +- vendor/twbs/bootstrap/js/src/util.js | 2 +- vendor/twbs/bootstrap/nuget/bootstrap.nuspec | 2 +- .../bootstrap/nuget/bootstrap.sass.nuspec | 2 +- vendor/twbs/bootstrap/package-lock.json | 5545 ++-- vendor/twbs/bootstrap/package.js | 16 +- vendor/twbs/bootstrap/package.json | 119 +- vendor/twbs/bootstrap/scss/_breadcrumb.scss | 4 +- vendor/twbs/bootstrap/scss/_carousel.scss | 2 +- vendor/twbs/bootstrap/scss/_custom-forms.scss | 6 +- vendor/twbs/bootstrap/scss/_dropdown.scss | 2 +- vendor/twbs/bootstrap/scss/_input-group.scss | 24 +- vendor/twbs/bootstrap/scss/_nav.scss | 5 +- vendor/twbs/bootstrap/scss/_navbar.scss | 12 +- vendor/twbs/bootstrap/scss/_pagination.scss | 4 +- vendor/twbs/bootstrap/scss/_progress.scss | 2 +- vendor/twbs/bootstrap/scss/_reboot.scss | 16 +- vendor/twbs/bootstrap/scss/_root.scss | 1 - vendor/twbs/bootstrap/scss/_spinners.scss | 13 +- vendor/twbs/bootstrap/scss/_type.scss | 2 +- vendor/twbs/bootstrap/scss/_variables.scss | 12 +- .../twbs/bootstrap/scss/bootstrap-grid.scss | 7 +- .../twbs/bootstrap/scss/bootstrap-reboot.scss | 6 +- vendor/twbs/bootstrap/scss/bootstrap.scss | 6 +- vendor/twbs/bootstrap/scss/mixins/_forms.scss | 9 +- vendor/twbs/bootstrap/scss/mixins/_image.scss | 2 +- vendor/twbs/bootstrap/site/.eslintrc.json | 4 +- .../bootstrap/site/_data/docs-versions.yml | 46 - .../twbs/bootstrap/site/_includes/bugify.html | 42 - .../callout-info-prefersreducedmotion.md | 4 - .../bootstrap/site/_includes/callout.html | 9 - .../bootstrap/site/_includes/docs-navbar.html | 70 - .../site/_includes/docs-sidebar.html | 43 - .../bootstrap/site/_includes/example.html | 51 - .../bootstrap/site/_includes/favicons.html | 9 - .../twbs/bootstrap/site/_includes/footer.html | 12 - .../twbs/bootstrap/site/_includes/header.html | 23 - .../site/_includes/icons/bootstrap-stack.svg | 1 - .../site/_includes/icons/bootstrap.svg | 1 - .../site/_includes/icons/circle-square.svg | 4 - .../site/_includes/icons/cloud-fill.svg | 3 - .../site/_includes/icons/droplet-fill.svg | 3 - .../bootstrap/site/_includes/icons/github.svg | 1 - .../bootstrap/site/_includes/icons/menu.svg | 1 - .../site/_includes/icons/opencollective.svg | 1 - .../site/_includes/icons/placeholder.svg | 35 - .../bootstrap/site/_includes/icons/slack.svg | 1 - .../site/_includes/icons/twitter.svg | 1 - .../bootstrap/site/_includes/scripts.html | 23 - .../twbs/bootstrap/site/_includes/social.html | 17 - .../bootstrap/site/_includes/stylesheet.html | 16 - .../twbs/bootstrap/site/_layouts/default.html | 22 - vendor/twbs/bootstrap/site/_layouts/docs.html | 37 - .../bootstrap/site/_layouts/examples.html | 56 - .../twbs/bootstrap/site/_layouts/simple.html | 21 - .../js/src => assets/js}/application.js | 13 +- .../js}/ie-emulation-modes-warning.js | 0 .../4.5/assets/js/src => assets/js}/search.js | 5 +- .../site/assets/js/vendor/anchor.min.js | 9 + .../js/vendor/bs-custom-file-input.min.js | 0 .../assets/js/vendor/clipboard.min.js | 0 .../site/{docs/4.5 => }/assets/scss/_ads.scss | 0 .../{docs/4.5 => }/assets/scss/_algolia.scss | 0 .../{docs/4.5 => }/assets/scss/_anchor.scss | 1 + .../{docs/4.5 => }/assets/scss/_brand.scss | 0 .../4.5 => }/assets/scss/_browser-bugs.scss | 0 .../{docs/4.5 => }/assets/scss/_buttons.scss | 0 .../{docs/4.5 => }/assets/scss/_callouts.scss | 0 .../4.5 => }/assets/scss/_clipboard-js.scss | 3 +- .../{docs/4.5 => }/assets/scss/_colors.scss | 0 .../assets/scss/_component-examples.scss | 4 - .../{docs/4.5 => }/assets/scss/_content.scss | 0 .../{docs/4.5 => }/assets/scss/_footer.scss | 0 .../{docs/4.5 => }/assets/scss/_masthead.scss | 6 - .../site/{docs/4.5 => }/assets/scss/_nav.scss | 0 .../assets/scss/_placeholder-img.scss | 0 .../{docs/4.5 => }/assets/scss/_sidebar.scss | 53 +- .../{docs/4.5 => }/assets/scss/_skippy.scss | 0 .../bootstrap/site/assets/scss/_syntax.scss | 102 + .../twbs/bootstrap/site/assets/scss/_toc.scss | 54 + .../4.5 => }/assets/scss/_variables.scss | 0 .../site/{docs/4.5 => }/assets/scss/docs.scss | 11 +- .../site/content/docs/4.6/_index.html | 5 + .../4.5 => content/docs/4.6}/about/brand.md | 10 +- .../4.5 => content/docs/4.6}/about/license.md | 4 +- .../docs/4.6}/about/overview.md | 8 +- .../site/content/docs/4.6/about/team.md | 23 + .../docs/4.6}/about/translations.md | 8 +- .../4.5 => content/docs/4.6}/browser-bugs.md | 51 +- .../docs/4.6}/components/alerts.md | 68 +- .../docs/4.6}/components/badge.md | 52 +- .../docs/4.6}/components/breadcrumb.md | 5 +- .../docs/4.6}/components/button-group.md | 35 +- .../docs/4.6}/components/buttons.md | 87 +- .../docs/4.6}/components/card.md | 329 +- .../docs/4.6}/components/carousel.md | 133 +- .../docs/4.6}/components/collapse.md | 51 +- .../docs/4.6}/components/dropdowns.md | 266 +- .../docs/4.6}/components/forms.md | 409 +- .../docs/4.6}/components/input-group.md | 61 +- .../docs/4.6}/components/jumbotron.md | 10 +- .../docs/4.6}/components/list-group.md | 256 +- .../docs/4.6/components/media-object.md | 136 + .../docs/4.6}/components/modal.md | 161 +- .../docs/4.6}/components/navbar.md | 203 +- .../docs/4.6}/components/navs.md | 174 +- .../docs/4.6}/components/pagination.md | 59 +- .../docs/4.6}/components/popovers.md | 164 +- .../docs/4.6}/components/progress.md | 41 +- .../docs/4.6}/components/scrollspy.md | 82 +- .../docs/4.6}/components/spinners.md | 106 +- .../docs/4.6}/components/toasts.md | 133 +- .../docs/4.6}/components/tooltips.md | 120 +- .../4.5 => content/docs/4.6}/content/code.md | 25 +- .../docs/4.6}/content/figures.md | 16 +- .../site/content/docs/4.6/content/images.md | 60 + .../docs/4.6}/content/reboot.md | 96 +- .../docs/4.6}/content/tables.md | 152 +- .../docs/4.6}/content/typography.md | 139 +- .../docs/4.6}/examples/.stylelintrc | 0 .../site/content/docs/4.6/examples/_index.md | 31 + .../docs/4.6}/examples/album/album.css | 0 .../docs/4.6}/examples/album/index.html | 23 +- .../docs/4.6}/examples/blog/blog.css | 0 .../docs/4.6}/examples/blog/index.html | 55 +- .../docs/4.6}/examples/carousel/carousel.css | 0 .../docs/4.6}/examples/carousel/index.html | 53 +- .../examples/checkout/form-validation.css | 0 .../4.6}/examples/checkout/form-validation.js | 0 .../docs/4.6}/examples/checkout/index.html | 10 +- .../docs/4.6}/examples/cover/cover.css | 0 .../docs/4.6}/examples/cover/index.html | 3 +- .../4.6}/examples/dashboard/dashboard.css | 0 .../docs/4.6}/examples/dashboard/dashboard.js | 0 .../docs/4.6}/examples/dashboard/index.html | 135 +- .../floating-labels/floating-labels.css | 7 + .../4.6}/examples/floating-labels/index.html | 9 +- .../docs/4.6}/examples/grid/grid.css | 0 .../docs/4.6}/examples/grid/index.html | 3 +- .../docs/4.6}/examples/jumbotron/index.html | 11 +- .../4.6}/examples/jumbotron/jumbotron.css | 0 .../4.6}/examples/navbar-bottom/index.html | 2 +- .../4.6}/examples/navbar-fixed/index.html | 5 +- .../navbar-fixed/navbar-top-fixed.css | 0 .../4.6}/examples/navbar-static/index.html | 5 +- .../examples/navbar-static/navbar-top.css | 0 .../docs/4.6}/examples/navbars/index.html | 7 +- .../docs/4.6}/examples/navbars/navbar.css | 0 .../docs/4.6}/examples/offcanvas/index.html | 26 +- .../4.6}/examples/offcanvas/offcanvas.css | 0 .../docs/4.6}/examples/offcanvas/offcanvas.js | 0 .../docs/4.6}/examples/pricing/index.html | 7 +- .../docs/4.6}/examples/pricing/pricing.css | 0 .../docs/4.6}/examples/product/index.html | 5 +- .../docs/4.6}/examples/product/product.css | 0 .../docs/4.6}/examples/sign-in/index.html | 7 +- .../docs/4.6}/examples/sign-in/signin.css | 0 .../4.6}/examples/starter-template/index.html | 3 +- .../starter-template/starter-template.css | 0 .../examples/sticky-footer-navbar/index.html | 5 +- .../sticky-footer-navbar.css | 0 .../4.6}/examples/sticky-footer/index.html | 5 +- .../examples/sticky-footer/sticky-footer.css | 0 .../4.6}/getting-started/accessibility.md | 10 +- .../4.6}/getting-started/best-practices.md | 5 +- .../4.6}/getting-started/browsers-devices.md | 34 +- .../docs/4.6/getting-started/build-tools.md | 65 + .../docs/4.6}/getting-started/contents.md | 21 +- .../docs/4.6/getting-started/download.md | 119 + .../docs/4.6/getting-started/introduction.md | 176 + .../docs/4.6}/getting-started/javascript.md | 74 +- .../docs/4.6}/getting-started/theming.md | 219 +- .../docs/4.6}/getting-started/webpack.md | 30 +- .../4.5 => content/docs/4.6}/layout/grid.md | 232 +- .../docs/4.6}/layout/overview.md | 58 +- .../docs/4.6/layout/utilities-for-layout.md | 25 + .../4.5 => content/docs/4.6}/migration.md | 24 +- .../content/docs/4.6/utilities/borders.md | 69 + .../docs/4.6}/utilities/clearfix.md | 13 +- .../docs/4.6}/utilities/close-icon.md | 5 +- .../docs/4.6}/utilities/colors.md | 56 +- .../docs/4.6}/utilities/display.md | 22 +- .../docs/4.6}/utilities/embed.md | 13 +- .../docs/4.6}/utilities/flex.md | 237 +- .../docs/4.6}/utilities/float.md | 27 +- .../docs/4.6}/utilities/image-replacement.md | 19 +- .../docs/4.6}/utilities/interactions.md | 7 +- .../docs/4.6}/utilities/overflow.md | 4 +- .../docs/4.6}/utilities/position.md | 16 +- .../docs/4.6}/utilities/screen-readers.md | 13 +- .../docs/4.6}/utilities/shadows.md | 5 +- .../docs/4.6}/utilities/sizing.md | 26 +- .../docs/4.6}/utilities/spacing.md | 17 +- .../docs/4.6}/utilities/stretched-link.md | 34 +- .../docs/4.6}/utilities/text.md | 57 +- .../docs/4.6}/utilities/vertical-align.md | 10 +- .../docs/4.6}/utilities/visibility.md | 8 +- .../bootstrap/site/content/docs/_index.html | 5 + .../bootstrap/site/content/docs/versions.md | 28 + .../site/{_data => data}/breakpoints.yml | 0 .../site/{_data => data}/browser-bugs.yml | 2 +- .../site/{_data => data}/browser-features.yml | 6 +- .../bootstrap/site/{_data => data}/colors.yml | 2 +- .../site/{_data => data}/core-team.yml | 0 .../bootstrap/site/data/docs-versions.yml | 53 + .../site/{_data => data}/examples.yml | 2 +- .../bootstrap/site/{_data => data}/grays.yml | 2 +- .../site/{_data/nav.yml => data/sidebar.yml} | 0 .../site/{_data => data}/theme-colors.yml | 0 .../site/{_data => data}/translations.yml | 5 + .../bootstrap/site/docs/4.5/about/team.md | 21 - .../site/docs/4.5/assets/css/docs.min.css | 8 - .../site/docs/4.5/assets/css/docs.min.css.map | 1 - .../site/docs/4.5/assets/js/docs.min.js | 22 - .../docs/4.5/assets/js/vendor/anchor.min.js | 9 - .../site/docs/4.5/assets/scss/_syntax.scss | 78 - .../site/docs/4.5/components/media-object.md | 144 - .../bootstrap/site/docs/4.5/content/images.md | 84 - .../site/docs/4.5/examples/index.html | 44 - .../docs/4.5/getting-started/build-tools.md | 58 - .../site/docs/4.5/getting-started/download.md | 115 - .../docs/4.5/getting-started/introduction.md | 166 - .../docs/4.5/layout/utilities-for-layout.md | 25 - .../site/docs/4.5/utilities/borders.md | 91 - vendor/twbs/bootstrap/site/docs/versions.html | 30 - vendor/twbs/bootstrap/site/index.html | 124 - .../bootstrap/site/layouts/_default/docs.html | 37 + .../site/layouts/_default/examples.html | 60 + .../site/layouts/_default/redirect.html | 11 + .../site/layouts/_default/single.html | 52 + vendor/twbs/bootstrap/site/layouts/alias.html | 11 + .../{_includes => layouts/partials}/ads.html | 0 .../partials}/analytics.html | 0 .../site/layouts/partials/bugify.html | 40 + .../partials}/callout-danger-async-methods.md | 5 +- .../callout-info-mediaqueries-breakpoints.md | 3 - .../partials/callout-info-npm-starter.md | 1 + .../callout-info-prefersreducedmotion.md | 1 + ...ut-warning-color-assistive-technologies.md | 3 - .../site/layouts/partials/docs-navbar.html | 72 + .../site/layouts/partials/docs-sidebar.html | 45 + .../site/layouts/partials/favicons.html | 9 + .../site/layouts/partials/footer.html | 12 + .../site/layouts/partials/header.html | 21 + .../partials/home/masthead-followup.html | 90 + .../site/layouts/partials/home/masthead.html | 23 + .../partials/icons/bootstrap-stack.svg | 1 + .../site/layouts/partials/icons/bootstrap.svg | 1 + .../layouts/partials/icons/circle-square.svg | 4 + .../layouts/partials/icons/cloud-fill.svg | 3 + .../partials}/icons/code.svg | 2 +- .../layouts/partials/icons/droplet-fill.svg | 3 + .../site/layouts/partials/icons/github.svg | 1 + .../site/layouts/partials/icons/menu.svg | 1 + .../layouts/partials/icons/opencollective.svg | 1 + .../site/layouts/partials/icons/slack.svg | 1 + .../site/layouts/partials/icons/twitter.svg | 1 + .../site/layouts/partials/scripts.html | 23 + .../partials}/skippy.html | 6 +- .../site/layouts/partials/social.html | 17 + .../site/layouts/partials/stylesheet.html | 25 + vendor/twbs/bootstrap/site/layouts/robots.txt | 12 + .../site/layouts/shortcodes/callout.html | 10 + .../site/layouts/shortcodes/docsref.html | 1 + .../site/layouts/shortcodes/example.html | 26 + .../site/layouts/shortcodes/markdown.html | 1 + .../site/layouts/shortcodes/param.html | 12 + .../site/layouts/shortcodes/partial.html | 1 + .../site/layouts/shortcodes/placeholder.html | 30 + .../site/layouts/shortcodes/year.html | 5 + .../twbs/bootstrap/site/layouts/sitemap.xml | 10 + vendor/twbs/bootstrap/site/robots.txt | 11 - vendor/twbs/bootstrap/{ => site/static}/CNAME | 0 .../4.6}/assets/brand/bootstrap-outline.svg | 0 .../4.6}/assets/brand/bootstrap-punchout.svg | 0 .../assets/brand/bootstrap-social-logo.png | Bin .../4.6}/assets/brand/bootstrap-social.png | Bin .../4.6}/assets/brand/bootstrap-solid.svg | 0 .../docs/4.6}/assets/img/bootstrap-icons.png | Bin .../4.6}/assets/img/bootstrap-icons@2x.png | Bin .../assets/img/bootstrap-themes-collage.png | Bin .../img/bootstrap-themes-collage@2x.png | Bin .../docs/4.6}/assets/img/bootstrap-themes.png | Bin .../4.6}/assets/img/bootstrap-themes@2x.png | Bin .../docs/4.6}/assets/img/examples/album.png | Bin .../4.6}/assets/img/examples/album@2x.png | Bin .../docs/4.6}/assets/img/examples/blog.png | Bin .../docs/4.6}/assets/img/examples/blog@2x.png | Bin .../4.6}/assets/img/examples/carousel.png | Bin .../4.6}/assets/img/examples/carousel@2x.png | Bin .../4.6}/assets/img/examples/checkout.png | Bin .../4.6}/assets/img/examples/checkout@2x.png | Bin .../docs/4.6}/assets/img/examples/cover.png | Bin .../4.6}/assets/img/examples/cover@2x.png | Bin .../4.6}/assets/img/examples/dashboard.png | Bin .../4.6}/assets/img/examples/dashboard@2x.png | Bin .../assets/img/examples/floating-labels.png | Bin .../img/examples/floating-labels@2x.png | Bin .../docs/4.6}/assets/img/examples/grid.png | Bin .../docs/4.6}/assets/img/examples/grid@2x.png | Bin .../4.6}/assets/img/examples/jumbotron.png | Bin .../4.6}/assets/img/examples/jumbotron@2x.png | Bin .../assets/img/examples/navbar-bottom.png | Bin .../assets/img/examples/navbar-bottom@2x.png | Bin .../4.6}/assets/img/examples/navbar-fixed.png | Bin .../assets/img/examples/navbar-fixed@2x.png | Bin .../assets/img/examples/navbar-static.png | Bin .../assets/img/examples/navbar-static@2x.png | Bin .../docs/4.6}/assets/img/examples/navbars.png | Bin .../4.6}/assets/img/examples/navbars@2x.png | Bin .../4.6}/assets/img/examples/offcanvas.png | Bin .../4.6}/assets/img/examples/offcanvas@2x.png | Bin .../docs/4.6}/assets/img/examples/pricing.png | Bin .../4.6}/assets/img/examples/pricing@2x.png | Bin .../docs/4.6}/assets/img/examples/product.png | Bin .../4.6}/assets/img/examples/product@2x.png | Bin .../docs/4.6}/assets/img/examples/sign-in.png | Bin .../4.6}/assets/img/examples/sign-in@2x.png | Bin .../assets/img/examples/starter-template.png | Bin .../img/examples/starter-template@2x.png | Bin .../img/examples/sticky-footer-navbar.png | Bin .../img/examples/sticky-footer-navbar@2x.png | Bin .../assets/img/examples/sticky-footer.png | Bin .../assets/img/examples/sticky-footer@2x.png | Bin .../img/favicons/android-chrome-192x192.png | Bin .../img/favicons/android-chrome-512x512.png | Bin .../assets/img/favicons/apple-touch-icon.png | Bin .../assets/img/favicons/browserconfig.xml | 4 +- .../assets/img/favicons/favicon-16x16.png | Bin .../assets/img/favicons/favicon-32x32.png | Bin .../4.6}/assets/img/favicons/manifest.json | 6 +- .../assets/img/favicons/mstile-144x144.png | Bin .../assets/img/favicons/mstile-150x150.png | Bin .../assets/img/favicons/mstile-310x150.png | Bin .../assets/img/favicons/mstile-310x310.png | Bin .../4.6}/assets/img/favicons/mstile-70x70.png | Bin .../assets/img/favicons/safari-pinned-tab.svg | 0 .../4.6}/assets/js/vendor/jquery.slim.min.js | 0 vendor/twbs/bootstrap/site/{ => static}/sw.js | 0 view/css/conversation.css | 8 +- view/es-es/hmessages.po | 27534 ++++++++-------- view/es-es/hstrings.php | 6217 ++-- view/js/autocomplete.js | 2 +- view/js/main.js | 9 +- view/js/mod_help.js | 18 +- view/js/sse_worker.js | 0 view/php/default.php | 4 +- view/php/theme_init.php | 1 - view/pl/cert_bad_eml.tpl | 19 + view/pl/cron_bad_eml.tpl | 16 + view/pl/hmessages.po | 16452 +++++++++ view/pl/hmessages.pot | 15710 +++++++++ view/pl/hstrings.php | 3573 ++ view/pl/htconfig.tpl | 111 + view/pl/lostpass_eml.tpl | 33 + view/pl/passchanged_eml.tpl | 23 + view/pl/register_open_eml.tpl | 18 + view/pl/register_verify_eml.tpl | 24 + view/pl/register_verify_member.tpl | 33 + view/pl/update_fail_eml.tpl | 22 + view/ru/hmessages.po | 24261 +++++++------- view/ru/hstrings.php | 5480 +-- view/theme/redbasic/js/redbasic.js | 88 +- view/theme/redbasic/php/theme_init.php | 2 - view/tpl/404.tpl | 0 view/tpl/abook_edit.tpl | 0 view/tpl/acl_selector.tpl | 0 view/tpl/admin_accounts.tpl | 0 view/tpl/admin_aside.tpl | 0 view/tpl/admin_channels.tpl | 0 view/tpl/admin_logs.tpl | 0 view/tpl/admin_plugins.tpl | 0 view/tpl/admin_plugins_details.tpl | 0 view/tpl/admin_security.tpl | 0 view/tpl/admin_site.tpl | 0 view/tpl/admin_summary.tpl | 0 view/tpl/album_edit.tpl | 0 view/tpl/atom_feed.tpl | 0 view/tpl/build_query.tpl | 6 +- view/tpl/cal_calendar.tpl | 0 view/tpl/cal_event.tpl | 0 view/tpl/categories_widget.tpl | 0 view/tpl/channel.tpl | 0 view/tpl/channel_import.tpl | 0 view/tpl/channel_rename.tpl | 0 view/tpl/channels.tpl | 0 view/tpl/chanview.tpl | 0 view/tpl/comment_item.tpl | 0 view/tpl/common_friends.tpl | 0 view/tpl/common_pills.tpl | 0 view/tpl/common_tabs.tpl | 0 view/tpl/connection_template.tpl | 0 view/tpl/connections.tpl | 0 view/tpl/contact_block.tpl | 0 view/tpl/contact_slider.tpl | 0 view/tpl/contact_template.tpl | 0 view/tpl/conv.tpl | 0 view/tpl/conv_frame.tpl | 0 view/tpl/conv_item.tpl | 4 +- view/tpl/conv_list.tpl | 2 +- view/tpl/conversation.tpl | 0 view/tpl/convobj.tpl | 0 view/tpl/cover_photo.tpl | 0 view/tpl/cover_photo_widget.tpl | 0 view/tpl/cropbody.tpl | 0 view/tpl/cropcover.tpl | 0 view/tpl/crophead.tpl | 0 view/tpl/defperms.tpl | 0 view/tpl/directory_header.tpl | 3 +- view/tpl/direntry.tpl | 0 view/tpl/edpost_head.tpl | 0 view/tpl/email_notify_html.tpl | 0 view/tpl/email_notify_text.tpl | 0 view/tpl/event.tpl | 0 view/tpl/event_form.tpl | 0 view/tpl/event_head.tpl | 0 view/tpl/event_item_header.tpl | 0 view/tpl/events-js.tpl | 0 view/tpl/events_cal-js.tpl | 0 view/tpl/events_tools_side.tpl | 0 view/tpl/failed_updates.tpl | 0 view/tpl/field.tpl | 0 view/tpl/field_acheckbox.tpl | 0 view/tpl/field_combobox.tpl | 0 view/tpl/field_custom.tpl | 0 view/tpl/field_intcheckbox.tpl | 0 view/tpl/field_password.tpl | 0 view/tpl/field_radio.tpl | 0 view/tpl/field_richtext.tpl | 0 view/tpl/field_select_raw.tpl | 0 view/tpl/field_textarea.tpl | 0 view/tpl/field_themeselect.tpl | 0 view/tpl/field_yesno.tpl | 0 view/tpl/fileas_widget.tpl | 0 view/tpl/filebrowser.tpl | 0 view/tpl/filer_dialog.tpl | 0 view/tpl/follow.tpl | 0 view/tpl/generic_links_widget.tpl | 0 view/tpl/group_edit.tpl | 0 view/tpl/group_selection.tpl | 0 view/tpl/group_side.tpl | 0 view/tpl/groupeditor.tpl | 0 view/tpl/head.tpl | 0 view/tpl/hq.tpl | 0 view/tpl/hq_controls.tpl | 0 view/tpl/install.tpl | 0 view/tpl/install_checks.tpl | 0 view/tpl/install_db.tpl | 0 view/tpl/install_settings.tpl | 0 view/tpl/invite.tpl | 0 view/tpl/item_import.tpl | 0 view/tpl/jot-header.tpl | 0 view/tpl/jot.tpl | 8 + view/tpl/jot_geotag.tpl | 0 view/tpl/js_strings.tpl | 0 view/tpl/lang_selector.tpl | 0 view/tpl/like_noshare.tpl | 0 view/tpl/login.tpl | 0 view/tpl/logout.tpl | 0 view/tpl/lostpass.tpl | 0 view/tpl/mail_conv.tpl | 0 view/tpl/mail_display.tpl | 0 view/tpl/mail_head.tpl | 0 view/tpl/mail_list.tpl | 0 view/tpl/main_slider.tpl | 0 view/tpl/message_side.tpl | 0 view/tpl/micropro_img.tpl | 0 view/tpl/micropro_txt.tpl | 0 view/tpl/mood_content.tpl | 0 view/tpl/msg-header.tpl | 0 view/tpl/myapps.tpl | 0 view/tpl/navbar_default.tpl | 0 view/tpl/navbar_tucson.tpl | 0 view/tpl/new_channel.tpl | 0 view/tpl/notes.tpl | 1 - view/tpl/notifications.tpl | 0 view/tpl/notifications_widget.tpl | 4 +- view/tpl/notify.tpl | 0 view/tpl/oauth.tpl | 0 view/tpl/oauth2.tpl | 0 view/tpl/oauth2_edit.tpl | 0 view/tpl/oauth_authorize.tpl | 0 view/tpl/oauth_authorize_done.tpl | 0 view/tpl/oauth_edit.tpl | 0 view/tpl/oembed_video.tpl | 0 view/tpl/oexchange_xrd.tpl | 0 view/tpl/page_display.tpl | 0 view/tpl/peoplefind.tpl | 0 view/tpl/photo_album.tpl | 5 +- view/tpl/photo_album_portfolio.tpl | 0 view/tpl/photo_albums.tpl | 0 view/tpl/photo_drop.tpl | 0 view/tpl/photo_item.tpl | 0 view/tpl/photo_portfolio.tpl | 0 view/tpl/photo_top.tpl | 0 view/tpl/photo_view.tpl | 0 view/tpl/photos_recent.tpl | 5 +- view/tpl/photos_upload.tpl | 0 view/tpl/photosajax.tpl | 0 view/tpl/poco_entry_xml.tpl | 0 view/tpl/poco_xml.tpl | 0 view/tpl/poke_content.tpl | 0 view/tpl/posted_date_widget.tpl | 0 view/tpl/profed_head.tpl | 0 view/tpl/profile_advanced.tpl | 0 view/tpl/profile_edit.tpl | 0 view/tpl/profile_entry.tpl | 0 view/tpl/profile_listing_header.tpl | 0 view/tpl/profile_photo.tpl | 0 view/tpl/profile_vcard.tpl | 0 view/tpl/profile_vcard_short.tpl | 0 view/tpl/prv_message.tpl | 0 view/tpl/pwdreset.tpl | 0 view/tpl/register.tpl | 0 view/tpl/remote_friends_common.tpl | 0 view/tpl/removeme.tpl | 0 view/tpl/rmagic.tpl | 0 view/tpl/search_item.tpl | 2 +- view/tpl/settings.tpl | 0 view/tpl/settings_account.tpl | 0 view/tpl/settings_addons.tpl | 0 view/tpl/settings_display.tpl | 0 view/tpl/settings_features.tpl | 0 view/tpl/settings_module.tpl | 0 view/tpl/settings_nick_set.tpl | 0 view/tpl/siteinfo.tpl | 0 view/tpl/suggest_friends.tpl | 0 view/tpl/suggest_page.tpl | 0 view/tpl/threaded_conversation.tpl | 4 + view/tpl/viewcontact_template.tpl | 3 +- view/tpl/xchan_vcard.tpl | 0 view/tpl/xrd_host.tpl | 0 view/tpl/xrd_person.tpl | 0 1194 files changed, 125734 insertions(+), 71788 deletions(-) mode change 100755 => 100644 .gitignore mode change 100755 => 100644 .homeinstall/zotserver-setup.sh mode change 100755 => 100644 .openshift/action_hooks/deploy mode change 100755 => 100644 .openshift/cron/weekly/chronograph create mode 100644 Zotlabs/Daemon/Cache_query.php create mode 100644 Zotlabs/Daemon/Convo.php mode change 100755 => 100644 Zotlabs/Daemon/Importdoc.php create mode 100644 Zotlabs/Lib/ASCollection.php create mode 100644 Zotlabs/Lib/Crypto.php create mode 100644 Zotlabs/Lib/Hashpath.php create mode 100644 Zotlabs/Lib/Keyutils.php mode change 100755 => 100644 Zotlabs/Render/SimpleTemplate.php mode change 100755 => 100644 Zotlabs/Render/SmartyInterface.php mode change 100755 => 100644 Zotlabs/Render/SmartyTemplate.php mode change 100755 => 100644 Zotlabs/Render/TemplateEngine.php create mode 100644 Zotlabs/Update/_1242.php create mode 100644 Zotlabs/Update/_1243.php mode change 100755 => 100644 boot.php create mode 100644 doc/context/pl/admin/addons/assets/addon_repo_gui_1.png create mode 100644 doc/context/pl/admin/addons/help.html create mode 100644 doc/context/pl/admin/logs/help.html create mode 100644 doc/context/pl/admin/queue/help.html create mode 100644 doc/context/pl/admin/security/help.html create mode 100644 doc/context/pl/appman/help.html create mode 100644 doc/context/pl/apps/edit/help.html create mode 100644 doc/context/pl/apps/help.html create mode 100644 doc/context/pl/cards/help.html create mode 100644 doc/context/pl/channel/help.html create mode 100644 doc/context/pl/chat/help.html create mode 100644 doc/context/pl/cloud/help.html create mode 100644 doc/context/pl/connections/help.html create mode 100644 doc/context/pl/connections/ifpending/help.html create mode 100644 doc/context/pl/connedit/help.html create mode 100644 doc/context/pl/events/help.html create mode 100644 doc/context/pl/mail/help.html create mode 100644 doc/context/pl/network/help.html create mode 100644 doc/context/pl/photos/help.html create mode 100644 doc/context/pl/profile/help.html create mode 100644 doc/context/pl/profiles/help.html create mode 100644 doc/context/pl/settings/account/help.html create mode 100644 doc/context/pl/settings/channel/help.html create mode 100644 doc/context/pl/settings/features/help.html create mode 100644 doc/context/pl/settings/tokens/help.html create mode 100644 doc/context/pl/webpages/help.html create mode 100644 doc/context/pl/wiki/help.html create mode 100644 doc/macros/pl/addons_footer.bb create mode 100644 doc/macros/pl/cloud_footer.bb create mode 100644 doc/macros/pl/main_footer.bb create mode 100644 doc/macros/pl/troubleshooting_footer.bb create mode 100644 doc/pl/AdvancedSearch.md create mode 100644 doc/pl/Features.md create mode 100644 doc/pl/TermsOfService.md create mode 100644 doc/pl/Translations.md create mode 100644 doc/pl/about/about.bb create mode 100644 doc/pl/about/about_hub.bb create mode 100644 doc/pl/about/project.bb create mode 100644 doc/pl/accounts_profiles_channels_basics.bb create mode 100644 doc/pl/acl_dialog_post.html create mode 100644 doc/pl/addons.bb create mode 100644 doc/pl/addons_gnusocial.bb create mode 100644 doc/pl/admin/administrator_guide.md create mode 100644 doc/pl/admin/hub_snapshots.md create mode 100644 doc/pl/admins.bb create mode 100644 doc/pl/bugs.bb create mode 100644 doc/pl/checking_account_quota_usage.bb create mode 100644 doc/pl/general.bb create mode 100644 doc/pl/main.bb create mode 100644 doc/pl/member/assets/qr_text_to_post.png create mode 100644 doc/pl/member/assets/zat_dialog.png create mode 100644 doc/pl/member/bbcode.html create mode 100644 doc/pl/member/member_faq.bb create mode 100644 doc/pl/member/member_guide.bb create mode 100644 doc/pl/toc.html create mode 100644 doc/pl/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png create mode 100644 doc/pl/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png create mode 100644 doc/pl/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png create mode 100644 doc/pl/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png create mode 100644 doc/pl/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png create mode 100644 doc/pl/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png create mode 100644 doc/pl/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png create mode 100644 doc/pl/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png create mode 100644 doc/pl/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png create mode 100644 doc/pl/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png create mode 100644 doc/pl/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png create mode 100644 doc/pl/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png create mode 100644 doc/pl/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png create mode 100644 doc/pl/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png create mode 100644 doc/pl/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png create mode 100644 doc/pl/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png create mode 100644 doc/pl/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png create mode 100644 doc/pl/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png create mode 100644 doc/pl/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png create mode 100644 doc/pl/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png create mode 100644 doc/pl/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png create mode 100644 doc/pl/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png create mode 100644 doc/pl/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png create mode 100644 doc/pl/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png create mode 100644 doc/pl/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png create mode 100644 doc/pl/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png create mode 100644 doc/pl/tutorials/personal_channel.md mode change 100755 => 100644 include/dba/dba_driver.php mode change 100755 => 100644 include/dba/dba_pdo.php mode change 100755 => 100644 include/items.php mode change 100755 => 100644 include/oembed.php mode change 100755 => 100644 include/plugin.php mode change 100755 => 100644 index.php mode change 100755 => 100644 install/htconfig.sample.php mode change 100755 => 100644 library/jgrowl/examples/jgrowl.html mode change 100755 => 100644 library/jgrowl/jquery.jgrowl.js mode change 100755 => 100644 library/jgrowl/less/jgrowl.core.less mode change 100755 => 100644 library/kzykhys/git/test/PHPGit/Command/ShortlogCommandTest.php mode change 100755 => 100644 tests/travis/gen_apidocs.sh mode change 100755 => 100644 tests/travis/prepare.sh mode change 100755 => 100644 tests/travis/prepare_mysql.sh mode change 100755 => 100644 tests/travis/prepare_pgsql.sh create mode 100644 tests/unit/Lib/KeyutilsTest.php mode change 100644 => 100755 util/.htaccess mode change 100644 => 100755 util/Doxyfile mode change 100644 => 100755 util/Doxygen.footer mode change 100644 => 100755 util/Doxygen_phpvarfilter.php mode change 100644 => 100755 util/README mode change 100644 => 100755 util/config.md mode change 100644 => 100755 util/db_update.php mode change 100644 => 100755 util/docblox_errorchecker.php mode change 100644 => 100755 util/extract.php mode change 100644 => 100755 util/fpostit/README mode change 100644 => 100755 util/fpostit/fpostit.js mode change 100644 => 100755 util/fpostit/fpostit.php mode change 100644 => 100755 util/fpostit/friendika-32.png mode change 100644 => 100755 util/fresh.md mode change 100644 => 100755 util/generate-hooks-index/.gitignore mode change 100644 => 100755 util/generate-hooks-index/CHANGELOG.md mode change 100644 => 100755 util/generate-hooks-index/LICENSE mode change 100644 => 100755 util/generate-hooks-index/README.md mode change 100644 => 100755 util/generate-hooks-index/doc/intro.md mode change 100644 => 100755 util/generate-hooks-index/project.clj mode change 100644 => 100755 util/generate-hooks-index/src/generate_hooks_index/core.clj mode change 100644 => 100755 util/generate-hooks-index/test/generate_hooks_index/core_test.clj mode change 100644 => 100755 util/hstrings.php mode change 100644 => 100755 util/hubzilla_er/Makefile mode change 100644 => 100755 util/messages.po mode change 100644 => 100755 util/nconfig.php mode change 100644 => 100755 util/php2po.php mode change 100644 => 100755 util/po2php.php mode change 100644 => 100755 util/shredder/jansson-2.6.tar.gz mode change 100644 => 100755 util/shredder/jshon.tar.gz mode change 100644 => 100755 util/shredder/readme create mode 100755 util/storageconv.sh mode change 100644 => 100755 util/strings.php mode change 100644 => 100755 util/tpldebug.php mode change 100644 => 100755 util/typo.php mode change 100644 => 100755 util/typohelper.php mode change 100644 => 100755 util/z6convert.php mode change 100644 => 100755 util/zotsh/README.txt mode change 100644 => 100755 util/zotsh/easywebdav/LICENSE mode change 100644 => 100755 util/zotsh/easywebdav/__init__.py mode change 100644 => 100755 util/zotsh/easywebdav/__init__.pyc mode change 100644 => 100755 util/zotsh/easywebdav/__version__.py mode change 100644 => 100755 util/zotsh/easywebdav/__version__.pyc mode change 100644 => 100755 util/zotsh/easywebdav/client.py mode change 100644 => 100755 util/zotsh/easywebdav/client.pyc create mode 100644 vendor/brick/math/CHANGELOG.md delete mode 100644 vendor/brick/math/psalm-baseline.xml delete mode 100644 vendor/brick/math/psalm.xml mode change 100755 => 100644 vendor/commerceguys/intl/scripts/fetch_data.sh create mode 100644 vendor/phpseclib/phpseclib/AUTHORS create mode 100644 vendor/phpseclib/phpseclib/BACKERS.md create mode 100644 vendor/phpseclib/phpseclib/LICENSE create mode 100644 vendor/phpseclib/phpseclib/README.md create mode 100644 vendor/phpseclib/phpseclib/appveyor.yml create mode 100644 vendor/phpseclib/phpseclib/composer.json create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/File/X509.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Net/SSH1.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/bootstrap.php create mode 100644 vendor/phpseclib/phpseclib/phpseclib/openssl.cnf delete mode 100644 vendor/ramsey/collection/CHANGELOG.md create mode 100644 vendor/ramsey/collection/SECURITY.md delete mode 100644 vendor/sabre/dav/.gitignore delete mode 100644 vendor/sabre/dav/CHANGELOG.md delete mode 100644 vendor/sabre/dav/CONTRIBUTING.md delete mode 100644 vendor/sabre/dav/phpstan.neon delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Backend/AbstractPDOTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Backend/AbstractTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Backend/Mock.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Backend/PDOMySQLTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Backend/PDOSqliteTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/CalendarObjectTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryVAlarmTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryValidatorTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/CalendarTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/ExpandEventsDTSTARTandDTENDTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/ExpandEventsDTSTARTandDTENDbyDayTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/ExpandEventsDoubleEventsTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/FreeBusyReportTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/GetEventsByTimerangeTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/ICSExportPluginTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Issue166Test.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Issue172Test.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Issue203Test.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Issue205Test.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Issue211Test.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Issue220Test.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Issue228Test.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Notifications/CollectionTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Notifications/NodeTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/PluginTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Principal/CollectionTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Principal/ProxyReadTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Principal/ProxyWriteTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Principal/UserTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/Schedule/OutboxTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/SharedCalendarTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/SharingPluginTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/TestUtil.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CalDAV/ValidateICalTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/AbstractPluginTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/AddressBookQueryTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/AddressBookRootTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/AddressBookTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/Backend/AbstractPDOTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/Backend/Mock.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/Backend/PDOMySQLTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/Backend/PDOSqliteTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/CardTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/IDirectoryTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/MultiGetTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/PluginTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/SogoStripContentTypeTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/VCFExportTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/ValidateFilterTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/CardDAV/ValidateVCardTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/AbstractServer.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/AbstractBasicTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/AbstractDigestTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/AbstractPDOTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/ApacheTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/FileTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/Mock.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/PDOMySQLTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/PDOSqliteTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Auth/PluginTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/BasicNodeTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Browser/GuessContentTypeTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Browser/MapGetToPropFindTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Browser/PluginTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/ClientMock.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/ClientTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Exception/LockedTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Exception/PaymentRequiredTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/ExceptionTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/FSExt/FileTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/FSExt/ServerTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/HTTPPreferParsingTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/HttpDeleteTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/HttpPutTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Issue33Test.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/AbstractTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/FileTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/PDOMySQLTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/PDOTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Locks/MSWordTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Locks/PluginTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Mock/Collection.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Mock/File.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/Mount/PluginTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/ObjectTreeTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/FileMock.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/PluginTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/SpecificationTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/ServerEventsTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/ServerMKCOLTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/ServerPluginTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/ServerPropsTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/ServerRangeTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/ServerSimpleTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/ServerUpdatePropertiesTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/SimpleFileTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/StringUtilTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/TemporaryFileFilterTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/TestPlugin.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/TreeTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAV/UUIDUtilTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/ACLMethodTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/AllowAccessTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/BlockAccessTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/Exception/AceConflictTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NeedPrivilegesExceptionTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NoAbstractTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NotRecognizedPrincipalTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NotSupportedPrivilegeTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/ExpandPropertiesTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/MockACLNode.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/MockPrincipal.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/PluginAdminTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/PluginPropertiesTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/PluginUpdatePropertiesTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/AbstractPDOTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/Mock.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/PDOMySQLTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/PDOSqliteTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalCollectionTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalPropertySearchTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalSearchPropertySetTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVACL/SimplePluginTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/DAVServerTest.php delete mode 100644 vendor/sabre/dav/tests/Sabre/HTTP/ResponseMock.php delete mode 100644 vendor/sabre/dav/tests/Sabre/TestUtil.php delete mode 100644 vendor/sabre/dav/tests/bootstrap.php delete mode 100644 vendor/sabre/vobject/.gitignore delete mode 100644 vendor/sabre/vobject/.php_cs.dist delete mode 100644 vendor/sabre/vobject/.travis.yml delete mode 100644 vendor/sabre/vobject/CHANGELOG.md delete mode 100644 vendor/sabre/vobject/phpstan.neon delete mode 100644 vendor/sabre/vobject/tests/bootstrap.php delete mode 100644 vendor/sabre/vobject/tests/phpunit.xml mode change 100755 => 100644 vendor/simplepie/simplepie/.travis.yml mode change 100755 => 100644 vendor/simplepie/simplepie/library/SimplePie.php mode change 100755 => 100644 vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php mode change 100755 => 100644 vendor/simplepie/simplepie/library/SimplePie/Registry.php create mode 100644 vendor/symfony/polyfill-ctype/bootstrap80.php delete mode 100644 vendor/twbs/bootstrap/Gemfile delete mode 100644 vendor/twbs/bootstrap/_config.yml create mode 100644 vendor/twbs/bootstrap/config.yml create mode 100644 vendor/twbs/bootstrap/js/index.js delete mode 100644 vendor/twbs/bootstrap/js/src/index.js delete mode 100644 vendor/twbs/bootstrap/site/_data/docs-versions.yml delete mode 100644 vendor/twbs/bootstrap/site/_includes/bugify.html delete mode 100644 vendor/twbs/bootstrap/site/_includes/callout-info-prefersreducedmotion.md delete mode 100644 vendor/twbs/bootstrap/site/_includes/callout.html delete mode 100644 vendor/twbs/bootstrap/site/_includes/docs-navbar.html delete mode 100644 vendor/twbs/bootstrap/site/_includes/docs-sidebar.html delete mode 100644 vendor/twbs/bootstrap/site/_includes/example.html delete mode 100644 vendor/twbs/bootstrap/site/_includes/favicons.html delete mode 100644 vendor/twbs/bootstrap/site/_includes/footer.html delete mode 100644 vendor/twbs/bootstrap/site/_includes/header.html delete mode 100644 vendor/twbs/bootstrap/site/_includes/icons/bootstrap-stack.svg delete mode 100644 vendor/twbs/bootstrap/site/_includes/icons/bootstrap.svg delete mode 100644 vendor/twbs/bootstrap/site/_includes/icons/circle-square.svg delete mode 100644 vendor/twbs/bootstrap/site/_includes/icons/cloud-fill.svg delete mode 100644 vendor/twbs/bootstrap/site/_includes/icons/droplet-fill.svg delete mode 100644 vendor/twbs/bootstrap/site/_includes/icons/github.svg delete mode 100644 vendor/twbs/bootstrap/site/_includes/icons/menu.svg delete mode 100644 vendor/twbs/bootstrap/site/_includes/icons/opencollective.svg delete mode 100644 vendor/twbs/bootstrap/site/_includes/icons/placeholder.svg delete mode 100644 vendor/twbs/bootstrap/site/_includes/icons/slack.svg delete mode 100644 vendor/twbs/bootstrap/site/_includes/icons/twitter.svg delete mode 100644 vendor/twbs/bootstrap/site/_includes/scripts.html delete mode 100644 vendor/twbs/bootstrap/site/_includes/social.html delete mode 100644 vendor/twbs/bootstrap/site/_includes/stylesheet.html delete mode 100644 vendor/twbs/bootstrap/site/_layouts/default.html delete mode 100644 vendor/twbs/bootstrap/site/_layouts/docs.html delete mode 100644 vendor/twbs/bootstrap/site/_layouts/examples.html delete mode 100644 vendor/twbs/bootstrap/site/_layouts/simple.html rename vendor/twbs/bootstrap/site/{docs/4.5/assets/js/src => assets/js}/application.js (93%) rename vendor/twbs/bootstrap/site/{docs/4.5/assets/js/src => assets/js}/ie-emulation-modes-warning.js (100%) rename vendor/twbs/bootstrap/site/{docs/4.5/assets/js/src => assets/js}/search.js (97%) create mode 100644 vendor/twbs/bootstrap/site/assets/js/vendor/anchor.min.js rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/js/vendor/bs-custom-file-input.min.js (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/js/vendor/clipboard.min.js (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_ads.scss (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_algolia.scss (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_anchor.scss (95%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_brand.scss (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_browser-bugs.scss (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_buttons.scss (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_callouts.scss (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_clipboard-js.scss (96%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_colors.scss (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_component-examples.scss (98%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_content.scss (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_footer.scss (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_masthead.scss (94%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_nav.scss (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_placeholder-img.scss (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_sidebar.scss (70%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_skippy.scss (100%) create mode 100644 vendor/twbs/bootstrap/site/assets/scss/_syntax.scss create mode 100644 vendor/twbs/bootstrap/site/assets/scss/_toc.scss rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/_variables.scss (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => }/assets/scss/docs.scss (86%) create mode 100644 vendor/twbs/bootstrap/site/content/docs/4.6/_index.html rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/about/brand.md (73%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/about/license.md (84%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/about/overview.md (77%) create mode 100644 vendor/twbs/bootstrap/site/content/docs/4.6/about/team.md rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/about/translations.md (69%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/browser-bugs.md (61%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/alerts.md (72%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/badge.md (68%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/breadcrumb.md (96%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/button-group.md (93%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/buttons.md (82%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/card.md (72%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/carousel.md (70%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/collapse.md (74%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/dropdowns.md (83%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/forms.md (84%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/input-group.md (93%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/jumbotron.md (87%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/list-group.md (61%) create mode 100644 vendor/twbs/bootstrap/site/content/docs/4.6/components/media-object.md rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/modal.md (75%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/navbar.md (76%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/navs.md (73%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/pagination.md (83%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/popovers.md (77%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/progress.md (88%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/scrollspy.md (53%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/spinners.md (69%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/toasts.md (75%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/components/tooltips.md (81%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/content/code.md (75%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/content/figures.md (66%) create mode 100644 vendor/twbs/bootstrap/site/content/docs/4.6/content/images.md rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/content/reboot.md (86%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/content/tables.md (87%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/content/typography.md (68%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/.stylelintrc (100%) create mode 100644 vendor/twbs/bootstrap/site/content/docs/4.6/examples/_index.md rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/album/album.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/album/index.html (85%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/blog/blog.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/blog/index.html (60%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/carousel/carousel.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/carousel/index.html (52%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/checkout/form-validation.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/checkout/form-validation.js (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/checkout/index.html (96%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/cover/cover.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/cover/index.html (97%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/dashboard/dashboard.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/dashboard/dashboard.js (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/dashboard/index.html (71%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/floating-labels/floating-labels.css (94%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/floating-labels/index.html (71%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/grid/grid.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/grid/index.html (99%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/jumbotron/index.html (74%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/jumbotron/jumbotron.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/navbar-bottom/index.html (90%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/navbar-fixed/index.html (88%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/navbar-fixed/navbar-top-fixed.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/navbar-static/index.html (88%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/navbar-static/navbar-top.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/navbars/index.html (97%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/navbars/navbar.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/offcanvas/index.html (73%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/offcanvas/offcanvas.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/offcanvas/offcanvas.js (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/pricing/index.html (94%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/pricing/pricing.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/product/index.html (98%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/product/product.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/sign-in/index.html (75%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/sign-in/signin.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/starter-template/index.html (98%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/starter-template/starter-template.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/sticky-footer-navbar/index.html (90%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/sticky-footer-navbar/sticky-footer-navbar.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/sticky-footer/index.html (74%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/examples/sticky-footer/sticky-footer.css (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/getting-started/accessibility.md (97%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/getting-started/best-practices.md (86%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/getting-started/browsers-devices.md (93%) create mode 100644 vendor/twbs/bootstrap/site/content/docs/4.6/getting-started/build-tools.md rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/getting-started/contents.md (90%) create mode 100644 vendor/twbs/bootstrap/site/content/docs/4.6/getting-started/download.md create mode 100644 vendor/twbs/bootstrap/site/content/docs/4.6/getting-started/introduction.md rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/getting-started/javascript.md (87%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/getting-started/theming.md (80%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/getting-started/webpack.md (76%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/layout/grid.md (85%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/layout/overview.md (92%) create mode 100644 vendor/twbs/bootstrap/site/content/docs/4.6/layout/utilities-for-layout.md rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/migration.md (90%) create mode 100644 vendor/twbs/bootstrap/site/content/docs/4.6/utilities/borders.md rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/clearfix.md (84%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/close-icon.md (80%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/colors.md (56%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/display.md (82%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/embed.md (91%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/flex.md (86%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/float.md (80%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/image-replacement.md (64%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/interactions.md (74%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/overflow.md (96%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/position.md (89%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/screen-readers.md (65%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/shadows.md (89%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/sizing.md (80%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/spacing.md (95%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/stretched-link.md (70%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/text.md (73%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/vertical-align.md (88%) rename vendor/twbs/bootstrap/site/{docs/4.5 => content/docs/4.6}/utilities/visibility.md (91%) create mode 100644 vendor/twbs/bootstrap/site/content/docs/_index.html create mode 100644 vendor/twbs/bootstrap/site/content/docs/versions.md rename vendor/twbs/bootstrap/site/{_data => data}/breakpoints.yml (100%) rename vendor/twbs/bootstrap/site/{_data => data}/browser-bugs.yml (99%) rename vendor/twbs/bootstrap/site/{_data => data}/browser-features.yml (94%) rename vendor/twbs/bootstrap/site/{_data => data}/colors.yml (95%) rename vendor/twbs/bootstrap/site/{_data => data}/core-team.yml (100%) create mode 100644 vendor/twbs/bootstrap/site/data/docs-versions.yml rename vendor/twbs/bootstrap/site/{_data => data}/examples.yml (98%) rename vendor/twbs/bootstrap/site/{_data => data}/grays.yml (93%) rename vendor/twbs/bootstrap/site/{_data/nav.yml => data/sidebar.yml} (100%) rename vendor/twbs/bootstrap/site/{_data => data}/theme-colors.yml (100%) rename vendor/twbs/bootstrap/site/{_data => data}/translations.yml (87%) delete mode 100644 vendor/twbs/bootstrap/site/docs/4.5/about/team.md delete mode 100644 vendor/twbs/bootstrap/site/docs/4.5/assets/css/docs.min.css delete mode 100644 vendor/twbs/bootstrap/site/docs/4.5/assets/css/docs.min.css.map delete mode 100644 vendor/twbs/bootstrap/site/docs/4.5/assets/js/docs.min.js delete mode 100644 vendor/twbs/bootstrap/site/docs/4.5/assets/js/vendor/anchor.min.js delete mode 100644 vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_syntax.scss delete mode 100644 vendor/twbs/bootstrap/site/docs/4.5/components/media-object.md delete mode 100644 vendor/twbs/bootstrap/site/docs/4.5/content/images.md delete mode 100644 vendor/twbs/bootstrap/site/docs/4.5/examples/index.html delete mode 100644 vendor/twbs/bootstrap/site/docs/4.5/getting-started/build-tools.md delete mode 100644 vendor/twbs/bootstrap/site/docs/4.5/getting-started/download.md delete mode 100644 vendor/twbs/bootstrap/site/docs/4.5/getting-started/introduction.md delete mode 100644 vendor/twbs/bootstrap/site/docs/4.5/layout/utilities-for-layout.md delete mode 100644 vendor/twbs/bootstrap/site/docs/4.5/utilities/borders.md delete mode 100644 vendor/twbs/bootstrap/site/docs/versions.html delete mode 100644 vendor/twbs/bootstrap/site/index.html create mode 100644 vendor/twbs/bootstrap/site/layouts/_default/docs.html create mode 100644 vendor/twbs/bootstrap/site/layouts/_default/examples.html create mode 100644 vendor/twbs/bootstrap/site/layouts/_default/redirect.html create mode 100644 vendor/twbs/bootstrap/site/layouts/_default/single.html create mode 100644 vendor/twbs/bootstrap/site/layouts/alias.html rename vendor/twbs/bootstrap/site/{_includes => layouts/partials}/ads.html (100%) rename vendor/twbs/bootstrap/site/{_includes => layouts/partials}/analytics.html (100%) create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/bugify.html rename vendor/twbs/bootstrap/site/{_includes => layouts/partials}/callout-danger-async-methods.md (50%) rename vendor/twbs/bootstrap/site/{_includes => layouts/partials}/callout-info-mediaqueries-breakpoints.md (81%) create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/callout-info-npm-starter.md create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/callout-info-prefersreducedmotion.md rename vendor/twbs/bootstrap/site/{_includes => layouts/partials}/callout-warning-color-assistive-technologies.md (81%) create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/docs-navbar.html create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/docs-sidebar.html create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/favicons.html create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/footer.html create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/header.html create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/home/masthead-followup.html create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/home/masthead.html create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/icons/bootstrap-stack.svg create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/icons/bootstrap.svg create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/icons/circle-square.svg create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/icons/cloud-fill.svg rename vendor/twbs/bootstrap/site/{_includes => layouts/partials}/icons/code.svg (50%) create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/icons/droplet-fill.svg create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/icons/github.svg create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/icons/menu.svg create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/icons/opencollective.svg create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/icons/slack.svg create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/icons/twitter.svg create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/scripts.html rename vendor/twbs/bootstrap/site/{_includes => layouts/partials}/skippy.html (51%) create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/social.html create mode 100644 vendor/twbs/bootstrap/site/layouts/partials/stylesheet.html create mode 100644 vendor/twbs/bootstrap/site/layouts/robots.txt create mode 100644 vendor/twbs/bootstrap/site/layouts/shortcodes/callout.html create mode 100644 vendor/twbs/bootstrap/site/layouts/shortcodes/docsref.html create mode 100644 vendor/twbs/bootstrap/site/layouts/shortcodes/example.html create mode 100644 vendor/twbs/bootstrap/site/layouts/shortcodes/markdown.html create mode 100644 vendor/twbs/bootstrap/site/layouts/shortcodes/param.html create mode 100644 vendor/twbs/bootstrap/site/layouts/shortcodes/partial.html create mode 100644 vendor/twbs/bootstrap/site/layouts/shortcodes/placeholder.html create mode 100644 vendor/twbs/bootstrap/site/layouts/shortcodes/year.html create mode 100644 vendor/twbs/bootstrap/site/layouts/sitemap.xml delete mode 100644 vendor/twbs/bootstrap/site/robots.txt rename vendor/twbs/bootstrap/{ => site/static}/CNAME (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/brand/bootstrap-outline.svg (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/brand/bootstrap-punchout.svg (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/brand/bootstrap-social-logo.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/brand/bootstrap-social.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/brand/bootstrap-solid.svg (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/bootstrap-icons.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/bootstrap-icons@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/bootstrap-themes-collage.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/bootstrap-themes-collage@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/bootstrap-themes.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/bootstrap-themes@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/album.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/album@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/blog.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/blog@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/carousel.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/carousel@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/checkout.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/checkout@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/cover.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/cover@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/dashboard.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/dashboard@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/floating-labels.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/floating-labels@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/grid.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/grid@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/jumbotron.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/jumbotron@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/navbar-bottom.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/navbar-bottom@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/navbar-fixed.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/navbar-fixed@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/navbar-static.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/navbar-static@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/navbars.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/navbars@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/offcanvas.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/offcanvas@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/pricing.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/pricing@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/product.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/product@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/sign-in.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/sign-in@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/starter-template.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/starter-template@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/sticky-footer-navbar.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/sticky-footer-navbar@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/sticky-footer.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/examples/sticky-footer@2x.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/favicons/android-chrome-192x192.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/favicons/android-chrome-512x512.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/favicons/apple-touch-icon.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/favicons/browserconfig.xml (56%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/favicons/favicon-16x16.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/favicons/favicon-32x32.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/favicons/manifest.json (58%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/favicons/mstile-144x144.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/favicons/mstile-150x150.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/favicons/mstile-310x150.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/favicons/mstile-310x310.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/favicons/mstile-70x70.png (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/img/favicons/safari-pinned-tab.svg (100%) rename vendor/twbs/bootstrap/site/{docs/4.5 => static/docs/4.6}/assets/js/vendor/jquery.slim.min.js (100%) rename vendor/twbs/bootstrap/site/{ => static}/sw.js (100%) mode change 100755 => 100644 view/js/sse_worker.js create mode 100644 view/pl/cert_bad_eml.tpl create mode 100644 view/pl/cron_bad_eml.tpl create mode 100644 view/pl/hmessages.po create mode 100644 view/pl/hmessages.pot create mode 100644 view/pl/hstrings.php create mode 100644 view/pl/htconfig.tpl create mode 100644 view/pl/lostpass_eml.tpl create mode 100644 view/pl/passchanged_eml.tpl create mode 100644 view/pl/register_open_eml.tpl create mode 100644 view/pl/register_verify_eml.tpl create mode 100644 view/pl/register_verify_member.tpl create mode 100644 view/pl/update_fail_eml.tpl mode change 100755 => 100644 view/tpl/404.tpl mode change 100755 => 100644 view/tpl/abook_edit.tpl mode change 100755 => 100644 view/tpl/acl_selector.tpl mode change 100755 => 100644 view/tpl/admin_accounts.tpl mode change 100755 => 100644 view/tpl/admin_aside.tpl mode change 100755 => 100644 view/tpl/admin_channels.tpl mode change 100755 => 100644 view/tpl/admin_logs.tpl mode change 100755 => 100644 view/tpl/admin_plugins.tpl mode change 100755 => 100644 view/tpl/admin_plugins_details.tpl mode change 100755 => 100644 view/tpl/admin_security.tpl mode change 100755 => 100644 view/tpl/admin_site.tpl mode change 100755 => 100644 view/tpl/admin_summary.tpl mode change 100755 => 100644 view/tpl/album_edit.tpl mode change 100755 => 100644 view/tpl/atom_feed.tpl mode change 100755 => 100644 view/tpl/build_query.tpl mode change 100755 => 100644 view/tpl/cal_calendar.tpl mode change 100755 => 100644 view/tpl/cal_event.tpl mode change 100755 => 100644 view/tpl/categories_widget.tpl mode change 100755 => 100644 view/tpl/channel.tpl mode change 100755 => 100644 view/tpl/channel_import.tpl mode change 100755 => 100644 view/tpl/channel_rename.tpl mode change 100755 => 100644 view/tpl/channels.tpl mode change 100755 => 100644 view/tpl/chanview.tpl mode change 100755 => 100644 view/tpl/comment_item.tpl mode change 100755 => 100644 view/tpl/common_friends.tpl mode change 100755 => 100644 view/tpl/common_pills.tpl mode change 100755 => 100644 view/tpl/common_tabs.tpl mode change 100755 => 100644 view/tpl/connection_template.tpl mode change 100755 => 100644 view/tpl/connections.tpl mode change 100755 => 100644 view/tpl/contact_block.tpl mode change 100755 => 100644 view/tpl/contact_slider.tpl mode change 100755 => 100644 view/tpl/contact_template.tpl mode change 100755 => 100644 view/tpl/conv.tpl mode change 100755 => 100644 view/tpl/conv_frame.tpl mode change 100755 => 100644 view/tpl/conv_item.tpl mode change 100755 => 100644 view/tpl/conv_list.tpl mode change 100755 => 100644 view/tpl/conversation.tpl mode change 100755 => 100644 view/tpl/convobj.tpl mode change 100755 => 100644 view/tpl/cover_photo.tpl mode change 100755 => 100644 view/tpl/cover_photo_widget.tpl mode change 100755 => 100644 view/tpl/cropbody.tpl mode change 100755 => 100644 view/tpl/cropcover.tpl mode change 100755 => 100644 view/tpl/crophead.tpl mode change 100755 => 100644 view/tpl/defperms.tpl mode change 100755 => 100644 view/tpl/directory_header.tpl mode change 100755 => 100644 view/tpl/direntry.tpl mode change 100755 => 100644 view/tpl/edpost_head.tpl mode change 100755 => 100644 view/tpl/email_notify_html.tpl mode change 100755 => 100644 view/tpl/email_notify_text.tpl mode change 100755 => 100644 view/tpl/event.tpl mode change 100755 => 100644 view/tpl/event_form.tpl mode change 100755 => 100644 view/tpl/event_head.tpl mode change 100755 => 100644 view/tpl/event_item_header.tpl mode change 100755 => 100644 view/tpl/events-js.tpl mode change 100755 => 100644 view/tpl/events_cal-js.tpl mode change 100755 => 100644 view/tpl/events_tools_side.tpl mode change 100755 => 100644 view/tpl/failed_updates.tpl mode change 100755 => 100644 view/tpl/field.tpl mode change 100755 => 100644 view/tpl/field_acheckbox.tpl mode change 100755 => 100644 view/tpl/field_combobox.tpl mode change 100755 => 100644 view/tpl/field_custom.tpl mode change 100755 => 100644 view/tpl/field_intcheckbox.tpl mode change 100755 => 100644 view/tpl/field_password.tpl mode change 100755 => 100644 view/tpl/field_radio.tpl mode change 100755 => 100644 view/tpl/field_richtext.tpl mode change 100755 => 100644 view/tpl/field_select_raw.tpl mode change 100755 => 100644 view/tpl/field_textarea.tpl mode change 100755 => 100644 view/tpl/field_themeselect.tpl mode change 100755 => 100644 view/tpl/field_yesno.tpl mode change 100755 => 100644 view/tpl/fileas_widget.tpl mode change 100755 => 100644 view/tpl/filebrowser.tpl mode change 100755 => 100644 view/tpl/filer_dialog.tpl mode change 100755 => 100644 view/tpl/follow.tpl mode change 100755 => 100644 view/tpl/generic_links_widget.tpl mode change 100755 => 100644 view/tpl/group_edit.tpl mode change 100755 => 100644 view/tpl/group_selection.tpl mode change 100755 => 100644 view/tpl/group_side.tpl mode change 100755 => 100644 view/tpl/groupeditor.tpl mode change 100755 => 100644 view/tpl/head.tpl mode change 100755 => 100644 view/tpl/hq.tpl mode change 100755 => 100644 view/tpl/hq_controls.tpl mode change 100755 => 100644 view/tpl/install.tpl mode change 100755 => 100644 view/tpl/install_checks.tpl mode change 100755 => 100644 view/tpl/install_db.tpl mode change 100755 => 100644 view/tpl/install_settings.tpl mode change 100755 => 100644 view/tpl/invite.tpl mode change 100755 => 100644 view/tpl/item_import.tpl mode change 100755 => 100644 view/tpl/jot-header.tpl mode change 100755 => 100644 view/tpl/jot.tpl mode change 100755 => 100644 view/tpl/jot_geotag.tpl mode change 100755 => 100644 view/tpl/js_strings.tpl mode change 100755 => 100644 view/tpl/lang_selector.tpl mode change 100755 => 100644 view/tpl/like_noshare.tpl mode change 100755 => 100644 view/tpl/login.tpl mode change 100755 => 100644 view/tpl/logout.tpl mode change 100755 => 100644 view/tpl/lostpass.tpl mode change 100755 => 100644 view/tpl/mail_conv.tpl mode change 100755 => 100644 view/tpl/mail_display.tpl mode change 100755 => 100644 view/tpl/mail_head.tpl mode change 100755 => 100644 view/tpl/mail_list.tpl mode change 100755 => 100644 view/tpl/main_slider.tpl mode change 100755 => 100644 view/tpl/message_side.tpl mode change 100755 => 100644 view/tpl/micropro_img.tpl mode change 100755 => 100644 view/tpl/micropro_txt.tpl mode change 100755 => 100644 view/tpl/mood_content.tpl mode change 100755 => 100644 view/tpl/msg-header.tpl mode change 100755 => 100644 view/tpl/myapps.tpl mode change 100755 => 100644 view/tpl/navbar_default.tpl mode change 100755 => 100644 view/tpl/navbar_tucson.tpl mode change 100755 => 100644 view/tpl/new_channel.tpl mode change 100755 => 100644 view/tpl/notifications.tpl mode change 100755 => 100644 view/tpl/notify.tpl mode change 100755 => 100644 view/tpl/oauth.tpl mode change 100755 => 100644 view/tpl/oauth2.tpl mode change 100755 => 100644 view/tpl/oauth2_edit.tpl mode change 100755 => 100644 view/tpl/oauth_authorize.tpl mode change 100755 => 100644 view/tpl/oauth_authorize_done.tpl mode change 100755 => 100644 view/tpl/oauth_edit.tpl mode change 100755 => 100644 view/tpl/oembed_video.tpl mode change 100755 => 100644 view/tpl/oexchange_xrd.tpl mode change 100755 => 100644 view/tpl/page_display.tpl mode change 100755 => 100644 view/tpl/peoplefind.tpl mode change 100755 => 100644 view/tpl/photo_album.tpl mode change 100755 => 100644 view/tpl/photo_album_portfolio.tpl mode change 100755 => 100644 view/tpl/photo_albums.tpl mode change 100755 => 100644 view/tpl/photo_drop.tpl mode change 100755 => 100644 view/tpl/photo_item.tpl mode change 100755 => 100644 view/tpl/photo_portfolio.tpl mode change 100755 => 100644 view/tpl/photo_top.tpl mode change 100755 => 100644 view/tpl/photo_view.tpl mode change 100755 => 100644 view/tpl/photos_recent.tpl mode change 100755 => 100644 view/tpl/photos_upload.tpl mode change 100755 => 100644 view/tpl/photosajax.tpl mode change 100755 => 100644 view/tpl/poco_entry_xml.tpl mode change 100755 => 100644 view/tpl/poco_xml.tpl mode change 100755 => 100644 view/tpl/poke_content.tpl mode change 100755 => 100644 view/tpl/posted_date_widget.tpl mode change 100755 => 100644 view/tpl/profed_head.tpl mode change 100755 => 100644 view/tpl/profile_advanced.tpl mode change 100755 => 100644 view/tpl/profile_edit.tpl mode change 100755 => 100644 view/tpl/profile_entry.tpl mode change 100755 => 100644 view/tpl/profile_listing_header.tpl mode change 100755 => 100644 view/tpl/profile_photo.tpl mode change 100755 => 100644 view/tpl/profile_vcard.tpl mode change 100755 => 100644 view/tpl/profile_vcard_short.tpl mode change 100755 => 100644 view/tpl/prv_message.tpl mode change 100755 => 100644 view/tpl/pwdreset.tpl mode change 100755 => 100644 view/tpl/register.tpl mode change 100755 => 100644 view/tpl/remote_friends_common.tpl mode change 100755 => 100644 view/tpl/removeme.tpl mode change 100755 => 100644 view/tpl/rmagic.tpl mode change 100755 => 100644 view/tpl/search_item.tpl mode change 100755 => 100644 view/tpl/settings.tpl mode change 100755 => 100644 view/tpl/settings_account.tpl mode change 100755 => 100644 view/tpl/settings_addons.tpl mode change 100755 => 100644 view/tpl/settings_display.tpl mode change 100755 => 100644 view/tpl/settings_features.tpl mode change 100755 => 100644 view/tpl/settings_module.tpl mode change 100755 => 100644 view/tpl/settings_nick_set.tpl mode change 100755 => 100644 view/tpl/siteinfo.tpl mode change 100755 => 100644 view/tpl/suggest_friends.tpl mode change 100755 => 100644 view/tpl/suggest_page.tpl mode change 100755 => 100644 view/tpl/threaded_conversation.tpl mode change 100755 => 100644 view/tpl/viewcontact_template.tpl mode change 100755 => 100644 view/tpl/xchan_vcard.tpl mode change 100755 => 100644 view/tpl/xrd_host.tpl mode change 100755 => 100644 view/tpl/xrd_person.tpl diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 diff --git a/.homeinstall/zotserver-setup.sh b/.homeinstall/zotserver-setup.sh old mode 100755 new mode 100644 diff --git a/.openshift/action_hooks/deploy b/.openshift/action_hooks/deploy old mode 100755 new mode 100644 diff --git a/.openshift/cron/weekly/chronograph b/.openshift/cron/weekly/chronograph old mode 100755 new mode 100644 diff --git a/CHANGELOG b/CHANGELOG index e526536eb..1e4b28abf 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,7 +1,3 @@ -Hubzilla 5.2.9 (2021-01-23) - - Update and enhance Account, Invite, Register - - Hubzilla 5.2.2 (2021-02-13) - Fix issue with ping_site() diff --git a/Zotlabs/Access/AccessList.php b/Zotlabs/Access/AccessList.php index 7cf7b5587..af6c4b7a6 100644 --- a/Zotlabs/Access/AccessList.php +++ b/Zotlabs/Access/AccessList.php @@ -54,7 +54,7 @@ class AccessList { * * \e string \b channel_deny_gid => string of denied gids */ function __construct($channel) { - if($channel) { + if ($channel) { $this->allow_cid = $channel['channel_allow_cid']; $this->allow_gid = $channel['channel_allow_gid']; $this->deny_cid = $channel['channel_deny_cid']; @@ -99,7 +99,6 @@ class AccessList { $this->allow_gid = $arr['allow_gid']; $this->deny_cid = $arr['deny_cid']; $this->deny_gid = $arr['deny_gid']; - $this->explicit = $explicit; } diff --git a/Zotlabs/Access/PermissionLimits.php b/Zotlabs/Access/PermissionLimits.php index c11dc95e6..fb5fe6133 100644 --- a/Zotlabs/Access/PermissionLimits.php +++ b/Zotlabs/Access/PermissionLimits.php @@ -2,6 +2,7 @@ namespace Zotlabs\Access; +use App; use Zotlabs\Lib\PConfig; /** @@ -39,10 +40,10 @@ class PermissionLimits { */ static public function Std_Limits() { $limits = []; - $perms = Permissions::Perms(); + $perms = Permissions::Perms(); - foreach($perms as $k => $v) { - if(strstr($k, 'view')) + foreach ($perms as $k => $v) { + if (strstr($k, 'view')) $limits[$k] = PERMS_PUBLIC; else $limits[$k] = PERMS_SPECIFIC; @@ -77,14 +78,14 @@ class PermissionLimits { * * \b array with all permission limits, if $perm is not set */ static public function Get($channel_id, $perm = '') { - if($perm) { + if ($perm) { return intval(PConfig::Get($channel_id, 'perm_limits', $perm)); } PConfig::Load($channel_id); - if(array_key_exists($channel_id, \App::$config) - && array_key_exists('perm_limits', \App::$config[$channel_id])) - return \App::$config[$channel_id]['perm_limits']; + if (array_key_exists($channel_id, App::$config) + && array_key_exists('perm_limits', App::$config[$channel_id])) + return App::$config[$channel_id]['perm_limits']; return false; } diff --git a/Zotlabs/Access/PermissionRoles.php b/Zotlabs/Access/PermissionRoles.php index 82df0c34b..2bcce4eb4 100644 --- a/Zotlabs/Access/PermissionRoles.php +++ b/Zotlabs/Access/PermissionRoles.php @@ -218,13 +218,13 @@ class PermissionRoles { // set permissionlimits for this permission here, for example: // if($perm === 'mynewperm') - // \Zotlabs\Access\PermissionLimits::Set($uid,$perm,1); + // PermissionLimits::Set($uid,$perm,1); if($perm === 'view_wiki') - \Zotlabs\Access\PermissionLimits::Set($uid, $perm, PERMS_PUBLIC); + PermissionLimits::Set($uid, $perm, PERMS_PUBLIC); if($perm === 'write_wiki') - \Zotlabs\Access\PermissionLimits::Set($uid, $perm, PERMS_SPECIFIC); + PermissionLimits::Set($uid, $perm, PERMS_SPECIFIC); // set autoperms here if applicable @@ -262,11 +262,11 @@ class PermissionRoles { case 'view_wiki': set_abconfig($uid,$ab['abook_xchan'],'my_perms',$perm, intval(get_abconfig($uid,$ab['abook_xchan'],'my_perms','view_pages'))); - + break; case 'write_wiki': set_abconfig($uid,$ab['abook_xchan'],'my_perms',$perm, intval(get_abconfig($uid,$ab['abook_xchan'],'my_perms','write_pages'))); - + break; default: break; } diff --git a/Zotlabs/Access/Permissions.php b/Zotlabs/Access/Permissions.php index 35016ed57..df5472cc3 100644 --- a/Zotlabs/Access/Permissions.php +++ b/Zotlabs/Access/Permissions.php @@ -75,7 +75,7 @@ class Permissions { $x = [ 'permissions' => $perms, - 'filter' => $filter + 'filter' => $filter ]; /** * @hooks permissions_list @@ -84,7 +84,7 @@ class Permissions { */ call_hooks('permissions_list', $x); - return($x['permissions']); + return ($x['permissions']); } /** @@ -96,10 +96,10 @@ class Permissions { */ static public function BlockedAnonPerms() { - $res = []; + $res = []; $perms = PermissionLimits::Std_limits(); - foreach($perms as $perm => $limit) { - if($limit != PERMS_PUBLIC) { + foreach ($perms as $perm => $limit) { + if ($limit != PERMS_PUBLIC) { $res[] = $perm; } } @@ -111,7 +111,7 @@ class Permissions { */ call_hooks('write_perms', $x); - return($x['permissions']); + return ($x['permissions']); } /** @@ -120,20 +120,20 @@ class Permissions { * Converts [ 0 => 'view_stream', ... ] * to [ 'view_stream' => 1 ] for any permissions in $arr; * Undeclared permissions which exist in Perms() are added and set to 0. - * + * * @param array $arr * @return array */ static public function FilledPerms($arr) { - if(is_null($arr)) { + if (is_null($arr)) { btlogger('FilledPerms: null'); $arr = []; } $everything = self::Perms(); - $ret = []; - foreach($everything as $k => $v) { - if(in_array($k, $arr)) + $ret = []; + foreach ($everything as $k => $v) { + if (in_array($k, $arr)) $ret[$k] = 1; else $ret[$k] = 0; @@ -155,9 +155,9 @@ class Permissions { */ static public function OPerms($arr) { $ret = []; - if($arr) { - foreach($arr as $k => $v) { - $ret[] = [ 'name' => $k, 'value' => $v ]; + if ($arr) { + foreach ($arr as $k => $v) { + $ret[] = ['name' => $k, 'value' => $v]; } } return $ret; @@ -170,15 +170,16 @@ class Permissions { * @return boolean|array */ static public function FilledAutoperms($channel_id) { - if(! intval(get_pconfig($channel_id,'system','autoperms'))) + if (!intval(get_pconfig($channel_id, 'system', 'autoperms'))) return false; $arr = []; + $r = q("select * from pconfig where uid = %d and cat = 'autoperms'", intval($channel_id) ); - if($r) { - foreach($r as $rr) { + if ($r) { + foreach ($r as $rr) { $arr[$rr['k']] = intval($rr['v']); } } @@ -193,11 +194,11 @@ class Permissions { * @return boolean true if all perms from $p1 exist also in $p2 */ static public function PermsCompare($p1, $p2) { - foreach($p1 as $k => $v) { - if(! array_key_exists($k, $p2)) + foreach ($p1 as $k => $v) { + if (!array_key_exists($k, $p2)) return false; - if($p1[$k] != $p2[$k]) + if ($p1[$k] != $p2[$k]) return false; } @@ -214,18 +215,18 @@ class Permissions { */ static public function connect_perms($channel_id) { - $my_perms = []; - $permcat = null; + $my_perms = []; + $permcat = null; $automatic = 0; // If a default permcat exists, use that - $pc = ((feature_enabled($channel_id,'permcats')) ? get_pconfig($channel_id,'system','default_permcat') : 'default'); - if(! in_array($pc, [ '','default' ])) { - $pcp = new Zlib\Permcat($channel_id); + $pc = ((feature_enabled($channel_id, 'permcats')) ? get_pconfig($channel_id, 'system', 'default_permcat') : 'default'); + if (!in_array($pc, ['', 'default'])) { + $pcp = new Zlib\Permcat($channel_id); $permcat = $pcp->fetch($pc); - if($permcat && $permcat['perms']) { - foreach($permcat['perms'] as $p) { + if ($permcat && $permcat['perms']) { + foreach ($permcat['perms'] as $p) { $my_perms[$p['name']] = $p['value']; } } @@ -235,15 +236,15 @@ class Permissions { // and if there was no permcat or a default permcat, set the perms // from the role - $role = get_pconfig($channel_id,'system','permissions_role'); - if($role) { + $role = get_pconfig($channel_id, 'system', 'permissions_role'); + if ($role) { $xx = PermissionRoles::role_perms($role); - if($xx['perms_auto']) + if ($xx['perms_auto']) $automatic = 1; - if((! $my_perms) && ($xx['perms_connect'])) { + if ((!$my_perms) && ($xx['perms_connect'])) { $default_perms = $xx['perms_connect']; - $my_perms = Permissions::FilledPerms($default_perms); + $my_perms = Permissions::FilledPerms($default_perms); } } @@ -251,11 +252,11 @@ class Permissions { // it is likely a custom permissions role. First see if there are any // automatic permissions. - if(! $my_perms) { + if (!$my_perms) { $m = Permissions::FilledAutoperms($channel_id); - if($m) { + if ($m) { $automatic = 1; - $my_perms = $m; + $my_perms = $m; } } @@ -263,35 +264,35 @@ class Permissions { // custom perms but they are not automatic. They will be stored in abconfig with // the channel's channel_hash (the 'self' connection). - if(! $my_perms) { + if (!$my_perms) { $r = q("select channel_hash from channel where channel_id = %d", intval($channel_id) ); - if($r) { + if ($r) { $x = q("select * from abconfig where chan = %d and xchan = '%s' and cat = 'my_perms'", intval($channel_id), dbesc($r[0]['channel_hash']) ); - if($x) { - foreach($x as $xv) { + if ($x) { + foreach ($x as $xv) { $my_perms[$xv['k']] = intval($xv['v']); } } } } - return ( [ 'perms' => $my_perms, 'automatic' => $automatic ] ); + return (['perms' => $my_perms, 'automatic' => $automatic]); } static public function serialise($p) { $n = []; - if($p) { - foreach($p as $k => $v) { - if(intval($v)) { + if ($p) { + foreach ($p as $k => $v) { + if (intval($v)) { $n[] = $k; } } } - return implode(',',$n); + return implode(',', $n); } } diff --git a/Zotlabs/Daemon/Addon.php b/Zotlabs/Daemon/Addon.php index c2889e596..c6778750d 100644 --- a/Zotlabs/Daemon/Addon.php +++ b/Zotlabs/Daemon/Addon.php @@ -2,13 +2,12 @@ namespace Zotlabs\Daemon; -require_once('include/zot.php'); - class Addon { - static public function run($argc,$argv) { + static public function run($argc, $argv) { - call_hooks('daemon_addon',$argv); + call_hooks('daemon_addon', $argv); } + } diff --git a/Zotlabs/Daemon/Cache_embeds.php b/Zotlabs/Daemon/Cache_embeds.php index 08088abd6..9e5b8d2bb 100644 --- a/Zotlabs/Daemon/Cache_embeds.php +++ b/Zotlabs/Daemon/Cache_embeds.php @@ -2,7 +2,6 @@ namespace Zotlabs\Daemon; - class Cache_embeds { static public function run($argc,$argv) { diff --git a/Zotlabs/Daemon/Cache_query.php b/Zotlabs/Daemon/Cache_query.php new file mode 100644 index 000000000..5f92ae6d0 --- /dev/null +++ b/Zotlabs/Daemon/Cache_query.php @@ -0,0 +1,36 @@ + 1) && ($argv[1])) + + if (($argc > 1) && ($argv[1])) $site_id = $argv[1]; - if($site_id) + if ($site_id) $sql_options = " and site_url = '" . dbesc($argv[1]) . "' "; - $days = intval(get_config('system','sitecheckdays')); - if($days < 1) + $days = intval(get_config('system', 'sitecheckdays')); + if ($days < 1) $days = 30; $r = q("select * from site where site_dead = 0 and site_update < %s - INTERVAL %s and site_type = %d $sql_options ", - db_utcnow(), db_quoteinterval($days . ' DAY'), + db_utcnow(), + db_quoteinterval($days . ' DAY'), intval(SITE_TYPE_ZOT) ); - if(! $r) + if (!$r) return; - foreach($r as $rr) { - if(! strcasecmp($rr['site_url'],z_root())) + foreach ($r as $rr) { + if (!strcasecmp($rr['site_url'], z_root())) continue; $x = ping_site($rr['site_url']); - if($x['success']) { + if ($x['success']) { logger('checksites: ' . $rr['site_url']); q("update site set site_update = '%s' where site_url = '%s' ", dbesc(datetime_convert()), diff --git a/Zotlabs/Daemon/Convo.php b/Zotlabs/Daemon/Convo.php new file mode 100644 index 000000000..940216b2c --- /dev/null +++ b/Zotlabs/Daemon/Convo.php @@ -0,0 +1,58 @@ +get(); + + if ($messages) { + foreach ($messages as $message) { + if (is_string($message)) { + $message = Activity::fetch($message, $channel); + } + // set client flag because comments will probably just be objects and not full blown activities + // and that lets us use implied_create + $AS = new ActivityStreams($message); + if ($AS->is_valid() && is_array($AS->obj)) { + $item = Activity::decode_note($AS); + Activity::store($channel, $contact['abook_xchan'], $AS, $item); + } + } + } + } +} diff --git a/Zotlabs/Daemon/Cron.php b/Zotlabs/Daemon/Cron.php index 703d6ce08..4732dfa75 100644 --- a/Zotlabs/Daemon/Cron.php +++ b/Zotlabs/Daemon/Cron.php @@ -6,14 +6,14 @@ use Zotlabs\Lib\Libsync; class Cron { - static public function run($argc,$argv) { + static public function run($argc, $argv) { - $maxsysload = intval(get_config('system','maxloadavg')); - if($maxsysload < 1) + $maxsysload = intval(get_config('system', 'maxloadavg')); + if ($maxsysload < 1) $maxsysload = 50; - if(function_exists('sys_getloadavg')) { + if (function_exists('sys_getloadavg')) { $load = sys_getloadavg(); - if(intval($load[0]) > $maxsysload) { + if (intval($load[0]) > $maxsysload) { logger('system: load ' . $load . ' too high. Cron deferred to next scheduled run.'); return; } @@ -21,17 +21,18 @@ class Cron { // Check for a lockfile. If it exists, but is over an hour old, it's stale. Ignore it. $lockfile = 'store/[data]/cron'; - if((file_exists($lockfile)) && (filemtime($lockfile) > (time() - 3600)) - && (! get_config('system','override_cron_lockfile'))) { + if ((file_exists($lockfile)) && (filemtime($lockfile) > (time() - 3600)) + && (!get_config('system', 'override_cron_lockfile'))) { logger("cron: Already running"); return; } - + // Create a lockfile. Needs two vars, but $x doesn't need to contain anything. + $x = ''; file_put_contents($lockfile, $x); logger('cron: start'); - + // run queue delivery process in the background Master::Summon(array('Queue')); @@ -46,7 +47,7 @@ class Cron { db_utcnow(), db_quoteinterval('3 MINUTE') ); - + // expire any expired mail q("delete from mail where expires > '%s' and expires < %s ", @@ -54,19 +55,23 @@ class Cron { db_utcnow() ); + $interval = get_config('system', 'delivery_interval', 3); + // expire any expired items $r = q("select id,item_wall from item where expires > '2001-01-01 00:00:00' and expires < %s and item_deleted = 0 ", db_utcnow() ); - if($r) { + if ($r) { require_once('include/items.php'); - foreach($r as $rr) { - drop_item($rr['id'],false,(($rr['item_wall']) ? DROPITEM_PHASE1 : DROPITEM_NORMAL)); - if($rr['item_wall']) { + foreach ($r as $rr) { + drop_item($rr['id'], false, (($rr['item_wall']) ? DROPITEM_PHASE1 : DROPITEM_NORMAL)); + if ($rr['item_wall']) { // The notifier isn't normally invoked unless item_drop is interactive. - Master::Summon( [ 'Notifier', 'drop', $rr['id'] ] ); + Master::Summon(['Notifier', 'drop', $rr['id']]); + if ($interval) + @time_sleep_until(microtime(true) + (float)$interval); } } } @@ -78,9 +83,9 @@ class Cron { dbesc(NULL_DATE), db_utcnow() ); - if($r) { + if ($r) { require_once('include/security.php'); - foreach($r as $rr) { + foreach ($r as $rr) { atoken_delete($rr['atoken_id']); } } @@ -90,33 +95,33 @@ class Cron { // or dead entries. $r = q("select channel_id from channel where channel_dirdate < %s - INTERVAL %s and channel_removed = 0", - db_utcnow(), + db_utcnow(), db_quoteinterval('30 DAY') ); - if($r) { - foreach($r as $rr) { - Master::Summon(array('Directory',$rr['channel_id'],'force')); - if($interval) - @time_sleep_until(microtime(true) + (float) $interval); + if ($r) { + foreach ($r as $rr) { + Master::Summon(array('Directory', $rr['channel_id'], 'force')); + if ($interval) + @time_sleep_until(microtime(true) + (float)$interval); } } - + // Clean expired photos from cache - + $r = q("SELECT DISTINCT xchan, content FROM photo WHERE photo_usage = %d AND expires < %s - INTERVAL %s", intval(PHOTO_CACHE), db_utcnow(), - db_quoteinterval(get_config('system','active_expire_days', '30') . ' DAY') + db_quoteinterval(get_config('system', 'active_expire_days', '30') . ' DAY') ); - if($r) { + if ($r) { q("DELETE FROM photo WHERE photo_usage = %d AND expires < %s - INTERVAL %s", intval(PHOTO_CACHE), db_utcnow(), - db_quoteinterval(get_config('system','active_expire_days', '30') . ' DAY') + db_quoteinterval(get_config('system', 'active_expire_days', '30') . ' DAY') ); - foreach($r as $rr) { + foreach ($r as $rr) { $file = dbunescbin($rr['content']); - if(is_file($file)) { + if (is_file($file)) { @unlink($file); @rmdir(dirname($file)); logger('info: deleted cached photo file ' . $file, LOGGER_DEBUG); @@ -130,27 +135,29 @@ class Cron { $r = q("select id from item where item_delayed = 1 and created <= %s and created > '%s' ", db_utcnow(), - dbesc(datetime_convert('UTC','UTC','now - 2 days')) + dbesc(datetime_convert('UTC', 'UTC', 'now - 2 days')) ); - if($r) { - foreach($r as $rr) { + if ($r) { + foreach ($r as $rr) { $x = q("update item set item_delayed = 0 where id = %d", intval($rr['id']) ); - if($x) { + if ($x) { $z = q("select * from item where id = %d", - intval($message_id) + intval($rr['id']) ); - if($z) { + if ($z) { xchan_query($z); $sync_item = fetch_post_tags($z); Libsync::build_sync_packet($sync_item[0]['uid'], - [ - 'item' => [ encode_item($sync_item[0],true) ] + [ + 'item' => [encode_item($sync_item[0], true)] ] ); } - Master::Summon(array('Notifier','wall-new',$rr['id'])); + Master::Summon(array('Notifier', 'wall-new', $rr['id'])); + if ($interval) + @time_sleep_until(microtime(true) + (float)$interval); } } } @@ -163,27 +170,22 @@ class Cron { require_once('include/attach.php'); attach_upgrade(); - $abandon_days = intval(get_config('system','account_abandon_days')); - if($abandon_days < 1) - $abandon_days = 0; - - // once daily run birthday_updates and then expire in background // FIXME: add birthday updates, both locally and for xprof for use // by directory servers - $d1 = intval(get_config('system','last_expire_day')); - $d2 = intval(datetime_convert('UTC','UTC','now','d')); + $d1 = intval(get_config('system', 'last_expire_day')); + $d2 = intval(datetime_convert('UTC', 'UTC', 'now', 'd')); // Allow somebody to staggger daily activities if they have more than one site on their server, // or if it happens at an inconvenient (busy) hour. - $h1 = intval(get_config('system','cron_hour')); - $h2 = intval(datetime_convert('UTC','UTC','now','G')); + $h1 = intval(get_config('system', 'cron_hour')); + $h2 = intval(datetime_convert('UTC', 'UTC', 'now', 'G')); - if(($d2 != $d1) && ($h1 == $h2)) { + if (($d2 != $d1) && ($h1 == $h2)) { Master::Summon(array('Cron_daily')); } @@ -192,14 +194,14 @@ class Cron { $r = q("select xchan_photo_l, xchan_hash from xchan where xchan_photo_l != '' and xchan_photo_m = '' and xchan_photo_date < %s - INTERVAL %s", - db_utcnow(), + db_utcnow(), db_quoteinterval('1 DAY') ); - if($r) { + if ($r) { require_once('include/photo/photo_driver.php'); - foreach($r as $rr) { + foreach ($r as $rr) { $photos = import_xchan_photo($rr['xchan_photo_l'], $rr['xchan_hash'], false, true); - $x = q("update xchan set xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' + q("update xchan set xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' where xchan_hash = '%s'", dbesc($photos[0]), dbesc($photos[1]), @@ -213,31 +215,28 @@ class Cron { // pull in some public posts - $disable_discover_tab = get_config('system','disable_discover_tab') || get_config('system','disable_discover_tab') === false; - if(! $disable_discover_tab) +/* $disable_discover_tab = get_config('system', 'disable_discover_tab') || get_config('system', 'disable_discover_tab') === false; + if (!$disable_discover_tab) Master::Summon(array('Externals')); +*/ - $generation = 0; + $restart = false; - $restart = false; - - if(($argc > 1) && ($argv[1] == 'restart')) { - $restart = true; + if (($argc > 1) && ($argv[1] == 'restart')) { + $restart = true; $generation = intval($argv[2]); - if(! $generation) + if (!$generation) return; } reload_plugins(); - $d = datetime_convert(); - // TODO check to see if there are any cronhooks before wasting a process - if(! $restart) + if (!$restart) Master::Summon(array('Cronhooks')); - set_config('system','lastcron',datetime_convert()); + set_config('system', 'lastcron', datetime_convert()); //All done - clear the lockfile @unlink($lockfile); diff --git a/Zotlabs/Daemon/Cron_daily.php b/Zotlabs/Daemon/Cron_daily.php index a6daad051..1983c68e6 100644 --- a/Zotlabs/Daemon/Cron_daily.php +++ b/Zotlabs/Daemon/Cron_daily.php @@ -6,7 +6,7 @@ use Zotlabs\Lib\Libzotdir; class Cron_daily { - static public function run($argc,$argv) { + static public function run($argc, $argv) { logger('cron_daily: start'); @@ -15,14 +15,12 @@ class Cron_daily { * */ - Libzotdir::check_upstream_directory(); - // Fire off the Cron_weekly process if it's the correct day. - $d3 = intval(datetime_convert('UTC','UTC','now','N')); - if($d3 == 7) { + $d3 = intval(datetime_convert('UTC', 'UTC', 'now', 'N')); + if ($d3 == 7) { Master::Summon(array('Cron_weekly')); } @@ -53,8 +51,8 @@ class Cron_daily { // Clean up emdedded content cache q("DELETE FROM cache WHERE updated < %s - INTERVAL %s", - db_utcnow(), - db_quoteinterval(get_config('system','active_expire_days', '30') . ' DAY') + db_utcnow(), + db_quoteinterval(get_config('system', 'active_expire_days', '30') . ' DAY') ); //update statistics in config @@ -68,8 +66,8 @@ class Cron_daily { // expire old delivery reports - $keep_reports = intval(get_config('system','expire_delivery_reports')); - if($keep_reports === 0) + $keep_reports = intval(get_config('system', 'expire_delivery_reports')); + if ($keep_reports === 0) $keep_reports = 10; q("delete from dreport where dreport_time < %s - INTERVAL %s", @@ -85,13 +83,12 @@ class Cron_daily { // Pull remote changes and push local changes. // potential issue: how do we keep from creating an endless update loop? - $dirmode = get_config('system','directory_mode'); + $dirmode = get_config('system', 'directory_mode'); - if($dirmode == DIRECTORY_MODE_SECONDARY || $dirmode == DIRECTORY_MODE_PRIMARY) { + if ($dirmode == DIRECTORY_MODE_SECONDARY || $dirmode == DIRECTORY_MODE_PRIMARY) { Libzotdir::sync_directories($dirmode); } - Master::Summon(array('Expire')); Master::Summon(array('Cli_suggest')); @@ -99,9 +96,10 @@ class Cron_daily { z6_discover(); - call_hooks('cron_daily',datetime_convert()); + $date = datetime_convert(); + call_hooks('cron_daily', $date); - set_config('system','last_expire_day',intval(datetime_convert('UTC','UTC','now','d'))); + set_config('system', 'last_expire_day', intval(datetime_convert('UTC', 'UTC', 'now', 'd'))); /** * End Cron Daily diff --git a/Zotlabs/Daemon/Cron_weekly.php b/Zotlabs/Daemon/Cron_weekly.php index d44400767..407aa40ef 100644 --- a/Zotlabs/Daemon/Cron_weekly.php +++ b/Zotlabs/Daemon/Cron_weekly.php @@ -4,21 +4,22 @@ namespace Zotlabs\Daemon; class Cron_weekly { - static public function run($argc,$argv) { + static public function run($argc, $argv) { /** * Cron Weekly - * + * * Actions in the following block are executed once per day only on Sunday (once per week). * */ - call_hooks('cron_weekly',datetime_convert()); + $date = datetime_convert(); + call_hooks('cron_weekly', $date); z_check_cert(); prune_hub_reinstalls(); - + mark_orphan_hubsxchans(); // Find channels that were removed in the last three weeks, but @@ -31,8 +32,8 @@ class Cron_weekly { db_utcnow(), db_quoteinterval('21 DAY'), db_utcnow(), db_quoteinterval('10 DAY') ); - if($r) { - foreach($r as $rv) { + if ($r) { + foreach ($r as $rv) { channel_remove_final($rv['channel_id']); } } @@ -43,14 +44,14 @@ class Cron_weekly { db_utcnow(), db_quoteinterval('14 DAY') ); - $dirmode = intval(get_config('system','directory_mode')); - if($dirmode === DIRECTORY_MODE_SECONDARY || $dirmode === DIRECTORY_MODE_PRIMARY) { - logger('regdir: ' . print_r(z_fetch_url(get_directory_primary() . '/regdir?f=&url=' . urlencode(z_root()) . '&realm=' . urlencode(get_directory_realm())),true)); + $dirmode = intval(get_config('system', 'directory_mode')); + if ($dirmode === DIRECTORY_MODE_SECONDARY || $dirmode === DIRECTORY_MODE_PRIMARY) { + logger('regdir: ' . print_r(z_fetch_url(get_directory_primary() . '/regdir?f=&url=' . urlencode(z_root()) . '&realm=' . urlencode(get_directory_realm())), true)); } // Check for dead sites Master::Summon(array('Checksites')); - + // update searchable doc indexes Master::Summon(array('Importdoc')); diff --git a/Zotlabs/Daemon/CurlAuth.php b/Zotlabs/Daemon/CurlAuth.php index de41382e3..2396da9aa 100644 --- a/Zotlabs/Daemon/CurlAuth.php +++ b/Zotlabs/Daemon/CurlAuth.php @@ -2,6 +2,8 @@ namespace Zotlabs\Daemon; +use App; + // generate a curl compatible cookie file with an authenticated session for the given channel_id. // If this file is then used with curl and the destination url is sent through zid() or manually // manipulated to add a zid, it should allow curl to provide zot magic-auth across domains. @@ -10,15 +12,15 @@ namespace Zotlabs\Daemon; class CurlAuth { - static public function run($argc,$argv) { + static public function run($argc, $argv) { - if($argc != 2) + if ($argc != 2) return; - \App::$session->start(); + App::$session->start(); $_SESSION['authenticated'] = 1; - $_SESSION['uid'] = $argv[1]; + $_SESSION['uid'] = $argv[1]; $x = session_id(); @@ -29,14 +31,14 @@ class CurlAuth { $output = ''; - if($e) { + if ($e) { $lines = file($f); - if($lines) { - foreach($lines as $line) { - if(strlen($line) > 0 && $line[0] != '#' && substr_count($line, "\t") == 6) { + if ($lines) { + foreach ($lines as $line) { + if (strlen($line) > 0 && $line[0] != '#' && substr_count($line, "\t") == 6) { $tokens = explode("\t", $line); $tokens = array_map('trim', $tokens); - if($tokens[4] > time()) { + if ($tokens[4] > time()) { $output .= $line . "\n"; } } @@ -46,9 +48,9 @@ class CurlAuth { } } $t = time() + (24 * 3600); - file_put_contents($f, $output . 'HttpOnly_' . \App::get_hostname() . "\tFALSE\t/\tTRUE\t$t\tPHPSESSID\t" . $x, (($e) ? FILE_APPEND : 0)); + file_put_contents($f, $output . 'HttpOnly_' . App::get_hostname() . "\tFALSE\t/\tTRUE\t$t\tPHPSESSID\t" . $x, (($e) ? FILE_APPEND : 0)); - file_put_contents($c,$x); + file_put_contents($c, $x); return; } diff --git a/Zotlabs/Daemon/Deliver.php b/Zotlabs/Daemon/Deliver.php index c853af6a8..f8149ee69 100644 --- a/Zotlabs/Daemon/Deliver.php +++ b/Zotlabs/Daemon/Deliver.php @@ -5,25 +5,25 @@ namespace Zotlabs\Daemon; require_once('include/queue_fn.php'); class Deliver { - - static public function run($argc,$argv) { - if($argc < 2) + static public function run($argc, $argv) { + + if ($argc < 2) return; - logger('deliver: invoked: ' . print_r($argv,true), LOGGER_DATA); + logger('deliver: invoked: ' . print_r($argv, true), LOGGER_DATA); - for($x = 1; $x < $argc; $x ++) { + for ($x = 1; $x < $argc; $x++) { - if(! $argv[$x]) + if (!$argv[$x]) continue; $r = q("select * from outq where outq_hash = '%s'", dbesc($argv[$x]) ); - if($r) { - queue_deliver($r[0],true); + if ($r) { + queue_deliver($r[0], true); } } diff --git a/Zotlabs/Daemon/Deliver_hooks.php b/Zotlabs/Daemon/Deliver_hooks.php index e8b5acef0..4d3ce4e1d 100644 --- a/Zotlabs/Daemon/Deliver_hooks.php +++ b/Zotlabs/Daemon/Deliver_hooks.php @@ -2,21 +2,18 @@ namespace Zotlabs\Daemon; -require_once('include/zot.php'); - class Deliver_hooks { - static public function run($argc,$argv) { + static public function run($argc, $argv) { - if($argc < 2) + if ($argc < 2) return; - $r = q("select * from item where id = '%d'", intval($argv[1]) ); - if($r) - call_hooks('notifier_normal',$r[0]); + if ($r) + call_hooks('notifier_normal', $r[0]); } } diff --git a/Zotlabs/Daemon/Directory.php b/Zotlabs/Daemon/Directory.php index ab58432de..1f307b273 100644 --- a/Zotlabs/Daemon/Directory.php +++ b/Zotlabs/Daemon/Directory.php @@ -8,40 +8,40 @@ use Zotlabs\Lib\Queue; class Directory { - static public function run($argc,$argv){ + static public function run($argc, $argv) { - if($argc < 2) + if ($argc < 2) return; - $force = false; + $force = false; $pushall = true; - if($argc > 2) { - if($argv[2] === 'force') + if ($argc > 2) { + if ($argv[2] === 'force') $force = true; - if($argv[2] === 'nopush') + if ($argv[2] === 'nopush') $pushall = false; - } + } logger('directory update', LOGGER_DEBUG); - $dirmode = get_config('system','directory_mode'); - if($dirmode === false) + $dirmode = get_config('system', 'directory_mode'); + if ($dirmode === false) $dirmode = DIRECTORY_MODE_NORMAL; $x = q("select * from channel where channel_id = %d limit 1", intval($argv[1]) ); - if(! $x) + if (!$x) return; $channel = $x[0]; - if($dirmode != DIRECTORY_MODE_NORMAL) { + if ($dirmode != DIRECTORY_MODE_NORMAL) { // this is an in-memory update and we don't need to send a network packet. - Libzotdir::local_dir_update($argv[1],$force); + Libzotdir::local_dir_update($argv[1], $force); q("update channel set channel_dirdate = '%s' where channel_id = %d", dbesc(datetime_convert()), @@ -49,8 +49,8 @@ class Directory { ); // Now update all the connections - if($pushall) - Master::Summon(array('Notifier','refresh_all',$channel['channel_id'])); + if ($pushall) + Master::Summon(array('Notifier', 'refresh_all', $channel['channel_id'])); return; } @@ -63,14 +63,12 @@ class Directory { // ensure the upstream directory is updated - - $packet = Libzot::build_packet($channel,(($force) ? 'force_refresh' : 'refresh')); - $z = Libzot::zot($url,$packet,$channel); - + $packet = Libzot::build_packet($channel, (($force) ? 'force_refresh' : 'refresh')); + $z = Libzot::zot($url, $packet, $channel); // re-queue if unsuccessful - if(! $z['success']) { + if (!$z['success']) { /** @FIXME we aren't updating channel_dirdate if we have to queue * the directory packet. That means we'll try again on the next poll run. @@ -95,8 +93,8 @@ class Directory { } // Now update all the connections - if($pushall) - Master::Summon(array('Notifier','refresh_all',$channel['channel_id'])); + if ($pushall) + Master::Summon(array('Notifier', 'refresh_all', $channel['channel_id'])); } } diff --git a/Zotlabs/Daemon/Expire.php b/Zotlabs/Daemon/Expire.php index a688d6f97..c4ff8aec6 100644 --- a/Zotlabs/Daemon/Expire.php +++ b/Zotlabs/Daemon/Expire.php @@ -5,23 +5,24 @@ namespace Zotlabs\Daemon; class Expire { - static public function run($argc,$argv){ + static public function run($argc, $argv) { cli_startup(); - - $pid = get_config('expire', 'procid', false); + + $pid = get_config('procid', 'expire', false); if ($pid && (function_exists('posix_kill') ? posix_kill($pid, 0) : true)) { - logger('Expire: procedure already run with pid ' . $pid, LOGGER_DEBUG); - return; + logger('procedure already run with pid ' . $pid, LOGGER_DEBUG); + return; } - + $pid = getmypid(); - set_config('expire', 'procid', $pid); + set_config('procid', 'expire', $pid); // perform final cleanup on previously delete items $r = q("select id from item where item_deleted = 1 and item_pending_remove = 0 and changed < %s - INTERVAL %s", - db_utcnow(), db_quoteinterval('10 DAY') + db_utcnow(), + db_quoteinterval('10 DAY') ); if ($r) { foreach ($r as $rr) { @@ -32,23 +33,22 @@ class Expire { // physically remove anything that has been deleted for more than two months /** @FIXME - this is a wretchedly inefficient query */ - $r = q("delete from item where item_pending_remove = 1 and changed < %s - INTERVAL %s", - db_utcnow(), db_quoteinterval('36 DAY') + q("delete from item where item_pending_remove = 1 and changed < %s - INTERVAL %s", + db_utcnow(), + db_quoteinterval('36 DAY') ); - /** @FIXME make this optional as it could have a performance impact on large sites */ - if (intval(get_config('system', 'optimize_items'))) q("optimize table item"); logger('expire: start with pid ' . $pid, LOGGER_DEBUG); - $site_expire = intval(get_config('system', 'default_expire_days')); - $commented_days = intval(get_config('system','active_expire_days')); + $site_expire = intval(get_config('system', 'default_expire_days')); + $commented_days = intval(get_config('system', 'active_expire_days')); logger('site_expire: ' . $site_expire); - $r = q("SELECT channel_id, channel_system, channel_address, channel_expire_days from channel where true"); + $r = dbq("SELECT channel_id, channel_system, channel_address, channel_expire_days from channel where true"); if ($r) { foreach ($r as $rr) { @@ -64,11 +64,12 @@ class Expire { $channel_expire = $service_class_expire; else $channel_expire = $site_expire; - + if (intval($channel_expire) && (intval($channel_expire) < intval($rr['channel_expire_days'])) || intval($rr['channel_expire_days'] == 0)) { $expire_days = $channel_expire; - } else { + } + else { $expire_days = $rr['channel_expire_days']; } @@ -93,13 +94,13 @@ class Expire { } logger('Expire: sys interval: ' . $expire_days, LOGGER_DEBUG); - + if ($expire_days) item_expire($x['channel_id'], $expire_days, $commented_days); logger('Expire: sys: done', LOGGER_DEBUG); } - - del_config('expire', 'procid'); + + del_config('procid', 'expire'); } } diff --git a/Zotlabs/Daemon/Externals.php b/Zotlabs/Daemon/Externals.php index a9988a509..064b3f71d 100644 --- a/Zotlabs/Daemon/Externals.php +++ b/Zotlabs/Daemon/Externals.php @@ -2,97 +2,180 @@ namespace Zotlabs\Daemon; -require_once('include/zot.php'); +use Zotlabs\Lib\Activity; +use Zotlabs\Lib\ActivityStreams; +use Zotlabs\Lib\ASCollection; + require_once('include/channel.php'); class Externals { - static public function run($argc,$argv){ + static public function run($argc, $argv) { - $total = 0; + logger('externals: start'); + + $importer = get_sys_channel(); + $total = 0; $attempts = 0; logger('externals: startup', LOGGER_DEBUG); // pull in some public posts + while ($total == 0 && $attempts < 3) { + $arr = ['url' => '']; + call_hooks('externals_url_select', $arr); - while($total == 0 && $attempts < 3) { - $arr = array('url' => ''); - call_hooks('externals_url_select',$arr); - - if($arr['url']) { + if ($arr['url']) { $url = $arr['url']; - } + } else { $randfunc = db_getfunc('RAND'); - // fixme this query does not deal with directory realms. + // fixme this query does not deal with directory realms. - $r = q("select site_url, site_pull from site where site_url != '%s' and site_flags != %d and site_type = %d and site_dead = 0 order by $randfunc limit 1", + $r = q("select site_url, site_pull from site where site_url != '%s' + and site_flags != %d and site_type = %d + and site_dead = 0 and site_project like '%s' and site_version > '5.3.1' order by $randfunc limit 1", dbesc(z_root()), intval(DIRECTORY_MODE_STANDALONE), - intval(SITE_TYPE_ZOT) + intval(SITE_TYPE_ZOT), + dbesc('hubzilla%') ); - if($r) + if ($r) $url = $r[0]['site_url']; } $blacklisted = false; - if(! check_siteallowed($url)) { + if (!check_siteallowed($url)) { logger('blacklisted site: ' . $url); $blacklisted = true; } - $attempts ++; + $attempts++; // make sure we can eventually break out if somebody blacklists all known sites - if($blacklisted) { - if($attempts > 20) + if ($blacklisted) { + if ($attempts > 20) break; - $attempts --; + $attempts--; continue; } - if($url) { - if($r[0]['site_pull'] > NULL_DATE) - $mindate = urlencode(datetime_convert('','',$r[0]['site_pull'] . ' - 1 day')); - else { - $days = get_config('externals','since_days'); - if($days === false) - $days = 15; - $mindate = urlencode(datetime_convert('','','now - ' . intval($days) . ' days')); - } + if ($url) { - $feedurl = $url . '/zotfeed?f=&mindate=' . $mindate; + $max = intval(get_config('system', 'max_imported_posts', 30)); + if (intval($max)) { + logger('externals: fetching outbox'); - logger('externals: pulling public content from ' . $feedurl, LOGGER_DEBUG); + $feed_url = $url . '/zotfeed'; + $obj = new ASCollection($feed_url, $importer, 0, $max); + $messages = $obj->get(); - $x = z_fetch_url($feedurl); - if(($x) && ($x['success'])) { - - q("update site set site_pull = '%s' where site_url = '%s'", - dbesc(datetime_convert()), - dbesc($url) - ); - - $j = json_decode($x['body'],true); - if($j['success'] && $j['messages']) { - $sys = get_sys_channel(); - foreach($j['messages'] as $message) { - // on these posts, clear any route info. - $message['route'] = ''; - $results = process_delivery(array('hash' => 'undefined'), get_item_elements($message), - array(array('hash' => $sys['xchan_hash'])), false, true); - $total ++; + if ($messages) { + foreach ($messages as $message) { + if (is_string($message)) { + $message = Activity::fetch($message, $importer); + } + $AS = new ActivityStreams($message); + if ($AS->is_valid() && is_array($AS->obj)) { + $item = Activity::decode_note($AS); + Activity::store($importer, $importer['xchan_hash'], $AS, $item, true); + $total++; + } } - logger('externals: import_public_posts: ' . $total . ' messages imported', LOGGER_DEBUG); } + logger('externals: import_public_posts: ' . $total . ' messages imported', LOGGER_DEBUG); } } } + return; + + /* $total = 0; + $attempts = 0; + + logger('externals: startup', LOGGER_DEBUG); + + // pull in some public posts + + while ($total == 0 && $attempts < 3) { + $arr = ['url' => '']; + call_hooks('externals_url_select', $arr); + + if ($arr['url']) { + $url = $arr['url']; + } + else { + $randfunc = db_getfunc('RAND'); + + // fixme this query does not deal with directory realms. + + $r = q("select site_url, site_pull from site where site_url != '%s' and site_flags != %d and site_type = %d and site_dead = 0 order by $randfunc limit 1", + dbesc(z_root()), + intval(DIRECTORY_MODE_STANDALONE), + intval(SITE_TYPE_ZOT) + ); + if ($r) + $url = $r[0]['site_url']; + } + + $blacklisted = false; + + if (!check_siteallowed($url)) { + logger('blacklisted site: ' . $url); + $blacklisted = true; + } + + $attempts++; + + // make sure we can eventually break out if somebody blacklists all known sites + + if ($blacklisted) { + if ($attempts > 20) + break; + $attempts--; + continue; + } + + if ($url) { + if ($r[0]['site_pull'] > NULL_DATE) + $mindate = urlencode(datetime_convert('', '', $r[0]['site_pull'] . ' - 1 day')); + else { + $days = get_config('externals', 'since_days'); + if ($days === false) + $days = 15; + $mindate = urlencode(datetime_convert('', '', 'now - ' . intval($days) . ' days')); + } + + $feedurl = $url . '/zotfeed?f=&mindate=' . $mindate; + + logger('externals: pulling public content from ' . $feedurl, LOGGER_DEBUG); + + $x = z_fetch_url($feedurl); + if (($x) && ($x['success'])) { + + q("update site set site_pull = '%s' where site_url = '%s'", + dbesc(datetime_convert()), + dbesc($url) + ); + + $j = json_decode($x['body'], true); + if ($j['success'] && $j['messages']) { + $sys = get_sys_channel(); + foreach ($j['messages'] as $message) { + // on these posts, clear any route info. + $message['route'] = ''; + process_delivery(['hash' => 'undefined'], get_item_elements($message), + [['hash' => $sys['xchan_hash']]], false, true); + $total++; + } + logger('externals: import_public_posts: ' . $total . ' messages imported', LOGGER_DEBUG); + } + } + } + }*/ } } diff --git a/Zotlabs/Daemon/Gprobe.php b/Zotlabs/Daemon/Gprobe.php index 9e74eb8b5..29efcf475 100644 --- a/Zotlabs/Daemon/Gprobe.php +++ b/Zotlabs/Daemon/Gprobe.php @@ -9,27 +9,27 @@ use Zotlabs\Lib\Zotfinger; // performs zot_finger on $argv[1], which is a hex_encoded webbie/reddress class Gprobe { - static public function run($argc,$argv) { + static public function run($argc, $argv) { - if($argc != 2) + if ($argc != 2) return; $url = hex2bin($argv[1]); - if(! strpos($url,'@')) + if (!strpos($url, '@')) return; $r = q("select * from hubloc where hubloc_addr = '%s' and hubloc_network = 'zot6' limit 1", dbesc($url) ); - if(! $r) { + if (!$r) { $href = Webfinger::zot_url(punify($url)); - if($href) { + if ($href) { $zf = Zotfinger::exec($href, null); } - if(is_array($zf) && array_path_exists('signature/signer',$zf) && $zf['signature']['signer'] === $href && intval($zf['signature']['header_valid'])) { - $xc = Libzot::import_xchan($zf['data']); + if (is_array($zf) && array_path_exists('signature/signer', $zf) && $zf['signature']['signer'] === $href && intval($zf['signature']['header_valid'])) { + Libzot::import_xchan($zf['data']); } } diff --git a/Zotlabs/Daemon/Importdoc.php b/Zotlabs/Daemon/Importdoc.php old mode 100755 new mode 100644 index 0ca589e4a..9e818e2b3 --- a/Zotlabs/Daemon/Importdoc.php +++ b/Zotlabs/Daemon/Importdoc.php @@ -5,7 +5,7 @@ namespace Zotlabs\Daemon; class Importdoc { - static public function run($argc,$argv) { + static public function run($argc, $argv) { require_once('include/help.php'); @@ -16,20 +16,20 @@ class Importdoc { static public function update_docs_dir($s) { $f = basename($s); $d = dirname($s); - if($s === 'doc/html') + if ($s === 'doc/html') return; $files = glob("$d/$f"); - if($files) { - foreach($files as $fi) { - if($fi === 'doc/html') { + if ($files) { + foreach ($files as $fi) { + if ($fi === 'doc/html') { continue; } - if(is_dir($fi)) { + if (is_dir($fi)) { self::update_docs_dir("$fi/*"); } else { // don't update media content - if(strpos(z_mime_content_type($fi),'text') === 0) { + if (strpos(z_mime_content_type($fi), 'text') === 0) { store_doc_file($fi); } } diff --git a/Zotlabs/Daemon/Importfile.php b/Zotlabs/Daemon/Importfile.php index 749949679..299fb1ee5 100644 --- a/Zotlabs/Daemon/Importfile.php +++ b/Zotlabs/Daemon/Importfile.php @@ -6,22 +6,21 @@ use Zotlabs\Lib\Libsync; class Importfile { - static public function run($argc,$argv){ + static public function run($argc, $argv) { - logger('Importfile: ' . print_r($argv,true)); + logger('Importfile: ' . print_r($argv, true)); - if($argc < 3) + if ($argc < 3) return; $channel = channelx_by_n($argv[1]); - if(! $channel) + if (!$channel) return; $srcfile = $argv[2]; $folder = (($argc > 3) ? $argv[3] : ''); $dstname = (($argc > 4) ? $argv[4] : ''); - - $hash = random_string(); + $hash = random_string(); $arr = [ 'src' => $srcfile, @@ -35,15 +34,15 @@ class Importfile { 'replace' => true ]; - if($folder) + if ($folder) $arr['folder'] = $folder; - attach_store($channel,$channel['channel_hash'],'import',$arr); + attach_store($channel, $channel['channel_hash'], 'import', $arr); + + $sync = attach_export_data($channel, $hash); + if ($sync) + Libsync::build_sync_packet($channel['channel_id'], ['file' => [$sync]]); - $sync = attach_export_data($channel,$hash); - if($sync) - Libsync::build_sync_packet($channel['channel_id'],array('file' => array($sync))); - return; } } diff --git a/Zotlabs/Daemon/Master.php b/Zotlabs/Daemon/Master.php index 8c3a7e570..6fa656be5 100644 --- a/Zotlabs/Daemon/Master.php +++ b/Zotlabs/Daemon/Master.php @@ -2,58 +2,57 @@ namespace Zotlabs\Daemon; -if(array_search( __file__ , get_included_files()) === 0) { +if (array_search(__file__, get_included_files()) === 0) { require_once('include/cli_startup.php'); array_shift($argv); $argc = count($argv); - if($argc) - Master::Release($argc,$argv); + if ($argc) + Master::Release($argc, $argv); return; } - class Master { static public function Summon($arr) { $hookinfo = [ - 'argv'=>$arr + 'argv' => $arr ]; - call_hooks ('daemon_master_summon',$hookinfo); + call_hooks('daemon_master_summon', $hookinfo); - $arr = $hookinfo['argv']; + $arr = $hookinfo['argv']; $argc = count($arr); - if ((!is_array($arr) || (count($arr) < 1))) { - logger("Summon handled by hook.",LOGGER_DEBUG); + if ((!is_array($arr) || ($argc < 1))) { + logger("Summon handled by hook.", LOGGER_DEBUG); return; } - $phpbin = get_config('system','phpbin','php'); - proc_run($phpbin,'Zotlabs/Daemon/Master.php',$arr); + $phpbin = get_config('system', 'phpbin', 'php'); + proc_run($phpbin, 'Zotlabs/Daemon/Master.php', $arr); } - static public function Release($argc,$argv) { + static public function Release($argc, $argv) { cli_startup(); $hookinfo = [ - 'argv'=>$argv + 'argv' => $argv ]; - call_hooks ('daemon_master_release',$hookinfo); + call_hooks('daemon_master_release', $hookinfo); $argv = $hookinfo['argv']; $argc = count($argv); - if ((!is_array($argv) || (count($argv) < 1))) { - logger("Release handled by hook.",LOGGER_DEBUG); + if ((!is_array($argv) || ($argc < 1))) { + logger("Release handled by hook.", LOGGER_DEBUG); return; } - logger('Master: release: ' . json_encode($argv), LOGGER_ALL,LOG_DEBUG); - $cls = '\\Zotlabs\\Daemon\\' . $argv[0]; - $cls::run($argc,$argv); + logger('Master: release: ' . json_encode($argv), LOGGER_ALL, LOG_DEBUG); + $cls = '\\Zotlabs\\Daemon\\' . $argv[0]; + $cls::run($argc, $argv); } } diff --git a/Zotlabs/Daemon/Notifier.php b/Zotlabs/Daemon/Notifier.php index 626299661..02a0e155f 100644 --- a/Zotlabs/Daemon/Notifier.php +++ b/Zotlabs/Daemon/Notifier.php @@ -14,7 +14,6 @@ require_once('include/items.php'); require_once('include/bbcode.php'); - /* * This file was at one time responsible for doing all deliveries, but this caused * big problems on shared hosting systems, where the process might get killed by the @@ -81,198 +80,198 @@ require_once('include/bbcode.php'); */ - class Notifier { - static public function run($argc,$argv){ + static public function run($argc, $argv) { - if($argc < 3) + if ($argc < 3) return; - logger('notifier: invoked: ' . print_r($argv,true), LOGGER_DEBUG); + logger('notifier: invoked: ' . print_r($argv, true), LOGGER_DEBUG); $cmd = $argv[1]; $item_id = $argv[2]; - if(! $item_id) + if (!$item_id) return; $sys = get_sys_channel(); - $deliveries = array(); + $deliveries = []; - $request = false; - $mail = false; - $top_level = false; - $location = false; - $recipients = array(); - $url_recipients = array(); - $normal_mode = true; - $packet_type = 'undefined'; + $request = false; + $mail = false; + $location = false; + $recipients = []; + $normal_mode = true; + $packet_type = 'undefined'; - if($cmd === 'mail' || $cmd === 'single_mail') { + if ($cmd === 'mail' || $cmd === 'single_mail') { $normal_mode = false; - $mail = true; - $private = true; - $message = q("SELECT * FROM mail WHERE id = %d LIMIT 1", - intval($item_id) + $mail = true; + $private = true; + $message = q("SELECT * FROM mail WHERE id = %d LIMIT 1", + intval($item_id) ); - if(! $message) { + if (!$message) { return; } xchan_mail_query($message[0]); - $uid = $message[0]['channel_id']; + $uid = $message[0]['channel_id']; $recipients[] = $message[0]['from_xchan']; // include clones $recipients[] = $message[0]['to_xchan']; - $item = $message[0]; - + $item = $message[0]; $encoded_item = encode_mail($item); $s = q("select * from channel where channel_id = %d limit 1", - intval($item['channel_id']) + intval($uid) ); - if($s) + if ($s) $channel = $s[0]; } - elseif($cmd === 'request') { - $channel_id = $item_id; - $xchan = $argv[3]; + elseif ($cmd === 'request') { + $channel_id = $item_id; + $xchan = $argv[3]; $request_message_id = $argv[4]; $s = q("select * from channel where channel_id = %d limit 1", intval($channel_id) ); - if($s) + if ($s) $channel = $s[0]; - $private = true; + $private = true; $recipients[] = $xchan; - $packet_type = 'request'; - $normal_mode = false; + $packet_type = 'request'; + $normal_mode = false; } - elseif($cmd === 'keychange') { + elseif ($cmd === 'keychange') { $channel = channelx_by_n($item_id); - $r = q("select abook_xchan from abook where abook_channel = %d", + + $r = q("select abook_xchan from abook where abook_channel = %d", intval($item_id) ); - if($r) { - foreach($r as $rr) { + if ($r) { + foreach ($r as $rr) { $recipients[] = $rr['abook_xchan']; } } - $private = false; + $private = false; $packet_type = 'keychange'; $normal_mode = false; } - elseif(in_array($cmd, [ 'permission_update', 'permission_reject', 'permission_accept', 'permission_create' ])) { + elseif (in_array($cmd, ['permission_update', 'permission_reject', 'permission_accept', 'permission_create'])) { // Get the (single) recipient $r = q("select * from abook left join xchan on abook_xchan = xchan_hash where abook_id = %d and abook_self = 0", intval($item_id) ); - if($r) { + if ($r) { $uid = $r[0]['abook_channel']; // Get the sender $channel = channelx_by_n($uid); - if($channel) { - $perm_update = array('sender' => $channel, 'recipient' => $r[0], 'success' => false, 'deliveries' => ''); + if ($channel) { + $perm_update = ['sender' => $channel, 'recipient' => $r[0], 'success' => false, 'deliveries' => '']; - if($cmd === 'permission_create') - call_hooks('permissions_create',$perm_update); - elseif($cmd === 'permission_accept') - call_hooks('permissions_accept',$perm_update); - elseif($cmd === 'permission_reject') - call_hooks('permissions_reject',$perm_update); + if ($cmd === 'permission_create') + call_hooks('permissions_create', $perm_update); + elseif ($cmd === 'permission_accept') + call_hooks('permissions_accept', $perm_update); + elseif ($cmd === 'permission_reject') + call_hooks('permissions_reject', $perm_update); else - call_hooks('permissions_update',$perm_update); + call_hooks('permissions_update', $perm_update); - if($perm_update['success']) { - if($perm_update['deliveries']) { + if ($perm_update['success']) { + if ($perm_update['deliveries']) { $deliveries[] = $perm_update['deliveries']; do_delivery($deliveries); } return; } else { - $recipients[] = $r[0]['abook_xchan']; - $private = false; - $packet_type = 'refresh'; - $packet_recips = array(array('guid' => $r[0]['xchan_guid'],'guid_sig' => $r[0]['xchan_guid_sig'],'hash' => $r[0]['xchan_hash'])); + $recipients[] = $r[0]['abook_xchan']; + $private = false; + $packet_type = 'refresh'; + $packet_recips = [['guid' => $r[0]['xchan_guid'], 'guid_sig' => $r[0]['xchan_guid_sig'], 'hash' => $r[0]['xchan_hash']]]; } } } } - elseif($cmd === 'refresh_all') { + elseif ($cmd === 'refresh_all') { logger('notifier: refresh_all: ' . $item_id); - $uid = $item_id; + $uid = $item_id; $channel = channelx_by_n($item_id); - $r = q("select abook_xchan from abook where abook_channel = %d", - intval($item_id) + + $r = q("select abook_xchan from abook where abook_channel = %d", + intval($uid) ); - if($r) { - foreach($r as $rr) { + if ($r) { + foreach ($r as $rr) { $recipients[] = $rr['abook_xchan']; } } - $private = false; + $private = false; $packet_type = 'refresh'; } - elseif($cmd === 'location') { + elseif ($cmd === 'location') { logger('notifier: location: ' . $item_id); $s = q("select * from channel where channel_id = %d limit 1", intval($item_id) ); - if($s) + if ($s) $channel = $s[0]; - $uid = $item_id; - $recipients = array(); - $r = q("select abook_xchan from abook where abook_channel = %d", - intval($item_id) + + $uid = $item_id; + $recipients = []; + + $r = q("select abook_xchan from abook where abook_channel = %d", + intval($uid) ); - if($r) { - foreach($r as $rr) { + if ($r) { + foreach ($r as $rr) { $recipients[] = $rr['abook_xchan']; } } - $encoded_item = array('locations' => Libzot::encode_locations($channel),'type' => 'location', 'encoding' => 'zot'); - $target_item = array('aid' => $channel['channel_account_id'],'uid' => $channel['channel_id']); - $private = false; - $packet_type = 'location'; - $location = true; + $encoded_item = ['locations' => Libzot::encode_locations($channel), 'type' => 'location', 'encoding' => 'zot']; + $target_item = ['aid' => $channel['channel_account_id'], 'uid' => $channel['channel_id']]; + $private = false; + $packet_type = 'location'; + $location = true; } - elseif($cmd === 'purge') { + elseif ($cmd === 'purge') { $xchan = $argv[3]; logger('notifier: purge: ' . $item_id . ' => ' . $xchan); - if (! $xchan) { + if (!$xchan) { return; } - $channel = channelx_by_n($item_id); - $recipients[] = $xchan; - $private = true; - $packet_type = 'purge'; + $channel = channelx_by_n($item_id); + $recipients[] = $xchan; + $private = true; + $packet_type = 'purge'; $packet_recips[] = ['hash' => $xchan]; } - elseif($cmd === 'purge_all') { + elseif ($cmd === 'purge_all') { logger('notifier: purge_all: ' . $item_id); $channel = channelx_by_n($item_id); $recipients = []; - $r = q("select abook_xchan from abook where abook_channel = %d and abook_self = 0", + $r = q("select abook_xchan from abook where abook_channel = %d and abook_self = 0", intval($item_id) ); - if (! $r) { + if (!$r) { return; } foreach ($r as $rr) { - $recipients[] = $rr['abook_xchan']; + $recipients[] = $rr['abook_xchan']; $packet_recips[] = ['hash' => $rr['abook_xchan']]; } - $private = false; + $private = false; $packet_type = 'purge'; @@ -287,7 +286,7 @@ class Notifier { intval($item_id) ); - if(! $r) + if (!$r) return; xchan_query($r); @@ -296,25 +295,22 @@ class Notifier { $target_item = $r[0]; - if(in_array($target_item['author']['xchan_network'], ['rss', 'anon'])) { + if (in_array($target_item['author']['xchan_network'], ['rss', 'anon'])) { logger('notifier: target item author is not a fetchable actor', LOGGER_DEBUG); return; } - $deleted_item = false; - - if(intval($target_item['item_deleted'])) { + if (intval($target_item['item_deleted'])) { logger('notifier: target item ITEM_DELETED', LOGGER_DEBUG); - $deleted_item = true; } - if(! in_array(intval($target_item['item_type']), [ ITEM_TYPE_POST ] )) { - $hookinfo=[ - 'targetitem'=>$target_item, - 'deliver'=>false + if (!in_array(intval($target_item['item_type']), [ITEM_TYPE_POST])) { + $hookinfo = [ + 'targetitem' => $target_item, + 'deliver' => false ]; if (intval($target_item['item_type'] == ITEM_TYPE_CUSTOM)) { - call_hooks('customitem_deliver',$hookinfo); + call_hooks('customitem_deliver', $hookinfo); } if (!$hookinfo['deliver']) { @@ -328,14 +324,14 @@ class Notifier { // Check for non published items, but allow an exclusion for transmitting hidden file activities - if(intval($target_item['item_unpublished']) || intval($target_item['item_delayed']) || + if (intval($target_item['item_unpublished']) || intval($target_item['item_delayed']) || intval($target_item['item_blocked']) || - ( intval($target_item['item_hidden']) && ($target_item['obj_type'] !== ACTIVITY_OBJ_FILE))) { + (intval($target_item['item_hidden']) && ($target_item['obj_type'] !== ACTIVITY_OBJ_FILE))) { logger('notifier: target item not published, so not forwardable', LOGGER_DEBUG); return; } - if(strpos($target_item['postopts'],'nodeliver') !== false) { + if (strpos($target_item['postopts'], 'nodeliver') !== false) { logger('notifier: target item is undeliverable', LOGGER_DEBUG); return; } @@ -343,17 +339,16 @@ class Notifier { $s = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_id = %d limit 1", intval($target_item['uid']) ); - if($s) + if ($s) $channel = $s[0]; - if($channel['channel_hash'] !== $target_item['author_xchan'] && $channel['channel_hash'] !== $target_item['owner_xchan']) { + if ($channel['channel_hash'] !== $target_item['author_xchan'] && $channel['channel_hash'] !== $target_item['owner_xchan']) { logger("notifier: Sending channel {$channel['channel_hash']} is not owner {$target_item['owner_xchan']} or author {$target_item['author_xchan']}", LOGGER_NORMAL, LOG_WARNING); return; } - - if($target_item['mid'] === $target_item['parent_mid']) { - $parent_item = $target_item; + if ($target_item['mid'] === $target_item['parent_mid']) { + $parent_item = $target_item; $top_level_post = true; } else { @@ -362,10 +357,10 @@ class Notifier { intval($target_item['parent']) ); - if(! $r) + if (!$r) return; - if(strpos($r[0]['postopts'],'nodeliver') !== false) { + if (strpos($r[0]['postopts'], 'nodeliver') !== false) { logger('notifier: target item is undeliverable', LOGGER_DEBUG, LOG_NOTICE); return; } @@ -373,34 +368,34 @@ class Notifier { xchan_query($r); $r = fetch_post_tags($r); - $parent_item = $r[0]; + $parent_item = $r[0]; $top_level_post = false; } // avoid looping of discover items 12/4/2014 - if($sys && $parent_item['uid'] == $sys['channel_id']) + if ($sys && $parent_item['uid'] == $sys['channel_id']) return; $encoded_item = encode_item($target_item); // Re-use existing signature unless the activity type changed to a Tombstone, which won't verify. - $m = ((intval($target_item['item_deleted'])) ? '' : get_iconfig($target_item,'activitystreams','signed_data')); + $m = ((intval($target_item['item_deleted'])) ? '' : get_iconfig($target_item, 'activitypub', 'signed_data')); - if($m) { - $activity = json_decode($m,true); + if ($m) { + $activity = json_decode($m, true); } else { $activity = array_merge(['@context' => [ ACTIVITYSTREAMS_JSONLD_REV, 'https://w3id.org/security/v1', z_root() . ZOT_APSCHEMA_REV - ]], Activity::encode_activity($target_item) + ]], Activity::encode_activity($target_item) ); } - logger('target_item: ' . print_r($target_item,true), LOGGER_DEBUG); - logger('encoded: ' . print_r($activity,true), LOGGER_DEBUG); + logger('target_item: ' . print_r($target_item, true), LOGGER_DEBUG); + logger('encoded: ' . print_r($activity, true), LOGGER_DEBUG); // Send comments to the owner to re-deliver to everybody in the conversation // We only do this if the item in question originated on this site. This prevents looping. @@ -411,9 +406,7 @@ class Notifier { // flag on comments for an extended period. So we'll also call comment_local_origin() which looks at // the hostname in the message_id and provides a second (fallback) opinion. - $relay_to_owner = (((! $top_level_post) && (intval($target_item['item_origin'])) && comment_local_origin($target_item)) ? true : false); - - + $relay_to_owner = (((!$top_level_post) && (intval($target_item['item_origin'])) && comment_local_origin($target_item)) ? true : false); $uplink = false; @@ -425,43 +418,42 @@ class Notifier { // tag_deliver'd post which needs to be sent back to the original author - if(($cmd === 'uplink') && intval($parent_item['item_uplink']) && (! $top_level_post)) { + if (($cmd === 'uplink') && intval($parent_item['item_uplink']) && (!$top_level_post)) { logger('notifier: uplink'); $uplink = true; } - if(($relay_to_owner || $uplink) && ($cmd !== 'relay')) { + if (($relay_to_owner || $uplink) && ($cmd !== 'relay')) { logger('notifier: followup relay', LOGGER_DEBUG); - $recipients = array(($uplink) ? $parent_item['source_xchan'] : $parent_item['owner_xchan']); - $private = true; - if(! $encoded_item['flags']) - $encoded_item['flags'] = array(); + $recipients = [($uplink) ? $parent_item['source_xchan'] : $parent_item['owner_xchan']]; + $private = true; + if (!$encoded_item['flags']) + $encoded_item['flags'] = []; $encoded_item['flags'][] = 'relay'; - $upstream = true; + $upstream = true; } else { logger('notifier: normal distribution', LOGGER_DEBUG); - if($cmd === 'relay') + if ($cmd === 'relay') logger('notifier: owner relay'); $upstream = false; // if our parent is a tag_delivery recipient, uplink to the original author causing // a delivery fork. - if(($parent_item) && intval($parent_item['item_uplink']) && (! $top_level_post) && ($cmd !== 'uplink')) { + if (($parent_item) && intval($parent_item['item_uplink']) && (!$top_level_post) && ($cmd !== 'uplink')) { // don't uplink a relayed post to the relay owner - if($parent_item['source_xchan'] !== $parent_item['owner_xchan']) { + if ($parent_item['source_xchan'] !== $parent_item['owner_xchan']) { logger('notifier: uplinking this item'); - Master::Summon(array('Notifier','uplink',$item_id)); + Master::Summon(['Notifier', 'uplink', $item_id]); } } - $private = false; - $recipients = collect_recipients($parent_item,$private); - + $private = false; + $recipients = collect_recipients($parent_item, $private); if ($top_level_post) { // remove clones who will receive the post via sync - $recipients = array_diff($recipients, [ $target_item['owner_xchan'] ]); + $recipients = array_diff($recipients, [$target_item['owner_xchan']]); } // FIXME add any additional recipients such as mentions, etc. @@ -474,32 +466,31 @@ class Notifier { // Generic delivery section, we have an encoded item and recipients // Now start the delivery process - $x = $encoded_item; + $x = $encoded_item; $x['title'] = 'private'; - $x['body'] = 'private'; - logger('notifier: encoded item: ' . print_r($x,true), LOGGER_DATA, LOG_DEBUG); + $x['body'] = 'private'; + logger('notifier: encoded item: ' . print_r($x, true), LOGGER_DATA, LOG_DEBUG); //logger('notifier: encoded activity: ' . print_r($activity,true), LOGGER_DATA, LOG_DEBUG); stringify_array_elms($recipients); - if(! $recipients) { + if (!$recipients) { logger('no recipients'); return; } // logger('notifier: recipients: ' . print_r($recipients,true), LOGGER_NORMAL, LOG_DEBUG); - $env_recips = (($private) ? array() : null); + $env_recips = (($private) ? [] : null); - $details = q("select xchan_hash, xchan_network, xchan_addr, xchan_guid, xchan_guid_sig from xchan where xchan_hash in (" . protect_sprintf(implode(',',$recipients)) . ")"); + $details = q("select xchan_hash, xchan_network, xchan_addr, xchan_guid, xchan_guid_sig from xchan where xchan_hash in (" . protect_sprintf(implode(',', $recipients)) . ")"); - $recip_list = array(); - - if($details) { - foreach($details as $d) { + $recip_list = []; + if ($details) { + foreach ($details as $d) { $recip_list[] = $d['xchan_addr'] . ' (' . $d['xchan_hash'] . ')'; - if($private) { + if ($private) { $env_recips[] = [ 'guid' => $d['xchan_guid'], 'guid_sig' => $d['xchan_guid_sig'], @@ -535,8 +526,8 @@ class Notifier { ]; call_hooks('notifier_process', $narr); - if($narr['queued']) { - foreach($narr['queued'] as $pq) + if ($narr['queued']) { + foreach ($narr['queued'] as $pq) $deliveries[] = $pq; } @@ -546,26 +537,26 @@ class Notifier { $env_recips = $narr['env_recips']; $packet_recips = $narr['packet_recips']; - if(($private) && (! $env_recips)) { + if (($private) && (!$env_recips)) { // shouldn't happen - logger('notifier: private message with no envelope recipients.' . print_r($argv,true), LOGGER_NORMAL, LOG_NOTICE); + logger('notifier: private message with no envelope recipients.' . print_r($argv, true), LOGGER_NORMAL, LOG_NOTICE); } - logger('notifier: recipients (may be delivered to more if public): ' . print_r($recip_list,true), LOGGER_DEBUG); + logger('notifier: recipients (may be delivered to more if public): ' . print_r($recip_list, true), LOGGER_DEBUG); // Now we have collected recipients (except for external mentions, FIXME) // Let's reduce this to a set of hubs; checking that the site is not dead. $hubs = q("select hubloc.*, site.site_crypto, site.site_flags, site.site_version, site.site_project, site.site_dead from hubloc left join site on site_url = hubloc_url - where hubloc_hash in (" . protect_sprintf(implode(',',$recipients)) . ") + where hubloc_hash in (" . protect_sprintf(implode(',', $recipients)) . ") and hubloc_error = 0 and hubloc_deleted = 0" ); // public posts won't make it to the local public stream unless there's a recipient on this site. // This code block sees if it's a public post and localhost is missing, and if so adds an entry for the local sys channel to the $hubs list - if (! $private) { + if (!$private) { $found_localhost = false; if ($hubs) { foreach ($hubs as $h) { @@ -575,7 +566,7 @@ class Notifier { } } } - if (! $found_localhost) { + if (!$found_localhost) { $localhub = q("select hubloc.*, site.site_crypto, site.site_flags, site.site_version, site.site_project, site.site_dead from hubloc left join site on site_url = hubloc_url where hubloc_id_url = '%s' and hubloc_error = 0 and hubloc_deleted = 0", dbesc(z_root() . '/channel/sys') @@ -586,7 +577,7 @@ class Notifier { } } - if(! $hubs) { + if (!$hubs) { logger('notifier: no hubs', LOGGER_NORMAL, LOG_NOTICE); return; } @@ -605,17 +596,17 @@ class Notifier { $hub_env = []; // per-hub envelope so we don't broadcast the entire envelope to all $dead = []; // known dead hubs - report them as undeliverable - foreach($hubs as $hub) { + foreach ($hubs as $hub) { if (intval($hub['site_dead'])) { $dead[] = $hub; continue; } - if($env_recips) { - foreach($env_recips as $er) { - if($hub['hubloc_hash'] === $er['hash']) { - if(! array_key_exists($hub['hubloc_host'] . $hub['hubloc_sitekey'], $hub_env)) { + if ($env_recips) { + foreach ($env_recips as $er) { + if ($hub['hubloc_hash'] === $er['hash']) { + if (!array_key_exists($hub['hubloc_host'] . $hub['hubloc_sitekey'], $hub_env)) { $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']] = []; } $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']][] = $er; @@ -624,36 +615,36 @@ class Notifier { } - if($hub['hubloc_network'] == 'zot') { - if(! in_array($hub['hubloc_sitekey'],$keys)) { + if ($hub['hubloc_network'] == 'zot') { + if (!in_array($hub['hubloc_sitekey'], $keys)) { $hublist[] = $hub['hubloc_host'] . ' ' . $hub['hubloc_network']; $dhubs[] = $hub; $keys[] = $hub['hubloc_sitekey']; } } else { - if(! in_array($hub['hubloc_url'],$urls)) { - if($hub['hubloc_url'] === z_root()) { + if (!in_array($hub['hubloc_url'], $urls)) { + if ($hub['hubloc_url'] === z_root()) { //deliver to local hub first array_unshift($hublist, $hub['hubloc_host'] . ' ' . $hub['hubloc_network']); array_unshift($dhubs, $hub); } else { $hublist[] = $hub['hubloc_host'] . ' ' . $hub['hubloc_network']; - $dhubs[] = $hub; + $dhubs[] = $hub; } $urls[] = $hub['hubloc_url']; } } } - logger('notifier: will notify/deliver to these hubs: ' . print_r($hublist,true), LOGGER_DEBUG, LOG_DEBUG); + logger('notifier: will notify/deliver to these hubs: ' . print_r($hublist, true), LOGGER_DEBUG, LOG_DEBUG); - foreach($dhubs as $hub) { + foreach ($dhubs as $hub) { - logger('notifier_hub: ' . $hub['hubloc_url'],LOGGER_DEBUG); + logger('notifier_hub: ' . $hub['hubloc_url'], LOGGER_DEBUG); - if(! in_array($hub['hubloc_network'], [ 'zot','zot6' ])) { + if (!in_array($hub['hubloc_network'], ['zot', 'zot6'])) { $narr = [ 'channel' => $channel, 'upstream' => $upstream, @@ -680,9 +671,9 @@ class Notifier { ]; - call_hooks('notifier_hub',$narr); - if($narr['queued']) { - foreach($narr['queued'] as $pq) + call_hooks('notifier_hub', $narr); + if ($narr['queued']) { + foreach ($narr['queued'] as $pq) $deliveries[] = $pq; } continue; @@ -698,11 +689,11 @@ class Notifier { // will invoke a delivery to those connections which are connected to just that // hub instance. - if($cmd === 'single_mail' || $cmd === 'single_activity') { + if ($cmd === 'single_mail' || $cmd === 'single_activity') { continue; } - if(! in_array($hub['hubloc_network'], [ 'zot','zot6' ])) { + if (!in_array($hub['hubloc_network'], ['zot', 'zot6'])) { continue; } @@ -710,31 +701,31 @@ class Notifier { // in the loop. The signature verification step can't handle dashes in the // hashes. - $hash = random_string(48); + $hash = random_string(48); $packet = null; $pmsg = ''; - if($packet_type === 'refresh' || $packet_type === 'purge') { - if($hub['hubloc_network'] === 'zot6') { - $packet = Libzot::build_packet($channel, $packet_type, ids_to_array($packet_recips,'hash')); + if ($packet_type === 'refresh' || $packet_type === 'purge') { + if ($hub['hubloc_network'] === 'zot6') { + $packet = Libzot::build_packet($channel, $packet_type, ids_to_array($packet_recips, 'hash')); } else { - $packet = zot_build_packet($channel,$packet_type,(($packet_recips) ? $packet_recips : null)); + $packet = zot_build_packet($channel, $packet_type, (($packet_recips) ? $packet_recips : null)); } } - if($packet_type === 'keychange' && $hub['hubloc_network'] === 'zot') { - $pmsg = get_pconfig($channel['channel_id'],'system','keychange'); - $packet = zot_build_packet($channel,$packet_type,(($packet_recips) ? $packet_recips : null)); + if ($packet_type === 'keychange' && $hub['hubloc_network'] === 'zot') { + $pmsg = get_pconfig($channel['channel_id'], 'system', 'keychange'); + $packet = zot_build_packet($channel, $packet_type, (($packet_recips) ? $packet_recips : null)); } - elseif($packet_type === 'request' && $hub['hubloc_network'] === 'zot') { - $env = (($hub_env && $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']]) ? $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']] : ''); - $packet = zot_build_packet($channel,$packet_type,$env,$hub['hubloc_sitekey'],$hub['site_crypto'], - $hash, array('message_id' => $request_message_id) + elseif ($packet_type === 'request' && $hub['hubloc_network'] === 'zot') { + $env = (($hub_env && $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']]) ? $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']] : ''); + $packet = zot_build_packet($channel, $packet_type, $env, $hub['hubloc_sitekey'], $hub['site_crypto'], + $hash, ['message_id' => $request_message_id] ); } - if($packet) { + if ($packet) { Queue::insert( [ 'hash' => $hash, @@ -750,11 +741,10 @@ class Notifier { else { $env = (($hub_env && $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']]) ? $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']] : ''); - - if($hub['hubloc_network'] === 'zot6') { + if ($hub['hubloc_network'] === 'zot6') { $zenv = []; - if($env) { - foreach($env as $e) { + if ($env) { + foreach ($env as $e) { $zenv[] = $e['hash']; } } @@ -767,11 +757,11 @@ class Notifier { // For public reshares, some comments to the reshare on the zot fork will not make it to zot6 // due to these different message models. This cannot be prevented at this time. - if($packet_type === 'activity' && $activity['type'] === 'Announce' && intval($target_item['item_private'])) { + if ($packet_type === 'activity' && $activity['type'] === 'Announce' && intval($target_item['item_private'])) { continue; } - $packet = Libzot::build_packet($channel,$packet_type,$zenv,$activity,'activitystreams',(($private) ? $hub['hubloc_sitekey'] : null),$hub['site_crypto']); + $packet = Libzot::build_packet($channel, $packet_type, $zenv, $activity, 'activitystreams', (($private) ? $hub['hubloc_sitekey'] : null), $hub['site_crypto']); } else { // currently zot6 delivery is only performed on normal items and not sync items or mail or anything else @@ -779,28 +769,28 @@ class Notifier { // with before switching to zot6 as the primary zot6 handler checks for the existence of a message delivery report // to trigger dequeue'ing - $z6 = (($encoded_item && $encoded_item['type'] === 'activity' && (! array_key_exists('allow_cid',$encoded_item))) ? true : false); - if($z6) { - $packet = zot6_build_packet($channel,'notify',$env, json_encode($encoded_item), (($private) ? $hub['hubloc_sitekey'] : null), $hub['site_crypto'],$hash); + $z6 = (($encoded_item && $encoded_item['type'] === 'activity' && (!array_key_exists('allow_cid', $encoded_item))) ? true : false); + if ($z6) { + $packet = zot6_build_packet($channel, 'notify', $env, json_encode($encoded_item), (($private) ? $hub['hubloc_sitekey'] : null), $hub['site_crypto'], $hash); } else { - $packet = zot_build_packet($channel,'notify',$env, (($private) ? $hub['hubloc_sitekey'] : null), $hub['site_crypto'],$hash); + $packet = zot_build_packet($channel, 'notify', $env, (($private) ? $hub['hubloc_sitekey'] : null), $hub['site_crypto'], $hash); } } // remove this after most hubs have updated to version 5.0 - if(stripos($hub['site_project'], 'hubzilla') !== false && version_compare($hub['site_version'], '4.7.3', '<=')) { - if($encoded_item['type'] === 'mail') { - $encoded_item['from']['network'] = 'zot'; + if (stripos($hub['site_project'], 'hubzilla') !== false && version_compare($hub['site_version'], '4.7.3', '<=')) { + if ($encoded_item['type'] === 'mail') { + $encoded_item['from']['network'] = 'zot'; $encoded_item['from']['guid_sig'] = str_replace('sha256.', '', $encoded_item['from']['guid_sig']); } else { - $encoded_item['owner']['network'] = 'zot'; + $encoded_item['owner']['network'] = 'zot'; $encoded_item['owner']['guid_sig'] = str_replace('sha256.', '', $encoded_item['owner']['guid_sig']); - if(strpos($encoded_item['author']['url'], z_root()) === 0) { - $encoded_item['author']['network'] = 'zot'; + if (strpos($encoded_item['author']['url'], z_root()) === 0) { + $encoded_item['author']['network'] = 'zot'; $encoded_item['author']['guid_sig'] = str_replace('sha256.', '', $encoded_item['author']['guid_sig']); } } @@ -819,7 +809,7 @@ class Notifier { ); // only create delivery reports for normal undeleted items - if(is_array($target_item) && array_key_exists('postopts',$target_item) && (! $target_item['item_deleted']) && (! get_config('system','disable_dreport'))) { + if (is_array($target_item) && array_key_exists('postopts', $target_item) && (!$target_item['item_deleted']) && (!get_config('system', 'disable_dreport'))) { q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_result, dreport_time, dreport_xchan, dreport_queue ) values ( '%s','%s','%s','%s','%s','%s','%s' ) ", dbesc($target_item['mid']), dbesc($hub['hubloc_host']), @@ -835,21 +825,21 @@ class Notifier { $deliveries[] = $hash; } - if($normal_mode) { + if ($normal_mode) { $x = q("select * from hook where hook = 'notifier_normal'"); - if($x) { - Master::Summon( [ 'Deliver_hooks', $target_item['id'] ] ); + if ($x) { + Master::Summon(['Deliver_hooks', $target_item['id']]); } } - if($deliveries) + if ($deliveries) do_delivery($deliveries); logger('notifier: basic loop complete.', LOGGER_DEBUG); if ($dead) { foreach ($dead as $deceased) { - if (is_array($target_item) && (! $target_item['item_deleted']) && (! get_config('system','disable_dreport'))) { + if (is_array($target_item) && (!$target_item['item_deleted']) && (!get_config('system', 'disable_dreport'))) { q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_name, dreport_result, dreport_time, dreport_xchan, dreport_queue ) values ( '%s', '%s','%s','%s','%s','%s','%s','%s' ) ", dbesc($target_item['mid']), @@ -865,7 +855,7 @@ class Notifier { } } - call_hooks('notifier_end',$target_item); + call_hooks('notifier_end', $target_item); logger('notifer: complete.'); return; diff --git a/Zotlabs/Daemon/Onedirsync.php b/Zotlabs/Daemon/Onedirsync.php index a952b8117..f29fbe5b8 100644 --- a/Zotlabs/Daemon/Onedirsync.php +++ b/Zotlabs/Daemon/Onedirsync.php @@ -11,14 +11,14 @@ require_once('include/dir_fns.php'); class Onedirsync { - static public function run($argc,$argv) { + static public function run($argc, $argv) { logger('onedirsync: start ' . intval($argv[1])); - if(($argc > 1) && (intval($argv[1]))) + if (($argc > 1) && (intval($argv[1]))) $update_id = intval($argv[1]); - if(! $update_id) { + if (!$update_id) { logger('onedirsync: no update'); return; } @@ -27,9 +27,9 @@ class Onedirsync { intval($update_id) ); - if(! $r) + if (!$r) return; - if(($r[0]['ud_flags'] & UPDATE_FLAGS_UPDATED) || (! $r[0]['ud_addr'])) + if (($r[0]['ud_flags'] & UPDATE_FLAGS_UPDATED) || (!$r[0]['ud_addr'])) return; // Have we probed this channel more recently than the other directory server @@ -41,8 +41,8 @@ class Onedirsync { dbesc($r[0]['ud_date']), intval(UPDATE_FLAGS_UPDATED) ); - if($x) { - $y = q("update updates set ud_flags = ( ud_flags | %d ) where ud_addr = '%s' and ( ud_flags & %d ) = 0 and ud_date != '%s'", + if ($x) { + q("update updates set ud_flags = ( ud_flags | %d ) where ud_addr = '%s' and ( ud_flags & %d ) = 0 and ud_date != '%s'", intval(UPDATE_FLAGS_UPDATED), dbesc($r[0]['ud_addr']), intval(UPDATE_FLAGS_UPDATED), @@ -59,8 +59,8 @@ class Onedirsync { $h = Libzot::zot_record_preferred($h); - if(($h) && ($h['hubloc_status'] & HUBLOC_OFFLINE)) { - $y = q("update updates set ud_flags = ( ud_flags | %d ) where ud_addr = '%s' and ( ud_flags & %d ) = 0 ", + if (($h) && ($h['hubloc_status'] & HUBLOC_OFFLINE)) { + q("update updates set ud_flags = ( ud_flags | %d ) where ud_addr = '%s' and ( ud_flags & %d ) = 0 ", intval(UPDATE_FLAGS_UPDATED), dbesc($r[0]['ud_addr']), intval(UPDATE_FLAGS_UPDATED) @@ -72,7 +72,7 @@ class Onedirsync { // we might have to pull this out some day, but for now update_directory_entry() // runs zot_finger() and is kind of zot specific - if($h && ! in_array($h['hubloc_network'], ['zot6', 'zot'])) + if ($h && !in_array($h['hubloc_network'], ['zot6', 'zot'])) return; Libzotdir::update_directory_entry($r[0]); diff --git a/Zotlabs/Daemon/Onepoll.php b/Zotlabs/Daemon/Onepoll.php index 93a5412b0..598cf28e4 100644 --- a/Zotlabs/Daemon/Onepoll.php +++ b/Zotlabs/Daemon/Onepoll.php @@ -2,68 +2,70 @@ namespace Zotlabs\Daemon; +use Zotlabs\Lib\Activity; +use Zotlabs\Lib\ActivityStreams; +use Zotlabs\Lib\ASCollection; use Zotlabs\Lib\Libzot; -require_once('include/zot.php'); require_once('include/socgraph.php'); - class Onepoll { - static public function run($argc,$argv) { + static public function run($argc, $argv) { logger('onepoll: start'); - - if(($argc > 1) && (intval($argv[1]))) + + if (($argc > 1) && (intval($argv[1]))) $contact_id = intval($argv[1]); - if(! $contact_id) { + if (!$contact_id) { logger('onepoll: no contact'); return; } - $d = datetime_convert(); + $sql_extra = ''; + $allow_feeds = get_config('system', 'feed_contacts'); + if(!$allow_feeds) { + $sql_extra = ' and abook_feed = 0 '; + } $contacts = q("SELECT abook.*, xchan.*, account.* - FROM abook LEFT JOIN account on abook_account = account_id left join xchan on xchan_hash = abook_xchan - where abook_id = %d + FROM abook LEFT JOIN account on abook_account = account_id left join xchan on xchan_hash = abook_xchan + where abook_id = %d $sql_extra and abook_pending = 0 and abook_archived = 0 and abook_blocked = 0 and abook_ignored = 0 AND (( account_flags = %d ) OR ( account_flags = %d )) limit 1", intval($contact_id), intval(ACCOUNT_OK), intval(ACCOUNT_UNVERIFIED) - ); + ); - if(! $contacts) { + if (!$contacts) { logger('onepoll: abook_id not found: ' . $contact_id); return; } - $contact = $contacts[0]; - - $t = $contact['abook_updated']; - + $contact = array_shift($contacts); $importer_uid = $contact['abook_channel']; - + $r = q("SELECT * from channel left join xchan on channel_hash = xchan_hash where channel_id = %d limit 1", intval($importer_uid) ); - if(! $r) + if (!$r) return; $importer = $r[0]; logger("onepoll: poll: ({$contact['id']}) IMPORTER: {$importer['xchan_name']}, CONTACT: {$contact['xchan_name']}"); - $last_update = ((($contact['abook_updated'] === $contact['abook_created']) || ($contact['abook_updated'] <= NULL_DATE)) - ? datetime_convert('UTC','UTC','now - 7 days') - : datetime_convert('UTC','UTC',$contact['abook_updated'] . ' - 2 days') + $last_update = ((($contact['abook_updated'] === $contact['abook_created']) || ($contact['abook_updated'] <= NULL_DATE)) + ? datetime_convert('UTC', 'UTC', 'now - 7 days') + : datetime_convert('UTC', 'UTC', $contact['abook_updated'] . ' - 2 days') ); - if($contact['xchan_network'] === 'rss') { + if ($contact['xchan_network'] === 'rss') { logger('onepoll: processing feed ' . $contact['xchan_name'], LOGGER_DEBUG); - $alive = handle_feed($importer['channel_id'],$contact_id,$contact['xchan_hash']); + $alive = handle_feed($importer['channel_id'], $contact_id, $contact['xchan_hash']); if ($alive) { q("update abook set abook_connected = '%s' where abook_id = %d", dbesc(datetime_convert()), @@ -72,22 +74,22 @@ class Onepoll { } return; } - - if(! in_array($contact['xchan_network'],['zot','zot6'])) + + if (!in_array($contact['xchan_network'], ['zot', 'zot6'])) return; // update permissions - if($contact['xchan_network'] === 'zot6') - $x = Libzot::refresh($contact,$importer); + if ($contact['xchan_network'] === 'zot6') + $x = Libzot::refresh($contact, $importer); - if($contact['xchan_network'] === 'zot') - $x = zot_refresh($contact,$importer); + if ($contact['xchan_network'] === 'zot') + $x = zot_refresh($contact, $importer); $responded = false; $updated = datetime_convert(); $connected = datetime_convert(); - if(! $x) { + if (!$x) { // mark for death by not updating abook_connected, this is caught in include/poller.php q("update abook set abook_updated = '%s' where abook_id = %d", dbesc($updated), @@ -103,83 +105,112 @@ class Onepoll { $responded = true; } - if(! $responded) + if (!$responded) return; - if($contact['xchan_connurl']) { - $fetch_feed = true; - $x = null; + $fetch_feed = true; + $x = null; - // They haven't given us permission to see their stream + // They haven't given us permission to see their stream - $can_view_stream = intval(get_abconfig($importer_uid,$contact['abook_xchan'],'their_perms','view_stream')); + $can_view_stream = intval(get_abconfig($importer_uid, $contact['abook_xchan'], 'their_perms', 'view_stream')); - if(! $can_view_stream) - $fetch_feed = false; + if (!$can_view_stream) + $fetch_feed = false; - // we haven't given them permission to send us their stream + // we haven't given them permission to send us their stream - $can_send_stream = intval(get_abconfig($importer_uid,$contact['abook_xchan'],'my_perms','send_stream')); - - if(! $can_send_stream) - $fetch_feed = false; + $can_send_stream = intval(get_abconfig($importer_uid, $contact['abook_xchan'], 'my_perms', 'send_stream')); - if($fetch_feed) { + if (!$can_send_stream) + $fetch_feed = false; - if(strpos($contact['xchan_connurl'],z_root()) === 0) { - // local channel - save a network fetch - $c = channelx_by_hash($contact['xchan_hash']); - if($c) { - $x = [ - 'success' => true, - 'body' => json_encode( [ - 'success' => true, - 'messages' => zot_feed($c['channel_id'], $importer['xchan_hash'], [ 'mindate' => $last_update ]) - ]) - ]; - } + if ($fetch_feed && $contact['xchan_network'] !== 'zot') { + + $max = intval(get_config('system', 'max_imported_posts', 30)); + + if (intval($max)) { + $cl = get_xconfig($contact['abook_xchan'], 'activitypub', 'collections'); + + if (is_array($cl) && $cl) { + $url = ((array_key_exists('outbox', $cl)) ? $cl['outbox'] : ''); } else { - // remote fetch - - $feedurl = str_replace('/poco/','/zotfeed/',$contact['xchan_connurl']); - $feedurl .= '?f=&mindate=' . urlencode($last_update) . '&zid=' . $importer['channel_address'] . '@' . \App::get_hostname(); - $recurse = 0; - $x = z_fetch_url($feedurl, false, $recurse, [ 'session' => true ]); + $url = str_replace('/poco/', '/zotfeed/', $contact['xchan_connurl']); } - logger('feed_update: ' . print_r($x,true), LOGGER_DATA); - } - - if(($x) && ($x['success'])) { - $total = 0; - logger('onepoll: feed update ' . $contact['xchan_name'] . ' ' . $feedurl); - - $j = json_decode($x['body'],true); - if($j['success'] && $j['messages']) { - foreach($j['messages'] as $message) { - $results = process_delivery(array('hash' => $contact['xchan_hash']), get_item_elements($message), - array(array('hash' => $importer['xchan_hash'])), false); - logger('onepoll: feed_update: process_delivery: ' . print_r($results,true), LOGGER_DATA); - $total ++; + if ($url) { + logger('fetching outbox'); + $url = $url . '?date_begin=' . urlencode($last_update); + $obj = new ASCollection($url, $importer, 0, $max); + $messages = $obj->get(); + if ($messages) { + foreach ($messages as $message) { + if (is_string($message)) { + $message = Activity::fetch($message, $importer); + } + $AS = new ActivityStreams($message); + if ($AS->is_valid() && is_array($AS->obj)) { + $item = Activity::decode_note($AS); + Activity::store($importer, $contact['abook_xchan'], $AS, $item); + } + } } - logger("onepoll: $total messages processed"); } } } - + + /* if ($fetch_feed) { + + if (strpos($contact['xchan_connurl'], z_root()) === 0) { + // local channel - save a network fetch + $c = channelx_by_hash($contact['xchan_hash']); + if ($c) { + $x = [ + 'success' => true, + 'body' => json_encode([ + 'success' => true, + 'messages' => zot_feed($c['channel_id'], $importer['xchan_hash'], ['mindate' => $last_update]) + ]) + ]; + } + } + else { + // remote fetch + + $feedurl = str_replace('/poco/', '/zotfeed/', $contact['xchan_connurl']); + $feedurl .= '?f=&mindate=' . urlencode($last_update) . '&zid=' . $importer['channel_address'] . '@' . App::get_hostname(); + $recurse = 0; + $x = z_fetch_url($feedurl, false, $recurse, ['session' => true]); + } + + logger('feed_update: ' . print_r($x, true), LOGGER_DATA); + } + + if (($x) && ($x['success'])) { + $total = 0; + logger('onepoll: feed update ' . $contact['xchan_name'] . ' ' . $feedurl); + + $j = json_decode($x['body'], true); + if ($j['success'] && $j['messages']) { + foreach ($j['messages'] as $message) { + $results = process_delivery(['hash' => $contact['xchan_hash']], get_item_elements($message), + [['hash' => $importer['xchan_hash']]], false); + logger('onepoll: feed_update: process_delivery: ' . print_r($results, true), LOGGER_DATA); + $total++; + } + logger("onepoll: $total messages processed"); + } + } + */ // update the poco details for this connection - - if($contact['xchan_connurl']) { - $r = q("SELECT xlink_id from xlink - where xlink_xchan = '%s' and xlink_updated > %s - INTERVAL %s and xlink_static = 0 limit 1", - intval($contact['xchan_hash']), - db_utcnow(), db_quoteinterval('1 DAY') - ); - if(! $r) { - poco_load($contact['xchan_hash'],$contact['xchan_connurl']); - } + $r = q("SELECT xlink_id from xlink where xlink_xchan = '%s' and xlink_updated > %s - INTERVAL %s and xlink_static = 0 limit 1", + intval($contact['xchan_hash']), + db_utcnow(), db_quoteinterval('1 DAY') + ); + if (!$r) { + poco_load($contact['xchan_hash'], $contact['xchan_connurl']); } return; diff --git a/Zotlabs/Daemon/Poller.php b/Zotlabs/Daemon/Poller.php index dfa628193..762f1349c 100644 --- a/Zotlabs/Daemon/Poller.php +++ b/Zotlabs/Daemon/Poller.php @@ -4,53 +4,50 @@ namespace Zotlabs\Daemon; class Poller { - static public function run($argc,$argv) { + static public function run($argc, $argv) { - $maxsysload = intval(get_config('system','maxloadavg')); - if($maxsysload < 1) + $maxsysload = intval(get_config('system', 'maxloadavg')); + if ($maxsysload < 1) $maxsysload = 50; - if(function_exists('sys_getloadavg')) { + if (function_exists('sys_getloadavg')) { $load = sys_getloadavg(); - if(intval($load[0]) > $maxsysload) { + if (intval($load[0]) > $maxsysload) { logger('system: load ' . $load . ' too high. Poller deferred to next scheduled run.'); return; } } - $interval = intval(get_config('system','poll_interval')); - if(! $interval) - $interval = ((get_config('system','delivery_interval') === false) ? 3 : intval(get_config('system','delivery_interval'))); + $interval = intval(get_config('system', 'poll_interval')); + if (!$interval) + $interval = ((get_config('system', 'delivery_interval') === false) ? 3 : intval(get_config('system', 'delivery_interval'))); // Check for a lockfile. If it exists, but is over an hour old, it's stale. Ignore it. $lockfile = 'store/[data]/poller'; - if((file_exists($lockfile)) && (filemtime($lockfile) > (time() - 3600)) - && (! get_config('system','override_poll_lockfile'))) { + if ((file_exists($lockfile)) && (filemtime($lockfile) > (time() - 3600)) + && (!get_config('system', 'override_poll_lockfile'))) { logger("poller: Already running"); return; } - + // Create a lockfile. Needs two vars, but $x doesn't need to contain anything. + $x = ''; file_put_contents($lockfile, $x); logger('poller: start'); - + $manual_id = 0; - $generation = 0; + $force = false; - $force = false; - $restart = false; - - if(($argc > 1) && ($argv[1] == 'force')) + if (($argc > 1) && ($argv[1] == 'force')) $force = true; - if(($argc > 1) && ($argv[1] == 'restart')) { - $restart = true; + if (($argc > 1) && ($argv[1] == 'restart')) { $generation = intval($argv[2]); - if(! $generation) + if (!$generation) return; } - if(($argc > 1) && intval($argv[1])) { + if (($argc > 1) && intval($argv[1])) { $manual_id = intval($argv[1]); $force = true; } @@ -59,17 +56,15 @@ class Poller { reload_plugins(); - $d = datetime_convert(); - // Only poll from those with suitable relationships - - $abandon_sql = (($abandon_days) - ? sprintf(" AND account_lastlog > %s - INTERVAL %s ", db_utcnow(), db_quoteinterval(intval($abandon_days).' DAY')) - : '' + $abandon_days = intval(get_config('system', 'account_abandon_days', 0)); + $abandon_sql = (($abandon_days) + ? sprintf(" AND account_lastlog > %s - INTERVAL %s ", db_utcnow(), db_quoteinterval(intval($abandon_days) . ' DAY')) + : '' ); $randfunc = db_getfunc('RAND'); - + $contacts = q("SELECT abook.abook_updated, abook.abook_connected, abook.abook_feed, abook.abook_channel, abook.abook_id, abook.abook_archived, abook.abook_pending, abook.abook_ignored, abook.abook_blocked, @@ -84,119 +79,117 @@ class Poller { intval(ACCOUNT_UNVERIFIED) // FIXME ); - if($contacts) { - foreach($contacts as $contact) { + if ($contacts) { + foreach ($contacts as $contact) { - $update = false; + $update = false; $t = $contact['abook_updated']; $c = $contact['abook_connected']; - if(intval($contact['abook_feed'])) { - $min = service_class_fetch($contact['abook_channel'],'minimum_feedcheck_minutes'); - if(! $min) - $min = intval(get_config('system','minimum_feedcheck_minutes')); - if(! $min) + if (intval($contact['abook_feed'])) { + $min = service_class_fetch($contact['abook_channel'], 'minimum_feedcheck_minutes'); + if (!$min) + $min = intval(get_config('system', 'minimum_feedcheck_minutes')); + if (!$min) $min = 60; - $x = datetime_convert('UTC','UTC',"now - $min minutes"); - if($c < $x) { - Master::Summon(array('Onepoll',$contact['abook_id'])); - if($interval) - @time_sleep_until(microtime(true) + (float) $interval); + $x = datetime_convert('UTC', 'UTC', "now - $min minutes"); + if ($c < $x) { + Master::Summon(['Onepoll', $contact['abook_id']]); + if ($interval) + @time_sleep_until(microtime(true) + (float)$interval); } continue; } - if(! in_array($contact['xchan_network'],['zot','zot6'])) + if (!in_array($contact['xchan_network'], ['zot', 'zot6'])) continue; - if($c == $t) { - if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day")) + if ($c == $t) { + if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + 1 day")) $update = true; } else { - + // if we've never connected with them, start the mark for death countdown from now - - if($c <= NULL_DATE) { - $r = q("update abook set abook_connected = '%s' where abook_id = %d", + + if ($c <= NULL_DATE) { + q("update abook set abook_connected = '%s' where abook_id = %d", dbesc(datetime_convert()), intval($contact['abook_id']) ); - $c = datetime_convert(); + $c = datetime_convert(); $update = true; } // He's dead, Jim - if(strcmp(datetime_convert('UTC','UTC', 'now'),datetime_convert('UTC','UTC', $c . " + 30 day")) > 0) { - $r = q("update abook set abook_archived = 1 where abook_id = %d", + if (strcmp(datetime_convert('UTC', 'UTC', 'now'), datetime_convert('UTC', 'UTC', $c . " + 30 day")) > 0) { + q("update abook set abook_archived = 1 where abook_id = %d", intval($contact['abook_id']) ); - $update = false; continue; } - if(intval($contact['abook_archived'])) { - $update = false; + if (intval($contact['abook_archived'])) { continue; } // might be dead, so maybe don't poll quite so often - + // recently deceased, so keep up the regular schedule for 3 days - - if((strcmp(datetime_convert('UTC','UTC', 'now'),datetime_convert('UTC','UTC', $c . " + 3 day")) > 0) - && (strcmp(datetime_convert('UTC','UTC', 'now'),datetime_convert('UTC','UTC', $t . " + 1 day")) > 0)) + + if ((strcmp(datetime_convert('UTC', 'UTC', 'now'), datetime_convert('UTC', 'UTC', $c . " + 3 day")) > 0) + && (strcmp(datetime_convert('UTC', 'UTC', 'now'), datetime_convert('UTC', 'UTC', $t . " + 1 day")) > 0)) $update = true; // After that back off and put them on a morphine drip - if(strcmp(datetime_convert('UTC','UTC', 'now'),datetime_convert('UTC','UTC', $t . " + 2 day")) > 0) { + if (strcmp(datetime_convert('UTC', 'UTC', 'now'), datetime_convert('UTC', 'UTC', $t . " + 2 day")) > 0) { $update = true; } } - if(intval($contact['abook_pending']) || intval($contact['abook_archived']) || intval($contact['abook_ignored']) || intval($contact['abook_blocked'])) + if (intval($contact['abook_pending']) || intval($contact['abook_archived']) || intval($contact['abook_ignored']) || intval($contact['abook_blocked'])) continue; - if((! $update) && (! $force)) - continue; + if ((!$update) && (!$force)) + continue; - Master::Summon(array('Onepoll',$contact['abook_id'])); - if($interval) - @time_sleep_until(microtime(true) + (float) $interval); + Master::Summon(['Onepoll', $contact['abook_id']]); + if ($interval) + @time_sleep_until(microtime(true) + (float)$interval); } } $dirmode = intval(get_config('system', 'directory_mode')); - if($dirmode == DIRECTORY_MODE_SECONDARY || $dirmode == DIRECTORY_MODE_PRIMARY) { + if ($dirmode == DIRECTORY_MODE_SECONDARY || $dirmode == DIRECTORY_MODE_PRIMARY) { $r = q("SELECT u.ud_addr, u.ud_id, u.ud_last FROM updates AS u INNER JOIN (SELECT ud_addr, max(ud_id) AS ud_id FROM updates WHERE ( ud_flags & %d ) = 0 AND ud_addr != '' AND ( ud_last <= '%s' OR ud_last > %s - INTERVAL %s ) GROUP BY ud_addr) AS s ON s.ud_id = u.ud_id ", intval(UPDATE_FLAGS_UPDATED), dbesc(NULL_DATE), db_utcnow(), db_quoteinterval('7 DAY') ); - if($r) { - foreach($r as $rr) { + if ($r) { + foreach ($r as $rr) { // If they didn't respond when we attempted before, back off to once a day // After 7 days we won't bother anymore - if($rr['ud_last'] > NULL_DATE) - if($rr['ud_last'] > datetime_convert('UTC','UTC', 'now - 1 day')) + if ($rr['ud_last'] > NULL_DATE) + if ($rr['ud_last'] > datetime_convert('UTC', 'UTC', 'now - 1 day')) continue; - Master::Summon(array('Onedirsync',$rr['ud_id'])); - if($interval) - @time_sleep_until(microtime(true) + (float) $interval); + Master::Summon(['Onedirsync', $rr['ud_id']]); + if ($interval) + @time_sleep_until(microtime(true) + (float)$interval); } } - } + } - set_config('system','lastpoll',datetime_convert()); + set_config('system', 'lastpoll', datetime_convert()); //All done - clear the lockfile diff --git a/Zotlabs/Daemon/Queue.php b/Zotlabs/Daemon/Queue.php index 814148404..36bdcfe81 100644 --- a/Zotlabs/Daemon/Queue.php +++ b/Zotlabs/Daemon/Queue.php @@ -7,12 +7,12 @@ require_once('include/zot.php'); class Queue { - static public function run($argc,$argv) { + static public function run($argc, $argv) { require_once('include/items.php'); require_once('include/bbcode.php'); - if($argc > 1) + if ($argc > 1) $queue_id = $argv[1]; else $queue_id = EMPTY_STR; @@ -25,10 +25,9 @@ class Queue { $r = q("select outq_posturl from outq where outq_created < %s - INTERVAL %s", db_utcnow(), db_quoteinterval('3 DAY') ); - if($r) { - foreach($r as $rr) { - $site_url = ''; - $h = parse_url($rr['outq_posturl']); + if ($r) { + foreach ($r as $rr) { + $h = parse_url($rr['outq_posturl']); $desturl = $h['scheme'] . '://' . $h['host'] . (($h['port']) ? ':' . $h['port'] : ''); q("update site set site_dead = 1 where site_dead = 0 and site_url = '%s' and site_update < %s - INTERVAL %s", dbesc($desturl), @@ -37,11 +36,11 @@ class Queue { } } - $r = q("DELETE FROM outq WHERE outq_created < %s - INTERVAL %s", + q("DELETE FROM outq WHERE outq_created < %s - INTERVAL %s", db_utcnow(), db_quoteinterval('3 DAY') ); - if($queue_id) { + if ($queue_id) { $r = q("SELECT * FROM outq WHERE outq_hash = '%s' LIMIT 1", dbesc($queue_id) ); @@ -54,7 +53,7 @@ class Queue { // so that we don't start off a thousand deliveries for a couple of dead hubs. // The zot driver will deliver everything destined for a single hub once contact is made (*if* contact is made). // Other drivers will have to do something different here and may need their own query. - + // Note: this requires some tweaking as new posts to long dead hubs once a day will keep them in the // "every 15 minutes" category. We probably need to prioritise them when inserted into the queue // or just prior to this query based on recent and long-term delivery history. If we have good reason to believe @@ -67,7 +66,7 @@ class Queue { db_utcnow() ); while ($r) { - foreach($r as $rv) { + foreach ($r as $rv) { queue_deliver($rv); } $r = q("SELECT *,$sqlrandfunc as rn FROM outq WHERE outq_delivered = 0 and outq_scheduled < %s order by rn limit 1", @@ -75,10 +74,10 @@ class Queue { ); } } - if(! $r) + if (!$r) return; - foreach($r as $rv) { + foreach ($r as $rv) { queue_deliver($rv); } } diff --git a/Zotlabs/Daemon/Thumbnail.php b/Zotlabs/Daemon/Thumbnail.php index e1f17c304..72034b870 100644 --- a/Zotlabs/Daemon/Thumbnail.php +++ b/Zotlabs/Daemon/Thumbnail.php @@ -5,30 +5,30 @@ namespace Zotlabs\Daemon; class Thumbnail { - static public function run($argc,$argv) { + static public function run($argc, $argv) { - if(! $argc == 2) + if (!$argc == 2) return; $c = q("select * from attach where hash = '%s' ", dbesc($argv[1]) ); - if(! $c) + if (!$c) return; $attach = $c[0]; - $preview_style = intval(get_config('system','thumbnail_security',0)); - $preview_width = intval(get_config('system','thumbnail_width',300)); - $preview_height = intval(get_config('system','thumbnail_height',300)); + $preview_style = intval(get_config('system', 'thumbnail_security', 0)); + $preview_width = intval(get_config('system', 'thumbnail_width', 300)); + $preview_height = intval(get_config('system', 'thumbnail_height', 300)); $p = [ 'attach' => $attach, 'preview_style' => $preview_style, 'preview_width' => $preview_width, 'preview_height' => $preview_height, - 'thumbnail' => null + 'thumbnail' => null ]; /** @@ -40,39 +40,39 @@ class Thumbnail { * * \e string \b thumbnail */ - call_hooks('thumbnail',$p); - if($p['thumbnail']) { + call_hooks('thumbnail', $p); + if ($p['thumbnail']) { return; } $default_controller = null; - + $files = glob('Zotlabs/Thumbs/*.php'); - if($files) { - foreach($files as $f) { - $clsname = '\\Zotlabs\\Thumbs\\' . ucfirst(basename($f,'.php')); - if(class_exists($clsname)) { + if ($files) { + foreach ($files as $f) { + $clsname = '\\Zotlabs\\Thumbs\\' . ucfirst(basename($f, '.php')); + if (class_exists($clsname)) { $x = new $clsname(); - if(method_exists($x,'Match')) { + if (method_exists($x, 'Match')) { $matched = $x->Match($attach['filetype']); - if($matched) { - $x->Thumb($attach,$preview_style,$preview_width,$preview_height); + if ($matched) { + $x->Thumb($attach, $preview_style, $preview_width, $preview_height); } } - if(method_exists($x,'MatchDefault')) { - $default_matched = $x->MatchDefault(substr($attach['filetype'],0,strpos($attach['filetype'],'/'))); - if($default_matched) { + if (method_exists($x, 'MatchDefault')) { + $default_matched = $x->MatchDefault(substr($attach['filetype'], 0, strpos($attach['filetype'], '/'))); + if ($default_matched) { $default_controller = $x; } } } } } - if(($default_controller) - && ((! file_exists(dbunescbin($attach['content']) . '.thumb')) + if (($default_controller) + && ((!file_exists(dbunescbin($attach['content']) . '.thumb')) || (filectime(dbunescbin($attach['content']) . 'thumb') < (time() - 60)))) { - $default_controller->Thumb($attach,$preview_style,$preview_width,$preview_height); + $default_controller->Thumb($attach, $preview_style, $preview_width, $preview_height); } } } diff --git a/Zotlabs/Lib/ASCollection.php b/Zotlabs/Lib/ASCollection.php new file mode 100644 index 000000000..392dd5d4e --- /dev/null +++ b/Zotlabs/Lib/ASCollection.php @@ -0,0 +1,150 @@ +get() to return an array of collection members. + */ +class ASCollection { + + private $channel = null; + private $nextpage = null; + private $limit = 0; + private $direction = 0; // 0 = forward, 1 = reverse + private $data = []; + private $history = []; + + function __construct($obj, $channel = null, $direction = 0, $limit = 0) { + + $this->channel = $channel; + $this->direction = $direction; + $this->limit = $limit; + + if (is_array($obj)) { + $data = $obj; + } + + if (is_string($obj)) { + $data = Activity::fetch($obj, $channel); + $this->history[] = $obj; + } + + if (!is_array($data)) { + return; + } + + if (!in_array($data['type'], ['Collection', 'OrderedCollection', 'OrderedCollectionPage'])) { + return false; + } + + if ($this->direction) { + if (array_key_exists('last', $data) && $data['last']) { + $this->nextpage = $data['last']; + } + } + else { + if (array_key_exists('first', $data) && $data['first']) { + $this->nextpage = $data['first']; + } + } + + if (isset($data['items']) && is_array($data['items'])) { + $this->data = (($this->direction) ? array_reverse($data['items']) : $data['items']); + } + elseif (isset($data['orderedItems']) && is_array($data['orderedItems'])) { + $this->data = (($this->direction) ? array_reverse($data['orderedItems']) : $data['orderedItems']); + } + + if ($this->limit) { + if (count($this->data) > $limit) { + $this->data = array_slice($this->data, 0, $limit); + return; + } + } + + do { + $x = $this->next(); + } while ($x); + } + + function get() { + return $this->data; + } + + function next() { + + if (!$this->nextpage) { + return false; + } + + if (is_array($this->nextpage)) { + $data = $this->nextpage; + } + + if (is_string($this->nextpage)) { + if (in_array($this->nextpage, $this->history)) { + // recursion detected + return false; + } + $data = Activity::fetch($this->nextpage, $this->channel); + $this->history[] = $this->nextpage; + } + + if (!is_array($data)) { + return false; + } + + if (!in_array($data['type'], ['CollectionPage', 'OrderedCollectionPage'])) { + return false; + } + + $this->setnext($data); + + if (isset($data['items']) && is_array($data['items'])) { + $this->data = array_merge($this->data, (($this->direction) ? array_reverse($data['items']) : $data['items'])); + } + elseif (isset($data['orderedItems']) && is_array($data['orderedItems'])) { + $this->data = array_merge($this->data, (($this->direction) ? array_reverse($data['orderedItems']) : $data['orderedItems'])); + } + + if ($this->limit) { + if (count($this->data) > $this->limit) { + $this->data = array_slice($this->data, 0, $this->limit); + $this->nextpage = false; + return true; + } + } + + return true; + } + + function setnext($data) { + if ($this->direction) { + if (array_key_exists('prev', $data) && $data['prev']) { + $this->nextpage = $data['prev']; + } + elseif (array_key_exists('first', $data) && $data['first']) { + $this->nextpage = $data['first']; + } + else { + $this->nextpage = false; + } + } + else { + if (array_key_exists('next', $data) && $data['next']) { + $this->nextpage = $data['next']; + } + elseif (array_key_exists('last', $data) && $data['last']) { + $this->nextpage = $data['last']; + } + else { + $this->nextpage = false; + } + } + logger('nextpage: ' . $this->nextpage, LOGGER_DEBUG); + } +} \ No newline at end of file diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php index 807216400..5fefb2979 100644 --- a/Zotlabs/Lib/Activity.php +++ b/Zotlabs/Lib/Activity.php @@ -2,7 +2,10 @@ namespace Zotlabs\Lib; +use App; use Zotlabs\Access\PermissionLimits; +use Zotlabs\Access\PermissionRoles; +use Zotlabs\Access\Permissions; use Zotlabs\Daemon\Master; use Zotlabs\Web\HTTPSig; @@ -13,71 +16,70 @@ class Activity { static function encode_object($x) { - - if(($x) && (! is_array($x)) && (substr(trim($x),0,1)) === '{' ) { - $x = json_decode($x,true); + if (($x) && (!is_array($x)) && (substr(trim($x), 0, 1)) === '{') { + $x = json_decode($x, true); } - if(is_array($x)) { + if (is_array($x)) { - if(array_key_exists('asld',$x)) { + if (array_key_exists('asld', $x)) { return $x['asld']; } - if($x['type'] === ACTIVITY_OBJ_PERSON) { - return self::fetch_person($x); + if ($x['type'] === ACTIVITY_OBJ_PERSON) { + return self::fetch_person($x); } - if($x['type'] === ACTIVITY_OBJ_PROFILE) { - return self::fetch_profile($x); + if ($x['type'] === ACTIVITY_OBJ_PROFILE) { + return self::fetch_profile($x); } - if(in_array($x['type'], [ ACTIVITY_OBJ_NOTE, ACTIVITY_OBJ_ARTICLE ] )) { - return self::fetch_item($x); + if (in_array($x['type'], [ACTIVITY_OBJ_NOTE, ACTIVITY_OBJ_ARTICLE])) { + return self::fetch_item($x); } - if($x['type'] === ACTIVITY_OBJ_THING) { - return self::fetch_thing($x); + if ($x['type'] === ACTIVITY_OBJ_THING) { + return self::fetch_thing($x); } - if($x['type'] === ACTIVITY_OBJ_EVENT) { - return self::fetch_event($x); + if ($x['type'] === ACTIVITY_OBJ_EVENT) { + return self::fetch_event($x); } - if($x['type'] === ACTIVITY_OBJ_PHOTO) { - return self::fetch_image($x); + if ($x['type'] === ACTIVITY_OBJ_PHOTO) { + return self::fetch_image($x); } - call_hooks('encode_object',$x); + call_hooks('encode_object', $x); } return $x; } - static function fetch($url,$channel = null) { + static function fetch($url, $channel = null) { $redirects = 0; - if(! check_siteallowed($url)) { + if (!check_siteallowed($url)) { logger('blacklisted: ' . $url); return null; } - if(! $channel) { + if (!$channel) { $channel = get_sys_channel(); } logger('fetch: ' . $url, LOGGER_DEBUG); - if(strpos($url,'x-zot:') === 0) { - $x = ZotURL::fetch($url,$channel); + if (strpos($url, 'x-zot:') === 0) { + $x = ZotURL::fetch($url, $channel); } else { $m = parse_url($url); // handle bearcaps if ($m['scheme'] === 'bear') { - $params = explode('&',$m['query']); + $params = explode('&', $m['query']); if ($params) { foreach ($params as $p) { - if (substr($p,0,2) === 'u=') { - $url = substr($p,2); + if (substr($p, 0, 2) === 'u=') { + $url = substr($p, 2); } - if (substr($p,0,2) === 't=') { - $token = substr($p,2); + if (substr($p, 0, 2) === 't=') { + $token = substr($p, 2); } } $m = parse_url($url); @@ -85,21 +87,34 @@ class Activity { } $headers = [ - 'Accept' => 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams"', + 'Accept' => ActivityStreams::get_accept_header_string($channel), 'Host' => $m['host'], - 'Date' => datetime_convert('UTC','UTC', 'now', 'D, d M Y H:i:s \\G\\M\\T'), + 'Date' => datetime_convert('UTC', 'UTC', 'now', 'D, d M Y H:i:s \\G\\M\\T'), '(request-target)' => 'get ' . get_request_string($url) ]; + if (isset($token)) { $headers['Authorization'] = 'Bearer ' . $token; } - $h = HTTPSig::create_sig($headers,$channel['channel_prvkey'],channel_url($channel),false); - $x = z_fetch_url($url, true, $redirects, [ 'headers' => $h ] ); + + $h = HTTPSig::create_sig($headers, $channel['channel_prvkey'], channel_url($channel), false); + $x = z_fetch_url($url, true, $redirects, ['headers' => $h]); } - if($x['success']) { - $y = json_decode($x['body'],true); - logger('returned: ' . json_encode($y,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES), LOGGER_DEBUG); + if ($x['success']) { + $m = parse_url($url); + if ($m) { + $site_url = unparse_url(['scheme' => $m['scheme'], 'host' => $m['host'], 'port' => $m['port'] ]); + q("UPDATE site SET site_update = '%s', site_dead = 0 WHERE site_url = '%s' AND site_update < %s - INTERVAL %s", + dbesc(datetime_convert()), + dbesc($site_url), + db_utcnow(), + db_quoteinterval('1 DAY') + ); + } + + $y = json_decode($x['body'], true); + logger('returned: ' . json_encode($y, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES), LOGGER_DEBUG); return json_decode($x['body'], true); } else { @@ -109,9 +124,6 @@ class Activity { return null; } - - - static function fetch_person($x) { return self::fetch_profile($x); } @@ -120,13 +132,13 @@ class Activity { $r = q("select * from xchan where xchan_url like '%s' limit 1", dbesc($x['id'] . '/%') ); - if(! $r) { + if (!$r) { $r = q("select * from xchan where xchan_hash = '%s' limit 1", dbesc($x['id']) ); - } - if(! $r) + } + if (!$r) return []; return self::encode_person($r[0]); @@ -140,7 +152,7 @@ class Activity { dbesc($x['id']) ); - if(! $r) + if (!$r) return []; $x = [ @@ -149,7 +161,7 @@ class Activity { 'name' => $r[0]['obj_term'] ]; - if($r[0]['obj_image']) + if ($r[0]['obj_image']) $x['image'] = $r[0]['obj_image']; return $x; @@ -158,7 +170,7 @@ class Activity { static function fetch_item($x) { - if (array_key_exists('source',$x)) { + if (array_key_exists('source', $x)) { // This item is already processed and encoded return $x; } @@ -166,8 +178,8 @@ class Activity { $r = q("select * from item where mid = '%s' limit 1", dbesc($x['id']) ); - if($r) { - xchan_query($r,true); + if ($r) { + xchan_query($r, true); $r = fetch_post_tags($r); if (in_array($r[0]['verb'], ['Create', 'Invite']) && $r[0]['obj_type'] === ACTIVITY_OBJ_EVENT) { $r[0]['verb'] = 'Invite'; @@ -177,22 +189,21 @@ class Activity { } } - static function fetch_image($x) { $ret = [ - 'type' => 'Image', - 'id' => $x['id'], - 'name' => $x['title'], - 'content' => bbcode($x['body'], [ 'cache' => true ]), - 'source' => [ 'mediaType' => 'text/bbcode', 'content' => $x['body'] ], - 'published' => datetime_convert('UTC','UTC',$x['created'],ATOM_TIME), - 'updated' => datetime_convert('UTC','UTC', $x['edited'],ATOM_TIME), - 'url' => [ - 'type' => 'Link', - 'mediaType' => $x['link'][0]['type'], - 'href' => $x['link'][0]['href'], - 'width' => $x['link'][0]['width'], - 'height' => $x['link'][0]['height'] + 'type' => 'Image', + 'id' => $x['id'], + 'name' => $x['title'], + 'content' => bbcode($x['body'], ['cache' => true]), + 'source' => ['mediaType' => 'text/bbcode', 'content' => $x['body']], + 'published' => datetime_convert('UTC', 'UTC', $x['created'], ATOM_TIME), + 'updated' => datetime_convert('UTC', 'UTC', $x['edited'], ATOM_TIME), + 'url' => [ + 'type' => 'Link', + 'mediaType' => $x['link'][0]['type'], + 'href' => $x['link'][0]['href'], + 'width' => $x['link'][0]['width'], + 'height' => $x['link'][0]['height'] ] ]; return $ret; @@ -202,42 +213,42 @@ class Activity { // convert old Zot event objects to ActivityStreams Event objects - if (array_key_exists('content',$x) && array_key_exists('dtstart',$x)) { + if (array_key_exists('content', $x) && array_key_exists('dtstart', $x)) { $ev = bbtoevent($x['content']); - if($ev) { + if ($ev) { - if (! $ev['timezone']) { + if (!$ev['timezone']) { $ev['timezone'] = 'UTC'; } $actor = null; - if(array_key_exists('author',$x) && array_key_exists('link',$x['author'])) { + if (array_key_exists('author', $x) && array_key_exists('link', $x['author'])) { $actor = $x['author']['link'][0]['href']; } - $y = [ + $y = [ 'type' => 'Event', 'id' => z_root() . '/event/' . $ev['event_hash'], 'name' => $ev['summary'], -// 'summary' => bbcode($ev['summary'], [ 'cache' => true ]), + // 'summary' => bbcode($ev['summary'], [ 'cache' => true ]), // RFC3339 Section 4.3 - 'startTime' => (($ev['adjust']) ? datetime_convert($ev['timezone'],'UTC',$ev['dtstart'], ATOM_TIME) : datetime_convert('UTC','UTC',$ev['dtstart'],'Y-m-d\\TH:i:s-00:00')), - 'content' => bbcode($ev['description'], [ 'cache' => true ]), - 'location' => [ 'type' => 'Place', 'content' => bbcode($ev['location'], [ 'cache' => true ]) ], - 'source' => [ 'content' => format_event_bbcode($ev,true), 'mediaType' => 'text/bbcode' ], + 'startTime' => (($ev['adjust']) ? datetime_convert($ev['timezone'], 'UTC', $ev['dtstart'], ATOM_TIME) : datetime_convert('UTC', 'UTC', $ev['dtstart'], 'Y-m-d\\TH:i:s-00:00')), + 'content' => bbcode($ev['description'], ['cache' => true]), + 'location' => ['type' => 'Place', 'content' => bbcode($ev['location'], ['cache' => true])], + 'source' => ['content' => format_event_bbcode($ev, true), 'mediaType' => 'text/bbcode'], 'actor' => $actor, ]; - if(! $ev['nofinish']) { - $y['endTime'] = (($ev['adjust']) ? datetime_convert($ev['timezone'],'UTC',$ev['dtend'], ATOM_TIME) : datetime_convert('UTC','UTC',$ev['dtend'],'Y-m-d\\TH:i:s-00:00')); + if (!$ev['nofinish']) { + $y['endTime'] = (($ev['adjust']) ? datetime_convert($ev['timezone'], 'UTC', $ev['dtend'], ATOM_TIME) : datetime_convert('UTC', 'UTC', $ev['dtend'], 'Y-m-d\\TH:i:s-00:00')); } - + // copy attachments from the passed object - these are already formatted for ActivityStreams - if($x['attachment']) { + if ($x['attachment']) { $y['attachment'] = $x['attachment']; } - if($actor) { + if ($actor) { return $y; } } @@ -247,52 +258,112 @@ class Activity { } - - static function encode_item_collection($items,$id,$type,$extra = null) { + static function paged_collection_init($total, $id, $type = 'OrderedCollection') { $ret = [ - 'id' => z_root() . '/' . $id, - 'type' => $type, - 'totalItems' => count($items), + 'id' => z_root() . '/' . $id, + 'type' => $type, + 'totalItems' => $total, ]; - if($extra) - $ret = array_merge($ret,$extra); - if($items) { - $x = []; - foreach($items as $i) { - $t = self::encode_activity($i); - if($t) - $x[] = $t; + $numpages = $total / App::$pager['itemspage']; + $lastpage = (($numpages > intval($numpages)) ? intval($numpages) + 1 : $numpages); + + $ret['first'] = z_root() . '/' . App::$query_string . '?page=1'; + $ret['last'] = z_root() . '/' . App::$query_string . '?page=' . $lastpage; + + return $ret; + + } + + static function encode_item_collection($items, $id, $type, $total = 0) { + + if ($total > 30) { + $ret = [ + 'id' => z_root() . '/' . $id, + 'type' => $type . 'Page', + ]; + + $numpages = $total / App::$pager['itemspage']; + $lastpage = (($numpages > intval($numpages)) ? intval($numpages) + 1 : $numpages); + $url_parts = parse_url($id); + + $ret['partOf'] = z_root() . '/' . $url_parts['path']; + + $extra_query_args = ''; + $query_args = null; + if(isset($url_parts['query'])) { + parse_str($url_parts['query'], $query_args); } - if($type === 'OrderedCollection') + + if(is_array($query_args)) { + unset($query_args['page']); + foreach($query_args as $k => $v) + $extra_query_args .= '&' . urlencode($k) . '=' . urlencode($v); + } + + if (App::$pager['page'] < $lastpage) { + $ret['next'] = z_root() . '/' . $url_parts['path'] . '?page=' . (intval(App::$pager['page']) + 1) . $extra_query_args; + } + if (App::$pager['page'] > 1) { + $ret['prev'] = z_root() . '/' . $url_parts['path'] . '?page=' . (intval(App::$pager['page']) - 1) . $extra_query_args; + } + } + else { + $ret = [ + 'id' => z_root() . '/' . $id, + 'type' => $type, + 'totalItems' => $total, + ]; + } + + if ($items) { + $x = []; + foreach ($items as $i) { + $m = get_iconfig($i['id'], 'activitypub', 'rawmsg'); + if ($m) { + if (is_string($m)) + $t = json_decode($m, true); + else + $t = $m; + } + else { + $t = self::encode_activity($i); + } + if ($t) { + $x[] = $t; + } + } + if ($type === 'OrderedCollection') { $ret['orderedItems'] = $x; - else + } + else { $ret['items'] = $x; + } } return $ret; } - static function encode_follow_collection($items,$id,$type,$extra = null) { + static function encode_follow_collection($items, $id, $type, $extra = null) { $ret = [ - 'id' => z_root() . '/' . $id, - 'type' => $type, + 'id' => z_root() . '/' . $id, + 'type' => $type, 'totalItems' => count($items), ]; - if($extra) - $ret = array_merge($ret,$extra); + if ($extra) + $ret = array_merge($ret, $extra); - if($items) { + if ($items) { $x = []; - foreach($items as $i) { - if($i['xchan_url']) { + foreach ($items as $i) { + if ($i['xchan_url']) { $x[] = $i['xchan_url']; } } - if($type === 'OrderedCollection') + if ($type === 'OrderedCollection') $ret['orderedItems'] = $x; else $ret['items'] = $x; @@ -301,18 +372,15 @@ class Activity { return $ret; } - - - static function encode_item($i) { $ret = []; - if($i['verb'] === ACTIVITY_FRIEND) { + if ($i['verb'] === ACTIVITY_FRIEND) { // Hubzilla 'make-friend' activity, no direct mapping from AS1 to AS2 - make it a note $objtype = 'Note'; } - else { + else { $objtype = self::activity_obj_mapper($i['obj_type']); } @@ -321,13 +389,13 @@ class Activity { } if (intval($i['item_deleted'])) { - $ret['type'] = 'Tombstone'; + $ret['type'] = 'Tombstone'; $ret['formerType'] = $objtype; - $ret['id'] = $i['mid']; - if($i['id'] != $i['parent']) + $ret['id'] = $i['mid']; + if ($i['id'] != $i['parent']) $ret['inReplyTo'] = $i['thr_parent']; - $ret['to'] = [ ACTIVITY_PUBLIC_INBOX ]; + $ret['to'] = [ACTIVITY_PUBLIC_INBOX]; return $ret; } @@ -336,7 +404,7 @@ class Activity { $ret = $i['obj']; } else { - $ret = json_decode($i['obj'],true); + $ret = json_decode($i['obj'], true); } } @@ -348,96 +416,95 @@ class Activity { $ret = $i['obj']; } else { - $ret = json_decode($i['obj'],true); + $ret = json_decode($i['obj'], true); } - - if(array_path_exists('actor/id',$ret)) { + + if (array_path_exists('actor/id', $ret)) { $ret['actor'] = $ret['actor']['id']; } } } - - $ret['id'] = ((strpos($i['mid'],'http') === 0) ? $i['mid'] : z_root() . '/item/' . urlencode($i['mid'])); + $ret['id'] = ((strpos($i['mid'], 'http') === 0) ? $i['mid'] : z_root() . '/item/' . urlencode($i['mid'])); $ret['diaspora:guid'] = $i['uuid']; - if($i['title']) + if ($i['title']) $ret['name'] = $i['title']; - $ret['published'] = datetime_convert('UTC','UTC',$i['created'],ATOM_TIME); - if($i['created'] !== $i['edited']) - $ret['updated'] = datetime_convert('UTC','UTC',$i['edited'],ATOM_TIME); - if ($i['expires'] <= NULL_DATE) { - $ret['expires'] = datetime_convert('UTC','UTC',$i['expires'],ATOM_TIME); + $ret['published'] = datetime_convert('UTC', 'UTC', $i['created'], ATOM_TIME); + if ($i['created'] !== $i['edited']) + $ret['updated'] = datetime_convert('UTC', 'UTC', $i['edited'], ATOM_TIME); + if ($i['expires'] > NULL_DATE) { + $ret['expires'] = datetime_convert('UTC', 'UTC', $i['expires'], ATOM_TIME); } - if($i['app']) { - $ret['generator'] = [ 'type' => 'Application', 'name' => $i['app'] ]; + if ($i['app']) { + $ret['generator'] = ['type' => 'Application', 'name' => $i['app']]; } - if($i['location'] || $i['coord']) { - $ret['location'] = [ 'type' => 'Place' ]; - if($i['location']) { + if ($i['location'] || $i['coord']) { + $ret['location'] = ['type' => 'Place']; + if ($i['location']) { $ret['location']['name'] = $i['location']; } - if($i['coord']) { - $l = explode(' ',$i['coord']); - $ret['location']['latitude'] = $l[0]; + if ($i['coord']) { + $l = explode(' ', $i['coord']); + $ret['location']['latitude'] = $l[0]; $ret['location']['longitude'] = $l[1]; } } if (intval($i['item_wall']) && $i['mid'] === $i['parent_mid']) { - $ret['commentPolicy'] = map_scope(PermissionLimits::Get($i['uid'],'post_comments')); + $ret['commentPolicy'] = map_scope(PermissionLimits::Get($i['uid'], 'post_comments')); } if (intval($i['item_private']) === 2) { $ret['directMessage'] = true; } - if (array_key_exists('comments_closed',$i) && $i['comments_closed'] !== EMPTY_STR && $i['comments_closed'] !== NULL_DATE) { - if($ret['commentPolicy']) { + if (array_key_exists('comments_closed', $i) && $i['comments_closed'] !== EMPTY_STR && $i['comments_closed'] > NULL_DATE) { + if ($ret['commentPolicy']) { $ret['commentPolicy'] .= ' '; } - $ret['commentPolicy'] .= 'until=' . datetime_convert('UTC','UTC',$i['comments_closed'],ATOM_TIME); + $ret['commentPolicy'] .= 'until=' . datetime_convert('UTC', 'UTC', $i['comments_closed'], ATOM_TIME); } $ret['attributedTo'] = $i['author']['xchan_url']; - if($i['id'] != $i['parent']) { - $ret['inReplyTo'] = ((strpos($i['thr_parent'],'http') === 0) ? $i['thr_parent'] : z_root() . '/item/' . urlencode($i['thr_parent'])); + if ($i['id'] != $i['parent']) { + $ret['inReplyTo'] = ((strpos($i['thr_parent'], 'http') === 0) ? $i['thr_parent'] : z_root() . '/item/' . urlencode($i['thr_parent'])); } - if($i['mimetype'] === 'text/bbcode') { - if($i['title']) - $ret['name'] = bbcode($i['title'], [ 'cache' => true ]); - if($i['summary']) - $ret['summary'] = bbcode($i['summary'], [ 'cache' => true ]); - $ret['content'] = bbcode($i['body'], [ 'cache' => true ]); - $ret['source'] = [ 'content' => $i['body'], 'mediaType' => 'text/bbcode' ]; + if ($i['mimetype'] === 'text/bbcode') { + if ($i['title']) + $ret['name'] = bbcode($i['title'], ['cache' => true]); + if ($i['summary']) + $ret['summary'] = bbcode($i['summary'], ['cache' => true]); + $ret['content'] = bbcode($i['body'], ['cache' => true]); + $ret['source'] = ['content' => $i['body'], 'mediaType' => 'text/bbcode']; } - $actor = self::encode_person($i['author'],false); - if($actor) + $actor = self::encode_person($i['author'], false); + if ($actor) $ret['actor'] = $actor; else return []; $t = self::encode_taxonomy($i); - if($t) { - $ret['tag'] = $t; + if ($t) { + $ret['tag'] = $t; } $a = self::encode_attachment($i); - if($a) { + if ($a) { $ret['attachment'] = $a; } - $public = (($i['item_private']) ? false : true); + $public = (($i['item_private']) ? false : true); $top_level = (($i['mid'] === $i['parent_mid']) ? true : false); if ($public) { - $ret['to'] = [ ACTIVITY_PUBLIC_INBOX ]; - $ret['cc'] = [ z_root() . '/followers/' . substr($i['author']['xchan_addr'],0,strpos($i['author']['xchan_addr'],'@')) ]; + $ret['to'] = [ACTIVITY_PUBLIC_INBOX]; + $ret['cc'] = [z_root() . '/followers/' . substr($i['author']['xchan_addr'], 0, strpos($i['author']['xchan_addr'], '@'))]; } else { @@ -450,7 +517,7 @@ class Activity { $ret['to'] = []; if ($ret['tag']) { foreach ($ret['tag'] as $mention) { - if (is_array($mention) && array_key_exists('href',$mention) && $mention['href']) { + if (is_array($mention) && array_key_exists('href', $mention) && $mention['href']) { $h = q("select * from hubloc where hubloc_id_url = '%s' limit 1", dbesc($mention['href']) ); @@ -461,7 +528,7 @@ class Activity { else { $addr = $h[0]['hubloc_id_url']; } - if (! in_array($addr,$ret['to'])) { + if (!in_array($addr, $ret['to'])) { $ret['to'][] = $addr; } } @@ -478,7 +545,7 @@ class Activity { else { $addr = $d[0]['hubloc_id_url']; } - if (! in_array($addr,$ret['to'])) { + if (!in_array($addr, $ret['to'])) { $ret['cc'][] = $addr; } } @@ -487,7 +554,7 @@ class Activity { $mentions = self::map_mentions($i); if (count($mentions) > 0) { - if (! $ret['to']) { + if (!$ret['to']) { $ret['to'] = $mentions; } else { @@ -505,25 +572,25 @@ class Activity { if ($item['tag'] && is_array($item['tag'])) { $ptr = $item['tag']; - if (! array_key_exists(0,$ptr)) { - $ptr = [ $ptr ]; + if (!array_key_exists(0, $ptr)) { + $ptr = [$ptr]; } foreach ($ptr as $t) { - if (! array_key_exists('type',$t)) + if (!array_key_exists('type', $t)) $t['type'] = 'Hashtag'; - switch($t['type']) { + switch ($t['type']) { case 'Hashtag': - $ret[] = [ 'ttype' => TERM_HASHTAG, 'url' => $t['href'], 'term' => escape_tags((substr($t['name'],0,1) === '#') ? substr($t['name'],1) : $t['name']) ]; + $ret[] = ['ttype' => TERM_HASHTAG, 'url' => $t['href'], 'term' => escape_tags((substr($t['name'], 0, 1) === '#') ? substr($t['name'], 1) : $t['name'])]; break; case 'Mention': - $mention_type = substr($t['name'],0,1); + $mention_type = substr($t['name'], 0, 1); if ($mention_type === '!') { - $ret[] = [ 'ttype' => TERM_FORUM, 'url' => $t['href'], 'term' => escape_tags(substr($t['name'],1)) ]; + $ret[] = ['ttype' => TERM_FORUM, 'url' => $t['href'], 'term' => escape_tags(substr($t['name'], 1))]; } else { - $ret[] = [ 'ttype' => TERM_MENTION, 'url' => $t['href'], 'term' => escape_tags((substr($t['name'],0,1) === '@') ? substr($t['name'],1) : $t['name']) ]; + $ret[] = ['ttype' => TERM_MENTION, 'url' => $t['href'], 'term' => escape_tags((substr($t['name'], 0, 1) === '@') ? substr($t['name'], 1) : $t['name'])]; } break; @@ -536,30 +603,28 @@ class Activity { return $ret; } - - static function encode_taxonomy($item) { $ret = []; - if($item['term']) { - foreach($item['term'] as $t) { - switch($t['ttype']) { + if ($item['term']) { + foreach ($item['term'] as $t) { + switch ($t['ttype']) { case TERM_HASHTAG: // href is required so if we don't have a url in the taxonomy, ignore it and keep going. - if($t['url']) { - $ret[] = [ 'type' => 'Hashtag', 'href' => $t['url'], 'name' => '#' . $t['term'] ]; + if ($t['url']) { + $ret[] = ['type' => 'Hashtag', 'href' => $t['url'], 'name' => '#' . $t['term']]; } break; case TERM_FORUM: - $ret[] = [ 'type' => 'Mention', 'href' => $t['url'], 'name' => '!' . $t['term'] ]; + $ret[] = ['type' => 'Mention', 'href' => $t['url'], 'name' => '!' . $t['term']]; break; case TERM_MENTION: - $ret[] = [ 'type' => 'Mention', 'href' => $t['url'], 'name' => '@' . $t['term'] ]; + $ret[] = ['type' => 'Mention', 'href' => $t['url'], 'name' => '@' . $t['term']]; break; - + default: break; } @@ -573,15 +638,15 @@ class Activity { $ret = []; - if($item['attach']) { - $atts = ((is_array($item['attach'])) ? $item['attach'] : json_decode($item['attach'],true)); - if($atts) { - foreach($atts as $att) { - if(strpos($att['type'],'image')) { - $ret[] = [ 'type' => 'Image', 'url' => $att['href'] ]; + if ($item['attach']) { + $atts = ((is_array($item['attach'])) ? $item['attach'] : json_decode($item['attach'], true)); + if ($atts) { + foreach ($atts as $att) { + if (strpos($att['type'], 'image')) { + $ret[] = ['type' => 'Image', 'url' => $att['href']]; } else { - $ret[] = [ 'type' => 'Link', 'mediaType' => $att['type'], 'href' => $att['href'] ]; + $ret[] = ['type' => 'Link', 'mediaType' => $att['type'], 'href' => $att['href']]; } } } @@ -590,11 +655,11 @@ class Activity { foreach ($item['iconfig'] as $att) { if ($att['sharing']) { $value = ((is_string($att['v']) && preg_match('|^a:[0-9]+:{.*}$|s', $att['v'])) ? unserialize($att['v']) : $att['v']); - $ret[] = [ 'type' => 'PropertyValue', 'name' => 'zot.' . $att['cat'] . '.' . $att['k'], 'value' => $value ]; + $ret[] = ['type' => 'PropertyValue', 'name' => 'zot.' . $att['cat'] . '.' . $att['k'], 'value' => $value]; } } } - + return $ret; } @@ -604,20 +669,20 @@ class Activity { if (is_array($item['attachment']) && $item['attachment']) { $ptr = $item['attachment']; - if (! array_key_exists(0,$ptr)) { - $ptr = [ $ptr ]; + if (!array_key_exists(0, $ptr)) { + $ptr = [$ptr]; } foreach ($ptr as $att) { $entry = []; if ($att['type'] === 'PropertyValue') { - if (array_key_exists('name',$att) && $att['name']) { - $key = explode('.',$att['name']); + if (array_key_exists('name', $att) && $att['name']) { + $key = explode('.', $att['name']); if (count($key) === 3 && $key[0] === 'zot') { - $entry['cat'] = $key[1]; - $entry['k'] = $key[2]; - $entry['v'] = $att['value']; + $entry['cat'] = $key[1]; + $entry['k'] = $key[2]; + $entry['v'] = $att['value']; $entry['sharing'] = '1'; - $ret[] = $entry; + $ret[] = $entry; } } } @@ -626,24 +691,22 @@ class Activity { return $ret; } - - static function decode_attachment($item) { $ret = []; - if($item['attachment']) { - foreach($item['attachment'] as $att) { + if ($item['attachment']) { + foreach ($item['attachment'] as $att) { $entry = []; - if($att['href']) + if ($att['href']) $entry['href'] = $att['href']; - elseif($att['url']) + elseif ($att['url']) $entry['href'] = $att['url']; - if($att['mediaType']) + if ($att['mediaType']) $entry['type'] = $att['mediaType']; - elseif($att['type'] === 'Image') + elseif ($att['type'] === 'Image') $entry['type'] = 'image/jpeg'; - if($entry) + if ($entry) $ret[] = $entry; } } @@ -651,211 +714,187 @@ class Activity { return $ret; } - - static function encode_activity($i, $recurse = false) { $ret = []; $reply = false; - if($i['verb'] === ACTIVITY_FRIEND) { + if ($i['verb'] === ACTIVITY_FRIEND) { // Hubzilla 'make-friend' activity, no direct mapping from AS1 to AS2 - make it a note $ret['obj'] = []; } $ret['type'] = self::activity_mapper($i['verb']); - $fragment = ''; if (intval($i['item_deleted']) && !$recurse) { $is_response = false; if (ActivityStreams::is_response_activity($ret['type'])) { $ret['type'] = 'Undo'; - $fragment = 'undo'; + $fragment = 'undo'; $is_response = true; } else { $ret['type'] = 'Delete'; - $fragment = 'delete'; + $fragment = 'delete'; } - $ret['id'] = str_replace('/item/','/activity/',$i['mid']) . '#' . $fragment; - $actor = self::encode_person($i['author'],false); + $ret['id'] = str_replace('/item/', '/activity/', $i['mid']) . '#' . $fragment; + $actor = self::encode_person($i['author'], false); if ($actor) $ret['actor'] = $actor; else - return []; + return []; - $obj = (($is_response) ? self::encode_activity($i,true) : self::encode_item($i,true)); + $obj = (($is_response) ? self::encode_activity($i, true) : self::encode_item($i)); if ($obj) { - if (array_path_exists('object/id',$obj)) { + if (array_path_exists('object/id', $obj)) { $obj['object'] = $obj['object']['id']; } unset($obj['cc']); - $obj['to'] = [ ACTIVITY_PUBLIC_INBOX ]; + $obj['to'] = [ACTIVITY_PUBLIC_INBOX]; $ret['object'] = $obj; } else return []; - $ret['to'] = [ ACTIVITY_PUBLIC_INBOX ]; + $ret['to'] = [ACTIVITY_PUBLIC_INBOX]; return $ret; } - if($ret['type'] === 'emojiReaction') { + if ($ret['type'] === 'emojiReaction') { // There may not be an object for these items for legacy reasons - it should be the conversation parent. $p = q("select * from item where mid = '%s' and uid = %d", dbesc($i['parent_mid']), intval($i['uid']) ); - if($p) { - xchan_query($p,true); - $p = fetch_post_tags($p); + if ($p) { + xchan_query($p, true); + $p = fetch_post_tags($p); $i['obj'] = self::encode_item($p[0]); // convert to zot6 emoji reaction encoding which uses the target object to indicate the // specific emoji instead of overloading the verb or type. - - $im = explode('#',$i['verb']); - if($im && count($im) > 1) + + $im = explode('#', $i['verb']); + if ($im && count($im) > 1) $emoji = $im[1]; - if(preg_match("/\[img(.*?)\](.*?)\[\/img\]/ism", $i['body'], $match)) { + if (preg_match("/\[img(.*?)\](.*?)\[\/img\]/ism", $i['body'], $match)) { $ln = $match[2]; } $i['tgt_type'] = 'Image'; - + $i['target'] = [ 'type' => 'Image', 'name' => $emoji, 'url' => (($ln) ? $ln : z_root() . '/images/emoji/' . $emoji . '.png') ]; - + } } - if (strpos($i['mid'],z_root() . '/item/') !== false) { - $ret['id'] = str_replace('/item/','/activity/',$i['mid']); + if (strpos($i['mid'], z_root() . '/item/') !== false) { + $ret['id'] = str_replace('/item/', '/activity/', $i['mid']); } - elseif (strpos($i['mid'],z_root() . '/event/') !== false) { - $ret['id'] = str_replace('/event/','/activity/',$i['mid']); + elseif (strpos($i['mid'], z_root() . '/event/') !== false) { + $ret['id'] = str_replace('/event/', '/activity/', $i['mid']); } else { - $ret['id'] = ((strpos($i['mid'],'http') === 0) ? $i['mid'] : z_root() . '/activity/' . urlencode($i['mid'])); + $ret['id'] = ((strpos($i['mid'], 'http') === 0) ? $i['mid'] : z_root() . '/activity/' . urlencode($i['mid'])); } $ret['diaspora:guid'] = $i['uuid']; - if($i['title']) - $ret['name'] = html2plain(bbcode($i['title'], [ 'cache' => true ])); + if ($i['title']) + $ret['name'] = html2plain(bbcode($i['title'], ['cache' => true])); - if($i['summary']) - $ret['summary'] = bbcode($i['summary'], [ 'cache' => true ]); + if ($i['summary']) + $ret['summary'] = bbcode($i['summary'], ['cache' => true]); - if($ret['type'] === 'Announce') { - $tmp = preg_replace('/\[share(.*?)\[\/share\]/ism',EMPTY_STR, $i['body']); - $ret['content'] = bbcode($tmp, [ 'cache' => true ]); - $ret['source'] = [ - 'content' => $i['body'], + if ($ret['type'] === 'Announce') { + $tmp = preg_replace('/\[share(.*?)\[\/share\]/ism', EMPTY_STR, $i['body']); + $ret['content'] = bbcode($tmp, ['cache' => true]); + $ret['source'] = [ + 'content' => $i['body'], 'mediaType' => 'text/bbcode' ]; } - $ret['published'] = datetime_convert('UTC','UTC',$i['created'],ATOM_TIME); - if($i['created'] !== $i['edited']) - $ret['updated'] = datetime_convert('UTC','UTC',$i['edited'],ATOM_TIME); - if($i['app']) { - $ret['generator'] = [ 'type' => 'Application', 'name' => $i['app'] ]; + $ret['published'] = datetime_convert('UTC', 'UTC', $i['created'], ATOM_TIME); + if ($i['created'] !== $i['edited']) + $ret['updated'] = datetime_convert('UTC', 'UTC', $i['edited'], ATOM_TIME); + if ($i['app']) { + $ret['generator'] = ['type' => 'Application', 'name' => $i['app']]; } - if($i['location'] || $i['coord']) { - $ret['location'] = [ 'type' => 'Place' ]; - if($i['location']) { + if ($i['location'] || $i['coord']) { + $ret['location'] = ['type' => 'Place']; + if ($i['location']) { $ret['location']['name'] = $i['location']; } - if($i['coord']) { - $l = explode(' ',$i['coord']); - $ret['location']['latitude'] = $l[0]; + if ($i['coord']) { + $l = explode(' ', $i['coord']); + $ret['location']['latitude'] = $l[0]; $ret['location']['longitude'] = $l[1]; } } - if($i['id'] != $i['parent']) { + if ($i['id'] != $i['parent']) { $reply = true; // inReplyTo needs to be set in the activity for followup actions (Like, Dislike, Announce, etc.), // but *not* for comments and RSVPs, where it should only be present in the object - - if (! in_array($ret['type'],[ 'Create','Update','Accept','Reject','TentativeAccept','TentativeReject' ])) { - $ret['inReplyTo'] = ((strpos($i['thr_parent'],'http') === 0) ? $i['thr_parent'] : z_root() . '/item/' . urlencode($i['thr_parent'])); + + if (!in_array($ret['type'], ['Create', 'Update', 'Accept', 'Reject', 'TentativeAccept', 'TentativeReject'])) { + $ret['inReplyTo'] = ((strpos($i['thr_parent'], 'http') === 0) ? $i['thr_parent'] : z_root() . '/item/' . urlencode($i['thr_parent'])); } - - if($i['item_private']) { - $d = q("select xchan_url, xchan_addr, xchan_name from item left join xchan on xchan_hash = author_xchan where id = %d limit 1", - intval($i['parent']) - ); - if($d) { - $is_directmessage = false; - $recips = get_iconfig($i['parent'], 'activitypub', 'recips'); - - if(array_path_exists('to', $recips) && in_array($i['author']['xchan_url'], $recips['to'])) { - $reply_url = $d[0]['xchan_url']; - $is_directmessage = true; - } - else { - $reply_url = z_root() . '/followers/' . substr($i['author']['xchan_addr'],0,strpos($i['author']['xchan_addr'],'@')); - } - - $reply_addr = (($d[0]['xchan_addr']) ? $d[0]['xchan_addr'] : $d[0]['xchan_name']); - } - } - } - $actor = self::encode_person($i['author'],false); - if($actor) + $actor = self::encode_person($i['author'], false); + if ($actor) $ret['actor'] = $actor; else - return []; + return []; - if(strpos($i['body'],'[/share]') !== false) { + if (strpos($i['body'], '[/share]') !== false) { $i['obj'] = null; } - if($i['obj']) { - if(! is_array($i['obj'])) { - $i['obj'] = json_decode($i['obj'],true); + if ($i['obj']) { + if (!is_array($i['obj'])) { + $i['obj'] = json_decode($i['obj'], true); } - if($i['obj']['type'] === ACTIVITY_OBJ_PHOTO) { + if ($i['obj']['type'] === ACTIVITY_OBJ_PHOTO) { $i['obj']['id'] = $i['mid']; } $obj = self::encode_object($i['obj']); - if($obj) + if ($obj) $ret['object'] = $obj; else return []; } else { $obj = self::encode_item($i); - if($obj) + if ($obj) $ret['object'] = $obj; else return []; } - if(array_path_exists('object/type',$ret) && $ret['object']['type'] === 'Event' && $ret['type'] === 'Create') { + if (array_path_exists('object/type', $ret) && $ret['object']['type'] === 'Event' && $ret['type'] === 'Create') { $ret['type'] = 'Invite'; } - if($i['target']) { - if(! is_array($i['target'])) { - $i['target'] = json_decode($i['target'],true); + if ($i['target']) { + if (!is_array($i['target'])) { + $i['target'] = json_decode($i['target'], true); } $tgt = self::encode_object($i['target']); - if($tgt) + if ($tgt) $ret['target'] = $tgt; else return []; @@ -868,12 +907,12 @@ class Activity { // addressing madness - $public = (($i['item_private']) ? false : true); + $public = (($i['item_private']) ? false : true); $top_level = (($reply) ? false : true); if ($public) { - $ret['to'] = [ ACTIVITY_PUBLIC_INBOX ]; - $ret['cc'] = [ z_root() . '/followers/' . substr($i['author']['xchan_addr'],0,strpos($i['author']['xchan_addr'],'@')) ]; + $ret['to'] = [ACTIVITY_PUBLIC_INBOX]; + $ret['cc'] = [z_root() . '/followers/' . substr($i['author']['xchan_addr'], 0, strpos($i['author']['xchan_addr'], '@'))]; } else { @@ -886,7 +925,7 @@ class Activity { $ret['to'] = []; if ($ret['tag']) { foreach ($ret['tag'] as $mention) { - if (is_array($mention) && array_key_exists('href',$mention) && $mention['href']) { + if (is_array($mention) && array_key_exists('href', $mention) && $mention['href']) { $h = q("select * from hubloc where hubloc_id_url = '%s' limit 1", dbesc($mention['href']) ); @@ -897,7 +936,7 @@ class Activity { else { $addr = $h[0]['hubloc_id_url']; } - if (! in_array($addr,$ret['to'])) { + if (!in_array($addr, $ret['to'])) { $ret['to'][] = $addr; } } @@ -915,7 +954,7 @@ class Activity { else { $addr = $d[0]['hubloc_id_url']; } - if (! in_array($addr,$ret['to'])) { + if (!in_array($addr, $ret['to'])) { $ret['cc'][] = $addr; } } @@ -924,7 +963,7 @@ class Activity { $mentions = self::map_mentions($i); if (count($mentions) > 0) { - if (! $ret['to']) { + if (!$ret['to']) { $ret['to'] = $mentions; } else { @@ -936,21 +975,20 @@ class Activity { } // Returns an array of URLS for any mention tags found in the item array $i. - static function map_mentions($i) { - if (! $i['term']) { + if (!$i['term']) { return []; } $list = []; foreach ($i['term'] as $t) { - if (! $t['url']) { + if (!$t['url']) { continue; } if ($t['ttype'] == TERM_MENTION) { - $url = self::lookup_term_url($t['url']); + $url = self::lookup_term_url($t['url']); $list[] = (($url) ? $url : $t['url']); } } @@ -959,11 +997,10 @@ class Activity { } // Returns an array of all recipients targeted by private item array $i. - static function map_acl($i) { $ret = []; - if (! $i['item_private']) { + if (!$i['item_private']) { return $ret; } @@ -977,8 +1014,8 @@ class Activity { } if ($i['allow_cid']) { - $tmp = expand_acl($i['allow_cid']); - $list = stringify_array($tmp,true); + $tmp = expand_acl($i['allow_cid']); + $list = stringify_array($tmp, true); if ($list) { $details = q("select hubloc_id_url from hubloc where hubloc_hash in (" . $list . ") and hubloc_id_url != ''"); if ($details) { @@ -1013,22 +1050,22 @@ class Activity { static function encode_person($p, $extended = true) { - if(! $p['xchan_url']) + if (!$p['xchan_url']) return []; - if(! $extended) { + if (!$extended) { return $p['xchan_url']; } $ret = []; - $c = ((array_key_exists('channel_id',$p)) ? $p : channelx_by_hash($p['xchan_hash'])); + $c = ((array_key_exists('channel_id', $p)) ? $p : channelx_by_hash($p['xchan_hash'])); - $ret['type'] = 'Person'; + $ret['type'] = 'Person'; if ($c) { - $role = get_pconfig($c['channel_id'],'system','permissions_role'); - if (strpos($role,'forum') !== false) { + $role = get_pconfig($c['channel_id'], 'system', 'permissions_role'); + if (strpos($role, 'forum') !== false) { $ret['type'] = 'Group'; } } @@ -1037,23 +1074,24 @@ class Activity { $ret['id'] = channel_url($c); } else { - $ret['id'] = ((strpos($p['xchan_hash'],'http') === 0) ? $p['xchan_hash'] : $p['xchan_url']); + $ret['id'] = ((strpos($p['xchan_hash'], 'http') === 0) ? $p['xchan_hash'] : $p['xchan_url']); } - if($p['xchan_addr'] && strpos($p['xchan_addr'],'@')) - $ret['preferredUsername'] = substr($p['xchan_addr'],0,strpos($p['xchan_addr'],'@')); - $ret['name'] = $p['xchan_name']; - $ret['updated'] = datetime_convert('UTC','UTC',$p['xchan_name_date'],ATOM_TIME); - $ret['icon'] = [ + if ($p['xchan_addr'] && strpos($p['xchan_addr'], '@')) + $ret['preferredUsername'] = substr($p['xchan_addr'], 0, strpos($p['xchan_addr'], '@')); + + $ret['name'] = $p['xchan_name']; + $ret['updated'] = datetime_convert('UTC', 'UTC', $p['xchan_name_date'], ATOM_TIME); + $ret['icon'] = [ 'type' => 'Image', - 'mediaType' => (($p['xchan_photo_mimetype']) ? $p['xchan_photo_mimetype'] : 'image/png' ), - 'updated' => datetime_convert('UTC','UTC',$p['xchan_photo_date'],ATOM_TIME), + 'mediaType' => (($p['xchan_photo_mimetype']) ? $p['xchan_photo_mimetype'] : 'image/png'), + 'updated' => datetime_convert('UTC', 'UTC', $p['xchan_photo_date'], ATOM_TIME), 'url' => $p['xchan_photo_l'], 'height' => 300, 'width' => 300, ]; - $ret['url'] = [ - [ + $ret['url'] = [ + [ 'type' => 'Link', 'mediaType' => 'text/html', 'href' => $p['xchan_url'] @@ -1071,98 +1109,120 @@ class Activity { 'publicKeyPem' => $p['xchan_pubkey'] ]; - $arr = [ 'xchan' => $p, 'encoded' => $ret ]; + $arr = [ + 'xchan' => $p, + 'encoded' => $ret + ]; + call_hooks('encode_person', $arr); $ret = $arr['encoded']; - return $ret; } + static function encode_item_object($item, $elm = 'obj') { + $ret = []; + + if ($item[$elm]) { + if (! is_array($item[$elm])) { + $item[$elm] = json_decode($item[$elm],true); + } + if ($item[$elm]['type'] === ACTIVITY_OBJ_PHOTO) { + $item[$elm]['id'] = $item['mid']; + } + $obj = self::encode_object($item[$elm]); + if ($obj) + return $obj; + else + return []; + } + else { + $obj = self::encode_item($item); + if ($obj) + return $obj; + else + return []; + } - - - + } static function activity_mapper($verb) { - if(strpos($verb,'/') === false) { + if (strpos($verb, '/') === false) { return $verb; } $acts = [ - 'http://activitystrea.ms/schema/1.0/post' => 'Create', - 'http://activitystrea.ms/schema/1.0/share' => 'Announce', - 'http://activitystrea.ms/schema/1.0/update' => 'Update', - 'http://activitystrea.ms/schema/1.0/like' => 'Like', - 'http://activitystrea.ms/schema/1.0/favorite' => 'Like', - 'http://purl.org/zot/activity/dislike' => 'Dislike', - 'http://activitystrea.ms/schema/1.0/tag' => 'Add', - 'http://activitystrea.ms/schema/1.0/follow' => 'Follow', - 'http://activitystrea.ms/schema/1.0/unfollow' => 'Unfollow', - 'http://purl.org/zot/activity/attendyes' => 'Accept', - 'http://purl.org/zot/activity/attendno' => 'Reject', - 'http://purl.org/zot/activity/attendmaybe' => 'TentativeAccept', - 'Invite' => 'Invite', - 'Delete' => 'Delete', - 'Undo' => 'Undo' + 'http://activitystrea.ms/schema/1.0/post' => 'Create', + 'http://activitystrea.ms/schema/1.0/share' => 'Announce', + 'http://activitystrea.ms/schema/1.0/update' => 'Update', + 'http://activitystrea.ms/schema/1.0/like' => 'Like', + 'http://activitystrea.ms/schema/1.0/favorite' => 'Like', + 'http://purl.org/zot/activity/dislike' => 'Dislike', + 'http://activitystrea.ms/schema/1.0/tag' => 'Add', + 'http://activitystrea.ms/schema/1.0/follow' => 'Follow', + 'http://activitystrea.ms/schema/1.0/unfollow' => 'Unfollow', + 'http://purl.org/zot/activity/attendyes' => 'Accept', + 'http://purl.org/zot/activity/attendno' => 'Reject', + 'http://purl.org/zot/activity/attendmaybe' => 'TentativeAccept', + 'Invite' => 'Invite', + 'Delete' => 'Delete', + 'Undo' => 'Undo' ]; - call_hooks('activity_mapper',$acts); + call_hooks('activity_mapper', $acts); - if(array_key_exists($verb,$acts) && $acts[$verb]) { + if (array_key_exists($verb, $acts) && $acts[$verb]) { return $acts[$verb]; } // Reactions will just map to normal activities - if(strpos($verb,ACTIVITY_REACT) !== false) + if (strpos($verb, ACTIVITY_REACT) !== false) return 'emojiReaction'; - if(strpos($verb,ACTIVITY_MOOD) !== false) + if (strpos($verb, ACTIVITY_MOOD) !== false) return 'Create'; - if(strpos($verb,ACTIVITY_FRIEND) !== false) + if (strpos($verb, ACTIVITY_FRIEND) !== false) return 'Create'; - if(strpos($verb,ACTIVITY_POKE) !== false) + if (strpos($verb, ACTIVITY_POKE) !== false) return 'Activity'; - // We should return false, however this will trigger an uncaught execption and crash + // We should return false, however this will trigger an uncaught execption and crash // the delivery system if encountered by the JSON-LDSignature library - + logger('Unmapped activity: ' . $verb); return 'Create'; - // return false; -} - - + // return false; + } static function activity_decode_mapper($verb) { $acts = [ - 'http://activitystrea.ms/schema/1.0/post' => 'Create', - 'http://activitystrea.ms/schema/1.0/share' => 'Announce', - 'http://activitystrea.ms/schema/1.0/update' => 'Update', - 'http://activitystrea.ms/schema/1.0/like' => 'Like', - 'http://activitystrea.ms/schema/1.0/favorite' => 'Like', - 'http://purl.org/zot/activity/dislike' => 'Dislike', - 'http://activitystrea.ms/schema/1.0/tag' => 'Add', - 'http://activitystrea.ms/schema/1.0/follow' => 'Follow', - 'http://activitystrea.ms/schema/1.0/unfollow' => 'Unfollow', - 'http://purl.org/zot/activity/attendyes' => 'Accept', - 'http://purl.org/zot/activity/attendno' => 'Reject', - 'http://purl.org/zot/activity/attendmaybe' => 'TentativeAccept', - 'Invite' => 'Invite', - 'Delete' => 'Delete', - 'Undo' => 'Undo' + 'http://activitystrea.ms/schema/1.0/post' => 'Create', + 'http://activitystrea.ms/schema/1.0/share' => 'Announce', + 'http://activitystrea.ms/schema/1.0/update' => 'Update', + 'http://activitystrea.ms/schema/1.0/like' => 'Like', + 'http://activitystrea.ms/schema/1.0/favorite' => 'Like', + 'http://purl.org/zot/activity/dislike' => 'Dislike', + 'http://activitystrea.ms/schema/1.0/tag' => 'Add', + 'http://activitystrea.ms/schema/1.0/follow' => 'Follow', + 'http://activitystrea.ms/schema/1.0/unfollow' => 'Unfollow', + 'http://purl.org/zot/activity/attendyes' => 'Accept', + 'http://purl.org/zot/activity/attendno' => 'Reject', + 'http://purl.org/zot/activity/attendmaybe' => 'TentativeAccept', + 'Invite' => 'Invite', + 'Delete' => 'Delete', + 'Undo' => 'Undo' ]; - call_hooks('activity_decode_mapper',$acts); + call_hooks('activity_decode_mapper', $acts); - foreach($acts as $k => $v) { - if($verb === $v) { + foreach ($acts as $k => $v) { + if ($verb === $v) { return $k; } } @@ -1175,33 +1235,33 @@ class Activity { static function activity_obj_decode_mapper($obj) { $objs = [ - 'http://activitystrea.ms/schema/1.0/note' => 'Note', - 'http://activitystrea.ms/schema/1.0/note' => 'Article', - 'http://activitystrea.ms/schema/1.0/comment' => 'Note', - 'http://activitystrea.ms/schema/1.0/person' => 'Person', - 'http://purl.org/zot/activity/profile' => 'Profile', - 'http://activitystrea.ms/schema/1.0/photo' => 'Image', - 'http://activitystrea.ms/schema/1.0/profile-photo' => 'Icon', - 'http://activitystrea.ms/schema/1.0/event' => 'Event', - 'http://purl.org/zot/activity/location' => 'Place', - 'http://purl.org/zot/activity/chessgame' => 'Game', - 'http://purl.org/zot/activity/tagterm' => 'zot:Tag', - 'http://purl.org/zot/activity/thing' => 'Object', - 'http://purl.org/zot/activity/file' => 'zot:File', - 'http://purl.org/zot/activity/mood' => 'zot:Mood', - 'Invite' => 'Invite', - 'Question' => 'Question', - 'Document' => 'Document', - 'Audio' => 'Audio', - 'Video' => 'Video', - 'Delete' => 'Delete', - 'Undo' => 'Undo' + 'http://activitystrea.ms/schema/1.0/note' => 'Note', + 'http://activitystrea.ms/schema/1.0/note' => 'Article', + 'http://activitystrea.ms/schema/1.0/comment' => 'Note', + 'http://activitystrea.ms/schema/1.0/person' => 'Person', + 'http://purl.org/zot/activity/profile' => 'Profile', + 'http://activitystrea.ms/schema/1.0/photo' => 'Image', + 'http://activitystrea.ms/schema/1.0/profile-photo' => 'Icon', + 'http://activitystrea.ms/schema/1.0/event' => 'Event', + 'http://purl.org/zot/activity/location' => 'Place', + 'http://purl.org/zot/activity/chessgame' => 'Game', + 'http://purl.org/zot/activity/tagterm' => 'zot:Tag', + 'http://purl.org/zot/activity/thing' => 'Object', + 'http://purl.org/zot/activity/file' => 'zot:File', + 'http://purl.org/zot/activity/mood' => 'zot:Mood', + 'Invite' => 'Invite', + 'Question' => 'Question', + 'Document' => 'Document', + 'Audio' => 'Audio', + 'Video' => 'Video', + 'Delete' => 'Delete', + 'Undo' => 'Undo' ]; - call_hooks('activity_obj_decode_mapper',$objs); + call_hooks('activity_obj_decode_mapper', $objs); - foreach($objs as $k => $v) { - if($obj === $v) { + foreach ($objs as $k => $v) { + if ($obj === $v) { return $k; } } @@ -1210,45 +1270,42 @@ class Activity { return 'Note'; } - - - static function activity_obj_mapper($obj) { $objs = [ - 'http://activitystrea.ms/schema/1.0/note' => 'Note', - 'http://activitystrea.ms/schema/1.0/comment' => 'Note', - 'http://activitystrea.ms/schema/1.0/person' => 'Person', - 'http://purl.org/zot/activity/profile' => 'Profile', - 'http://activitystrea.ms/schema/1.0/photo' => 'Image', - 'http://activitystrea.ms/schema/1.0/profile-photo' => 'Icon', - 'http://activitystrea.ms/schema/1.0/event' => 'Event', - 'http://purl.org/zot/activity/location' => 'Place', - 'http://purl.org/zot/activity/chessgame' => 'Game', - 'http://purl.org/zot/activity/tagterm' => 'zot:Tag', - 'http://purl.org/zot/activity/thing' => 'Object', - 'http://purl.org/zot/activity/file' => 'zot:File', - 'http://purl.org/zot/activity/mood' => 'zot:Mood', - 'Invite' => 'Invite', - 'Question' => 'Question', - 'Audio' => 'Audio', - 'Video' => 'Video', - 'Delete' => 'Delete', - 'Undo' => 'Undo' + 'http://activitystrea.ms/schema/1.0/note' => 'Note', + 'http://activitystrea.ms/schema/1.0/comment' => 'Note', + 'http://activitystrea.ms/schema/1.0/person' => 'Person', + 'http://purl.org/zot/activity/profile' => 'Profile', + 'http://activitystrea.ms/schema/1.0/photo' => 'Image', + 'http://activitystrea.ms/schema/1.0/profile-photo' => 'Icon', + 'http://activitystrea.ms/schema/1.0/event' => 'Event', + 'http://purl.org/zot/activity/location' => 'Place', + 'http://purl.org/zot/activity/chessgame' => 'Game', + 'http://purl.org/zot/activity/tagterm' => 'zot:Tag', + 'http://purl.org/zot/activity/thing' => 'Object', + 'http://purl.org/zot/activity/file' => 'zot:File', + 'http://purl.org/zot/activity/mood' => 'zot:Mood', + 'Invite' => 'Invite', + 'Question' => 'Question', + 'Audio' => 'Audio', + 'Video' => 'Video', + 'Delete' => 'Delete', + 'Undo' => 'Undo' ]; - call_hooks('activity_obj_mapper',$objs); + call_hooks('activity_obj_mapper', $objs); if ($obj === 'Answer') { return 'Note'; } - if (strpos($obj,'/') === false) { + if (strpos($obj, '/') === false) { return $obj; } - if(array_key_exists($obj,$objs)) { + if (array_key_exists($obj, $objs)) { return $objs[$obj]; } @@ -1259,108 +1316,104 @@ class Activity { } + static function follow($channel, $act) { - static function follow($channel,$act) { - - $contact = null; + $contact = null; $their_follow_id = null; /* - * - * if $act->type === 'Follow', actor is now following $channel - * if $act->type === 'Accept', actor has approved a follow request from $channel - * + * + * if $act->type === 'Follow', actor is now following $channel + * if $act->type === 'Accept', actor has approved a follow request from $channel + * */ $person_obj = $act->actor; - if($act->type === 'Follow') { - $their_follow_id = $act->id; + if ($act->type === 'Follow') { + $their_follow_id = $act->id; } - elseif($act->type === 'Accept') { - $my_follow_id = z_root() . '/follow/' . $contact['id']; - } - - if(is_array($person_obj)) { + + if (is_array($person_obj)) { // store their xchan and hubloc - self::actor_store($person_obj['id'],$person_obj); + self::actor_store($person_obj['id'], $person_obj); - // Find any existing abook record + // Find any existing abook record $r = q("select * from abook left join xchan on abook_xchan = xchan_hash where abook_xchan = '%s' and abook_channel = %d limit 1", dbesc($person_obj['id']), intval($channel['channel_id']) ); - if($r) { + if ($r) { $contact = $r[0]; } } - $x = \Zotlabs\Access\PermissionRoles::role_perms('social'); - $p = \Zotlabs\Access\Permissions::FilledPerms($x['perms_connect']); - $their_perms = \Zotlabs\Access\Permissions::serialise($p); + $x = PermissionRoles::role_perms('social'); + $p = Permissions::FilledPerms($x['perms_connect']); + $their_perms = Permissions::serialise($p); - if($contact && $contact['abook_id']) { + if ($contact && $contact['abook_id']) { - // A relationship of some form already exists on this site. + // A relationship of some form already exists on this site. - switch($act->type) { + switch ($act->type) { case 'Follow': // A second Follow request, but we haven't approved the first one - if($contact['abook_pending']) { + if ($contact['abook_pending']) { return; } // We've already approved them or followed them first // Send an Accept back to them - set_abconfig($channel['channel_id'],$person_obj['id'],'pubcrawl','their_follow_id', $their_follow_id); - Master::Summon([ 'Notifier', 'permissions_accept', $contact['abook_id'] ]); + set_abconfig($channel['channel_id'], $person_obj['id'], 'pubcrawl', 'their_follow_id', $their_follow_id); + Master::Summon(['Notifier', 'permissions_accept', $contact['abook_id']]); return; case 'Accept': // They accepted our Follow request - set default permissions - - set_abconfig($channel['channel_id'],$contact['abook_xchan'],'system','their_perms',$their_perms); + + set_abconfig($channel['channel_id'], $contact['abook_xchan'], 'system', 'their_perms', $their_perms); $abook_instance = $contact['abook_instance']; - - if(strpos($abook_instance,z_root()) === false) { - if($abook_instance) + + if (strpos($abook_instance, z_root()) === false) { + if ($abook_instance) $abook_instance .= ','; $abook_instance .= z_root(); - $r = q("update abook set abook_instance = '%s', abook_not_here = 0 + q("update abook set abook_instance = '%s', abook_not_here = 0 where abook_id = %d and abook_channel = %d", dbesc($abook_instance), intval($contact['abook_id']), intval($channel['channel_id']) ); } - + return; default: return; - + } } // No previous relationship exists. - if($act->type === 'Accept') { + if ($act->type === 'Accept') { // This should not happen unless we deleted the connection before it was accepted. return; } // From here on out we assume a Follow activity to somebody we have no existing relationship with - set_abconfig($channel['channel_id'],$person_obj['id'],'pubcrawl','their_follow_id', $their_follow_id); + set_abconfig($channel['channel_id'], $person_obj['id'], 'pubcrawl', 'their_follow_id', $their_follow_id); // The xchan should have been created by actor_store() above @@ -1368,17 +1421,17 @@ class Activity { dbesc($person_obj['id']) ); - if(! $r) { + if (!$r) { logger('xchan not found for ' . $person_obj['id']); return; } $ret = $r[0]; - $p = \Zotlabs\Access\Permissions::connect_perms($channel['channel_id']); - $my_perms = \Zotlabs\Access\Permissions::serialise($p['perms']); + $p = Permissions::connect_perms($channel['channel_id']); + $my_perms = Permissions::serialise($p['perms']); $automatic = $p['automatic']; - $closeness = get_pconfig($channel['channel_id'],'system','new_abook_closeness',80); + $closeness = get_pconfig($channel['channel_id'], 'system', 'new_abook_closeness', 80); $r = abook_store_lowlevel( [ @@ -1394,64 +1447,64 @@ class Activity { 'abook_instance' => z_root() ] ); - - if($my_perms) - set_abconfig($channel['channel_id'],$ret['xchan_hash'],'system','my_perms',$my_perms); - if($their_perms) - set_abconfig($channel['channel_id'],$ret['xchan_hash'],'system','their_perms',$their_perms); + if ($my_perms) + set_abconfig($channel['channel_id'], $ret['xchan_hash'], 'system', 'my_perms', $my_perms); + + if ($their_perms) + set_abconfig($channel['channel_id'], $ret['xchan_hash'], 'system', 'their_perms', $their_perms); - if($r) { + if ($r) { logger("New ActivityPub follower for {$channel['channel_name']}"); $new_connection = q("select * from abook left join xchan on abook_xchan = xchan_hash left join hubloc on hubloc_hash = xchan_hash where abook_channel = %d and abook_xchan = '%s' order by abook_created desc limit 1", intval($channel['channel_id']), dbesc($ret['xchan_hash']) ); - if($new_connection) { - \Zotlabs\Lib\Enotify::submit( + if ($new_connection) { + Enotify::submit( [ - 'type' => NOTIFY_INTRO, - 'from_xchan' => $ret['xchan_hash'], - 'to_xchan' => $channel['channel_hash'], - 'link' => z_root() . '/connedit/' . $new_connection[0]['abook_id'], + 'type' => NOTIFY_INTRO, + 'from_xchan' => $ret['xchan_hash'], + 'to_xchan' => $channel['channel_hash'], + 'link' => z_root() . '/connedit/' . $new_connection[0]['abook_id'], ] ); - if($my_perms && $automatic) { + if ($my_perms && $automatic) { // send an Accept for this Follow activity - Master::Summon([ 'Notifier', 'permissions_accept', $new_connection[0]['abook_id'] ]); + Master::Summon(['Notifier', 'permissions_accept', $new_connection[0]['abook_id']]); // Send back a Follow notification to them - Master::Summon([ 'Notifier', 'permissions_create', $new_connection[0]['abook_id'] ]); + Master::Summon(['Notifier', 'permissions_create', $new_connection[0]['abook_id']]); } - $clone = array(); - foreach($new_connection[0] as $k => $v) { - if(strpos($k,'abook_') === 0) { + $clone = []; + foreach ($new_connection[0] as $k => $v) { + if (strpos($k, 'abook_') === 0) { $clone[$k] = $v; } } unset($clone['abook_id']); unset($clone['abook_account']); unset($clone['abook_channel']); - - $abconfig = load_abconfig($channel['channel_id'],$clone['abook_xchan']); - if($abconfig) + $abconfig = load_abconfig($channel['channel_id'], $clone['abook_xchan']); + + if ($abconfig) $clone['abconfig'] = $abconfig; - Libsync::build_sync_packet($channel['channel_id'], [ 'abook' => array($clone) ] ); + Libsync::build_sync_packet($channel['channel_id'], ['abook' => [$clone]]); } } /* If there is a default group for this channel and permissions are automatic, add this member to it */ - if($channel['channel_default_group'] && $automatic) { - $g = Group::rec_byhash($channel['channel_id'],$channel['channel_default_group']); - if($g) - Group::member_add($channel['channel_id'],'',$ret['xchan_hash'],$g['id']); + if ($channel['channel_default_group'] && $automatic) { + $g = Group::rec_byhash($channel['channel_id'], $channel['channel_default_group']); + if ($g) + Group::member_add($channel['channel_id'], '', $ret['xchan_hash'], $g['id']); } @@ -1459,8 +1512,7 @@ class Activity { } - - static function unfollow($channel,$act) { + static function unfollow($channel, $act) { $contact = null; @@ -1470,46 +1522,43 @@ class Activity { $person_obj = $act->actor; - if(is_array($person_obj)) { + if (is_array($person_obj)) { $r = q("select * from abook left join xchan on abook_xchan = xchan_hash where abook_xchan = '%s' and abook_channel = %d limit 1", dbesc($person_obj['id']), intval($channel['channel_id']) ); - if($r) { + if ($r) { // remove all permissions they provided - del_abconfig($channel['channel_id'],$r[0]['xchan_hash'],'system','their_perms',EMPTY_STR); + del_abconfig($channel['channel_id'], $r[0]['xchan_hash'], 'system', 'their_perms'); } } return; } + static function actor_store($url, $person_obj) { - - - static function actor_store($url,$person_obj) { - - if(! is_array($person_obj)) + if (!is_array($person_obj)) return; $inbox = $person_obj['inbox']; // invalid identity - if (! $inbox || strpos($inbox,z_root()) !== false) { + if (!$inbox || strpos($inbox, z_root()) !== false) { return; } $name = $person_obj['name']; - if(! $name) + if (!$name) $name = $person_obj['preferredUsername']; - if(! $name) + if (!$name) $name = t('Unknown'); - if($person_obj['icon']) { - if(is_array($person_obj['icon'])) { - if(array_key_exists('url',$person_obj['icon'])) + if ($person_obj['icon']) { + if (is_array($person_obj['icon'])) { + if (array_key_exists('url', $person_obj['icon'])) $icon = $person_obj['icon']['url']; else $icon = $person_obj['icon'][0]['url']; @@ -1518,12 +1567,12 @@ class Activity { $icon = $person_obj['icon']; } - $links = false; + $links = false; $profile = false; if (is_array($person_obj['url'])) { - if (! array_key_exists(0,$person_obj['url'])) { - $links = [ $person_obj['url'] ]; + if (!array_key_exists(0, $person_obj['url'])) { + $links = [$person_obj['url']]; } else { $links = $person_obj['url']; @@ -1532,11 +1581,11 @@ class Activity { if ($links) { foreach ($links as $link) { - if (array_key_exists('mediaType',$link) && $link['mediaType'] === 'text/html') { + if (array_key_exists('mediaType', $link) && $link['mediaType'] === 'text/html') { $profile = $link['href']; } } - if (! $profile) { + if (!$profile) { $profile = $links[0]['href']; } } @@ -1544,29 +1593,29 @@ class Activity { $profile = $person_obj['url']; } - if (! $profile) { + if (!$profile) { $profile = $url; } $collections = []; - if($inbox) { + if ($inbox) { $collections['inbox'] = $inbox; - if($person_obj['outbox']) + if ($person_obj['outbox']) $collections['outbox'] = $person_obj['outbox']; - if($person_obj['followers']) + if ($person_obj['followers']) $collections['followers'] = $person_obj['followers']; - if($person_obj['following']) + if ($person_obj['following']) $collections['following'] = $person_obj['following']; - if($person_obj['endpoints'] && $person_obj['endpoints']['sharedInbox']) + if ($person_obj['endpoints'] && $person_obj['endpoints']['sharedInbox']) $collections['sharedInbox'] = $person_obj['endpoints']['sharedInbox']; } - if(array_key_exists('publicKey',$person_obj) && array_key_exists('publicKeyPem',$person_obj['publicKey'])) { - if($person_obj['id'] === $person_obj['publicKey']['owner']) { + if (array_key_exists('publicKey', $person_obj) && array_key_exists('publicKeyPem', $person_obj['publicKey'])) { + if ($person_obj['id'] === $person_obj['publicKey']['owner']) { $pubkey = $person_obj['publicKey']['publicKeyPem']; - if(strstr($pubkey,'RSA ')) { - $pubkey = rsatopem($pubkey); + if (strstr($pubkey, 'RSA ')) { + $pubkey = Keyutils::rsaToPem($pubkey); } } } @@ -1574,33 +1623,33 @@ class Activity { $r = q("select * from xchan where xchan_hash = '%s' limit 1", dbesc($url) ); - if(! $r) { + if (!$r) { // create a new record - $r = xchan_store_lowlevel( + xchan_store_lowlevel( [ - 'xchan_hash' => $url, - 'xchan_guid' => $url, - 'xchan_pubkey' => $pubkey, - 'xchan_addr' => '', - 'xchan_url' => $profile, - 'xchan_name' => $name, - 'xchan_name_date' => datetime_convert(), - 'xchan_network' => 'activitypub' + 'xchan_hash' => $url, + 'xchan_guid' => $url, + 'xchan_pubkey' => $pubkey, + 'xchan_addr' => '', + 'xchan_url' => $profile, + 'xchan_name' => $name, + 'xchan_name_date' => datetime_convert(), + 'xchan_network' => 'activitypub' ] ); } else { // Record exists. Cache existing records for one week at most - // then refetch to catch updated profile photos, names, etc. + // then refetch to catch updated profile photos, names, etc. - $d = datetime_convert('UTC','UTC','now - 1 week'); - if($r[0]['xchan_name_date'] > $d) + $d = datetime_convert('UTC', 'UTC', 'now - 1 week'); + if ($r[0]['xchan_name_date'] > $d) return; // update existing record - $r = q("update xchan set xchan_name = '%s', xchan_pubkey = '%s', xchan_network = '%s', xchan_name_date = '%s' where xchan_hash = '%s'", + q("update xchan set xchan_name = '%s', xchan_pubkey = '%s', xchan_network = '%s', xchan_name_date = '%s' where xchan_hash = '%s'", dbesc($name), dbesc($pubkey), dbesc('activitypub'), @@ -1609,29 +1658,28 @@ class Activity { ); } - if($collections) { - set_xconfig($url,'activitypub','collections',$collections); + if ($collections) { + set_xconfig($url, 'activitypub', 'collections', $collections); } $r = q("select * from hubloc where hubloc_hash = '%s' limit 1", dbesc($url) ); - $m = parse_url($url); - if($m) { + if ($m) { $hostname = $m['host']; - $baseurl = $m['scheme'] . '://' . $m['host'] . (($m['port']) ? ':' . $m['port'] : ''); + $site_url = $m['scheme'] . '://' . $m['host'] . (($m['port']) ? ':' . $m['port'] : ''); } - if(! $r) { - $r = hubloc_store_lowlevel( + if (!$r) { + hubloc_store_lowlevel( [ 'hubloc_guid' => $url, 'hubloc_hash' => $url, 'hubloc_addr' => '', 'hubloc_network' => 'activitypub', - 'hubloc_url' => $baseurl, + 'hubloc_url' => $site_url, 'hubloc_host' => $hostname, 'hubloc_callback' => $inbox, 'hubloc_updated' => datetime_convert(), @@ -1641,12 +1689,19 @@ class Activity { ); } - if(! $icon) + q("UPDATE site SET site_update = '%s', site_dead = 0 WHERE site_url = '%s' AND site_update < %s - INTERVAL %s", + dbesc(datetime_convert()), + dbesc($site_url), + db_utcnow(), + db_quoteinterval('1 DAY') + ); + + if (!$icon) $icon = z_root() . '/' . get_default_profile_photo(300); - $photos = import_xchan_photo($icon,$url); - $r = q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' where xchan_hash = '%s'", - dbescdate(datetime_convert('UTC','UTC',$photos[5])), + $photos = import_xchan_photo($icon, $url); + q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' where xchan_hash = '%s'", + dbescdate(datetime_convert('UTC', 'UTC', $photos[5])), dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), @@ -1656,54 +1711,51 @@ class Activity { } + static function create_action($channel, $observer_hash, $act) { - static function create_action($channel,$observer_hash,$act) { - - if(in_array($act->obj['type'], [ 'Note', 'Article', 'Video' ])) { - self::create_note($channel,$observer_hash,$act); + if (in_array($act->obj['type'], ['Note', 'Article', 'Video'])) { + self::create_note($channel, $observer_hash, $act); } } - static function announce_action($channel,$observer_hash,$act) { + static function announce_action($channel, $observer_hash, $act) { - if(in_array($act->type, [ 'Announce' ])) { - self::announce_note($channel,$observer_hash,$act); + if (in_array($act->type, ['Announce'])) { + self::announce_note($channel, $observer_hash, $act); } } + static function like_action($channel, $observer_hash, $act) { - static function like_action($channel,$observer_hash,$act) { - - if(in_array($act->obj['type'], [ 'Note', 'Article', 'Video' ])) { - self::like_note($channel,$observer_hash,$act); + if (in_array($act->obj['type'], ['Note', 'Article', 'Video'])) { + self::like_note($channel, $observer_hash, $act); } } // sort function width decreasing - - static function vid_sort($a,$b) { - if($a['width'] === $b['width']) + static function vid_sort($a, $b) { + if ($a['width'] === $b['width']) return 0; return (($a['width'] > $b['width']) ? -1 : 1); } - static function create_note($channel,$observer_hash,$act) { + static function create_note($channel, $observer_hash, $act) { $s = []; // Mastodon only allows visibility in public timelines if the public inbox is listed in the 'to' field. // They are hidden in the public timeline if the public inbox is listed in the 'cc' field. // This is not part of the activitypub protocol - we might change this to show all public posts in pubstream at some point. - $pubstream = ((is_array($act->obj) && array_key_exists('to', $act->obj) && in_array(ACTIVITY_PUBLIC_INBOX, $act->obj['to'])) ? true : false); + $pubstream = ((is_array($act->obj) && array_key_exists('to', $act->obj) && in_array(ACTIVITY_PUBLIC_INBOX, $act->obj['to'])) ? true : false); $is_sys_channel = is_sys_channel($channel['channel_id']); - $parent = ((array_key_exists('inReplyTo',$act->obj)) ? urldecode($act->obj['inReplyTo']) : ''); - if($parent) { + $parent = ((array_key_exists('inReplyTo', $act->obj)) ? urldecode($act->obj['inReplyTo']) : ''); + if ($parent) { $r = q("select * from item where uid = %d and ( mid = '%s' or mid = '%s' ) limit 1", intval($channel['channel_id']), @@ -1711,39 +1763,39 @@ class Activity { dbesc(basename($parent)) ); - if(! $r) { + if (!$r) { logger('parent not found.'); return; } - if($r[0]['owner_xchan'] === $channel['channel_hash']) { - if(! perm_is_allowed($channel['channel_id'],$observer_hash,'send_stream') && ! ($is_sys_channel && $pubstream)) { + if ($r[0]['owner_xchan'] === $channel['channel_hash']) { + if (!perm_is_allowed($channel['channel_id'], $observer_hash, 'send_stream') && !($is_sys_channel && $pubstream)) { logger('no comment permission.'); return; } } - $s['parent_mid'] = $r[0]['mid']; - $s['owner_xchan'] = $r[0]['owner_xchan']; + $s['parent_mid'] = $r[0]['mid']; + $s['owner_xchan'] = $r[0]['owner_xchan']; $s['author_xchan'] = $observer_hash; } else { - if(! perm_is_allowed($channel['channel_id'],$observer_hash,'send_stream') && ! ($is_sys_channel && $pubstream)) { + if (!perm_is_allowed($channel['channel_id'], $observer_hash, 'send_stream') && !($is_sys_channel && $pubstream)) { logger('no permission'); return; } $s['owner_xchan'] = $s['author_xchan'] = $observer_hash; } - + $abook = q("select * from abook where abook_xchan = '%s' and abook_channel = %d limit 1", dbesc($observer_hash), intval($channel['channel_id']) ); - + $content = self::get_content($act->obj); - if(! $content) { + if (!$content) { logger('no content'); return; } @@ -1756,105 +1808,105 @@ class Activity { $s['author_xchan'] = self::find_best_identity($s['author_xchan']); $s['owner_xchan'] = self::find_best_identity($s['owner_xchan']); - if(!$s['author_xchan']) { + if (!$s['author_xchan']) { logger('No author: ' . print_r($act, true)); } - if(!$s['owner_xchan']) { + if (!$s['owner_xchan']) { logger('No owner: ' . print_r($act, true)); } - if(!$s['author_xchan'] || !$s['owner_xchan']) + if (!$s['author_xchan'] || !$s['owner_xchan']) return; - $s['mid'] = urldecode($act->obj['id']); - $s['uuid'] = $act->obj['diaspora:guid']; + $s['mid'] = urldecode($act->obj['id']); + $s['uuid'] = $act->obj['diaspora:guid']; $s['plink'] = urldecode($act->obj['id']); - if($act->data['published']) { - $s['created'] = datetime_convert('UTC','UTC',$act->data['published']); + if ($act->data['published']) { + $s['created'] = datetime_convert('UTC', 'UTC', $act->data['published']); } - elseif($act->obj['published']) { - $s['created'] = datetime_convert('UTC','UTC',$act->obj['published']); + elseif ($act->obj['published']) { + $s['created'] = datetime_convert('UTC', 'UTC', $act->obj['published']); } - if($act->data['updated']) { - $s['edited'] = datetime_convert('UTC','UTC',$act->data['updated']); + if ($act->data['updated']) { + $s['edited'] = datetime_convert('UTC', 'UTC', $act->data['updated']); } - elseif($act->obj['updated']) { - $s['edited'] = datetime_convert('UTC','UTC',$act->obj['updated']); + elseif ($act->obj['updated']) { + $s['edited'] = datetime_convert('UTC', 'UTC', $act->obj['updated']); } if ($act->data['expires']) { - $s['expires'] = datetime_convert('UTC','UTC',$act->data['expires']); + $s['expires'] = datetime_convert('UTC', 'UTC', $act->data['expires']); } elseif ($act->obj['expires']) { - $s['expires'] = datetime_convert('UTC','UTC',$act->obj['expires']); + $s['expires'] = datetime_convert('UTC', 'UTC', $act->obj['expires']); } - if(! $s['created']) + if (!$s['created']) $s['created'] = datetime_convert(); - if(! $s['edited']) + if (!$s['edited']) $s['edited'] = $s['created']; - if(! $s['parent_mid']) + if (!$s['parent_mid']) $s['parent_mid'] = $s['mid']; - - $s['title'] = self::bb_content($content,'name'); - $s['summary'] = self::bb_content($content,'summary'); - $s['body'] = self::bb_content($content,'content'); + + $s['title'] = self::bb_content($content, 'name'); + $s['summary'] = self::bb_content($content, 'summary'); + $s['body'] = self::bb_content($content, 'content'); $s['verb'] = ACTIVITY_POST; $s['obj_type'] = ACTIVITY_OBJ_NOTE; $generator = $act->get_property_obj('generator'); - if(! $generator) - $generator = $act->get_property_obj('generator',$act->obj); + if (!$generator) + $generator = $act->get_property_obj('generator', $act->obj); - if($generator && array_key_exists('type',$generator) - && in_array($generator['type'], [ 'Application','Service' ] ) && array_key_exists('name',$generator)) { + if ($generator && array_key_exists('type', $generator) + && in_array($generator['type'], ['Application', 'Service']) && array_key_exists('name', $generator)) { $s['app'] = escape_tags($generator['name']); } - if($channel['channel_system']) { - if(! \Zotlabs\Lib\MessageFilter::evaluate($s,get_config('system','pubstream_incl'),get_config('system','pubstream_excl'))) { + if ($channel['channel_system']) { + if (!MessageFilter::evaluate($s, get_config('system', 'pubstream_incl'), get_config('system', 'pubstream_excl'))) { logger('post is filtered'); return; } } - if($abook) { - if(! post_is_importable($s,$abook[0])) { + if ($abook) { + if (!post_is_importable($s, $abook[0])) { logger('post is filtered'); return; } } - if($act->obj['conversation']) { - set_iconfig($s,'ostatus','conversation',$act->obj['conversation'],1); + if ($act->obj['conversation']) { + set_iconfig($s, 'ostatus', 'conversation', $act->obj['conversation'], 1); } $a = self::decode_taxonomy($act->obj); - if($a) { + if ($a) { $s['term'] = $a; } $a = self::decode_attachment($act->obj); - if($a) { + if ($a) { $s['attach'] = $a; } - if($act->obj['type'] === 'Note' && $s['attach']) { - $s['body'] .= self::bb_attach($s['attach'],$s['body']); + if ($act->obj['type'] === 'Note' && $s['attach']) { + $s['body'] .= self::bb_attach($s['attach'], $s['body']); } // we will need a hook here to extract magnet links e.g. peertube // right now just link to the largest mp4 we find that will fit in our // standard content region - if($act->obj['type'] === 'Video') { + if ($act->obj['type'] === 'Video') { $vtypes = [ 'video/mp4', @@ -1863,20 +1915,20 @@ class Activity { ]; $mps = []; - if(array_key_exists('url',$act->obj) && is_array($act->obj['url'])) { - foreach($act->obj['url'] as $vurl) { - if(in_array($vurl['mimeType'], $vtypes)) { - if(! array_key_exists('width',$vurl)) { + if (array_key_exists('url', $act->obj) && is_array($act->obj['url'])) { + foreach ($act->obj['url'] as $vurl) { + if (in_array($vurl['mimeType'], $vtypes)) { + if (!array_key_exists('width', $vurl)) { $vurl['width'] = 0; } $mps[] = $vurl; } } } - if($mps) { - usort($mps,[ __CLASS__, 'vid_sort' ]); - foreach($mps as $m) { - if(intval($m['width']) < 500) { + if ($mps) { + usort($mps, [__CLASS__, 'vid_sort']); + foreach ($mps as $m) { + if (intval($m['width']) < 500) { $s['body'] .= "\n\n" . '[video]' . $m['href'] . '[/video]'; break; } @@ -1884,17 +1936,17 @@ class Activity { } } - if($act->recips && (! in_array(ACTIVITY_PUBLIC_INBOX,$act->recips))) + if ($act->recips && (!in_array(ACTIVITY_PUBLIC_INBOX, $act->recips))) $s['item_private'] = 1; - if (array_key_exists('directMessage',$act->obj) && intval($act->obj['directMessage'])) { + if (array_key_exists('directMessage', $act->obj) && intval($act->obj['directMessage'])) { $s['item_private'] = 2; } - set_iconfig($s,'activitypub','recips',$act->raw_recips); - if($parent) { - set_iconfig($s,'activitypub','rawmsg',$act->raw,1); + set_iconfig($s, 'activitypub', 'recips', $act->raw_recips); + if ($parent) { + set_iconfig($s, 'activitypub', 'rawmsg', $act->raw, 1); } $x = null; @@ -1903,8 +1955,8 @@ class Activity { dbesc($s['mid']), intval($s['uid']) ); - if($r) { - if($s['edited'] > $r[0]['edited']) { + if ($r) { + if ($s['edited'] > $r[0]['edited']) { $x = item_store_update($s); } else { @@ -1915,20 +1967,20 @@ class Activity { $x = item_store($s); } - if(is_array($x) && $x['item_id']) { - if($parent) { - if($s['owner_xchan'] === $channel['channel_hash']) { + if (is_array($x) && $x['item_id']) { + if ($parent) { + if ($s['owner_xchan'] === $channel['channel_hash']) { // We are the owner of this conversation, so send all received comments back downstream - Master::Summon(array('Notifier','comment-import',$x['item_id'])); + Master::Summon(['Notifier', 'comment-import', $x['item_id']]); } $r = q("select * from item where id = %d limit 1", intval($x['item_id']) ); - if($r) { - send_status_notifications($x['item_id'],$r[0]); + if ($r) { + send_status_notifications($x['item_id'], $r[0]); } } - sync_an_item($channel['channel_id'],$x['item_id']); + sync_an_item($channel['channel_id'], $x['item_id']); } } @@ -1940,26 +1992,24 @@ class Activity { dbesc($id) ); - if($x) { - return sprintf('@[zrl=%s]%s[/zrl]',$x[0]['xchan_url'],$x[0]['xchan_name']); + if ($x) { + return sprintf('@[zrl=%s]%s[/zrl]', $x[0]['xchan_url'], $x[0]['xchan_name']); } return '@{' . $id . '}'; } - - - static function update_poll($item,$post) { - $multi = false; - $mid = $post['mid']; + static function update_poll($item, $post) { + $multi = false; + $mid = $post['mid']; $content = $post['title']; - - if (! $item) { + + if (!$item) { return false; } - $o = json_decode($item['obj'],true); - if ($o && array_key_exists('anyOf',$o)) { + $o = json_decode($item['obj'], true); + if ($o && array_key_exists('anyOf', $o)) { $multi = true; } @@ -1969,7 +2019,7 @@ class Activity { ); // prevent any duplicate votes by same author for oneOf and duplicate votes with same author and same answer for anyOf - + if ($r) { if ($multi) { foreach ($r as $rv) { @@ -1986,103 +2036,101 @@ class Activity { } } } - + $answer_found = false; - $found = false; + $found = false; if ($multi) { - for ($c = 0; $c < count($o['anyOf']); $c ++) { + for ($c = 0; $c < count($o['anyOf']); $c++) { if ($o['anyOf'][$c]['name'] === $content) { $answer_found = true; if (is_array($o['anyOf'][$c]['replies'])) { - foreach($o['anyOf'][$c]['replies'] as $reply) { - if(is_array($reply) && array_key_exists('id',$reply) && $reply['id'] === $mid) { + foreach ($o['anyOf'][$c]['replies'] as $reply) { + if (is_array($reply) && array_key_exists('id', $reply) && $reply['id'] === $mid) { $found = true; } } } - if (! $found) { - $o['anyOf'][$c]['replies']['totalItems'] ++; - $o['anyOf'][$c]['replies']['items'][] = [ 'id' => $mid, 'type' => 'Note' ]; + if (!$found) { + $o['anyOf'][$c]['replies']['totalItems']++; + $o['anyOf'][$c]['replies']['items'][] = ['id' => $mid, 'type' => 'Note']; } } } } else { - for ($c = 0; $c < count($o['oneOf']); $c ++) { + for ($c = 0; $c < count($o['oneOf']); $c++) { if ($o['oneOf'][$c]['name'] === $content) { $answer_found = true; if (is_array($o['oneOf'][$c]['replies'])) { - foreach($o['oneOf'][$c]['replies'] as $reply) { - if(is_array($reply) && array_key_exists('id',$reply) && $reply['id'] === $mid) { + foreach ($o['oneOf'][$c]['replies'] as $reply) { + if (is_array($reply) && array_key_exists('id', $reply) && $reply['id'] === $mid) { $found = true; } } } - if (! $found) { - $o['oneOf'][$c]['replies']['totalItems'] ++; - $o['oneOf'][$c]['replies']['items'][] = [ 'id' => $mid, 'type' => 'Note' ]; + if (!$found) { + $o['oneOf'][$c]['replies']['totalItems']++; + $o['oneOf'][$c]['replies']['items'][] = ['id' => $mid, 'type' => 'Note']; } } } } - logger('updated_poll: ' . print_r($o,true),LOGGER_DATA); - if ($answer_found && ! $found) { - $x = q("update item set obj = '%s', edited = '%s' where id = %d", + logger('updated_poll: ' . print_r($o, true), LOGGER_DATA); + if ($answer_found && !$found) { + q("update item set obj = '%s', edited = '%s' where id = %d", dbesc(json_encode($o)), dbesc(datetime_convert()), intval($item['id']) ); - Master::Summon( [ 'Notifier', 'wall-new', $item['id'] ] ); + Master::Summon(['Notifier', 'wall-new', $item['id']]); return true; } return false; } - - static function decode_note($act) { $response_activity = false; $s = []; - if(is_array($act->obj)) { + if (is_array($act->obj)) { $content = self::get_content($act->obj); } - + $s['owner_xchan'] = $act->actor['id']; $s['author_xchan'] = $act->actor['id']; // ensure we store the original actor - self::actor_store($act->actor['id'],$act->actor); + self::actor_store($act->actor['id'], $act->actor); $s['mid'] = $act->obj['id']; - $s['uuid'] = $act->obj['diaspora:guid']; + $s['uuid'] = $act->obj['diaspora:guid']; $s['parent_mid'] = $act->parent_id; - if($act->data['published']) { - $s['created'] = datetime_convert('UTC','UTC',$act->data['published']); + if ($act->data['published']) { + $s['created'] = datetime_convert('UTC', 'UTC', $act->data['published']); } - elseif($act->obj['published']) { - $s['created'] = datetime_convert('UTC','UTC',$act->obj['published']); + elseif ($act->obj['published']) { + $s['created'] = datetime_convert('UTC', 'UTC', $act->obj['published']); } - if($act->data['updated']) { - $s['edited'] = datetime_convert('UTC','UTC',$act->data['updated']); + if ($act->data['updated']) { + $s['edited'] = datetime_convert('UTC', 'UTC', $act->data['updated']); } - elseif($act->obj['updated']) { - $s['edited'] = datetime_convert('UTC','UTC',$act->obj['updated']); + elseif ($act->obj['updated']) { + $s['edited'] = datetime_convert('UTC', 'UTC', $act->obj['updated']); } if ($act->data['expires']) { - $s['expires'] = datetime_convert('UTC','UTC',$act->data['expires']); + $s['expires'] = datetime_convert('UTC', 'UTC', $act->data['expires']); } elseif ($act->obj['expires']) { - $s['expires'] = datetime_convert('UTC','UTC',$act->obj['expires']); + $s['expires'] = datetime_convert('UTC', 'UTC', $act->obj['expires']); } - if(ActivityStreams::is_response_activity($act->type)) { + if (ActivityStreams::is_response_activity($act->type)) { $response_activity = true; @@ -2092,85 +2140,86 @@ class Activity { // over-ride the object timestamp with the activity - if($act->data['published']) { - $s['created'] = datetime_convert('UTC','UTC',$act->data['published']); + if ($act->data['published']) { + $s['created'] = datetime_convert('UTC', 'UTC', $act->data['published']); } - if($act->data['updated']) { - $s['edited'] = datetime_convert('UTC','UTC',$act->data['updated']); + if ($act->data['updated']) { + $s['edited'] = datetime_convert('UTC', 'UTC', $act->data['updated']); } $obj_actor = ((isset($act->obj['actor'])) ? $act->obj['actor'] : $act->get_actor('attributedTo', $act->obj)); // ensure we store the original actor - self::actor_store($obj_actor['id'],$obj_actor); + + self::actor_store($obj_actor['id'], $obj_actor); $mention = self::get_actor_bbmention($obj_actor['id']); - if($act->type === 'Like') { - $content['content'] = sprintf( t('Likes %1$s\'s %2$s'),$mention,$act->obj['type']) . "\n\n" . $content['content']; + if ($act->type === 'Like') { + $content['content'] = sprintf(t('Likes %1$s\'s %2$s'), $mention, $act->obj['type']) . "\n\n" . $content['content']; } - if($act->type === 'Dislike') { - $content['content'] = sprintf( t('Doesn\'t like %1$s\'s %2$s'),$mention,$act->obj['type']) . "\n\n" . $content['content']; + if ($act->type === 'Dislike') { + $content['content'] = sprintf(t('Doesn\'t like %1$s\'s %2$s'), $mention, $act->obj['type']) . "\n\n" . $content['content']; } // handle event RSVPs - if (($act->obj['type'] === 'Event') || ($act->obj['type'] === 'Invite' && array_path_exists('object/type',$act->obj) && $act->obj['object']['type'] === 'Event')) { + if (($act->obj['type'] === 'Event') || ($act->obj['type'] === 'Invite' && array_path_exists('object/type', $act->obj) && $act->obj['object']['type'] === 'Event')) { if ($act->type === 'Accept') { - $content['content'] = sprintf( t('Will attend %s\'s event'),$mention) . EOL . EOL . $content['content']; + $content['content'] = sprintf(t('Will attend %s\'s event'), $mention) . EOL . EOL . $content['content']; } if ($act->type === 'Reject') { - $content['content'] = sprintf( t('Will not attend %s\'s event'),$mention) . EOL . EOL . $content['content']; + $content['content'] = sprintf(t('Will not attend %s\'s event'), $mention) . EOL . EOL . $content['content']; } if ($act->type === 'TentativeAccept') { - $content['content'] = sprintf( t('May attend %s\'s event'),$mention) . EOL . EOL . $content['content']; + $content['content'] = sprintf(t('May attend %s\'s event'), $mention) . EOL . EOL . $content['content']; } if ($act->type === 'TentativeReject') { - $content['content'] = sprintf( t('May not attend %s\'s event'),$mention) . EOL . EOL . $content['content']; + $content['content'] = sprintf(t('May not attend %s\'s event'), $mention) . EOL . EOL . $content['content']; } } - if($act->type === 'Announce') { - $content['content'] = sprintf( t('🔁 Repeated %1$s\'s %2$s'), $mention, $act->obj['type']); + if ($act->type === 'Announce') { + $content['content'] = sprintf(t('🔁 Repeated %1$s\'s %2$s'), $mention, $act->obj['type']); } if ($act->type === 'emojiReaction') { $content['content'] = (($act->tgt && $act->tgt['type'] === 'Image') ? '[img=32x32]' . $act->tgt['url'] . '[/img]' : '&#x' . $act->tgt['name'] . ';'); - } + } } - if(! $s['created']) + if (!$s['created']) $s['created'] = datetime_convert(); - if(! $s['edited']) + if (!$s['edited']) $s['edited'] = $s['created']; - $s['title'] = (($response_activity) ? EMPTY_STR : self::bb_content($content,'name')); - $s['summary'] = self::bb_content($content,'summary'); - $s['body'] = ((self::bb_content($content,'bbcode') && (! $response_activity)) ? self::bb_content($content,'bbcode') : self::bb_content($content,'content')); + $s['title'] = (($response_activity) ? EMPTY_STR : self::bb_content($content, 'name')); + $s['summary'] = self::bb_content($content, 'summary'); + $s['body'] = ((self::bb_content($content, 'bbcode') && (!$response_activity)) ? self::bb_content($content, 'bbcode') : self::bb_content($content, 'content')); - $s['verb'] = self::activity_decode_mapper($act->type); + $s['verb'] = self::activity_decode_mapper($act->type); // Mastodon does not provide update timestamps when updating poll tallies which means race conditions may occur here. if ($act->type === 'Update' && $act->obj['type'] === 'Question' && $s['edited'] === $s['created']) { $s['edited'] = datetime_convert(); } - if(in_array($act->type, [ 'Delete', 'Undo', 'Tombstone' ]) || ($act->type === 'Create' && $act->obj['type'] === 'Tombstone')) { + if (in_array($act->type, ['Delete', 'Undo', 'Tombstone']) || ($act->type === 'Create' && $act->obj['type'] === 'Tombstone')) { $s['item_deleted'] = 1; } $s['obj_type'] = self::activity_obj_decode_mapper($act->obj['type']); - if($s['obj_type'] === ACTIVITY_OBJ_NOTE && $s['mid'] !== $s['parent_mid']) { + if ($s['obj_type'] === ACTIVITY_OBJ_NOTE && $s['mid'] !== $s['parent_mid']) { $s['obj_type'] = ACTIVITY_OBJ_COMMENT; } $eventptr = null; - if ($act->obj['type'] === 'Invite' && array_path_exists('object/type',$act->obj) && $act->obj['object']['type'] === 'Event') { + if ($act->obj['type'] === 'Invite' && array_path_exists('object/type', $act->obj) && $act->obj['object']['type'] === 'Event') { $eventptr = $act->obj['object']; $s['mid'] = $s['parent_mid'] = $act->obj['id']; } - - if($act->obj['type'] === 'Event') { + + if ($act->obj['type'] === 'Event') { if ($act->type === 'Invite') { $s['mid'] = $s['parent_mid'] = $act->id; } @@ -2179,52 +2228,52 @@ class Activity { if ($eventptr) { - $s['obj'] = []; - $s['obj']['asld'] = $eventptr; - $s['obj']['type'] = ACTIVITY_OBJ_EVENT; - $s['obj']['id'] = $eventptr['id']; + $s['obj'] = []; + $s['obj']['asld'] = $eventptr; + $s['obj']['type'] = ACTIVITY_OBJ_EVENT; + $s['obj']['id'] = $eventptr['id']; $s['obj']['title'] = $eventptr['name']; - if(strpos($act->obj['startTime'],'Z')) + if (strpos($act->obj['startTime'], 'Z')) $s['obj']['adjust'] = true; else $s['obj']['adjust'] = false; - $s['obj']['dtstart'] = datetime_convert('UTC','UTC',$eventptr['startTime']); - if($act->obj['endTime']) - $s['obj']['dtend'] = datetime_convert('UTC','UTC',$eventptr['endTime']); + $s['obj']['dtstart'] = datetime_convert('UTC', 'UTC', $eventptr['startTime']); + if ($act->obj['endTime']) + $s['obj']['dtend'] = datetime_convert('UTC', 'UTC', $eventptr['endTime']); else $s['obj']['nofinish'] = true; $s['obj']['description'] = $eventptr['content']; - if(array_path_exists('location/content',$eventptr)) + if (array_path_exists('location/content', $eventptr)) $s['obj']['location'] = $eventptr['location']['content']; } else { - $s['obj'] = $act->obj; + $s['obj'] = $act->obj; } $generator = $act->get_property_obj('generator'); - if((! $generator) && (! $response_activity)) { - $generator = $act->get_property_obj('generator',$act->obj); + if ((!$generator) && (!$response_activity)) { + $generator = $act->get_property_obj('generator', $act->obj); } - if($generator && array_key_exists('type',$generator) - && in_array($generator['type'], [ 'Application', 'Service' ] ) && array_key_exists('name',$generator)) { + if ($generator && array_key_exists('type', $generator) + && in_array($generator['type'], ['Application', 'Service']) && array_key_exists('name', $generator)) { $s['app'] = escape_tags($generator['name']); } - if(! $response_activity) { + if (!$response_activity) { $a = self::decode_taxonomy($act->obj); - if($a) { + if ($a) { $s['term'] = $a; - foreach($a as $b) { - if($b['ttype'] === TERM_EMOJI) { - $s['title'] = str_replace($b['term'],'[img=16x16]' . $b['url'] . '[/img]',$s['title']); - $s['summary'] = str_replace($b['term'],'[img=16x16]' . $b['url'] . '[/img]',$s['summary']); - $s['body'] = str_replace($b['term'],'[img=16x16]' . $b['url'] . '[/img]',$s['body']); + foreach ($a as $b) { + if ($b['ttype'] === TERM_EMOJI) { + $s['title'] = str_replace($b['term'], '[img=16x16]' . $b['url'] . '[/img]', $s['title']); + $s['summary'] = str_replace($b['term'], '[img=16x16]' . $b['url'] . '[/img]', $s['summary']); + $s['body'] = str_replace($b['term'], '[img=16x16]' . $b['url'] . '[/img]', $s['body']); } } } @@ -2241,28 +2290,27 @@ class Activity { $s['iconfig'] = $a; } - if($act->obj['type'] === 'Note' && $s['attach']) { - $s['body'] .= self::bb_attach($s['attach'],$s['body']); + if ($act->obj['type'] === 'Note' && $s['attach']) { + $s['body'] .= self::bb_attach($s['attach'], $s['body']); } - if ($act->obj['type'] === 'Question' && in_array($act->type,['Create','Update'])) { + if ($act->obj['type'] === 'Question' && in_array($act->type, ['Create', 'Update'])) { if ($act->obj['endTime']) { - $s['comments_closed'] = datetime_convert('UTC','UTC', $act->obj['endTime']); + $s['comments_closed'] = datetime_convert('UTC', 'UTC', $act->obj['endTime']); } } if ($act->obj['closed']) { - $s['comments_closed'] = datetime_convert('UTC','UTC', $act->obj['closed']); - } - + $s['comments_closed'] = datetime_convert('UTC', 'UTC', $act->obj['closed']); + } // we will need a hook here to extract magnet links e.g. peertube // right now just link to the largest mp4 we find that will fit in our // standard content region - if(! $response_activity) { - if($act->obj['type'] === 'Video') { + if (!$response_activity) { + if ($act->obj['type'] === 'Video') { $vtypes = [ 'video/mp4', @@ -2273,27 +2321,27 @@ class Activity { $mps = []; $ptr = null; - if(array_key_exists('url',$act->obj)) { - if(is_array($act->obj['url'])) { - if(array_key_exists(0,$act->obj['url'])) { + if (array_key_exists('url', $act->obj)) { + if (is_array($act->obj['url'])) { + if (array_key_exists(0, $act->obj['url'])) { $ptr = $act->obj['url']; } else { - $ptr = [ $act->obj['url'] ]; + $ptr = [$act->obj['url']]; } - foreach($ptr as $vurl) { + foreach ($ptr as $vurl) { // peertube uses the non-standard element name 'mimeType' here - if(array_key_exists('mimeType',$vurl)) { - if(in_array($vurl['mimeType'], $vtypes)) { - if(! array_key_exists('width',$vurl)) { + if (array_key_exists('mimeType', $vurl)) { + if (in_array($vurl['mimeType'], $vtypes)) { + if (!array_key_exists('width', $vurl)) { $vurl['width'] = 0; } $mps[] = $vurl; } } - elseif(array_key_exists('mediaType',$vurl)) { - if(in_array($vurl['mediaType'], $vtypes)) { - if(! array_key_exists('width',$vurl)) { + elseif (array_key_exists('mediaType', $vurl)) { + if (in_array($vurl['mediaType'], $vtypes)) { + if (!array_key_exists('width', $vurl)) { $vurl['width'] = 0; } $mps[] = $vurl; @@ -2301,22 +2349,22 @@ class Activity { } } } - if($mps) { - usort($mps,[ __CLASS__, 'vid_sort' ]); - foreach($mps as $m) { - if(intval($m['width']) < 500 && self::media_not_in_body($m['href'],$s['body'])) { + if ($mps) { + usort($mps, [__CLASS__, 'vid_sort']); + foreach ($mps as $m) { + if (intval($m['width']) < 500 && self::media_not_in_body($m['href'], $s['body'])) { $s['body'] .= "\n\n" . '[video]' . $m['href'] . '[/video]'; break; } } } - elseif(is_string($act->obj['url']) && self::media_not_in_body($act->obj['url'],$s['body'])) { + elseif (is_string($act->obj['url']) && self::media_not_in_body($act->obj['url'], $s['body'])) { $s['body'] .= "\n\n" . '[video]' . $act->obj['url'] . '[/video]'; } } } - if($act->obj['type'] === 'Audio') { + if ($act->obj['type'] === 'Audio') { $atypes = [ 'audio/mpeg', @@ -2326,50 +2374,50 @@ class Activity { $ptr = null; - if(array_key_exists('url',$act->obj)) { - if(is_array($act->obj['url'])) { - if(array_key_exists(0,$act->obj['url'])) { + if (array_key_exists('url', $act->obj)) { + if (is_array($act->obj['url'])) { + if (array_key_exists(0, $act->obj['url'])) { $ptr = $act->obj['url']; } else { - $ptr = [ $act->obj['url'] ]; + $ptr = [$act->obj['url']]; } - foreach($ptr as $vurl) { - if(in_array($vurl['mediaType'], $atypes) && self::media_not_in_body($vurl['href'],$s['body'])) { + foreach ($ptr as $vurl) { + if (in_array($vurl['mediaType'], $atypes) && self::media_not_in_body($vurl['href'], $s['body'])) { $s['body'] .= "\n\n" . '[audio]' . $vurl['href'] . '[/audio]'; break; } } } - elseif(is_string($act->obj['url']) && self::media_not_in_body($act->obj['url'],$s['body'])) { + elseif (is_string($act->obj['url']) && self::media_not_in_body($act->obj['url'], $s['body'])) { $s['body'] .= "\n\n" . '[audio]' . $act->obj['url'] . '[/audio]'; } } } - if($act->obj['type'] === 'Image') { + if ($act->obj['type'] === 'Image') { $ptr = null; - if(array_key_exists('url',$act->obj)) { - if(is_array($act->obj['url'])) { - if(array_key_exists(0,$act->obj['url'])) { + if (array_key_exists('url', $act->obj)) { + if (is_array($act->obj['url'])) { + if (array_key_exists(0, $act->obj['url'])) { $ptr = $act->obj['url']; } else { - $ptr = [ $act->obj['url'] ]; + $ptr = [$act->obj['url']]; } - foreach($ptr as $vurl) { - if(strpos($s['body'],$vurl['href']) === false) { - $bb_imgs .= '[zmg]' . $vurl['href'] . '[/zmg]' . "\n\n"; + foreach ($ptr as $vurl) { + if (strpos($s['body'], $vurl['href']) === false) { + $bb_imgs = '[zmg]' . $vurl['href'] . '[/zmg]' . "\n\n"; break; } } $s['body'] = $bb_imgs . $s['body']; } - elseif(is_string($act->obj['url'])) { - if(strpos($s['body'],$act->obj['url']) === false) { + elseif (is_string($act->obj['url'])) { + if (strpos($s['body'], $act->obj['url']) === false) { $s['body'] .= '[zmg]' . $act->obj['url'] . '[/zmg]' . "\n\n" . $s['body']; } } @@ -2377,36 +2425,36 @@ class Activity { } - if($act->obj['type'] === 'Page' && ! $s['body']) { + if ($act->obj['type'] === 'Page' && !$s['body']) { $ptr = null; $purl = EMPTY_STR; - if(array_key_exists('url',$act->obj)) { - if(is_array($act->obj['url'])) { - if(array_key_exists(0,$act->obj['url'])) { + if (array_key_exists('url', $act->obj)) { + if (is_array($act->obj['url'])) { + if (array_key_exists(0, $act->obj['url'])) { $ptr = $act->obj['url']; } else { - $ptr = [ $act->obj['url'] ]; + $ptr = [$act->obj['url']]; } - foreach($ptr as $vurl) { - if(array_key_exists('mediaType',$vurl) && $vurl['mediaType'] === 'text/html') { + foreach ($ptr as $vurl) { + if (array_key_exists('mediaType', $vurl) && $vurl['mediaType'] === 'text/html') { $purl = $vurl['href']; break; } - elseif(array_key_exists('mimeType',$vurl) && $vurl['mimeType'] === 'text/html') { + elseif (array_key_exists('mimeType', $vurl) && $vurl['mimeType'] === 'text/html') { $purl = $vurl['href']; break; } } } - elseif(is_string($act->obj['url'])) { + elseif (is_string($act->obj['url'])) { $purl = $act->obj['url']; } - if($purl) { + if ($purl) { $li = z_fetch_url(z_root() . '/linkinfo?binurl=' . bin2hex($purl)); - if($li['success'] && $li['body']) { + if ($li['success'] && $li['body']) { $s['body'] .= "\n" . $li['body']; } else { @@ -2418,32 +2466,31 @@ class Activity { } - - if(in_array($act->obj['type'],[ 'Note','Article','Page' ])) { + if (in_array($act->obj['type'], ['Note', 'Article', 'Page'])) { $ptr = null; - if(array_key_exists('url',$act->obj)) { - if(is_array($act->obj['url'])) { - if(array_key_exists(0,$act->obj['url'])) { + if (array_key_exists('url', $act->obj)) { + if (is_array($act->obj['url'])) { + if (array_key_exists(0, $act->obj['url'])) { $ptr = $act->obj['url']; } else { - $ptr = [ $act->obj['url'] ]; + $ptr = [$act->obj['url']]; } - foreach($ptr as $vurl) { - if(array_key_exists('mediaType',$vurl) && $vurl['mediaType'] === 'text/html') { + foreach ($ptr as $vurl) { + if (array_key_exists('mediaType', $vurl) && $vurl['mediaType'] === 'text/html') { $s['plink'] = $vurl['href']; break; } } } - elseif(is_string($act->obj['url'])) { + elseif (is_string($act->obj['url'])) { $s['plink'] = $act->obj['url']; } } } - if(! $s['plink']) { + if (!$s['plink']) { $s['plink'] = $s['mid']; } @@ -2456,24 +2503,24 @@ class Activity { } if (is_array($act->obj)) { - if (array_key_exists('directMessage',$act->obj) && intval($act->obj['directMessage'])) { + if (array_key_exists('directMessage', $act->obj) && intval($act->obj['directMessage'])) { $s['item_private'] = 2; } } - set_iconfig($s,'activitypub','recips',$act->raw_recips); + set_iconfig($s, 'activitypub', 'recips', $act->raw_recips); $parent = (($s['parent_mid'] && $s['parent_mid'] === $s['mid']) ? true : false); - if($parent) { - set_iconfig($s,'activitypub','rawmsg',$act->raw,1); + if ($parent) { + set_iconfig($s, 'activitypub', 'rawmsg', $act->raw, 1); } $hookinfo = [ 'act' => $act, - 's' => $s + 's' => $s ]; - call_hooks('decode_note',$hookinfo); + call_hooks('decode_note', $hookinfo); $s = $hookinfo['s']; @@ -2481,51 +2528,177 @@ class Activity { } - static function store($channel,$observer_hash,$act,$item,$fetch_parents = true) { - + static function store($channel, $observer_hash, $act, $item, $fetch_parents = true, $force = false) { $is_sys_channel = is_sys_channel($channel['channel_id']); + $is_child_node = false; + + // TODO: not implemented + // Pleroma scrobbles can be really noisy and contain lots of duplicate activities. Disable them by default. + /*if (($act->type === 'Listen') && ($is_sys_channel || get_pconfig($channel['channel_id'], 'system', 'allow_scrobbles', false))) { + return; + }*/ // Mastodon only allows visibility in public timelines if the public inbox is listed in the 'to' field. // They are hidden in the public timeline if the public inbox is listed in the 'cc' field. // This is not part of the activitypub protocol - we might change this to show all public posts in pubstream at some point. $pubstream = ((is_array($act->obj) && array_key_exists('to', $act->obj) && in_array(ACTIVITY_PUBLIC_INBOX, $act->obj['to'])) ? true : false); - $is_parent = (($item['parent_mid'] && $item['parent_mid'] === $item['mid']) ? true : false); - if($is_parent && (! perm_is_allowed($channel['channel_id'],$observer_hash,'send_stream') && ! ($is_sys_channel && $pubstream))) { + // TODO: this his handled in pubcrawl atm. + // very unpleasant and imperfect way of determining a Mastodon DM + /*if ($act->raw_recips && array_key_exists('to',$act->raw_recips) && is_array($act->raw_recips['to']) && count($act->raw_recips['to']) === 1 && $act->raw_recips['to'][0] === channel_url($channel) && ! $act->raw_recips['cc']) { + $item['item_private'] = 2; + }*/ + + if ($item['parent_mid'] && $item['parent_mid'] !== $item['mid']) { + $is_child_node = true; + } + + $allowed = false; + + // TODO: not implemented + // $permit_mentions = intval(PConfig::Get($channel['channel_id'], 'system','permit_all_mentions') && i_am_mentioned($channel,$item)); + + if ($is_child_node) { + + $p = q("select * from item where mid = '%s' and uid = %d and item_wall = 1", + dbesc($item['parent_mid']), + intval($channel['channel_id']) + ); + if ($p) { + // set the owner to the owner of the parent + $item['owner_xchan'] = $p[0]['owner_xchan']; + + // check permissions against the author, not the sender + $allowed = perm_is_allowed($channel['channel_id'], $item['author_xchan'], 'post_comments'); + if ((!$allowed)/* && $permit_mentions*/) { + if ($p[0]['owner_xchan'] === $channel['channel_hash']) { + $allowed = false; + } + else { + $allowed = true; + } + } + + // TODO: not implemented + /*if (absolutely_no_comments($p[0])) { + $allowed = false; + }*/ + + if (!$allowed) { + logger('rejected comment from ' . $item['author_xchan'] . ' for ' . $channel['channel_address']); + logger('rejected: ' . print_r($item, true), LOGGER_DATA); + + // TODO: not implemented + // let the sender know we received their comment but we don't permit spam here. + // self::send_rejection_activity($channel,$item['author_xchan'],$item); + return; + } + + // TODO: not implemented + /*if (perm_is_allowed($channel['channel_id'],$item['author_xchan'],'moderated')) { + $item['item_blocked'] = ITEM_MODERATED; + }*/ + } + else { + + $allowed = true; + // reject public stream comments that weren't sent by the conversation owner + if ($is_sys_channel && $pubstream && $item['owner_xchan'] !== $observer_hash && !$fetch_parents) { + $allowed = false; + } + } + + if ($p && $p[0]['obj_type'] === 'Question') { + if ($item['obj_type'] === 'Note' && $item['title'] && (!$item['content'])) { + $item['obj_type'] = 'Answer'; + } + } + } + else { + + // The $item['item_fetched'] flag is set in fetch_and_store_parents(). + // In this case we should check against author permissions because sender is not owner. + if (perm_is_allowed($channel['channel_id'], (($item['item_fetched']) ? $item['author_xchan'] : $observer_hash), 'send_stream') || ($is_sys_channel && $pubstream)) { + $allowed = true; + } + // TODO: not implemented + /*if ($permit_mentions) { + $allowed = true; + }*/ + } + + if (tgroup_check($channel['channel_id'], $item) && (!$is_child_node)) { + // for forum deliveries, make sure we keep a copy of the signed original + set_iconfig($item, 'activitypub', 'rawmsg', $act->raw, 1); + $allowed = true; + } + + + if ($is_sys_channel) { + + /* TODO: not implemented + if (! check_pubstream_channelallowed($observer_hash)) { + $allowed = false; + } + + // don't allow pubstream posts if the sender even has a clone on a pubstream denied site + + $h = q("select hubloc_url from hubloc where hubloc_hash = '%s'", + dbesc($observer_hash) + ); + if ($h) { + foreach ($h as $hub) { + if (! check_pubstream_siteallowed($hub['hubloc_url'])) { + $allowed = false; + break; + } + } + } + */ + + if (intval($item['item_private'])) { + $allowed = false; + } + } + + // TODO: not implemented + /*$blocked = LibBlock::fetch($channel['channel_id'],BLOCKTYPE_SERVER); + if ($blocked) { + foreach($blocked as $b) { + if (strpos($observer_hash,$b['block_entity']) !== false) { + $allowed = false; + } + } + }*/ + + if (!$allowed && !$force) { logger('no permission'); return; } - if(is_array($act->obj)) { - $content = self::get_content($act->obj); - } - if(! $content) { - logger('no content'); - return; - } - $item['aid'] = $channel['channel_account_id']; $item['uid'] = $channel['channel_id']; - // Make sure we use the zot6 identity where applicable + // Some authors may be zot6 authors in which case we want to store their nomadic identity + // instead of their ActivityPub identity $item['author_xchan'] = self::find_best_identity($item['author_xchan']); $item['owner_xchan'] = self::find_best_identity($item['owner_xchan']); - if(!$item['author_xchan']) { + if (!$item['author_xchan']) { logger('No author: ' . print_r($act, true)); } - if(!$item['owner_xchan']) { + if (!$item['owner_xchan']) { logger('No owner: ' . print_r($act, true)); } - if(!$item['author_xchan'] || !$item['owner_xchan']) + if (!$item['author_xchan'] || !$item['owner_xchan']) return; - if($channel['channel_system']) { - if(! MessageFilter::evaluate($item,get_config('system','pubstream_incl'),get_config('system','pubstream_excl'))) { + if ($channel['channel_system']) { + if (!MessageFilter::evaluate($item, get_config('system', 'pubstream_incl'), get_config('system', 'pubstream_excl'))) { logger('post is filtered'); return; } @@ -2536,81 +2709,90 @@ class Activity { intval($channel['channel_id']) ); - if($abook) { - if(! post_is_importable($item,$abook[0])) { + if ($abook) { + if (!post_is_importable($item, $abook[0])) { logger('post is filtered'); return; } } - - if($act->obj['conversation']) { - set_iconfig($item,'ostatus','conversation',$act->obj['conversation'],1); + if ($act->obj['conversation']) { + set_iconfig($item, 'ostatus', 'conversation', $act->obj['conversation'], 1); } // This isn't perfect but the best we can do for now. + $item['comment_policy'] = ((isset($act->data['commentPolicy'])) ? $act->data['commentPolicy'] : 'authenticated'); - $item['comment_policy'] = 'authenticated'; + set_iconfig($item, 'activitypub', 'recips', $act->raw_recips); - set_iconfig($item,'activitypub','recips',$act->raw_recips); + // TODO: inheritPrivacy should probably be set in encode activity. Zap does not do so yet - check what this is about + if (!(isset($act->data['inheritPrivacy']) && $act->data['inheritPrivacy'])) { + if ($item['item_private']) { + $item['item_restrict'] = $item['item_restrict'] & 1; + if ($is_child_node) { + $item['allow_cid'] = '<' . $channel['channel_hash'] . '>'; + $item['allow_gid'] = $item['deny_cid'] = $item['deny_gid'] = ''; + } + logger('restricted'); + } + } - if(! $is_parent) { - $p = q("select parent_mid, id, obj_type from item where mid = '%s' and uid = %d limit 1", + if (intval($act->sigok)) { + $item['item_verified'] = 1; + } + + $parent = null; + + if ($is_child_node) { + + $parent = q("select * from item where mid = '%s' and uid = %d limit 1", dbesc($item['parent_mid']), intval($item['uid']) ); - if(! $p) { - $a = (($fetch_parents) ? self::fetch_and_store_parents($channel,$act,$item) : false); - if($a) { - $p = q("select parent_mid from item where mid = '%s' and uid = %d limit 1", - dbesc($item['parent_mid']), - intval($item['uid']) - ); + if (!$parent) { + if (!plugin_is_installed('pubcrawl')) { + return; } else { - logger('could not fetch parents'); - return; - - // @TODO we maybe could accept these is we formatted the body correctly with share_bb() - // or at least provided a link to the object - // if(in_array($act->type,[ 'Like','Dislike' ])) { - // return; - // } - - // @TODO do we actually want that? - // if no parent was fetched, turn into a top-level post - - // turn into a top level post - // $s['parent_mid'] = $s['mid']; - // $s['thr_parent'] = $s['mid']; + $fetch = false; + // TODO: debug + // if (perm_is_allowed($channel['channel_id'],$observer_hash,'send_stream') && (PConfig::Get($channel['channel_id'],'system','hyperdrive',true) || $act->type === 'Announce')) { + if (perm_is_allowed($channel['channel_id'], $observer_hash, 'send_stream') || ($is_sys_channel && $pubstream)) { + $fetch = (($fetch_parents) ? self::fetch_and_store_parents($channel, $observer_hash, $item, $force) : false); + } + if ($fetch) { + $parent = q("select * from item where mid = '%s' and uid = %d limit 1", + dbesc($item['parent_mid']), + intval($item['uid']) + ); + } + else { + logger('no parent'); + return; + } } } - - if ($p[0]['obj_type'] === 'Question') { - if ($item['obj_type'] === ACTIVITY_OBJ_NOTE && $item['title'] && (! $item['content'])) { - $item['obj_type'] = 'Answer'; - } - } - - - if($p[0]['parent_mid'] !== $item['parent_mid']) { + if ($parent[0]['parent_mid'] !== $item['parent_mid']) { $item['thr_parent'] = $item['parent_mid']; } else { - $item['thr_parent'] = $p[0]['parent_mid']; + $item['thr_parent'] = $parent[0]['parent_mid']; } - $item['parent_mid'] = $p[0]['parent_mid']; + $item['parent_mid'] = $parent[0]['parent_mid']; } + // TODO: not implemented + // self::rewrite_mentions($item); + $r = q("select id, created, edited from item where mid = '%s' and uid = %d limit 1", dbesc($item['mid']), intval($item['uid']) ); - if($r) { - if($item['edited'] > $r[0]['edited']) { + if ($r) { + if ($item['edited'] > $r[0]['edited']) { $item['id'] = $r[0]['id']; - $x = item_store_update($item); + $x = item_store_update($item); } else { return; @@ -2620,99 +2802,122 @@ class Activity { $x = item_store($item); } - if(is_array($x) && $x['item_id']) { - if($is_parent) { - if($item['owner_xchan'] === $channel['channel_hash']) { + if ($fetch_parents && $parent && !intval($parent[0]['item_private'])) { + logger('topfetch', LOGGER_DEBUG); + // if the thread owner is a connnection, we will already receive any additional comments to their posts + // but if they are not we can try to fetch others in the background + $x = q("SELECT abook.*, xchan.* FROM abook left join xchan on abook_xchan = xchan_hash + WHERE abook_channel = %d and abook_xchan = '%s' LIMIT 1", + intval($channel['channel_id']), + dbesc($parent[0]['owner_xchan']) + ); + if (!$x) { + // determine if the top-level post provides a replies collection + if ($parent[0]['obj']) { + $parent[0]['obj'] = json_decode($parent[0]['obj'], true); + } + logger('topfetch: ' . print_r($parent[0], true), LOGGER_ALL); + $id = ((array_path_exists('obj/replies/id', $parent[0])) ? $parent[0]['obj']['replies']['id'] : false); + if (!$id) { + $id = ((array_path_exists('obj/replies', $parent[0]) && is_string($parent[0]['obj']['replies'])) ? $parent[0]['obj']['replies'] : false); + } + if ($id) { + Master::Summon(['Convo', $id, $channel['channel_id'], $observer_hash]); + } + } + } + + if (is_array($x) && $x['item_id']) { + if ($is_child_node) { + if ($item['owner_xchan'] === $channel['channel_hash']) { // We are the owner of this conversation, so send all received comments back downstream - Master::Summon(array('Notifier','comment-import',$x['item_id'])); + Master::Summon(['Notifier', 'comment-import', $x['item_id']]); } $r = q("select * from item where id = %d limit 1", intval($x['item_id']) ); - if($r) { - send_status_notifications($x['item_id'],$r[0]); + if ($r) { + send_status_notifications($x['item_id'], $r[0]); } } - sync_an_item($channel['channel_id'],$x['item_id']); + sync_an_item($channel['channel_id'], $x['item_id']); } } - static public function fetch_and_store_parents($channel,$act,$item) { - + static public function fetch_and_store_parents($channel, $observer_hash, $item, $force = false) { logger('fetching parents'); $p = []; - $current_act = $act; $current_item = $item; - while($current_item['parent_mid'] !== $current_item['mid']) { + while ($current_item['parent_mid'] !== $current_item['mid']) { $n = self::fetch($current_item['parent_mid'], $channel); - if(! $n) { + + if (!$n) { break; } + $a = new ActivityStreams($n); + if ($a->type === 'Announce' && is_array($a->obj) + && array_key_exists('object', $a->obj) && array_key_exists('actor', $a->obj)) { + // This is a relayed/forwarded Activity (as opposed to a shared/boosted object) + // Reparse the encapsulated Activity and use that instead + logger('relayed activity', LOGGER_DEBUG); + $a = new ActivityStreams($a->obj); + } - //logger($a->debug()); + logger($a->debug(), LOGGER_DATA); - if(! $a->is_valid()) { + if (!$a->is_valid()) { + logger('not a valid activity'); break; } - if (is_array($a->actor) && array_key_exists('id',$a->actor)) { - self::actor_store($a->actor['id'],$a->actor); - } - - $replies = null; - if(isset($a->obj['replies']['first']['items'])) { - $replies = $a->obj['replies']['first']['items']; - // we already have this one - array_diff($replies, [$current_item['mid']]); - } - - $item = null; - - switch($a->type) { - case 'Create': - case 'Update': - //case 'Like': - //case 'Dislike': - case 'Announce': - $item = self::decode_note($a); - break; - default: - break; + $item = Activity::decode_note($a); + if (!$item) { + break; } $hookinfo = [ - 'a' => $a, + 'a' => $a, 'item' => $item ]; - call_hooks('fetch_and_store',$hookinfo); + call_hooks('fetch_and_store', $hookinfo); $item = $hookinfo['item']; - if($item) { + if ($item) { + $item['item_fetched'] = 1; - array_unshift($p,[ $a, $item, $replies]); - - if($item['parent_mid'] === $item['mid'] || count($p) > 20) { + if (intval($channel['channel_system']) && intval($item['item_private'])) { + $p = []; break; } + if (count($p) > 100) { + $p = []; + break; + } + + array_unshift($p, [$a, $item]); + + if ($item['parent_mid'] === $item['mid']) { + break; + } } - $current_act = $a; + $current_item = $item; } - if($p) { - foreach($p as $pv) { - self::store($channel,$pv[0]->actor['id'],$pv[0],$pv[1],false); - if($pv[2]) - self::fetch_and_store_replies($channel, $pv[2]); + if ($p) { + foreach ($p as $pv) { + if ($pv[0]->is_valid()) { + Activity::store($channel, $observer_hash, $pv[0], $pv[1], false, $force); + } } return true; } @@ -2720,29 +2925,110 @@ class Activity { return false; } + /* + static public function fetch_and_store_parents($channel, $item) { + + logger('fetching parents'); + + $p = []; + + $current_item = $item; + + while ($current_item['parent_mid'] !== $current_item['mid']) { + $n = self::fetch($current_item['parent_mid'], $channel); + if (!$n) { + break; + } + $a = new ActivityStreams($n); + + //logger($a->debug()); + + if (!$a->is_valid()) { + break; + } + + if (is_array($a->actor) && array_key_exists('id', $a->actor)) { + self::actor_store($a->actor['id'], $a->actor); + } + + $replies = null; + if (isset($a->obj['replies']['first']['items'])) { + $replies = $a->obj['replies']['first']['items']; + // we already have this one + array_diff($replies, [$current_item['mid']]); + } + + $item = null; + + switch ($a->type) { + case 'Create': + case 'Update': + //case 'Like': + //case 'Dislike': + case 'Announce': + $item = self::decode_note($a); + break; + default: + break; + + } + + $hookinfo = [ + 'a' => $a, + 'item' => $item + ]; + + call_hooks('fetch_and_store', $hookinfo); + + $item = $hookinfo['item']; + + if ($item) { + + array_unshift($p, [$a, $item, $replies]); + + if ($item['parent_mid'] === $item['mid'] || count($p) > 20) { + break; + } + + } + $current_item = $item; + } + + if ($p) { + foreach ($p as $pv) { + self::store($channel, $pv[0]->actor['id'], $pv[0], $pv[1], false); + if ($pv[2]) + self::fetch_and_store_replies($channel, $pv[2]); + } + return true; + } + + return false; + } + */ static public function fetch_and_store_replies($channel, $arr) { logger('fetching replies'); - logger(print_r($arr,true)); + logger(print_r($arr, true)); $p = []; - foreach($arr as $url) { + foreach ($arr as $url) { $n = self::fetch($url, $channel); - if(! $n) { + if (!$n) { break; } $a = new ActivityStreams($n); - if(! $a->is_valid()) { + if (!$a->is_valid()) { break; } $item = null; - switch($a->type) { + switch ($a->type) { case 'Create': case 'Update': case 'Like': @@ -2755,29 +3041,29 @@ class Activity { } $hookinfo = [ - 'a' => $a, + 'a' => $a, 'item' => $item ]; - call_hooks('fetch_and_store',$hookinfo); + call_hooks('fetch_and_store', $hookinfo); $item = $hookinfo['item']; - if($item) { - array_unshift($p,[ $a, $item ]); + if ($item) { + array_unshift($p, [$a, $item]); } } - if($p) { - foreach($p as $pv) { - self::store($channel,$pv[0]->actor['id'],$pv[0],$pv[1],false); + if ($p) { + foreach ($p as $pv) { + self::store($channel, $pv[0]->actor['id'], $pv[0], $pv[1], false); } } } - static function announce_note($channel,$observer_hash,$act) { + static function announce_note($channel, $observer_hash, $act) { $s = []; @@ -2788,29 +3074,29 @@ class Activity { // This is not part of the activitypub protocol - we might change this to show all public posts in pubstream at some point. $pubstream = ((is_array($act->obj) && array_key_exists('to', $act->obj) && in_array(ACTIVITY_PUBLIC_INBOX, $act->obj['to'])) ? true : false); - if(! perm_is_allowed($channel['channel_id'],$observer_hash,'send_stream') && ! ($is_sys_channel && $pubstream)) { + if (!perm_is_allowed($channel['channel_id'], $observer_hash, 'send_stream') && !($is_sys_channel && $pubstream)) { logger('no permission'); return; } $content = self::get_content($act->obj); - if(! $content) { + if (!$content) { logger('no content'); return; } $s['owner_xchan'] = $s['author_xchan'] = $observer_hash; - $s['aid'] = $channel['channel_account_id']; - $s['uid'] = $channel['channel_id']; - $s['mid'] = urldecode($act->obj['id']); + $s['aid'] = $channel['channel_account_id']; + $s['uid'] = $channel['channel_id']; + $s['mid'] = urldecode($act->obj['id']); $s['plink'] = urldecode($act->obj['id']); - if(! $s['created']) + if (!$s['created']) $s['created'] = datetime_convert(); - if(! $s['edited']) + if (!$s['edited']) $s['edited'] = $s['created']; @@ -2820,8 +3106,8 @@ class Activity { $s['obj_type'] = ACTIVITY_OBJ_NOTE; $s['app'] = t('ActivityPub'); - if($channel['channel_system']) { - if(! \Zotlabs\Lib\MessageFilter::evaluate($s,get_config('system','pubstream_incl'),get_config('system','pubstream_excl'))) { + if ($channel['channel_system']) { + if (!MessageFilter::evaluate($s, get_config('system', 'pubstream_incl'), get_config('system', 'pubstream_excl'))) { logger('post is filtered'); return; } @@ -2832,61 +3118,61 @@ class Activity { intval($channel['channel_id']) ); - if($abook) { - if(! post_is_importable($s,$abook[0])) { + if ($abook) { + if (!post_is_importable($s, $abook[0])) { logger('post is filtered'); return; } } - if($act->obj['conversation']) { - set_iconfig($s,'ostatus','conversation',$act->obj['conversation'],1); + if ($act->obj['conversation']) { + set_iconfig($s, 'ostatus', 'conversation', $act->obj['conversation'], 1); } $a = self::decode_taxonomy($act->obj); - if($a) { + if ($a) { $s['term'] = $a; } $a = self::decode_attachment($act->obj); - if($a) { + if ($a) { $s['attach'] = $a; } - $body = "[share author='" . urlencode($act->sharee['name']) . - "' profile='" . $act->sharee['url'] . - "' avatar='" . $act->sharee['photo_s'] . - "' link='" . ((is_array($act->obj['url'])) ? $act->obj['url']['href'] : $act->obj['url']) . - "' auth='" . ((is_matrix_url($act->obj['url'])) ? 'true' : 'false' ) . - "' posted='" . $act->obj['published'] . - "' message_id='" . $act->obj['id'] . - "']"; + $body = "[share author='" . urlencode($act->sharee['name']) . + "' profile='" . $act->sharee['url'] . + "' avatar='" . $act->sharee['photo_s'] . + "' link='" . ((is_array($act->obj['url'])) ? $act->obj['url']['href'] : $act->obj['url']) . + "' auth='" . ((is_matrix_url($act->obj['url'])) ? 'true' : 'false') . + "' posted='" . $act->obj['published'] . + "' message_id='" . $act->obj['id'] . + "']"; - if($content['name']) - $body .= self::bb_content($content,'name') . "\r\n"; + if ($content['name']) + $body .= self::bb_content($content, 'name') . "\r\n"; - $body .= self::bb_content($content,'content'); + $body .= self::bb_content($content, 'content'); - if($act->obj['type'] === 'Note' && $s['attach']) { - $body .= self::bb_attach($s['attach'],$body); + if ($act->obj['type'] === 'Note' && $s['attach']) { + $body .= self::bb_attach($s['attach'], $body); } $body .= "[/share]"; - $s['title'] = self::bb_content($content,'name'); - $s['body'] = $body; + $s['title'] = self::bb_content($content, 'name'); + $s['body'] = $body; - if($act->recips && (! in_array(ACTIVITY_PUBLIC_INBOX,$act->recips))) + if ($act->recips && (!in_array(ACTIVITY_PUBLIC_INBOX, $act->recips))) $s['item_private'] = 1; - set_iconfig($s,'activitypub','recips',$act->raw_recips); + set_iconfig($s, 'activitypub', 'recips', $act->raw_recips); $r = q("select created, edited from item where mid = '%s' and uid = %d limit 1", dbesc($s['mid']), intval($s['uid']) ); - if($r) { - if($s['edited'] > $r[0]['edited']) { + if ($r) { + if ($s['edited'] > $r[0]['edited']) { $x = item_store_update($s); } else { @@ -2897,35 +3183,35 @@ class Activity { $x = item_store($s); } - if(is_array($x) && $x['item_id']) { - if($s['owner_xchan'] === $channel['channel_hash']) { + if (is_array($x) && $x['item_id']) { + if ($s['owner_xchan'] === $channel['channel_hash']) { // We are the owner of this conversation, so send all received comments back downstream - Master::Summon(array('Notifier','comment-import',$x['item_id'])); + Master::Summon(['Notifier', 'comment-import', $x['item_id']]); } $r = q("select * from item where id = %d limit 1", intval($x['item_id']) ); - if($r) { - send_status_notifications($x['item_id'],$r[0]); + if ($r) { + send_status_notifications($x['item_id'], $r[0]); } - sync_an_item($channel['channel_id'],$x['item_id']); + sync_an_item($channel['channel_id'], $x['item_id']); } } - static function like_note($channel,$observer_hash,$act) { + static function like_note($channel, $observer_hash, $act) { $s = []; $parent = $act->obj['id']; - - if($act->type === 'Like') + + if ($act->type === 'Like') $s['verb'] = ACTIVITY_LIKE; - if($act->type === 'Dislike') + if ($act->type === 'Dislike') $s['verb'] = ACTIVITY_DISLIKE; - if(! $parent) + if (!$parent) return; $r = q("select * from item where uid = %d and ( mid = '%s' or mid = '%s' ) limit 1", @@ -2934,7 +3220,7 @@ class Activity { dbesc(urldecode(basename($parent))) ); - if(! $r) { + if (!$r) { logger('parent not found.'); return; } @@ -2942,14 +3228,14 @@ class Activity { xchan_query($r); $parent_item = $r[0]; - if($parent_item['owner_xchan'] === $channel['channel_hash']) { - if(! perm_is_allowed($channel['channel_id'],$observer_hash,'post_comments')) { + if ($parent_item['owner_xchan'] === $channel['channel_hash']) { + if (!perm_is_allowed($channel['channel_id'], $observer_hash, 'post_comments')) { logger('no comment permission.'); return; } } - if($parent_item['mid'] === $parent_item['parent_mid']) { + if ($parent_item['mid'] === $parent_item['parent_mid']) { $s['parent_mid'] = $parent_item['mid']; } else { @@ -2957,31 +3243,29 @@ class Activity { $s['parent_mid'] = $parent_item['parent_mid']; } - $s['owner_xchan'] = $parent_item['owner_xchan']; + $s['owner_xchan'] = $parent_item['owner_xchan']; $s['author_xchan'] = $observer_hash; - + $s['aid'] = $channel['channel_account_id']; $s['uid'] = $channel['channel_id']; $s['mid'] = $act->id; - if(! $s['parent_mid']) + if (!$s['parent_mid']) $s['parent_mid'] = $s['mid']; - + $post_type = (($parent_item['resource_type'] === 'photo') ? t('photo') : t('post')); - $links = array(array('rel' => 'alternate','type' => 'text/html', 'href' => $parent_item['plink'])); - $objtype = (($parent_item['resource_type'] === 'photo') ? ACTIVITY_OBJ_PHOTO : ACTIVITY_OBJ_NOTE ); - - $body = $parent_item['body']; + $links = [['rel' => 'alternate', 'type' => 'text/html', 'href' => $parent_item['plink']]]; + $objtype = (($parent_item['resource_type'] === 'photo') ? ACTIVITY_OBJ_PHOTO : ACTIVITY_OBJ_NOTE); $z = q("select * from xchan where xchan_hash = '%s' limit 1", dbesc($parent_item['author_xchan']) ); - if($z) - $item_author = $z[0]; + if ($z) + $item_author = $z[0]; - $object = json_encode(array( + $object = json_encode([ 'type' => $post_type, 'id' => $parent_item['mid'], 'parent' => (($parent_item['thr_parent']) ? $parent_item['thr_parent'] : $parent_item['parent_mid']), @@ -2990,77 +3274,75 @@ class Activity { 'content' => $parent_item['body'], 'created' => $parent_item['created'], 'edited' => $parent_item['edited'], - 'author' => array( + 'author' => [ 'name' => $item_author['xchan_name'], 'address' => $item_author['xchan_addr'], 'guid' => $item_author['xchan_guid'], 'guid_sig' => $item_author['xchan_guid_sig'], - 'link' => array( - array('rel' => 'alternate', 'type' => 'text/html', 'href' => $item_author['xchan_url']), - array('rel' => 'photo', 'type' => $item_author['xchan_photo_mimetype'], 'href' => $item_author['xchan_photo_m'])), - ), - ), JSON_UNESCAPED_SLASHES + 'link' => [ + ['rel' => 'alternate', 'type' => 'text/html', 'href' => $item_author['xchan_url']], + ['rel' => 'photo', 'type' => $item_author['xchan_photo_mimetype'], 'href' => $item_author['xchan_photo_m']]], + ], + ], JSON_UNESCAPED_SLASHES ); - if($act->type === 'Like') + if ($act->type === 'Like') $bodyverb = t('%1$s likes %2$s\'s %3$s'); - if($act->type === 'Dislike') + if ($act->type === 'Dislike') $bodyverb = t('%1$s doesn\'t like %2$s\'s %3$s'); - $ulink = '[url=' . $item_author['xchan_url'] . ']' . $item_author['xchan_name'] . '[/url]'; - $alink = '[url=' . $parent_item['author']['xchan_url'] . ']' . $parent_item['author']['xchan_name'] . '[/url]'; - $plink = '[url='. z_root() . '/display/' . urlencode($act->id) . ']' . $post_type . '[/url]'; - $s['body'] = sprintf( $bodyverb, $ulink, $alink, $plink ); + $ulink = '[url=' . $item_author['xchan_url'] . ']' . $item_author['xchan_name'] . '[/url]'; + $alink = '[url=' . $parent_item['author']['xchan_url'] . ']' . $parent_item['author']['xchan_name'] . '[/url]'; + $plink = '[url=' . z_root() . '/display/' . urlencode($act->id) . ']' . $post_type . '[/url]'; + $s['body'] = sprintf($bodyverb, $ulink, $alink, $plink); - $s['app'] = t('ActivityPub'); + $s['app'] = t('ActivityPub'); // set the route to that of the parent so downstream hubs won't reject it. - $s['route'] = $parent_item['route']; + $s['route'] = $parent_item['route']; $s['item_private'] = $parent_item['item_private']; - $s['obj_type'] = $objtype; - $s['obj'] = $object; + $s['obj_type'] = $objtype; + $s['obj'] = $object; - if($act->obj['conversation']) { - set_iconfig($s,'ostatus','conversation',$act->obj['conversation'],1); + if ($act->obj['conversation']) { + set_iconfig($s, 'ostatus', 'conversation', $act->obj['conversation'], 1); } - if($act->recips && (! in_array(ACTIVITY_PUBLIC_INBOX,$act->recips))) + if ($act->recips && (!in_array(ACTIVITY_PUBLIC_INBOX, $act->recips))) $s['item_private'] = 1; - set_iconfig($s,'activitypub','recips',$act->raw_recips); + set_iconfig($s, 'activitypub', 'recips', $act->raw_recips); $result = item_store($s); - if($result['success']) { + if ($result['success']) { // if the message isn't already being relayed, notify others - if(intval($parent_item['item_origin'])) - Master::Summon(array('Notifier','comment-import',$result['item_id'])); - sync_an_item($channel['channel_id'],$result['item_id']); + if (intval($parent_item['item_origin'])) + Master::Summon(['Notifier', 'comment-import', $result['item_id']]); + sync_an_item($channel['channel_id'], $result['item_id']); } return; } - - - static function bb_attach($attach,$body) { + static function bb_attach($attach, $body) { $ret = false; - foreach($attach as $a) { - if(strpos($a['type'],'image') !== false) { - if(self::media_not_in_body($a['href'],$body)) { + foreach ($attach as $a) { + if (array_key_exists('type',$a) && stripos($a['type'], 'image') !== false) { + if (self::media_not_in_body($a['href'], $body)) { $ret .= "\n\n" . '[img]' . $a['href'] . '[/img]'; } } - if(array_key_exists('type',$a) && strpos($a['type'], 'video') === 0) { - if(self::media_not_in_body($a['href'],$body)) { + if (array_key_exists('type', $a) && stripos($a['type'], 'video') !== false) { + if (self::media_not_in_body($a['href'], $body)) { $ret .= "\n\n" . '[video]' . $a['href'] . '[/video]'; } } - if(array_key_exists('type',$a) && strpos($a['type'], 'audio') === 0) { - if(self::media_not_in_body($a['href'],$body)) { + if (array_key_exists('type', $a) && stripos($a['type'], 'audio') !== false) { + if (self::media_not_in_body($a['href'], $body)) { $ret .= "\n\n" . '[audio]' . $a['href'] . '[/audio]'; } } @@ -3069,116 +3351,109 @@ class Activity { return $ret; } - // check for the existence of existing media link in body + static function media_not_in_body($s, $body) { - static function media_not_in_body($s,$body) { - - if((strpos($body,']' . $s . '[/img]') === false) && - (strpos($body,']' . $s . '[/zmg]') === false) && - (strpos($body,']' . $s . '[/video]') === false) && - (strpos($body,']' . $s . '[/audio]') === false)) { + if ((strpos($body, ']' . $s . '[/img]') === false) && + (strpos($body, ']' . $s . '[/zmg]') === false) && + (strpos($body, ']' . $s . '[/video]') === false) && + (strpos($body, ']' . $s . '[/audio]') === false)) { return true; } return false; } - - static function bb_content($content,$field) { + static function bb_content($content, $field) { require_once('include/html2bbcode.php'); require_once('include/event.php'); $ret = false; - if(is_array($content[$field])) { - foreach($content[$field] as $k => $v) { + if (is_array($content[$field])) { + foreach ($content[$field] as $k => $v) { $ret .= html2bbcode($v); // save this for auto-translate or dynamic filtering // $ret .= '[language=' . $k . ']' . html2bbcode($v) . '[/language]'; } } else { - if($field === 'bbcode' && array_key_exists('bbcode',$content)) { + if ($field === 'bbcode' && array_key_exists('bbcode', $content)) { $ret = $content[$field]; } else { $ret = html2bbcode($content[$field]); } } - if($field === 'content' && $content['event'] && (! strpos($ret,'[event'))) { + if ($field === 'content' && $content['event'] && (!strpos($ret, '[event'))) { $ret .= format_event_bbcode($content['event']); } return $ret; } - static function get_content($act) { $content = []; - $event = null; + $event = null; - if ((! $act) || (! is_array($act))) { + if ((!$act) || (!is_array($act))) { return $content; } - if($act['type'] === 'Event') { - $adjust = false; - $event = []; - $event['event_hash'] = $act['id']; - if(array_key_exists('startTime',$act) && strpos($act['startTime'],-1,1) === 'Z') { - $adjust = true; - $event['adjust'] = 1; - $event['dtstart'] = datetime_convert('UTC','UTC',$event['startTime'] . (($adjust) ? '' : 'Z')); - } - if(array_key_exists('endTime',$act)) { - $event['dtend'] = datetime_convert('UTC','UTC',$event['endTime'] . (($adjust) ? '' : 'Z')); - } - else { - $event['nofinish'] = true; - } - } + if ($act['type'] === 'Event') { + $adjust = false; + $event = []; + $event['event_hash'] = $act['id']; + if (array_key_exists('startTime', $act) && strpos($act['startTime'], -1, 1) === 'Z') { + $adjust = true; + $event['adjust'] = 1; + $event['dtstart'] = datetime_convert('UTC', 'UTC', $event['startTime'] . (($adjust) ? '' : 'Z')); + } + if (array_key_exists('endTime', $act)) { + $event['dtend'] = datetime_convert('UTC', 'UTC', $event['endTime'] . (($adjust) ? '' : 'Z')); + } + else { + $event['nofinish'] = true; + } + } - foreach ([ 'name', 'summary', 'content' ] as $a) { - if (($x = self::get_textfield($act,$a)) !== false) { + foreach (['name', 'summary', 'content'] as $a) { + if (($x = self::get_textfield($act, $a)) !== false) { $content[$a] = $x; } } - if($event) { + if ($event) { $event['summary'] = $content['name']; - if(! $event['summary']) { - if($content['summary']) { + if (!$event['summary']) { + if ($content['summary']) { $event['summary'] = html2plain($content['summary']); } } $event['description'] = html2bbcode($content['content']); - if($event['summary'] && $event['dtstart']) { + if ($event['summary'] && $event['dtstart']) { $content['event'] = $event; } } - if (array_path_exists('source/mediaType',$act) && array_path_exists('source/content',$act)) { + if (array_path_exists('source/mediaType', $act) && array_path_exists('source/content', $act)) { if ($act['source']['mediaType'] === 'text/bbcode') { $content['bbcode'] = purify_html($act['source']['content']); } } - - return $content; } + static function get_textfield($act, $field) { - static function get_textfield($act,$field) { - $content = false; - if(array_key_exists($field,$act) && $act[$field]) + if (array_key_exists($field, $act) && $act[$field]) $content = purify_html($act[$field]); - elseif(array_key_exists($field . 'Map',$act) && $act[$field . 'Map']) { - foreach($act[$field . 'Map'] as $k => $v) { + elseif (array_key_exists($field . 'Map', $act) && $act[$field . 'Map']) { + foreach ($act[$field . 'Map'] as $k => $v) { $content[escape_tags($k)] = purify_html($v); } } @@ -3187,11 +3462,10 @@ class Activity { // Find either an Authorization: Bearer token or 'token' request variable // in the current web request and return it - static function token_from_request() { - foreach ( [ 'REDIRECT_REMOTE_USER', 'HTTP_AUTHORIZATION' ] as $s ) { - $auth = ((array_key_exists($s,$_SERVER) && strpos($_SERVER[$s],'Bearer ') === 0) + foreach (['REDIRECT_REMOTE_USER', 'HTTP_AUTHORIZATION'] as $s) { + $auth = ((array_key_exists($s, $_SERVER) && strpos($_SERVER[$s], 'Bearer ') === 0) ? str_replace('Bearer ', EMPTY_STR, $_SERVER[$s]) : EMPTY_STR ); @@ -3200,8 +3474,8 @@ class Activity { } } - if (! $auth) { - if (array_key_exists('token',$_REQUEST) && $_REQUEST['token']) { + if (!$auth) { + if (array_key_exists('token', $_REQUEST) && $_REQUEST['token']) { $auth = $_REQUEST['token']; } } @@ -3211,7 +3485,7 @@ class Activity { static function find_best_identity($xchan) { - if(filter_var($xchan, FILTER_VALIDATE_URL)) { + if (filter_var($xchan, FILTER_VALIDATE_URL)) { $r = q("select hubloc_hash, hubloc_network from hubloc where hubloc_id_url = '%s' and hubloc_network in ('zot6', 'zot') and hubloc_deleted = 0", dbesc($xchan) ); diff --git a/Zotlabs/Lib/ActivityStreams.php b/Zotlabs/Lib/ActivityStreams.php index f877fbb45..ba7ec0c65 100644 --- a/Zotlabs/Lib/ActivityStreams.php +++ b/Zotlabs/Lib/ActivityStreams.php @@ -7,25 +7,24 @@ namespace Zotlabs\Lib; * * Parses an ActivityStream JSON string. */ - class ActivityStreams { - public $raw = null; - public $data = null; - public $valid = false; - public $deleted = false; - public $id = ''; - public $parent_id = ''; - public $type = ''; - public $actor = null; - public $obj = null; - public $tgt = null; - public $origin = null; - public $owner = null; - public $signer = null; - public $ldsig = null; - public $sigok = false; - public $recips = null; + public $raw = null; + public $data = null; + public $valid = false; + public $deleted = false; + public $id = ''; + public $parent_id = ''; + public $type = ''; + public $actor = null; + public $obj = null; + public $tgt = null; + public $origin = null; + public $owner = null; + public $signer = null; + public $ldsig = null; + public $sigok = false; + public $recips = null; public $raw_recips = null; /** @@ -37,29 +36,29 @@ class ActivityStreams { */ function __construct($string) { - $this->raw = $string; + $this->raw = $string; - if(is_array($string)) { + if (is_array($string)) { $this->data = $string; } else { $this->data = json_decode($string, true); } - if($this->data) { + if ($this->data) { // verify and unpack JSalmon signature if present - if(is_array($this->data) && array_key_exists('signed',$this->data)) { + if (is_array($this->data) && array_key_exists('signed', $this->data)) { $ret = JSalmon::verify($this->data); $tmp = JSalmon::unpack($this->data['data']); - if($ret && $ret['success']) { - if($ret['signer']) { - $saved = json_encode($this->data,JSON_UNESCAPED_SLASHES); - $this->data = $tmp; - $this->data['signer'] = $ret['signer']; + if ($ret && $ret['success']) { + if ($ret['signer']) { + $saved = json_encode($this->data, JSON_UNESCAPED_SLASHES); + $this->data = $tmp; + $this->data['signer'] = $ret['signer']; $this->data['signed_data'] = $saved; - if($ret['hubloc']) { + if ($ret['hubloc']) { $this->data['hubloc'] = $ret['hubloc']; } } @@ -68,57 +67,57 @@ class ActivityStreams { $this->valid = true; - if(array_key_exists('type',$this->data) && array_key_exists('actor',$this->data) && array_key_exists('object',$this->data)) { - if($this->data['type'] === 'Delete' && $this->data['actor'] === $this->data['object']) { + if (array_key_exists('type', $this->data) && array_key_exists('actor', $this->data) && array_key_exists('object', $this->data)) { + if ($this->data['type'] === 'Delete' && $this->data['actor'] === $this->data['object']) { $this->deleted = $this->data['actor']; - $this->valid = false; + $this->valid = false; } } } - if($this->is_valid()) { + if ($this->is_valid()) { $this->id = $this->get_property_obj('id'); $this->type = $this->get_primary_type(); - $this->actor = $this->get_actor('actor','',''); + $this->actor = $this->get_actor('actor', '', ''); $this->obj = $this->get_compound_property('object'); $this->tgt = $this->get_compound_property('target'); $this->origin = $this->get_compound_property('origin'); $this->recips = $this->collect_recips(); $this->ldsig = $this->get_compound_property('signature'); - if($this->ldsig) { - $this->signer = $this->get_compound_property('creator',$this->ldsig); - if($this->signer && is_array($this->signer) && array_key_exists('publicKey',$this->signer) && is_array($this->signer['publicKey']) && $this->signer['publicKey']['publicKeyPem']) { - $this->sigok = LDSignatures::verify($this->data,$this->signer['publicKey']['publicKeyPem']); + if ($this->ldsig) { + $this->signer = $this->get_compound_property('creator', $this->ldsig); + if ($this->signer && is_array($this->signer) && array_key_exists('publicKey', $this->signer) && is_array($this->signer['publicKey']) && $this->signer['publicKey']['publicKeyPem']) { + $this->sigok = LDSignatures::verify($this->data, $this->signer['publicKey']['publicKeyPem']); } } - if(! $this->obj) { - $this->obj = $this->data; + if (!$this->obj) { + $this->obj = $this->data; $this->type = 'Create'; - if(! $this->actor) { - $this->actor = $this->get_actor('attributedTo',$this->obj); + if (!$this->actor) { + $this->actor = $this->get_actor('attributedTo', $this->obj); } } // fetch recursive or embedded activities - if ($this->obj && is_array($this->obj) && array_key_exists('object',$this->obj)) { + if ($this->obj && is_array($this->obj) && array_key_exists('object', $this->obj)) { $this->obj['object'] = $this->get_compound_property($this->obj['object']); } - if($this->obj && is_array($this->obj) && $this->obj['actor']) - $this->obj['actor'] = $this->get_actor('actor',$this->obj); - if($this->tgt && is_array($this->tgt) && $this->tgt['actor']) - $this->tgt['actor'] = $this->get_actor('actor',$this->tgt); + if ($this->obj && is_array($this->obj) && $this->obj['actor']) + $this->obj['actor'] = $this->get_actor('actor', $this->obj); + if ($this->tgt && is_array($this->tgt) && $this->tgt['actor']) + $this->tgt['actor'] = $this->get_actor('actor', $this->tgt); $this->parent_id = $this->get_property_obj('inReplyTo'); - if((! $this->parent_id) && is_array($this->obj)) { + if ((!$this->parent_id) && is_array($this->obj)) { $this->parent_id = $this->obj['inReplyTo']; } - if((! $this->parent_id) && is_array($this->obj)) { + if ((!$this->parent_id) && is_array($this->obj)) { $this->parent_id = $this->obj['id']; } } @@ -147,19 +146,19 @@ class ActivityStreams { function collect_recips($base = '', $namespace = '') { $x = []; - $fields = [ 'to', 'cc', 'bto', 'bcc', 'audience']; - foreach($fields as $f) { + $fields = ['to', 'cc', 'bto', 'bcc', 'audience']; + foreach ($fields as $f) { $y = $this->get_compound_property($f, $base, $namespace); - if($y) { - if (! is_array($this->raw_recips)) { + if ($y) { + if (!is_array($this->raw_recips)) { $this->raw_recips = []; } - if (! is_array($y)) { - $y = [ $y ]; + if (!is_array($y)) { + $y = [$y]; } $this->raw_recips[$f] = $y; - $x = array_merge($x, $y); + $x = array_merge($x, $y); } } // not yet ready for prime time @@ -167,21 +166,21 @@ class ActivityStreams { return $x; } - function expand($arr,$base = '',$namespace = '') { + function expand($arr, $base = '', $namespace = '') { $ret = []; // right now use a hardwired recursion depth of 5 - for($z = 0; $z < 5; $z ++) { - if(is_array($arr) && $arr) { - foreach($arr as $a) { - if(is_array($a)) { + for ($z = 0; $z < 5; $z++) { + if (is_array($arr) && $arr) { + foreach ($arr as $a) { + if (is_array($a)) { $ret[] = $a; } else { - $x = $this->get_compound_property($a,$base,$namespace); - if($x) { - $ret = array_merge($ret,$x); + $x = $this->get_compound_property($a, $base, $namespace); + if ($x) { + $ret = array_merge($ret, $x); } } } @@ -202,33 +201,33 @@ class ActivityStreams { */ function get_namespace($base, $namespace) { - if(! $namespace) + if (!$namespace) return ''; $key = null; - foreach( [ $this->data, $base ] as $b ) { - if(! $b) + foreach ([$this->data, $base] as $b) { + if (!$b) continue; - if(array_key_exists('@context', $b)) { - if(is_array($b['@context'])) { - foreach($b['@context'] as $ns) { - if(is_array($ns)) { - foreach($ns as $k => $v) { - if($namespace === $v) + if (array_key_exists('@context', $b)) { + if (is_array($b['@context'])) { + foreach ($b['@context'] as $ns) { + if (is_array($ns)) { + foreach ($ns as $k => $v) { + if ($namespace === $v) $key = $k; } } else { - if($namespace === $ns) { + if ($namespace === $ns) { $key = ''; } } } } else { - if($namespace === $b['@context']) { + if ($namespace === $b['@context']) { $key = ''; } } @@ -248,14 +247,14 @@ class ActivityStreams { */ function get_property_obj($property, $base = '', $namespace = '') { $prefix = $this->get_namespace($base, $namespace); - if($prefix === null) + if ($prefix === null) return null; - $base = (($base) ? $base : $this->data); + $base = (($base) ? $base : $this->data); $propname = (($prefix) ? $prefix . ':' : '') . $property; - if(! is_array($base)) { - btlogger('not an array: ' . print_r($base,true)); + if (!is_array($base)) { + btlogger('not an array: ' . print_r($base, true)); return null; } @@ -279,14 +278,14 @@ class ActivityStreams { } static function is_an_actor($s) { - return (in_array($s, [ 'Application','Group','Organization','Person','Service' ])); + return (in_array($s, ['Application', 'Group', 'Organization', 'Person', 'Service'])); } static function is_response_activity($s) { - if (! $s) { + if (!$s) { return false; } - return (in_array($s, [ 'Like', 'Dislike', 'Flag', 'Block', 'Accept', 'Reject', 'TentativeAccept', 'TentativeReject', 'emojiReaction', 'EmojiReaction', 'EmojiReact' ])); + return (in_array($s, ['Like', 'Dislike', 'Flag', 'Block', 'Accept', 'Reject', 'TentativeAccept', 'TentativeReject', 'emojiReaction', 'EmojiReaction', 'EmojiReact'])); } /** @@ -298,9 +297,9 @@ class ActivityStreams { * @return NULL|mixed */ - function get_actor($property,$base='',$namespace = '') { + function get_actor($property, $base = '', $namespace = '') { $x = $this->get_property_obj($property, $base, $namespace); - if($this->is_url($x)) { + if ($this->is_url($x)) { // SECURITY: If we have already stored the actor profile, re-generate it // from cached data - don't refetch it from the network @@ -308,15 +307,15 @@ class ActivityStreams { $r = q("select * from xchan left join hubloc on xchan_hash = hubloc_hash where hubloc_id_url = '%s' limit 1", dbesc($x) ); - if($r) { - $y = Activity::encode_person($r[0]); + if ($r) { + $y = Activity::encode_person($r[0]); $y['cached'] = true; return $y; } } - $actor = $this->get_compound_property($property,$base,$namespace,true); - if(is_array($actor) && self::is_an_actor($actor['type'])) { - if(array_key_exists('id',$actor) && (! array_key_exists('inbox',$actor))) { + $actor = $this->get_compound_property($property, $base, $namespace, true); + if (is_array($actor) && self::is_an_actor($actor['type'])) { + if (array_key_exists('id', $actor) && (!array_key_exists('inbox', $actor))) { $actor = $this->fetch_property($actor['id']); } return $actor; @@ -336,7 +335,7 @@ class ActivityStreams { */ function get_compound_property($property, $base = '', $namespace = '', $first = false) { $x = $this->get_property_obj($property, $base, $namespace); - if($this->is_url($x)) { + if ($this->is_url($x)) { $y = $this->fetch_property($x); if (is_array($y)) { $x = $y; @@ -345,22 +344,22 @@ class ActivityStreams { // verify and unpack JSalmon signature if present - if(is_array($x) && array_key_exists('signed',$x)) { + if (is_array($x) && array_key_exists('signed', $x)) { $ret = JSalmon::verify($x); $tmp = JSalmon::unpack($x['data']); - if($ret && $ret['success']) { - if($ret['signer']) { - $saved = json_encode($x,JSON_UNESCAPED_SLASHES); - $x = $tmp; - $x['signer'] = $ret['signer']; + if ($ret && $ret['success']) { + if ($ret['signer']) { + $saved = json_encode($x, JSON_UNESCAPED_SLASHES); + $x = $tmp; + $x['signer'] = $ret['signer']; $x['signed_data'] = $saved; - if($ret['hubloc']) { + if ($ret['hubloc']) { $x['hubloc'] = $ret['hubloc']; } } } } - if($first && is_array($x) && array_key_exists(0,$x)) { + if ($first && is_array($x) && array_key_exists(0, $x)) { return $x[0]; } @@ -374,7 +373,7 @@ class ActivityStreams { * @return boolean */ function is_url($url) { - if(($url) && (! is_array($url)) && (strpos($url, 'http') === 0)) { + if (($url) && (!is_array($url)) && (strpos($url, 'http') === 0)) { return true; } @@ -389,13 +388,13 @@ class ActivityStreams { * @return NULL|mixed */ function get_primary_type($base = '', $namespace = '') { - if(! $base) + if (!$base) $base = $this->data; $x = $this->get_property_obj('type', $base, $namespace); - if(is_array($x)) { - foreach($x as $y) { - if(strpos($y, ':') === false) { + if (is_array($x)) { + foreach ($x as $y) { + if (strpos($y, ':') === false) { return $y; } } @@ -409,15 +408,32 @@ class ActivityStreams { return $x; } - static function is_as_request() { + static function is_as_request($channel = null) { - $x = getBestSupportedMimeType([ - 'application/ld+json;profile="https://www.w3.org/ns/activitystreams"', - 'application/activity+json', - 'application/ld+json;profile="http://www.w3.org/ns/activitystreams"' - ]); + $hookdata = []; + if ($channel) + $hookdata['channel'] = $channel; - return(($x) ? true : false); + $hookdata['data'] = ['application/x-zot-activity+json']; + + call_hooks('is_as_request', $hookdata); + + $x = getBestSupportedMimeType($hookdata['data']); + return (($x) ? true : false); + + } + + static function get_accept_header_string($channel = null) { + + $hookdata = []; + if ($channel) + $hookdata['channel'] = $channel; + + $hookdata['data'] = 'application/x-zot-activity+json'; + + call_hooks('get_accept_header_string', $hookdata); + + return $hookdata['data']; } diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index 7b980b8d3..d77a3fda2 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -307,7 +307,7 @@ class Apps { } } } - if($ret) { + if(isset($ret)) { if($translate) self::translate_system_apps($ret); @@ -524,7 +524,7 @@ class Apps { } elseif(remote_channel()) { $observer = \App::get_observer(); - if($observer && $observer['xchan_network'] === 'zot') { + if($observer && in_array($observer['xchan_network'], ['zot6', 'zot'])) { // some folks might have xchan_url redirected offsite, use the connurl $x = parse_url($observer['xchan_connurl']); if($x) { diff --git a/Zotlabs/Lib/Crypto.php b/Zotlabs/Lib/Crypto.php new file mode 100644 index 000000000..f1794ae64 --- /dev/null +++ b/Zotlabs/Lib/Crypto.php @@ -0,0 +1,206 @@ + 'sha1', + 'private_key_bits' => $bits, + 'encrypt_key' => false + ]; + + $conf = get_config('system', 'openssl_conf_file'); + + if ($conf) { + $openssl_options['config'] = $conf; + } + + $result = openssl_pkey_new($openssl_options); + + if (empty($result)) { + return false; + } + + // Get private key + + $response = ['prvkey' => '', 'pubkey' => '']; + + openssl_pkey_export($result, $response['prvkey']); + + // Get public key + $pkey = openssl_pkey_get_details($result); + $response['pubkey'] = $pkey["key"]; + + return $response; + + } + + public static function sign($data, $key, $alg = 'sha256') { + + if (!$key) { + return false; + } + + $sig = ''; + openssl_sign($data, $sig, $key, $alg); + return $sig; + } + + public static function verify($data, $sig, $key, $alg = 'sha256') { + + if (!$key) { + return false; + } + + try { + $verify = openssl_verify($data, $sig, $key, $alg); + } catch (Exception $e) { + $verify = (-1); + } + + if ($verify === (-1)) { + while ($msg = openssl_error_string()) { + logger('openssl_verify: ' . $msg, LOGGER_NORMAL, LOG_ERR); + } + btlogger('openssl_verify: key: ' . $key, LOGGER_DEBUG, LOG_ERR); + } + + return (($verify > 0) ? true : false); + } + + public static function encapsulate($data, $pubkey, $alg) { + + if (!($alg && $pubkey)) { + return $data; + } + + $alg_base = $alg; + $padding = OPENSSL_PKCS1_PADDING; + + $exts = explode('.', $alg); + if (count($exts) > 1) { + switch ($exts[1]) { + case 'oaep': + $padding = OPENSSL_PKCS1_OAEP_PADDING; + break; + default: + break; + } + $alg_base = $exts[0]; + } + + $method = null; + + foreach (self::$openssl_algorithms as $ossl) { + if ($ossl[0] === $alg_base) { + $method = $ossl; + break; + } + } + + if ($method) { + $result = ['encrypted' => true]; + + $key = openssl_random_pseudo_bytes(256); + $iv = openssl_random_pseudo_bytes(256); + + $key1 = substr($key, 0, $method[2]); + $iv1 = substr($iv, 0, $method[3]); + + $result['data'] = base64url_encode(openssl_encrypt($data, $method[1], $key1, OPENSSL_RAW_DATA, $iv1), true); + + openssl_public_encrypt($key, $k, $pubkey, $padding); + openssl_public_encrypt($iv, $i, $pubkey, $padding); + + $result['alg'] = $alg; + $result['key'] = base64url_encode($k, true); + $result['iv'] = base64url_encode($i, true); + return $result; + + } + else { + $x = ['data' => $data, 'pubkey' => $pubkey, 'alg' => $alg, 'result' => $data]; + call_hooks('crypto_encapsulate', $x); + return $x['result']; + } + } + + public static function unencapsulate($data, $prvkey) { + + if (!(is_array($data) && array_key_exists('encrypted', $data) && array_key_exists('alg', $data) && $data['alg'])) { + logger('not encrypted'); + + return $data; + } + + $alg_base = $data['alg']; + $padding = OPENSSL_PKCS1_PADDING; + + $exts = explode('.', $data['alg']); + if (count($exts) > 1) { + switch ($exts[1]) { + case 'oaep': + $padding = OPENSSL_PKCS1_OAEP_PADDING; + break; + default: + break; + } + $alg_base = $exts[0]; + } + + $method = null; + + foreach (self::$openssl_algorithms as $ossl) { + if ($ossl[0] === $alg_base) { + $method = $ossl; + break; + } + } + + if ($method) { + openssl_private_decrypt(base64url_decode($data['key']), $k, $prvkey, $padding); + openssl_private_decrypt(base64url_decode($data['iv']), $i, $prvkey, $padding); + return openssl_decrypt(base64url_decode($data['data']), $method[1], substr($k, 0, $method[2]), OPENSSL_RAW_DATA, substr($i, 0, $method[3])); + } + else { + $x = ['data' => $data, 'prvkey' => $prvkey, 'alg' => $data['alg'], 'result' => $data]; + call_hooks('crypto_unencapsulate', $x); + return $x['result']; + } + } +} diff --git a/Zotlabs/Lib/Enotify.php b/Zotlabs/Lib/Enotify.php index 3a24cd349..d2a0f0abc 100644 --- a/Zotlabs/Lib/Enotify.php +++ b/Zotlabs/Lib/Enotify.php @@ -43,7 +43,7 @@ class Enotify { dbesc($params['to_xchan']) ); } - if ($x & $y) { + if ($x && $y) { $sender = $x[0]; $recip = $y[0]; } else { diff --git a/Zotlabs/Lib/Hashpath.php b/Zotlabs/Lib/Hashpath.php new file mode 100644 index 000000000..f3b25d2b6 --- /dev/null +++ b/Zotlabs/Lib/Hashpath.php @@ -0,0 +1,55 @@ + true, @@ -54,7 +54,7 @@ class JSalmon { $key = HTTPSig::get_key(EMPTY_STR,'zot6',base64url_decode($x['sigs']['key_id'])); logger('key: ' . print_r($key,true)); if($key['portable_id'] && $key['public_key']) { - if(rsa_verify($signed_data,base64url_decode($x['sigs']['value']),$key['public_key'])) { + if(Crypto::verify($signed_data,base64url_decode($x['sigs']['value']),$key['public_key'])) { logger('verified'); $ret = [ 'success' => true, 'signer' => $key['portable_id'], 'hubloc' => $key['hubloc'] ]; } diff --git a/Zotlabs/Lib/Keyutils.php b/Zotlabs/Lib/Keyutils.php new file mode 100644 index 000000000..616ecfcf6 --- /dev/null +++ b/Zotlabs/Lib/Keyutils.php @@ -0,0 +1,99 @@ +loadKey([ + 'e' => new BigInteger($e, 256), + 'n' => new BigInteger($m, 256) + ]); + return $rsa->getPublicKey(); + + } + + /** + * @param string key + * @return string + */ + public static function rsaToPem($key) { + + $rsa = new RSA(); + $rsa->setPublicKey($key); + + return $rsa->getPublicKey(RSA::PUBLIC_FORMAT_PKCS8); + + } + + /** + * @param string key + * @return string + */ + public static function pemToRsa($key) { + + $rsa = new RSA(); + $rsa->setPublicKey($key); + + return $rsa->getPublicKey(RSA::PUBLIC_FORMAT_PKCS1); + + } + + /** + * @param string $key key + * @param string $m reference modulo + * @param string $e reference exponent + */ + public static function pemToMe($key, &$m, &$e) { + + $rsa = new RSA(); + $rsa->loadKey($key); + $rsa->setPublicKey(); + + $m = $rsa->modulus->toBytes(); + $e = $rsa->exponent->toBytes(); + + } + + /** + * @param string $pubkey + * @return string + */ + public static function salmonKey($pubkey) { + self::pemToMe($pubkey, $m, $e); + return 'RSA' . '.' . base64url_encode($m, true) . '.' . base64url_encode($e, true); + } + + /** + * @param string $key + * @return string + */ + public static function convertSalmonKey($key) { + if (strstr($key, ',')) + $rawkey = substr($key, strpos($key, ',') + 1); + else + $rawkey = substr($key, 5); + + $key_info = explode('.', $rawkey); + + $m = base64url_decode($key_info[1]); + $e = base64url_decode($key_info[2]); + + return self::meToPem($m, $e); + } + +} \ No newline at end of file diff --git a/Zotlabs/Lib/LDSignatures.php b/Zotlabs/Lib/LDSignatures.php index 2eba66ccf..1c2095f10 100644 --- a/Zotlabs/Lib/LDSignatures.php +++ b/Zotlabs/Lib/LDSignatures.php @@ -12,7 +12,7 @@ class LDSignatures { $ohash = self::hash(self::signable_options($data['signature'])); $dhash = self::hash(self::signable_data($data)); - $x = rsa_verify($ohash . $dhash,base64_decode($data['signature']['signatureValue']), $pubkey); + $x = Crypto::verify($ohash . $dhash,base64_decode($data['signature']['signatureValue']), $pubkey); logger('LD-verify: ' . intval($x)); return $x; @@ -35,11 +35,11 @@ class LDSignatures { $ohash = self::hash(self::signable_options($options)); $dhash = self::hash(self::signable_data($data)); - $options['signatureValue'] = base64_encode(rsa_sign($ohash . $dhash,$channel['channel_prvkey'])); + $options['signatureValue'] = base64_encode(Crypto::sign($ohash . $dhash,$channel['channel_prvkey'])); $signed = array_merge([ - '@context' => [ - ACTIVITYSTREAMS_JSONLD_REV, + '@context' => [ + ACTIVITYSTREAMS_JSONLD_REV, 'https://w3id.org/security/v1' ], ],$options); @@ -88,7 +88,7 @@ class LDSignatures { return ''; jsonld_set_document_loader('jsonld_document_loader'); - + try { $d = jsonld_normalize($data,[ 'algorithm' => 'URDNA2015', 'format' => 'application/nquads' ]); } @@ -117,7 +117,7 @@ class LDSignatures { $precomputed = '.' . base64url_encode($data_type,false) . '.YmFzZTY0dXJs.UlNBLVNIQTI1Ng=='; - $signature = base64url_encode(rsa_sign($data . $precomputed,$channel['channel_prvkey'])); + $signature = base64url_encode(Crypto::sign($data . $precomputed,$channel['channel_prvkey'])); return ([ 'id' => $arr['id'], diff --git a/Zotlabs/Lib/Libsync.php b/Zotlabs/Lib/Libsync.php index 7b968532a..e16b68cf8 100644 --- a/Zotlabs/Lib/Libsync.php +++ b/Zotlabs/Lib/Libsync.php @@ -2,9 +2,9 @@ namespace Zotlabs\Lib; -use Zotlabs\Lib\Libzot; -use Zotlabs\Lib\Queue; +use App; +use Zotlabs\Daemon\Master; class Libsync { @@ -23,21 +23,21 @@ class Libsync { logger('build_sync_packet'); - $keychange = (($packet && array_key_exists('keychange',$packet)) ? true : false); - if($keychange) { + $keychange = (($packet && array_key_exists('keychange', $packet)) ? true : false); + if ($keychange) { logger('keychange sync'); } - if(! $uid) + if (!$uid) $uid = local_channel(); - if(! $uid) + if (!$uid) return; $r = q("select * from channel where channel_id = %d limit 1", intval($uid) ); - if(! $r) + if (!$r) return; $channel = $r[0]; @@ -49,103 +49,103 @@ class Libsync { unset($channel['channel_salt']); - if(intval($channel['channel_removed'])) + if (intval($channel['channel_removed'])) return; $h = q("select hubloc.*, site.site_crypto from hubloc left join site on site_url = hubloc_url where hubloc_hash = '%s' and hubloc_deleted = 0", dbesc(($keychange) ? $packet['keychange']['old_hash'] : $channel['channel_hash']) ); - if(! $h) + if (!$h) return; - $synchubs = array(); + $synchubs = []; - foreach($h as $x) { - if($x['hubloc_host'] == \App::get_hostname()) + foreach ($h as $x) { + if ($x['hubloc_host'] == App::get_hostname()) continue; $y = q("select site_dead from site where site_url = '%s' limit 1", dbesc($x['hubloc_url']) ); - if((! $y) || ($y[0]['site_dead'] == 0)) + if ((!$y) || ($y[0]['site_dead'] == 0)) $synchubs[] = $x; } - if(! $synchubs) + if (!$synchubs) return; - $env_recips = [ $channel['channel_hash'] ]; + $env_recips = [$channel['channel_hash']]; - if($packet) - logger('packet: ' . print_r($packet, true),LOGGER_DATA, LOG_DEBUG); + if ($packet) + logger('packet: ' . print_r($packet, true), LOGGER_DATA, LOG_DEBUG); - $info = (($packet) ? $packet : array()); - $info['type'] = 'sync'; + $info = (($packet) ? $packet : []); + $info['type'] = 'sync'; $info['encoding'] = 'hz'; // note: not zot, this packet is very platform specific - $info['relocate'] = ['channel_address' => $channel['channel_address'], 'url' => z_root() ]; + $info['relocate'] = ['channel_address' => $channel['channel_address'], 'url' => z_root()]; - if(array_key_exists($uid,\App::$config) && array_key_exists('transient',\App::$config[$uid])) { - $settings = \App::$config[$uid]['transient']; - if($settings) { + if (array_key_exists($uid, App::$config) && array_key_exists('transient', App::$config[$uid])) { + $settings = App::$config[$uid]['transient']; + if ($settings) { $info['config'] = $settings; } } - if($channel) { - $info['channel'] = array(); - foreach($channel as $k => $v) { + if ($channel) { + $info['channel'] = []; + foreach ($channel as $k => $v) { // filter out any joined tables like xchan - if(strpos($k,'channel_') !== 0) + if (strpos($k, 'channel_') !== 0) continue; // don't pass these elements, they should not be synchronised $disallowed = [ - 'channel_id','channel_account_id','channel_primary','channel_address', - 'channel_deleted','channel_removed','channel_system' + 'channel_id', 'channel_account_id', 'channel_primary', 'channel_address', + 'channel_deleted', 'channel_removed', 'channel_system' ]; - if(! $keychange) { + if (!$keychange) { $disallowed[] = 'channel_prvkey'; } - if(in_array($k,$disallowed)) + if (in_array($k, $disallowed)) continue; $info['channel'][$k] = $v; } } - if($groups_changed) { + if ($groups_changed) { $r = q("select hash as collection, visible, deleted, gname as name from pgrp where uid = %d", intval($uid) ); - if($r) + if ($r) $info['collections'] = $r; $r = q("select pgrp.hash as collection, pgrp_member.xchan as member from pgrp left join pgrp_member on pgrp.id = pgrp_member.gid where pgrp_member.uid = %d", intval($uid) ); - if($r) + if ($r) $info['collection_members'] = $r; } - $interval = ((get_config('system','delivery_interval') !== false) - ? intval(get_config('system','delivery_interval')) : 2 ); + $interval = ((get_config('system', 'delivery_interval') !== false) + ? intval(get_config('system', 'delivery_interval')) : 2); - logger('Packet: ' . print_r($info,true), LOGGER_DATA, LOG_DEBUG); + logger('Packet: ' . print_r($info, true), LOGGER_DATA, LOG_DEBUG); $total = count($synchubs); - foreach($synchubs as $hub) { + foreach ($synchubs as $hub) { $hash = random_string(); - $n = Libzot::build_packet($channel,'sync',$env_recips,json_encode($info),'hz',$hub['hubloc_sitekey'],$hub['site_crypto']); - Queue::insert(array( + $n = Libzot::build_packet($channel, 'sync', $env_recips, json_encode($info), 'hz', $hub['hubloc_sitekey'], $hub['site_crypto']); + Queue::insert([ 'hash' => $hash, 'account_id' => $channel['channel_account_id'], 'channel_id' => $channel['channel_id'], @@ -153,29 +153,29 @@ class Libsync { 'driver' => $hub['hubloc_network'], 'notify' => $n, 'msg' => EMPTY_STR - )); + ]); $x = q("select count(outq_hash) as total from outq where outq_delivered = 0"); - if(intval($x[0]['total']) > intval(get_config('system','force_queue_threshold',3000))) { + if (intval($x[0]['total']) > intval(get_config('system', 'force_queue_threshold', 3000))) { logger('immediate delivery deferred.', LOGGER_DEBUG, LOG_INFO); Queue::update($hash); continue; } - \Zotlabs\Daemon\Master::Summon(array('Deliver', $hash)); + Master::Summon(['Deliver', $hash]); $total = $total - 1; - if($interval && $total) - @time_sleep_until(microtime(true) + (float) $interval); + if ($interval && $total) + @time_sleep_until(microtime(true) + (float)$interval); } } /** * @brief * - * @param array $sender + * @param string $sender * @param array $arr * @param array $deliveries * @return array @@ -187,16 +187,16 @@ class Libsync { $result = []; - $keychange = ((array_key_exists('keychange',$arr)) ? true : false); + $keychange = ((array_key_exists('keychange', $arr)) ? true : false); foreach ($deliveries as $d) { $r = q("select * from channel where channel_hash = '%s' limit 1", dbesc($sender) ); - $DR = new \Zotlabs\Lib\DReport(z_root(),$sender,$d,'sync'); + $DR = new DReport(z_root(), $sender, $d, 'sync'); - if (! $r) { + if (!$r) { $DR->update('recipient not found'); $result[] = $DR->get(); continue; @@ -206,153 +206,152 @@ class Libsync { $DR->set_name($channel['channel_name'] . ' <' . channel_reddress($channel) . '>'); - $max_friends = service_class_fetch($channel['channel_id'],'total_channels'); - $max_feeds = account_service_class_fetch($channel['channel_account_id'],'total_feeds'); + $max_friends = service_class_fetch($channel['channel_id'], 'total_channels'); + $max_feeds = account_service_class_fetch($channel['channel_account_id'], 'total_feeds'); - if($channel['channel_hash'] != $sender) { + if ($channel['channel_hash'] != $sender) { logger('Possible forgery. Sender ' . $sender . ' is not ' . $channel['channel_hash']); $DR->update('channel mismatch'); $result[] = $DR->get(); continue; } - if($keychange) { - self::keychange($channel,$arr); + if ($keychange) { + self::keychange($channel, $arr); continue; } // if the clone is active, so are we - if(substr($channel['channel_active'],0,10) !== substr(datetime_convert(),0,10)) { + if (substr($channel['channel_active'], 0, 10) !== substr(datetime_convert(), 0, 10)) { q("UPDATE channel set channel_active = '%s' where channel_id = %d", dbesc(datetime_convert()), intval($channel['channel_id']) ); } - if(array_key_exists('config',$arr) && is_array($arr['config']) && count($arr['config'])) { - foreach($arr['config'] as $cat => $k) { - foreach($arr['config'][$cat] as $k => $v) - set_pconfig($channel['channel_id'],$cat,$k,$v); + if (array_key_exists('config', $arr) && is_array($arr['config']) && count($arr['config'])) { + foreach ($arr['config'] as $cat => $k) { + foreach ($arr['config'][$cat] as $k => $v) + set_pconfig($channel['channel_id'], $cat, $k, $v); } } - if(array_key_exists('obj',$arr) && $arr['obj']) - sync_objs($channel,$arr['obj']); + if (array_key_exists('obj', $arr) && $arr['obj']) + sync_objs($channel, $arr['obj']); - if(array_key_exists('likes',$arr) && $arr['likes']) - import_likes($channel,$arr['likes']); + if (array_key_exists('likes', $arr) && $arr['likes']) + import_likes($channel, $arr['likes']); - if(array_key_exists('app',$arr) && $arr['app']) - sync_apps($channel,$arr['app']); + if (array_key_exists('app', $arr) && $arr['app']) + sync_apps($channel, $arr['app']); - if(array_key_exists('addressbook',$arr) && $arr['addressbook']) - sync_addressbook($channel,$arr['addressbook']); + if (array_key_exists('addressbook', $arr) && $arr['addressbook']) + sync_addressbook($channel, $arr['addressbook']); - if(array_key_exists('calendar',$arr) && $arr['calendar']) - sync_calendar($channel,$arr['calendar']); + if (array_key_exists('calendar', $arr) && $arr['calendar']) + sync_calendar($channel, $arr['calendar']); - if(array_key_exists('chatroom',$arr) && $arr['chatroom']) - sync_chatrooms($channel,$arr['chatroom']); + if (array_key_exists('chatroom', $arr) && $arr['chatroom']) + sync_chatrooms($channel, $arr['chatroom']); - if(array_key_exists('conv',$arr) && $arr['conv']) - import_conv($channel,$arr['conv']); + if (array_key_exists('conv', $arr) && $arr['conv']) + import_conv($channel, $arr['conv']); - if(array_key_exists('mail',$arr) && $arr['mail']) - sync_mail($channel,$arr['mail']); + if (array_key_exists('mail', $arr) && $arr['mail']) + sync_mail($channel, $arr['mail']); - if(array_key_exists('event',$arr) && $arr['event']) - sync_events($channel,$arr['event']); + if (array_key_exists('event', $arr) && $arr['event']) + sync_events($channel, $arr['event']); - if(array_key_exists('event_item',$arr) && $arr['event_item']) - sync_items($channel,$arr['event_item'],((array_key_exists('relocate',$arr)) ? $arr['relocate'] : null)); + if (array_key_exists('event_item', $arr) && $arr['event_item']) + sync_items($channel, $arr['event_item'], ((array_key_exists('relocate', $arr)) ? $arr['relocate'] : null)); - if(array_key_exists('item',$arr) && $arr['item']) - sync_items($channel,$arr['item'],((array_key_exists('relocate',$arr)) ? $arr['relocate'] : null)); + if (array_key_exists('item', $arr) && $arr['item']) + sync_items($channel, $arr['item'], ((array_key_exists('relocate', $arr)) ? $arr['relocate'] : null)); // deprecated, maintaining for a few months for upward compatibility // this should sync webpages, but the logic is a bit subtle - if(array_key_exists('item_id',$arr) && $arr['item_id']) - sync_items($channel,$arr['item_id']); + if (array_key_exists('item_id', $arr) && $arr['item_id']) + sync_items($channel, $arr['item_id']); - if(array_key_exists('menu',$arr) && $arr['menu']) - sync_menus($channel,$arr['menu']); + if (array_key_exists('menu', $arr) && $arr['menu']) + sync_menus($channel, $arr['menu']); - if(array_key_exists('file',$arr) && $arr['file']) - sync_files($channel,$arr['file']); + if (array_key_exists('file', $arr) && $arr['file']) + sync_files($channel, $arr['file']); - if(array_key_exists('wiki',$arr) && $arr['wiki']) - sync_items($channel,$arr['wiki'],((array_key_exists('relocate',$arr)) ? $arr['relocate'] : null)); + if (array_key_exists('wiki', $arr) && $arr['wiki']) + sync_items($channel, $arr['wiki'], ((array_key_exists('relocate', $arr)) ? $arr['relocate'] : null)); - if(array_key_exists('channel',$arr) && is_array($arr['channel']) && count($arr['channel'])) { + if (array_key_exists('channel', $arr) && is_array($arr['channel']) && count($arr['channel'])) { - $remote_channel = $arr['channel']; + $remote_channel = $arr['channel']; $remote_channel['channel_id'] = $channel['channel_id']; - if(array_key_exists('channel_pageflags',$arr['channel']) && intval($arr['channel']['channel_pageflags'])) { + if (array_key_exists('channel_pageflags', $arr['channel']) && intval($arr['channel']['channel_pageflags'])) { // Several pageflags are site-specific and cannot be sync'd. // Only allow those bits which are shareable from the remote and then // logically OR with the local flags - $arr['channel']['channel_pageflags'] = $arr['channel']['channel_pageflags'] & (PAGE_HIDDEN|PAGE_AUTOCONNECT|PAGE_APPLICATION|PAGE_PREMIUM|PAGE_ADULT); + $arr['channel']['channel_pageflags'] = $arr['channel']['channel_pageflags'] & (PAGE_HIDDEN | PAGE_AUTOCONNECT | PAGE_APPLICATION | PAGE_PREMIUM | PAGE_ADULT); $arr['channel']['channel_pageflags'] = $arr['channel']['channel_pageflags'] | $channel['channel_pageflags']; } $disallowed = [ - 'channel_id', 'channel_account_id', 'channel_primary', 'channel_prvkey', - 'channel_address', 'channel_notifyflags', 'channel_removed', 'channel_deleted', - 'channel_system', 'channel_r_stream', 'channel_r_profile', 'channel_r_abook', - 'channel_r_storage', 'channel_r_pages', 'channel_w_stream', 'channel_w_wall', - 'channel_w_comment', 'channel_w_mail', 'channel_w_like', 'channel_w_tagwall', - 'channel_w_chat', 'channel_w_storage', 'channel_w_pages', 'channel_a_republish', + 'channel_id', 'channel_account_id', 'channel_primary', 'channel_prvkey', + 'channel_address', 'channel_notifyflags', 'channel_removed', 'channel_deleted', + 'channel_system', 'channel_r_stream', 'channel_r_profile', 'channel_r_abook', + 'channel_r_storage', 'channel_r_pages', 'channel_w_stream', 'channel_w_wall', + 'channel_w_comment', 'channel_w_mail', 'channel_w_like', 'channel_w_tagwall', + 'channel_w_chat', 'channel_w_storage', 'channel_w_pages', 'channel_a_republish', 'channel_a_delegate' ]; - $clean = array(); - foreach($arr['channel'] as $k => $v) { - if(in_array($k,$disallowed)) + $clean = []; + foreach ($arr['channel'] as $k => $v) { + if (in_array($k, $disallowed)) continue; $clean[$k] = $v; } - if(count($clean)) { - foreach($clean as $k => $v) { - $r = dbq("UPDATE channel set " . dbesc($k) . " = '" . dbesc($v) - . "' where channel_id = " . intval($channel['channel_id']) ); + if (count($clean)) { + foreach ($clean as $k => $v) { + dbq("UPDATE channel set " . dbesc($k) . " = '" . dbesc($v) . "' where channel_id = " . intval($channel['channel_id'])); } } } - if(array_key_exists('abook',$arr) && is_array($arr['abook']) && count($arr['abook'])) { + if (array_key_exists('abook', $arr) && is_array($arr['abook']) && count($arr['abook'])) { $total_friends = 0; - $total_feeds = 0; + $total_feeds = 0; $r = q("select abook_id, abook_feed from abook where abook_channel = %d", intval($channel['channel_id']) ); - if($r) { + if ($r) { // don't count yourself $total_friends = ((count($r) > 0) ? count($r) - 1 : 0); - foreach($r as $rr) - if(intval($rr['abook_feed'])) - $total_feeds ++; + foreach ($r as $rr) + if (intval($rr['abook_feed'])) + $total_feeds++; } - $disallowed = array('abook_id','abook_account','abook_channel','abook_rating','abook_rating_text','abook_not_here'); + $disallowed = ['abook_id', 'abook_account', 'abook_channel', 'abook_rating', 'abook_rating_text', 'abook_not_here']; $fields = db_columns('abook'); - foreach($arr['abook'] as $abook) { + foreach ($arr['abook'] as $abook) { $abconfig = null; - if(array_key_exists('abconfig',$abook) && is_array($abook['abconfig']) && count($abook['abconfig'])) + if (array_key_exists('abconfig', $abook) && is_array($abook['abconfig']) && count($abook['abconfig'])) $abconfig = $abook['abconfig']; - if(! array_key_exists('abook_blocked',$abook)) { + if (!array_key_exists('abook_blocked', $abook)) { // convert from redmatrix $abook['abook_blocked'] = (($abook['abook_flags'] & 0x0001) ? 1 : 0); $abook['abook_ignored'] = (($abook['abook_flags'] & 0x0002) ? 1 : 0); @@ -364,20 +363,20 @@ class Libsync { $abook['abook_feed'] = (($abook['abook_flags'] & 0x0100) ? 1 : 0); } - $clean = array(); - if($abook['abook_xchan'] && $abook['entry_deleted']) { + $clean = []; + if ($abook['abook_xchan'] && $abook['entry_deleted']) { logger('Removing abook entry for ' . $abook['abook_xchan']); $r = q("select abook_id, abook_feed from abook where abook_xchan = '%s' and abook_channel = %d and abook_self = 0 limit 1", dbesc($abook['abook_xchan']), intval($channel['channel_id']) ); - if($r) { - contact_remove($channel['channel_id'],$r[0]['abook_id']); - if($total_friends) - $total_friends --; - if(intval($r[0]['abook_feed'])) - $total_feeds --; + if ($r) { + contact_remove($channel['channel_id'], $r[0]['abook_id']); + if ($total_friends) + $total_friends--; + if (intval($r[0]['abook_feed'])) + $total_feeds--; } continue; } @@ -386,31 +385,31 @@ class Libsync { // This relies on the undocumented behaviour that red sites send xchan info with the abook // and import_author_xchan will look them up on all federated networks - if($abook['abook_xchan'] && $abook['xchan_addr']) { + if ($abook['abook_xchan'] && $abook['xchan_addr']) { $h = Libzot::get_hublocs($abook['abook_xchan']); - if(! $h) { + if (!$h) { $xhash = import_author_xchan(encode_item_xchan($abook)); - if(! $xhash) { + if (!$xhash) { logger('Import of ' . $abook['xchan_addr'] . ' failed.'); continue; } } } - foreach($abook as $k => $v) { - if(in_array($k,$disallowed) || (strpos($k,'abook') !== 0)) { + foreach ($abook as $k => $v) { + if (in_array($k, $disallowed) || (strpos($k, 'abook') !== 0)) { continue; } - if(! in_array($k,$fields)) { + if (!in_array($k, $fields)) { continue; } $clean[$k] = $v; } - if(! array_key_exists('abook_xchan',$clean)) + if (!array_key_exists('abook_xchan', $clean)) continue; - if(array_key_exists('abook_instance',$clean) && $clean['abook_instance'] && strpos($clean['abook_instance'],z_root()) === false) { + if (array_key_exists('abook_instance', $clean) && $clean['abook_instance'] && strpos($clean['abook_instance'], z_root()) === false) { $clean['abook_not_here'] = 1; } @@ -422,12 +421,12 @@ class Libsync { // make sure we have an abook entry for this xchan on this system - if(! $r) { - if($max_friends !== false && $total_friends > $max_friends) { + if (!$r) { + if ($max_friends !== false && $total_friends > $max_friends) { logger('total_channels service class limit exceeded'); continue; } - if($max_feeds !== false && intval($clean['abook_feed']) && $total_feeds > $max_feeds) { + if ($max_feeds !== false && intval($clean['abook_feed']) && $total_feeds > $max_feeds) { logger('total_feeds service class limit exceeded'); continue; } @@ -438,18 +437,16 @@ class Libsync { 'abook_channel' => $channel['channel_id'] ] ); - $total_friends ++; - if(intval($clean['abook_feed'])) - $total_feeds ++; + $total_friends++; + if (intval($clean['abook_feed'])) + $total_feeds++; } - if(count($clean)) { - foreach($clean as $k => $v) { - if($k == 'abook_dob') + if (count($clean)) { + foreach ($clean as $k => $v) { + if ($k == 'abook_dob') $v = dbescdate($v); - - $r = dbq("UPDATE abook set " . dbesc($k) . " = '" . dbesc($v) - . "' where abook_xchan = '" . dbesc($clean['abook_xchan']) . "' and abook_channel = " . intval($channel['channel_id'])); + dbq("UPDATE abook set " . dbesc($k) . " = '" . dbesc($v) . "' where abook_xchan = '" . dbesc($clean['abook_xchan']) . "' and abook_channel = " . intval($channel['channel_id'])); } } @@ -459,10 +456,10 @@ class Libsync { // translate_abook_perms_inbound($channel,$abook); - if($abconfig) { + if ($abconfig) { /// @fixme does not handle sync of del_abconfig - foreach($abconfig as $abc) { - set_abconfig($channel['channel_id'],$abc['xchan'],$abc['cat'],$abc['k'],$abc['v']); + foreach ($abconfig as $abc) { + set_abconfig($channel['channel_id'], $abc['xchan'], $abc['cat'], $abc['k'], $abc['v']); } } } @@ -470,21 +467,21 @@ class Libsync { // sync collections (privacy groups) oh joy... - if(array_key_exists('collections',$arr) && is_array($arr['collections']) && count($arr['collections'])) { + if (array_key_exists('collections', $arr) && is_array($arr['collections']) && count($arr['collections'])) { $x = q("select * from pgrp where uid = %d", intval($channel['channel_id']) ); - foreach($arr['collections'] as $cl) { + foreach ($arr['collections'] as $cl) { $found = false; - if($x) { - foreach($x as $y) { - if($cl['collection'] == $y['hash']) { + if ($x) { + foreach ($x as $y) { + if ($cl['collection'] == $y['hash']) { $found = true; break; } } - if($found) { - if(($y['gname'] != $cl['name']) + if ($found) { + if (($y['gname'] != $cl['name']) || ($y['visible'] != $cl['visible']) || ($y['deleted'] != $cl['deleted'])) { q("update pgrp set gname = '%s', visible = %d, deleted = %d where hash = '%s' and uid = %d", @@ -495,15 +492,15 @@ class Libsync { intval($channel['channel_id']) ); } - if(intval($cl['deleted']) && (! intval($y['deleted']))) { + if (intval($cl['deleted']) && (!intval($y['deleted']))) { q("delete from pgrp_member where gid = %d", intval($y['id']) ); } } } - if(! $found) { - $r = q("INSERT INTO pgrp ( hash, uid, visible, deleted, gname ) + if (!$found) { + q("INSERT INTO pgrp ( hash, uid, visible, deleted, gname ) VALUES( '%s', %d, %d, %d, '%s' ) ", dbesc($cl['collection']), intval($channel['channel_id']), @@ -517,16 +514,16 @@ class Libsync { // They need to be removed by marking deleted and removing the members. // This shouldn't happen except for clones created before this function was written. - if($x) { + if ($x) { $found_local = false; - foreach($x as $y) { - foreach($arr['collections'] as $cl) { - if($cl['collection'] == $y['hash']) { + foreach ($x as $y) { + foreach ($arr['collections'] as $cl) { + if ($cl['collection'] == $y['hash']) { $found_local = true; break; } } - if(! $found_local) { + if (!$found_local) { q("delete from pgrp_member where gid = %d", intval($y['id']) ); @@ -546,38 +543,38 @@ class Libsync { // now sync the members - if(array_key_exists('collection_members', $arr) + if (array_key_exists('collection_members', $arr) && is_array($arr['collection_members']) && count($arr['collection_members'])) { // first sort into groups keyed by the group hash - $members = array(); - foreach($arr['collection_members'] as $cm) { - if(! array_key_exists($cm['collection'],$members)) - $members[$cm['collection']] = array(); + $members = []; + foreach ($arr['collection_members'] as $cm) { + if (!array_key_exists($cm['collection'], $members)) + $members[$cm['collection']] = []; $members[$cm['collection']][] = $cm['member']; } // our group list is already synchronised - if($x) { - foreach($x as $y) { + if ($x) { + foreach ($x as $y) { // for each group, loop on members list we just received - if(isset($y['hash']) && isset($members[$y['hash']])) { - foreach($members[$y['hash']] as $member) { + if (isset($y['hash']) && isset($members[$y['hash']])) { + foreach ($members[$y['hash']] as $member) { $found = false; - $z = q("select xchan from pgrp_member where gid = %d and uid = %d and xchan = '%s' limit 1", + $z = q("select xchan from pgrp_member where gid = %d and uid = %d and xchan = '%s' limit 1", intval($y['id']), intval($channel['channel_id']), dbesc($member) ); - if($z) + if ($z) $found = true; // if somebody is in the group that wasn't before - add them - if(! $found) { + if (!$found) { q("INSERT INTO pgrp_member (uid, gid, xchan) VALUES( %d, %d, '%s' ) ", intval($channel['channel_id']), @@ -593,10 +590,10 @@ class Libsync { intval($y['id']), intval($channel['channel_id']) ); - if($m) { - foreach($m as $mm) { + if ($m) { + foreach ($m as $mm) { // if the local existing member isn't in the list we just received - remove them - if(! in_array($mm['xchan'],$members[$y['hash']])) { + if (!in_array($mm['xchan'], $members[$y['hash']])) { q("delete from pgrp_member where xchan = '%s' and gid = %d and uid = %d", dbesc($mm['xchan']), intval($y['id']), @@ -610,17 +607,17 @@ class Libsync { } } - if(array_key_exists('profile',$arr) && is_array($arr['profile']) && count($arr['profile'])) { + if (array_key_exists('profile', $arr) && is_array($arr['profile']) && count($arr['profile'])) { - $disallowed = array('id','aid','uid','guid'); + $disallowed = ['id', 'aid', 'uid', 'guid']; - foreach($arr['profile'] as $profile) { + foreach ($arr['profile'] as $profile) { $x = q("select * from profile where profile_guid = '%s' and uid = %d limit 1", dbesc($profile['profile_guid']), intval($channel['channel_id']) ); - if(! $x) { + if (!$x) { profile_store_lowlevel( [ 'aid' => $channel['channel_account_id'], @@ -633,24 +630,24 @@ class Libsync { dbesc($profile['profile_guid']), intval($channel['channel_id']) ); - if(! $x) + if (!$x) continue; } - $clean = array(); - foreach($profile as $k => $v) { - if(in_array($k,$disallowed)) + $clean = []; + foreach ($profile as $k => $v) { + if (in_array($k, $disallowed)) continue; - if($profile['is_default'] && in_array($k,['photo','thumb'])) + if ($profile['is_default'] && in_array($k, ['photo', 'thumb'])) continue; - if($k === 'name') + if ($k === 'name') $clean['fullname'] = $v; - elseif($k === 'with') + elseif ($k === 'with') $clean['partner'] = $v; - elseif($k === 'work') + elseif ($k === 'work') $clean['employment'] = $v; - elseif(array_key_exists($k,$x[0])) + elseif (array_key_exists($k, $x[0])) $clean[$k] = $v; /** @@ -658,7 +655,7 @@ class Libsync { * We also need to import local photos if a custom photo is selected */ - if((strpos($profile['thumb'],'/photo/profile/l/') !== false) || intval($profile['is_default'])) { + if ((strpos($profile['thumb'], '/photo/profile/l/') !== false) || intval($profile['is_default'])) { $profile['photo'] = z_root() . '/photo/profile/l/' . $channel['channel_id']; $profile['thumb'] = z_root() . '/photo/profile/m/' . $channel['channel_id']; } @@ -668,11 +665,11 @@ class Libsync { } } - if(count($clean)) { - foreach($clean as $k => $v) { - $r = dbq("UPDATE profile set " . TQUOT . dbesc($k) . TQUOT . " = '" . dbesc($v) - . "' where profile_guid = '" . dbesc($profile['profile_guid']) - . "' and uid = " . intval($channel['channel_id'])); + if (count($clean)) { + foreach ($clean as $k => $v) { + dbq("UPDATE profile set " . TQUOT . dbesc($k) . TQUOT . " = '" . dbesc($v) + . "' where profile_guid = '" . dbesc($profile['profile_guid']) + . "' and uid = " . intval($channel['channel_id'])); } } } @@ -687,7 +684,7 @@ class Libsync { */ call_hooks('process_channel_sync_delivery', $addon); - $DR = new \Zotlabs\Lib\DReport(z_root(),$d,$d,'sync','channel sync delivered'); + $DR = new DReport(z_root(), $d, $d, 'sync', 'channel sync delivered'); $DR->set_name($channel['channel_name'] . ' <' . channel_reddress($channel) . '>'); @@ -708,12 +705,12 @@ class Libsync { static function sync_locations($sender, $arr, $absolute = false) { - $ret = array(); + $ret = []; - if($arr['locations']) { + if ($arr['locations']) { - if($absolute) - Libzot::check_location_move($sender['hash'],$arr['locations']); + if ($absolute) + Libzot::check_location_move($sender['hash'], $arr['locations']); $xisting = q("select * from hubloc where hubloc_hash = '%s'", dbesc($sender['hash']) @@ -722,8 +719,8 @@ class Libsync { // See if a primary is specified $has_primary = false; - foreach($arr['locations'] as $location) { - if($location['primary']) { + foreach ($arr['locations'] as $location) { + if ($location['primary']) { $has_primary = true; break; } @@ -731,32 +728,32 @@ class Libsync { // Ensure that they have one primary hub - if(! $has_primary) + if (!$has_primary) $arr['locations'][0]['primary'] = true; - foreach($arr['locations'] as $location) { - if(! Libzot::verify($location['url'],$location['url_sig'],$sender['public_key'])) { + foreach ($arr['locations'] as $location) { + if (!Libzot::verify($location['url'], $location['url_sig'], $sender['public_key'])) { logger('Unable to verify site signature for ' . $location['url']); - $ret['message'] .= sprintf( t('Unable to verify site signature for %s'), $location['url']) . EOL; + $ret['message'] .= sprintf(t('Unable to verify site signature for %s'), $location['url']) . EOL; continue; } - for($x = 0; $x < count($xisting); $x ++) { - if(($xisting[$x]['hubloc_url'] === $location['url']) + for ($x = 0; $x < count($xisting); $x++) { + if (($xisting[$x]['hubloc_url'] === $location['url']) && ($xisting[$x]['hubloc_sitekey'] === $location['sitekey'])) { $xisting[$x]['updated'] = true; } } - if(! $location['sitekey']) { - logger('Empty hubloc sitekey. ' . print_r($location,true)); + if (!$location['sitekey']) { + logger('Empty hubloc sitekey. ' . print_r($location, true)); continue; } // Catch some malformed entries from the past which still exist - if(strpos($location['address'],'/') !== false) - $location['address'] = substr($location['address'],0,strpos($location['address'],'/')); + if (strpos($location['address'], '/') !== false) + $location['address'] = substr($location['address'], 0, strpos($location['address'], '/')); // match as many fields as possible in case anything at all changed. @@ -773,7 +770,7 @@ class Libsync { dbesc($location['callback']), dbesc($location['sitekey']) ); - if($r) { + if ($r) { logger('Hub exists: ' . $location['url'], LOGGER_DEBUG); // update connection timestamp if this is the site we're talking to @@ -781,9 +778,9 @@ class Libsync { $current_site = false; - $t = datetime_convert('UTC','UTC','now - 15 minutes'); + $t = datetime_convert('UTC', 'UTC', 'now - 15 minutes'); - if(array_key_exists('site',$arr) && $location['url'] == $arr['site']['url']) { + if (array_key_exists('site', $arr) && $location['url'] == $arr['site']['url']) { q("update hubloc set hubloc_connected = '%s', hubloc_updated = '%s' where hubloc_id = %d and hubloc_connected < '%s'", dbesc(datetime_convert()), dbesc(datetime_convert()), @@ -793,11 +790,11 @@ class Libsync { $current_site = true; } - if($current_site && intval($r[0]['hubloc_error'])) { + if ($current_site && intval($r[0]['hubloc_error'])) { q("update hubloc set hubloc_error = 0 where hubloc_id = %d", intval($r[0]['hubloc_id']) ); - if(intval($r[0]['hubloc_orphancheck'])) { + if (intval($r[0]['hubloc_orphancheck'])) { q("update hubloc set hubloc_orphancheck = 0 where hubloc_id = %d", intval($r[0]['hubloc_id']) ); @@ -808,60 +805,60 @@ class Libsync { } // Remove pure duplicates - if(count($r) > 1) { - for($h = 1; $h < count($r); $h ++) { + if (count($r) > 1) { + for ($h = 1; $h < count($r); $h++) { q("delete from hubloc where hubloc_id = %d", intval($r[$h]['hubloc_id']) ); - $what .= 'duplicate_hubloc_removed '; + $what .= 'duplicate_hubloc_removed '; $changed = true; } } - if(intval($r[0]['hubloc_primary']) && (! $location['primary'])) { - $m = q("update hubloc set hubloc_primary = 0, hubloc_updated = '%s' where hubloc_id_url = '%s'", + if (intval($r[0]['hubloc_primary']) && (!$location['primary'])) { + q("update hubloc set hubloc_primary = 0, hubloc_updated = '%s' where hubloc_id_url = '%s'", dbesc(datetime_convert()), dbesc($r[0]['hubloc_id_url']) ); $r[0]['hubloc_primary'] = intval($location['primary']); hubloc_change_primary($r[0]); - $what .= 'primary_hub '; + $what .= 'primary_hub '; $changed = true; } - elseif((! intval($r[0]['hubloc_primary'])) && ($location['primary'])) { - $m = q("update hubloc set hubloc_primary = 1, hubloc_updated = '%s' where hubloc_id = %d", + elseif ((!intval($r[0]['hubloc_primary'])) && ($location['primary'])) { + q("update hubloc set hubloc_primary = 1, hubloc_updated = '%s' where hubloc_id = %d", dbesc(datetime_convert()), intval($r[0]['hubloc_id']) ); // make sure hubloc_change_primary() has current data $r[0]['hubloc_primary'] = intval($location['primary']); hubloc_change_primary($r[0]); - $what .= 'primary_hub '; + $what .= 'primary_hub '; $changed = true; } - elseif($absolute) { + elseif ($absolute) { // Absolute sync - make sure the current primary is correctly reflected in the xchan $pr = hubloc_change_primary($r[0]); - if($pr) { - $what .= 'xchan_primary '; + if ($pr) { + $what .= 'xchan_primary '; $changed = true; } } - if(intval($r[0]['hubloc_deleted']) && (! intval($location['deleted']))) { - $n = q("update hubloc set hubloc_deleted = 0, hubloc_updated = '%s' where hubloc_id_url = '%s'", + if (intval($r[0]['hubloc_deleted']) && (!intval($location['deleted']))) { + q("update hubloc set hubloc_deleted = 0, hubloc_updated = '%s' where hubloc_id_url = '%s'", dbesc(datetime_convert()), dbesc($r[0]['hubloc_id_url']) ); - $what .= 'undelete_hub '; + $what .= 'undelete_hub '; $changed = true; } - elseif((! intval($r[0]['hubloc_deleted'])) && (intval($location['deleted']))) { + elseif ((!intval($r[0]['hubloc_deleted'])) && (intval($location['deleted']))) { logger('deleting hubloc: ' . $r[0]['hubloc_addr']); - $n = q("update hubloc set hubloc_deleted = 1, hubloc_updated = '%s' where hubloc_id_url = '%s'", + q("update hubloc set hubloc_deleted = 1, hubloc_updated = '%s' where hubloc_id_url = '%s'", dbesc(datetime_convert()), dbesc($r[0]['hubloc_id_url']) ); - $what .= 'delete_hub '; + $what .= 'delete_hub '; $changed = true; } continue; @@ -870,8 +867,8 @@ class Libsync { // Existing hubs are dealt with. Now let's process any new ones. // New hub claiming to be primary. Make it so by removing any existing primaries. - if(intval($location['primary'])) { - $r = q("update hubloc set hubloc_primary = 0, hubloc_updated = '%s' where hubloc_hash = '%s' and hubloc_primary = 1", + if (intval($location['primary'])) { + q("update hubloc set hubloc_primary = 0, hubloc_updated = '%s' where hubloc_hash = '%s' and hubloc_primary = 1", dbesc(datetime_convert()), dbesc($sender['hash']) ); @@ -879,7 +876,7 @@ class Libsync { logger('New hub: ' . $location['url']); - $r = hubloc_store_lowlevel( + hubloc_store_lowlevel( [ 'hubloc_guid' => $sender['id'], 'hubloc_guid_sig' => $sender['id_sig'], @@ -890,7 +887,7 @@ class Libsync { 'hubloc_primary' => intval($location['primary']), 'hubloc_url' => $location['url'], 'hubloc_url_sig' => $location['url_sig'], - 'hubloc_site_id' => Libzot::make_xchan_hash($location['url'],$location['sitekey']), + 'hubloc_site_id' => Libzot::make_xchan_hash($location['url'], $location['sitekey']), 'hubloc_host' => $location['host'], 'hubloc_callback' => $location['callback'], 'hubloc_sitekey' => $location['sitekey'], @@ -899,15 +896,15 @@ class Libsync { ] ); - $what .= 'newhub '; + $what .= 'newhub '; $changed = true; - if($location['primary']) { + if ($location['primary']) { $r = q("select * from hubloc where hubloc_addr = '%s' and hubloc_sitekey = '%s'", dbesc($location['address']), dbesc($location['sitekey']) ); - if($r) { + if ($r) { $r = Libzot::zot_record_preferred($r); hubloc_change_primary($r); } @@ -916,15 +913,15 @@ class Libsync { // get rid of any hubs we have for this channel which weren't reported. - if($absolute && $xisting) { - foreach($xisting as $x) { - if(! array_key_exists('updated',$x)) { + if ($absolute && $xisting) { + foreach ($xisting as $x) { + if (!array_key_exists('updated', $x)) { logger('Deleting unreferenced hub location ' . $x['hubloc_addr']); - $r = q("update hubloc set hubloc_deleted = 1, hubloc_updated = '%s' where hubloc_id_url = '%s'", + q("update hubloc set hubloc_deleted = 1, hubloc_updated = '%s' where hubloc_id_url = '%s'", dbesc(datetime_convert()), dbesc($x['hubloc_id_url']) ); - $what .= 'removed_hub '; + $what .= 'removed_hub '; $changed = true; } } @@ -935,22 +932,22 @@ class Libsync { } $ret['change_message'] = $what; - $ret['changed'] = $changed; + $ret['changed'] = $changed; return $ret; } - static function keychange($channel,$arr) { + static function keychange($channel, $arr) { // verify the keychange operation - if(! Libzot::verify($arr['channel']['channel_pubkey'],$arr['keychange']['new_sig'],$channel['channel_prvkey'])) { + if (!Libzot::verify($arr['channel']['channel_pubkey'], $arr['keychange']['new_sig'], $channel['channel_prvkey'])) { logger('sync keychange: verification failed'); return; } - $sig = Libzot::sign($channel['channel_guid'],$arr['channel']['channel_prvkey']); - $hash = Libzot::make_xchan_hash($channel['channel_guid'],$arr['channel']['channel_pubkey']); + $sig = Libzot::sign($channel['channel_guid'], $arr['channel']['channel_prvkey']); + $hash = Libzot::make_xchan_hash($channel['channel_guid'], $arr['channel']['channel_pubkey']); $r = q("update channel set channel_prvkey = '%s', channel_pubkey = '%s', channel_guid_sig = '%s', @@ -961,16 +958,16 @@ class Libsync { dbesc($hash), intval($channel['channel_id']) ); - if(! $r) { + if (!$r) { logger('keychange sync: channel update failed'); return; - } + } $r = q("select * from channel where channel_id = %d", intval($channel['channel_id']) ); - if(! $r) { + if (!$r) { logger('keychange sync: channel retrieve failed'); return; } @@ -982,11 +979,11 @@ class Libsync { dbesc(z_root()) ); - if($h) { - foreach($h as $hv) { + if ($h) { + foreach ($h as $hv) { $hv['hubloc_guid_sig'] = $sig; $hv['hubloc_hash'] = $hash; - $hv['hubloc_url_sig'] = Libzot::sign(z_root(),$channel['channel_prvkey']); + $hv['hubloc_url_sig'] = Libzot::sign(z_root(), $channel['channel_prvkey']); hubloc_store_lowlevel($hv); } } @@ -999,12 +996,12 @@ class Libsync { dbesc($hash) ); - if(($x) && (! $check)) { + if (($x) && (!$check)) { $oldxchan = $x[0]; - foreach($x as $xv) { - $xv['xchan_guid_sig'] = $sig; - $xv['xchan_hash'] = $hash; - $xv['xchan_pubkey'] = $channel['channel_pubkey']; + foreach ($x as $xv) { + $xv['xchan_guid_sig'] = $sig; + $xv['xchan_hash'] = $hash; + $xv['xchan_pubkey'] = $channel['channel_pubkey']; xchan_store_lowlevel($xv); $newxchan = $xv; } @@ -1014,14 +1011,14 @@ class Libsync { dbesc($arr['keychange']['old_hash']) ); - if($a) { + if ($a) { q("update abook set abook_xchan = '%s' where abook_id = %d", dbesc($hash), intval($a[0]['abook_id']) ); } - xchan_change_key($oldxchan,$newxchan,$arr['keychange']); + xchan_change_key($oldxchan, $newxchan, $arr['keychange']); } diff --git a/Zotlabs/Lib/Libzot.php b/Zotlabs/Lib/Libzot.php index 4bfd8c3fd..6aa49c5a7 100644 --- a/Zotlabs/Lib/Libzot.php +++ b/Zotlabs/Lib/Libzot.php @@ -34,7 +34,7 @@ class Libzot { */ static function new_uid($channel_nick) { $rawstr = z_root() . '/' . $channel_nick . '.' . mt_rand(); - return(base64url_encode(hash('whirlpool', $rawstr, true), true)); + return (base64url_encode(hash('whirlpool', $rawstr, true), true)); } @@ -87,7 +87,7 @@ class Libzot { * packet type: one of 'ping', 'pickup', 'purge', 'refresh', 'keychange', 'force_refresh', 'notify', 'auth_check' * @param array $recipients * envelope recipients, array of portable_id's; empty for public posts - * @param string $msg + * @param array $msg * optional message * @param string $encoding * optional encoding, default 'activitystreams' @@ -98,15 +98,15 @@ class Libzot { * optional comma separated list of encryption methods @ref best_algorithm() * @returns string json encoded zot packet */ - static function build_packet($channel, $type = 'activity', $recipients = null, $msg = '', $encoding = 'activitystreams', $remote_key = null, $methods = '') { + static function build_packet($channel, $type = 'activity', $recipients = null, $msg = [], $encoding = 'activitystreams', $remote_key = null, $methods = '') { - $sig_method = get_config('system','signature_algorithm','sha256'); + $sig_method = get_config('system', 'signature_algorithm', 'sha256'); $data = [ 'type' => $type, 'encoding' => $encoding, 'sender' => $channel['channel_hash'], - 'site_id' => self::make_xchan_hash(z_root(), get_config('system','pubkey')), + 'site_id' => self::make_xchan_hash(z_root(), get_config('system', 'pubkey')), 'version' => System::get_zot_revision(), ]; @@ -116,8 +116,8 @@ class Libzot { if ($msg) { $actor = channel_url($channel); - if ($encoding === 'activitystreams' && array_key_exists('actor',$msg) && is_string($msg['actor']) && $actor === $msg['actor']) { - $msg = JSalmon::sign($msg,$actor,$channel['channel_prvkey']); + if ($encoding === 'activitystreams' && array_key_exists('actor', $msg) && is_string($msg['actor']) && $actor === $msg['actor']) { + $msg = JSalmon::sign($msg, $actor, $channel['channel_prvkey']); } $data['data'] = $msg; } @@ -125,12 +125,12 @@ class Libzot { unset($data['encoding']); } - logger('packet: ' . print_r($data,true), LOGGER_DATA, LOG_DEBUG); + logger('packet: ' . print_r($data, true), LOGGER_DATA, LOG_DEBUG); if ($remote_key) { $algorithm = self::best_algorithm($methods); if ($algorithm) { - $data = crypto_encapsulate(json_encode($data),$remote_key, $algorithm); + $data = Crypto::encapsulate(json_encode($data), $remote_key, $algorithm); } } @@ -143,14 +143,14 @@ class Libzot { * * @param string $methods * Comma separated list of encryption methods - * @return string first match from our site method preferences crypto_methods() array + * @return string first match from our site method preferences Crypto::methods() array * of a method which is common to both sites; or 'aes256cbc' if no matches are found. */ static function best_algorithm($methods) { $x = [ 'methods' => $methods, - 'result' => '' + 'result' => '' ]; /** @@ -161,18 +161,18 @@ class Libzot { */ call_hooks('zot_best_algorithm', $x); - if($x['result']) + if ($x['result']) return $x['result']; - if($methods) { + if ($methods) { $x = explode(',', $methods); - if($x) { - $y = crypto_methods(); - if($y) { - foreach($y as $yv) { + if ($x) { + $y = Crypto::methods(); + if ($y) { + foreach ($y as $yv) { $yv = trim($yv); - if(in_array($yv, $x)) { - return($yv); + if (in_array($yv, $x)) { + return ($yv); } } } @@ -186,17 +186,17 @@ class Libzot { /** * @brief Send a zot message. * - * @see z_post_url() - * * @param string $url - * @param array $data + * @param string $data * @param array $channel (required if using zot6 delivery) * @param array $crypto (required if encrypted httpsig, requires hubloc_sitekey and site_crypto elements) * @return array see z_post_url() for returned data format + * @see z_post_url() + * */ - static function zot($url, $data, $channel = null,$crypto = null) { + static function zot($url, $data, $channel = null, $crypto = null) { - if($channel) { + if ($channel) { $headers = [ 'X-Zot-Token' => random_string(), 'Digest' => HTTPSig::generate_digest_header($data), @@ -204,8 +204,8 @@ class Libzot { '(request-target)' => 'post ' . get_request_string($url) ]; - $h = HTTPSig::create_sig($headers,$channel['channel_prvkey'],channel_url($channel),false,'sha512', - (($crypto) ? [ 'key' => $crypto['hubloc_sitekey'], 'algorithm' => self::best_algorithm($crypto['site_crypto']) ] : false)); + $h = HTTPSig::create_sig($headers, $channel['channel_prvkey'], channel_url($channel), false, 'sha512', + (($crypto) ? ['key' => $crypto['hubloc_sitekey'], 'algorithm' => self::best_algorithm($crypto['site_crypto'])] : false)); } else { $h = []; @@ -213,7 +213,7 @@ class Libzot { $redirects = 0; - return z_post_url($url,$data,$redirects,((empty($h)) ? [] : [ 'headers' => $h ])); + return z_post_url($url, $data, $redirects, ((empty($h)) ? [] : ['headers' => $h])); } @@ -237,7 +237,7 @@ class Libzot { * * @param array $them => xchan structure of sender * @param array $channel => local channel structure of target recipient, required for "friending" operations - * @param array $force (optional) default false + * @param boolean $force (optional) default false * * @return boolean * * \b true if successful @@ -245,9 +245,9 @@ class Libzot { */ static function refresh($them, $channel = null, $force = false) { - logger('them: ' . print_r($them,true), LOGGER_DATA, LOG_DEBUG); + logger('them: ' . print_r($them, true), LOGGER_DATA, LOG_DEBUG); if ($channel) - logger('channel: ' . print_r($channel,true), LOGGER_DATA, LOG_DEBUG); + logger('channel: ' . print_r($channel, true), LOGGER_DATA, LOG_DEBUG); $url = null; @@ -261,12 +261,12 @@ class Libzot { // We'll order by reverse id to try and pick off the newest one first and hopefully end up with the // correct hubloc. If this doesn't work we may have to re-write this section to try them all. - if(array_key_exists('xchan_addr',$them) && $them['xchan_addr']) { + if (array_key_exists('xchan_addr', $them) && $them['xchan_addr']) { $r = q("select hubloc_id_url, hubloc_primary from hubloc where hubloc_addr = '%s' and hubloc_network = 'zot6' order by hubloc_id desc", dbesc($them['xchan_addr']) ); } - if(! $r) { + if (!$r) { $r = q("select hubloc_id_url, hubloc_primary from hubloc where hubloc_hash = '%s' order by hubloc_id desc", dbesc($them['xchan_hash']) ); @@ -275,16 +275,16 @@ class Libzot { if ($r) { foreach ($r as $rr) { if (intval($rr['hubloc_primary'])) { - $url = $rr['hubloc_id_url']; + $url = $rr['hubloc_id_url']; $record = $rr; } } - if (! $url) { + if (!$url) { $url = $r[0]['hubloc_id_url']; } } } - if (! $url) { + if (!$url) { logger('zot_refresh: no url'); return false; } @@ -293,64 +293,64 @@ class Libzot { dbesc($url) ); - if($s && intval($s[0]['site_dead']) && (! $force)) { + if ($s && intval($s[0]['site_dead']) && (!$force)) { logger('zot_refresh: site ' . $url . ' is marked dead and force flag is not set. Cancelling operation.'); return false; } - $record = Zotfinger::exec($url,$channel); + $record = Zotfinger::exec($url, $channel); // Check the HTTP signature $hsig = $record['signature']; - if($hsig && $hsig['signer'] === $url && $hsig['header_valid'] === true && $hsig['content_valid'] === true) + if ($hsig && $hsig['signer'] === $url && $hsig['header_valid'] === true && $hsig['content_valid'] === true) $hsig_valid = true; - if(! $hsig_valid) { - logger('http signature not valid: ' . print_r($hsig,true)); + if (!$hsig_valid) { + logger('http signature not valid: ' . print_r($hsig, true)); return false; } - logger('zot-info: ' . print_r($record,true), LOGGER_DATA, LOG_DEBUG); + logger('zot-info: ' . print_r($record, true), LOGGER_DATA, LOG_DEBUG); $x = self::import_xchan($record['data'], (($force) ? UPDATE_FLAGS_FORCED : UPDATE_FLAGS_UPDATED)); - if(! $x['success']) + if (!$x['success']) return false; - if($channel && $record['data']['permissions']) { - $permissions = explode(',',$record['data']['permissions']); + if ($channel && $record['data']['permissions']) { + $permissions = explode(',', $record['data']['permissions']); - if($permissions && is_array($permissions)) { - $old_read_stream_perm = get_abconfig($channel['channel_id'],$x['hash'],'their_perms','view_stream'); + if ($permissions && is_array($permissions)) { + $old_read_stream_perm = get_abconfig($channel['channel_id'], $x['hash'], 'their_perms', 'view_stream'); $permissions = Permissions::FilledPerms($permissions); - foreach($permissions as $k => $v) { - set_abconfig($channel['channel_id'],$x['hash'],'their_perms',$k,$v); + foreach ($permissions as $k => $v) { + set_abconfig($channel['channel_id'], $x['hash'], 'their_perms', $k, $v); } } - if(array_key_exists('profile',$record['data']) && array_key_exists('next_birthday',$record['data']['profile'])) { - $next_birthday = datetime_convert('UTC','UTC',$record['data']['profile']['next_birthday']); + if (array_key_exists('profile', $record['data']) && array_key_exists('next_birthday', $record['data']['profile'])) { + $next_birthday = datetime_convert('UTC', 'UTC', $record['data']['profile']['next_birthday']); } else { $next_birthday = NULL_DATE; } - $profile_assign = get_pconfig($channel['channel_id'],'system','profile_assign',''); + $profile_assign = get_pconfig($channel['channel_id'], 'system', 'profile_assign', ''); // Keep original perms to check if we need to notify them - $previous_perms = get_all_perms($channel['channel_id'],$x['hash']); + $previous_perms = get_all_perms($channel['channel_id'], $x['hash']); $r = q("select * from abook where abook_xchan = '%s' and abook_channel = %d and abook_self = 0 limit 1", dbesc($x['hash']), intval($channel['channel_id']) ); - if($r) { + if ($r) { // connection exists @@ -358,7 +358,7 @@ class Libzot { // we have as we may have updated the year after sending a notification; and resetting // to the one we just received would cause us to create duplicated events. - if(substr($r[0]['abook_dob'],5) == substr($next_birthday,5)) + if (substr($r[0]['abook_dob'], 5) == substr($next_birthday, 5)) $next_birthday = $r[0]['abook_dob']; $y = q("update abook set abook_dob = '%s' @@ -369,30 +369,30 @@ class Libzot { intval($channel['channel_id']) ); - if(! $y) + if (!$y) logger('abook update failed'); else { // if we were just granted read stream permission and didn't have it before, try to pull in some posts - if((! $old_read_stream_perm) && (intval($permissions['view_stream']))) - Master::Summon([ 'Onepoll', $r[0]['abook_id'] ]); + if ((!$old_read_stream_perm) && (intval($permissions['view_stream']))) + Master::Summon(['Onepoll', $r[0]['abook_id']]); } } else { - $p = Permissions::connect_perms($channel['channel_id']); + $p = Permissions::connect_perms($channel['channel_id']); $my_perms = $p['perms']; $automatic = $p['automatic']; // new connection - if($my_perms) { - foreach($my_perms as $k => $v) { - set_abconfig($channel['channel_id'],$x['hash'],'my_perms',$k,$v); + if ($my_perms) { + foreach ($my_perms as $k => $v) { + set_abconfig($channel['channel_id'], $x['hash'], 'my_perms', $k, $v); } } - $closeness = get_pconfig($channel['channel_id'],'system','new_abook_closeness',80); + $closeness = get_pconfig($channel['channel_id'], 'system', 'new_abook_closeness', 80); $y = abook_store_lowlevel( [ @@ -408,9 +408,9 @@ class Libzot { ] ); - if($y) { + if ($y) { logger("New introduction received for {$channel['channel_name']}"); - $new_perms = get_all_perms($channel['channel_id'],$x['hash'],false); + $new_perms = get_all_perms($channel['channel_id'], $x['hash'], false); // Send a clone sync packet and a permissions update if permissions have changed @@ -419,45 +419,45 @@ class Libzot { intval($channel['channel_id']) ); - if($new_connection) { - if(! Permissions::PermsCompare($new_perms,$previous_perms)) - Master::Summon([ 'Notifier', 'permission_create', $new_connection[0]['abook_id'] ]); + if ($new_connection) { + if (!Permissions::PermsCompare($new_perms, $previous_perms)) + Master::Summon(['Notifier', 'permission_create', $new_connection[0]['abook_id']]); Enotify::submit( [ - 'type' => NOTIFY_INTRO, - 'from_xchan' => $x['hash'], - 'to_xchan' => $channel['channel_hash'], - 'link' => z_root() . '/connedit/' . $new_connection[0]['abook_id'] + 'type' => NOTIFY_INTRO, + 'from_xchan' => $x['hash'], + 'to_xchan' => $channel['channel_hash'], + 'link' => z_root() . '/connedit/' . $new_connection[0]['abook_id'] ] ); - if(intval($permissions['view_stream'])) { - if(intval(get_pconfig($channel['channel_id'],'perm_limits','send_stream') & PERMS_PENDING) - || (! intval($new_connection[0]['abook_pending']))) - Master::Summon([ 'Onepoll', $new_connection[0]['abook_id'] ]); + if (intval($permissions['view_stream'])) { + if (intval(get_pconfig($channel['channel_id'], 'perm_limits', 'send_stream') & PERMS_PENDING) + || (!intval($new_connection[0]['abook_pending']))) + Master::Summon(['Onepoll', $new_connection[0]['abook_id']]); } // If there is a default group for this channel, add this connection to it // for pending connections this will happens at acceptance time. - if(! intval($new_connection[0]['abook_pending'])) { + if (!intval($new_connection[0]['abook_pending'])) { $default_group = $channel['channel_default_group']; - if($default_group) { - $g = Group::rec_byhash($channel['channel_id'],$default_group); - if($g) - Group::member_add($channel['channel_id'],'',$x['hash'],$g['id']); + if ($default_group) { + $g = Group::rec_byhash($channel['channel_id'], $default_group); + if ($g) + Group::member_add($channel['channel_id'], '', $x['hash'], $g['id']); } } unset($new_connection[0]['abook_id']); unset($new_connection[0]['abook_account']); unset($new_connection[0]['abook_channel']); - $abconfig = load_abconfig($channel['channel_id'],$new_connection['abook_xchan']); - if($abconfig) + $abconfig = load_abconfig($channel['channel_id'], $new_connection['abook_xchan']); + if ($abconfig) $new_connection['abconfig'] = $abconfig; - Libsync::build_sync_packet($channel['channel_id'], array('abook' => $new_connection)); + Libsync::build_sync_packet($channel['channel_id'], ['abook' => $new_connection]); } } @@ -489,9 +489,9 @@ class Libzot { static function gethub($arr, $multiple = false) { - if($arr['id'] && $arr['id_sig'] && $arr['location'] && $arr['location_sig']) { + if ($arr['id'] && $arr['id_sig'] && $arr['location'] && $arr['location_sig']) { - if(! check_siteallowed($arr['location'])) { + if (!check_siteallowed($arr['location'])) { logger('blacklisted site: ' . $arr['location']); return null; } @@ -509,12 +509,12 @@ class Libzot { dbesc($arr['location_sig']), dbesc($arr['site_id']) ); - if($r) { + if ($r) { logger('Found', LOGGER_DEBUG); return (($multiple) ? $r : $r[0]); } } - logger('Not found: ' . print_r($arr,true), LOGGER_DEBUG); + logger('Not found: ' . print_r($arr, true), LOGGER_DEBUG); return false; } @@ -532,16 +532,16 @@ class Libzot { dbesc($sender), dbesc($site_id) ); - if(! $r) { + if (!$r) { return null; } - if(! check_siteallowed($r[0]['hubloc_url'])) { + if (!check_siteallowed($r[0]['hubloc_url'])) { logger('blacklisted site: ' . $r[0]['hubloc_url']); return null; } - if(! check_channelallowed($r[0]['hubloc_hash'])) { + if (!check_channelallowed($r[0]['hubloc_hash'])) { logger('blacklisted channel: ' . $r[0]['hubloc_hash']); return null; } @@ -567,9 +567,9 @@ class Libzot { $hsig_valid = false; - $result = [ 'success' => false ]; + $result = ['success' => false]; - if(! $id) { + if (!$id) { return $result; } @@ -578,16 +578,16 @@ class Libzot { // Check the HTTP signature $hsig = $record['signature']; - if($hsig['signer'] === $id && $hsig['header_valid'] === true && $hsig['content_valid'] === true) { + if ($hsig['signer'] === $id && $hsig['header_valid'] === true && $hsig['content_valid'] === true) { $hsig_valid = true; } - if(! $hsig_valid) { - logger('http signature not valid: ' . print_r($hsig,true)); + if (!$hsig_valid) { + logger('http signature not valid: ' . print_r($hsig, true)); return $result; } $c = self::import_xchan($record['data']); - if($c['success']) { + if ($c['success']) { $result['success'] = true; } else { @@ -625,26 +625,26 @@ class Libzot { */ call_hooks('import_xchan', $arr); - $ret = array('success' => false); - $dirmode = intval(get_config('system','directory_mode')); + $ret = ['success' => false]; + $dirmode = intval(get_config('system', 'directory_mode')); $changed = false; - $what = ''; + $what = ''; - if(! ($arr['id'] && $arr['id_sig'])) { - logger('No identity information provided. ' . print_r($arr,true)); + if (!($arr['id'] && $arr['id_sig'])) { + logger('No identity information provided. ' . print_r($arr, true)); return $ret; } - $xchan_hash = self::make_xchan_hash($arr['id'],$arr['public_key']); + $xchan_hash = self::make_xchan_hash($arr['id'], $arr['public_key']); $arr['hash'] = $xchan_hash; $import_photos = false; - $sig_methods = ((array_key_exists('signing',$arr) && is_array($arr['signing'])) ? $arr['signing'] : [ 'sha256' ]); - $verified = false; + $sig_methods = ((array_key_exists('signing', $arr) && is_array($arr['signing'])) ? $arr['signing'] : ['sha256']); + $verified = false; - if(! self::verify($arr['id'],$arr['id_sig'],$arr['public_key'])) { + if (!self::verify($arr['id'], $arr['id_sig'], $arr['public_key'])) { logger('Unable to verify channel signature for ' . $arr['address']); return $ret; } @@ -652,7 +652,7 @@ class Libzot { $verified = true; } - if(! $verified) { + if (!$verified) { $ret['message'] = t('Unable to verify channel signature'); return $ret; } @@ -663,40 +663,39 @@ class Libzot { dbesc($xchan_hash) ); - if(! array_key_exists('connect_url', $arr)) + if (!array_key_exists('connect_url', $arr)) $arr['connect_url'] = ''; - if($r) { - if($arr['photo'] && array_key_exists('updated',$arr['photo']) && $r[0]['xchan_photo_date'] != $arr['photo']['updated']) { + if ($r) { + if ($arr['photo'] && array_key_exists('updated', $arr['photo']) && $arr['photo']['updated'] > $r[0]['xchan_photo_date']) $import_photos = true; - } // if we import an entry from a site that's not ours and either or both of us is off the grid - hide the entry. /** @TODO: check if we're the same directory realm, which would mean we are allowed to see it */ - $dirmode = get_config('system','directory_mode'); + $dirmode = get_config('system', 'directory_mode'); - if((($arr['site']['directory_mode'] === 'standalone') || ($dirmode & DIRECTORY_MODE_STANDALONE)) && ($arr['site']['url'] != z_root())) + if ((($arr['site']['directory_mode'] === 'standalone') || ($dirmode & DIRECTORY_MODE_STANDALONE)) && ($arr['site']['url'] != z_root())) $arr['searchable'] = false; $hidden = (1 - intval($arr['searchable'])); $hidden_changed = $adult_changed = $deleted_changed = $pubforum_changed = 0; - if(intval($r[0]['xchan_hidden']) != (1 - intval($arr['searchable']))) + if (intval($r[0]['xchan_hidden']) != (1 - intval($arr['searchable']))) $hidden_changed = 1; - if(intval($r[0]['xchan_selfcensored']) != intval($arr['adult_content'])) + if (intval($r[0]['xchan_selfcensored']) != intval($arr['adult_content'])) $adult_changed = 1; - if(intval($r[0]['xchan_deleted']) != intval($arr['deleted'])) + if (intval($r[0]['xchan_deleted']) != intval($arr['deleted'])) $deleted_changed = 1; // new style 6-MAR-2019 - if(array_key_exists('channel_type',$arr)) { - if($arr['channel_type'] === 'collection') { + if (array_key_exists('channel_type', $arr)) { + if ($arr['channel_type'] === 'collection') { // do nothing at this time. } - elseif($arr['channel_type'] === 'group') { + elseif ($arr['channel_type'] === 'group') { $arr['public_forum'] = 1; } else { @@ -706,27 +705,27 @@ class Libzot { // old style - if(intval($r[0]['xchan_pubforum']) != intval($arr['public_forum'])) + if (intval($r[0]['xchan_pubforum']) != intval($arr['public_forum'])) $pubforum_changed = 1; - if($arr['protocols']) { - $protocols = implode(',',$arr['protocols']); - if($protocols !== 'zot6') { - set_xconfig($xchan_hash,'system','protocols',$protocols); + if ($arr['protocols']) { + $protocols = implode(',', $arr['protocols']); + if ($protocols !== 'zot6') { + set_xconfig($xchan_hash, 'system', 'protocols', $protocols); } else { - del_xconfig($xchan_hash,'system','protocols'); + del_xconfig($xchan_hash, 'system', 'protocols'); } } - if(($r[0]['xchan_name_date'] != $arr['name_updated']) + if (($r[0]['xchan_name_date'] != $arr['name_updated']) || ($r[0]['xchan_connurl'] != $arr['primary_location']['connections_url']) || ($r[0]['xchan_addr'] != $arr['primary_location']['address']) || ($r[0]['xchan_follow'] != $arr['primary_location']['follow_url']) || ($r[0]['xchan_connpage'] != $arr['connect_url']) || ($r[0]['xchan_url'] != $arr['primary_location']['url']) - || $hidden_changed || $adult_changed || $deleted_changed || $pubforum_changed ) { + || $hidden_changed || $adult_changed || $deleted_changed || $pubforum_changed) { $rup = q("update xchan set xchan_name = '%s', xchan_name_date = '%s', xchan_connurl = '%s', xchan_follow = '%s', xchan_connpage = '%s', xchan_hidden = %d, xchan_selfcensored = %d, xchan_deleted = %d, xchan_pubforum = %d, xchan_addr = '%s', xchan_url = '%s' where xchan_hash = '%s'", @@ -744,18 +743,18 @@ class Libzot { dbesc($xchan_hash) ); - logger('Update: existing: ' . print_r($r[0],true), LOGGER_DATA, LOG_DEBUG); - logger('Update: new: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG); - $what .= 'xchan '; + logger('Update: existing: ' . print_r($r[0], true), LOGGER_DATA, LOG_DEBUG); + logger('Update: new: ' . print_r($arr, true), LOGGER_DATA, LOG_DEBUG); + $what .= 'xchan '; $changed = true; } } else { $import_photos = true; - if((($arr['site']['directory_mode'] === 'standalone') + if ((($arr['site']['directory_mode'] === 'standalone') || ($dirmode & DIRECTORY_MODE_STANDALONE)) - && ($arr['site']['url'] != z_root())) + && ($arr['site']['url'] != z_root())) $arr['searchable'] = false; $x = xchan_store_lowlevel( @@ -764,8 +763,8 @@ class Libzot { 'xchan_guid' => $arr['id'], 'xchan_guid_sig' => $arr['id_sig'], 'xchan_pubkey' => $arr['public_key'], - 'xchan_photo_mimetype' => $arr['photo_mimetype'], - 'xchan_photo_l' => $arr['photo'], + 'xchan_photo_mimetype' => $arr['photo']['type'], + 'xchan_photo_l' => $arr['photo']['url'], 'xchan_addr' => escape_tags($arr['primary_location']['address']), 'xchan_url' => escape_tags($arr['primary_location']['url']), 'xchan_connurl' => $arr['primary_location']['connections_url'], @@ -773,7 +772,7 @@ class Libzot { 'xchan_connpage' => $arr['connect_url'], 'xchan_name' => (($arr['name']) ? escape_tags($arr['name']) : '-'), 'xchan_network' => 'zot6', - 'xchan_photo_date' => $arr['photo_updated'], + 'xchan_photo_date' => $arr['photo']['updated'], 'xchan_name_date' => $arr['name_updated'], 'xchan_hidden' => intval(1 - intval($arr['searchable'])), 'xchan_selfcensored' => $arr['adult_content'], @@ -782,11 +781,11 @@ class Libzot { ] ); - $what .= 'new_xchan'; + $what .= 'new_xchan'; $changed = true; } - if($import_photos) { + if ($import_photos) { require_once('include/photo/photo_driver.php'); @@ -795,13 +794,16 @@ class Libzot { $local = q("select channel_account_id, channel_id from channel where channel_hash = '%s' limit 1", dbesc($xchan_hash) ); - if($local) { - $ph = z_fetch_url($arr['photo']['url'], true); - if($ph['success']) { + if ($local) { + + $ph = false; + if (strpos($arr['photo']['url'], z_root()) === false) + $ph = z_fetch_url($arr['photo']['url'], true); + if ($ph['success']) { $hash = import_channel_photo($ph['body'], $arr['photo']['type'], $local[0]['channel_account_id'], $local[0]['channel_id']); - if($hash) { + if ($hash) { // unless proven otherwise $is_default_profile = 1; @@ -809,13 +811,13 @@ class Libzot { intval($local[0]['channel_account_id']), intval($local[0]['channel_id']) ); - if($profile) { - if(! intval($profile[0]['is_default'])) + if ($profile) { + if (!intval($profile[0]['is_default'])) $is_default_profile = 0; } // If setting for the default profile, unset the profile photo flag from any other photos I own - if($is_default_profile) { + if ($is_default_profile) { q("UPDATE photo SET photo_usage = %d WHERE photo_usage = %d AND resource_id != '%s' AND aid = %d AND uid = %d", intval(PHOTO_NORMAL), intval(PHOTO_PROFILE), @@ -827,20 +829,20 @@ class Libzot { } // reset the names in case they got messed up when we had a bug in this function - $photos = array( + $photos = [ z_root() . '/photo/profile/l/' . $local[0]['channel_id'], z_root() . '/photo/profile/m/' . $local[0]['channel_id'], z_root() . '/photo/profile/s/' . $local[0]['channel_id'], $arr['photo_mimetype'], false - ); + ]; } } else { $photos = import_xchan_photo($arr['photo']['url'], $xchan_hash); } - if($photos) { - if($photos[4]) { + if ($photos) { + if ($photos[4]) { // importing the photo failed somehow. Leave the photo_date alone so we can try again at a later date. // This often happens when somebody joins the matrix with a bad cert. $r = q("update xchan set xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' @@ -855,7 +857,7 @@ class Libzot { else { $r = q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' where xchan_hash = '%s'", - dbescdate(datetime_convert('UTC','UTC',$arr['photo_updated'])), + dbescdate(datetime_convert('UTC', 'UTC', $arr['photo_updated'])), dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), @@ -863,7 +865,7 @@ class Libzot { dbesc($xchan_hash) ); } - $what .= 'photo '; + $what .= 'photo '; $changed = true; } } @@ -873,12 +875,12 @@ class Libzot { $s = Libsync::sync_locations($arr, $arr); - if($s) { - if($s['change_message']) + if ($s) { + if ($s['change_message']) $what .= $s['change_message']; - if($s['changed']) + if ($s['changed']) $changed = $s['changed']; - if($s['message']) + if ($s['message']) $ret['message'] .= $s['message']; } @@ -890,24 +892,24 @@ class Libzot { // Are we a directory server of some kind? $other_realm = false; - $realm = get_directory_realm(); - if(array_key_exists('site',$arr) - && array_key_exists('realm',$arr['site']) - && (strpos($arr['site']['realm'],$realm) === false)) + $realm = get_directory_realm(); + if (array_key_exists('site', $arr) + && array_key_exists('realm', $arr['site']) + && (strpos($arr['site']['realm'], $realm) === false)) $other_realm = true; - if($dirmode != DIRECTORY_MODE_NORMAL) { + if ($dirmode != DIRECTORY_MODE_NORMAL) { // We're some kind of directory server. However we can only add directory information // if the entry is in the same realm (or is a sub-realm). Sub-realms are denoted by // including the parent realm in the name. e.g. 'RED_GLOBAL:foo' would allow an entry to // be in directories for the local realm (foo) and also the RED_GLOBAL realm. - if(array_key_exists('profile',$arr) && is_array($arr['profile']) && (! $other_realm)) { - $profile_changed = Libzotdir::import_directory_profile($xchan_hash,$arr['profile'],$address,$ud_flags, 1); - if($profile_changed) { - $what .= 'profile '; + if (array_key_exists('profile', $arr) && is_array($arr['profile']) && (!$other_realm)) { + $profile_changed = Libzotdir::import_directory_profile($xchan_hash, $arr['profile'], $address, $ud_flags, 1); + if ($profile_changed) { + $what .= 'profile '; $changed = true; } } @@ -923,20 +925,20 @@ class Libzot { } } - if(array_key_exists('site',$arr) && is_array($arr['site'])) { + if (array_key_exists('site', $arr) && is_array($arr['site'])) { $profile_changed = self::import_site($arr['site']); - if($profile_changed) { - $what .= 'site '; + if ($profile_changed) { + $what .= 'site '; $changed = true; } } - if(($changed) || ($ud_flags == UPDATE_FLAGS_FORCED)) { + if (($changed) || ($ud_flags == UPDATE_FLAGS_FORCED)) { $guid = random_string() . '@' . \App::get_hostname(); - Libzotdir::update_modtime($xchan_hash,$guid,$address,$ud_flags); - logger('Changed: ' . $what,LOGGER_DEBUG); + Libzotdir::update_modtime($xchan_hash, $guid, $address, $ud_flags); + logger('Changed: ' . $what, LOGGER_DEBUG); } - elseif(! $ud_flags) { + elseif (!$ud_flags) { // nothing changed but we still need to update the updates record q("update updates set ud_flags = ( ud_flags | %d ) where ud_addr = '%s' and not (ud_flags & %d) > 0 ", intval(UPDATE_FLAGS_UPDATED), @@ -945,12 +947,12 @@ class Libzot { ); } - if(! x($ret,'message')) { + if (!x($ret, 'message')) { $ret['success'] = true; - $ret['hash'] = $xchan_hash; + $ret['hash'] = $xchan_hash; } - logger('Result: ' . print_r($ret,true), LOGGER_DATA, LOG_DEBUG); + logger('Result: ' . print_r($ret, true), LOGGER_DATA, LOG_DEBUG); return $ret; } @@ -967,32 +969,32 @@ class Libzot { */ static function process_response($hub, $arr, $outq) { - logger('remote: ' . print_r($arr,true),LOGGER_DATA); + logger('remote: ' . print_r($arr, true), LOGGER_DATA); - if(! $arr['success']) { + if (!$arr['success']) { logger('Failed: ' . $hub); return; } $x = json_decode($arr['body'], true); - if(! $x) { + if (!$x) { logger('No json from ' . $hub); logger('Headers: ' . print_r($arr['header'], true), LOGGER_DATA, LOG_DEBUG); } - $x = crypto_unencapsulate($x, get_config('system','prvkey')); + $x = Crypto::unencapsulate($x, get_config('system', 'prvkey')); - if(! is_array($x)) { - $x = json_decode($x,true); + if (!is_array($x)) { + $x = json_decode($x, true); } - if(! is_array($x)) { + if (!is_array($x)) { btlogger('failed communication - no response'); } - if($x) { - if(! $x['success']) { + if ($x) { + if (!$x['success']) { // handle remote validation issues @@ -1003,18 +1005,18 @@ class Libzot { ); } - if(is_array($x) && array_key_exists('delivery_report',$x) && is_array($x['delivery_report'])) { + if (is_array($x) && array_key_exists('delivery_report', $x) && is_array($x['delivery_report'])) { - foreach($x['delivery_report'] as $xx) { - call_hooks('dreport_process',$xx); - if(is_array($xx) && array_key_exists('message_id',$xx) && DReport::is_storable($xx)) { + foreach ($x['delivery_report'] as $xx) { + call_hooks('dreport_process', $xx); + if (is_array($xx) && array_key_exists('message_id', $xx) && DReport::is_storable($xx)) { // legacy recipients add a space and their name to the xchan. split those if true. $legacy_recipient = strpos($xx['recipient'], ' '); - if($legacy_recipient !== false) { + if ($legacy_recipient !== false) { $legacy_recipient_parts = explode(' ', $xx['recipient'], 2); - $xx['recipient'] = $legacy_recipient_parts[0]; - $xx['name'] = $legacy_recipient_parts[1]; + $xx['recipient'] = $legacy_recipient_parts[0]; + $xx['name'] = $legacy_recipient_parts[1]; } q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_name, dreport_result, dreport_time, dreport_xchan ) values ( '%s', '%s', '%s','%s','%s','%s','%s' ) ", @@ -1023,7 +1025,7 @@ class Libzot { dbesc($xx['recipient']), dbesc($xx['name']), dbesc($xx['status']), - dbesc(datetime_convert('UTC','UTC',$xx['date'])), + dbesc(datetime_convert('UTC', 'UTC', $xx['date'])), dbesc($xx['sender']) ); } @@ -1046,10 +1048,10 @@ class Libzot { // synchronous message types are handled immediately // async messages remain in the queue until processed. - if(intval($outq['outq_async'])) - Queue::remove($outq['outq_hash'],$outq['outq_channel']); + if (intval($outq['outq_async'])) + Queue::remove($outq['outq_hash'], $outq['outq_channel']); - logger('zot_process_response: ' . print_r($x,true), LOGGER_DEBUG); + logger('zot_process_response: ' . print_r($x, true), LOGGER_DEBUG); } /** @@ -1067,16 +1069,16 @@ class Libzot { * If everything checks out on the remote end, we will receive back a packet containing one or more messages, * which will be processed and delivered before this function ultimately returns. * - * @see zot_import() - * * @param array $arr * decrypted and json decoded notify packet from remote site * @return array from zot_import() + * @see zot_import() + * */ static function fetch($arr) { - logger('zot_fetch: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG); + logger('zot_fetch: ' . print_r($arr, true), LOGGER_DATA, LOG_DEBUG); return self::import($arr); @@ -1101,15 +1103,15 @@ class Libzot { */ static function import($arr) { - $env = $arr; + $env = $arr; $private = false; - $return = []; + $return = []; $result = null; - logger('Notify: ' . print_r($env,true), LOGGER_DATA, LOG_DEBUG); + logger('Notify: ' . print_r($env, true), LOGGER_DATA, LOG_DEBUG); - if(! is_array($env)) { + if (!is_array($env)) { logger('decode error'); return; } @@ -1117,59 +1119,59 @@ class Libzot { $message_request = false; - $has_data = array_key_exists('data',$env) && $env['data']; - $data = (($has_data) ? $env['data'] : false); + $has_data = array_key_exists('data', $env) && $env['data']; + $data = (($has_data) ? $env['data'] : false); $AS = null; - if($env['encoding'] === 'activitystreams') { + if ($env['encoding'] === 'activitystreams') { - $AS = new ActivityStreams($data); - if(! $AS->is_valid()) { - logger('Activity rejected: ' . print_r($data,true)); - return; - } - if (is_array($AS->obj)) { - $arr = Activity::decode_note($AS); - } - else { - $arr = []; - } + $AS = new ActivityStreams($data); + if (!$AS->is_valid()) { + logger('Activity rejected: ' . print_r($data, true)); + return; + } + if (is_array($AS->obj)) { + $arr = Activity::decode_note($AS); + } + else { + $arr = []; + } - logger($AS->debug(),LOGGER_DATA); + logger($AS->debug(), LOGGER_DATA); } $deliveries = null; - if(array_key_exists('recipients',$env) && count($env['recipients'])) { + if (array_key_exists('recipients', $env) && count($env['recipients'])) { logger('specific recipients'); - logger('recipients: ' . print_r($env['recipients'],true),LOGGER_DEBUG); + logger('recipients: ' . print_r($env['recipients'], true), LOGGER_DEBUG); $recip_arr = []; - foreach($env['recipients'] as $recip) { - $recip_arr[] = $recip; + foreach ($env['recipients'] as $recip) { + $recip_arr[] = $recip; } $r = false; - if($recip_arr) { - stringify_array_elms($recip_arr,true); - $recips = implode(',',$recip_arr); - $r = q("select channel_hash as hash from channel where channel_hash in ( " . $recips . " ) and channel_removed = 0 "); + if ($recip_arr) { + stringify_array_elms($recip_arr, true); + $recips = implode(',', $recip_arr); + $r = q("select channel_hash as hash from channel where channel_hash in ( " . $recips . " ) and channel_removed = 0 "); } - if(! $r) { + if (!$r) { logger('recips: no recipients on this site'); return; } // Response messages will inherit the privacy of the parent - if($env['type'] !== 'response') + if ($env['type'] !== 'response') $private = true; - $deliveries = ids_to_array($r,'hash'); + $deliveries = ids_to_array($r, 'hash'); // We found somebody on this site that's in the recipient list. } @@ -1182,33 +1184,33 @@ class Libzot { // and who are allowed to see them based on the sender's permissions // @fixme; - $deliveries = self::public_recips($env,$AS); + $deliveries = self::public_recips($env, $AS); } $deliveries = array_unique($deliveries); - if(! $deliveries) { + if (!$deliveries) { logger('No deliveries on this site'); return; } - if($has_data) { + if ($has_data) { - if(in_array($env['type'],['activity','response'])) { + if (in_array($env['type'], ['activity', 'response'])) { $r = q("select hubloc_hash, hubloc_network from hubloc where hubloc_id_url = '%s' ", dbesc($AS->actor['id']) ); - if($r) { + if ($r) { // selects a zot6 hash if available, otherwise use whatever we have - $r = self::zot_record_preferred($r); + $r = self::zot_record_preferred($r); $arr['author_xchan'] = $r['hubloc_hash']; } - if (! $arr['author_xchan']) { + if (!$arr['author_xchan']) { logger('No author!'); return; } @@ -1218,43 +1220,47 @@ class Libzot { ); // in individual delivery, change owner if needed - if($s) { + if ($s) { $arr['owner_xchan'] = $s[0]['hubloc_hash']; } else { $arr['owner_xchan'] = $env['sender']; } - if ($private && (! intval($arr['item_private']))) { + if ($private && (!intval($arr['item_private']))) { $arr['item_private'] = 1; } if ($arr['mid'] === $arr['parent_mid']) { - if (is_array($AS->obj) && array_key_exists('commentPolicy',$AS->obj)) { - $p = strstr($AS->obj['commentPolicy'],'until='); - if($p !== false) { - $arr['comments_closed'] = datetime_convert('UTC','UTC', substr($p,6)); - $arr['comment_policy'] = trim(str_replace($p,'',$AS->obj['commentPolicy'])); + if (is_array($AS->obj) && array_key_exists('commentPolicy', $AS->obj)) { + $p = strstr($AS->obj['commentPolicy'], 'until='); + if ($p !== false) { + $comments_closed_at = datetime_convert('UTC', 'UTC', substr($p, 6)); + if ($comments_closed_at === $arr['created']) { + $arr['item_nocomment'] = 1; + } + else { + $arr['comments_closed'] = $comments_closed_at; + $arr['comment_policy'] = trim(str_replace($p, '', $AS->obj['commentPolicy'])); + } } else { - $arr['comment_policy'] = $AS->obj['commentPolicy']; + $arr['comment_policy'] = $AS->obj['commentPolicy']; } } } - - /// @FIXME - spoofable - if($AS->data['hubloc']) { + if ($AS->data['hubloc']) { $arr['item_verified'] = true; - if (! array_key_exists('comment_policy',$arr)) { + if (!array_key_exists('comment_policy', $arr)) { // set comment policy depending on source hub. Unknown or osada is ActivityPub. // Anything else we'll say is zot - which could have a range of project names $s = q("select site_project from site where site_url = '%s' limit 1", dbesc($r[0]['hubloc_url']) ); - if ((! $s) || (in_array($s[0]['site_project'],[ '', 'osada' ]))) { + if ((!$s) || (in_array($s[0]['site_project'], ['', 'osada']))) { $arr['comment_policy'] = 'authenticated'; } else { @@ -1262,28 +1268,32 @@ class Libzot { } } } - if($AS->data['signed_data']) { - IConfig::Set($arr,'activitystreams','signed_data',$AS->data['signed_data'],false); + + if ($AS->data['signed_data']) { + IConfig::Set($arr, 'activitypub', 'signed_data', $AS->data['signed_data'], false); + $j = json_decode($AS->data['signed_data'], true); + if ($j) { + IConfig::Set($arr, 'activitypub', 'rawmsg', json_encode(JSalmon::unpack($j['data'])), true); + } } + logger('Activity received: ' . print_r($arr, true), LOGGER_DATA, LOG_DEBUG); + logger('Activity recipients: ' . print_r($deliveries, true), LOGGER_DATA, LOG_DEBUG); - logger('Activity received: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG); - logger('Activity recipients: ' . print_r($deliveries,true), LOGGER_DATA, LOG_DEBUG); + $relay = (($env['type'] === 'response') ? true : false); - $relay = (($env['type'] === 'response') ? true : false ); - - $result = self::process_delivery($env['sender'],$AS,$arr,$deliveries,$relay,false,$message_request); + $result = self::process_delivery($env['sender'], $AS, $arr, $deliveries, $relay, false, $message_request); } - elseif($env['type'] === 'sync') { + elseif ($env['type'] === 'sync') { // $arr = get_channelsync_elements($data); - $arr = json_decode($data,true); + $arr = json_decode($data, true); - logger('Channel sync received: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG); - logger('Channel sync recipients: ' . print_r($deliveries,true), LOGGER_DATA, LOG_DEBUG); + logger('Channel sync received: ' . print_r($arr, true), LOGGER_DATA, LOG_DEBUG); + logger('Channel sync recipients: ' . print_r($deliveries, true), LOGGER_DATA, LOG_DEBUG); if ($env['encoding'] === 'hz') { - $result = Libsync::process_channel_sync_delivery($env['sender'],$arr,$deliveries); + $result = Libsync::process_channel_sync_delivery($env['sender'], $arr, $deliveries); } else { logger('sync packet type not supported.'); @@ -1305,15 +1315,15 @@ class Libzot { * @return boolean */ static function is_top_level($env, $act) { - if($env['encoding'] === 'zot' && array_key_exists('flags',$env) && in_array('thread_parent', $env['flags'])) { + if ($env['encoding'] === 'zot' && array_key_exists('flags', $env) && in_array('thread_parent', $env['flags'])) { return true; } - if($act) { - if(in_array($act->type, ['Like','Dislike'])) { + if ($act) { + if (in_array($act->type, ['Like', 'Dislike'])) { return false; } - $x = self::find_parent($env,$act); - if($x === $act->id || $x === $act->obj['id']) { + $x = self::find_parent($env, $act); + if ($x === $act->id || $x === $act->obj['id']) { return true; } } @@ -1321,12 +1331,12 @@ class Libzot { } - static function find_parent($env,$act) { - if($act) { - if(in_array($act->type, ['Like','Dislike'])) { + static function find_parent($env, $act) { + if ($act) { + if (in_array($act->type, ['Like', 'Dislike'])) { return $act->obj['id']; } - if($act->parent_id) { + if ($act->parent_id) { return $act->parent_id; } } @@ -1355,58 +1365,57 @@ class Libzot { require_once('include/channel.php'); $check_mentions = false; - $include_sys = false; + $include_sys = false; - if($msg['type'] === 'activity') { - $disable_discover_tab = get_config('system','disable_discover_tab') || get_config('system','disable_discover_tab') === false; - if(! $disable_discover_tab) + if ($msg['type'] === 'activity') { + $disable_discover_tab = get_config('system', 'disable_discover_tab') || get_config('system', 'disable_discover_tab') === false; + if (!$disable_discover_tab) $include_sys = true; $perm = 'send_stream'; - if(self::is_top_level($msg,$act)) { + if (self::is_top_level($msg, $act)) { $check_mentions = true; } } - elseif($msg['type'] === 'mail') + elseif ($msg['type'] === 'mail') $perm = 'post_mail'; $r = []; $c = q("select channel_id, channel_hash from channel where channel_removed = 0"); - if($c) { - foreach($c as $cc) { - if(perm_is_allowed($cc['channel_id'],$msg['sender'],$perm)) { + if ($c) { + foreach ($c as $cc) { + if (perm_is_allowed($cc['channel_id'], $msg['sender'], $perm)) { $r[] = $cc['channel_hash']; } } } - if($include_sys) { + if ($include_sys) { $sys = get_sys_channel(); - if($sys) + if ($sys) $r[] = $sys['channel_hash']; } - // look for any public mentions on this site // They will get filtered by tgroup_check() so we don't need to check permissions now - if($check_mentions) { + if ($check_mentions) { // It's a top level post. Look at the tags. See if any of them are mentions and are on this hub. - if($act && $act->obj) { - if(is_array($act->obj['tag']) && $act->obj['tag']) { - foreach($act->obj['tag'] as $tag) { - if($tag['type'] === 'Mention' && (strpos($tag['href'],z_root()) !== false)) { + if ($act && $act->obj) { + if (is_array($act->obj['tag']) && $act->obj['tag']) { + foreach ($act->obj['tag'] as $tag) { + if ($tag['type'] === 'Mention' && (strpos($tag['href'], z_root()) !== false)) { $address = basename($tag['href']); - if($address) { + if ($address) { $z = q("select channel_hash as hash from channel where channel_address = '%s' and channel_removed = 0 limit 1", dbesc($address) ); - if($z) { + if ($z) { $r[] = $z[0]['hash']; } } @@ -1420,15 +1429,15 @@ class Libzot { // everybody that stored a copy of the parent. This way we know we're covered. We'll check the // comment permissions when we deliver them. - $thread_parent = self::find_parent($msg,$act); + $thread_parent = self::find_parent($msg, $act); - if($thread_parent) { + if ($thread_parent) { $z = q("select channel_hash as hash from channel left join item on channel.channel_id = item.uid where ( item.thr_parent = '%s' OR item.parent_mid = '%s' ) ", dbesc($thread_parent), dbesc($thread_parent) ); - if($z) { - foreach($z as $zv) { + if ($z) { + foreach ($z as $zv) { $r[] = $zv['hash']; } } @@ -1438,11 +1447,11 @@ class Libzot { // There are probably a lot of duplicates in $r at this point. We need to filter those out. // It's a bit of work since it's a multi-dimensional array - if($r) { + if ($r) { $r = array_values(array_unique($r)); } - logger('public_recips: ' . print_r($r,true), LOGGER_DATA, LOG_DEBUG); + logger('public_recips: ' . print_r($r, true), LOGGER_DATA, LOG_DEBUG); return $r; } @@ -1465,22 +1474,22 @@ class Libzot { // We've validated the sender. Now make sure that the sender is the owner or author - if(! $public) { - if($sender != $arr['owner_xchan'] && $sender != $arr['author_xchan']) { + if (!$public) { + if ($sender != $arr['owner_xchan'] && $sender != $arr['author_xchan']) { logger("Sender $sender is not owner {$arr['owner_xchan']} or author {$arr['author_xchan']} - mid {$arr['mid']}"); return; } } - foreach($deliveries as $d) { + foreach ($deliveries as $d) { $local_public = $public; - $DR = new DReport(z_root(),$sender,$d,$arr['mid']); + $DR = new DReport(z_root(), $sender, $d, $arr['mid']); $channel = channelx_by_hash($d); - if (! $channel) { + if (!$channel) { $DR->update('recipient not found'); $result[] = $DR->get(); continue; @@ -1488,16 +1497,16 @@ class Libzot { $DR->set_name($channel['channel_name'] . ' <' . channel_reddress($channel) . '>'); - if(($act) && ($act->obj) && (! is_array($act->obj))) { + if (($act) && ($act->obj) && (!is_array($act->obj))) { // The initial object fetch failed using the sys channel credentials. // Try again using the delivery channel credentials. // We will also need to re-parse the $item array, // but preserve any values that were set during anonymous parsing. - $o = Activity::fetch($act->obj,$channel); - if($o) { + $o = Activity::fetch($act->obj, $channel); + if ($o) { $act->obj = $o; - $arr = array_merge(Activity::decode_note($act),$arr); + $arr = array_merge(Activity::decode_note($act), $arr); } else { @@ -1516,7 +1525,7 @@ class Libzot { * access checks. */ - if($sender === $channel['channel_hash'] && $arr['author_xchan'] === $channel['channel_hash'] && $arr['mid'] === $arr['parent_mid']) { + if ($sender === $channel['channel_hash'] && $arr['author_xchan'] === $channel['channel_hash'] && $arr['mid'] === $arr['parent_mid']) { $DR->update('self delivery ignored'); $result[] = $DR->get(); continue; @@ -1526,32 +1535,31 @@ class Libzot { // for comments travelling upstream. Wait and catch them on the way down. // They may have been blocked by the owner. - if(intval($channel['channel_system']) && (! $arr['item_private']) && (! $relay)) { + if (intval($channel['channel_system']) && (!$arr['item_private']) && (!$relay)) { $local_public = true; $r = q("select xchan_selfcensored from xchan where xchan_hash = '%s' limit 1", dbesc($sender) ); // don't import sys channel posts from selfcensored authors - if($r && (intval($r[0]['xchan_selfcensored']))) { + if ($r && (intval($r[0]['xchan_selfcensored']))) { $local_public = false; continue; } - if(! MessageFilter::evaluate($arr,get_config('system','pubstream_incl'),get_config('system','pubstream_excl'))) { + if (!MessageFilter::evaluate($arr, get_config('system', 'pubstream_incl'), get_config('system', 'pubstream_excl'))) { $local_public = false; continue; } } - $tag_delivery = tgroup_check($channel['channel_id'],$arr); - - $perm = 'send_stream'; - if(($arr['mid'] !== $arr['parent_mid']) && ($relay)) + $tag_delivery = tgroup_check($channel['channel_id'], $arr); + $perm = 'send_stream'; + if (($arr['mid'] !== $arr['parent_mid']) && ($relay)) $perm = 'post_comments'; // This is our own post, possibly coming from a channel clone - if($arr['owner_xchan'] == $d) { + if ($arr['owner_xchan'] == $d) { $arr['item_wall'] = 1; } else { @@ -1560,15 +1568,15 @@ class Libzot { $friendofriend = false; - if ((! $tag_delivery) && (! $local_public)) { - $allowed = (perm_is_allowed($channel['channel_id'],$sender,$perm)); - if((! $allowed) && $perm === 'post_comments') { + if ((!$tag_delivery) && (!$local_public)) { + $allowed = (perm_is_allowed($channel['channel_id'], $sender, $perm)); + if (!$allowed) { $parent = q("select * from item where mid = '%s' and uid = %d limit 1", dbesc($arr['parent_mid']), intval($channel['channel_id']) ); if ($parent) { - $allowed = can_comment_on_post($sender,$parent[0]); + $allowed = can_comment_on_post($sender, $parent[0]); } } @@ -1588,7 +1596,7 @@ class Libzot { // doesn't exist. if ($perm === 'send_stream') { - if (get_pconfig($channel['channel_id'],'system','hyperdrive',false) || $arr['verb'] === ACTIVITY_SHARE) { + if (get_pconfig($channel['channel_id'], 'system', 'hyperdrive', false) || $arr['verb'] === ACTIVITY_SHARE) { $allowed = true; } } @@ -1599,7 +1607,7 @@ class Libzot { $friendofriend = true; } - if (! $allowed) { + if (!$allowed) { logger("permission denied for delivery to channel {$channel['channel_id']} {$channel['channel_address']}"); $DR->update('permission denied'); $result[] = $DR->get(); @@ -1609,7 +1617,7 @@ class Libzot { // logger('item: ' . print_r($arr,true), LOGGER_DATA); - if($arr['mid'] !== $arr['parent_mid']) { + if ($arr['mid'] !== $arr['parent_mid']) { logger('checking source: "' . $arr['mid'] . '" != "' . $arr['parent_mid'] . '"'); @@ -1624,7 +1632,7 @@ class Libzot { intval($channel['channel_id']) ); - if(! $r) { + if (!$r) { $DR->update('comment parent not found'); $result[] = $DR->get(); @@ -1639,9 +1647,9 @@ class Libzot { // the top level post is unlikely to be imported and // this is just an exercise in futility. - if((! $relay) && (! $request) && (! $local_public) - && perm_is_allowed($channel['channel_id'],$sender,'send_stream')) { - self::fetch_conversation($channel,$arr['parent_mid']); + if ((!$relay) && (!$request) && (!$local_public) + && perm_is_allowed($channel['channel_id'], $sender, 'send_stream')) { + self::fetch_conversation($channel, $arr['parent_mid']); } continue; } @@ -1650,13 +1658,13 @@ class Libzot { // route checking doesn't work correctly here because we've changed the privacy $r[0]['route'] = EMPTY_STR; // If this is a poll response, convert the obj_type to our (internal-only) "Answer" type - if ($arr['obj_type'] === ACTIVITY_OBJ_COMMENT && $arr['title'] && (! $arr['body'])) { + if ($arr['obj_type'] === ACTIVITY_OBJ_COMMENT && $arr['title'] && (!$arr['body'])) { $arr['obj_type'] = 'Answer'; } } - if($relay || $friendofriend || (intval($r[0]['item_private']) === 0 && intval($arr['item_private']) === 0)) { + if ($relay || $friendofriend || (intval($r[0]['item_private']) === 0 && intval($arr['item_private']) === 0)) { // reset the route in case it travelled a great distance upstream // use our parent's route so when we go back downstream we'll match // with whatever route our parent has. @@ -1664,7 +1672,7 @@ class Libzot { // but we are now getting comments via listener delivery // and if there is no privacy on this or the parent, we don't care about the route, // so just set the owner and route accordingly. - $arr['route'] = $r[0]['route']; + $arr['route'] = $r[0]['route']; $arr['owner_xchan'] = $r[0]['owner_xchan']; } else { @@ -1676,24 +1684,24 @@ class Libzot { // Always accept empty routes and firehose items (route contains 'undefined') . $existing_route = explode(',', $r[0]['route']); - $routes = count($existing_route); - if($routes) { - $last_hop = array_pop($existing_route); - $last_prior_route = implode(',',$existing_route); + $routes = count($existing_route); + if ($routes) { + $last_hop = array_pop($existing_route); + $last_prior_route = implode(',', $existing_route); } else { - $last_hop = ''; + $last_hop = ''; $last_prior_route = ''; } - if(in_array('undefined',$existing_route) || $last_hop == 'undefined' || $sender == 'undefined') + if (in_array('undefined', $existing_route) || $last_hop == 'undefined' || $sender == 'undefined') $last_hop = ''; $current_route = (($arr['route']) ? $arr['route'] . ',' : '') . $sender; - if($last_hop && $last_hop != $sender) { + if ($last_hop && $last_hop != $sender) { logger('comment route mismatch: parent route = ' . $r[0]['route'] . ' expected = ' . $current_route, LOGGER_DEBUG); - logger('comment route mismatch: parent msg = ' . $r[0]['id'],LOGGER_DEBUG); + logger('comment route mismatch: parent msg = ' . $r[0]['id'], LOGGER_DEBUG); $DR->update('comment route mismatch'); $result[] = $DR->get(); continue; @@ -1706,16 +1714,16 @@ class Libzot { } } - $ab = q("select * from abook where abook_channel = %d and abook_xchan = '%s'", + $ab = q("select * from abook where abook_channel = %d and abook_xchan = '%s'", intval($channel['channel_id']), dbesc($arr['owner_xchan']) ); $abook = (($ab) ? $ab[0] : null); - if(intval($arr['item_deleted'])) { + if (intval($arr['item_deleted'])) { // remove_community_tag is a no-op if this isn't a community tag activity - self::remove_community_tag($sender,$arr,$channel['channel_id']); + self::remove_community_tag($sender, $arr, $channel['channel_id']); // set these just in case we need to store a fresh copy of the deleted post. // This could happen if the delete got here before the original post did. @@ -1723,13 +1731,13 @@ class Libzot { $arr['aid'] = $channel['channel_account_id']; $arr['uid'] = $channel['channel_id']; - $item_id = self::delete_imported_item($sender,$act,$arr,$channel['channel_id'],$relay); + $item_id = self::delete_imported_item($sender, $act, $arr, $channel['channel_id'], $relay); $DR->update(($item_id) ? 'deleted' : 'delete_failed'); $result[] = $DR->get(); - if($relay && $item_id) { + if ($relay && $item_id) { logger('process_delivery: invoking relay'); - Master::Summon([ 'Notifier', 'relay', intval($item_id) ]); + Master::Summon(['Notifier', 'relay', intval($item_id)]); $DR->update('relayed'); $result[] = $DR->get(); } @@ -1746,11 +1754,11 @@ class Libzot { intval($channel['channel_id']) ); - if($r) { + if ($r) { // We already have this post. $item_id = $r[0]['id']; - if(intval($r[0]['item_deleted'])) { + if (intval($r[0]['item_deleted'])) { // It was deleted locally. $DR->update('update ignored'); $result[] = $DR->get(); @@ -1758,19 +1766,19 @@ class Libzot { continue; } // Maybe it has been edited? - elseif($arr['edited'] > $r[0]['edited']) { - $arr['id'] = $r[0]['id']; + elseif ($arr['edited'] > $r[0]['edited']) { + $arr['id'] = $r[0]['id']; $arr['uid'] = $channel['channel_id']; - if(($arr['mid'] == $arr['parent_mid']) && (! post_is_importable($arr,$abook))) { + if (($arr['mid'] == $arr['parent_mid']) && (!post_is_importable($arr, $abook))) { $DR->update('update ignored'); $result[] = $DR->get(); } else { - $item_result = self::update_imported_item($sender,$arr,$r[0],$channel['channel_id'],$tag_delivery); + $item_result = self::update_imported_item($sender, $arr, $r[0], $channel['channel_id'], $tag_delivery); $DR->update('updated'); $result[] = $DR->get(); - if(! $relay) - add_source_route($item_id,$sender); + if (!$relay) + add_source_route($item_id, $sender); } } else { @@ -1779,7 +1787,7 @@ class Libzot { // We need this line to ensure wall-to-wall comments are relayed (by falling through to the relay bit), // and at the same time not relay any other relayable posts more than once, because to do so is very wasteful. - if(! intval($r[0]['item_origin'])) + if (!intval($r[0]['item_origin'])) continue; } } @@ -1790,7 +1798,7 @@ class Libzot { // if it's a sourced post, call the post_local hooks as if it were // posted locally so that crosspost connectors will be triggered. - if(check_item_source($arr['uid'], $arr) || ($channel['xchan_pubforum'] == 1)) { + if (check_item_source($arr['uid'], $arr) || ($channel['xchan_pubforum'] == 1)) { /** * @hooks post_local * Called when an item has been posted on this machine via mod/item.php (also via API). @@ -1801,19 +1809,19 @@ class Libzot { $item_id = 0; - if(($arr['mid'] == $arr['parent_mid']) && (! post_is_importable($arr,$abook))) { + if (($arr['mid'] == $arr['parent_mid']) && (!post_is_importable($arr, $abook))) { $DR->update('post ignored'); $result[] = $DR->get(); } else { $item_result = item_store($arr); - if($item_result['success']) { + if ($item_result['success']) { $item_id = $item_result['item_id']; - $parr = [ - 'item_id' => $item_id, - 'item' => $arr, - 'sender' => $sender, - 'channel' => $channel + $parr = [ + 'item_id' => $item_id, + 'item' => $arr, + 'sender' => $sender, + 'channel' => $channel ]; /** * @hooks activity_received @@ -1825,8 +1833,8 @@ class Libzot { */ call_hooks('activity_received', $parr); // don't add a source route if it's a relay or later recipients will get a route mismatch - if(! $relay) - add_source_route($item_id,$sender); + if (!$relay) + add_source_route($item_id, $sender); } $DR->update(($item_id) ? 'posted' : 'storage failed: ' . $item_result['message']); $result[] = $DR->get(); @@ -1836,132 +1844,131 @@ class Libzot { // preserve conversations with which you are involved from expiration $stored = (($item_result && $item_result['item']) ? $item_result['item'] : false); - if((is_array($stored)) && ($stored['id'] != $stored['parent']) + if ((is_array($stored)) && ($stored['id'] != $stored['parent']) && ($stored['author_xchan'] === $channel['channel_hash'] || $stored['author_xchan'] === $channel['channel_hash'])) { retain_item($stored['item']['parent']); } - if($relay && $item_id) { + if ($relay && $item_id) { logger('Invoking relay'); - Master::Summon([ 'Notifier', 'relay', intval($item_id) ]); + Master::Summon(['Notifier', 'relay', intval($item_id)]); $DR->addto_update('relayed'); $result[] = $DR->get(); } } - if(! $deliveries) - $result[] = array('', 'no recipients', '', $arr['mid']); + if (!$deliveries) + $result[] = ['', 'no recipients', '', $arr['mid']]; logger('Local results: ' . print_r($result, true), LOGGER_DEBUG); return $result; } - static public function fetch_conversation($channel,$mid) { + static public function fetch_conversation($channel, $mid) { // Use Zotfinger to create a signed request - $a = Zotfinger::exec($mid,$channel); + logger('fetching conversation: ' . $mid, LOGGER_DEBUG); - logger('received conversation: ' . print_r($a,true), LOGGER_DATA); + $a = Zotfinger::exec($mid, $channel); - if($a['data']['type'] !== 'OrderedCollection') { - return; + logger('received conversation: ' . print_r($a, true), LOGGER_DATA); + + if (!$a) { + return false; } - if(! intval($a['data']['totalItems'])) { - return; + if ($a['data']['type'] !== 'OrderedCollection') { + return false; + } + + $obj = new ASCollection($a['data'], $channel); + $items = $obj->get(); + + if (!$items) { + return false; } $ret = []; + $signer = q("select hubloc_hash, hubloc_url from hubloc where hubloc_id_url = '%s' and hubloc_network = 'zot6' limit 1", dbesc($a['signature']['signer']) ); - foreach($a['data']['orderedItems'] as $activity) { + foreach ($items as $activity) { $AS = new ActivityStreams($activity); - if(! $AS->is_valid()) { - logger('FOF Activity rejected: ' . print_r($activity,true)); + if ($AS->is_valid() && $AS->type === 'Announce' && is_array($AS->obj) + && array_key_exists('object', $AS->obj) && array_key_exists('actor', $AS->obj)) { + // This is a relayed/forwarded Activity (as opposed to a shared/boosted object) + // Reparse the encapsulated Activity and use that instead + logger('relayed activity', LOGGER_DEBUG); + $AS = new ActivityStreams($AS->obj); + } + + if (!$AS->is_valid()) { + logger('FOF Activity rejected: ' . print_r($activity, true)); continue; } $arr = Activity::decode_note($AS); - logger($AS->debug()); + // logger($AS->debug()); - - $r = q("select hubloc_hash from hubloc where hubloc_id_url = '%s' and hubloc_network = 'zot6' limit 1", + $r = q("select hubloc_hash from hubloc where hubloc_id_url = '%s' limit 1", dbesc($AS->actor['id']) ); - if(! $r) { - $y = import_author_xchan([ 'url' => $AS->actor['id'] ]); - if($y) { - $r = q("select hubloc_hash from hubloc where hubloc_id_url = '%s' and hubloc_network = 'zot6' limit 1", + if (!$r) { + $y = import_author_xchan(['url' => $AS->actor['id']]); + if ($y) { + $r = q("select hubloc_hash from hubloc where hubloc_id_url = '%s' limit 1", dbesc($AS->actor['id']) ); } - if(! $r) { + if (!$r) { logger('FOF Activity: no actor'); continue; } } - if($AS->obj['actor'] && $AS->obj['actor']['id'] && $AS->obj['actor']['id'] !== $AS->actor['id']) { - $y = import_author_xchan([ 'url' => $AS->obj['actor']['id'] ]); - if(! $y) { + if ($AS->obj['actor'] && $AS->obj['actor']['id'] && $AS->obj['actor']['id'] !== $AS->actor['id']) { + $y = import_author_xchan(['url' => $AS->obj['actor']['id']]); + if (!$y) { logger('FOF Activity: no object actor'); continue; } } - if($r) { + if ($r) { $arr['author_xchan'] = $r[0]['hubloc_hash']; } - $s = q("select hubloc_hash from hubloc where hubloc_id_url = '%s' and hubloc_network = 'zot6' limit 1", - dbesc($a['signature']['signer']) - ); - - if($s) { - $arr['owner_xchan'] = $s[0]['hubloc_hash']; + if ($signer) { + $arr['owner_xchan'] = $signer[0]['hubloc_hash']; } else { $arr['owner_xchan'] = $a['signature']['signer']; } - - /// @FIXME - spoofable - if($AS->data['hubloc']) { + if ($AS->data['hubloc'] || $arr['author_xchan'] === $arr['owner_xchan']) { $arr['item_verified'] = true; } - // set comment policy depending on source hub. Unknown or osada is ActivityPub. - // Anything else we'll say is zot - which could have a range of project names - - if ($signer) { - $s = q("select site_project from site where site_url = '%s' limit 1", - dbesc($signer[0]['hubloc_url']) - ); - if ((! $s) || (in_array($s[0]['site_project'],[ '', 'osada' ]))) { - $arr['comment_policy'] = 'authenticated'; - } - else { - $arr['comment_policy'] = 'contacts'; + if ($AS->data['signed_data']) { + IConfig::Set($arr, 'activitypub', 'signed_data', $AS->data['signed_data'], false); + $j = json_decode($AS->data['signed_data'], true); + if ($j) { + IConfig::Set($arr, 'activitypub', 'rawmsg', json_encode(JSalmon::unpack($j['data'])), true); } } - - if($AS->data['signed_data']) { - IConfig::Set($arr,'activitystreams','signed_data',$AS->data['signed_data'],false); - } - - logger('FOF Activity received: ' . print_r($arr,true), LOGGER_DATA, LOG_DEBUG); + logger('FOF Activity received: ' . print_r($arr, true), LOGGER_DATA, LOG_DEBUG); logger('FOF Activity recipient: ' . $channel['channel_hash'], LOGGER_DATA, LOG_DEBUG); - $result = self::process_delivery($arr['owner_xchan'],$AS, $arr, [ $channel['channel_hash'] ],false,false,true); + $result = self::process_delivery($arr['owner_xchan'], $AS, $arr, [$channel['channel_hash']], false, false, true); if ($result) { $ret = array_merge($ret, $result); } @@ -1970,7 +1977,6 @@ class Libzot { return $ret; } - /** * @brief Remove community tag. * @@ -1984,12 +1990,12 @@ class Libzot { */ static function remove_community_tag($sender, $arr, $uid) { - if(! (activity_match($arr['verb'], ACTIVITY_TAG) && ($arr['obj_type'] == ACTIVITY_OBJ_TAGTERM))) + if (!(activity_match($arr['verb'], ACTIVITY_TAG) && ($arr['obj_type'] == ACTIVITY_OBJ_TAGTERM))) return; logger('remove_community_tag: invoked'); - if(! get_pconfig($uid,'system','blocktags')) { + if (!get_pconfig($uid, 'system', 'blocktags')) { logger('Permission denied.'); return; } @@ -1998,24 +2004,24 @@ class Libzot { dbesc($arr['mid']), intval($uid) ); - if(! $r) { + if (!$r) { logger('No item'); return; } - if(($sender != $r[0]['owner_xchan']) && ($sender != $r[0]['author_xchan'])) { + if (($sender != $r[0]['owner_xchan']) && ($sender != $r[0]['author_xchan'])) { logger('Sender not authorised.'); return; } $i = $r[0]; - if($i['target']) - $i['target'] = json_decode($i['target'],true); - if($i['object']) - $i['object'] = json_decode($i['object'],true); + if ($i['target']) + $i['target'] = json_decode($i['target'], true); + if ($i['object']) + $i['object'] = json_decode($i['object'], true); - if(! ($i['target'] && $i['object'])) { + if (!($i['target'] && $i['object'])) { logger('No target/object'); return; } @@ -2026,7 +2032,7 @@ class Libzot { dbesc($message_id), intval($uid) ); - if(! $r) { + if (!$r) { logger('No parent message'); return; } @@ -2038,28 +2044,28 @@ class Libzot { intval(TERM_HASHTAG), intval(TERM_COMMUNITYTAG), dbesc($i['object']['title']), - dbesc(get_rel_link($i['object']['link'],'alternate')) + dbesc(get_rel_link($i['object']['link'], 'alternate')) ); } /** * @brief Updates an imported item. * - * @see item_store_update() - * * @param string $sender * @param array $item * @param array $orig * @param int $uid * @param boolean $tag_delivery * @return void|array + * @see item_store_update() + * */ static function update_imported_item($sender, $item, $orig, $uid, $tag_delivery) { // If this is a comment being updated, remove any privacy information // so that item_store_update will set it from the original. - if($item['mid'] !== $item['parent_mid']) { + if ($item['mid'] !== $item['parent_mid']) { unset($item['allow_cid']); unset($item['allow_gid']); unset($item['deny_cid']); @@ -2070,7 +2076,7 @@ class Libzot { // we need the tag_delivery check for downstream flowing posts as the stored post // may have a different owner than the one being transmitted. - if(($sender != $orig['owner_xchan'] && $sender != $orig['author_xchan']) && (! $tag_delivery)) { + if (($sender != $orig['owner_xchan'] && $sender != $orig['author_xchan']) && (!$tag_delivery)) { logger('sender is not owner or author'); return; } @@ -2081,13 +2087,13 @@ class Libzot { // If we're updating an event that we've saved locally, we store the item info first // because event_addtocal will parse the body to get the 'new' event details - if($orig['resource_type'] === 'event') { + if ($orig['resource_type'] === 'event') { $res = event_addtocal($orig['id'], $uid); - if(! $res) + if (!$res) logger('update event: failed'); } - if(! $x['item_id']) + if (!$x['item_id']) logger('update_imported_item: failed: ' . $x['message']); else logger('update_imported_item'); @@ -2111,8 +2117,8 @@ class Libzot { logger('invoked', LOGGER_DEBUG); $ownership_valid = false; - $item_found = false; - $post_id = 0; + $item_found = false; + $post_id = 0; if ($item['verb'] === 'Tombstone') { // The id of the deleted thing is the item mid (activity id) @@ -2131,17 +2137,17 @@ class Libzot { dbesc($sender), dbesc($sender), dbesc($mid), - dbesc(str_replace('/activity/','/item/',$mid)), + dbesc(str_replace('/activity/', '/item/', $mid)), intval($uid) ); - if($r) { + if ($r) { $stored = $r[0]; // we proved ownership in the sql query $ownership_valid = true; - $post_id = $stored['id']; + $post_id = $stored['id']; $item_found = true; } else { @@ -2149,7 +2155,7 @@ class Libzot { logger('delete received for non-existent item or not owned by sender - ignoring.'); } - if($ownership_valid === false) { + if ($ownership_valid === false) { logger('delete_imported_item: failed: ownership issue'); return false; } @@ -2173,10 +2179,10 @@ class Libzot { } } - if($item_found) { - if(intval($stored['item_deleted'])) { + if ($item_found) { + if (intval($stored['item_deleted'])) { logger('delete_imported_item: item was already deleted'); - if(! $relay) + if (!$relay) return false; // This is a bit hackish, but may have to suffice until the notification/delivery loop is optimised @@ -2207,22 +2213,22 @@ class Libzot { static function process_mail_delivery($sender, $arr, $deliveries) { - $result = array(); + $result = []; - if($sender != $arr['from_xchan']) { + if ($sender != $arr['from_xchan']) { logger('process_mail_delivery: sender is not mail author'); return; } - foreach($deliveries as $d) { + foreach ($deliveries as $d) { - $DR = new DReport(z_root(),$sender,$d,$arr['mid']); + $DR = new DReport(z_root(), $sender, $d, $arr['mid']); $r = q("select * from channel where channel_hash = '%s' limit 1", dbesc($d['hash']) ); - if(! $r) { + if (!$r) { $DR->update('recipient not found'); $result[] = $DR->get(); continue; @@ -2232,7 +2238,7 @@ class Libzot { $DR->set_name($channel['channel_name'] . ' <' . channel_reddress($channel) . '>'); - if(! perm_is_allowed($channel['channel_id'],$sender,'post_mail')) { + if (!perm_is_allowed($channel['channel_id'], $sender, 'post_mail')) { /* * Always allow somebody to reply if you initiated the conversation. It's anti-social @@ -2241,13 +2247,13 @@ class Libzot { */ $return = false; - if($arr['parent_mid']) { + if ($arr['parent_mid']) { $return = q("select * from mail where mid = '%s' and channel_id = %d limit 1", dbesc($arr['parent_mid']), intval($channel['channel_id']) ); } - if(! $return) { + if (!$return) { logger("permission denied for mail delivery {$channel['channel_id']}"); $DR->update('permission denied'); $result[] = $DR->get(); @@ -2260,8 +2266,8 @@ class Libzot { dbesc($arr['mid']), intval($channel['channel_id']) ); - if($r) { - if(intval($arr['mail_recalled'])) { + if ($r) { + if (intval($arr['mail_recalled'])) { $x = q("delete from mail where id = %d and channel_id = %d", intval($r[0]['id']), intval($channel['channel_id']) @@ -2280,7 +2286,7 @@ class Libzot { else { $arr['account_id'] = $channel['channel_account_id']; $arr['channel_id'] = $channel['channel_id']; - $item_id = mail_store($arr); + $item_id = mail_store($arr); $DR->update('mail delivered'); $result[] = $DR->get(); } @@ -2293,12 +2299,12 @@ class Libzot { /** * @brief Processes delivery of profile. * - * @see import_directory_profile() - * * @param string $sender * @param array $arr * @param array $deliveries (unused) * @return void + * @see import_directory_profile() + * */ static function process_profile_delivery($sender, $arr, $deliveries) { @@ -2307,7 +2313,7 @@ class Libzot { $r = q("select xchan_addr from xchan where xchan_hash = '%s' limit 1", dbesc($sender) ); - if($r) { + if ($r) { Libzotdir::import_directory_profile($sender, $arr, $r[0]['xchan_addr'], UPDATE_FLAGS_UPDATED, 0); } } @@ -2329,16 +2335,16 @@ class Libzot { $r = q("select * from xchan where xchan_hash = '%s' limit 1", dbesc($sender) ); - if($r) { - $xchan = [ 'id' => $r[0]['xchan_guid'], 'id_sig' => $r[0]['xchan_guid_sig'], - 'hash' => $r[0]['xchan_hash'], 'public_key' => $r[0]['xchan_pubkey'] ]; + if ($r) { + $xchan = ['id' => $r[0]['xchan_guid'], 'id_sig' => $r[0]['xchan_guid_sig'], + 'hash' => $r[0]['xchan_hash'], 'public_key' => $r[0]['xchan_pubkey']]; } - if(array_key_exists('locations',$arr) && $arr['locations']) { - $x = Libsync::sync_locations($xchan,$arr,true); - logger('results: ' . print_r($x,true), LOGGER_DEBUG); - if($x['changed']) { + if (array_key_exists('locations', $arr) && $arr['locations']) { + $x = Libsync::sync_locations($xchan, $arr, true); + logger('results: ' . print_r($x, true), LOGGER_DEBUG); + if ($x['changed']) { //$guid = random_string() . '@' . App::get_hostname(); - Libzotdir::update_modtime($sender,$r[0]['xchan_guid'],$arr['locations'][0]['address'],UPDATE_FLAGS_UPDATED); + Libzotdir::update_modtime($sender, $r[0]['xchan_guid'], $arr['locations'][0]['address'], UPDATE_FLAGS_UPDATED); } } } @@ -2365,10 +2371,10 @@ class Libzot { */ static function check_location_move($sender_hash, $locations) { - if(! $locations) + if (!$locations) return; - if(count($locations) != 1) + if (count($locations) != 1) return; $loc = $locations[0]; @@ -2377,10 +2383,10 @@ class Libzot { dbesc($sender_hash) ); - if(! $r) + if (!$r) return; - if($loc['url'] !== z_root()) { + if ($loc['url'] !== z_root()) { $x = q("update channel set channel_moved = '%s' where channel_hash = '%s' limit 1", dbesc($loc['url']), dbesc($sender_hash) @@ -2390,7 +2396,7 @@ class Libzot { // of the move on singleton networks $arr = [ - 'channel' => $r[0], + 'channel' => $r[0], 'locations' => $locations ]; /** @@ -2407,23 +2413,23 @@ class Libzot { /** * @brief Returns an array with all known distinct hubs for this channel. * - * @see self::get_hublocs() * @param array $channel an associative array which must contain * * \e string \b channel_hash the hash of the channel * @return array an array with associative arrays + * @see self::get_hublocs() */ static function encode_locations($channel) { $ret = []; $x = self::get_hublocs($channel['channel_hash']); - if($x && count($x)) { - foreach($x as $hub) { + if ($x && count($x)) { + foreach ($x as $hub) { // if this is a local channel that has been deleted, the hubloc is no good - make sure it is marked deleted // so that nobody tries to use it. - if(intval($channel['channel_removed']) && $hub['hubloc_url'] === z_root()) + if (intval($channel['channel_removed']) && $hub['hubloc_url'] === z_root()) $hub['hubloc_deleted'] = 1; @@ -2442,15 +2448,15 @@ class Libzot { // version compatibility tweaks - if(! strpos($z['url_sig'],'.')) { + if (!strpos($z['url_sig'], '.')) { $z['url_sig'] = 'sha256.' . $z['url_sig']; } - if(! $z['id_url']) { - $z['id_url'] = $z['url'] . '/channel/' . substr($z['address'],0,strpos($z['address'],'@')); + if (!$z['id_url']) { + $z['id_url'] = $z['url'] . '/channel/' . substr($z['address'], 0, strpos($z['address'], '@')); } - if(! $z['site_id']) { - $z['site_id'] = Libzot::make_xchan_hash($z['url'],$z['sitekey']); + if (!$z['site_id']) { + $z['site_id'] = Libzot::make_xchan_hash($z['url'], $z['sitekey']); } $ret[] = $z; @@ -2469,10 +2475,10 @@ class Libzot { */ static function import_site($arr) { - if( (! is_array($arr)) || (! $arr['url']) || (! $arr['site_sig'])) + if ((!is_array($arr)) || (!$arr['url']) || (!$arr['site_sig'])) return false; - if(! self::verify($arr['url'], $arr['site_sig'], $arr['sitekey'])) { + if (!self::verify($arr['url'], $arr['site_sig'], $arr['sitekey'])) { logger('Bad url_sig'); return false; } @@ -2483,66 +2489,66 @@ class Libzot { $r = q("select * from site where site_url = '%s' limit 1", dbesc($arr['url']) ); - if($r) { - $exists = true; + if ($r) { + $exists = true; $siterecord = $r[0]; } $site_directory = 0; - if($arr['directory_mode'] == 'normal') + if ($arr['directory_mode'] == 'normal') $site_directory = DIRECTORY_MODE_NORMAL; - if($arr['directory_mode'] == 'primary') + if ($arr['directory_mode'] == 'primary') $site_directory = DIRECTORY_MODE_PRIMARY; - if($arr['directory_mode'] == 'secondary') + if ($arr['directory_mode'] == 'secondary') $site_directory = DIRECTORY_MODE_SECONDARY; - if($arr['directory_mode'] == 'standalone') + if ($arr['directory_mode'] == 'standalone') $site_directory = DIRECTORY_MODE_STANDALONE; $register_policy = 0; - if($arr['register_policy'] == 'closed') + if ($arr['register_policy'] == 'closed') $register_policy = REGISTER_CLOSED; - if($arr['register_policy'] == 'open') + if ($arr['register_policy'] == 'open') $register_policy = REGISTER_OPEN; - if($arr['register_policy'] == 'approve') + if ($arr['register_policy'] == 'approve') $register_policy = REGISTER_APPROVE; $access_policy = 0; - if(array_key_exists('access_policy',$arr)) { - if($arr['access_policy'] === 'private') + if (array_key_exists('access_policy', $arr)) { + if ($arr['access_policy'] === 'private') $access_policy = ACCESS_PRIVATE; - if($arr['access_policy'] === 'paid') + if ($arr['access_policy'] === 'paid') $access_policy = ACCESS_PAID; - if($arr['access_policy'] === 'free') + if ($arr['access_policy'] === 'free') $access_policy = ACCESS_FREE; - if($arr['access_policy'] === 'tiered') + if ($arr['access_policy'] === 'tiered') $access_policy = ACCESS_TIERED; } // don't let insecure sites register as public hubs - if(strpos($arr['url'],'https://') === false) + if (strpos($arr['url'], 'https://') === false) $access_policy = ACCESS_PRIVATE; - if($access_policy != ACCESS_PRIVATE) { + if ($access_policy != ACCESS_PRIVATE) { $x = z_fetch_url($arr['url'] . '/siteinfo.json'); - if(! $x['success']) + if (!$x['success']) $access_policy = ACCESS_PRIVATE; } - $directory_url = htmlspecialchars($arr['directory_url'],ENT_COMPAT,'UTF-8',false); - $url = htmlspecialchars(strtolower($arr['url']),ENT_COMPAT,'UTF-8',false); - $sellpage = htmlspecialchars($arr['sellpage'],ENT_COMPAT,'UTF-8',false); - $site_location = htmlspecialchars($arr['location'],ENT_COMPAT,'UTF-8',false); - $site_realm = htmlspecialchars($arr['realm'],ENT_COMPAT,'UTF-8',false); - $site_project = htmlspecialchars($arr['project'],ENT_COMPAT,'UTF-8',false); - $site_crypto = ((array_key_exists('encryption',$arr) && is_array($arr['encryption'])) ? htmlspecialchars(implode(',',$arr['encryption']),ENT_COMPAT,'UTF-8',false) : ''); - $site_version = ((array_key_exists('version',$arr)) ? htmlspecialchars($arr['version'],ENT_COMPAT,'UTF-8',false) : ''); + $directory_url = htmlspecialchars($arr['directory_url'], ENT_COMPAT, 'UTF-8', false); + $url = htmlspecialchars(strtolower($arr['url']), ENT_COMPAT, 'UTF-8', false); + $sellpage = htmlspecialchars($arr['sellpage'], ENT_COMPAT, 'UTF-8', false); + $site_location = htmlspecialchars($arr['location'], ENT_COMPAT, 'UTF-8', false); + $site_realm = htmlspecialchars($arr['realm'], ENT_COMPAT, 'UTF-8', false); + $site_project = htmlspecialchars($arr['project'], ENT_COMPAT, 'UTF-8', false); + $site_crypto = ((array_key_exists('encryption', $arr) && is_array($arr['encryption'])) ? htmlspecialchars(implode(',', $arr['encryption']), ENT_COMPAT, 'UTF-8', false) : ''); + $site_version = ((array_key_exists('version', $arr)) ? htmlspecialchars($arr['version'], ENT_COMPAT, 'UTF-8', false) : ''); // You can have one and only one primary directory per realm. // Downgrade any others claiming to be primary. As they have // flubbed up this badly already, don't let them be directory servers at all. - if(($site_directory === DIRECTORY_MODE_PRIMARY) + if (($site_directory === DIRECTORY_MODE_PRIMARY) && ($site_realm === get_directory_realm()) && ($arr['url'] != get_directory_primary())) { $site_directory = DIRECTORY_MODE_NORMAL; @@ -2550,12 +2556,12 @@ class Libzot { $site_flags = $site_directory; - if(array_key_exists('zot',$arr)) { - set_sconfig($arr['url'],'system','zot_version',$arr['zot']); + if (array_key_exists('zot', $arr)) { + set_sconfig($arr['url'], 'system', 'zot_version', $arr['zot']); } - if($exists) { - if(($siterecord['site_flags'] != $site_flags) + if ($exists) { + if (($siterecord['site_flags'] != $site_flags) || ($siterecord['site_access'] != $access_policy) || ($siterecord['site_directory'] != $directory_url) || ($siterecord['site_sellpage'] != $sellpage) @@ -2564,12 +2570,12 @@ class Libzot { || ($siterecord['site_project'] != $site_project) || ($siterecord['site_realm'] != $site_realm) || ($siterecord['site_crypto'] != $site_crypto) - || ($siterecord['site_version'] != $site_version) ) { + || ($siterecord['site_version'] != $site_version)) { $update = true; - // logger('import_site: input: ' . print_r($arr,true)); - // logger('import_site: stored: ' . print_r($siterecord,true)); + // logger('import_site: input: ' . print_r($arr,true)); + // logger('import_site: stored: ' . print_r($siterecord,true)); $r = q("update site set site_dead = 0, site_location = '%s', site_flags = %d, site_access = %d, site_directory = '%s', site_register = %d, site_update = '%s', site_sellpage = '%s', site_realm = '%s', site_type = %d, site_project = '%s', site_version = '%s', site_crypto = '%s' where site_url = '%s'", @@ -2587,8 +2593,8 @@ class Libzot { dbesc($site_crypto), dbesc($url) ); - if(! $r) { - logger('Update failed. ' . print_r($arr,true)); + if (!$r) { + logger('Update failed. ' . print_r($arr, true)); } } else { @@ -2620,8 +2626,8 @@ class Libzot { ] ); - if(! $r) { - logger('Record create failed. ' . print_r($arr,true)); + if (!$r) { + logger('Record create failed. ' . print_r($arr, true)); } } @@ -2631,14 +2637,14 @@ class Libzot { /** * @brief Returns path to /rpost * - * @todo We probably should make rpost discoverable. - * * @param array $observer * * \e string \b xchan_url * @return string + * @todo We probably should make rpost discoverable. + * */ static function get_rpost_path($observer) { - if(! $observer) + if (!$observer) return ''; $parsed = parse_url($observer['xchan_url']); @@ -2659,11 +2665,11 @@ class Libzot { // we may only end up with one; which results in posts with no author name or photo and are a bit // of a hassle to repair. If either or both are missing, do a full discovery probe. - if(! array_key_exists('id',$x)) { + if (!array_key_exists('id', $x)) { return import_author_activitypub($x); } - $hash = self::make_xchan_hash($x['id'],$x['key']); + $hash = self::make_xchan_hash($x['id'], $x['key']); $desturl = $x['url']; @@ -2680,18 +2686,18 @@ class Libzot { $site_dead = false; - if($r1 && intval($r1[0]['site_dead'])) { + if ($r1 && intval($r1[0]['site_dead'])) { $site_dead = true; } // We have valid and somewhat fresh information. Always true if it is our own site. - if($r1 && $r2 && ( $r1[0]['hubloc_updated'] > datetime_convert('UTC','UTC','now - 1 week') || $r1[0]['hubloc_url'] === z_root() ) ) { + if ($r1 && $r2 && ($r1[0]['hubloc_updated'] > datetime_convert('UTC', 'UTC', 'now - 1 week') || $r1[0]['hubloc_url'] === z_root())) { logger('in cache', LOGGER_DEBUG); return $hash; } - logger('not in cache or cache stale - probing: ' . print_r($x,true), LOGGER_DEBUG,LOG_INFO); + logger('not in cache or cache stale - probing: ' . print_r($x, true), LOGGER_DEBUG, LOG_INFO); // The primary hub may be dead. Try to find another one associated with this identity that is // still alive. If we find one, use that url for the discovery/refresh probe. Otherwise, the dead site @@ -2699,15 +2705,15 @@ class Libzot { // cached entry and the identity is valid. It's just unreachable until they bring back their // server from the grave or create another clone elsewhere. - if($site_dead) { - logger('dead site - ignoring', LOGGER_DEBUG,LOG_INFO); + if ($site_dead) { + logger('dead site - ignoring', LOGGER_DEBUG, LOG_INFO); $r = q("select hubloc_id_url from hubloc left join site on hubloc_url = site_url where hubloc_hash = '%s' and site_dead = 0", dbesc($hash) ); - if($r) { - logger('found another site that is not dead: ' . $r[0]['hubloc_url'], LOGGER_DEBUG,LOG_INFO); + if ($r) { + logger('found another site that is not dead: ' . $r[0]['hubloc_url'], LOGGER_DEBUG, LOG_INFO); $desturl = $r[0]['hubloc_url']; } else { @@ -2715,8 +2721,8 @@ class Libzot { } } - $them = [ 'hubloc_id_url' => $desturl ]; - if(self::refresh($them)) + $them = ['hubloc_id_url' => $desturl]; + if (self::refresh($them)) return $hash; return false; @@ -2724,27 +2730,27 @@ class Libzot { static function zotinfo($arr) { - logger('arr: ' . print_r($arr,true)); + logger('arr: ' . print_r($arr, true)); $ret = []; - $zhash = ((x($arr,'guid_hash')) ? $arr['guid_hash'] : ''); - $zguid = ((x($arr,'guid')) ? $arr['guid'] : ''); - $zguid_sig = ((x($arr,'guid_sig')) ? $arr['guid_sig'] : ''); - $zaddr = ((x($arr,'address')) ? $arr['address'] : ''); - $ztarget = ((x($arr,'target_url')) ? $arr['target_url'] : ''); - $zsig = ((x($arr,'target_sig')) ? $arr['target_sig'] : ''); - $zkey = ((x($arr,'key')) ? $arr['key'] : ''); - $mindate = ((x($arr,'mindate')) ? $arr['mindate'] : ''); - $token = ((x($arr,'token')) ? $arr['token'] : ''); - $feed = ((x($arr,'feed')) ? intval($arr['feed']) : 0); + $zhash = ((x($arr, 'guid_hash')) ? $arr['guid_hash'] : ''); + $zguid = ((x($arr, 'guid')) ? $arr['guid'] : ''); + $zguid_sig = ((x($arr, 'guid_sig')) ? $arr['guid_sig'] : ''); + $zaddr = ((x($arr, 'address')) ? $arr['address'] : ''); + $ztarget = ((x($arr, 'target_url')) ? $arr['target_url'] : ''); + $zsig = ((x($arr, 'target_sig')) ? $arr['target_sig'] : ''); + $zkey = ((x($arr, 'key')) ? $arr['key'] : ''); + $mindate = ((x($arr, 'mindate')) ? $arr['mindate'] : ''); + $token = ((x($arr, 'token')) ? $arr['token'] : ''); + $feed = ((x($arr, 'feed')) ? intval($arr['feed']) : 0); - if($ztarget) { + if ($ztarget) { $t = q("select * from hubloc where hubloc_id_url = '%s' and hubloc_network = 'zot6' limit 1", dbesc($ztarget) ); - if($t) { + if ($t) { $ztarget_hash = $t[0]['hubloc_hash']; @@ -2762,21 +2768,21 @@ class Libzot { $r = null; - if(strlen($zhash)) { + if (strlen($zhash)) { $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash where channel_hash = '%s' limit 1", dbesc($zhash) ); } - elseif(strlen($zguid) && strlen($zguid_sig)) { + elseif (strlen($zguid) && strlen($zguid_sig)) { $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash where channel_guid = '%s' and channel_guid_sig = '%s' limit 1", dbesc($zguid), dbesc($zguid_sig) ); } - elseif(strlen($zaddr)) { - if(strpos($zaddr,'[system]') === false) { /* normal address lookup */ + elseif (strlen($zaddr)) { + if (strpos($zaddr, '[system]') === false) { /* normal address lookup */ $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash where ( channel_address = '%s' or xchan_addr = '%s' ) limit 1", dbesc($zaddr), @@ -2799,7 +2805,7 @@ class Libzot { $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash where channel_system = 1 order by channel_id limit 1"); - if(! $r) { + if (!$r) { $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash where channel_removed = 0 order by channel_id limit 1"); } @@ -2807,45 +2813,45 @@ class Libzot { } else { $ret['message'] = 'Invalid request'; - return($ret); + return ($ret); } - if(! $r) { + if (!$r) { $ret['message'] = 'Item not found.'; - return($ret); + return ($ret); } $e = $r[0]; $id = $e['channel_id']; - $sys_channel = (intval($e['channel_system']) ? true : false); - $special_channel = (($e['channel_pageflags'] & PAGE_PREMIUM) ? true : false); - $adult_channel = (($e['channel_pageflags'] & PAGE_ADULT) ? true : false); + $sys_channel = (intval($e['channel_system']) ? true : false); + $special_channel = (($e['channel_pageflags'] & PAGE_PREMIUM) ? true : false); + $adult_channel = (($e['channel_pageflags'] & PAGE_ADULT) ? true : false); $censored = (($e['channel_pageflags'] & PAGE_CENSORED) ? true : false); - $searchable = (($e['channel_pageflags'] & PAGE_HIDDEN) ? false : true); + $searchable = (($e['channel_pageflags'] & PAGE_HIDDEN) ? false : true); $deleted = (intval($e['xchan_deleted']) ? true : false); - if($deleted || $censored || $sys_channel) + if ($deleted || $censored || $sys_channel) $searchable = false; $public_forum = false; - $role = get_pconfig($e['channel_id'],'system','permissions_role'); - if($role === 'forum' || $role === 'repository') { + $role = get_pconfig($e['channel_id'], 'system', 'permissions_role'); + if ($role === 'forum' || $role === 'repository') { $public_forum = true; } else { // check if it has characteristics of a public forum based on custom permissions. $m = Permissions::FilledAutoperms($e['channel_id']); - if($m) { - foreach($m as $k => $v) { - if($k == 'tag_deliver' && intval($v) == 1) - $ch ++; - if($k == 'send_stream' && intval($v) == 0) - $ch ++; + if ($m) { + foreach ($m as $k => $v) { + if ($k == 'tag_deliver' && intval($v) == 1) + $ch++; + if ($k == 'send_stream' && intval($v) == 0) + $ch++; } - if($ch == 2) + if ($ch == 2) $public_forum = true; } } @@ -2856,128 +2862,128 @@ class Libzot { intval($e['channel_id']) ); - $profile = array(); + $profile = []; - if($p) { + if ($p) { - if(! intval($p[0]['publish'])) + if (!intval($p[0]['publish'])) $searchable = false; - $profile['description'] = $p[0]['pdesc']; - $profile['birthday'] = $p[0]['dob']; - if(($profile['birthday'] != '0000-00-00') && (($bd = z_birthday($p[0]['dob'],'UTC')) !== '')) + $profile['description'] = $p[0]['pdesc']; + $profile['birthday'] = $p[0]['dob']; + if (($profile['birthday'] != '0000-00-00') && (($bd = z_birthday($p[0]['dob'], 'UTC')) !== '')) $profile['next_birthday'] = $bd; - if($age = age($p[0]['dob'],$e['channel_timezone'],'')) + if ($age = age($p[0]['dob'], $e['channel_timezone'], '')) $profile['age'] = $age; - $profile['gender'] = $p[0]['gender']; - $profile['marital'] = $p[0]['marital']; - $profile['sexual'] = $p[0]['sexual']; - $profile['locale'] = $p[0]['locality']; - $profile['region'] = $p[0]['region']; - $profile['postcode'] = $p[0]['postal_code']; - $profile['country'] = $p[0]['country_name']; - $profile['about'] = $p[0]['about']; - $profile['homepage'] = $p[0]['homepage']; - $profile['hometown'] = $p[0]['hometown']; + $profile['gender'] = $p[0]['gender']; + $profile['marital'] = $p[0]['marital']; + $profile['sexual'] = $p[0]['sexual']; + $profile['locale'] = $p[0]['locality']; + $profile['region'] = $p[0]['region']; + $profile['postcode'] = $p[0]['postal_code']; + $profile['country'] = $p[0]['country_name']; + $profile['about'] = $p[0]['about']; + $profile['homepage'] = $p[0]['homepage']; + $profile['hometown'] = $p[0]['hometown']; - if($p[0]['keywords']) { - $tags = array(); - $k = explode(' ',$p[0]['keywords']); - if($k) { - foreach($k as $kk) { - if(trim($kk," \t\n\r\0\x0B,")) { - $tags[] = trim($kk," \t\n\r\0\x0B,"); + if ($p[0]['keywords']) { + $tags = []; + $k = explode(' ', $p[0]['keywords']); + if ($k) { + foreach ($k as $kk) { + if (trim($kk, " \t\n\r\0\x0B,")) { + $tags[] = trim($kk, " \t\n\r\0\x0B,"); } } } - if($tags) + if ($tags) $profile['keywords'] = $tags; } } // Communication details - $ret['id'] = $e['xchan_guid']; - $ret['id_sig'] = self::sign($e['xchan_guid'], $e['channel_prvkey']); + $ret['id'] = $e['xchan_guid']; + $ret['id_sig'] = self::sign($e['xchan_guid'], $e['channel_prvkey']); $ret['primary_location'] = [ - 'address' => $e['xchan_addr'], - 'url' => $e['xchan_url'], - 'connections_url' => $e['xchan_connurl'], - 'follow_url' => $e['xchan_follow'], + 'address' => $e['xchan_addr'], + 'url' => $e['xchan_url'], + 'connections_url' => $e['xchan_connurl'], + 'follow_url' => $e['xchan_follow'], ]; - $ret['public_key'] = $e['xchan_pubkey']; - $ret['username'] = $e['channel_address']; - $ret['name'] = $e['xchan_name']; - $ret['name_updated'] = $e['xchan_name_date']; - $ret['photo'] = [ + $ret['public_key'] = $e['xchan_pubkey']; + $ret['username'] = $e['channel_address']; + $ret['name'] = $e['xchan_name']; + $ret['name_updated'] = $e['xchan_name_date']; + $ret['photo'] = [ 'url' => $e['xchan_photo_l'], 'type' => $e['xchan_photo_mimetype'], 'updated' => $e['xchan_photo_date'] ]; - $ret['channel_role'] = get_pconfig($e['channel_id'],'system','permissions_role','custom'); - $ret['protocols'] = [ 'zot6', 'zot' ]; - $ret['searchable'] = $searchable; - $ret['adult_content'] = $adult_channel; - $ret['public_forum'] = $public_forum; + $ret['channel_role'] = get_pconfig($e['channel_id'], 'system', 'permissions_role', 'custom'); + $ret['protocols'] = ['zot6', 'zot']; + $ret['searchable'] = $searchable; + $ret['adult_content'] = $adult_channel; + $ret['public_forum'] = $public_forum; - $ret['comments'] = map_scope(PermissionLimits::Get($e['channel_id'],'post_comments')); - $ret['mail'] = map_scope(PermissionLimits::Get($e['channel_id'],'post_mail')); + $ret['comments'] = map_scope(PermissionLimits::Get($e['channel_id'], 'post_comments')); + $ret['mail'] = map_scope(PermissionLimits::Get($e['channel_id'], 'post_mail')); - if($deleted) - $ret['deleted'] = $deleted; + if ($deleted) + $ret['deleted'] = $deleted; - if(intval($e['channel_removed'])) + if (intval($e['channel_removed'])) $ret['deleted_locally'] = true; // premium or other channel desiring some contact with potential followers before connecting. // This is a template - %s will be replaced with the follow_url we discover for the return channel. - if($special_channel) { + if ($special_channel) { $ret['connect_url'] = (($e['xchan_connpage']) ? $e['xchan_connpage'] : z_root() . '/connect/' . $e['channel_address']); } // This is a template for our follow url, %s will be replaced with a webbie - if(! $ret['follow_url']) + if (!$ret['follow_url']) $ret['follow_url'] = z_root() . '/follow?f=&url=%s'; - $permissions = get_all_perms($e['channel_id'],$ztarget_hash,false,false); + $permissions = get_all_perms($e['channel_id'], $ztarget_hash, false, false); - if($ztarget_hash) { + if ($ztarget_hash) { $permissions['connected'] = false; - $b = q("select * from abook where abook_xchan = '%s' and abook_channel = %d limit 1", + $b = q("select * from abook where abook_xchan = '%s' and abook_channel = %d limit 1", dbesc($ztarget_hash), intval($e['channel_id']) ); - if($b) + if ($b) $permissions['connected'] = true; } - if($permissions['view_profile']) - $ret['profile'] = $profile; + if ($permissions['view_profile']) + $ret['profile'] = $profile; $concise_perms = []; - if($permissions) { - foreach($permissions as $k => $v) { - if($v) { + if ($permissions) { + foreach ($permissions as $k => $v) { + if ($v) { $concise_perms[] = $k; } } - $permissions = implode(',',$concise_perms); + $permissions = implode(',', $concise_perms); } - $ret['permissions'] = $permissions; - $ret['permissions_for'] = $ztarget; + $ret['permissions'] = $permissions; + $ret['permissions_for'] = $ztarget; // array of (verified) hubs this channel uses $x = self::encode_locations($e); - if($x) + if ($x) $ret['locations'] = $x; $ret['site'] = self::site_info(); @@ -2997,58 +3003,58 @@ class Libzot { */ static function site_info() { - $signing_key = get_config('system','prvkey'); - $sig_method = get_config('system','signature_algorithm','sha256'); + $signing_key = get_config('system', 'prvkey'); + $sig_method = get_config('system', 'signature_algorithm', 'sha256'); - $ret = []; - $ret['site'] = []; - $ret['site']['url'] = z_root(); - $ret['site']['site_sig'] = self::sign(z_root(), $signing_key); - $ret['site']['post'] = z_root() . '/zot'; + $ret = []; + $ret['site'] = []; + $ret['site']['url'] = z_root(); + $ret['site']['site_sig'] = self::sign(z_root(), $signing_key); + $ret['site']['post'] = z_root() . '/zot'; $ret['site']['openWebAuth'] = z_root() . '/owa'; $ret['site']['authRedirect'] = z_root() . '/magic'; - $ret['site']['sitekey'] = get_config('system','pubkey'); + $ret['site']['sitekey'] = get_config('system', 'pubkey'); - $dirmode = get_config('system','directory_mode'); - if(($dirmode === false) || ($dirmode == DIRECTORY_MODE_NORMAL)) + $dirmode = get_config('system', 'directory_mode'); + if (($dirmode === false) || ($dirmode == DIRECTORY_MODE_NORMAL)) $ret['site']['directory_mode'] = 'normal'; - if($dirmode == DIRECTORY_MODE_PRIMARY) + if ($dirmode == DIRECTORY_MODE_PRIMARY) $ret['site']['directory_mode'] = 'primary'; - elseif($dirmode == DIRECTORY_MODE_SECONDARY) + elseif ($dirmode == DIRECTORY_MODE_SECONDARY) $ret['site']['directory_mode'] = 'secondary'; - elseif($dirmode == DIRECTORY_MODE_STANDALONE) + elseif ($dirmode == DIRECTORY_MODE_STANDALONE) $ret['site']['directory_mode'] = 'standalone'; - if($dirmode != DIRECTORY_MODE_NORMAL) + if ($dirmode != DIRECTORY_MODE_NORMAL) $ret['site']['directory_url'] = z_root() . '/dirsearch'; - $ret['site']['encryption'] = crypto_methods(); - $ret['site']['zot'] = System::get_zot_revision(); + $ret['site']['encryption'] = Crypto::methods(); + $ret['site']['zot'] = System::get_zot_revision(); // hide detailed site information if you're off the grid - if($dirmode != DIRECTORY_MODE_STANDALONE) { + if ($dirmode != DIRECTORY_MODE_STANDALONE) { - $register_policy = intval(get_config('system','register_policy')); + $register_policy = intval(get_config('system', 'register_policy')); - if($register_policy == REGISTER_CLOSED) + if ($register_policy == REGISTER_CLOSED) $ret['site']['register_policy'] = 'closed'; - if($register_policy == REGISTER_APPROVE) + if ($register_policy == REGISTER_APPROVE) $ret['site']['register_policy'] = 'approve'; - if($register_policy == REGISTER_OPEN) + if ($register_policy == REGISTER_OPEN) $ret['site']['register_policy'] = 'open'; - $access_policy = intval(get_config('system','access_policy')); + $access_policy = intval(get_config('system', 'access_policy')); - if($access_policy == ACCESS_PRIVATE) + if ($access_policy == ACCESS_PRIVATE) $ret['site']['access_policy'] = 'private'; - if($access_policy == ACCESS_PAID) + if ($access_policy == ACCESS_PAID) $ret['site']['access_policy'] = 'paid'; - if($access_policy == ACCESS_FREE) + if ($access_policy == ACCESS_FREE) $ret['site']['access_policy'] = 'free'; - if($access_policy == ACCESS_TIERED) + if ($access_policy == ACCESS_TIERED) $ret['site']['access_policy'] = 'tiered'; $ret['site']['accounts'] = account_total(); @@ -3056,24 +3062,24 @@ class Libzot { require_once('include/channel.php'); $ret['site']['channels'] = channel_total(); - $ret['site']['admin'] = get_config('system','admin_email'); + $ret['site']['admin'] = get_config('system', 'admin_email'); - $visible_plugins = array(); - if(is_array(\App::$plugins) && count(\App::$plugins)) { + $visible_plugins = []; + if (is_array(\App::$plugins) && count(\App::$plugins)) { $r = q("select * from addon where hidden = 0"); - if($r) - foreach($r as $rr) + if ($r) + foreach ($r as $rr) $visible_plugins[] = $rr['aname']; } - $ret['site']['plugins'] = $visible_plugins; - $ret['site']['sitehash'] = get_config('system','location_hash'); - $ret['site']['sitename'] = get_config('system','sitename'); - $ret['site']['sellpage'] = get_config('system','sellpage'); - $ret['site']['location'] = get_config('system','site_location'); - $ret['site']['realm'] = get_directory_realm(); - $ret['site']['project'] = System::get_platform_name(); - $ret['site']['version'] = System::get_project_version(); + $ret['site']['plugins'] = $visible_plugins; + $ret['site']['sitehash'] = get_config('system', 'location_hash'); + $ret['site']['sitename'] = get_config('system', 'sitename'); + $ret['site']['sellpage'] = get_config('system', 'sellpage'); + $ret['site']['location'] = get_config('system', 'site_location'); + $ret['site']['realm'] = get_directory_realm(); + $ret['site']['project'] = System::get_platform_name(); + $ret['site']['version'] = System::get_project_version(); } @@ -3159,36 +3165,36 @@ class Libzot { * @param string $alg (optional) default 'sha256' * @return string */ - static function sign($data,$key,$alg = 'sha256') { - if(! $key) + static function sign($data, $key, $alg = 'sha256') { + if (!$key) return 'no key'; $sig = ''; - openssl_sign($data,$sig,$key,$alg); + openssl_sign($data, $sig, $key, $alg); return $alg . '.' . base64url_encode($sig); } - static function verify($data,$sig,$key) { + static function verify($data, $sig, $key) { $verify = 0; - $x = explode('.',$sig,2); + $x = explode('.', $sig, 2); if ($key && count($x) === 2) { - $alg = $x[0]; + $alg = $x[0]; $signature = base64url_decode($x[1]); - $verify = @openssl_verify($data,$signature,$key,$alg); + $verify = @openssl_verify($data, $signature, $key, $alg); if ($verify === (-1)) { while ($msg = openssl_error_string()) { - logger('openssl_verify: ' . $msg,LOGGER_NORMAL,LOG_ERR); + logger('openssl_verify: ' . $msg, LOGGER_NORMAL, LOG_ERR); } btlogger('openssl_verify: key: ' . $key, LOGGER_DEBUG, LOG_ERR); } } - return(($verify > 0) ? true : false); + return (($verify > 0) ? true : false); } /** @@ -3197,25 +3203,25 @@ class Libzot { * @return boolean */ static function is_zot_request() { - $x = getBestSupportedMimeType([ 'application/x-zot+json' ]); + $x = getBestSupportedMimeType(['application/x-zot+json']); - return(($x) ? true : false); + return (($x) ? true : false); } static public function zot_record_preferred($arr, $check = 'hubloc_network') { - if(! $arr) { + if (!$arr) { return $arr; } - foreach($arr as $v) { - if($v[$check] === 'zot6') { + foreach ($arr as $v) { + if ($v[$check] === 'zot6') { return $v; } } - foreach($arr as $v) { - if($v[$check] === 'zot') { + foreach ($arr as $v) { + if ($v[$check] === 'zot') { return $v; } } diff --git a/Zotlabs/Lib/Libzotdir.php b/Zotlabs/Lib/Libzotdir.php index d4c5398ee..41c0a54e9 100644 --- a/Zotlabs/Lib/Libzotdir.php +++ b/Zotlabs/Lib/Libzotdir.php @@ -311,12 +311,13 @@ class Libzotdir { if ($ud['ud_addr'] && (! ($ud['ud_flags'] & UPDATE_FLAGS_DELETED))) { $success = false; + $zf = []; $href = Webfinger::zot_url(punify($ud['ud_addr'])); if($href) { $zf = Zotfinger::exec($href); } - if(is_array($zf) && array_path_exists('signature/signer',$zf) && $zf['signature']['signer'] === $href && intval($zf['signature']['header_valid'])) { + if(array_path_exists('signature/signer',$zf) && $zf['signature']['signer'] === $href && intval($zf['signature']['header_valid'])) { $xc = Libzot::import_xchan($zf['data'], 0, $ud); } else { diff --git a/Zotlabs/Lib/NativeWikiPage.php b/Zotlabs/Lib/NativeWikiPage.php index d84cc50a8..71f193b70 100644 --- a/Zotlabs/Lib/NativeWikiPage.php +++ b/Zotlabs/Lib/NativeWikiPage.php @@ -163,7 +163,7 @@ class NativeWikiPage { return [ 'success' => true, 'page' => $page ]; } - return [ 'success' => false, 'item_id' => $c['item_id'], 'message' => t('Page not found') ]; + return [ 'success' => false, 'message' => t('Page not found') ]; } @@ -339,7 +339,6 @@ class NativeWikiPage { } static public function save_page($arr) { - $pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : ''); $content = ((array_key_exists('content',$arr)) ? $arr['content'] : ''); $resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : ''); @@ -385,7 +384,7 @@ class NativeWikiPage { $ret = item_store($item, false, false); if($ret['item_id']) - return array('message' => '', 'item_id' => $ret['item_id'], 'filename' => $filename, 'success' => true); + return array('message' => '', 'item_id' => $ret['item_id'], 'filename' => $pageUrlName, 'success' => true); else return array('message' => t('Page update failed.'), 'success' => false); } @@ -432,12 +431,12 @@ class NativeWikiPage { $channel_id = ((array_key_exists('channel_id',$arr)) ? $arr['channel_id'] : 0); if (! $commitHash) { - return array('content' => $content, 'message' => 'No commit was provided', 'success' => false); + return array('message' => 'No commit was provided', 'success' => false); } $w = Zlib\NativeWiki::get_wiki($channel_id, $observer_hash, $resource_id); if (!$w['wiki']) { - return array('content' => $content, 'message' => 'Error reading wiki', 'success' => false); + return array('message' => 'Error reading wiki', 'success' => false); } $x = $arr; @@ -451,7 +450,7 @@ class NativeWikiPage { $content = $loaded['body']; return [ 'content' => $content, 'success' => true ]; } - return [ 'content' => $content, 'success' => false ]; + return [ 'success' => false ]; } } diff --git a/Zotlabs/Lib/Queue.php b/Zotlabs/Lib/Queue.php index 6acc58bc5..779719d8b 100644 --- a/Zotlabs/Lib/Queue.php +++ b/Zotlabs/Lib/Queue.php @@ -2,9 +2,6 @@ namespace Zotlabs\Lib; -use Zotlabs\Lib\Libzot; - - class Queue { static function update($id, $add_priority = 0) { @@ -39,7 +36,7 @@ class Queue { // queue item is less than 12 hours old, we'll schedule for fifteen // minutes. - $r = q("UPDATE outq SET outq_scheduled = '%s' WHERE outq_posturl = '%s'", + q("UPDATE outq SET outq_scheduled = '%s' WHERE outq_posturl = '%s'", dbesc(datetime_convert('UTC','UTC','now + 5 days')), dbesc($x[0]['outq_posturl']) ); @@ -88,7 +85,7 @@ class Queue { static function set_delivered($id,$channel = 0) { logger('queue: set delivered ' . $id,LOGGER_DEBUG); - $sql_extra = (($channel_id) ? " and outq_channel = " . intval($channel_id) . " " : ''); + $sql_extra = (($channel['channel_id']) ? " and outq_channel = " . intval($channel['channel_id']) . " " : ''); // Set the next scheduled run date so far in the future that it will be expired // long before it ever makes it back into the delivery chain. @@ -230,11 +227,10 @@ class Queue { logger('deliver: dest: ' . $outq['outq_posturl'], LOGGER_DEBUG); - if($outq['outq_posturl'] === z_root() . '/zot') { // local delivery $zot = new \Zotlabs\Zot6\Receiver(new \Zotlabs\Zot6\Zot6Handler(),$outq['outq_notify']); - $result = $zot->run(true); + $result = $zot->run(); logger('returned_json: ' . json_encode($result,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES), LOGGER_DATA); logger('deliver: local zot delivery succeeded to ' . $outq['outq_posturl']); Libzot::process_response($outq['outq_posturl'],[ 'success' => true, 'body' => json_encode($result) ], $outq); diff --git a/Zotlabs/Lib/Share.php b/Zotlabs/Lib/Share.php index d34c0eaba..b4cd5a194 100644 --- a/Zotlabs/Lib/Share.php +++ b/Zotlabs/Lib/Share.php @@ -2,8 +2,6 @@ namespace Zotlabs\Lib; -use Zotlabs\Lib\Activity; - class Share { private $item = null; diff --git a/Zotlabs/Lib/ThreadItem.php b/Zotlabs/Lib/ThreadItem.php index 024502d2a..2fb07c1cb 100644 --- a/Zotlabs/Lib/ThreadItem.php +++ b/Zotlabs/Lib/ThreadItem.php @@ -35,7 +35,7 @@ class ThreadItem { public function __construct($data) { - + $this->data = $data; $this->toplevel = ($this->get_id() == $this->get_data_value('parent')); $this->threaded = get_config('system','thread_allow'); @@ -98,10 +98,11 @@ class ThreadItem { $conv = $this->get_conversation(); $observer = $conv->get_observer(); - $lock = (((intval($item['item_private'])) || (($item['uid'] == local_channel()) && (strlen($item['allow_cid']) || strlen($item['allow_gid']) + $lock = (((intval($item['item_private'])) || (($item['uid'] == local_channel()) && (strlen($item['allow_cid']) || strlen($item['allow_gid']) || strlen($item['deny_cid']) || strlen($item['deny_gid'])))) ? t('Private Message') : false); + $locktype = $item['item_private']; $shareable = ((($conv->get_profile_owner() == local_channel() && local_channel()) && ($item['item_private'] != 1)) ? true : false); @@ -151,9 +152,9 @@ class ThreadItem { if($observer && $observer['xchan_hash'] - && ($observer['xchan_hash'] == $this->get_data_value('author_xchan') - || $observer['xchan_hash'] == $this->get_data_value('owner_xchan') - || $observer['xchan_hash'] == $this->get_data_value('source_xchan') + && ($observer['xchan_hash'] == $this->get_data_value('author_xchan') + || $observer['xchan_hash'] == $this->get_data_value('owner_xchan') + || $observer['xchan_hash'] == $this->get_data_value('source_xchan') || $this->get_data_value('uid') == local_channel())) $dropping = true; @@ -169,15 +170,15 @@ class ThreadItem { 'dropping' => $dropping, 'delete' => t('Delete'), ); - } + } elseif(is_site_admin()) { $drop = [ 'dropping' => true, 'delete' => t('Admin Delete') ]; } // FIXME - if($observer_is_pageowner) { + if($observer_is_pageowner) { $multidrop = array( - 'select' => t('Select'), + 'select' => t('Select'), ); } @@ -223,7 +224,7 @@ class ThreadItem { if(! feature_enabled($conv->get_profile_owner(),'dislike')) unset($conv_responses['dislike']); - + $responses = get_responses($conv_responses,$response_verbs,$this,$item); $my_responses = []; @@ -254,7 +255,7 @@ class ThreadItem { } $showlike = ((x($conv_responses['like'],$item['mid'])) ? format_like($conv_responses['like'][$item['mid']],$conv_responses['like'][$item['mid'] . '-l'],'like',$item['mid']) : ''); - $showdislike = ((x($conv_responses['dislike'],$item['mid']) && feature_enabled($conv->get_profile_owner(),'dislike')) + $showdislike = ((x($conv_responses['dislike'],$item['mid']) && feature_enabled($conv->get_profile_owner(),'dislike')) ? format_like($conv_responses['dislike'][$item['mid']],$conv_responses['dislike'][$item['mid'] . '-l'],'dislike',$item['mid']) : ''); /* @@ -264,7 +265,7 @@ class ThreadItem { */ $this->check_wall_to_wall(); - + if($this->is_toplevel()) { // FIXME check this permission if(($conv->get_profile_owner() == local_channel()) && (! array_key_exists('real_uid',$item))) { @@ -275,7 +276,7 @@ class ThreadItem { ); } - } + } else { $is_comment = true; } @@ -349,7 +350,7 @@ class ThreadItem { // $viewthread (below) is only valid in list mode. If this is a channel page, build the thread viewing link // since we can't depend on llink or plink pointing to the right local location. - + $owner_address = substr($item['owner']['xchan_addr'],0,strpos($item['owner']['xchan_addr'],'@')); $viewthread = $item['llink']; if($conv->get_mode() === 'channel') @@ -357,7 +358,7 @@ class ThreadItem { $comment_count_txt = sprintf( tt('%d comment','%d comments',$total_children),$total_children ); $list_unseen_txt = (($unseen_comments) ? sprintf( t('%d unseen'),$unseen_comments) : ''); - + $children = $this->get_children(); $has_tags = (($body['tags'] || $body['categories'] || $body['mentions'] || $body['attachments'] || $body['folders']) ? true : false); @@ -386,7 +387,7 @@ class ThreadItem { $tmp_item = array( 'template' => $this->get_template(), 'mode' => $mode, - 'item_type' => intval($item['item_type']), + 'item_type' => intval($item['item_type']), //'type' => implode("",array_slice(explode("/",$item['verb']),-1)), 'body' => $body['html'], 'tags' => $body['tags'], @@ -432,6 +433,7 @@ class ThreadItem { 'editedtime' => (($item['edited'] != $item['created']) ? sprintf( t('last edited: %s'), datetime_convert('UTC', date_default_timezone_get(), $item['edited'], 'r')) : ''), 'expiretime' => (($item['expires'] > NULL_DATE) ? sprintf( t('Expires: %s'), datetime_convert('UTC', date_default_timezone_get(), $item['expires'], 'r')):''), 'lock' => $lock, + 'locktype' => $locktype, 'delayed' => $item['item_delayed'], 'privacy_warning' => $privacy_warning, 'verified' => $verified, @@ -518,8 +520,8 @@ class ThreadItem { // needed for scroll to comment from notification but needs more work // as we do not want to open all comments unless there is actually an #item_xx anchor -// and the url fragment is not sent to the server. -// if(in_array(\App::$module,['display','update_display'])) +// and the url fragment is not sent to the server. +// if(in_array(\App::$module,['display','update_display'])) // $visible_comments = 99999; if(($this->get_display_mode() === 'normal') && ($nb_children > 0)) { @@ -539,7 +541,7 @@ class ThreadItem { } } } - + $result['private'] = $item['item_private']; $result['toplevel'] = ($this->is_toplevel() ? 'toplevel_item' : ''); @@ -554,7 +556,7 @@ class ThreadItem { return $result; } - + public function get_id() { return $this->get_data_value('id'); } @@ -609,7 +611,7 @@ class ThreadItem { if(activity_match($item->get_data_value('verb'),ACTIVITY_LIKE) || activity_match($item->get_data_value('verb'),ACTIVITY_DISLIKE)) { return false; } - + $item->set_parent($this); $this->children[] = $item; return end($this->children); @@ -683,7 +685,7 @@ class ThreadItem { */ public function set_conversation($conv) { $previous_mode = ($this->conversation ? $this->conversation->get_mode() : ''); - + $this->conversation = $conv; // Set it on our children too @@ -792,7 +794,7 @@ class ThreadItem { if(!$this->is_toplevel() && !get_config('system','thread_allow')) { return ''; } - + $comment_box = ''; $conv = $this->get_conversation(); @@ -808,7 +810,7 @@ class ThreadItem { $arr = array('comment_buttons' => '','id' => $this->get_id()); call_hooks('comment_buttons',$arr); $comment_buttons = $arr['comment_buttons']; - + $comment_box = replace_macros($template,array( '$return_path' => '', '$threaded' => $this->is_threaded(), @@ -865,7 +867,7 @@ class ThreadItem { if($conv->get_mode() === 'channel') return; - + if($this->is_toplevel() && ($this->get_data_value('author_xchan') != $this->get_data_value('owner_xchan'))) { $this->owner_url = chanlink_hash($this->data['owner']['xchan_hash']); $this->owner_photo = $this->data['owner']['xchan_photo_m']; diff --git a/Zotlabs/Lib/Verify.php b/Zotlabs/Lib/Verify.php index 8703e29e6..f8dc8f8d4 100644 --- a/Zotlabs/Lib/Verify.php +++ b/Zotlabs/Lib/Verify.php @@ -5,7 +5,7 @@ namespace Zotlabs\Lib; class Verify { - function create($type,$channel_id,$token,$meta) { + public static function create($type,$channel_id,$token,$meta) { return q("insert into verify ( vtype, channel, token, meta, created ) values ( '%s', %d, '%s', '%s', '%s' )", dbesc($type), intval($channel_id), @@ -15,7 +15,7 @@ class Verify { ); } - function match($type,$channel_id,$token,$meta) { + public static function match($type,$channel_id,$token,$meta) { $r = q("select id from verify where vtype = '%s' and channel = %d and token = '%s' and meta = '%s' limit 1", dbesc($type), intval($channel_id), @@ -31,7 +31,7 @@ class Verify { return false; } - function get_meta($type,$channel_id,$token) { + public static function get_meta($type,$channel_id,$token) { $r = q("select id, meta from verify where vtype = '%s' and channel = %d and token = '%s' limit 1", dbesc($type), intval($channel_id), @@ -52,7 +52,7 @@ class Verify { * @param string $type Verify type * @param string $interval SQL compatible time interval */ - function purge($type, $interval) { + public static function purge($type, $interval) { q("delete from verify where vtype = '%s' and created < %s - INTERVAL %s", dbesc($type), db_utcnow(), diff --git a/Zotlabs/Lib/ZotURL.php b/Zotlabs/Lib/ZotURL.php index 98d1febe5..6bb01fd7a 100644 --- a/Zotlabs/Lib/ZotURL.php +++ b/Zotlabs/Lib/ZotURL.php @@ -21,9 +21,8 @@ class ZotURL { } $portable_url = substr($url,6); - $u = explode('/',$portable_url); + $u = explode('/',$portable_url); $portable_id = $u[0]; - $hosts = self::lookup($portable_id); if(! $hosts) { @@ -39,8 +38,8 @@ class ZotURL { if($channel && $m) { - $headers = [ - 'Accept' => 'application/x-zot+json', + $headers = [ + 'Accept' => 'application/x-zot+json', 'Content-Type' => 'application/x-zot+json', 'X-Zot-Token' => random_string(), 'Digest' => HTTPSig::generate_digest_header($data), @@ -50,9 +49,9 @@ class ZotURL { $h = HTTPSig::create_sig($headers,$channel['channel_prvkey'],channel_url($channel),false); } else { - $h = [ 'Accept: application/x-zot+json' ]; + $h = [ 'Accept: application/x-zot+json' ]; } - + $result = []; $redirects = 0; diff --git a/Zotlabs/Lib/Zotfinger.php b/Zotlabs/Lib/Zotfinger.php index e853d6ebc..840d91403 100644 --- a/Zotlabs/Lib/Zotfinger.php +++ b/Zotlabs/Lib/Zotfinger.php @@ -18,8 +18,8 @@ class Zotfinger { if($channel && $m) { - $headers = [ - 'Accept' => 'application/x-zot+json', + $headers = [ + 'Accept' => 'application/x-zot+json', 'Content-Type' => 'application/x-zot+json', 'X-Zot-Token' => random_string(), 'Digest' => HTTPSig::generate_digest_header($data), @@ -29,11 +29,10 @@ class Zotfinger { $h = HTTPSig::create_sig($headers,$channel['channel_prvkey'],channel_url($channel),false); } else { - $h = [ 'Accept: application/x-zot+json' ]; + $h = [ 'Accept: application/x-zot+json' ]; } - - $result = []; + $result = []; $redirects = 0; $x = z_post_url($resource,$data,$redirects, [ 'headers' => $h ] ); @@ -44,11 +43,11 @@ class Zotfinger { if ($verify) { $result['signature'] = HTTPSig::verify($x, EMPTY_STR, 'zot6'); } - + $result['data'] = json_decode($x['body'],true); if($result['data'] && is_array($result['data']) && array_key_exists('encrypted',$result['data']) && $result['data']['encrypted']) { - $result['data'] = json_decode(crypto_unencapsulate($result['data'],get_config('system','prvkey')),true); + $result['data'] = json_decode(Crypto::unencapsulate($result['data'],get_config('system','prvkey')),true); } logger('decrypted: ' . print_r($result,true)); diff --git a/Zotlabs/Module/Activity.php b/Zotlabs/Module/Activity.php index b75f0b245..48f2663cf 100644 --- a/Zotlabs/Module/Activity.php +++ b/Zotlabs/Module/Activity.php @@ -143,8 +143,8 @@ class Activity extends Controller { http_status_exit(403, 'Forbidden'); $i = ZlibActivity::encode_item_collection($nitems,'conversation/' . $item_id,'OrderedCollection'); - if($portable_id) { - ThreadListener::store(z_root() . '/activity/' . $item_id,$portable_id); + if($portable_id && (! intval($items[0]['item_private']))) { + ThreadListener::store(z_root() . '/activity/' . $item_id, $portable_id); } if(! $i) @@ -239,6 +239,16 @@ class Activity extends Controller { xchan_query($r,true); $items = fetch_post_tags($r,false); + if ($portable_id && (! intval($items[0]['item_private']))) { + $c = q("select abook_id from abook where abook_channel = %d and abook_xchan = '%s'", + intval($items[0]['uid']), + dbesc($portable_id) + ); + if (! $c) { + ThreadListener::store(z_root() . '/activity/' . $item_id, $portable_id); + } + } + $channel = channelx_by_n($items[0]['uid']); $x = array_merge( ['@context' => [ diff --git a/Zotlabs/Module/Article_edit.php b/Zotlabs/Module/Article_edit.php index 635b3ce2a..efa02e1c1 100644 --- a/Zotlabs/Module/Article_edit.php +++ b/Zotlabs/Module/Article_edit.php @@ -63,9 +63,9 @@ class Article_edit extends \Zotlabs\Web\Controller { if ($catsenabled){ $itm = fetch_post_tags($itm); - + $cats = get_terms_oftype($itm[0]['term'], TERM_CATEGORY); - + foreach ($cats as $cat) { if (strlen($category)) $category .= ', '; @@ -113,6 +113,7 @@ class Article_edit extends \Zotlabs\Web\Controller { 'post_id' => $post_id, 'visitor' => true, 'title' => htmlspecialchars($itm[0]['title'],ENT_COMPAT,'UTF-8'), + 'summary' => htmlspecialchars($itm[0]['summary'],ENT_COMPAT,'UTF-8'), 'placeholdertitle' => t('Title (optional)'), 'pagetitle' => $card_title, 'profile_uid' => (intval($channel['channel_id'])), diff --git a/Zotlabs/Module/Articles.php b/Zotlabs/Module/Articles.php index 3f726ebb9..9152f0e0e 100644 --- a/Zotlabs/Module/Articles.php +++ b/Zotlabs/Module/Articles.php @@ -15,7 +15,7 @@ require_once('include/opengraph.php'); class Articles extends Controller { function init() { - + if(argc() > 1) $which = argv(1); @@ -28,13 +28,13 @@ class Articles extends Controller { return; } } - + profile_load($which); - + } - + function get($update = 0, $load = false) { - + if(observer_prohibited(true)) { return login(); } @@ -56,7 +56,7 @@ class Articles extends Controller { nav_set_selected('Articles'); - head_add_link([ + head_add_link([ 'rel' => 'alternate', 'type' => 'application/json+oembed', 'href' => z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . App::$query_string), @@ -65,7 +65,7 @@ class Articles extends Controller { $category = (($_REQUEST['cat']) ? escape_tags(trim($_REQUEST['cat'])) : ''); - + if($category) { $sql_extra2 .= protect_sprintf(term_item_parent_query(App::$profile['profile_uid'],'item', $category, TERM_CATEGORY)); } @@ -74,24 +74,24 @@ class Articles extends Controller { $datequery2 = ((x($_GET,'dbegin') && is_a_date_arg($_GET['dbegin'])) ? notags($_GET['dbegin']) : ''); $which = argv(1); - + $selected_card = ((argc() > 2) ? argv(2) : ''); $_SESSION['return_url'] = App::$query_string; - + $uid = local_channel(); $owner = App::$profile_uid; $observer = App::get_observer(); - + $ob_hash = (($observer) ? $observer['xchan_hash'] : ''); - + if(! perm_is_allowed($owner,$ob_hash,'view_pages')) { notice( t('Permission denied.') . EOL); return; } - + $is_owner = ($uid && $uid == $owner); - + $channel = channelx_by_n($owner); if($channel) { @@ -105,7 +105,7 @@ class Articles extends Controller { else { $channel_acl = [ 'allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '' ]; } - + if(perm_is_allowed($owner,$ob_hash,'write_pages')) { @@ -114,16 +114,15 @@ class Articles extends Controller { 'webpage' => ITEM_TYPE_ARTICLE, 'is_owner' => true, 'content_label' => t('Add Article'), - 'button' => t('Create'), + 'button' => t('Save'), 'nickname' => $channel['channel_address'], - 'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] + 'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'), - 'acl' => (($is_owner) ? populate_acl($channel_acl, false, + 'acl' => (($is_owner) ? populate_acl($channel_acl, false, PermissionDescription::fromGlobalPermission('view_pages')) : ''), 'permissions' => $channel_acl, 'showacl' => (($is_owner) ? true : false), 'visitor' => true, - 'body' => '[summary][/summary]', 'hide_location' => false, 'hide_voting' => false, 'profile_uid' => intval($owner), @@ -147,12 +146,12 @@ class Articles extends Controller { else { $editor = ''; } - + $itemspage = get_pconfig(local_channel(),'system','itemspage'); App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 10)); $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(App::$pager['itemspage']), intval(App::$pager['start'])); - + $sql_extra = item_permissions_sql($owner); $sql_item = ''; @@ -176,8 +175,8 @@ class Articles extends Controller { $sql_extra2 .= " and item.item_thread_top != 0 "; } - $r = q("select * from item - where item.uid = %d and item_type = %d + $r = q("select * from item + where item.uid = %d and item_type = %d $sql_extra $sql_extra2 $sql_item order by item.created desc $pager_sql", intval($owner), intval(ITEM_TYPE_ARTICLE) @@ -214,7 +213,7 @@ class Articles extends Controller { opengraph_add_meta((! empty($items) ? $r[0] : []), $channel); $mode = 'articles'; - + if(get_pconfig(local_channel(),'system','articles_list_mode') && (! $selected_card)) $page_mode = 'pager_list'; else diff --git a/Zotlabs/Module/Attach.php b/Zotlabs/Module/Attach.php index 172f6a4bc..5f5779b51 100644 --- a/Zotlabs/Module/Attach.php +++ b/Zotlabs/Module/Attach.php @@ -1,4 +1,5 @@ $zip_filename, - 'zip_path' => $zip_path + 'zip_path' => $zip_path ]; Verify::create('zip_token', 0, $token, json_encode($meta)); json_return_and_die([ 'success' => true, - 'token' => $token + 'token' => $token ]); } @@ -63,28 +64,28 @@ class Attach extends Controller { function get() { - if(argc() < 2) { - notice( t('Item not available.') . EOL); + if (argc() < 2) { + notice(t('Item not available.') . EOL); return; } $token = ((x($_REQUEST, 'token')) ? $_REQUEST['token'] : ''); - if(argv(1) === 'download') { + if (argv(1) === 'download') { $meta = Verify::get_meta('zip_token', 0, $token); - if(! $meta) + if (!$meta) killme(); $meta = json_decode($meta, true); header('Content-Type: application/zip'); - header('Content-Disposition: attachment; filename="'. $meta['zip_filename'] . '"'); + header('Content-Disposition: attachment; filename="' . $meta['zip_filename'] . '"'); header('Content-Length: ' . filesize($meta['zip_path'])); $istream = fopen($meta['zip_path'], 'rb'); $ostream = fopen('php://output', 'wb'); - if($istream && $ostream) { + if ($istream && $ostream) { pipe_streams($istream, $ostream); fclose($istream); fclose($ostream); @@ -94,10 +95,10 @@ class Attach extends Controller { killme(); } - $r = attach_by_hash(argv(1),get_observer_hash(),((argc() > 2) ? intval(argv(2)) : 0)); + $r = attach_by_hash(argv(1), get_observer_hash(), ((argc() > 2) ? intval(argv(2)) : 0)); - if(! $r['success']) { - notice( $r['message'] . EOL); + if (!$r['success']) { + notice($r['message'] . EOL); return; } @@ -105,27 +106,27 @@ class Attach extends Controller { intval($r['data']['uid']) ); - if(! $c) + if (!$c) return; - $unsafe_types = array('text/html','text/css','application/javascript'); + $unsafe_types = array('text/html', 'text/css', 'application/javascript'); - if(in_array($r['data']['filetype'],$unsafe_types) && (! channel_codeallowed($r['data']['uid']))) { - header('Content-Type: text/plain'); + if (in_array($r['data']['filetype'], $unsafe_types) && (!channel_codeallowed($r['data']['uid']))) { + header('Content-Type: text/plain'); } else { header('Content-Type: ' . $r['data']['filetype']); } header('Content-Disposition: attachment; filename="' . $r['data']['filename'] . '"'); - if(intval($r['data']['os_storage'])) { + if (intval($r['data']['os_storage'])) { $fname = $r['data']['content']; - if(strpos($fname,'store') !== false) - $istream = fopen($fname,'rb'); + if (strpos($fname, 'store') !== false) + $istream = fopen($fname, 'rb'); else - $istream = fopen('store/' . $c[0]['channel_address'] . '/' . $fname,'rb'); - $ostream = fopen('php://output','wb'); - if($istream && $ostream) { + $istream = fopen('store/' . $c[0]['channel_address'] . '/' . $fname, 'rb'); + $ostream = fopen('php://output', 'wb'); + if ($istream && $ostream) { pipe_streams($istream, $ostream); fclose($istream); fclose($ostream); @@ -140,14 +141,14 @@ class Attach extends Controller { public function zip_archive_handler($zip, $attach_ids, $attach_path, $pass = 1) { $observer_hash = get_observer_hash(); - $single = ((count($attach_ids) == 1) ? true : false); + $single = ((count($attach_ids) == 1) ? true : false); $download_name = 'download.zip'; - foreach($attach_ids as $attach_id) { + foreach ($attach_ids as $attach_id) { $r = attach_by_id($attach_id, $observer_hash); - if (! $r['success']) { + if (!$r['success']) { continue; } @@ -158,8 +159,8 @@ class Attach extends Controller { if ($attach_path) { $strip_str = $attach_path . '/'; - $count = strlen($strip_str); - $zip_path = substr($r['data']['display_path'], $count); + $count = strlen($strip_str); + $zip_path = substr($r['data']['display_path'], $count); } if ($r['data']['is_dir']) { diff --git a/Zotlabs/Module/Cal.php b/Zotlabs/Module/Cal.php index 07bee38bd..65dba927b 100644 --- a/Zotlabs/Module/Cal.php +++ b/Zotlabs/Module/Cal.php @@ -37,8 +37,6 @@ class Cal extends Controller { $observer = App::get_observer(); App::$data['observer'] = $observer; - $observer_xchan = (($observer) ? $observer['xchan_hash'] : ''); - head_set_icon(App::$data['channel']['xchan_photo_s']); App::$page['htmlhead'] .= "" ; @@ -159,10 +157,10 @@ class Cal extends Controller { 'timezone' => $tz, 'start'=> $start, 'end' => $end, - 'drop' => $drop, + 'drop' => false, 'allDay' => (($rr['adjust']) ? 0 : 1), 'title' => html_entity_decode($rr['summary'], ENT_COMPAT, 'UTF-8'), - 'editable' => $edit ? true : false, + 'editable' => false, 'item' => $rr, 'plink' => [$rr['plink'], t('Link to source')], 'description' => html_entity_decode($rr['description'], ENT_COMPAT, 'UTF-8'), @@ -205,9 +203,9 @@ class Cal extends Controller { '$prev' => t('Previous'), '$next' => t('Next'), '$today' => t('Today'), - '$title' => $title, - '$dtstart' => $dtstart, - '$dtend' => $dtend, + '$title' => '', + '$dtstart' => '', + '$dtend' => '', '$nick' => $nick ]); diff --git a/Zotlabs/Module/Card_edit.php b/Zotlabs/Module/Card_edit.php index e01e70fdb..c57a0f043 100644 --- a/Zotlabs/Module/Card_edit.php +++ b/Zotlabs/Module/Card_edit.php @@ -63,9 +63,9 @@ class Card_edit extends \Zotlabs\Web\Controller { if ($catsenabled){ $itm = fetch_post_tags($itm); - + $cats = get_terms_oftype($itm[0]['term'], TERM_CATEGORY); - + foreach ($cats as $cat) { if (strlen($category)) $category .= ', '; @@ -114,6 +114,7 @@ class Card_edit extends \Zotlabs\Web\Controller { 'post_id' => $post_id, 'visitor' => true, 'title' => htmlspecialchars($itm[0]['title'],ENT_COMPAT,'UTF-8'), + 'summary' => htmlspecialchars($itm[0]['summary'],ENT_COMPAT,'UTF-8'), 'placeholdertitle' => t('Title (optional)'), 'pagetitle' => $card_title, 'profile_uid' => (intval($channel['channel_id'])), diff --git a/Zotlabs/Module/Cards.php b/Zotlabs/Module/Cards.php index c44f7942b..8f47208ce 100644 --- a/Zotlabs/Module/Cards.php +++ b/Zotlabs/Module/Cards.php @@ -110,7 +110,7 @@ class Cards extends Controller { 'webpage' => ITEM_TYPE_CARD, 'is_owner' => true, 'content_label' => t('Add Card'), - 'button' => t('Create'), + 'button' => t('Save'), 'nickname' => $channel['channel_address'], 'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'), diff --git a/Zotlabs/Module/Cdav.php b/Zotlabs/Module/Cdav.php index f5c5f4384..fe697a526 100644 --- a/Zotlabs/Module/Cdav.php +++ b/Zotlabs/Module/Cdav.php @@ -284,7 +284,7 @@ class Cdav extends Controller { $server->addPlugin(new \Sabre\CardDAV\VCFExportPlugin()); // And off we go! - $server->exec(); + $server->start(); killme(); diff --git a/Zotlabs/Module/Channel.php b/Zotlabs/Module/Channel.php index 7ff394750..a513523a7 100644 --- a/Zotlabs/Module/Channel.php +++ b/Zotlabs/Module/Channel.php @@ -4,10 +4,13 @@ namespace Zotlabs\Module; use App; -use Zotlabs\Web\Controller; -use Zotlabs\Lib\PermissionDescription; -use Zotlabs\Web\HTTPSig; +use Zotlabs\Lib\Activity; +use Zotlabs\Lib\ActivityStreams; +use Zotlabs\Lib\Crypto; use Zotlabs\Lib\Libzot; +use Zotlabs\Lib\PermissionDescription; +use Zotlabs\Web\Controller; +use Zotlabs\Web\HTTPSig; require_once('include/items.php'); require_once('include/security.php'); @@ -20,88 +23,117 @@ require_once('include/opengraph.php'); * @brief Channel Controller * */ - class Channel extends Controller { function init() { - if(in_array(substr($_GET['search'],0,1),[ '@', '!', '?'])) + if (in_array(substr($_GET['search'], 0, 1), ['@', '!', '?']) || strpos($_GET['search'], 'https://') === 0) goaway('search' . '?f=&search=' . $_GET['search']); $which = null; - if(argc() > 1) + if (argc() > 1) $which = argv(1); - if(! $which) { - if(local_channel()) { + if (!$which) { + if (local_channel()) { $channel = App::get_channel(); - if($channel && $channel['channel_address']) - $which = $channel['channel_address']; + if ($channel && $channel['channel_address']) + $which = $channel['channel_address']; } } - if(! $which) { - notice( t('You must be logged in to see this page.') . EOL ); + if (!$which) { + notice(t('You must be logged in to see this page.') . EOL); return; } $profile = 0; $channel = App::get_channel(); - if((local_channel()) && (argc() > 2) && (argv(2) === 'view')) { - $which = $channel['channel_address']; + if ((local_channel()) && (argc() > 2) && (argv(2) === 'view')) { + $which = $channel['channel_address']; $profile = argv(1); } $channel = channelx_by_nick($which); - if(! $channel) { + if (!$channel) { http_status_exit(404, 'Not found'); } - // handle zot6 channel discovery + // handle zot6 channel discovery + + if (Libzot::is_zot_request()) { - if(Libzot::is_zot_request()) { - $sigdata = HTTPSig::verify(file_get_contents('php://input'), EMPTY_STR, 'zot6'); - if($sigdata && $sigdata['signer'] && $sigdata['header_valid']) { - $data = json_encode(Libzot::zotinfo([ 'address' => $channel['channel_address'], 'target_url' => $sigdata['signer'] ])); - $s = q("select site_crypto, hubloc_sitekey from site left join hubloc on hubloc_url = site_url where hubloc_id_url = '%s' and hubloc_network = 'zot6' limit 1", + if ($sigdata && $sigdata['signer'] && $sigdata['header_valid']) { + $data = json_encode(Libzot::zotinfo(['address' => $channel['channel_address'], 'target_url' => $sigdata['signer']])); + $s = q("select site_crypto, hubloc_sitekey from site left join hubloc on hubloc_url = site_url where hubloc_id_url = '%s' and hubloc_network = 'zot6' limit 1", dbesc($sigdata['signer']) ); - if($s) { - $data = json_encode(crypto_encapsulate($data,$s[0]['hubloc_sitekey'],Libzot::best_algorithm($s[0]['site_crypto']))); + if ($s) { + $data = json_encode(Crypto::encapsulate($data, $s[0]['hubloc_sitekey'], Libzot::best_algorithm($s[0]['site_crypto']))); } } else { - $data = json_encode(Libzot::zotinfo([ 'address' => $channel['channel_address'] ])); + $data = json_encode(Libzot::zotinfo(['guid_hash' => $channel['channel_hash']])); } - $headers = [ - 'Content-Type' => 'application/x-zot+json', + $headers = [ + 'Content-Type' => 'application/x-zot+json', 'Digest' => HTTPSig::generate_digest_header($data), '(request-target)' => strtolower($_SERVER['REQUEST_METHOD']) . ' ' . $_SERVER['REQUEST_URI'] - ]; - $h = HTTPSig::create_sig($headers,$channel['channel_prvkey'],channel_url($channel)); + ]; + $h = HTTPSig::create_sig($headers, $channel['channel_prvkey'], channel_url($channel)); HTTPSig::set_headers($h); echo $data; killme(); } + if (ActivityStreams::is_as_request($channel)) { - if((local_channel()) && (argc() > 2) && (argv(2) === 'view')) { - $which = $channel['channel_address']; + // Somebody may attempt an ActivityStreams fetch on one of our message permalinks + // Make it do the right thing. + + $mid = ((x($_REQUEST, 'mid')) ? $_REQUEST['mid'] : ''); + if ($mid && strpos($mid, 'b64.') === 0) { + $decoded = @base64url_decode(substr($mid, 4)); + if ($decoded) { + $mid = $decoded; + } + } + if ($mid) { + $obj = null; + if (strpos($mid, z_root() . '/item/') === 0) { + App::$argc = 2; + App::$argv = ['item', basename($mid)]; + $obj = new Item(); + } + if (strpos($mid, z_root() . '/activity/') === 0) { + App::$argc = 2; + App::$argv = ['activity', basename($mid)]; + $obj = new Activity(); + } + if ($obj) { + $obj->init(); + } + } + as_return_and_die(Activity::encode_person($channel, true), $channel); + } + + if ((local_channel()) && (argc() > 2) && (argv(2) === 'view')) { + $which = $channel['channel_address']; $profile = argv(1); } - head_add_link( [ - 'rel' => 'alternate', + head_add_link([ + 'rel' => 'alternate', 'type' => 'application/atom+xml', 'title' => t('Posts and comments'), 'href' => z_root() . '/feed/' . $which ]); - head_add_link( [ - 'rel' => 'alternate', + head_add_link([ + 'rel' => 'alternate', 'type' => 'application/atom+xml', 'title' => t('Only posts'), 'href' => z_root() . '/feed/' . $which . '?f=&top=1' @@ -110,19 +142,19 @@ class Channel extends Controller { // Run profile_load() here to make sure the theme is set before // we start loading content - profile_load($which,$profile); - + profile_load($which, $profile); + // Add Opengraph markup - $mid = ((x($_REQUEST,'mid')) ? $_REQUEST['mid'] : ''); - if(strpos($mid,'b64.') === 0) - $mid = @base64url_decode(substr($mid,4)); - - if($mid) - $r = q("SELECT * FROM item WHERE mid = '%s' AND uid = %d AND item_private = 0 LIMIT 1", - dbesc($mid), - intval($channel['channel_id']) - ); - + $mid = ((x($_REQUEST, 'mid')) ? $_REQUEST['mid'] : ''); + if (strpos($mid, 'b64.') === 0) + $mid = @base64url_decode(substr($mid, 4)); + + if ($mid) + $r = q("SELECT * FROM item WHERE mid = '%s' AND uid = %d AND item_private = 0 LIMIT 1", + dbesc($mid), + intval($channel['channel_id']) + ); + opengraph_add_meta($r ? $r[0] : [], $channel); } @@ -132,99 +164,99 @@ class Channel extends Controller { $category = $datequery = $datequery2 = ''; - $mid = ((x($_REQUEST,'mid')) ? $_REQUEST['mid'] : ''); + $mid = ((x($_REQUEST, 'mid')) ? $_REQUEST['mid'] : ''); - if(strpos($mid,'b64.') === 0) - $decoded = @base64url_decode(substr($mid,4)); - if($decoded) + if (strpos($mid, 'b64.') === 0) + $decoded = @base64url_decode(substr($mid, 4)); + if ($decoded) $mid = $decoded; - $datequery = ((x($_GET,'dend') && is_a_date_arg($_GET['dend'])) ? notags($_GET['dend']) : ''); - $datequery2 = ((x($_GET,'dbegin') && is_a_date_arg($_GET['dbegin'])) ? notags($_GET['dbegin']) : ''); + $datequery = ((x($_GET, 'dend') && is_a_date_arg($_GET['dend'])) ? notags($_GET['dend']) : ''); + $datequery2 = ((x($_GET, 'dbegin') && is_a_date_arg($_GET['dbegin'])) ? notags($_GET['dbegin']) : ''); - if(observer_prohibited(true)) { + if (observer_prohibited(true)) { return login(); } - $category = ((x($_REQUEST,'cat')) ? $_REQUEST['cat'] : ''); - $hashtags = ((x($_REQUEST,'tag')) ? $_REQUEST['tag'] : ''); - $order = ((x($_GET,'order')) ? notags($_GET['order']) : 'post'); - $search = ((x($_GET,'search')) ? $_GET['search'] : EMPTY_STR); + $category = ((x($_REQUEST, 'cat')) ? $_REQUEST['cat'] : ''); + $hashtags = ((x($_REQUEST, 'tag')) ? $_REQUEST['tag'] : ''); + $order = ((x($_GET, 'order')) ? notags($_GET['order']) : 'post'); + $search = ((x($_GET, 'search')) ? $_GET['search'] : EMPTY_STR); - $groups = array(); + $groups = []; $o = ''; - if($update) { + if ($update) { // Ensure we've got a profile owner if updating. App::$profile['profile_uid'] = App::$profile_uid = $update; } $is_owner = (((local_channel()) && (App::$profile['profile_uid'] == local_channel())) ? true : false); - $channel = App::get_channel(); + $channel = App::get_channel(); $observer = App::get_observer(); - $ob_hash = (($observer) ? $observer['xchan_hash'] : ''); + $ob_hash = (($observer) ? $observer['xchan_hash'] : ''); - $perms = get_all_perms(App::$profile['profile_uid'],$ob_hash); + $perms = get_all_perms(App::$profile['profile_uid'], $ob_hash); - if(! $perms['view_stream']) { + if (!$perms['view_stream']) { // We may want to make the target of this redirect configurable - if($perms['view_profile']) { - notice( t('Insufficient permissions. Request redirected to profile page.') . EOL); - goaway (z_root() . "/profile/" . App::$profile['channel_address']); + if ($perms['view_profile']) { + notice(t('Insufficient permissions. Request redirected to profile page.') . EOL); + goaway(z_root() . "/profile/" . App::$profile['channel_address']); } - notice( t('Permission denied.') . EOL); + notice(t('Permission denied.') . EOL); return; } - if(! $update) { + if (!$update) { nav_set_selected('Channel Home'); // search terms header - if($search) { - $o .= replace_macros(get_markup_template("section_title.tpl"),array( - '$title' => t('Search Results For:') . ' ' . htmlspecialchars($search, ENT_COMPAT,'UTF-8') - )); + if ($search) { + $o .= replace_macros(get_markup_template("section_title.tpl"), [ + '$title' => t('Search Results For:') . ' ' . htmlspecialchars($search, ENT_COMPAT, 'UTF-8') + ]); } - if($channel && $is_owner) { - $channel_acl = array( + if ($channel && $is_owner) { + $channel_acl = [ 'allow_cid' => $channel['channel_allow_cid'], 'allow_gid' => $channel['channel_allow_gid'], - 'deny_cid' => $channel['channel_deny_cid'], - 'deny_gid' => $channel['channel_deny_gid'] - ); + 'deny_cid' => $channel['channel_deny_cid'], + 'deny_gid' => $channel['channel_deny_gid'] + ]; } else { - $channel_acl = [ 'allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '' ]; + $channel_acl = ['allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '']; } - if($perms['post_wall']) { + if ($perms['post_wall']) { - $x = array( - 'is_owner' => $is_owner, - 'allow_location' => ((($is_owner || $observer) && (intval(get_pconfig(App::$profile['profile_uid'],'system','use_browser_location')))) ? true : false), - 'default_location' => (($is_owner) ? App::$profile['channel_location'] : ''), - 'nickname' => App::$profile['channel_address'], - 'lockstate' => (((strlen(App::$profile['channel_allow_cid'])) || (strlen(App::$profile['channel_allow_gid'])) || (strlen(App::$profile['channel_deny_cid'])) || (strlen(App::$profile['channel_deny_gid']))) ? 'lock' : 'unlock'), - 'acl' => (($is_owner) ? populate_acl($channel_acl,true, PermissionDescription::fromGlobalPermission('view_stream'), get_post_aclDialogDescription(), 'acl_dialog_post') : ''), - 'permissions' => $channel_acl, - 'showacl' => (($is_owner) ? 'yes' : ''), - 'bang' => '', - 'visitor' => (($is_owner || $observer) ? true : false), - 'profile_uid' => App::$profile['profile_uid'], + $x = [ + 'is_owner' => $is_owner, + 'allow_location' => ((($is_owner || $observer) && (intval(get_pconfig(App::$profile['profile_uid'], 'system', 'use_browser_location')))) ? true : false), + 'default_location' => (($is_owner) ? App::$profile['channel_location'] : ''), + 'nickname' => App::$profile['channel_address'], + 'lockstate' => (((strlen(App::$profile['channel_allow_cid'])) || (strlen(App::$profile['channel_allow_gid'])) || (strlen(App::$profile['channel_deny_cid'])) || (strlen(App::$profile['channel_deny_gid']))) ? 'lock' : 'unlock'), + 'acl' => (($is_owner) ? populate_acl($channel_acl, true, PermissionDescription::fromGlobalPermission('view_stream'), get_post_aclDialogDescription(), 'acl_dialog_post') : ''), + 'permissions' => $channel_acl, + 'showacl' => (($is_owner) ? 'yes' : ''), + 'bang' => '', + 'visitor' => (($is_owner || $observer) ? true : false), + 'profile_uid' => App::$profile['profile_uid'], 'editor_autocomplete' => true, - 'bbco_autocomplete' => 'bbcode', - 'bbcode' => true, - 'jotnets' => true, - 'reset' => t('Reset form') - ); + 'bbco_autocomplete' => 'bbcode', + 'bbcode' => true, + 'jotnets' => true, + 'reset' => t('Reset form') + ]; - $o .= status_editor($a,$x,false,'Channel'); + $o .= status_editor($a, $x, false, 'Channel'); } } @@ -233,16 +265,16 @@ class Channel extends Controller { /** * Get permissions SQL - if $remote_contact is true, our remote user has been pre-verified and we already have fetched his/her groups */ - - $item_normal = " and item.item_hidden = 0 and item.item_type = 0 and item.item_deleted = 0 + + $item_normal = " and item.item_hidden = 0 and item.item_type = 0 and item.item_deleted = 0 and item.item_unpublished = 0 and item.item_pending_remove = 0 and item.item_blocked = 0 "; - if (! $is_owner) - $item_normal .= "and item.item_delayed = 0 "; + if (!$is_owner) + $item_normal .= "and item.item_delayed = 0 "; $item_normal_update = item_normal_update(); - $sql_extra = item_permissions_sql(App::$profile['profile_uid']); + $sql_extra = item_permissions_sql(App::$profile['profile_uid']); - if(feature_enabled(App::$profile['profile_uid'], 'channel_list_mode') && (! $mid)) + if (feature_enabled(App::$profile['profile_uid'], 'channel_list_mode') && (!$mid)) $page_mode = 'list'; else $page_mode = 'client'; @@ -250,13 +282,13 @@ class Channel extends Controller { $abook_uids = " and abook.abook_channel = " . intval(App::$profile['profile_uid']) . " "; $simple_update = ''; - if($update && $_SESSION['loadtime']) - $simple_update = " AND (( item_unseen = 1 AND item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) OR item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) "; + if ($update && $_SESSION['loadtime']) + $simple_update = " AND (( item_unseen = 1 AND item.changed > '" . datetime_convert('UTC', 'UTC', $_SESSION['loadtime']) . "' ) OR item.changed > '" . datetime_convert('UTC', 'UTC', $_SESSION['loadtime']) . "' ) "; - if($search) { + if ($search) { $search = escape_tags($search); - if(strpos($search,'#') === 0) { - $sql_extra .= term_query('item',substr($search,1),TERM_HASHTAG,TERM_COMMUNITYTAG); + if (strpos($search, '#') === 0) { + $sql_extra .= term_query('item', substr($search, 1), TERM_HASHTAG, TERM_COMMUNITYTAG); } else { $sql_extra .= sprintf(" AND (item.body like '%s' OR item.title like '%s') ", @@ -266,16 +298,16 @@ class Channel extends Controller { } } - head_add_link([ + head_add_link([ 'rel' => 'alternate', 'type' => 'application/json+oembed', 'href' => z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . App::$query_string), 'title' => 'oembed' ]); - if(($update) && (! $load)) { + if (($update) && (!$load)) { - if($mid) { + if ($mid) { $r = q("SELECT parent AS item_id from item where mid like '%s' and uid = %d $item_normal_update AND item_wall = 1 $simple_update $sql_extra limit 1", dbesc($mid . '%'), @@ -296,61 +328,61 @@ class Channel extends Controller { } else { - if(x($category)) { - $sql_extra2 .= protect_sprintf(term_item_parent_query(App::$profile['profile_uid'],'item', $category, TERM_CATEGORY)); + if (x($category)) { + $sql_extra2 .= protect_sprintf(term_item_parent_query(App::$profile['profile_uid'], 'item', $category, TERM_CATEGORY)); } - if(x($hashtags)) { - $sql_extra2 .= protect_sprintf(term_item_parent_query(App::$profile['profile_uid'],'item', $hashtags, TERM_HASHTAG, TERM_COMMUNITYTAG)); + if (x($hashtags)) { + $sql_extra2 .= protect_sprintf(term_item_parent_query(App::$profile['profile_uid'], 'item', $hashtags, TERM_HASHTAG, TERM_COMMUNITYTAG)); } - if($datequery) { - $sql_extra2 .= protect_sprintf(sprintf(" AND item.created <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery)))); - $order = 'post'; + if ($datequery) { + $sql_extra2 .= protect_sprintf(sprintf(" AND item.created <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(), '', $datequery)))); + $order = 'post'; } - if($datequery2) { - $sql_extra2 .= protect_sprintf(sprintf(" AND item.created >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery2)))); + if ($datequery2) { + $sql_extra2 .= protect_sprintf(sprintf(" AND item.created >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(), '', $datequery2)))); } - if($order === 'post') + if ($order === 'post') $ordering = "created"; else $ordering = "commented"; - $itemspage = get_pconfig(local_channel(),'system','itemspage'); + $itemspage = get_pconfig(local_channel(), 'system', 'itemspage'); App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 10)); $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(App::$pager['itemspage']), intval(App::$pager['start'])); - if($noscript_content || $load) { - if($mid) { + if ($noscript_content || $load) { + if ($mid) { $r = q("SELECT parent AS item_id from item where mid like '%s' and uid = %d $item_normal AND item_wall = 1 $sql_extra limit 1", dbesc($mid . '%'), intval(App::$profile['profile_uid']) ); - if (! $r) { - notice( t('Permission denied.') . EOL); + if (!$r) { + notice(t('Permission denied.') . EOL); } } else { - $r = q("SELECT DISTINCT item.parent AS item_id, $ordering FROM item + $r = q("SELECT DISTINCT item.parent AS item_id, $ordering FROM item left join abook on ( item.author_xchan = abook.abook_xchan $abook_uids ) WHERE true and item.uid = %d $item_normal AND (abook.abook_blocked = 0 or abook.abook_flags is null) AND item.item_wall = 1 AND item.item_thread_top = 1 - $sql_extra $sql_extra2 + $sql_extra $sql_extra2 ORDER BY $ordering DESC, item_id $pager_sql ", intval(App::$profile['profile_uid']) ); } } else { - $r = array(); + $r = []; } } - if($r) { + if ($r) { - $parents_str = ids_to_querystr($r,'item_id'); + $parents_str = ids_to_querystr($r, 'item_id'); $r = q("SELECT item.*, item.id AS item_id FROM item @@ -363,28 +395,38 @@ class Channel extends Controller { xchan_query($r); $items = fetch_post_tags($r, true); - $items = conv_sort($items,$ordering); + $items = conv_sort($items, $ordering); - if($load && $mid && (! count($items))) { + if ($load && $mid && (!count($items))) { // This will happen if we don't have sufficient permissions // to view the parent item (or the item itself if it is toplevel) - notice( t('Permission denied.') . EOL); + notice(t('Permission denied.') . EOL); } - } else { - $items = array(); + } + else { + $items = []; } - if((! $update) && (! $load)) { + // Add pinned content + if (!x($_REQUEST, 'mid') && !$search) { + $pinned = new \Zotlabs\Widget\Pinned; + $r = $pinned->widget(intval(App::$profile['profile_uid']), [ITEM_TYPE_POST]); + $o .= $r['html']; + } - if($decoded) + $mode = (($search) ? 'search' : 'channel'); + + if ((!$update) && (!$load)) { + + if ($decoded) $mid = 'b64.' . base64url_encode($mid); // This is ugly, but we can't pass the profile_uid through the session to the ajax updater, // because browser prefetching might change it on us. We have to deliver it with the page. - $maxheight = get_pconfig(App::$profile['profile_uid'],'system','channel_divmore_height'); - if(! $maxheight) + $maxheight = get_pconfig(App::$profile['profile_uid'], 'system', 'channel_divmore_height'); + if (!$maxheight) $maxheight = 400; $o .= '
' . "\r\n"; @@ -392,57 +434,48 @@ class Channel extends Controller { . "; var netargs = '?f='; var profile_page = " . App::$pager['page'] . "; divmore_height = " . intval($maxheight) . ";\r\n"; - App::$page['htmlhead'] .= replace_macros(get_markup_template("build_query.tpl"),array( - '$baseurl' => z_root(), - '$pgtype' => 'channel', - '$uid' => ((App::$profile['profile_uid']) ? App::$profile['profile_uid'] : '0'), - '$gid' => '0', - '$cid' => '0', - '$cmin' => '(-1)', - '$cmax' => '(-1)', - '$star' => '0', - '$liked' => '0', - '$conv' => '0', - '$spam' => '0', - '$nouveau' => '0', - '$wall' => '1', - '$fh' => '0', - '$dm' => '0', - '$page' => ((App::$pager['page'] != 1) ? App::$pager['page'] : 1), - '$search' => $search, - '$xchan' => '', - '$order' => (($order) ? urlencode($order) : ''), - '$list' => ((x($_REQUEST,'list')) ? intval($_REQUEST['list']) : 0), - '$file' => '', - '$cats' => (($category) ? urlencode($category) : ''), - '$tags' => (($hashtags) ? urlencode($hashtags) : ''), - '$mid' => (($mid) ? urlencode($mid) : ''), - '$verb' => '', - '$net' => '', - '$dend' => $datequery, - '$dbegin' => $datequery2, - '$conv_mode' => 'channel' - )); - + App::$page['htmlhead'] .= replace_macros(get_markup_template("build_query.tpl"), [ + '$baseurl' => z_root(), + '$pgtype' => 'channel', + '$uid' => ((App::$profile['profile_uid']) ? App::$profile['profile_uid'] : '0'), + '$gid' => '0', + '$cid' => '0', + '$cmin' => '(-1)', + '$cmax' => '(-1)', + '$star' => '0', + '$liked' => '0', + '$conv' => '0', + '$spam' => '0', + '$nouveau' => '0', + '$wall' => '1', + '$fh' => '0', + '$dm' => '0', + '$page' => ((App::$pager['page'] != 1) ? App::$pager['page'] : 1), + '$search' => $search, + '$xchan' => '', + '$order' => (($order) ? urlencode($order) : ''), + '$list' => ((x($_REQUEST, 'list')) ? intval($_REQUEST['list']) : 0), + '$file' => '', + '$cats' => (($category) ? urlencode($category) : ''), + '$tags' => (($hashtags) ? urlencode($hashtags) : ''), + '$mid' => (($mid) ? urlencode($mid) : ''), + '$verb' => '', + '$net' => '', + '$dend' => $datequery, + '$dbegin' => $datequery2, + '$conv_mode' => 'channel', + '$page_mode' => $page_mode + ]); } - // Add pinned content - if(! x($_REQUEST,'mid') && ! $search) { - $pinned = new \Zotlabs\Widget\Pinned; - $r = $pinned->widget(intval(App::$profile['profile_uid']), [ITEM_TYPE_POST]); - $o .= $r['html']; - } - - $mode = (($search) ? 'search' : 'channel'); - - if($update) { - $o .= conversation($items,$mode,$update,$page_mode); + if ($update) { + $o .= conversation($items, $mode, $update, $page_mode); } else { $o .= ''; - $o .= conversation($items,$mode,$update,$page_mode); + $o .= conversation($items, $mode, $update, $page_mode); if ($mid && $items[0]['title']) App::$page['title'] = $items[0]['title'] . " - " . App::$page['title']; } - if($mid) + if ($mid) $o .= '
'; $_SESSION['loadtime'] = datetime_convert(); diff --git a/Zotlabs/Module/Channel_calendar.php b/Zotlabs/Module/Channel_calendar.php index ae4afb2f3..ac1545644 100644 --- a/Zotlabs/Module/Channel_calendar.php +++ b/Zotlabs/Module/Channel_calendar.php @@ -1,7 +1,12 @@ set($x[0]); - + $created = $x[0]['created']; - $edited = datetime_convert(); + $edited = datetime_convert(); } else { $created = $edited = datetime_convert(); $acl->set_from_array($_POST); } - + $post_tags = array(); - $channel = \App::get_channel(); - $ac = $acl->get(); + $channel = App::get_channel(); + $ac = $acl->get(); $str_contact_allow = $ac['allow_cid']; $str_group_allow = $ac['allow_gid']; - $str_contact_deny = $ac['deny_cid']; - $str_group_deny = $ac['deny_gid']; + $str_contact_deny = $ac['deny_cid']; + $str_group_deny = $ac['deny_gid']; $private = $acl->is_private(); require_once('include/text.php'); - $results = linkify_tags($desc, local_channel()); + $results = linkify_tags($desc, $uid); - if($results) { + if ($results) { // Set permissions based on tag replacements - set_linkified_perms($results, $str_contact_allow, $str_group_allow, local_channel(), false, $private); + set_linkified_perms($results, $str_contact_allow, $str_group_allow, $uid, false, $private); - foreach($results as $result) { + foreach ($results as $result) { $success = $result['success']; - if($success['replaced']) { + if ($success['replaced']) { $post_tags[] = array( - 'uid' => local_channel(), + 'uid' => $uid, 'ttype' => $success['termtype'], 'otype' => TERM_OBJ_POST, 'term' => $success['term'], 'url' => $success['url'] - ); + ); } } } - if(strlen($categories)) { - $cats = explode(',',$categories); - foreach($cats as $cat) { + if (strlen($categories)) { + $cats = explode(',', $categories); + foreach ($cats as $cat) { $post_tags[] = array( - 'uid' => local_channel(), + 'uid' => $uid, 'ttype' => TERM_CATEGORY, 'otype' => TERM_OBJ_POST, 'term' => trim($cat), @@ -141,175 +144,170 @@ class Channel_calendar extends \Zotlabs\Web\Controller { ); } } - - $datarray = array(); - $datarray['dtstart'] = $start; - $datarray['dtend'] = $finish; - $datarray['summary'] = $summary; - $datarray['description'] = $desc; - $datarray['location'] = $location; - $datarray['etype'] = $type; - $datarray['adjust'] = $adjust; - $datarray['nofinish'] = 0; - $datarray['uid'] = local_channel(); - $datarray['account'] = get_account_id(); - $datarray['event_xchan'] = $channel['channel_hash']; - $datarray['allow_cid'] = $str_contact_allow; - $datarray['allow_gid'] = $str_group_allow; - $datarray['deny_cid'] = $str_contact_deny; - $datarray['deny_gid'] = $str_group_deny; - $datarray['private'] = intval($private); - $datarray['id'] = $event_id; - $datarray['created'] = $created; - $datarray['edited'] = $edited; - $datarray['timezone'] = $tz; - - if(intval($_REQUEST['preview'])) { + $datarray = array(); + $datarray['dtstart'] = $start; + $datarray['dtend'] = $finish; + $datarray['summary'] = $summary; + $datarray['description'] = $desc; + $datarray['location'] = $location; + $datarray['etype'] = $type; + $datarray['adjust'] = $adjust; + $datarray['nofinish'] = 0; + $datarray['uid'] = $uid; + $datarray['account'] = get_account_id(); + $datarray['event_xchan'] = $channel['channel_hash']; + $datarray['allow_cid'] = $str_contact_allow; + $datarray['allow_gid'] = $str_group_allow; + $datarray['deny_cid'] = $str_contact_deny; + $datarray['deny_gid'] = $str_group_deny; + $datarray['private'] = intval($private); + $datarray['id'] = $event_id; + $datarray['created'] = $created; + $datarray['edited'] = $edited; + $datarray['timezone'] = $tz; + + + if (intval($_REQUEST['preview'])) { $html = format_event_html($datarray); echo $html; killme(); } - + $event = event_store_event($datarray); - - if($post_tags) + + if ($post_tags) $datarray['term'] = $post_tags; - - $item_id = event_store_item($datarray,$event); - - if($item_id) { + + $item_id = event_store_item($datarray, $event); + + if ($item_id) { $r = q("select * from item where id = %d", intval($item_id) ); - if($r) { + if ($r) { xchan_query($r); $sync_item = fetch_post_tags($r); - $z = q("select * from event where event_hash = '%s' and uid = %d limit 1", + $z = q("select * from event where event_hash = '%s' and uid = %d limit 1", dbesc($r[0]['resource_id']), intval($channel['channel_id']) ); - if($z) { - Libsync::build_sync_packet($channel['channel_id'],array('event_item' => array(encode_item($sync_item[0],true)),'event' => $z)); + if ($z) { + Libsync::build_sync_packet($channel['channel_id'], array('event_item' => array(encode_item($sync_item[0], true)), 'event' => $z)); } } } - - \Zotlabs\Daemon\Master::Summon(array('Notifier','event',$item_id)); + + Master::Summon(array('Notifier', 'event', $item_id)); killme(); - + } - - - + + function get() { - - if(argc() > 2 && argv(1) == 'ical') { + + if (argc() > 2 && argv(1) == 'ical') { $event_id = argv(2); - + require_once('include/security.php'); $sql_extra = permissions_sql(local_channel()); - + $r = q("select * from event where event_hash = '%s' $sql_extra limit 1", dbesc($event_id) ); - if($r) { + if ($r) { header('Content-type: text/calendar'); - header('content-disposition: attachment; filename="' . t('event') . '-' . $event_id . '.ics"' ); + header('content-disposition: attachment; filename="' . t('event') . '-' . $event_id . '.ics"'); echo ical_wrapper($r); killme(); } else { - notice( t('Event not found.') . EOL ); + notice(t('Event not found.') . EOL); return; } } - - if(! local_channel()) { - notice( t('Permission denied.') . EOL); + + if (!local_channel()) { + notice(t('Permission denied.') . EOL); return; } - if((argc() > 2) && (argv(1) === 'ignore') && intval(argv(2))) { - $r = q("update event set dismissed = 1 where id = %d and uid = %d", - intval(argv(2)), - intval(local_channel()) - ); - } - - if((argc() > 2) && (argv(1) === 'unignore') && intval(argv(2))) { - $r = q("update event set dismissed = 0 where id = %d and uid = %d", + if ((argc() > 2) && (argv(1) === 'ignore') && intval(argv(2))) { + q("update event set dismissed = 1 where id = %d and uid = %d", intval(argv(2)), intval(local_channel()) ); } - $channel = \App::get_channel(); - - $mode = 'view'; - $export = false; - $ignored = ((x($_REQUEST,'ignored')) ? " and dismissed = " . intval($_REQUEST['ignored']) . " " : ''); + if ((argc() > 2) && (argv(1) === 'unignore') && intval(argv(2))) { + q("update event set dismissed = 0 where id = %d and uid = %d", + intval(argv(2)), + intval(local_channel()) + ); + } - if(argc() > 1) { - if(argc() > 2 && argv(1) === 'add') { - $mode = 'add'; + $mode = 'view'; + $export = false; + $ignored = ((x($_REQUEST, 'ignored')) ? " and dismissed = " . intval($_REQUEST['ignored']) . " " : ''); + + if (argc() > 1) { + if (argc() > 2 && argv(1) === 'add') { + $mode = 'add'; $item_id = intval(argv(2)); } - if(argc() > 2 && argv(1) === 'drop') { - $mode = 'drop'; + if (argc() > 2 && argv(1) === 'drop') { + $mode = 'drop'; $event_id = argv(2); } - if(argc() <= 2 && argv(1) === 'export') { + if (argc() <= 2 && argv(1) === 'export') { $export = true; } - if(argc() > 2 && intval(argv(1)) && intval(argv(2))) { + if (argc() > 2 && intval(argv(1)) && intval(argv(2))) { $mode = 'view'; } - if(argc() <= 2) { - $mode = 'view'; + if (argc() <= 2) { + $mode = 'view'; $event_id = argv(1); } } - - if($mode === 'add') { - event_addtocal($item_id,local_channel()); + + if ($mode === 'add') { + event_addtocal($item_id, local_channel()); killme(); } - - if($mode == 'view') { - + + if ($mode == 'view') { + /* edit/create form */ - if($event_id) { - $r = q("SELECT * FROM event WHERE event_hash = '%s' AND uid = %d LIMIT 1", + if ($event_id) { + q("SELECT * FROM event WHERE event_hash = '%s' AND uid = %d LIMIT 1", dbesc($event_id), intval(local_channel()) ); - if(count($r)) - $orig_event = $r[0]; } - - $channel = \App::get_channel(); - if (argv(1) === 'json'){ - if (x($_GET,'start')) $start = $_GET['start']; - if (x($_GET,'end')) $finish = $_GET['end']; + $channel = App::get_channel(); + + if (argv(1) === 'json') { + if (x($_GET, 'start')) $start = $_GET['start']; + if (x($_GET, 'end')) $finish = $_GET['end']; } - - $start = datetime_convert('UTC','UTC',$start); - $finish = datetime_convert('UTC','UTC',$finish); - $adjust_start = datetime_convert('UTC', date_default_timezone_get(), $start); + + $start = datetime_convert('UTC', 'UTC', $start); + $finish = datetime_convert('UTC', 'UTC', $finish); + $adjust_start = datetime_convert('UTC', date_default_timezone_get(), $start); $adjust_finish = datetime_convert('UTC', date_default_timezone_get(), $finish); - if (x($_GET,'id')){ - $r = q("SELECT event.*, item.plink, item.item_flags, item.author_xchan, item.owner_xchan, item.id as item_id + if (x($_GET, 'id')) { + $r = q("SELECT event.*, item.plink, item.item_flags, item.author_xchan, item.owner_xchan, item.id as item_id from event left join item on item.resource_id = event.event_hash where item.resource_type = 'event' and event.uid = %d and event.id = %d limit 1", intval(local_channel()), intval($_GET['id']) ); } - elseif($export) { + elseif ($export) { $r = q("SELECT event.*, item.id as item_id from event left join item on item.resource_id = event.event_hash where event.uid = %d and event.dtstart > '%s' and event.dtend > event.dtstart", @@ -335,104 +333,105 @@ class Channel_calendar extends \Zotlabs\Web\Controller { dbesc($adjust_finish) ); } - - if($r && ! $export) { + + if ($r && !$export) { xchan_query($r); - $r = fetch_post_tags($r,true); + $r = fetch_post_tags($r, true); $r = sort_by_date($r); } $events = []; - if($r) { - - foreach($r as $rr) { + if ($r) { + + foreach ($r as $rr) { $start = (($rr['adjust']) ? datetime_convert('UTC', date_default_timezone_get(), $rr['dtstart'], 'c') : datetime_convert('UTC', 'UTC', $rr['dtstart'], 'c')); - if ($rr['nofinish']){ + if ($rr['nofinish']) { $end = null; - } else { + } + else { $end = (($rr['adjust']) ? datetime_convert('UTC', date_default_timezone_get(), $rr['dtend'], 'c') : datetime_convert('UTC', 'UTC', $rr['dtend'], 'c')); } - $catsenabled = feature_enabled(local_channel(),'categories'); - $categories = ''; - if($catsenabled){ - if($rr['term']) { + $catsenabled = feature_enabled(local_channel(), 'categories'); + $categories = ''; + if ($catsenabled) { + if ($rr['term']) { $cats = get_terms_oftype($rr['term'], TERM_CATEGORY); foreach ($cats as $cat) { - if(strlen($categories)) + if (strlen($categories)) $categories .= ', '; $categories .= $cat['term']; } } } - $edit = ((local_channel() && $rr['author_xchan'] == get_observer_hash()) ? array(z_root().'/events/'.$rr['event_hash'].'?expandform=1',t('Edit event'),'','') : false); - - $drop = array(z_root().'/events/drop/'.$rr['event_hash'],t('Delete event'),'',''); - + $edit = ((local_channel() && $rr['author_xchan'] == get_observer_hash()) ? array(z_root() . '/events/' . $rr['event_hash'] . '?expandform=1', t('Edit event'), '', '') : false); + + $drop = array(z_root() . '/events/drop/' . $rr['event_hash'], t('Delete event'), '', ''); + $tz = get_iconfig($rr, 'event', 'timezone'); - if(! $tz) + if (!$tz) $tz = 'UTC'; $events[] = array( 'calendar_id' => 'channel_calendar', - 'rw' => true, - 'id'=>$rr['id'], - 'uri' => $rr['event_hash'], - 'timezone' => $tz, - 'start'=> $start, - 'end' => $end, - 'drop' => $drop, - 'allDay' => (($rr['adjust']) ? 0 : 1), - 'title' => html_entity_decode($rr['summary'], ENT_COMPAT, 'UTF-8'), - 'editable' => $edit ? true : false, - 'item' => $rr, - 'plink' => [$rr['plink'], t('Link to source')], + 'rw' => true, + 'id' => $rr['id'], + 'uri' => $rr['event_hash'], + 'timezone' => $tz, + 'start' => $start, + 'end' => $end, + 'drop' => $drop, + 'allDay' => (($rr['adjust']) ? 0 : 1), + 'title' => html_entity_decode($rr['summary'], ENT_COMPAT, 'UTF-8'), + 'editable' => $edit ? true : false, + 'item' => $rr, + 'plink' => [$rr['plink'], t('Link to source')], 'description' => html_entity_decode($rr['description'], ENT_COMPAT, 'UTF-8'), - 'location' => html_entity_decode($rr['location'], ENT_COMPAT, 'UTF-8'), - 'allow_cid' => expand_acl($rr['allow_cid']), - 'allow_gid' => expand_acl($rr['allow_gid']), - 'deny_cid' => expand_acl($rr['deny_cid']), - 'deny_gid' => expand_acl($rr['deny_gid']), - 'categories' => $categories + 'location' => html_entity_decode($rr['location'], ENT_COMPAT, 'UTF-8'), + 'allow_cid' => expand_acl($rr['allow_cid']), + 'allow_gid' => expand_acl($rr['allow_gid']), + 'deny_cid' => expand_acl($rr['deny_cid']), + 'deny_gid' => expand_acl($rr['deny_gid']), + 'categories' => $categories ); } } - - if($export) { + + if ($export) { header('Content-type: text/calendar'); - header('content-disposition: attachment; filename="' . t('calendar') . '-' . $channel['channel_address'] . '.ics"' ); + header('content-disposition: attachment; filename="' . t('calendar') . '-' . $channel['channel_address'] . '.ics"'); echo ical_wrapper($r); killme(); } - if (\App::$argv[1] === 'json'){ + if (App::$argv[1] === 'json') { json_return_and_die($events); } } - - if($mode === 'drop' && $event_id) { + + if ($mode === 'drop' && $event_id) { $r = q("SELECT * FROM event WHERE event_hash = '%s' AND uid = %d LIMIT 1", dbesc($event_id), intval(local_channel()) ); - + $sync_event = $r[0]; - - if($r) { + + if ($r) { $r = q("delete from event where event_hash = '%s' and uid = %d", dbesc($event_id), intval(local_channel()) ); - if($r) { + if ($r) { $sync_event['event_deleted'] = 1; - Libsync::build_sync_packet(0,array('event' => array($sync_event))); + Libsync::build_sync_packet(0, array('event' => array($sync_event))); $i = q("select * from item where resource_type = 'event' and resource_id = '%s' and uid = %d", dbesc($event_id), @@ -441,11 +440,11 @@ class Channel_calendar extends \Zotlabs\Web\Controller { if ($i) { - $can_delete = false; + $can_delete = false; $local_delete = true; $ob_hash = get_observer_hash(); - if($ob_hash && ($ob_hash === $i[0]['author_xchan'] || $ob_hash === $i[0]['owner_xchan'] || $ob_hash === $i[0]['source_xchan'])) { + if ($ob_hash && ($ob_hash === $i[0]['author_xchan'] || $ob_hash === $i[0]['owner_xchan'] || $ob_hash === $i[0]['source_xchan'])) { $can_delete = true; } @@ -453,49 +452,49 @@ class Channel_calendar extends \Zotlabs\Web\Controller { // If the item originated on this site+channel the deletion will propagate downstream. // Otherwise just the local copy is removed. - if(is_site_admin()) { + if (is_site_admin()) { $local_delete = true; - if(intval($i[0]['item_origin'])) + if (intval($i[0]['item_origin'])) $can_delete = true; } - if($can_delete || $local_delete) { + if ($can_delete || $local_delete) { // if this is a different page type or it's just a local delete // but not by the item author or owner, do a simple deletion - $complex = false; + $complex = false; - if(intval($i[0]['item_type']) || ($local_delete && (! $can_delete))) { + if (intval($i[0]['item_type']) || ($local_delete && (!$can_delete))) { drop_item($i[0]['id']); } else { // complex deletion that needs to propagate and be performed in phases - drop_item($i[0]['id'],true,DROPITEM_PHASE1); + drop_item($i[0]['id'], true, DROPITEM_PHASE1); $complex = true; } $ii = q("select * from item where id = %d", intval($i[0]['id']) ); - if($ii) { + if ($ii) { xchan_query($ii); $sync_item = fetch_post_tags($ii); - Libsync::build_sync_packet($i[0]['uid'],array('item' => array(encode_item($sync_item[0],true)))); + Libsync::build_sync_packet($i[0]['uid'], array('item' => array(encode_item($sync_item[0], true)))); } - if($complex) { - tag_deliver($i[0]['uid'],$i[0]['id']); + if ($complex) { + tag_deliver($i[0]['uid'], $i[0]['id']); } } } killme(); } - notice( t('Failed to remove event' ) . EOL); + notice(t('Failed to remove event') . EOL); killme(); } } - + } - + } diff --git a/Zotlabs/Module/Chanview.php b/Zotlabs/Module/Chanview.php index 12e1891d4..8ae4841b4 100644 --- a/Zotlabs/Module/Chanview.php +++ b/Zotlabs/Module/Chanview.php @@ -70,7 +70,7 @@ class Chanview extends \Zotlabs\Web\Controller { $zf = Zotfinger::exec($_REQUEST['url'], null); if(array_path_exists('signature/signer',$zf) && $zf['signature']['signer'] === $_REQUEST['url'] && intval($zf['signature']['header_valid'])) { - Libzot::import_xchan($j); + Libzot::import_xchan($zf['data']); $r = q("select * from xchan where xchan_url = '%s'", dbesc($_REQUEST['url']) ); diff --git a/Zotlabs/Module/Cloud.php b/Zotlabs/Module/Cloud.php index 39ae0f92f..3d1b97980 100644 --- a/Zotlabs/Module/Cloud.php +++ b/Zotlabs/Module/Cloud.php @@ -105,7 +105,7 @@ class Cloud extends Controller { // All we need to do now, is to fire up the server - $server->exec(); + $server->start(); if($browser->build_page) construct_page(); diff --git a/Zotlabs/Module/Connections.php b/Zotlabs/Module/Connections.php index 7dc301623..5025f4e22 100644 --- a/Zotlabs/Module/Connections.php +++ b/Zotlabs/Module/Connections.php @@ -109,6 +109,7 @@ class Connections extends \Zotlabs\Web\Controller { case 'all': $head = t('All'); + break; default: $search_flags = " and abook_blocked = 0 and abook_ignored = 0 and abook_hidden = 0 and abook_archived = 0 and abook_not_here = 0 "; $active = true; @@ -238,7 +239,7 @@ class Connections extends \Zotlabs\Web\Controller { } $r = q("SELECT COUNT(abook.abook_id) AS total FROM abook left join xchan on abook.abook_xchan = xchan.xchan_hash - where abook_channel = %d and abook_self = 0 and xchan_deleted = 0 and xchan_orphan = 0 $sql_extra $sql_extra2 ", + where abook_channel = %d and abook_self = 0 and xchan_deleted = 0 and xchan_orphan = 0 $sql_extra ", intval(local_channel()) ); if($r) { @@ -247,7 +248,7 @@ class Connections extends \Zotlabs\Web\Controller { } $r = q("SELECT abook.*, xchan.* FROM abook left join xchan on abook.abook_xchan = xchan.xchan_hash - WHERE abook_channel = %d and abook_self = 0 and xchan_deleted = 0 and xchan_orphan = 0 $sql_extra $sql_extra2 ORDER BY $sql_order LIMIT %d OFFSET %d ", + WHERE abook_channel = %d and abook_self = 0 and xchan_deleted = 0 and xchan_orphan = 0 $sql_extra ORDER BY $sql_order LIMIT %d OFFSET %d ", intval(local_channel()), intval(App::$pager['itemspage']), intval(App::$pager['start']) diff --git a/Zotlabs/Module/Connedit.php b/Zotlabs/Module/Connedit.php index becf8460d..44211c8b9 100644 --- a/Zotlabs/Module/Connedit.php +++ b/Zotlabs/Module/Connedit.php @@ -9,6 +9,7 @@ namespace Zotlabs\Module; use App; use Zotlabs\Lib\Apps; +use Zotlabs\Lib\Crypto; use Zotlabs\Lib\Libzot; use Zotlabs\Lib\Libsync; use Zotlabs\Daemon\Master; @@ -32,10 +33,10 @@ class Connedit extends Controller { */ function init() { - + if(! local_channel()) return; - + if((argc() >= 2) && intval(argv(1))) { $r = q("SELECT abook.*, xchan.* FROM abook left join xchan on abook_xchan = xchan_hash @@ -47,54 +48,54 @@ class Connedit extends Controller { App::$poi = array_shift($r); } } - + $channel = App::get_channel(); if($channel) head_set_icon($channel['xchan_photo_s']); - + } - + /* @brief Evaluate posted values and set changes * */ - + function post() { - + if(! local_channel()) return; - + $contact_id = intval(argv(1)); if(! $contact_id) return; - + $channel = App::get_channel(); - + // TODO if configured for hassle-free permissions, we'll post the form with ajax as soon as the // connection enable is toggled to a special autopost url and set permissions immediately, leaving // the other form elements alone pending a manual submit of the form. The downside is that there // will be a window of opportunity when the permissions have been set but before you've had a chance // to review and possibly restrict them. The upside is we won't have to warn you that your connection // can't do anything until you save the bloody form. - + $autopost = (((argc() > 2) && (argv(2) === 'auto')) ? true : false); - + $orig_record = q("SELECT * FROM abook WHERE abook_id = %d AND abook_channel = %d LIMIT 1", intval($contact_id), intval(local_channel()) ); - + if(! $orig_record) { notice( t('Could not access contact record.') . EOL); goaway(z_root() . '/connections'); return; // NOTREACHED } - + call_hooks('contact_edit_post', $_POST); - + $vc = get_abconfig(local_channel(),$orig_record['abook_xchan'],'system','vcard'); - $vcard = (($vc) ? \Sabre\VObject\Reader::read($vc) : null); + $vcard = (($vc) ? \Sabre\VObject\Reader::read($vc) : null); $serialised_vcard = update_vcard($_REQUEST,$vcard); if($serialised_vcard) set_abconfig(local_channel(),$orig_record[0]['abook_xchan'],'system','vcard',$serialised_vcard); @@ -107,8 +108,8 @@ class Connedit extends Controller { $autoperms = null; $is_self = false; } - - + + $profile_id = ((array_key_exists('profile_assign',$_POST)) ? $_POST['profile_assign'] : $orig_record[0]['abook_profile']); if($profile_id) { @@ -121,17 +122,17 @@ class Connedit extends Controller { return; } } - + $abook_incl = ((array_key_exists('abook_incl',$_POST)) ? escape_tags($_POST['abook_incl']) : $orig_record[0]['abook_incl']); $abook_excl = ((array_key_exists('abook_excl',$_POST)) ? escape_tags($_POST['abook_excl']) : $orig_record[0]['abook_excl']); $hidden = intval($_POST['hidden']); - + $priority = intval($_POST['poll']); if($priority > 5 || $priority < 0) $priority = 0; - + if(! array_key_exists('closeness',$_POST)) { $_POST['closeness'] = 80; } @@ -139,15 +140,15 @@ class Connedit extends Controller { if($closeness < 0 || $closeness > 99) { $closeness = 80; } - + $rating = intval($_POST['rating']); if($rating < (-10)) $rating = (-10); if($rating > 10) $rating = 10; - + $rating_text = trim(escape_tags($_REQUEST['rating_text'])); - + $all_perms = Permissions::Perms(); if($all_perms) { @@ -168,27 +169,27 @@ class Connedit extends Controller { } } - if(! is_null($autoperms)) + if(! is_null($autoperms)) set_pconfig($channel['channel_id'],'system','autoperms',$autoperms); - + $new_friend = false; - + // only store a record and notify the directory if the rating changed if(! $is_self) { - + $signed = $orig_record[0]['abook_xchan'] . '.' . $rating . '.' . $rating_text; - $sig = base64url_encode(rsa_sign($signed,$channel['channel_prvkey'])); + $sig = base64url_encode(Crypto::sign($signed,$channel['channel_prvkey'])); $rated = ((intval($rating) || strlen($rating_text)) ? true : false); - + $record = 0; - + $z = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' and xlink_static = 1 limit 1", dbesc($channel['channel_hash']), dbesc($orig_record[0]['abook_xchan']) ); - + if($z) { if(($z[0]['xlink_rating'] != $rating) || ($z[0]['xlink_rating_text'] != $rating_text)) { $record = $z[0]['xlink_id']; @@ -223,18 +224,18 @@ class Connedit extends Controller { Master::Summon(array('Ratenotif','rating',$record)); } } - + if(($_REQUEST['pending']) && intval($orig_record[0]['abook_pending'])) { $new_friend = true; - + // @fixme it won't be common, but when you accept a new connection request // the permissions will now be that of your permissions role and ignore // any you may have set manually on the form. We'll probably see a bug if somebody // tries to set the permissions *and* approve the connection in the same // request. The workaround is to approve the connection, then go back and // adjust permissions as desired. - + $p = Permissions::connect_perms(local_channel()); $my_perms = $p['perms']; if($my_perms) { @@ -247,7 +248,7 @@ class Connedit extends Controller { $abook_pending = (($new_friend) ? 0 : $orig_record[0]['abook_pending']); - + $r = q("UPDATE abook SET abook_profile = '%s', abook_closeness = %d, abook_pending = %d, abook_incl = '%s', abook_excl = '%s' where abook_id = %d AND abook_channel = %d", @@ -259,7 +260,7 @@ class Connedit extends Controller { intval($contact_id), intval(local_channel()) ); - + if($r) info( t('Connection updated.') . EOL); else @@ -267,16 +268,16 @@ class Connedit extends Controller { if(! intval(App::$poi['abook_self'])) { if($new_friend) { - Master::Summon( [ 'Notifier', 'permission_accept', $contact_id ] ); + Master::Summon( [ 'Notifier', 'permission_accept', $contact_id ] ); } - Master::Summon( [ - 'Notifier', - (($new_friend) ? 'permission_create' : 'permission_update'), - $contact_id + Master::Summon( [ + 'Notifier', + (($new_friend) ? 'permission_create' : 'permission_update'), + $contact_id ]); } - + if($new_friend) { $default_group = $channel['channel_default_group']; if($default_group) { @@ -285,11 +286,11 @@ class Connedit extends Controller { if($g) group_add_member(local_channel(),'',App::$poi['abook_xchan'],$g['id']); } - + // Check if settings permit ("post new friend activity" is allowed, and // friends in general or this friend in particular aren't hidden) // and send out a new friend activity - + $pr = q("select * from profile where uid = %d and is_default = 1 and hide_friends = 0", intval($channel['channel_id']) ); @@ -305,23 +306,23 @@ class Connedit extends Controller { $xarr['deny_cid'] = $channel['channel_deny_cid']; $xarr['deny_gid'] = $channel['channel_deny_gid']; $xarr['item_private'] = (($xarr['allow_cid']||$xarr['allow_gid']||$xarr['deny_cid']||$xarr['deny_gid']) ? 1 : 0); - + $xarr['body'] = '[zrl=' . $channel['xchan_url'] . ']' . $channel['xchan_name'] . '[/zrl]' . ' ' . t('is now connected to') . ' ' . '[zrl=' . App::$poi['xchan_url'] . ']' . App::$poi['xchan_name'] . '[/zrl]'; - + $xarr['body'] .= "\n\n\n" . '[zrl=' . App::$poi['xchan_url'] . '][zmg=80x80]' . App::$poi['xchan_photo_m'] . '[/zmg][/zrl]'; - + post_activity_item($xarr); - + } - - + + // pull in a bit of content if there is any to pull in Master::Summon(array('Onepoll',$contact_id)); - + } - + // Refresh the structure in memory with the new data - + $r = q("SELECT abook.*, xchan.* FROM abook left join xchan on abook_xchan = xchan_hash WHERE abook_channel = %d and abook_id = %d LIMIT 1", @@ -331,34 +332,34 @@ class Connedit extends Controller { if($r) { App::$poi = $r[0]; } - + if($new_friend) { $arr = array('channel_id' => local_channel(), 'abook' => App::$poi); call_hooks('accept_follow', $arr); } - + $this->connedit_clone($a); - + if(($_REQUEST['pending']) && (!$_REQUEST['done'])) goaway(z_root() . '/connections/ifpending'); - + return; - + } - + /* @brief Clone connection * * */ - + function connedit_clone(&$a) { - + if(! App::$poi) return; - - + + $channel = App::get_channel(); - + $r = q("SELECT abook.*, xchan.* FROM abook left join xchan on abook_xchan = xchan_hash WHERE abook_channel = %d and abook_id = %d LIMIT 1", @@ -368,40 +369,40 @@ class Connedit extends Controller { if($r) { App::$poi = array_shift($r); } - + $clone = App::$poi; - + unset($clone['abook_id']); unset($clone['abook_account']); unset($clone['abook_channel']); - + $abconfig = load_abconfig($channel['channel_id'],$clone['abook_xchan']); if($abconfig) $clone['abconfig'] = $abconfig; - + Libsync::build_sync_packet(0 /* use the current local_channel */, array('abook' => array($clone))); } - + /* @brief Generate content of connection edit page * * */ - + function get() { - + $sort_type = 0; $o = ''; - + if(! local_channel()) { notice( t('Permission denied.') . EOL); return login(); } - + $section = ((array_key_exists('section',$_REQUEST)) ? $_REQUEST['section'] : ''); $channel = App::get_channel(); - + $yes_no = array(t('No'),t('Yes')); - + $connect_perms = Permissions::connect_perms(local_channel()); $o .= "\n"; - + if(argc() == 3) { - + $contact_id = intval(argv(1)); if(! $contact_id) return; - + $cmd = argv(2); $orig_record = q("SELECT abook.*, xchan.* FROM abook left join xchan on abook_xchan = xchan_hash @@ -429,17 +430,17 @@ class Connedit extends Controller { intval($contact_id), intval(local_channel()) ); - + if(! count($orig_record)) { notice( t('Could not access address book record.') . EOL); goaway(z_root() . '/connections'); } - + if($cmd === 'update') { // pull feed and consume it, which should subscribe to the hub. Master::Summon(array('Poller',$contact_id)); goaway(z_root() . '/connedit/' . $contact_id); - + } if($cmd === 'fetchvc') { @@ -474,7 +475,7 @@ class Connedit extends Controller { dbesc($orig_record[0]['xchan_hash']) ); $cmd = 'refresh'; - } + } if($cmd === 'refresh') { if($orig_record[0]['xchan_network'] === 'zot') { @@ -486,13 +487,13 @@ class Connedit extends Controller { notice( t('Refresh failed - channel is currently unavailable.') ); } else { - + // if you are on a different network we'll force a refresh of the connection basic info Master::Summon(array('Notifier','permission_update',$contact_id)); } goaway(z_root() . '/connedit/' . $contact_id); } - + if($cmd === 'block') { if(abook_toggle_flag($orig_record[0],ABOOK_FLAG_BLOCKED)) { $this->connedit_clone($a); @@ -501,7 +502,7 @@ class Connedit extends Controller { notice(t('Unable to set address book parameters.') . EOL); goaway(z_root() . '/connedit/' . $contact_id); } - + if($cmd === 'ignore') { if(abook_toggle_flag($orig_record[0],ABOOK_FLAG_IGNORED)) { $this->connedit_clone($a); @@ -510,7 +511,7 @@ class Connedit extends Controller { notice(t('Unable to set address book parameters.') . EOL); goaway(z_root() . '/connedit/' . $contact_id); } - + if($cmd === 'archive') { if(abook_toggle_flag($orig_record[0],ABOOK_FLAG_ARCHIVED)) { $this->connedit_clone($a); @@ -519,7 +520,7 @@ class Connedit extends Controller { notice(t('Unable to set address book parameters.') . EOL); goaway(z_root() . '/connedit/' . $contact_id); } - + if($cmd === 'hide') { if(abook_toggle_flag($orig_record[0],ABOOK_FLAG_HIDDEN)) { $this->connedit_clone($a); @@ -528,10 +529,10 @@ class Connedit extends Controller { notice(t('Unable to set address book parameters.') . EOL); goaway(z_root() . '/connedit/' . $contact_id); } - + // We'll prevent somebody from unapproving an already approved contact. // Though maybe somebody will want this eventually (??) - + if($cmd === 'approve') { if(intval($orig_record[0]['abook_pending'])) { if(abook_toggle_flag($orig_record[0],ABOOK_FLAG_PENDING)) { @@ -542,10 +543,10 @@ class Connedit extends Controller { } goaway(z_root() . '/connedit/' . $contact_id); } - - + + if($cmd === 'drop') { - + contact_remove(local_channel(), $orig_record[0]['abook_id']); Master::Summon( [ 'Notifier', 'purge', local_channel(), $orig_record[0]['xchan_hash'] ] ); @@ -556,17 +557,17 @@ class Connedit extends Controller { 'entry_deleted' => true)) ) ); - + info( t('Connection has been removed.') . EOL ); if(x($_SESSION,'return_url')) goaway(z_root() . '/' . $_SESSION['return_url']); goaway(z_root() . '/contacts'); - + } } - + if(App::$poi) { - + $abook_prev = 0; $abook_next = 0; @@ -595,14 +596,14 @@ class Connedit extends Controller { } $tools = array( - + 'view' => array( 'label' => t('View Profile'), 'url' => chanlink_cid($contact['abook_id']), 'sel' => '', 'title' => sprintf( t('View %s\'s profile'), $contact['xchan_name']), ), - + 'refresh' => array( 'label' => t('Refresh Permissions'), 'url' => z_root() . '/connedit/' . $contact['abook_id'] . '/refresh', @@ -616,14 +617,14 @@ class Connedit extends Controller { 'sel' => '', 'title' => t('Fetch updated photo'), ), - + 'recent' => array( 'label' => t('Recent Activity'), 'url' => z_root() . '/network/?f=&cid=' . $contact['abook_id'], 'sel' => '', 'title' => t('View recent posts and comments'), ), - + 'block' => array( 'label' => (intval($contact['abook_blocked']) ? t('Unblock') : t('Block')), 'url' => z_root() . '/connedit/' . $contact['abook_id'] . '/block', @@ -631,7 +632,7 @@ class Connedit extends Controller { 'title' => t('Block (or Unblock) all communications with this connection'), 'info' => (intval($contact['abook_blocked']) ? t('This connection is blocked!') : ''), ), - + 'ignore' => array( 'label' => (intval($contact['abook_ignored']) ? t('Unignore') : t('Ignore')), 'url' => z_root() . '/connedit/' . $contact['abook_id'] . '/ignore', @@ -639,7 +640,7 @@ class Connedit extends Controller { 'title' => t('Ignore (or Unignore) all inbound communications from this connection'), 'info' => (intval($contact['abook_ignored']) ? t('This connection is ignored!') : ''), ), - + 'archive' => array( 'label' => (intval($contact['abook_archived']) ? t('Unarchive') : t('Archive')), 'url' => z_root() . '/connedit/' . $contact['abook_id'] . '/archive', @@ -647,7 +648,7 @@ class Connedit extends Controller { 'title' => t('Archive (or Unarchive) this connection - mark channel dead but keep content'), 'info' => (intval($contact['abook_archived']) ? t('This connection is archived!') : ''), ), - + 'hide' => array( 'label' => (intval($contact['abook_hidden']) ? t('Unhide') : t('Hide')), 'url' => z_root() . '/connedit/' . $contact['abook_id'] . '/hide', @@ -655,18 +656,18 @@ class Connedit extends Controller { 'title' => t('Hide or Unhide this connection from your other connections'), 'info' => (intval($contact['abook_hidden']) ? t('This connection is hidden!') : ''), ), - + 'delete' => array( 'label' => t('Delete'), 'url' => z_root() . '/connedit/' . $contact['abook_id'] . '/drop', 'sel' => '', 'title' => t('Delete this connection'), ), - + ); - if($contact['xchan_network'] === 'zot') { + if(in_array($contact['xchan_network'], ['zot6', 'zot'])) { $tools['fetchvc'] = [ 'label' => t('Fetch Vcard'), 'url' => z_root() . '/connedit/' . $contact['abook_id'] . '/fetchvc', @@ -684,24 +685,24 @@ class Connedit extends Controller { 'sel' => '', 'title' => t('Open Individual Permissions section by default'), ]; - + $self = false; - + if(intval($contact['abook_self'])) { $self = true; $abook_prev = $abook_next = 0; } - + $vc = get_abconfig(local_channel(),$contact['abook_xchan'],'system','vcard'); - $vctmp = (($vc) ? \Sabre\VObject\Reader::read($vc) : null); + $vctmp = (($vc) ? \Sabre\VObject\Reader::read($vc) : null); $vcard = (($vctmp) ? get_vcard_array($vctmp,$contact['abook_id']) : [] ); if(! $vcard) $vcard['fn'] = $contact['xchan_name']; $tpl = get_markup_template("abook_edit.tpl"); - + if(Apps::system_app_installed(local_channel(),'Affinity Tool')) { $sections['affinity'] = [ @@ -710,7 +711,7 @@ class Connedit extends Controller { 'sel' => '', 'title' => t('Open Set Affinity section by default'), ]; - + $labels = [ t('Me'), t('Family'), @@ -720,7 +721,7 @@ class Connedit extends Controller { ]; call_hooks('affinity_labels',$labels); $label_str = ''; - + if($labels) { foreach($labels as $l) { if($label_str) { @@ -731,11 +732,11 @@ class Connedit extends Controller { $label_str .= "'" . $l . "'"; } } - + $slider_tpl = get_markup_template('contact_slider.tpl'); - + $slideval = intval($contact['abook_closeness']); - + $slide = replace_macros($slider_tpl,array( '$min' => 1, '$val' => $slideval, @@ -751,22 +752,22 @@ class Connedit extends Controller { 'title' => t('Open Custom Filter section by default'), ]; } - + $rating_val = 0; $rating_text = ''; - + $xl = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' and xlink_static = 1", dbesc($channel['channel_hash']), dbesc($contact['xchan_hash']) ); - + if($xl) { $rating_val = intval($xl[0]['xlink_rating']); $rating_text = $xl[0]['xlink_rating_text']; } - + $rating_enabled = get_config('system','rating_enabled'); - + if($rating_enabled) { $rating = replace_macros(get_markup_template('rating_slider.tpl'),array( '$min' => -10, @@ -776,28 +777,28 @@ class Connedit extends Controller { else { $rating = false; } - - + + $perms = array(); $channel = App::get_channel(); - + $global_perms = Permissions::Perms(); $existing = get_all_perms(local_channel(),$contact['abook_xchan'],false); - + $unapproved = array('pending', t('Approve this connection'), '', t('Accept connection to allow communication'), array(t('No'),('Yes'))); - + $multiprofs = ((feature_enabled(local_channel(),'multi_profiles')) ? true : false); - + if($slide && !$multiprofs) $affinity = t('Set Affinity'); - + if(!$slide && $multiprofs) $affinity = t('Set Profile'); - + if($slide && $multiprofs) $affinity = t('Set Affinity & Profile'); - + $theirs = q("select * from abconfig where chan = %d and xchan = '%s' and cat = 'their_perms'", intval(local_channel()), dbesc($contact['abook_xchan']) @@ -812,20 +813,20 @@ class Connedit extends Controller { foreach($global_perms as $k => $v) { $thisperm = get_abconfig(local_channel(),$contact['abook_xchan'],'my_perms',$k); //fixme - + $checkinherited = PermissionLimits::Get(local_channel(),$k); - + // For auto permissions (when $self is true) we don't want to look at existing // permissions because they are enabled for the channel owner if((! $self) && ($existing[$k])) $thisperm = "1"; - - + + $perms[] = array('perms_' . $k, $v, ((array_key_exists($k,$their_perms)) ? intval($their_perms[$k]) : ''),$thisperm, 1, (($checkinherited & PERMS_SPECIFIC) ? '' : '1'), '', $checkinherited); } - + $pcat = new Permcat(local_channel()); $pcatlist = $pcat->listing(); $permcats = []; @@ -838,23 +839,23 @@ class Connedit extends Controller { $locstr = locations_by_netid($contact['xchan_hash']); if(! $locstr) $locstr = unpunify($contact['xchan_url']); - + $clone_warn = ''; $clonable = (in_array($contact['xchan_network'],['zot', 'zot6', 'rss']) ? true : false); if(! $clonable) { $clone_warn = ''; - $clone_warn .= ((intval($contact['abook_not_here'])) + $clone_warn .= ((intval($contact['abook_not_here'])) ? t('This connection is unreachable from this location.') : t('This connection may be unreachable from other channel locations.') ); $clone_warn .= '
' . t('Location independence is not supported by their network.'); } - + if(intval($contact['abook_not_here']) && $unclonable) $not_here = t('This connection is unreachable from this location. Location independence is not supported by their network.'); - + $o .= replace_macros($tpl, [ '$header' => (($self) ? t('Connection Default Permissions') : sprintf( t('Connection: %s'),$contact['xchan_name'])), '$autoperms' => array('autoperms',t('Apply these permissions automatically'), ((get_pconfig(local_channel(),'system','autoperms')) ? 1 : 0), t('Connection requests will be approved without your interaction'), $yes_no), @@ -910,7 +911,7 @@ class Connedit extends Controller { '$name' => $contact['xchan_name'], '$abook_prev' => $abook_prev, '$abook_next' => $abook_next, - '$vcard_label' => t('Details'), + '$vcard_label' => t('Details'), '$displayname' => $displayname, '$name_label' => t('Name'), '$org_label' => t('Organisation'), @@ -939,13 +940,13 @@ class Connedit extends Controller { '$zip_code' => t('ZIP Code'), '$country' => t('Country') ]); - + $arr = array('contact' => $contact,'output' => $o); - + call_hooks('contact_edit', $arr); - + return $arr['output']; - - } + + } } } diff --git a/Zotlabs/Module/Dav.php b/Zotlabs/Module/Dav.php index 82d773139..96fe2c898 100644 --- a/Zotlabs/Module/Dav.php +++ b/Zotlabs/Module/Dav.php @@ -124,7 +124,7 @@ class Dav extends \Zotlabs\Web\Controller { // $server->addPlugin(new \Zotlabs\Storage\QuotaPlugin($auth)); // All we need to do now, is to fire up the server - $server->exec(); + $server->start(); killme(); } diff --git a/Zotlabs/Module/Display.php b/Zotlabs/Module/Display.php index 81ac0f7b8..2aa4f6548 100644 --- a/Zotlabs/Module/Display.php +++ b/Zotlabs/Module/Display.php @@ -19,21 +19,21 @@ class Display extends \Zotlabs\Web\Controller { if(argc() > 1) { $module_format = substr(argv(1),strrpos(argv(1),'.') + 1); if(! in_array($module_format,['atom','zot','json'])) - $module_format = 'html'; + $module_format = 'html'; } if(observer_prohibited()) { notice( t('Public access denied.') . EOL); return; } - + if(argc() > 1) { $item_hash = argv(1); if($module_format !== 'html') { $item_hash = substr($item_hash,0,strrpos($item_hash,'.')); } } - + if($_REQUEST['mid']) $item_hash = $_REQUEST['mid']; @@ -42,19 +42,19 @@ class Display extends \Zotlabs\Web\Controller { notice( t('Item not found.') . EOL); return; } - + $observer_is_owner = false; if(local_channel() && (! $update)) { - + $channel = \App::get_channel(); $channel_acl = array( - 'allow_cid' => $channel['channel_allow_cid'], - 'allow_gid' => $channel['channel_allow_gid'], - 'deny_cid' => $channel['channel_deny_cid'], + 'allow_cid' => $channel['channel_allow_cid'], + 'allow_gid' => $channel['channel_allow_gid'], + 'deny_cid' => $channel['channel_deny_cid'], 'deny_gid' => $channel['channel_deny_gid'] - ); + ); $x = array( 'is_owner' => true, @@ -62,7 +62,7 @@ class Display extends \Zotlabs\Web\Controller { 'default_location' => $channel['channel_location'], 'nickname' => $channel['channel_address'], 'lockstate' => (($group || $cid || $channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'), - 'acl' => populate_acl($channel_acl,true, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_stream'), get_post_aclDialogDescription(), 'acl_dialog_post'), + 'acl' => populate_acl($channel_acl,true, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_stream'), get_post_aclDialogDescription(), 'acl_dialog_post'), 'permissions' => $channel_acl, 'bang' => '', 'visitor' => true, @@ -75,21 +75,21 @@ class Display extends \Zotlabs\Web\Controller { 'jotnets' => true, 'reset' => t('Reset form') ); - + $o = '
'; $o .= status_editor($a,$x,false,'Display'); $o .= '
'; } - + // This page can be viewed by anybody so the query could be complicated // First we'll see if there is a copy of the item which is owned by us - if we're logged in locally. - // If that fails (or we aren't logged in locally), + // If that fails (or we aren't logged in locally), // query an item in which the observer (if logged in remotely) has cid or gid rights - // and if that fails, look for a copy of the post that has no privacy restrictions. + // and if that fails, look for a copy of the post that has no privacy restrictions. // If we find the post, but we don't find a copy that we're allowed to look at, this fact needs to be reported. - + // find a copy of the item somewhere - + $target_item = null; if(strpos($item_hash,'b64.') === 0) @@ -100,7 +100,7 @@ class Display extends \Zotlabs\Web\Controller { $r = q("select id, uid, mid, parent, parent_mid, thr_parent, verb, item_type, item_deleted, author_xchan, item_blocked from item where mid like '%s' limit 1", dbesc($item_hash . '%') ); - + if($r) { $target_item = $r[0]; } @@ -117,14 +117,14 @@ class Display extends \Zotlabs\Web\Controller { if($target_item['item_blocked'] == ITEM_MODERATED) { goaway(z_root() . '/moderate/' . $target_item['id']); } - + $r = null; - + if($target_item['item_type'] == ITEM_TYPE_WEBPAGE) { $x = q("select * from channel where channel_id = %d limit 1", intval($target_item['uid']) ); - $y = q("select * from iconfig left join item on iconfig.iid = item.id + $y = q("select * from iconfig left join item on iconfig.iid = item.id where item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'WEBPAGE' and item.id = %d limit 1", intval($target_item['uid']), intval($target_item['parent']) @@ -141,7 +141,7 @@ class Display extends \Zotlabs\Web\Controller { $x = q("select * from channel where channel_id = %d limit 1", intval($target_item['uid']) ); - $y = q("select * from iconfig left join item on iconfig.iid = item.id + $y = q("select * from iconfig left join item on iconfig.iid = item.id where item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'ARTICLE' and item.id = %d limit 1", intval($target_item['uid']), intval($target_item['parent']) @@ -160,7 +160,7 @@ class Display extends \Zotlabs\Web\Controller { intval($target_item['uid']) ); - $y = q("select * from iconfig left join item on iconfig.iid = item.id + $y = q("select * from iconfig left join item on iconfig.iid = item.id where item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'CARD' and item.id = %d limit 1", intval($target_item['uid']), intval($target_item['parent']) @@ -179,7 +179,7 @@ class Display extends \Zotlabs\Web\Controller { notice( t('Page not found.') . EOL); return ''; } - + $simple_update = ''; if($update && $_SESSION['loadtime']) $simple_update = " AND (( item_unseen = 1 AND item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) OR item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) "; @@ -191,14 +191,14 @@ class Display extends \Zotlabs\Web\Controller { //$mid = ((($target_item['verb'] == ACTIVITY_LIKE) || ($target_item['verb'] == ACTIVITY_DISLIKE)) ? $target_item['thr_parent'] : $target_item['mid']); $mid = $target_item['mid']; - // if we got a decoded hash we must encode it again before handing to javascript + // if we got a decoded hash we must encode it again before handing to javascript if($decoded) $mid = 'b64.' . base64url_encode($mid); $o .= '
' . "\r\n"; $o .= "\r\n"; - + \App::$page['htmlhead'] .= replace_macros(get_markup_template("build_query.tpl"),array( '$baseurl' => z_root(), '$pgtype' => 'display', @@ -230,7 +230,7 @@ class Display extends \Zotlabs\Web\Controller { '$mid' => (($mid) ? urlencode($mid) : '') )); - head_add_link([ + head_add_link([ 'rel' => 'alternate', 'type' => 'application/json+oembed', 'href' => z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . \App::$query_string), @@ -269,20 +269,23 @@ class Display extends \Zotlabs\Web\Controller { $sysid = 0; $r = q("SELECT item.id as item_id from item - WHERE mid = '%s' - AND (((( item.allow_cid = '' AND item.allow_gid = '' AND item.deny_cid = '' - AND item.deny_gid = '' AND item_private = 0 ) + WHERE ( (mid = '%s' + AND (((( item.allow_cid = '' AND item.allow_gid = '' AND item.deny_cid = '' + AND item.deny_gid = '' AND item_private = 0 ) and uid in ( " . stream_perms_api_uids(($observer_hash) ? (PERMS_NETWORK|PERMS_PUBLIC) : PERMS_PUBLIC) . " )) - OR uid = %d ) - $sql_extra ) + OR uid = %d ) ) ) OR + (mid = '%s' $sql_extra ) ) $item_normal limit 1", dbesc($target_item['parent_mid']), - intval($sysid) + intval($sysid), + dbesc($target_item['parent_mid']) ); + + } } - + elseif($update && !$load) { $r = null; @@ -307,8 +310,8 @@ class Display extends \Zotlabs\Web\Controller { $sysid = 0; $r = q("SELECT item.parent AS item_id from item WHERE parent_mid = '%s' - AND (((( item.allow_cid = '' AND item.allow_gid = '' AND item.deny_cid = '' - AND item.deny_gid = '' AND item_private = 0 ) + AND (((( item.allow_cid = '' AND item.allow_gid = '' AND item.deny_cid = '' + AND item.deny_gid = '' AND item_private = 0 ) and uid in ( " . stream_perms_api_uids(($observer_hash) ? (PERMS_NETWORK|PERMS_PUBLIC) : PERMS_PUBLIC) . " )) OR uid = %d ) $sql_extra ) @@ -320,7 +323,7 @@ class Display extends \Zotlabs\Web\Controller { ); } } - + else { $r = array(); } @@ -328,7 +331,7 @@ class Display extends \Zotlabs\Web\Controller { if($r) { $parents_str = ids_to_querystr($r,'item_id'); if($parents_str) { - $items = q("SELECT item.*, item.id AS item_id + $items = q("SELECT item.*, item.id AS item_id FROM item WHERE parent in ( %s ) $item_normal ", dbesc($parents_str) @@ -341,10 +344,10 @@ class Display extends \Zotlabs\Web\Controller { else { $items = array(); } - + switch($module_format) { - + case 'html': if ($update) { @@ -363,7 +366,7 @@ class Display extends \Zotlabs\Web\Controller { \App::$page['title'] = (($items[0]['title']) ? $items[0]['title'] . " - " . \App::$page['title'] : \App::$page['title']); $o .= conversation($items, 'display', $update, 'client'); - } + } break; @@ -380,7 +383,7 @@ class Display extends \Zotlabs\Web\Controller { '$owner' => '', '$profile_page' => xmlify(z_root() . '/display/' . $target_item['mid']), )); - + $x = [ 'xml' => $atom, 'channel' => $channel, 'observer_hash' => $observer_hash, 'params' => $params ]; call_hooks('atom_feed_top',$x); @@ -406,13 +409,13 @@ class Display extends \Zotlabs\Web\Controller { header('Content-type: application/atom+xml'); echo $atom; killme(); - + } $o .= '
'; if((($update && $load) || $noscript_content) && (! $items)) { - + $r = q("SELECT id, item_deleted FROM item WHERE mid = '%s' LIMIT 1", dbesc($item_hash) ); @@ -421,14 +424,14 @@ class Display extends \Zotlabs\Web\Controller { if(intval($r[0]['item_deleted'])) { notice( t('Item has been removed.') . EOL ); } - else { - notice( t('Permission denied.') . EOL ); + else { + notice( t('Permission denied.') . EOL ); } } else { notice( t('Item not found.') . EOL ); } - + } $_SESSION['loadtime'] = datetime_convert(); diff --git a/Zotlabs/Module/Editpost.php b/Zotlabs/Module/Editpost.php index 49b2892e8..c6cfc6dc4 100644 --- a/Zotlabs/Module/Editpost.php +++ b/Zotlabs/Module/Editpost.php @@ -58,9 +58,9 @@ class Editpost extends \Zotlabs\Web\Controller { if ($catsenabled){ $itm = fetch_post_tags($itm); - + $cats = get_terms_oftype($itm[0]['term'], TERM_CATEGORY); - + foreach ($cats as $cat) { if (strlen($category)) $category .= ', '; @@ -95,6 +95,7 @@ class Editpost extends \Zotlabs\Web\Controller { 'defloc' => $channel['channel_location'], 'visitor' => true, 'title' => htmlspecialchars_decode($itm[0]['title'],ENT_COMPAT), + 'summary' => htmlspecialchars_decode($itm[0]['summary'],ENT_COMPAT), 'category' => $category, 'showacl' => false, 'profile_uid' => $owner_uid, diff --git a/Zotlabs/Module/Embedphotos.php b/Zotlabs/Module/Embedphotos.php index 9b0884197..ed5b24724 100644 --- a/Zotlabs/Module/Embedphotos.php +++ b/Zotlabs/Module/Embedphotos.php @@ -40,7 +40,8 @@ class Embedphotos extends \Zotlabs\Web\Controller { if (!$href) { json_return_and_die(array('errormsg' => 'Error retrieving link ' . $href, 'status' => false)); } - $resource_id = array_pop(explode('/', $href)); + $arr = explode('/', $href); + $resource_id = array_pop($arr); $x = self::photolink($resource_id); if($x) json_return_and_die(array('status' => true, 'photolink' => $x, 'resource_id' => $resource_id)); diff --git a/Zotlabs/Module/Fhublocs.php b/Zotlabs/Module/Fhublocs.php index dcd399a1f..42dac5b12 100644 --- a/Zotlabs/Module/Fhublocs.php +++ b/Zotlabs/Module/Fhublocs.php @@ -15,12 +15,12 @@ class Fhublocs extends \Zotlabs\Web\Controller { if(! is_site_admin()) return; - + $o = ''; - + $r = q("select * from channel where channel_removed = 0"); $sitekey = get_config('system','pubkey'); - + if($r) { foreach($r as $rr) { @@ -38,14 +38,14 @@ class Fhublocs extends \Zotlabs\Web\Controller { if($found) { $o .= 'Hubloc exists for ' . $rr['channel_name'] . EOL; continue; - } + } } $y = q("select xchan_addr from xchan where xchan_hash = '%s' limit 1", dbesc($rr['channel_hash']) ); if($y) $primary_address = $y[0]['xchan_addr']; - + $hub_address = channel_reddress($rr); $primary = (($hub_address === $primary_address) ? 1 : 0); @@ -56,9 +56,9 @@ class Fhublocs extends \Zotlabs\Web\Controller { dbesc($rr['channel_hash']), dbesc(z_root()) ); - + // Create a verified hub location pointing to this site. - + /* $h = hubloc_store_lowlevel( [ @@ -69,7 +69,7 @@ class Fhublocs extends \Zotlabs\Web\Controller { 'hubloc_network' => 'zot', 'hubloc_primary' => $primary, 'hubloc_url' => z_root(), - 'hubloc_url_sig' => base64url_encode(rsa_sign(z_root(),$rr['channel_prvkey'])), + 'hubloc_url_sig' => base64url_encode(Crypto::sign(z_root(),$rr['channel_prvkey'])), 'hubloc_host' => \App::get_hostname(), 'hubloc_callback' => z_root() . '/post', 'hubloc_sitekey' => $sitekey @@ -99,11 +99,11 @@ class Fhublocs extends \Zotlabs\Web\Controller { $o . 'local hubloc created for ' . $rr['channel_name'] . EOL; else $o .= 'DB update failed for ' . $rr['channel_name'] . EOL; - + } - + return $o; - + } } } diff --git a/Zotlabs/Module/Getfile.php b/Zotlabs/Module/Getfile.php index 20cc23ac0..28d7eabb5 100644 --- a/Zotlabs/Module/Getfile.php +++ b/Zotlabs/Module/Getfile.php @@ -1,6 +1,7 @@ 'zot', 'hubloc_primary' => (($seize) ? 1 : 0), 'hubloc_url' => z_root(), - 'hubloc_url_sig' => base64url_encode(rsa_sign(z_root(),$channel['channel_prvkey'])), + 'hubloc_url_sig' => base64url_encode(Crypto::sign(z_root(),$channel['channel_prvkey'])), 'hubloc_host' => \App::get_hostname(), 'hubloc_callback' => z_root() . '/post', 'hubloc_sitekey' => get_config('system','pubkey'), @@ -256,7 +257,7 @@ class Import extends \Zotlabs\Web\Controller { 'hubloc_network' => 'zot6', 'hubloc_primary' => (($seize) ? 1 : 0), 'hubloc_url' => z_root(), - 'hubloc_url_sig' => 'sha256.' . base64url_encode(rsa_sign(z_root(),$channel['channel_prvkey'])), + 'hubloc_url_sig' => 'sha256.' . base64url_encode(Crypto::sign(z_root(),$channel['channel_prvkey'])), 'hubloc_host' => \App::get_hostname(), 'hubloc_callback' => z_root() . '/zot', 'hubloc_sitekey' => get_config('system','pubkey'), diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php index 83424a50d..bc35ac452 100644 --- a/Zotlabs/Module/Item.php +++ b/Zotlabs/Module/Item.php @@ -132,13 +132,14 @@ class Item extends Controller { $i = Activity::encode_item_collection($items, 'conversation/' . $item_id, 'OrderedCollection'); - if($portable_id) { - ThreadListener::store(z_root() . '/item/' . $item_id,$portable_id); - } if(! $i) http_status_exit(404, 'Not found'); + if($portable_id && (! intval($items[0]['item_private']))) { + ThreadListener::store(z_root() . '/item/' . $item_id, $portable_id); + } + $x = array_merge(['@context' => [ ACTIVITYSTREAMS_JSONLD_REV, 'https://w3id.org/security/v1', @@ -237,6 +238,16 @@ class Item extends Controller { if(! $i) http_status_exit(404, 'Not found'); + if ($portable_id && (! intval($items[0]['item_private']))) { + $c = q("select abook_id from abook where abook_channel = %d and abook_xchan = '%s'", + intval($items[0]['uid']), + dbesc($portable_id) + ); + if (! $c) { + ThreadListener::store(z_root() . '/item/' . $item_id, $portable_id); + } + } + $x = array_merge(['@context' => [ ACTIVITYSTREAMS_JSONLD_REV, 'https://w3id.org/security/v1', @@ -810,18 +821,7 @@ class Item extends Controller { // and will require alternatives for alternative content-types (text/html, text/markdown, text/plain, etc.) // we may need virtual or template classes to implement the possible alternatives - if(strpos($body,'[/summary]') !== false) { - $match = ''; - $cnt = preg_match("/\[summary\](.*?)\[\/summary\]/ism",$body,$match); - if($cnt) { - $summary .= $match[1]; - } - $body_content = preg_replace("/\[summary\](.*?)\[\/summary\]/ism", '',$body); - $body = trim($body_content); - } - $summary = cleanup_bbcode($summary); - $body = cleanup_bbcode($body); // Look for tags and linkify them @@ -876,15 +876,10 @@ class Item extends Controller { if(! $preview) { fix_attached_photo_permissions($profile_uid,$owner_xchan['xchan_hash'],((strpos($body,'[/crypt]')) ? $_POST['media_str'] : $body),$str_contact_allow,$str_group_allow,$str_contact_deny,$str_group_deny); - fix_attached_photo_permissions($profile_uid,$owner_xchan['xchan_hash'],((strpos($summary,'[/crypt]')) ? $_POST['media_str'] : $summary),$str_contact_allow,$str_group_allow,$str_contact_deny,$str_group_deny); - - fix_attached_file_permissions($channel,$observer['xchan_hash'],((strpos($body,'[/crypt]')) ? $_POST['media_str'] : $body),$str_contact_allow,$str_group_allow,$str_contact_deny,$str_group_deny); - } - $attachments = ''; $match = false; @@ -922,10 +917,9 @@ class Item extends Controller { } } + // BBCODE end alert } - // BBCODE end alert - if(strlen($categories)) { $cats = explode(',',$categories); diff --git a/Zotlabs/Module/Like.php b/Zotlabs/Module/Like.php index 358611b1b..e3fe4a954 100644 --- a/Zotlabs/Module/Like.php +++ b/Zotlabs/Module/Like.php @@ -1,37 +1,42 @@ ACTIVITY_LIKE , - 'dislike' => ACTIVITY_DISLIKE , - 'agree' => ACTIVITY_AGREE , - 'disagree' => ACTIVITY_DISAGREE , - 'abstain' => ACTIVITY_ABSTAIN , - 'attendyes' => ACTIVITY_ATTEND , - 'attendno' => ACTIVITY_ATTENDNO , + 'like' => ACTIVITY_LIKE, + 'dislike' => ACTIVITY_DISLIKE, + 'agree' => ACTIVITY_AGREE, + 'disagree' => ACTIVITY_DISAGREE, + 'abstain' => ACTIVITY_ABSTAIN, + 'attendyes' => ACTIVITY_ATTEND, + 'attendno' => ACTIVITY_ATTENDNO, 'attendmaybe' => ACTIVITY_ATTENDMAYBE ]; // unlike (etc.) reactions are an undo of positive reactions, rather than a negative action. // The activity is the same in undo actions and will have the same activity mapping - if(substr($reaction,0,2) === 'un') { - $reaction = substr($reaction,2); + if (substr($reaction, 0, 2) === 'un') { + $reaction = substr($reaction, 2); } - if(array_key_exists($reaction,$acts)) { + if (array_key_exists($reaction, $acts)) { return $acts[$reaction]; } @@ -41,60 +46,69 @@ class Like extends \Zotlabs\Web\Controller { private function like_response($arr) { - if($arr['conv_mode'] === 'channel') { + $page_mode = (($arr['item']['item_thread_top'] && $_REQUEST['page_mode']) ? $_REQUEST['page_mode'] : 'r_preview'); + $conv_mode = (($_REQUEST['conv_mode']) ? $_REQUEST['conv_mode'] : 'network'); + + if ($conv_mode === 'channel') { $parts = explode('@', $arr['owner_xchan']['xchan_addr']); profile_load($parts[0]); } - $item_normal = item_normal(); - $activities = q("SELECT item.*, item.id AS item_id FROM item - WHERE uid = %d $item_normal - AND thr_parent = '%s' - AND verb IN ('%s', '%s', '%s', '%s', '%s')", - intval($arr['item']['uid']), - dbesc($arr['item']['mid']), - dbesc(ACTIVITY_LIKE), - dbesc(ACTIVITY_DISLIKE), - dbesc(ACTIVITY_ATTEND), - dbesc(ACTIVITY_ATTENDNO), - dbesc(ACTIVITY_ATTENDMAYBE) - ); - - xchan_query($activities,true); - - $convitems[] = $arr['item']; - $convitems = array_merge($convitems, $activities); - - $convitems = fetch_post_tags($convitems,true); + if ($page_mode === 'list') { + $items = q("SELECT item.*, item.id AS item_id FROM item + WHERE uid = %d $item_normal + AND parent = %d", + intval($arr['item']['uid']), + intval($arr['item']['parent']) + ); + xchan_query($items, true); + $items = fetch_post_tags($items, true); + $items = conv_sort($items, 'commented'); + } + else { + $activities = q("SELECT item.*, item.id AS item_id FROM item + WHERE uid = %d $item_normal + AND thr_parent = '%s' + AND verb IN ('%s', '%s', '%s', '%s', '%s')", + intval($arr['item']['uid']), + dbesc($arr['item']['mid']), + dbesc(ACTIVITY_LIKE), + dbesc(ACTIVITY_DISLIKE), + dbesc(ACTIVITY_ATTEND), + dbesc(ACTIVITY_ATTENDNO), + dbesc(ACTIVITY_ATTENDMAYBE) + ); + xchan_query($activities, true); + $items = array_merge([$arr['item']], $activities); + $items = fetch_post_tags($items, true); + } $ret = [ 'success' => 1, 'orig_id' => $arr['orig_item_id'], //this is required for pubstream items where $item_id != $item['id'] - 'id' => $arr['item']['id'], - 'html' => conversation($convitems, $arr['conv_mode'], true, 'r_preview'), + 'id' => $arr['item']['id'], + 'html' => conversation($items, $conv_mode, true, $page_mode), ]; - return $ret; } public function get() { - $o = EMPTY_STR; - + $o = EMPTY_STR; $sys_channel = get_sys_channel(); - $sys_channel_id = (($sys_channel) ? $sys_channel['channel_id'] : 0); - - $observer = \App::get_observer(); + $observer = App::get_observer(); $interactive = $_REQUEST['interactive']; - if((! $observer) || ($interactive)) { + + if ((!$observer) || ($interactive)) { $o .= '

' . t('Like/Dislike') . '

'; $o .= EOL . EOL; - if(! $observer) { - $_SESSION['return_url'] = \App::$query_string; + if (!$observer) { + $_SESSION['return_url'] = App::$query_string; + $o .= t('This action is restricted to members.') . EOL; $o .= t('Please login with your $Projectname ID or register as a new $Projectname member to continue.') . EOL; return $o; @@ -102,56 +116,54 @@ class Like extends \Zotlabs\Web\Controller { } $verb = notags(trim($_GET['verb'])); - $mode = (($_GET['conv_mode'] === 'channel') ? 'channel' : 'network'); - if(! $verb) + if (!$verb) $verb = 'like'; $activity = $this->reaction_to_activity($verb); - if(! $activity) { + if (!$activity) { return EMPTY_STR; } $is_rsvp = false; - if (in_array($activity, [ ACTIVITY_ATTEND, ACTIVITY_ATTENDNO, ACTIVITY_ATTENDMAYBE ])) { + if (in_array($activity, [ACTIVITY_ATTEND, ACTIVITY_ATTENDNO, ACTIVITY_ATTENDMAYBE])) { $is_rsvp = true; } - $extended_like = false; - $object = $target = null; - $post_type = EMPTY_STR; - $objtype = EMPTY_STR; + $object = $target = null; + $post_type = EMPTY_STR; + $objtype = EMPTY_STR; - if(argc() == 3) { + if (argc() == 3) { - if(! $observer) + if (!$observer) killme(); $extended_like = true; - $obj_type = argv(1); - $obj_id = argv(2); - $public = true; + $obj_type = argv(1); + $obj_id = argv(2); + $public = true; - if($obj_type == 'profile') { + if ($obj_type == 'profile') { $r = q("select * from profile where profile_guid = '%s' limit 1", dbesc(argv(2)) ); - if(! $r) + if (!$r) killme(); $owner_uid = $r[0]['uid']; - if($r[0]['is_default']) + if ($r[0]['is_default']) $public = true; - if(! $public) { + if (!$public) { $d = q("select abook_xchan from abook where abook_profile = '%s' and abook_channel = %d", dbesc($r[0]['profile_guid']), intval($owner_uid) ); - if(! $d) { + if (!$d) { // forgery - illegal - if($interactive) { - notice( t('Invalid request.') . EOL); + if ($interactive) { + notice(t('Invalid request.') . EOL); return $o; } killme(); @@ -159,25 +171,25 @@ class Like extends \Zotlabs\Web\Controller { // $d now contains a list of those who can see this profile - only send the status notification // to them. $allow_cid = $allow_gid = $deny_cid = $deny_gid = ''; - foreach($d as $dd) { + foreach ($d as $dd) { $allow_cid .= '<' . $dd['abook_xchan'] . '>'; } } $post_type = t('channel'); - $objtype = ACTIVITY_OBJ_PROFILE; + $objtype = ACTIVITY_OBJ_PROFILE; $profile = $r[0]; } - elseif($obj_type == 'thing') { + elseif ($obj_type == 'thing') { $r = q("select * from obj where obj_type = %d and obj_obj = '%s' limit 1", - intval(TERM_OBJ_THING), - dbesc(argv(2)) - ); + intval(TERM_OBJ_THING), + dbesc(argv(2)) + ); - if(! $r) { - if($interactive) { - notice( t('Invalid request.') . EOL); + if (!$r) { + if ($interactive) { + notice(t('Invalid request.') . EOL); return $o; } killme(); @@ -187,19 +199,19 @@ class Like extends \Zotlabs\Web\Controller { $allow_cid = $r[0]['allow_cid']; $allow_gid = $r[0]['allow_gid']; - $deny_cid = $r[0]['deny_cid']; - $deny_gid = $r[0]['deny_gid']; - if($allow_cid || $allow_gid || $deny_cid || $deny_gid) + $deny_cid = $r[0]['deny_cid']; + $deny_gid = $r[0]['deny_gid']; + if ($allow_cid || $allow_gid || $deny_cid || $deny_gid) $public = false; $post_type = t('thing'); - $objtype = ACTIVITY_OBJ_PROFILE; - $tgttype = ACTIVITY_OBJ_THING; + $objtype = ACTIVITY_OBJ_PROFILE; + $tgttype = ACTIVITY_OBJ_THING; $links = array(); - $links[] = array('rel' => 'alternate', 'type' => 'text/html', - 'href' => z_root() . '/thing/' . $r[0]['obj_obj']); - if($r[0]['imgurl']) + $links[] = array('rel' => 'alternate', 'type' => 'text/html', + 'href' => z_root() . '/thing/' . $r[0]['obj_obj']); + if ($r[0]['imgurl']) $links[] = array('rel' => 'photo', 'href' => $r[0]['obj_imgurl']); $target = json_encode(array( @@ -213,9 +225,9 @@ class Like extends \Zotlabs\Web\Controller { } - if(! ($owner_uid && $r)) { - if($interactive) { - notice( t('Invalid request.') . EOL); + if (!($owner_uid && $r)) { + if ($interactive) { + notice(t('Invalid request.') . EOL); return $o; } killme(); @@ -223,11 +235,11 @@ class Like extends \Zotlabs\Web\Controller { // The resultant activity is going to be a wall-to-wall post, so make sure this is allowed - $perms = get_all_perms($owner_uid,$observer['xchan_hash']); + $perms = get_all_perms($owner_uid, $observer['xchan_hash']); - if(! ($perms['post_like'] && $perms['view_profile'])) { - if($interactive) { - notice( t('Permission denied.') . EOL); + if (!($perms['post_like'] && $perms['view_profile'])) { + if ($interactive) { + notice(t('Permission denied.') . EOL); return $o; } killme(); @@ -236,18 +248,18 @@ class Like extends \Zotlabs\Web\Controller { $ch = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_id = %d limit 1", intval($owner_uid) ); - if(! $ch) { - if($interactive) { - notice( t('Channel unavailable.') . EOL); + if (!$ch) { + if ($interactive) { + notice(t('Channel unavailable.') . EOL); return $o; } killme(); } - if(! $plink) + if (!$plink) $plink = '[zrl=' . z_root() . '/profile/' . $ch[0]['channel_address'] . ']' . $post_type . '[/zrl]'; - $object = json_encode(Activity::fetch_profile([ 'id' => channel_url($ch[0]) ])); + $object = json_encode(Activity::fetch_profile(['id' => channel_url($ch[0])])); // second like of the same thing is "undo" for the first like @@ -255,26 +267,26 @@ class Like extends \Zotlabs\Web\Controller { intval($ch[0]['channel_id']), dbesc($observer['xchan_hash']), dbesc($activity), - dbesc(($tgttype)?$tgttype:$objtype), + dbesc(($tgttype) ? $tgttype : $objtype), dbesc($obj_id) ); - if($z) { + if ($z) { $z[0]['deleted'] = 1; - Libsync::build_sync_packet($ch[0]['channel_id'],array('likes' => $z)); + Libsync::build_sync_packet($ch[0]['channel_id'], array('likes' => $z)); q("delete from likes where id = %d", intval($z[0]['id']) ); - if($z[0]['i_mid']) { + if ($z[0]['i_mid']) { $r = q("select id from item where mid = '%s' and uid = %d limit 1", dbesc($z[0]['i_mid']), intval($ch[0]['channel_id']) ); - if($r) - drop_item($r[0]['id'],false); - if($interactive) { - notice( t('Previous action reversed.') . EOL); + if ($r) + drop_item($r[0]['id'], false); + if ($interactive) { + notice(t('Previous action reversed.') . EOL); return $o; } } @@ -283,7 +295,7 @@ class Like extends \Zotlabs\Web\Controller { } else { - if(! $observer) + if (!$observer) killme(); // this is used to like an item or comment @@ -304,32 +316,30 @@ class Like extends \Zotlabs\Web\Controller { // create a copy of the parent in your stream. If not the conversation // parent, copy that as well. - if($r) { - if($r[0]['uid'] === $sys_channel['channel_id'] && local_channel()) { - $r = [ copy_of_pubitem(\App::get_channel(), $r[0]['mid']) ]; + if ($r) { + if ($r[0]['uid'] === $sys_channel['channel_id'] && local_channel()) { + $r = [copy_of_pubitem(App::get_channel(), $r[0]['mid'])]; } } - if(! $item_id || (! $r)) { + if (!$item_id || (!$r)) { logger('like: no item ' . $item_id); killme(); } - xchan_query($r,true); - - $item = $r[0]; + xchan_query($r, true); + $item = $r[0]; $owner_uid = $r[0]['uid']; $owner_aid = $r[0]['aid']; - $can_comment = false; - if((array_key_exists('owner',$item)) && intval($item['owner']['abook_self'])) - $can_comment = perm_is_allowed($item['uid'],$observer['xchan_hash'],'post_comments'); - else - $can_comment = can_comment_on_post($observer['xchan_hash'],$item); + if ((array_key_exists('owner', $item)) && intval($item['owner']['abook_self'])) + $can_comment = perm_is_allowed($item['uid'], $observer['xchan_hash'], 'post_comments'); + else + $can_comment = can_comment_on_post($observer['xchan_hash'], $item); - if(! $can_comment) { - notice( t('Permission denied') . EOL); + if (!$can_comment) { + notice(t('Permission denied') . EOL); killme(); } @@ -337,7 +347,7 @@ class Like extends \Zotlabs\Web\Controller { dbesc($item['owner_xchan']) ); - if($r) + if ($r) $thread_owner = $r[0]; else killme(); @@ -345,24 +355,24 @@ class Like extends \Zotlabs\Web\Controller { $r = q("select * from xchan where xchan_hash = '%s' limit 1", dbesc($item['author_xchan']) ); - if($r) + if ($r) $item_author = $r[0]; else killme(); - $verbs = " '".dbesc($activity)."' "; + $verbs = " '" . dbesc($activity) . "' "; $multi_undo = false; // event participation and consensus items are essentially radio toggles. If you make a subsequent choice, // we need to eradicate your first choice. - if($activity === ACTIVITY_ATTEND || $activity === ACTIVITY_ATTENDNO || $activity === ACTIVITY_ATTENDMAYBE) { - $verbs = " '" . dbesc(ACTIVITY_ATTEND) . "','" . dbesc(ACTIVITY_ATTENDNO) . "','" . dbesc(ACTIVITY_ATTENDMAYBE) . "' "; + if ($activity === ACTIVITY_ATTEND || $activity === ACTIVITY_ATTENDNO || $activity === ACTIVITY_ATTENDMAYBE) { + $verbs = " '" . dbesc(ACTIVITY_ATTEND) . "','" . dbesc(ACTIVITY_ATTENDNO) . "','" . dbesc(ACTIVITY_ATTENDMAYBE) . "' "; $multi_undo = 1; } - if($activity === ACTIVITY_AGREE || $activity === ACTIVITY_DISAGREE || $activity === ACTIVITY_ABSTAIN) { - $verbs = " '" . dbesc(ACTIVITY_AGREE) . "','" . dbesc(ACTIVITY_DISAGREE) . "','" . dbesc(ACTIVITY_ABSTAIN) . "' "; + if ($activity === ACTIVITY_AGREE || $activity === ACTIVITY_DISAGREE || $activity === ACTIVITY_ABSTAIN) { + $verbs = " '" . dbesc(ACTIVITY_AGREE) . "','" . dbesc(ACTIVITY_DISAGREE) . "','" . dbesc(ACTIVITY_ABSTAIN) . "' "; $multi_undo = true; } @@ -375,45 +385,41 @@ class Like extends \Zotlabs\Web\Controller { intval($owner_uid) ); - if($r) { + if ($r) { // already liked it. Drop that item. require_once('include/items.php'); - foreach($r as $rr) { - drop_item($rr['id'],false,DROPITEM_PHASE1); + foreach ($r as $rr) { + drop_item($rr['id'], false, DROPITEM_PHASE1); // set the changed timestamp on the parent so we'll see the update without a page reload - $z = q("update item set changed = '%s' where id = %d and uid = %d", + q("update item set changed = '%s' where id = %d and uid = %d", dbesc(datetime_convert()), intval($rr['parent']), intval($rr['uid']) ); // Prior activity was a duplicate of the one we're submitting, just undo it; // don't fall through and create another - if(activity_match($rr['verb'],$activity)) + if (activity_match($rr['verb'], $activity)) $multi_undo = false; // drop_item was not done interactively, so we need to invoke the notifier // in order to push the changes to connections - \Zotlabs\Daemon\Master::Summon(array('Notifier','drop',$rr['id'])); - + Master::Summon(array('Notifier', 'drop', $rr['id'])); } - if($interactive) + if ($interactive) return; - if(! $multi_undo) { + if (!$multi_undo) { $ret = self::like_response([ - 'item' => $item, + 'item' => $item, 'orig_item_id' => $item_id, - 'owner_xchan' => $thread_owner, - 'conv_mode' => $mode + 'owner_xchan' => $thread_owner ]); json_return_and_die($ret); } - - } } @@ -421,43 +427,39 @@ class Like extends \Zotlabs\Web\Controller { $arr = array(); - $arr['uuid'] = $uuid; - $arr['mid'] = z_root() . (($is_rsvp) ? '/activity/' : '/item/') . $uuid; + $arr['uuid'] = $uuid; + $arr['mid'] = z_root() . (($is_rsvp) ? '/activity/' : '/item/') . $uuid; - if($extended_like) { + if ($extended_like) { $arr['item_thread_top'] = 1; - $arr['item_origin'] = 1; - $arr['item_wall'] = 1; + $arr['item_origin'] = 1; + $arr['item_wall'] = 1; } else { $post_type = (($item['resource_type'] === 'photo') ? t('photo') : t('status')); - if($item['obj_type'] === ACTIVITY_OBJ_EVENT) + if ($item['obj_type'] === ACTIVITY_OBJ_EVENT) $post_type = t('event'); - $links = array(array('rel' => 'alternate','type' => 'text/html', 'href' => $item['plink'])); - $objtype = (($item['resource_type'] === 'photo') ? ACTIVITY_OBJ_PHOTO : ACTIVITY_OBJ_NOTE ); + $objtype = (($item['resource_type'] === 'photo') ? ACTIVITY_OBJ_PHOTO : ACTIVITY_OBJ_NOTE); - if($objtype === ACTIVITY_OBJ_NOTE && (! intval($item['item_thread_top']))) + if ($objtype === ACTIVITY_OBJ_NOTE && (!intval($item['item_thread_top']))) $objtype = ACTIVITY_OBJ_COMMENT; + $object = json_encode(Activity::fetch_item(['id' => $item['mid']])); - $body = $item['body']; - - $object = json_encode(Activity::fetch_item( [ 'id' => $item['mid'] ])); - - if(! intval($item['item_thread_top'])) + if (!intval($item['item_thread_top'])) $post_type = 'comment'; - $arr['item_origin'] = 1; + $arr['item_origin'] = 1; $arr['item_notshown'] = 1; - $arr['item_type'] = $item['item_type']; + $arr['item_type'] = $item['item_type']; - if(intval($item['item_wall'])) + if (intval($item['item_wall'])) $arr['item_wall'] = 1; // if this was a linked photo and was hidden, unhide it. - if(intval($item['item_hidden'])) { + if (intval($item['item_hidden'])) { $r = q("update item set item_hidden = 0 where id = %d", intval($item['id']) ); @@ -465,103 +467,95 @@ class Like extends \Zotlabs\Web\Controller { } - if($verb === 'like') + if ($verb === 'like') $bodyverb = t('%1$s likes %2$s\'s %3$s'); - if($verb === 'dislike') + if ($verb === 'dislike') $bodyverb = t('%1$s doesn\'t like %2$s\'s %3$s'); - if($verb === 'agree') + if ($verb === 'agree') $bodyverb = t('%1$s agrees with %2$s\'s %3$s'); - if($verb === 'disagree') + if ($verb === 'disagree') $bodyverb = t('%1$s doesn\'t agree with %2$s\'s %3$s'); - if($verb === 'abstain') + if ($verb === 'abstain') $bodyverb = t('%1$s abstains from a decision on %2$s\'s %3$s'); - if($verb === 'attendyes') + if ($verb === 'attendyes') $bodyverb = t('%1$s is attending %2$s\'s %3$s'); - if($verb === 'attendno') + if ($verb === 'attendno') $bodyverb = t('%1$s is not attending %2$s\'s %3$s'); - if($verb === 'attendmaybe') + if ($verb === 'attendmaybe') $bodyverb = t('%1$s may attend %2$s\'s %3$s'); - if(! isset($bodyverb)) - killme(); + if (!isset($bodyverb)) + killme(); - - - if($extended_like) { - $ulink = '[zrl=' . $ch[0]['xchan_url'] . '][bdi]' . $ch[0]['xchan_name'] . '[/bdi][/zrl]'; - $alink = '[zrl=' . $observer['xchan_url'] . '][bdi]' . $observer['xchan_name'] . '[/bdi][/zrl]'; + if ($extended_like) { + $ulink = '[zrl=' . $ch[0]['xchan_url'] . '][bdi]' . $ch[0]['xchan_name'] . '[/bdi][/zrl]'; + $alink = '[zrl=' . $observer['xchan_url'] . '][bdi]' . $observer['xchan_name'] . '[/bdi][/zrl]'; $private = (($public) ? 0 : 1); } else { - $arr['parent'] = $item['id']; - $arr['thr_parent'] = $item['mid']; - $ulink = '[zrl=' . $item_author['xchan_url'] . '][bdi]' . $item_author['xchan_name'] . '[/bdi][/zrl]'; - $alink = '[zrl=' . $observer['xchan_url'] . '][bdi]' . $observer['xchan_name'] . '[/bdi][/zrl]'; - $plink = '[zrl=' . z_root() . '/display/' . gen_link_id($item['mid']) . ']' . $post_type . '[/zrl]'; - $allow_cid = $item['allow_cid']; - $allow_gid = $item['allow_gid']; - $deny_cid = $item['deny_cid']; - $deny_gid = $item['deny_gid']; - $private = $item['private']; + $arr['parent'] = $item['id']; + $arr['thr_parent'] = $item['mid']; + $ulink = '[zrl=' . $item_author['xchan_url'] . '][bdi]' . $item_author['xchan_name'] . '[/bdi][/zrl]'; + $alink = '[zrl=' . $observer['xchan_url'] . '][bdi]' . $observer['xchan_name'] . '[/bdi][/zrl]'; + $plink = '[zrl=' . z_root() . '/display/' . gen_link_id($item['mid']) . ']' . $post_type . '[/zrl]'; + $allow_cid = $item['allow_cid']; + $allow_gid = $item['allow_gid']; + $deny_cid = $item['deny_cid']; + $deny_gid = $item['deny_gid']; + $private = $item['private']; } - $arr['aid'] = (($extended_like) ? $ch[0]['channel_account_id'] : $owner_aid); $arr['uid'] = $owner_uid; - - $arr['item_flags'] = $item['item_flags']; $arr['item_wall'] = $item['item_wall']; $arr['parent_mid'] = (($extended_like) ? $arr['mid'] : $item['mid']); $arr['owner_xchan'] = (($extended_like) ? $ch[0]['xchan_hash'] : $thread_owner['xchan_hash']); $arr['author_xchan'] = $observer['xchan_hash']; + $arr['body'] = sprintf($bodyverb, $alink, $ulink, $plink); - - $arr['body'] = sprintf( $bodyverb, $alink, $ulink, $plink ); - if($obj_type === 'thing' && $r[0]['imgurl']) { + if ($obj_type === 'thing' && $r[0]['imgurl']) { $arr['body'] .= "\n\n[zmg=80x80]" . $r[0]['imgurl'] . '[/zmg]'; } - if($obj_type === 'profile') { - if($public) { + if ($obj_type === 'profile') { + if ($public) { $arr['body'] .= "\n\n" . '[embed]' . z_root() . '/profile/' . $ch[0]['channel_address'] . '[/embed]'; } else $arr['body'] .= "\n\n[zmg=80x80]" . $profile['thumb'] . '[/zmg]'; } + $arr['verb'] = $activity; + $arr['obj_type'] = $objtype; + $arr['obj'] = $object; - $arr['verb'] = $activity; - $arr['obj_type'] = $objtype; - $arr['obj'] = $object; - - if($target) { - $arr['tgt_type'] = $tgttype; - $arr['target'] = $target; + if ($target) { + $arr['tgt_type'] = $tgttype; + $arr['target'] = $target; } - $arr['allow_cid'] = $allow_cid; - $arr['allow_gid'] = $allow_gid; - $arr['deny_cid'] = $deny_cid; - $arr['deny_gid'] = $deny_gid; - $arr['item_private'] = $private; + $arr['allow_cid'] = $allow_cid; + $arr['allow_gid'] = $allow_gid; + $arr['deny_cid'] = $deny_cid; + $arr['deny_gid'] = $deny_gid; + $arr['item_private'] = $private; - call_hooks('post_local',$arr); + call_hooks('post_local', $arr); - $post = item_store($arr); + $post = item_store($arr); $post_id = $post['item_id']; // save the conversation from expiration - if(local_channel() && array_key_exists('item',$post) && (intval($post['item']['id']) != intval($post['item']['parent']))) + if (local_channel() && array_key_exists('item', $post) && (intval($post['item']['id']) != intval($post['item']['parent']))) retain_item($post['item']['parent']); $arr['id'] = $post_id; call_hooks('post_local_end', $arr); - - if($extended_like) { + if ($extended_like) { $r = q("insert into likes (channel_id,liker,likee,iid,i_mid,verb,target_type,target_id,target) values (%d,'%s','%s',%d,'%s','%s','%s','%s','%s')", intval($ch[0]['channel_id']), dbesc($observer['xchan_hash']), @@ -569,36 +563,35 @@ class Like extends \Zotlabs\Web\Controller { intval($post_id), dbesc($arr['mid']), dbesc($activity), - dbesc(($tgttype)? $tgttype : $objtype), + dbesc(($tgttype) ? $tgttype : $objtype), dbesc($obj_id), - dbesc(($target) ? $target : $object) + dbesc(($target) ? $target : $object) ); $r = q("select * from likes where liker = '%s' and likee = '%s' and i_mid = '%s' and verb = '%s' and target_type = '%s' and target_id = '%s' ", dbesc($observer['xchan_hash']), dbesc($ch[0]['channel_hash']), dbesc($arr['mid']), dbesc($activity), - dbesc(($tgttype)? $tgttype : $objtype), + dbesc(($tgttype) ? $tgttype : $objtype), dbesc($obj_id) ); - if($r) - Libsync::build_sync_packet($ch[0]['channel_id'],array('likes' => $r)); + if ($r) + Libsync::build_sync_packet($ch[0]['channel_id'], array('likes' => $r)); } - \Zotlabs\Daemon\Master::Summon(array('Notifier','like',$post_id)); + Master::Summon(array('Notifier', 'like', $post_id)); - if($interactive) { - notice( t('Action completed.') . EOL); + if ($interactive) { + notice(t('Action completed.') . EOL); $o .= t('Thank you.'); return $o; } $ret = self::like_response([ - 'item' => $item, + 'item' => $item, 'orig_item_id' => $item_id, - 'owner_xchan' => $thread_owner, - 'conv_mode' => $mode + 'owner_xchan' => $thread_owner ]); json_return_and_die($ret); diff --git a/Zotlabs/Module/Network.php b/Zotlabs/Module/Network.php index 4a1692d64..84c2463d6 100644 --- a/Zotlabs/Module/Network.php +++ b/Zotlabs/Module/Network.php @@ -20,44 +20,44 @@ class Network extends \Zotlabs\Web\Controller { return; } - if(in_array(substr($_GET['search'],0,1),[ '@', '!', '?'])) + if(in_array(substr($_GET['search'],0,1),[ '@', '!', '?']) || strpos($_GET['search'], 'https://') === 0) goaway('search' . '?f=&search=' . $_GET['search']); - + if(count($_GET) < 2) { $network_options = get_pconfig(local_channel(),'system','network_page_default'); if($network_options) goaway('network' . '?f=&' . $network_options); } - + $channel = App::get_channel(); App::$profile_uid = local_channel(); head_set_icon($channel['xchan_photo_s']); - + } - + function get($update = 0, $load = false) { - + if(! local_channel()) { $_SESSION['return_url'] = App::$query_string; return login(false); } - + $o = ''; $arr = array('query' => App::$query_string); - + call_hooks('network_content_init', $arr); - + $channel = App::get_channel(); $item_normal = item_normal(); $item_normal_update = item_normal_update(); - + $datequery = $datequery2 = ''; - + $group = 0; - + $nouveau = false; - + $datequery = ((x($_GET,'dend') && is_a_date_arg($_GET['dend'])) ? notags($_GET['dend']) : ''); $datequery2 = ((x($_GET,'dbegin') && is_a_date_arg($_GET['dbegin'])) ? notags($_GET['dbegin']) : ''); $gid = ((x($_GET,'gid')) ? intval($_GET['gid']) : 0); @@ -87,13 +87,13 @@ class Network extends \Zotlabs\Web\Controller { $search = ''; } } - + if($datequery) $order = 'post'; - - + + // filter by collection (e.g. group) - + if($gid) { $r = q("SELECT * FROM pgrp WHERE id = %d AND uid = %d LIMIT 1", intval($gid), @@ -106,12 +106,12 @@ class Network extends \Zotlabs\Web\Controller { goaway(z_root() . '/network'); // NOTREACHED } - + $group = $gid; $group_hash = $r[0]['hash']; $def_acl = array('allow_gid' => '<' . $r[0]['hash'] . '>'); } - + $default_cmin = ((Apps::system_app_installed(local_channel(),'Affinity Tool')) ? get_pconfig(local_channel(),'affinity','cmin',0) : (-1)); $default_cmax = ((Apps::system_app_installed(local_channel(),'Affinity Tool')) ? get_pconfig(local_channel(),'affinity','cmax',99) : (-1)); @@ -127,7 +127,7 @@ class Network extends \Zotlabs\Web\Controller { $net = ((x($_GET,'net')) ? $_GET['net'] : ''); $pf = ((x($_GET,'pf')) ? $_GET['pf'] : ''); $unseen = ((x($_GET,'unseen')) ? $_GET['unseen'] : ''); - + if (Apps::system_app_installed(local_channel(),'Affinity Tool')) { $affinity_locked = intval(get_pconfig(local_channel(),'affinity','lock',1)); if ($affinity_locked) { @@ -155,16 +155,16 @@ class Network extends \Zotlabs\Web\Controller { } $def_acl = [ 'allow_cid' => '<' . $cid_r[0]['abook_xchan'] . '>', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '' ]; } - + if(! $update) { - + // search terms header if($search || $hashtags) { $o .= replace_macros(get_markup_template("section_title.tpl"),array( '$title' => t('Search Results For:') . ' ' . (($search) ? htmlspecialchars($search, ENT_COMPAT,'UTF-8') : '#' . htmlspecialchars($hashtags, ENT_COMPAT,'UTF-8')) )); } - + nav_set_selected('Network'); $bang = '!'; @@ -179,14 +179,14 @@ class Network extends \Zotlabs\Web\Controller { } $channel_acl = array( - 'allow_cid' => $channel['channel_allow_cid'], - 'allow_gid' => $channel['channel_allow_gid'], - 'deny_cid' => $channel['channel_deny_cid'], + 'allow_cid' => $channel['channel_allow_cid'], + 'allow_gid' => $channel['channel_allow_gid'], + 'deny_cid' => $channel['channel_deny_cid'], 'deny_gid' => $channel['channel_deny_gid'] ); $private_editing = (($group || $cid) ? true : false); - + $x = array( 'is_owner' => true, 'allow_location' => ((intval(get_pconfig($channel['channel_id'],'system','use_browser_location'))) ? '1' : ''), @@ -204,28 +204,28 @@ class Network extends \Zotlabs\Web\Controller { 'jotnets' => true, 'reset' => t('Reset form') ); - + $status_editor = status_editor($a,$x,false,'Network'); $o .= $status_editor; } - - + + // We don't have to deal with ACL's on this page. You're looking at everything // that belongs to you, hence you can see all of it. We will filter by group if // desired. - - + + $sql_options = (($star) ? " and item_starred = 1 " : ''); - + $sql_nets = ''; $item_thread_top = ' AND item_thread_top = 1 '; - + $sql_extra = ''; - + if($group) { $contact_str = ''; @@ -241,18 +241,18 @@ class Network extends \Zotlabs\Web\Controller { } $item_thread_top = ''; $sql_extra = " AND item.parent IN ( SELECT DISTINCT parent FROM item WHERE true $sql_options AND (( author_xchan IN ( $contact_str ) OR owner_xchan in ( $contact_str )) or allow_gid like '" . protect_sprintf('%<' . dbesc($group_hash) . '>%') . "' ) and id = parent $item_normal ) "; - + $x = group_rec_byhash(local_channel(), $group_hash); - + if($x) { $title = replace_macros(get_markup_template("section_title.tpl"),array( '$title' => t('Privacy group: ') . $x['gname'] )); } - + $o = $title; $o .= $status_editor; - + } elseif($cid_r) { $item_thread_top = ''; @@ -324,14 +324,217 @@ class Network extends \Zotlabs\Web\Controller { } } - + if(x($category)) { $sql_extra .= protect_sprintf(term_query('item', $category, TERM_CATEGORY)); } if(x($hashtags)) { $sql_extra .= protect_sprintf(term_query('item', $hashtags, TERM_HASHTAG, TERM_COMMUNITYTAG)); } - + + $sql_extra3 = ''; + + if($datequery) { + $sql_extra3 .= protect_sprintf(sprintf(" AND item.created <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery)))); + } + if($datequery2) { + $sql_extra3 .= protect_sprintf(sprintf(" AND item.created >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery2)))); + } + + $sql_extra2 = (($nouveau) ? '' : " AND item.parent = item.id "); + $sql_extra3 = (($nouveau) ? '' : $sql_extra3); + + if(x($_GET,'search')) { + $search = escape_tags($_GET['search']); + if(strpos($search,'#') === 0) { + $sql_extra .= term_query('item',substr($search,1),TERM_HASHTAG,TERM_COMMUNITYTAG); + } + else { + $sql_extra .= sprintf(" AND (item.body like '%s' OR item.title like '%s') ", + dbesc(protect_sprintf('%' . $search . '%')), + dbesc(protect_sprintf('%' . $search . '%')) + ); + } + } + + if ($verb) { + + // the presence of a leading dot in the verb determines + // whether to match the type of activity or the child object. + // The name 'verb' is a holdover from the earlier XML + // ActivityStreams specification. + + if (substr($verb,0,1) === '.') { + $verb = substr($verb,1); + $sql_extra .= sprintf(" AND item.obj_type like '%s' ", + dbesc(protect_sprintf('%' . $verb . '%')) + ); + } + else { + $sql_extra .= sprintf(" AND item.verb like '%s' ", + dbesc(protect_sprintf('%' . $verb . '%')) + ); + } + } + + if(strlen($file)) { + $sql_extra .= term_query('item',$file,TERM_FILE); + } + + if ($dm) { + $sql_extra .= " AND item_private = 2 "; + } + + if($conv) { + $item_thread_top = ''; + $sql_extra .= " AND ( author_xchan = '" . dbesc($channel['channel_hash']) . "' OR item_mentionsme = 1 ) "; + } + + if($update && ! $load) { + + // only setup pagination on initial page view + $pager_sql = ''; + + } + else { + $itemspage = get_pconfig(local_channel(),'system','itemspage'); + App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 10)); + $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(App::$pager['itemspage']), intval(App::$pager['start'])); + } + + // cmin and cmax are both -1 when the affinity tool is disabled + + if(($cmin != (-1)) || ($cmax != (-1))) { + + // Not everybody who shows up in the network stream will be in your address book. + // By default those that aren't are assumed to have closeness = 99; but this isn't + // recorded anywhere. So if cmax is 99, we'll open the search up to anybody in + // the stream with a NULL address book entry. + + $sql_nets .= " AND "; + + if($cmax == 99) + $sql_nets .= " ( "; + + $sql_nets .= "( abook.abook_closeness >= " . intval($cmin) . " "; + $sql_nets .= " AND abook.abook_closeness <= " . intval($cmax) . " ) "; + + if($cmax == 99) + $sql_nets .= " OR abook.abook_closeness IS NULL ) "; + + } + + $net_query = (($net) ? " left join xchan on xchan_hash = author_xchan " : ''); + $net_query2 = (($net) ? " and xchan_network = '" . protect_sprintf(dbesc($net)) . "' " : ''); + + $abook_uids = " and abook.abook_channel = " . local_channel() . " "; + $uids = " and item.uid = " . local_channel() . " "; + + if(feature_enabled(local_channel(), 'network_list_mode')) + $page_mode = 'list'; + else + $page_mode = 'client'; + + $parents_str = ''; + + // This fixes a very subtle bug so I'd better explain it. You wake up in the morning or return after a day + // or three and look at your matrix page - after opening up your browser. The first page loads just as it + // should. All of a sudden a few seconds later, page 2 will get inserted at the beginning of the page + // (before the page 1 content). The update code is actually doing just what it's supposed + // to, it's fetching posts that have the ITEM_UNSEEN bit set. But the reason that page 2 content is being + // returned in an UPDATE is because you hadn't gotten that far yet - you're still on page 1 and everything + // that we loaded for page 1 is now marked as seen. But the stuff on page 2 hasn't been. So... it's being + // treated as "new fresh" content because it is unseen. We need to distinguish it somehow from content + // which "arrived as you were reading page 1". We're going to do this + // by storing in your session the current UTC time whenever you LOAD a network page, and only UPDATE items + // which are both ITEM_UNSEEN and have "changed" since that time. Cross fingers... + + $simple_update = ''; + if($update && $_SESSION['loadtime']) + $simple_update = " AND (( item_unseen = 1 AND item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) OR item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) "; + + if($nouveau && $load) { + // "New Item View" - show all items unthreaded in reverse created date order + $items = q("SELECT item.*, item.id AS item_id, created FROM item + left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids ) + $net_query + WHERE true $uids $item_normal + and (abook.abook_blocked = 0 or abook.abook_flags is null) + $sql_extra $sql_options $sql_nets + $net_query2 + ORDER BY item.created DESC $pager_sql " + ); + + $parents_str = ids_to_querystr($items,'item_id'); + + require_once('include/items.php'); + + xchan_query($items); + + $items = fetch_post_tags($items,true); + } + elseif($update) { + + // Normal conversation view + + if($order === 'post') + $ordering = "created"; + else + $ordering = "commented"; + + if($load) { + // Fetch a page full of parent items for this page + $r = q("SELECT item.parent AS item_id FROM item + left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids ) + $net_query + WHERE true $uids $item_thread_top $item_normal + AND item.mid = item.parent_mid + and (abook.abook_blocked = 0 or abook.abook_flags is null) + $sql_extra3 $sql_extra $sql_options $sql_nets + $net_query2 + ORDER BY $ordering DESC $pager_sql " + ); + } + else { + + // this is an update + $r = q("SELECT item.parent AS item_id FROM item + left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids ) + $net_query + WHERE true $uids $item_normal_update $simple_update + and (abook.abook_blocked = 0 or abook.abook_flags is null) + $sql_extra3 $sql_extra $sql_options $sql_nets $net_query2" + ); + } + + // Then fetch all the children of the parents that are on this page + + if($r) { + + $parents_str = ids_to_querystr($r,'item_id'); + + $items = q("SELECT item.*, item.id AS item_id FROM item + WHERE true $uids $item_normal + AND item.parent IN ( %s ) + $sql_extra ", + dbesc($parents_str) + ); + + xchan_query($items,true); + $items = fetch_post_tags($items,true); + $items = conv_sort($items,$ordering); + } + else { + $items = array(); + } + + } + + $mode = (($nouveau) ? 'network-new' : 'network'); + + if($search) + $mode = 'search'; + if(! $update) { // The special div is needed for liveUpdate to kick in for this page. // We only launch liveUpdate if you aren't filtering in some incompatible @@ -340,13 +543,13 @@ class Network extends \Zotlabs\Web\Controller { $maxheight = get_pconfig(local_channel(),'system','network_divmore_height'); if(! $maxheight) $maxheight = 400; - - + + $o .= '
' . "\r\n"; - $o .= "\r\n"; - + App::$page['htmlhead'] .= replace_macros(get_markup_template("build_query.tpl"),array( '$baseurl' => z_root(), '$pgtype' => 'network', @@ -377,221 +580,19 @@ class Network extends \Zotlabs\Web\Controller { '$net' => (($net) ? urlencode($net) : ''), '$dbegin' => $datequery2, '$pf' => (($pf) ? intval($pf) : 0), - '$unseen' => (($unseen) ? urlencode($unseen) : '') + '$unseen' => (($unseen) ? urlencode($unseen) : ''), + '$page_mode' => $page_mode )); } - - $sql_extra3 = ''; - - if($datequery) { - $sql_extra3 .= protect_sprintf(sprintf(" AND item.created <= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery)))); - } - if($datequery2) { - $sql_extra3 .= protect_sprintf(sprintf(" AND item.created >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery2)))); - } - - $sql_extra2 = (($nouveau) ? '' : " AND item.parent = item.id "); - $sql_extra3 = (($nouveau) ? '' : $sql_extra3); - - if(x($_GET,'search')) { - $search = escape_tags($_GET['search']); - if(strpos($search,'#') === 0) { - $sql_extra .= term_query('item',substr($search,1),TERM_HASHTAG,TERM_COMMUNITYTAG); - } - else { - $sql_extra .= sprintf(" AND (item.body like '%s' OR item.title like '%s') ", - dbesc(protect_sprintf('%' . $search . '%')), - dbesc(protect_sprintf('%' . $search . '%')) - ); - } - } - - if ($verb) { - // the presence of a leading dot in the verb determines - // whether to match the type of activity or the child object. - // The name 'verb' is a holdover from the earlier XML - // ActivityStreams specification. - - if (substr($verb,0,1) === '.') { - $verb = substr($verb,1); - $sql_extra .= sprintf(" AND item.obj_type like '%s' ", - dbesc(protect_sprintf('%' . $verb . '%')) - ); - } - else { - $sql_extra .= sprintf(" AND item.verb like '%s' ", - dbesc(protect_sprintf('%' . $verb . '%')) - ); - } - } - - if(strlen($file)) { - $sql_extra .= term_query('item',$file,TERM_FILE); - } - - if ($dm) { - $sql_extra .= " AND item_private = 2 "; - } - - if($conv) { - $item_thread_top = ''; - $sql_extra .= " AND ( author_xchan = '" . dbesc($channel['channel_hash']) . "' OR item_mentionsme = 1 ) "; - } - - if($update && ! $load) { - - // only setup pagination on initial page view - $pager_sql = ''; - - } - else { - $itemspage = get_pconfig(local_channel(),'system','itemspage'); - App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 10)); - $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(App::$pager['itemspage']), intval(App::$pager['start'])); - } - - // cmin and cmax are both -1 when the affinity tool is disabled - - if(($cmin != (-1)) || ($cmax != (-1))) { - - // Not everybody who shows up in the network stream will be in your address book. - // By default those that aren't are assumed to have closeness = 99; but this isn't - // recorded anywhere. So if cmax is 99, we'll open the search up to anybody in - // the stream with a NULL address book entry. - - $sql_nets .= " AND "; - - if($cmax == 99) - $sql_nets .= " ( "; - - $sql_nets .= "( abook.abook_closeness >= " . intval($cmin) . " "; - $sql_nets .= " AND abook.abook_closeness <= " . intval($cmax) . " ) "; - - if($cmax == 99) - $sql_nets .= " OR abook.abook_closeness IS NULL ) "; - - } - - $net_query = (($net) ? " left join xchan on xchan_hash = author_xchan " : ''); - $net_query2 = (($net) ? " and xchan_network = '" . protect_sprintf(dbesc($net)) . "' " : ''); - - $abook_uids = " and abook.abook_channel = " . local_channel() . " "; - $uids = " and item.uid = " . local_channel() . " "; - - if(feature_enabled(local_channel(), 'network_list_mode')) - $page_mode = 'list'; - else - $page_mode = 'client'; - - $parents_str = ''; - - // This fixes a very subtle bug so I'd better explain it. You wake up in the morning or return after a day - // or three and look at your matrix page - after opening up your browser. The first page loads just as it - // should. All of a sudden a few seconds later, page 2 will get inserted at the beginning of the page - // (before the page 1 content). The update code is actually doing just what it's supposed - // to, it's fetching posts that have the ITEM_UNSEEN bit set. But the reason that page 2 content is being - // returned in an UPDATE is because you hadn't gotten that far yet - you're still on page 1 and everything - // that we loaded for page 1 is now marked as seen. But the stuff on page 2 hasn't been. So... it's being - // treated as "new fresh" content because it is unseen. We need to distinguish it somehow from content - // which "arrived as you were reading page 1". We're going to do this - // by storing in your session the current UTC time whenever you LOAD a network page, and only UPDATE items - // which are both ITEM_UNSEEN and have "changed" since that time. Cross fingers... - - $simple_update = ''; - if($update && $_SESSION['loadtime']) - $simple_update = " AND (( item_unseen = 1 AND item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) OR item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) "; - - if($nouveau && $load) { - // "New Item View" - show all items unthreaded in reverse created date order - $items = q("SELECT item.*, item.id AS item_id, created FROM item - left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids ) - $net_query - WHERE true $uids $item_normal - and (abook.abook_blocked = 0 or abook.abook_flags is null) - $sql_extra $sql_options $sql_nets - $net_query2 - ORDER BY item.created DESC $pager_sql " - ); - - $parents_str = ids_to_querystr($items,'item_id'); - - require_once('include/items.php'); - - xchan_query($items); - - $items = fetch_post_tags($items,true); - } - elseif($update) { - - // Normal conversation view - - if($order === 'post') - $ordering = "created"; - else - $ordering = "commented"; - - if($load) { - // Fetch a page full of parent items for this page - $r = q("SELECT item.parent AS item_id FROM item - left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids ) - $net_query - WHERE true $uids $item_thread_top $item_normal - AND item.mid = item.parent_mid - and (abook.abook_blocked = 0 or abook.abook_flags is null) - $sql_extra3 $sql_extra $sql_options $sql_nets - $net_query2 - ORDER BY $ordering DESC $pager_sql " - ); - } - else { - - // this is an update - $r = q("SELECT item.parent AS item_id FROM item - left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids ) - $net_query - WHERE true $uids $item_normal_update $simple_update - and (abook.abook_blocked = 0 or abook.abook_flags is null) - $sql_extra3 $sql_extra $sql_options $sql_nets $net_query2" - ); - } - - // Then fetch all the children of the parents that are on this page - - if($r) { - - $parents_str = ids_to_querystr($r,'item_id'); - - $items = q("SELECT item.*, item.id AS item_id FROM item - WHERE true $uids $item_normal - AND item.parent IN ( %s ) - $sql_extra ", - dbesc($parents_str) - ); - - xchan_query($items,true); - $items = fetch_post_tags($items,true); - $items = conv_sort($items,$ordering); - } - else { - $items = array(); - } - - } - - $mode = (($nouveau) ? 'network-new' : 'network'); - - if($search) - $mode = 'search'; - $o .= conversation($items,$mode,$update,$page_mode); - + if(($items) && (! $update)) $o .= alt_pager(count($items)); $_SESSION['loadtime'] = datetime_convert(); - + return $o; } - + } diff --git a/Zotlabs/Module/Notifications.php b/Zotlabs/Module/Notifications.php index 1762ad5f6..55268e0a2 100644 --- a/Zotlabs/Module/Notifications.php +++ b/Zotlabs/Module/Notifications.php @@ -19,7 +19,7 @@ class Notifications extends \Zotlabs\Web\Controller { $r = q("select count(*) as total from notify where uid = %d and seen = 0", intval(local_channel()) ); - if($r && intval($t[0]['total']) > 49) { + if($r && intval($r[0]['total']) > 49) { $r = q("select * from notify where uid = %d and seen = 0 order by created desc limit 50", intval(local_channel()) @@ -32,7 +32,7 @@ class Notifications extends \Zotlabs\Web\Controller { $r2 = q("select * from notify where uid = %d and seen = 1 order by created desc limit %d", intval(local_channel()), - intval(50 - intval($t[0]['total'])) + intval(50 - intval($r[0]['total'])) ); $r = array_merge($r1,$r2); } @@ -41,7 +41,7 @@ class Notifications extends \Zotlabs\Web\Controller { $notifications_available = 1; foreach ($r as $rr) { $x = strip_tags(bbcode($rr['msg'])); - $notif_content .= replace_macros(get_markup_template('notify.tpl'),array( + $notif_content = replace_macros(get_markup_template('notify.tpl'),array( '$item_link' => z_root().'/notify/view/'. $rr['id'], '$item_image' => $rr['photo'], '$item_text' => $x, @@ -52,7 +52,7 @@ class Notifications extends \Zotlabs\Web\Controller { } } else { - $notif_content .= t('No more system notifications.'); + $notif_content = t('No more system notifications.'); } $o .= replace_macros(get_markup_template('notifications.tpl'),array( diff --git a/Zotlabs/Module/Pconfig.php b/Zotlabs/Module/Pconfig.php index b2b5d4386..8a71ab974 100644 --- a/Zotlabs/Module/Pconfig.php +++ b/Zotlabs/Module/Pconfig.php @@ -8,16 +8,16 @@ use Zotlabs\Lib\Libsync; class Pconfig extends \Zotlabs\Web\Controller { function post() { - + if(! local_channel()) return; - - + + if($_SESSION['delegate']) return; - + check_form_security_token_redirectOnErr('/pconfig', 'pconfig'); - + $cat = trim(escape_tags($_POST['cat'])); $k = trim(escape_tags($_POST['k'])); $v = trim($_POST['v']); @@ -27,16 +27,16 @@ class Pconfig extends \Zotlabs\Web\Controller { if (preg_match('|^a:[0-9]+:{.*}$|s',$v) || preg_match('|O:8:"stdClass":[0-9]+:{.*}$|s',$v)) { return; } - + if(in_array(argv(2),$this->disallowed_pconfig())) { notice( t('This setting requires special processing and editing has been blocked.') . EOL); return; } - + if(strpos($k,'password') !== false) { - $v = z_obscure($v); + $v = obscurify($v); } - + set_pconfig(local_channel(),$cat,$k,$v); Libsync::build_sync_packet(); @@ -46,24 +46,24 @@ class Pconfig extends \Zotlabs\Web\Controller { goaway(z_root() . '/pconfig/' . $cat . '/' . $k); } - - + + function get() { - + if(! local_channel()) { return login(); } - + $content = '

' . t('Configuration Editor') . '

'; $content .= '
' . t('Warning: Changing some settings could render your channel inoperable. Please leave this page unless you are comfortable with and knowledgeable about how to correctly use this feature.') . '
' . EOL . EOL; - - - + + + if(argc() == 3) { $content .= 'pconfig[' . local_channel() . ']' . EOL; $content .= 'pconfig[' . local_channel() . '][' . escape_tags(argv(1)) . ']' . EOL . EOL; $content .= 'pconfig[' . local_channel() . '][' . escape_tags(argv(1)) . '][' . escape_tags(argv(2)) . '] = ' . get_pconfig(local_channel(),escape_tags(argv(1)),escape_tags(argv(2))) . EOL; - + if(in_array(argv(2),$this->disallowed_pconfig())) { notice( t('This setting requires special processing and editing has been blocked.') . EOL); return $content; @@ -71,8 +71,8 @@ class Pconfig extends \Zotlabs\Web\Controller { else $content .= $this->pconfig_form(escape_tags(argv(1)),escape_tags(argv(2))); } - - + + if(argc() == 2) { $content .= 'pconfig[' . local_channel() . ']' . EOL; load_pconfig(local_channel(),escape_tags(argv(1))); @@ -80,9 +80,9 @@ class Pconfig extends \Zotlabs\Web\Controller { $content .= 'pconfig[' . local_channel() . '][' . escape_tags(argv(1)) . '][' . $k . '] = ' . escape_tags($x) . EOL; } } - + if(argc() == 1) { - + $r = q("select * from pconfig where uid = " . local_channel()); if($r) { foreach($r as $rr) { @@ -91,33 +91,33 @@ class Pconfig extends \Zotlabs\Web\Controller { } } return $content; - + } - - + + function pconfig_form($cat,$k) { - + $o = '
'; $o .= ''; - + $v = get_pconfig(local_channel(),$cat,$k); - if(strpos($k,'password') !== false) - $v = z_unobscure($v); - + if(strpos($k,'password') !== false) + $v = unobscurify($v); + $o .= ''; $o .= ''; - + if(strpos($v,"\n")) $o .= ''; else $o .= ''; - - $o .= EOL . EOL; + + $o .= EOL . EOL; $o .= ''; $o .= '
'; - + return $o; - + } @@ -127,5 +127,5 @@ class Pconfig extends \Zotlabs\Web\Controller { 'permissions_role' ); } - + } diff --git a/Zotlabs/Module/Photo.php b/Zotlabs/Module/Photo.php index 814705a85..ee360dac5 100644 --- a/Zotlabs/Module/Photo.php +++ b/Zotlabs/Module/Photo.php @@ -147,7 +147,7 @@ class Photo extends \Zotlabs\Web\Controller { ); if($r) { $allowed = (-1); - + $filename = $r[0]['filename']; $u = intval($r[0]['photo_usage']); if($u) { $allowed = 1; @@ -194,9 +194,9 @@ class Photo extends \Zotlabs\Web\Controller { $mimetype = $e[0]['mimetype']; $modified = strtotime($e[0]['edited'] . 'Z'); - if(intval($e[0]['os_storage'])) { + if(intval($e[0]['os_storage'])) $streaming = $data; - } + if($e[0]['allow_cid'] != '' || $e[0]['allow_gid'] != '' || $e[0]['deny_gid'] != '' || $e[0]['deny_gid'] != '') $prvcachecontrol = 'no-store, no-cache, must-revalidate'; } @@ -282,7 +282,7 @@ class Photo extends \Zotlabs\Web\Controller { header("Content-Length: " . (isset($filesize) ? $filesize : strlen($data))); // If it's a file resource, stream it. - if($streaming && $channel) { + if($streaming) { if(strpos($streaming,'store') !== false) $istream = fopen($streaming,'rb'); else diff --git a/Zotlabs/Module/Pin.php b/Zotlabs/Module/Pin.php index 63b28754b..e02fb017b 100644 --- a/Zotlabs/Module/Pin.php +++ b/Zotlabs/Module/Pin.php @@ -6,6 +6,7 @@ namespace Zotlabs\Module; */ use App; +use Zotlabs\Lib\Libsync; class Pin extends \Zotlabs\Web\Controller { @@ -64,6 +65,6 @@ class Pin extends \Zotlabs\Web\Controller { http_status_exit(404, 'Not found'); } - build_sync_packet($r[0]['uid'], [ 'config' ]); + Libsync::build_sync_packet($r[0]['uid'], [ 'config' ]); } } diff --git a/Zotlabs/Module/Prate.php b/Zotlabs/Module/Prate.php index 2a8539ed0..8b71657b8 100644 --- a/Zotlabs/Module/Prate.php +++ b/Zotlabs/Module/Prate.php @@ -2,21 +2,23 @@ namespace Zotlabs\Module; +use Zotlabs\Lib\Crypto; + class Prate extends \Zotlabs\Web\Controller { function init() { if($_SERVER['REQUEST_METHOD'] === 'post') return; - + if(! local_channel()) return; - + $channel = \App::get_channel(); - + $target = argv(1); if(! $target) return; - + $r = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' and xlink_static = 1", dbesc($channel['channel_hash']), dbesc($target) @@ -25,34 +27,34 @@ class Prate extends \Zotlabs\Web\Controller { json_return_and_die(array('rating' => $r[0]['xlink_rating'],'rating_text' => $r[0]['xlink_rating_text'])); killme(); } - + function post() { - + if(! local_channel()) return; - + $channel = \App::get_channel(); - + $target = trim($_REQUEST['target']); if(! $target) return; - + if($target === $channel['channel_hash']) return; - + $rating = intval($_POST['rating']); if($rating < (-10)) $rating = (-10); if($rating > 10) $rating = 10; - + $rating_text = trim(escape_tags($_REQUEST['rating_text'])); - + $signed = $target . '.' . $rating . '.' . $rating_text; - - $sig = base64url_encode(rsa_sign($signed,$channel['channel_prvkey'])); - - + + $sig = base64url_encode(Crypto::sign($signed,$channel['channel_prvkey'])); + + $z = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' and xlink_static = 1 limit 1", dbesc($channel['channel_hash']), dbesc($target) @@ -87,19 +89,19 @@ class Prate extends \Zotlabs\Web\Controller { if($record) { \Zotlabs\Daemon\Master::Summon(array('Ratenotif','rating',$record)); } - + json_return_and_die(array('result' => true));; } - - - - - - - - - - - - + + + + + + + + + + + + } diff --git a/Zotlabs/Module/Probe.php b/Zotlabs/Module/Probe.php index d338b08ea..3bc4dac72 100644 --- a/Zotlabs/Module/Probe.php +++ b/Zotlabs/Module/Probe.php @@ -3,6 +3,7 @@ namespace Zotlabs\Module; use App; use Zotlabs\Lib\Apps; +use Zotlabs\Lib\Crypto; require_once('include/zot.php'); @@ -24,18 +25,18 @@ class Probe extends \Zotlabs\Web\Controller { nav_set_selected('Remote Diagnostics'); $o .= '

Remote Diagnostics

'; - + $o .= '
'; $o .= 'Lookup address: '; - $o .= '
'; - + $o .= ''; + $o .= '

'; - + if(x($_GET,'addr')) { $channel = App::get_channel(); $addr = trim($_GET['addr']); $do_import = ((intval($_GET['import']) && is_site_admin()) ? true : false); - + $j = \Zotlabs\Zot\Finger::run($addr,$channel,false); $o .= '
';
@@ -43,17 +44,17 @@ class Probe extends \Zotlabs\Web\Controller {
 				$o .= "https connection failed. Trying again with auto failover to http.\r\n\r\n";
 				$j = \Zotlabs\Zot\Finger::run($addr,$channel,true);
 				if(! $j['success']) {
-					return $o;	
+					return $o;
 				}
 			}
 			if($do_import && $j)
 				$x = import_xchan($j);
 			if($j && $j['permissions'] && $j['permissions']['iv'])
-				$j['permissions'] = json_decode(crypto_unencapsulate($j['permissions'],$channel['channel_prvkey']),true);
+				$j['permissions'] = json_decode(Crypto::unencapsulate($j['permissions'],$channel['channel_prvkey']),true);
 			$o .= str_replace("\n",'
',print_r($j,true)); $o .= '
'; } return $o; } - + } diff --git a/Zotlabs/Module/Profile.php b/Zotlabs/Module/Profile.php index 4235f0b97..118f11f64 100644 --- a/Zotlabs/Module/Profile.php +++ b/Zotlabs/Module/Profile.php @@ -1,5 +1,13 @@ 1) + + if (argc() > 1) $which = argv(1); else { - notice( t('Requested profile is not available.') . EOL ); - \App::$error = 404; + notice(t('Requested profile is not available.') . EOL); + App::$error = 404; return; } - nav_set_selected('Profile'); - $profile = ''; - $channel = \App::get_channel(); - - if((local_channel()) && (argc() > 2) && (argv(2) === 'view')) { - $which = $channel['channel_address']; - $profile = argv(1); - $r = q("select profile_guid from profile where id = %d and uid = %d limit 1", + $channel = App::get_channel(); + + if (!$channel) + http_status_exit(404, 'Not found'); + + if (ActivityStreams::is_as_request()) { + $p = Activity::encode_person($channel, true); + as_return_and_die(['type' => 'Profile', 'describes' => $p], $channel); + } + + nav_set_selected('Profile'); + + if ((local_channel()) && (argc() > 2) && (argv(2) === 'view')) { + $which = $channel['channel_address']; + $profile = argv(1); + $r = q("select profile_guid from profile where id = %d and uid = %d limit 1", intval($profile), intval(local_channel()) ); - if(! $r) + if (!$r) $profile = ''; $profile = $r[0]['profile_guid']; } - - head_add_link( [ - 'rel' => 'alternate', + + head_add_link([ + 'rel' => 'alternate', 'type' => 'application/atom+xml', 'title' => t('Posts and comments'), 'href' => z_root() . '/feed/' . $which ]); - head_add_link( [ - 'rel' => 'alternate', + head_add_link([ + 'rel' => 'alternate', 'type' => 'application/atom+xml', 'title' => t('Only posts'), 'href' => z_root() . '/feed/' . $which . '?f=&top=1' ]); - if(! $profile) { + if (!$profile) { $x = q("select channel_id as profile_uid from channel where channel_address = '%s' limit 1", dbesc(argv(1)) ); - if($x) { - \App::$profile = $x[0]; + if ($x) { + App::$profile = $x[0]; } } - - profile_load($which,$profile); - - + + profile_load($which, $profile); + + } - + function get() { - - if(observer_prohibited(true)) { + + if (observer_prohibited(true)) { return login(); } - - $groups = array(); + $groups = []; $tab = 'profile'; - $o = ''; - - if(! (perm_is_allowed(\App::$profile['profile_uid'],get_observer_hash(), 'view_profile'))) { - notice( t('Permission denied.') . EOL); + $o = ''; + + if (!(perm_is_allowed(App::$profile['profile_uid'], get_observer_hash(), 'view_profile'))) { + notice(t('Permission denied.') . EOL); return; } - - if(argc() > 2 && argv(2) === 'vcard') { + if (argc() > 2 && argv(2) === 'vcard') { header('Content-type: text/vcard'); - header('content-disposition: attachment; filename="' . t('vcard') . '-' . $profile['channel_address'] . '.vcf"' ); - echo \App::$profile['profile_vcard']; + header('content-disposition: attachment; filename="' . t('vcard') . '-' . App::$profile['channel_address'] . '.vcf"'); + echo App::$profile['profile_vcard']; killme(); } - - $is_owner = ((local_channel()) && (local_channel() == \App::$profile['profile_uid']) ? true : false); - - if(\App::$profile['hidewall'] && (! $is_owner) && (! remote_channel())) { - notice( t('Permission denied.') . EOL); + + $is_owner = ((local_channel()) && (local_channel() == App::$profile['profile_uid']) ? true : false); + + if (App::$profile['hidewall'] && (!$is_owner) && (!remote_channel())) { + notice(t('Permission denied.') . EOL); return; } - - head_add_link([ + + head_add_link([ 'rel' => 'alternate', 'type' => 'application/json+oembed', - 'href' => z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . \App::$query_string), + 'href' => z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . App::$query_string), 'title' => 'oembed' ]); $o .= advanced_profile(); - call_hooks('profile_advanced',$o); + call_hooks('profile_advanced', $o); return $o; - + } - + } diff --git a/Zotlabs/Module/Profiles.php b/Zotlabs/Module/Profiles.php index ca6ab435f..9aa342223 100644 --- a/Zotlabs/Module/Profiles.php +++ b/Zotlabs/Module/Profiles.php @@ -749,7 +749,7 @@ class Profiles extends \Zotlabs\Web\Controller { '$default' => t('This is your default profile.') . EOL . translate_scope(map_scope(\Zotlabs\Access\PermissionLimits::Get($channel['channel_id'],'view_profile'))), '$advanced' => $advanced, '$name' => array('name', t('Your full name'), $r[0]['fullname'], t('Required'), '*'), - '$pdesc' => array('pdesc', t('Short title/tescription'), $r[0]['pdesc'], t('Maximal 190 characters'), '', 'maxlength="190"'), + '$pdesc' => array('pdesc', t('Short title/description'), $r[0]['pdesc'], t('Maximal 190 characters'), '', 'maxlength="190"'), '$dob' => dob($r[0]['dob']), '$hide_friends' => $hide_friends, '$address' => array('address', t('Street address'), $r[0]['address']), diff --git a/Zotlabs/Module/Rate.php b/Zotlabs/Module/Rate.php index c03aaa54f..d29c370fc 100644 --- a/Zotlabs/Module/Rate.php +++ b/Zotlabs/Module/Rate.php @@ -3,21 +3,23 @@ namespace Zotlabs\Module; +use Zotlabs\Lib\Crypto; + class Rate extends \Zotlabs\Web\Controller { function init() { - + if(! local_channel()) return; - + $channel = \App::get_channel(); - + $target = $_REQUEST['target']; if(! $target) return; - + \App::$data['target'] = $target; - + if($target) { $r = q("SELECT * FROM xchan where xchan_hash like '%s' LIMIT 1", dbesc($target) @@ -36,43 +38,43 @@ class Rate extends \Zotlabs\Web\Controller { } } } - - + + return; - + } - - + + function post() { - + if(! local_channel()) return; - + if(! \App::$data['target']) return; - + if(! $_REQUEST['execute']) return; - + $channel = \App::get_channel(); - + $rating = intval($_POST['rating']); if($rating < (-10)) $rating = (-10); if($rating > 10) $rating = 10; - + $rating_text = trim(escape_tags($_REQUEST['rating_text'])); - + $signed = \App::$data['target'] . '.' . $rating . '.' . $rating_text; - - $sig = base64url_encode(rsa_sign($signed,$channel['channel_prvkey'])); - + + $sig = base64url_encode(Crypto::sign($signed,$channel['channel_prvkey'])); + $z = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' and xlink_static = 1 limit 1", dbesc($channel['channel_hash']), dbesc(\App::$data['target']) ); - + if($z) { $record = $z[0]['xlink_id']; $w = q("update xlink set xlink_rating = '%d', xlink_rating_text = '%s', xlink_sig = '%s', xlink_updated = '%s' @@ -100,39 +102,39 @@ class Rate extends \Zotlabs\Web\Controller { if($z) $record = $z[0]['xlink_id']; } - + if($record) { \Zotlabs\Daemon\Master::Summon(array('Ratenotif','rating',$record)); } - + } - + function get() { - + if(! local_channel()) { notice( t('Permission denied.') . EOL); return; } - + // if(! \App::$data['target']) { // notice( t('No recipients.') . EOL); // return; // } - + $rating_enabled = get_config('system','rating_enabled'); if(! $rating_enabled) { notice('Ratings are disabled on this site.'); return; } - + $channel = \App::get_channel(); - + $r = q("select * from xlink where xlink_xchan = '%s' and xlink_link = '%s' and xlink_static = 1", dbesc($channel['channel_hash']), dbesc(\App::$data['target']) ); if($r) { - \App::$data['xlink'] = $r[0]; + \App::$data['xlink'] = $r[0]; $rating_val = $r[0]['xlink_rating']; $rating_text = $r[0]['xlink_rating_text']; } @@ -140,7 +142,7 @@ class Rate extends \Zotlabs\Web\Controller { $rating_val = 0; $rating_text = ''; } - + if($rating_enabled) { $rating = replace_macros(get_markup_template('rating_slider.tpl'),array( '$min' => -10, @@ -150,7 +152,7 @@ class Rate extends \Zotlabs\Web\Controller { else { $rating = false; } - + $o = replace_macros(get_markup_template('rating_form.tpl'),array( '$header' => t('Rating'), '$website' => t('Website:'), @@ -165,8 +167,8 @@ class Rate extends \Zotlabs\Web\Controller { '$slide' => $slide, '$submit' => t('Submit') )); - + return $o; - + } } diff --git a/Zotlabs/Module/Regver.php b/Zotlabs/Module/Regver.php index 82b162f56..c45723063 100644 --- a/Zotlabs/Module/Regver.php +++ b/Zotlabs/Module/Regver.php @@ -6,8 +6,6 @@ class Regver extends \Zotlabs\Web\Controller { function get() { - global $lang; - $_SESSION['return_url'] = \App::$cmd; if(argc() != 3) diff --git a/Zotlabs/Module/Search.php b/Zotlabs/Module/Search.php index c22bf2836..eeeff9613 100644 --- a/Zotlabs/Module/Search.php +++ b/Zotlabs/Module/Search.php @@ -1,85 +1,116 @@ ' . "\r\n"; $o .= '
' . "\r\n"; - + $o .= '

' . t('Search') . '

'; - - if(x(\App::$data,'search')) - $search = trim(\App::$data['search']); + + if (x(App::$data, 'search')) + $search = trim(App::$data['search']); else - $search = ((x($_GET,'search')) ? trim(escape_tags(rawurldecode($_GET['search']))) : ''); - + $search = ((x($_GET, 'search')) ? trim(escape_tags(rawurldecode($_GET['search']))) : ''); + $tag = false; - if(x($_GET,'tag')) { - $tag = true; - $search = ((x($_GET,'tag')) ? trim(escape_tags(rawurldecode($_GET['tag']))) : ''); + if (x($_GET, 'tag')) { + $tag = true; + $search = ((x($_GET, 'tag')) ? trim(escape_tags(rawurldecode($_GET['tag']))) : ''); } - $o .= search($search,'search-box','/search',((local_channel()) ? true : false)); - - if(strpos($search,'#') === 0) { - $tag = true; - $search = substr($search,1); + $o .= search($search, 'search-box', '/search', ((local_channel()) ? true : false)); + + if (local_channel() && strpos($search, 'https://') === 0 && !$update && !$load) { + $j = Activity::fetch($search, App::get_channel()); + if ($j) { + $AS = new ActivityStreams($j); + if ($AS->is_valid()) { + // check if is_an_actor, otherwise import activity + if (is_array($AS->obj) && !ActivityStreams::is_an_actor($AS->obj)) { + $item = Activity::decode_note($AS); + if ($item) { + logger('parsed_item: ' . print_r($item, true), LOGGER_DATA); + Activity::store(App::get_channel(), $observer_hash, $AS, $item, true, true); + goaway(z_root() . '/display/' . gen_link_id($item['mid'])); + } + } + } + } + else { + // try other fetch providers (e.g. diaspora) + $hookdata = [ + 'channel' => App::get_channel(), + 'data' => $search + ]; + call_hooks('fetch_provider', $hookdata); + } } - if(strpos($search,'@') === 0) { - $search = substr($search,1); + + if (strpos($search, '#') === 0) { + $tag = true; + $search = substr($search, 1); + } + if (strpos($search, '@') === 0) { + $search = substr($search, 1); goaway(z_root() . '/directory' . '?f=1&navsearch=1&search=' . $search); } - if(strpos($search,'!') === 0) { - $search = substr($search,1); + if (strpos($search, '!') === 0) { + $search = substr($search, 1); goaway(z_root() . '/directory' . '?f=1&navsearch=1&search=' . $search); } - if(strpos($search,'?') === 0) { - $search = substr($search,1); + if (strpos($search, '?') === 0) { + $search = substr($search, 1); goaway(z_root() . '/help' . '?f=1&navsearch=1&search=' . $search); } - + // look for a naked webbie - if(strpos($search,'@') !== false) { + if (strpos($search, '@') !== false) { goaway(z_root() . '/directory' . '?f=1&navsearch=1&search=' . $search); } - - if(! $search) + + if (!$search) return $o; - - if($tag) { - $wildtag = str_replace('*','%',$search); + + if ($tag) { + $wildtag = str_replace('*', '%', $search); $sql_extra = sprintf(" AND item.id IN (select oid from term where otype = %d and ttype in ( %d , %d) and term like '%s') ", intval(TERM_OBJ_POST), intval(TERM_HASHTAG), @@ -88,80 +119,80 @@ class Search extends \Zotlabs\Web\Controller { ); } else { - $regstr = db_getfunc('REGEXP'); + $regstr = db_getfunc('REGEXP'); $sql_extra = sprintf(" AND (item.title $regstr '%s' OR item.body $regstr '%s') ", dbesc(protect_sprintf(preg_quote($search))), dbesc(protect_sprintf(preg_quote($search)))); } - + // Here is the way permissions work in the search module... // Only public posts can be shown // OR your own posts if you are a logged in member - // No items will be shown if the member has a blocked profile wall. - + // No items will be shown if the member has a blocked profile wall. + + + if ((!$update) && (!$load)) { - if((! $update) && (! $load)) { - // This is ugly, but we can't pass the profile_uid through the session to the ajax updater, // because browser prefetching might change it on us. We have to deliver it with the page. - + $o .= '' . "\r\n"; $o .= "\r\n"; - - \App::$page['htmlhead'] .= replace_macros(get_markup_template("build_query.tpl"),array( + . "; var netargs = '?f='; var profile_page = " . App::$pager['page'] . "; \r\n"; + + App::$page['htmlhead'] .= replace_macros(get_markup_template("build_query.tpl"), [ '$baseurl' => z_root(), - '$pgtype' => 'search', - '$uid' => ((\App::$profile['profile_uid']) ? \App::$profile['profile_uid'] : '0'), - '$gid' => '0', - '$cid' => '0', - '$cmin' => '(-1)', - '$cmax' => '(-1)', - '$star' => '0', - '$liked' => '0', - '$conv' => '0', - '$spam' => '0', - '$fh' => '0', - '$dm' => '0', + '$pgtype' => 'search', + '$uid' => ((App::$profile['profile_uid']) ? App::$profile['profile_uid'] : '0'), + '$gid' => '0', + '$cid' => '0', + '$cmin' => '(-1)', + '$cmax' => '(-1)', + '$star' => '0', + '$liked' => '0', + '$conv' => '0', + '$spam' => '0', + '$fh' => '0', + '$dm' => '0', '$nouveau' => '0', - '$wall' => '0', - '$list' => ((x($_REQUEST,'list')) ? intval($_REQUEST['list']) : 0), - '$page' => ((\App::$pager['page'] != 1) ? \App::$pager['page'] : 1), - '$search' => (($tag) ? urlencode('#') : '') . $search, - '$xchan' => '', - '$order' => '', - '$file' => '', - '$cats' => '', - '$tags' => '', - '$mid' => '', - '$verb' => '', - '$net' => '', - '$dend' => '', - '$dbegin' => '' - )); - - + '$wall' => '0', + '$list' => ((x($_REQUEST, 'list')) ? intval($_REQUEST['list']) : 0), + '$page' => ((App::$pager['page'] != 1) ? App::$pager['page'] : 1), + '$search' => (($tag) ? urlencode('#') : '') . $search, + '$xchan' => '', + '$order' => '', + '$file' => '', + '$cats' => '', + '$tags' => '', + '$mid' => '', + '$verb' => '', + '$net' => '', + '$dend' => '', + '$dbegin' => '' + ]); + + } - + $item_normal = item_normal_search(); - $pub_sql = public_permissions_sql($observer_hash); - + $pub_sql = public_permissions_sql($observer_hash); + require_once('include/channel.php'); - + $sys = get_sys_channel(); - - if(($update) && ($load)) { - $itemspage = get_pconfig(local_channel(),'system','itemspage'); - \App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 10)); - $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(\App::$pager['itemspage']), intval(\App::$pager['start'])); - + + if (($update) && ($load)) { + $itemspage = get_pconfig(local_channel(), 'system', 'itemspage'); + App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 10)); + $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(App::$pager['itemspage']), intval(App::$pager['start'])); + // in case somebody turned off public access to sys channel content with permissions - - if(! perm_is_allowed($sys['channel_id'],$observer_hash,'view_stream')) + + if (!perm_is_allowed($sys['channel_id'], $observer_hash, 'view_stream')) $sys['xchan_hash'] .= 'disabled'; - - if($load) { + + if ($load) { $r = null; - - if(local_channel()) { + + if (local_channel()) { $r = q("SELECT mid, MAX(id) as item_id from item WHERE ((( item.allow_cid = '' AND item.allow_gid = '' AND item.deny_cid = '' AND item.deny_gid = '' AND item_private = 0 ) OR ( item.uid = %d )) OR item.owner_xchan = '%s' ) @@ -172,11 +203,11 @@ class Search extends \Zotlabs\Web\Controller { dbesc($sys['xchan_hash']) ); } - if($r === null) { + if ($r === null) { $r = q("SELECT mid, MAX(id) as item_id from item WHERE (((( item.allow_cid = '' AND item.allow_gid = '' AND item.deny_cid = '' AND item.deny_gid = '' AND item_private = 0 ) - and owner_xchan in ( " . stream_perms_xchans(($observer) ? (PERMS_NETWORK|PERMS_PUBLIC) : PERMS_PUBLIC) . " )) + and owner_xchan in ( " . stream_perms_xchans(($observer) ? (PERMS_NETWORK | PERMS_PUBLIC) : PERMS_PUBLIC) . " )) $pub_sql ) OR owner_xchan = '%s') $item_normal $sql_extra @@ -184,51 +215,49 @@ class Search extends \Zotlabs\Web\Controller { dbesc($sys['xchan_hash']) ); } - if($r) { - $str = ids_to_querystr($r,'item_id'); - $r = q("select *, id as item_id from item where id in ( " . $str . ") order by created desc "); + if ($r) { + $str = ids_to_querystr($r, 'item_id'); + $r = q("select *, id as item_id from item where id in ( " . $str . ") order by created desc "); } } else { - $r = array(); + $r = []; } - - } - - if($r) { + + if ($r) { xchan_query($r); - $items = fetch_post_tags($r,true); - } else { - $items = array(); + $items = fetch_post_tags($r, true); } - - - if($format == 'json') { - $result = array(); + else { + $items = []; + } + + if ($format == 'json') { + $result = []; require_once('include/conversation.php'); - foreach($items as $item) { + foreach ($items as $item) { $item['html'] = zidify_links(bbcode($item['body'])); - $x = encode_item($item); - $x['html'] = prepare_text($item['body'],$item['mimetype']); - $result[] = $x; + $x = encode_item($item); + $x['html'] = prepare_text($item['body'], $item['mimetype']); + $result[] = $x; } - json_return_and_die(array('success' => true,'messages' => $result)); + json_return_and_die(['success' => true, 'messages' => $result]); } - - if($tag) - $o .= '

' . sprintf( t('Items tagged with: %s'),$search) . '

'; + + if ($tag) + $o .= '

' . sprintf(t('Items tagged with: %s'), $search) . '

'; else - $o .= '

' . sprintf( t('Search results for: %s'),$search) . '

'; - - $o .= conversation($items,'search',$update,'client'); - + $o .= '

' . sprintf(t('Search results for: %s'), $search) . '

'; + + $o .= conversation($items, 'search', $update, 'client'); + $o .= '
'; - + return $o; } - - + + } diff --git a/Zotlabs/Module/Uexport.php b/Zotlabs/Module/Uexport.php index 3d1587b87..55c316317 100644 --- a/Zotlabs/Module/Uexport.php +++ b/Zotlabs/Module/Uexport.php @@ -17,6 +17,7 @@ class Uexport extends Controller { if(argc() > 1) { $sections = (($_REQUEST['sections']) ? explode(',',$_REQUEST['sections']) : ''); + $zap_compat = (($_REQUEST['zap_compat']) ? intval($_REQUEST['zap_compat']) : false); $channel = App::get_channel(); @@ -32,12 +33,12 @@ class Uexport extends Controller { header('content-disposition: attachment; filename="' . $channel['channel_address'] . (($year) ? '-' . $year : '') . (($month) ? '-' . $month : '') . (($_REQUEST['sections']) ? '-' . $_REQUEST['sections'] : '') . '.json"' ); if($year) { - echo json_encode(identity_export_year(local_channel(),$year,$month)); + echo json_encode(identity_export_year(local_channel(),$year,$month, $zap_compat)); killme(); } if(argc() > 1 && argv(1) === 'basic') { - echo json_encode(identity_basic_export(local_channel(),$sections)); + echo json_encode(identity_basic_export(local_channel(),$sections, $zap_compat)); killme(); } @@ -46,7 +47,7 @@ class Uexport extends Controller { if(argc() > 1 && argv(1) === 'complete') { $sections = get_default_export_sections(); $sections[] = 'items'; - echo json_encode(identity_basic_export(local_channel(),$sections)); + echo json_encode(identity_basic_export(local_channel(),$sections, $zap_compat)); killme(); } } diff --git a/Zotlabs/Module/Wfinger.php b/Zotlabs/Module/Wfinger.php index d24a31a15..6f2864615 100644 --- a/Zotlabs/Module/Wfinger.php +++ b/Zotlabs/Module/Wfinger.php @@ -3,34 +3,35 @@ namespace Zotlabs\Module; require_once('include/zot.php'); +use Zotlabs\Lib\Keyutils; use Zotlabs\Lib\Libzot; class Wfinger extends \Zotlabs\Web\Controller { function init() { - + session_write_close(); $result = array(); - + $scheme = ''; - + if(x($_SERVER,'HTTPS') && $_SERVER['HTTPS']) $scheme = 'https'; elseif(x($_SERVER,'SERVER_PORT') && (intval($_SERVER['SERVER_PORT']) == 443)) $scheme = 'https'; - + $zot = intval($_REQUEST['zot']); - + if(($scheme !== 'https') && (! $zot)) { header($_SERVER["SERVER_PROTOCOL"] . ' ' . 500 . ' ' . 'Webfinger requires HTTPS'); killme(); } - - + + $resource = $_REQUEST['resource']; logger('webfinger: ' . $resource,LOGGER_DEBUG); - + $root_resource = false; $pchan = false; @@ -39,9 +40,9 @@ class Wfinger extends \Zotlabs\Web\Controller { $root_resource = true; $r = null; - + if(($resource) && (! $root_resource)) { - + if(strpos($resource,'acct:') === 0) { $channel = str_replace('acct:','',$resource); if(substr($channel,0,1) === '@' && strpos(substr($channel,1),'@')) { @@ -56,12 +57,12 @@ class Wfinger extends \Zotlabs\Web\Controller { goaway('https://' . $host . '/.well-known/webfinger?f=&resource=' . $resource . (($zot) ? '&zot=' . $zot : '')); } $channel = substr($channel,0,strpos($channel,'@')); - } + } } if(strpos($resource,'http') === 0) { $channel = str_replace('~','',basename($resource)); } - + if(substr($channel,0,1) === '[' ) { $channel = substr($channel,1); $channel = substr($channel,0,-1); @@ -74,16 +75,16 @@ class Wfinger extends \Zotlabs\Web\Controller { $r[0] = pchan_to_chan($r[0]); } } - else { + else { $r = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_address = '%s' limit 1", dbesc($channel) ); } } - + header('Access-Control-Allow-Origin: *'); - + if($root_resource) { $result['subject'] = $resource; @@ -100,52 +101,52 @@ class Wfinger extends \Zotlabs\Web\Controller { - + } if($resource && $r) { - + $h = q("select hubloc_addr from hubloc where hubloc_hash = '%s' and hubloc_deleted = 0", dbesc($r[0]['channel_hash']) ); - + $result['subject'] = $resource; - + $aliases = array( z_root() . (($pchan) ? '/pchan/' : '/channel/') . $r[0]['channel_address'], z_root() . '/~' . $r[0]['channel_address'], z_root() . '/@' . $r[0]['channel_address'] ); - + if($h) { foreach($h as $hh) { $aliases[] = 'acct:' . $hh['hubloc_addr']; } } - + $result['aliases'] = []; - + $result['properties'] = [ 'http://webfinger.net/ns/name' => $r[0]['channel_name'], 'http://xmlns.com/foaf/0.1/name' => $r[0]['channel_name'], 'https://w3id.org/security/v1#publicKeyPem' => $r[0]['xchan_pubkey'], 'http://purl.org/zot/federation' => 'zot6,zot' ]; - - foreach($aliases as $alias) + + foreach($aliases as $alias) if($alias != $resource) $result['aliases'][] = $alias; - + if($pchan) { $result['links'] = [ - + [ 'rel' => 'http://webfinger.net/rel/avatar', 'type' => $r[0]['xchan_photo_mimetype'], 'href' => $r[0]['xchan_photo_l'] ], - + [ 'rel' => 'http://webfinger.net/rel/profile-page', 'href' => $r[0]['xchan_url'], @@ -153,7 +154,7 @@ class Wfinger extends \Zotlabs\Web\Controller { [ 'rel' => 'magic-public-key', - 'href' => 'data:application/magic-public-key,' . salmon_key($r[0]['channel_pubkey']), + 'href' => 'data:application/magic-public-key,' . Keyutils::salmonKey($r[0]['channel_pubkey']), ] ]; @@ -167,13 +168,13 @@ class Wfinger extends \Zotlabs\Web\Controller { [ 'rel' => 'http://webfinger.net/rel/avatar', 'type' => $r[0]['xchan_photo_mimetype'], - 'href' => $r[0]['xchan_photo_l'] + 'href' => $r[0]['xchan_photo_l'] ], [ 'rel' => 'http://microformats.org/profile/hcard', 'type' => 'text/html', - 'href' => z_root() . '/hcard/' . $r[0]['channel_address'] + 'href' => z_root() . '/hcard/' . $r[0]['channel_address'] ], [ @@ -187,8 +188,8 @@ class Wfinger extends \Zotlabs\Web\Controller { ], [ - 'rel' => 'http://schemas.google.com/g/2010#updates-from', - 'type' => 'application/atom+xml', + 'rel' => 'http://schemas.google.com/g/2010#updates-from', + 'type' => 'application/atom+xml', 'href' => z_root() . '/ofeed/' . $r[0]['channel_address'] ], @@ -221,7 +222,7 @@ class Wfinger extends \Zotlabs\Web\Controller { [ 'rel' => 'magic-public-key', - 'href' => 'data:application/magic-public-key,' . salmon_key($r[0]['channel_pubkey']), + 'href' => 'data:application/magic-public-key,' . Keyutils::salmonKey($r[0]['channel_pubkey']), ] ]; } @@ -236,12 +237,12 @@ class Wfinger extends \Zotlabs\Web\Controller { header($_SERVER["SERVER_PROTOCOL"] . ' ' . 400 . ' ' . 'Bad Request'); killme(); } - + $arr = [ 'channel' => $r[0], 'pchan' => $pchan, 'request' => $_REQUEST, 'result' => $result ]; call_hooks('webfinger',$arr); json_return_and_die($arr['result'],'application/jrd+json'); - + } - + } diff --git a/Zotlabs/Module/Xrd.php b/Zotlabs/Module/Xrd.php index 959e31cbe..21574eb8d 100644 --- a/Zotlabs/Module/Xrd.php +++ b/Zotlabs/Module/Xrd.php @@ -1,19 +1,21 @@ $r[0]['channel_address'], '$accturi' => $resource, @@ -60,14 +62,14 @@ class Xrd extends \Zotlabs\Web\Controller { '$modexp' => 'data:application/magic-public-key,' . $salmon_key, '$subscribe' => z_root() . '/follow?f=&url={uri}', )); - - + + $arr = array('user' => $r[0], 'xml' => $o); call_hooks('personal_xrd', $arr); - + echo $arr['xml']; killme(); - + } - + } diff --git a/Zotlabs/Module/Zotfeed.php b/Zotlabs/Module/Zotfeed.php index 8c13682b4..2566924aa 100644 --- a/Zotlabs/Module/Zotfeed.php +++ b/Zotlabs/Module/Zotfeed.php @@ -1,29 +1,142 @@ true, + 'wall' => 1, + 'datequery' => $params['end'], + 'datequery2' => $params['begin'], + 'direction' => dbesc($params['direction']), + 'pages' => $params['pages'], + 'order' => dbesc('post'), + 'top' => $params['top'], + 'cat' => $params['cat'], + 'compat' => $params['compat'] + ], $channel, $observer_hash, CLIENT_MODE_NORMAL, App::$module + ); + + if ($total) { + App::set_pager_total($total); + App::set_pager_itemspage(30); + } + + if (App::$pager['unset'] && $total > 30) { + $ret = Activity::paged_collection_init($total, App::$query_string); + } + else { + + $items = items_fetch( + [ + 'wall' => 1, + 'datequery' => $params['end'], + 'datequery2' => $params['begin'], + 'records' => intval(App::$pager['itemspage']), + 'start' => intval(App::$pager['start']), + 'direction' => dbesc($params['direction']), + 'pages' => $params['pages'], + 'order' => dbesc('post'), + 'top' => $params['top'], + 'cat' => $params['cat'], + 'compat' => $params['compat'] + ], $channel, $observer_hash, CLIENT_MODE_NORMAL, App::$module + ); + + if ($items && $observer_hash) { + + // check to see if this observer is a connection. If not, register any items + // belonging to this channel for notification of deletion/expiration + + $x = q("select abook_id from abook where abook_channel = %d and abook_xchan = '%s'", + intval($channel['channel_id']), + dbesc($observer_hash) + ); + if (!$x) { + foreach ($items as $item) { + if (strpos($item['mid'], z_root()) === 0) { + ThreadListener::store($item['mid'], $observer_hash); + } + } + } + } + + $ret = Activity::encode_item_collection($items, App::$query_string, 'OrderedCollection', $total); + } + + as_return_and_die($ret, $channel); + } + + /* $result = array('success' => false); - + $mindate = (($_REQUEST['mindate']) ? datetime_convert('UTC','UTC',$_REQUEST['mindate']) : ''); if(! $mindate) $mindate = datetime_convert('UTC','UTC', 'now - 14 days'); - + if(observer_prohibited()) { $result['message'] = 'Public access denied'; json_return_and_die($result); } - - $observer = \App::get_observer(); - + + $observer = App::get_observer(); + logger('observer: ' . get_observer_hash(), LOGGER_DEBUG); - + $channel_address = ((argc() > 1) ? argv(1) : ''); if($channel_address) { $r = q("select channel_id, channel_name from channel where channel_address = '%s' and channel_removed = 0 limit 1", @@ -40,12 +153,12 @@ class Zotfeed extends \Zotlabs\Web\Controller { $result['message'] = 'Channel not found.'; json_return_and_die($result); } - + logger('zotfeed request: ' . $r[0]['channel_name'], LOGGER_DEBUG); - $result['project'] = 'Hubzilla'; + $result['project'] = 'Hubzilla'; $result['messages'] = zot_feed($r[0]['channel_id'],$observer['xchan_hash'],array('mindate' => $mindate)); $result['success'] = true; json_return_and_die($result); + */ } - } diff --git a/Zotlabs/Photo/PhotoDriver.php b/Zotlabs/Photo/PhotoDriver.php index 94d2c3436..4c4f26e32 100644 --- a/Zotlabs/Photo/PhotoDriver.php +++ b/Zotlabs/Photo/PhotoDriver.php @@ -2,6 +2,8 @@ namespace Zotlabs\Photo; +use Zotlabs\Lib\Hashpath; + /** * @brief Abstract photo driver class. * @@ -505,18 +507,25 @@ abstract class PhotoDriver { * @return boolean */ public function storeThumbnail($arr, $scale = 0) { - - // We only process thumbnails here - if($scale == 0) - return false; - - $arr['imgscale'] = $scale; - if(boolval(get_config('system','filesystem_storage_thumbnails', 0))) { - $channel = channelx_by_n($arr['uid']); + // We only process thumbnails here + if($scale == 0) + return false; + + $arr['imgscale'] = $scale; + + if(boolval(get_config('system','photo_storage_type', 1))) { + $arr['os_storage'] = 1; - $arr['os_syspath'] = 'store/' . $channel['channel_address'] . '/' . $arr['os_path'] . '-' . $scale; - if(! $this->saveImage($arr['os_syspath'])) + + if (array_key_exists('uid', $arr) && ! in_array($scale, [ PHOTO_RES_PROFILE_300, PHOTO_RES_PROFILE_80, PHOTO_RES_PROFILE_48 ])) { + $channel = channelx_by_n($arr['uid']); + $arr['os_syspath'] = 'store/' . $channel['channel_address'] . '/' . $arr['os_path'] . '-' . $scale; + } + else + $arr['os_syspath'] = Hashpath::path($arr['resource_id'], 'store/[data]/[xchan]', 2, 1) . '-' . $scale; + + if (! $this->saveImage($arr['os_syspath'])) return false; } else diff --git a/Zotlabs/Render/SimpleTemplate.php b/Zotlabs/Render/SimpleTemplate.php old mode 100755 new mode 100644 diff --git a/Zotlabs/Render/SmartyInterface.php b/Zotlabs/Render/SmartyInterface.php old mode 100755 new mode 100644 index a40effecf..d80ea3f3a --- a/Zotlabs/Render/SmartyInterface.php +++ b/Zotlabs/Render/SmartyInterface.php @@ -35,7 +35,7 @@ class SmartyInterface extends Smarty { $this->right_delimiter = App::get_template_rdelim('smarty3'); // Don't report errors so verbosely - $this->error_reporting = E_ALL & (~E_NOTICE); + $this->error_reporting = E_ALL & ~E_WARNING & ~E_NOTICE; } function parsed($template = '') { diff --git a/Zotlabs/Render/SmartyTemplate.php b/Zotlabs/Render/SmartyTemplate.php old mode 100755 new mode 100644 diff --git a/Zotlabs/Render/TemplateEngine.php b/Zotlabs/Render/TemplateEngine.php old mode 100755 new mode 100644 diff --git a/Zotlabs/Update/_1241.php b/Zotlabs/Update/_1241.php index 5f806b7d1..1b2024aad 100644 --- a/Zotlabs/Update/_1241.php +++ b/Zotlabs/Update/_1241.php @@ -2,14 +2,23 @@ namespace Zotlabs\Update; -require_once('include/account.php'); - class _1241 { function run() { - - return verify_register_scheme(); - - } + q("START TRANSACTION"); + + // remove duplicated profile photos + $r = dbq("DELETE FROM photo WHERE imgscale IN (4, 5, 6) AND photo_usage = 0"); + + if($r) { + q("COMMIT"); + return UPDATE_SUCCESS; + } + + q("ROLLBACK"); + return UPDATE_FAILED; + + } + } diff --git a/Zotlabs/Update/_1242.php b/Zotlabs/Update/_1242.php new file mode 100644 index 000000000..c2c9a66d0 --- /dev/null +++ b/Zotlabs/Update/_1242.php @@ -0,0 +1,21 @@ + true, 'iv' => $iv, 'key' => $key, 'alg' => $alg, 'data' => $data ] , $prvkey); + return Crypto::unencapsulate([ 'encrypted' => true, 'iv' => $iv, 'key' => $key, 'alg' => $alg, 'data' => $data ] , $prvkey); } return ''; diff --git a/Zotlabs/Web/Router.php b/Zotlabs/Web/Router.php index 96bf131b8..a6a841ccb 100644 --- a/Zotlabs/Web/Router.php +++ b/Zotlabs/Web/Router.php @@ -2,6 +2,7 @@ namespace Zotlabs\Web; +use App; use Zotlabs\Extend\Route; use Exception; @@ -43,7 +44,7 @@ class Router { */ function __construct() { - $module = \App::$module; + $module = App::$module; $modname = "Zotlabs\\Module\\" . ucfirst($module); if(strlen($module)) { @@ -60,7 +61,7 @@ class Router { include_once($route[0]); if(class_exists($modname)) { $this->controller = new $modname; - \App::$module_loaded = true; + App::$module_loaded = true; } } } @@ -68,15 +69,15 @@ class Router { // legacy plugins - this can be removed when they have all been converted - if(! (\App::$module_loaded)) { - if(is_array(\App::$plugins) && in_array($module,\App::$plugins) && file_exists("addon/{$module}/{$module}.php")) { + if(! (App::$module_loaded)) { + if(is_array(App::$plugins) && in_array($module, App::$plugins) && file_exists("addon/{$module}/{$module}.php")) { include_once("addon/{$module}/{$module}.php"); if(class_exists($modname)) { $this->controller = new $modname; - \App::$module_loaded = true; + App::$module_loaded = true; } elseif(function_exists($module . '_module')) { - \App::$module_loaded = true; + App::$module_loaded = true; } } } @@ -86,40 +87,40 @@ class Router { * Otherwise, look for the standard program module */ - if(! (\App::$module_loaded)) { + if(! (App::$module_loaded)) { try { $filename = 'Zotlabs/SiteModule/'. ucfirst($module). '.php'; if(file_exists($filename)) { // This won't be picked up by the autoloader, so load it explicitly require_once($filename); $this->controller = new $modname; - \App::$module_loaded = true; + App::$module_loaded = true; } else { $filename = 'Zotlabs/Module/'. ucfirst($module). '.php'; if(file_exists($filename)) { $this->controller = new $modname; - \App::$module_loaded = true; + App::$module_loaded = true; } } - if(! \App::$module_loaded) - throw new \Exception('Module not found'); + if(! App::$module_loaded) + throw new Exception('Module not found'); } - catch(\Exception $e) { + catch(Exception $e) { if(file_exists("mod/site/{$module}.php")) { include_once("mod/site/{$module}.php"); - \App::$module_loaded = true; + App::$module_loaded = true; } elseif(file_exists("mod/{$module}.php")) { include_once("mod/{$module}.php"); - \App::$module_loaded = true; + App::$module_loaded = true; } } } $x = [ 'module' => $module, - 'installed' => \App::$module_loaded, + 'installed' => App::$module_loaded, 'controller' => $this->controller ]; /** @@ -136,7 +137,7 @@ class Router { */ call_hooks('module_loaded', $x); if($x['installed']) { - \App::$module_loaded = true; + App::$module_loaded = true; $this->controller = $x['controller']; } @@ -144,7 +145,7 @@ class Router { * The URL provided does not resolve to a valid module. */ - if(! (\App::$module_loaded)) { + if(! (App::$module_loaded)) { // undo the setting of a letsencrypt acme-challenge rewrite rule // which blocks access to our .well-known routes. @@ -160,7 +161,7 @@ class Router { $x = [ 'module' => $module, - 'installed' => \App::$module_loaded, + 'installed' => App::$module_loaded, 'controller' => $this->controller ]; call_hooks('page_not_found',$x); @@ -181,14 +182,14 @@ class Router { header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found'); $tpl = get_markup_template('404.tpl'); - \App::$page['content'] = replace_macros($tpl, array( + App::$page['content'] = replace_macros($tpl, array( '$message' => t('Page not found.') )); // pretend this is a module so it will initialise the theme - \App::$module = '404'; - \App::$module_loaded = true; - \App::$error = true; + App::$module = '404'; + App::$module_loaded = true; + App::$error = true; } } } @@ -203,9 +204,9 @@ class Router { * Call module functions */ - if(\App::$module_loaded) { + if(App::$module_loaded) { - \App::$page['page_title'] = \App::$module; + App::$page['page_title'] = App::$module; $placeholder = ''; /* @@ -216,13 +217,13 @@ class Router { */ $arr = array('init' => true, 'replace' => false); - call_hooks(\App::$module . '_mod_init', $arr); + call_hooks(App::$module . '_mod_init', $arr); if(! $arr['replace']) { if($this->controller && method_exists($this->controller,'init')) { $this->controller->init(); } - elseif(function_exists(\App::$module . '_init')) { - $func = \App::$module . '_init'; + elseif(function_exists(App::$module . '_init')) { + $func = App::$module . '_init'; $func($a); } } @@ -258,41 +259,41 @@ class Router { $func = str_replace('-', '_', $current_theme[0]) . '_init'; $func($a); } - elseif (x(\App::$theme_info, 'extends') && file_exists('view/theme/' . \App::$theme_info['extends'] . '/php/theme.php')) { - require_once('view/theme/' . \App::$theme_info['extends'] . '/php/theme.php'); - if(function_exists(str_replace('-', '_', \App::$theme_info['extends']) . '_init')) { - $func = str_replace('-', '_', \App::$theme_info['extends']) . '_init'; + elseif (x(App::$theme_info, 'extends') && file_exists('view/theme/' . App::$theme_info['extends'] . '/php/theme.php')) { + require_once('view/theme/' . App::$theme_info['extends'] . '/php/theme.php'); + if(function_exists(str_replace('-', '_', App::$theme_info['extends']) . '_init')) { + $func = str_replace('-', '_', App::$theme_info['extends']) . '_init'; $func($a); } } - if(($_SERVER['REQUEST_METHOD'] === 'POST') && (! \App::$error) && (! x($_POST, 'auth-params'))) { - call_hooks(\App::$module . '_mod_post', $_POST); + if(($_SERVER['REQUEST_METHOD'] === 'POST') && (! App::$error) && (! x($_POST, 'auth-params'))) { + call_hooks(App::$module . '_mod_post', $_POST); if($this->controller && method_exists($this->controller,'post')) { $this->controller->post(); } - elseif(function_exists(\App::$module . '_post')) { - $func = \App::$module . '_post'; + elseif(function_exists(App::$module . '_post')) { + $func = App::$module . '_post'; $func($a); } } - if(! \App::$error) { - $arr = array('content' => \App::$page['content'], 'replace' => false); - call_hooks(\App::$module . '_mod_content', $arr); + if(! App::$error) { + $arr = array('content' => App::$page['content'], 'replace' => false); + call_hooks(App::$module . '_mod_content', $arr); if(! $arr['replace']) { if($this->controller && method_exists($this->controller,'get')) { $arr = array('content' => $this->controller->get()); } - elseif(function_exists(\App::$module . '_content')) { - $func = \App::$module . '_content'; + elseif(function_exists(App::$module . '_content')) { + $func = App::$module . '_content'; $arr = array('content' => $func($a)); } } - call_hooks(\App::$module . '_mod_aftercontent', $arr); - \App::$page['content'] = (($arr['replace']) ? $arr['content'] : \App::$page['content'] . $arr['content']); + call_hooks(App::$module . '_mod_aftercontent', $arr); + App::$page['content'] = ((isset($arr['replace'])) ? $arr['content'] : App::$page['content'] . $arr['content']); } } } diff --git a/Zotlabs/Web/WebServer.php b/Zotlabs/Web/WebServer.php index ac792dd69..de0d5a883 100644 --- a/Zotlabs/Web/WebServer.php +++ b/Zotlabs/Web/WebServer.php @@ -112,7 +112,7 @@ class WebServer { // now that we've been through the module content, see if the page reported // a permission problem and if so, a 403 response would seem to be in order. - if(is_array($_SESSION['sysmsg']) && stristr(implode("", $_SESSION['sysmsg']), t('Permission denied'))) { + if(isset($_SESSION['sysmsg']) && is_array($_SESSION['sysmsg']) && stristr(implode("", $_SESSION['sysmsg']), t('Permission denied'))) { header($_SERVER['SERVER_PROTOCOL'] . ' 403 ' . t('Permission denied.')); } @@ -137,9 +137,9 @@ class WebServer { private function create_channel_links() { - /* Initialise the Link: response header if this is a channel page. + /* Initialise the Link: response header if this is a channel page. * This cannot be done inside the channel module because some protocol - * addons over-ride the module functions and these links are common + * addons over-ride the module functions and these links are common * to all protocol drivers; thus doing it here avoids duplication. */ @@ -156,7 +156,7 @@ class WebServer { 'url' => z_root() . '/.well-known/webfinger?f=&resource=acct%3A' . argv(1) . '%40' . \App::get_hostname() ], ]; - $x = [ 'channel_address' => argv(1), 'channel_links' => \App::$channel_links ]; + $x = [ 'channel_address' => argv(1), 'channel_links' => \App::$channel_links ]; call_hooks('channel_links', $x ); \App::$channel_links = $x['channel_links']; header('Link: ' . \App::get_channel_links()); diff --git a/Zotlabs/Zot/Auth.php b/Zotlabs/Zot/Auth.php index 8d198f506..6ce2174f7 100644 --- a/Zotlabs/Zot/Auth.php +++ b/Zotlabs/Zot/Auth.php @@ -2,6 +2,8 @@ namespace Zotlabs\Zot; +use Zotlabs\Lib\Crypto; + class Auth { protected $test; @@ -68,7 +70,7 @@ class Auth { if(strstr($this->desturl,z_root() . '/rmagic')) goaway(z_root()); - $this->Finalise(); + $this->Finalise(); } @@ -76,7 +78,7 @@ class Auth { // Try and find a hubloc for the person attempting to auth. // Since we're matching by address, we have to return all entries - // some of which may be from re-installed hubs; and we'll need to + // some of which may be from re-installed hubs; and we'll need to // try each sequentially to see if one can pass the test $x = q("select * from hubloc left join xchan on xchan_hash = hubloc_hash @@ -130,9 +132,9 @@ class Auth { // Also check that they are coming from the same site as they authenticated with originally. - $already_authed = (((remote_channel()) && ($hubloc['hubloc_hash'] == remote_channel()) + $already_authed = (((remote_channel()) && ($hubloc['hubloc_hash'] == remote_channel()) && ($hubloc['hubloc_url'] === $_SESSION['remote_hub'])) ? true : false); - + if($this->delegate && $this->delegate !== $_SESSION['delegate_channel']) $already_authed = false; @@ -158,17 +160,17 @@ class Auth { return false; } - // Auth packets MUST use ultra top-secret hush-hush mode - e.g. the entire packet is encrypted using the + // Auth packets MUST use ultra top-secret hush-hush mode - e.g. the entire packet is encrypted using the // site private key - // The actual channel sending the packet ($c[0]) is not important, but this provides a + // The actual channel sending the packet ($c[0]) is not important, but this provides a // generic zot packet with a sender which can be verified $x = q("select site_crypto from site where site_url = '%s' limit 1", dbesc($hubloc['hubloc_url']) ); - $p = zot_build_packet($channel,$type = 'auth_check', - array(array('guid' => $hubloc['hubloc_guid'],'guid_sig' => $hubloc['hubloc_guid_sig'])), + $p = zot_build_packet($channel,$type = 'auth_check', + array(array('guid' => $hubloc['hubloc_guid'],'guid_sig' => $hubloc['hubloc_guid_sig'])), $hubloc['hubloc_sitekey'], (($x) ? $x[0]['site_crypto'] : ''), $this->sec); $this->Debug('auth check packet created using sitekey ' . $hubloc['hubloc_sitekey']); @@ -192,12 +194,12 @@ class Auth { $this->Debug('auth check request returned ' . print_r($j, true)); - if(! $j['success']) + if(! $j['success']) return false; // legit response, but we do need to check that this wasn't answered by a man-in-middle - if (! rsa_verify($this->sec . $hubloc['xchan_hash'],base64url_decode($j['confirm']),$hubloc['xchan_pubkey'])) { + if (! Crypto::verify($this->sec . $hubloc['xchan_hash'],base64url_decode($j['confirm']),$hubloc['xchan_pubkey'])) { logger('final confirmation failed.'); if($this->test) $this->Debug('final confirmation failed. ' . $sec . print_r($j,true) . print_r($hubloc,true)); @@ -290,7 +292,7 @@ class Auth { * Magic Auth * ========== * - * So-called "magic auth" takes place by a special exchange. On the site where the "channel to be authenticated" lives (e.g. $mysite), + * So-called "magic auth" takes place by a special exchange. On the site where the "channel to be authenticated" lives (e.g. $mysite), * a redirection is made via $mysite/magic to the zot endpoint of the remote site ($remotesite) with special GET parameters. * * The endpoint is typically https://$remotesite/post - or whatever was specified as the callback url in prior communications @@ -299,7 +301,7 @@ class Auth { * Five GET parameters are supplied: * * auth => the urlencoded webbie (channel@host.domain) of the channel requesting access * * dest => the desired destination URL (urlencoded) - * * sec => a random string which is also stored on $mysite for use during the verification phase. + * * sec => a random string which is also stored on $mysite for use during the verification phase. * * version => the zot revision * * delegate => optional urlencoded webbie of a local channel to invoke delegation rights for * @@ -336,8 +338,8 @@ class Auth { * } * \endcode * - * auth_check messages MUST use encapsulated encryption. This message is sent to the origination site, which checks the 'secret' to see - * if it is the same as the 'sec' which it passed originally. It also checks the secret_sig which is the secret signed by the + * auth_check messages MUST use encapsulated encryption. This message is sent to the origination site, which checks the 'secret' to see + * if it is the same as the 'sec' which it passed originally. It also checks the secret_sig which is the secret signed by the * destination channel's private key and base64url encoded. If everything checks out, a json packet is returned: * * \code{.json} @@ -351,10 +353,10 @@ class Auth { * \endcode * * 'confirm' in this case is the base64url encoded RSA signature of the concatenation of 'secret' with the - * base64url encoded whirlpool hash of the requestor's guid and guid_sig; signed with the source channel private key. - * This prevents a man-in-the-middle from inserting a rogue success packet. Upon receipt and successful - * verification of this packet, the destination site will redirect to the original destination URL and indicate a successful remote login. - * Service_class can be used by cooperating sites to provide different access rights based on account rights and subscription plans. It is + * base64url encoded whirlpool hash of the requestor's guid and guid_sig; signed with the source channel private key. + * This prevents a man-in-the-middle from inserting a rogue success packet. Upon receipt and successful + * verification of this packet, the destination site will redirect to the original destination URL and indicate a successful remote login. + * Service_class can be used by cooperating sites to provide different access rights based on account rights and subscription plans. It is * a string whose contents are not defined by protocol. Example: "basic" or "gold". * * @param[in,out] \App &$a diff --git a/Zotlabs/Zot/Finger.php b/Zotlabs/Zot/Finger.php index 778b701cd..cadde5415 100644 --- a/Zotlabs/Zot/Finger.php +++ b/Zotlabs/Zot/Finger.php @@ -2,6 +2,7 @@ namespace Zotlabs\Zot; +use Zotlabs\Lib\Crypto; use Zotlabs\Web\HTTPSig; /** @@ -109,7 +110,7 @@ class Finger { $result = z_post_url('http://' . $host . $rhs,$postvars, $retries, [ 'headers' => $xhead ]); } } - } + } else { $rhs .= '?f=&address=' . urlencode($address) . '&token=' . self::$token; @@ -135,7 +136,7 @@ class Finger { if($x && (! $verify['header_valid'])) { $signed_token = ((is_array($x) && array_key_exists('signed_token', $x)) ? $x['signed_token'] : null); if($signed_token) { - $valid = rsa_verify('token.' . self::$token, base64url_decode($signed_token), $x['key']); + $valid = Crypto::verify('token.' . self::$token, base64url_decode($signed_token), $x['key']); if(! $valid) { logger('invalid signed token: ' . $url . $rhs, LOGGER_NORMAL, LOG_ERR); diff --git a/Zotlabs/Zot/Receiver.php b/Zotlabs/Zot/Receiver.php index c521c9d64..f0378b650 100644 --- a/Zotlabs/Zot/Receiver.php +++ b/Zotlabs/Zot/Receiver.php @@ -2,6 +2,8 @@ namespace Zotlabs\Zot; +use Zotlabs\Lib\Crypto; + class Receiver { protected $data; @@ -30,7 +32,8 @@ class Receiver { $this->encrypted = ((array_key_exists('iv',$data)) ? true : false); if($this->encrypted) { - $this->data = @json_decode(@crypto_unencapsulate($data,$prvkey),true); + $data['encrypted'] = true; + $this->data = @json_decode(@Crypto::unencapsulate($data,$prvkey),true); } if(! $this->data) $this->data = $data; @@ -72,7 +75,7 @@ class Receiver { $this->validated = true; } - + function Dispatch() { /* Handle tasks which don't require sender validation */ @@ -144,8 +147,8 @@ class Receiver { * $contents->iv and $contents->key are random strings encrypted with this site's RSA public key and then base64url encoded. * * Once decrypted, one will find the normal json_encoded zot message packet. - * - * Defined packet types are: notify, purge, refresh, force_refresh, auth_check, ping, and pickup + * + * Defined packet types are: notify, purge, refresh, force_refresh, auth_check, ping, and pickup * * Standard packet: (used by notify, purge, refresh, force_refresh, and auth_check) * \code{.json} @@ -167,7 +170,7 @@ class Receiver { * \endcode * * Signature fields are all signed with the sender channel private key and base64url encoded. - * Recipients are arrays of guid and guid_sig, which were previously signed with the recipients private + * Recipients are arrays of guid and guid_sig, which were previously signed with the recipients private * key and base64url encoded and later obtained via channel discovery. Absence of recipients indicates * a public message or visible to all potential listeners on this site. * @@ -186,7 +189,7 @@ class Receiver { * * In the pickup packet, the sig fields correspond to the respective data * element signed with this site's system private key and then base64url encoded. - * The "secret" is the same as the original secret from the notify packet. + * The "secret" is the same as the original secret from the notify packet. * * If verification is successful, a json structure is returned containing a * success indicator and an array of type 'pickup'. @@ -283,18 +286,18 @@ class Receiver { * } * \endcode * - * The ping packet can be used to verify that a site has not been re-installed, and to + * The ping packet can be used to verify that a site has not been re-installed, and to * initiate corrective action if it has. The url_sig is signed with the site private key * and base64url encoded - and this should verify with the enclosed sitekey. Failure to * verify indicates the site is corrupt or otherwise unable to communicate using zot. * This return packet is not otherwise verified, so should be compared with other * results obtained from this site which were verified prior to taking action. For instance - * if you have one verified result with this signature and key, and other records for this + * if you have one verified result with this signature and key, and other records for this * url which have different signatures and keys, it indicates that the site was re-installed * and corrective action may commence (remove or mark invalid any entries with different * signatures). * If you have no records which match this url_sig and key - no corrective action should - * be taken as this packet may have been returned by an imposter. + * be taken as this packet may have been returned by an imposter. * * @param[in,out] App &$a */ diff --git a/Zotlabs/Zot6/Receiver.php b/Zotlabs/Zot6/Receiver.php index a9a7ab0df..6440c5da5 100644 --- a/Zotlabs/Zot6/Receiver.php +++ b/Zotlabs/Zot6/Receiver.php @@ -3,6 +3,7 @@ namespace Zotlabs\Zot6; use Zotlabs\Lib\Config; +use Zotlabs\Lib\Crypto; use Zotlabs\Lib\Libzot; use Zotlabs\Web\HTTPSig; @@ -70,7 +71,7 @@ class Receiver { $this->encrypted = ((array_key_exists('encrypted',$this->data) && intval($this->data['encrypted'])) ? true : false); if ($this->encrypted && $this->prvkey) { - $uncrypted = crypto_unencapsulate($this->data,$this->prvkey); + $uncrypted = Crypto::unencapsulate($this->data,$this->prvkey); if ($uncrypted) { $this->data = json_decode($uncrypted,true); } @@ -88,7 +89,7 @@ class Receiver { if ($this->error) { // make timing attacks on the decryption engine a bit more difficult usleep(mt_rand(10000,100000)); - return($this->response); + return($this->response); } if ($this->data) { @@ -126,7 +127,7 @@ class Receiver { $x = Libzot::register_hub($this->sigdata['signer']); if($x['success']) { $hub = Libzot::valid_hub($this->sender,$this->site_id); - } + } if(! $hub) { $this->response['message'] = 'sender unknown'; return false; @@ -168,8 +169,8 @@ class Receiver { } } return $result; - } - + } + function Dispatch() { switch ($this->messagetype) { @@ -207,13 +208,13 @@ class Receiver { $this->EncryptResponse(); } - return($this->response); + return($this->response); } function EncryptResponse() { $algorithm = Libzot::best_algorithm($this->hub['site_crypto']); if ($algorithm) { - $this->response = crypto_encapsulate(json_encode($this->response),$this->hub['hubloc_sitekey'], $algorithm); + $this->response = Crypto::encapsulate(json_encode($this->response),$this->hub['hubloc_sitekey'], $algorithm); } } diff --git a/boot.php b/boot.php old mode 100755 new mode 100644 index a9ce4b129..4c3e4c00b --- a/boot.php +++ b/boot.php @@ -28,6 +28,8 @@ */ // composer autoloader for all namespaced Classes +use Zotlabs\Lib\Crypto; + require_once('vendor/autoload.php'); require_once('include/config.php'); @@ -50,10 +52,10 @@ require_once('include/attach.php'); require_once('include/bbcode.php'); define ( 'PLATFORM_NAME', 'hubzilla' ); -define ( 'STD_VERSION', '5.2.9' ); +define ( 'STD_VERSION', '5.5.1' ); define ( 'ZOT_REVISION', '6.0' ); -define ( 'DB_UPDATE_VERSION', 1241 ); +define ( 'DB_UPDATE_VERSION', 1243 ); define ( 'PROJECT_BASE', __DIR__ ); @@ -601,6 +603,7 @@ define ( 'DBTYPE_POSTGRES', 1 ); function sys_boot() { + // our central App object App::init(); @@ -681,14 +684,18 @@ function sys_boot() { function startup() { - error_reporting(E_ERROR | E_WARNING | E_PARSE); + error_reporting(E_ALL & ~E_NOTICE); + + if (version_compare(PHP_VERSION, '8.0.0') >= 0) { + error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE); + } // Some hosting providers block/disable this @set_time_limit(0); if(function_exists ('ini_set')) { // This has to be quite large to deal with embedded private photos - @ini_set('pcre.backtrack_limit', 500000); + //@ini_set('pcre.backtrack_limit', 500000); // Use cookies to store the session ID on the client side @ini_set('session.use_only_cookies', 1); @@ -1570,7 +1577,7 @@ function fix_system_urls($oldurl, $newurl) { dbesc($channel_address . '@' . $rhs), dbesc($newurl), dbesc(str_replace($oldurl,$newurl,$rv['hubloc_id_url'])), - dbesc(($rv['hubloc_network'] === 'zot6') ? \Zotlabs\Lib\Libzot::sign($newurl,$c[0]['channel_prvkey']) : base64url_encode(rsa_sign($newurl,$c[0]['channel_prvkey']))), + dbesc(($rv['hubloc_network'] === 'zot6') ? \Zotlabs\Lib\Libzot::sign($newurl,$c[0]['channel_prvkey']) : base64url_encode(Crypto::sign($newurl,$c[0]['channel_prvkey']))), dbesc($newhost), dbesc(($rv['hubloc_network'] === 'zot6') ? $newurl . '/zot' : $newurl . '/post'), dbesc($rv['xchan_hash']), @@ -1756,7 +1763,7 @@ function shutdown() { */ function get_account_id() { - if(intval($_SESSION['account_id'])) + if(isset($_SESSION['account_id'])) return intval($_SESSION['account_id']); if(App::$account) @@ -2063,12 +2070,10 @@ function is_site_admin() { if(! session_id()) return false; - if($_SESSION['delegate']) + if(isset($_SESSION['delegate'])) return false; - if((intval($_SESSION['authenticated'])) - && (is_array(App::$account)) - && (App::$account['account_roles'] & ACCOUNT_ROLE_ADMIN)) + if(isset($_SESSION['authenticated']) && is_array(App::$account) && (App::$account['account_roles'] & ACCOUNT_ROLE_ADMIN)) return true; return false; @@ -2250,6 +2255,8 @@ function load_pdl() { $n = 'mod_' . App::$module . '.pdl' ; $u = App::$comanche->get_channel_id(); + $s = ''; + if($u) $s = get_pconfig($u, 'system', $n); if(! $s) diff --git a/composer.json b/composer.json index 5d4baa6dd..f5654858d 100644 --- a/composer.json +++ b/composer.json @@ -23,12 +23,15 @@ "source": "https://framagit.org/hubzilla/core/" }, "require": { - "php": ">=5.5", + "php": ">=7.3", "ext-curl": "*", "ext-gd": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-openssl": "*", + "ext-json": "*", + "ext-zip": "*", + "ext-posix": "*", "sabre/dav": "^4.0", "michelf/php-markdown": "^1.7", "bshaffer/oauth2-server-php": "^1.9", @@ -42,7 +45,8 @@ "ramsey/uuid": "^4.1", "twbs/bootstrap": "^4.3.1", "blueimp/jquery-file-upload": "^10.3", - "desandro/imagesloaded": "^4.1" + "desandro/imagesloaded": "^4.1", + "phpseclib/phpseclib": "~2.0" }, "require-dev": { "phpunit/phpunit": "^9.4", diff --git a/composer.lock b/composer.lock index a6d94c8bb..8275ea0d5 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "81d1e8d9e12a7923b8c2bbfd46a3e4a6", + "content-hash": "bc4a925533b7fe89fd5c8e94075835c6", "packages": [ { "name": "blueimp/jquery-file-upload", @@ -73,26 +73,26 @@ }, { "name": "brick/math", - "version": "0.9.1", + "version": "0.9.2", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "283a40c901101e66de7061bd359252c013dcc43c" + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/283a40c901101e66de7061bd359252c013dcc43c", - "reference": "283a40c901101e66de7061bd359252c013dcc43c", + "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", "shasum": "" }, "require": { "ext-json": "*", - "php": "^7.1|^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15|^8.5", - "vimeo/psalm": "^3.5" + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", + "vimeo/psalm": "4.3.2" }, "type": "library", "autoload": { @@ -117,7 +117,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/master" + "source": "https://github.com/brick/math/tree/0.9.2" }, "funding": [ { @@ -125,7 +125,7 @@ "type": "tidelift" } ], - "time": "2020-08-18T23:57:15+00:00" + "time": "2021-01-20T22:51:39+00:00" }, { "name": "bshaffer/oauth2-server-php", @@ -561,6 +561,115 @@ }, "time": "2020-05-17T12:19:40+00:00" }, + { + "name": "phpseclib/phpseclib", + "version": "2.0.30", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "136b9ca7eebef78be14abf90d65c5e57b6bc5d36" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/136b9ca7eebef78be14abf90d65c5e57b6bc5d36", + "reference": "136b9ca7eebef78be14abf90d65c5e57b6bc5d36", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "support": { + "issues": "https://github.com/phpseclib/phpseclib/issues", + "source": "https://github.com/phpseclib/phpseclib/tree/2.0.30" + }, + "funding": [ + { + "url": "https://github.com/terrafrost", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpseclib", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", + "type": "tidelift" + } + ], + "time": "2020-12-17T05:42:04+00:00" + }, { "name": "psr/log", "version": "1.1.3", @@ -613,16 +722,16 @@ }, { "name": "ramsey/collection", - "version": "1.1.1", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "24d93aefb2cd786b7edd9f45b554aea20b28b9b1" + "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/24d93aefb2cd786b7edd9f45b554aea20b28b9b1", - "reference": "24d93aefb2cd786b7edd9f45b554aea20b28b9b1", + "url": "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", + "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", "shasum": "" }, "require": { @@ -632,19 +741,19 @@ "captainhook/captainhook": "^5.3", "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "ergebnis/composer-normalize": "^2.6", - "fzaninotto/faker": "^1.5", + "fakerphp/faker": "^1.5", "hamcrest/hamcrest-php": "^2", - "jangregor/phpstan-prophecy": "^0.6", + "jangregor/phpstan-prophecy": "^0.8", "mockery/mockery": "^1.3", "phpstan/extension-installer": "^1", "phpstan/phpstan": "^0.12.32", "phpstan/phpstan-mockery": "^0.12.5", "phpstan/phpstan-phpunit": "^0.12.11", - "phpunit/phpunit": "^8.5", + "phpunit/phpunit": "^8.5 || ^9", "psy/psysh": "^0.10.4", "slevomat/coding-standard": "^6.3", "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^3.12.2" + "vimeo/psalm": "^4.4" }, "type": "library", "autoload": { @@ -674,15 +783,19 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.1.1" + "source": "https://github.com/ramsey/collection/tree/1.1.3" }, "funding": [ { "url": "https://github.com/ramsey", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" } ], - "time": "2020-09-10T20:58:17+00:00" + "time": "2021-01-21T17:40:04+00:00" }, { "name": "ramsey/uuid", @@ -778,16 +891,16 @@ }, { "name": "sabre/dav", - "version": "4.1.3", + "version": "4.1.5", "source": { "type": "git", "url": "https://github.com/sabre-io/dav.git", - "reference": "b903eeedfbdcd6cab7935661ec6dc2d90cdf8a1e" + "reference": "c1afdc77a95efea6ee40c03c45f57c3c0c80ec22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/dav/zipball/b903eeedfbdcd6cab7935661ec6dc2d90cdf8a1e", - "reference": "b903eeedfbdcd6cab7935661ec6dc2d90cdf8a1e", + "url": "https://api.github.com/repos/sabre-io/dav/zipball/c1afdc77a95efea6ee40c03c45f57c3c0c80ec22", + "reference": "c1afdc77a95efea6ee40c03c45f57c3c0c80ec22", "shasum": "" }, "require": { @@ -811,7 +924,7 @@ }, "require-dev": { "evert/phpdoc-md": "~0.1.0", - "friendsofphp/php-cs-fixer": "^2.16.7", + "friendsofphp/php-cs-fixer": "^2.17.1", "monolog/monolog": "^1.18", "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" @@ -860,7 +973,7 @@ "issues": "https://github.com/sabre-io/dav/issues", "source": "https://github.com/fruux/sabre-dav" }, - "time": "2020-11-09T07:48:35+00:00" + "time": "2021-02-12T07:54:23+00:00" }, { "name": "sabre/event", @@ -1050,16 +1163,16 @@ }, { "name": "sabre/vobject", - "version": "4.3.3", + "version": "4.3.5", "source": { "type": "git", "url": "https://github.com/sabre-io/vobject.git", - "reference": "58f9f9b46a1080c0130bd86f4df9a568aacb9c79" + "reference": "d8a0a9ae215a8acfb51afc29101c7344670b9c83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/vobject/zipball/58f9f9b46a1080c0130bd86f4df9a568aacb9c79", - "reference": "58f9f9b46a1080c0130bd86f4df9a568aacb9c79", + "url": "https://api.github.com/repos/sabre-io/vobject/zipball/d8a0a9ae215a8acfb51afc29101c7344670b9c83", + "reference": "d8a0a9ae215a8acfb51afc29101c7344670b9c83", "shasum": "" }, "require": { @@ -1068,8 +1181,9 @@ "sabre/xml": "^2.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.16.7", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", + "phpunit/php-invoker": "^2.0 || ^3.1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" }, "suggest": { @@ -1149,7 +1263,7 @@ "issues": "https://github.com/sabre-io/vobject/issues", "source": "https://github.com/fruux/sabre-vobject" }, - "time": "2020-11-09T04:31:38+00:00" + "time": "2021-02-12T06:28:04+00:00" }, { "name": "sabre/xml", @@ -1297,23 +1411,23 @@ }, { "name": "smarty/smarty", - "version": "v3.1.36", + "version": "v3.1.38", "source": { "type": "git", "url": "https://github.com/smarty-php/smarty.git", - "reference": "fd148f7ade295014fff77f89ee3d5b20d9d55451" + "reference": "63b3c0aed0f614880cda21a5c08c606e97b489bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/smarty-php/smarty/zipball/fd148f7ade295014fff77f89ee3d5b20d9d55451", - "reference": "fd148f7ade295014fff77f89ee3d5b20d9d55451", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/63b3c0aed0f614880cda21a5c08c606e97b489bb", + "reference": "63b3c0aed0f614880cda21a5c08c606e97b489bb", "shasum": "" }, "require": { "php": ">=5.2" }, "require-dev": { - "phpunit/phpunit": "6.4.1", + "phpunit/phpunit": "^7.5 || ^6.5 || ^5.7 || ^4.8", "smarty/smarty-lexer": "^3.1" }, "type": "library", @@ -1354,22 +1468,22 @@ "forum": "http://www.smarty.net/forums/", "irc": "irc://irc.freenode.org/smarty", "issues": "https://github.com/smarty-php/smarty/issues", - "source": "https://github.com/smarty-php/smarty/tree/v3.1.36" + "source": "https://github.com/smarty-php/smarty/tree/v3.1.38" }, - "time": "2020-04-14T14:44:26+00:00" + "time": "2021-01-08T14:05:42+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", "shasum": "" }, "require": { @@ -1381,7 +1495,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1419,7 +1533,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.0" }, "funding": [ { @@ -1435,20 +1549,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "twbs/bootstrap", - "version": "v4.5.3", + "version": "v4.6.0", "source": { "type": "git", "url": "https://github.com/twbs/bootstrap.git", - "reference": "a716fb03f965dc0846df479e14388b1b4b93d7ce" + "reference": "6ffb0b48e455430f8a5359ed689ad64c1143fac2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twbs/bootstrap/zipball/a716fb03f965dc0846df479e14388b1b4b93d7ce", - "reference": "a716fb03f965dc0846df479e14388b1b4b93d7ce", + "url": "https://api.github.com/repos/twbs/bootstrap/zipball/6ffb0b48e455430f8a5359ed689ad64c1143fac2", + "reference": "6ffb0b48e455430f8a5359ed689ad64c1143fac2", "shasum": "" }, "replace": { @@ -1488,7 +1602,7 @@ ], "support": { "issues": "https://github.com/twbs/bootstrap/issues", - "source": "https://github.com/twbs/bootstrap/tree/v4.5.3" + "source": "https://github.com/twbs/bootstrap/tree/v4.6.0" }, "funding": [ { @@ -1496,7 +1610,7 @@ "type": "open_collective" } ], - "time": "2020-10-13T15:38:30+00:00" + "time": "2021-01-19T16:16:38+00:00" } ], "packages-dev": [ @@ -6636,12 +6750,15 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=5.5", + "php": ">=7.3", "ext-curl": "*", "ext-gd": "*", "ext-mbstring": "*", "ext-xml": "*", - "ext-openssl": "*" + "ext-openssl": "*", + "ext-json": "*", + "ext-zip": "*", + "ext-posix": "*" }, "platform-dev": [], "plugin-api-version": "2.0.0" diff --git a/doc/context/pl/admin/addons/assets/addon_repo_gui_1.png b/doc/context/pl/admin/addons/assets/addon_repo_gui_1.png new file mode 100644 index 0000000000000000000000000000000000000000..37139b345d35ab3308999a9c99181aacb83303e8 GIT binary patch literal 16983 zcmZX419V>7^LElWY24VhZQEvJ+qP{rMx(~IZ8f&t*!tdkd)wcCt?ylDops)g*)y}x z-g};BPPn|R7%Vg2nb!qTu4Y>LP!W--oe(y z+{zdTNFAy|!<}74_hIvJ4e=rUP{V|AYJ_|0CT)~u%1H(>fmlHzjdCJZJY; zk@v8nkKjP+qMPIvpMjcL#nGZ;!}GT(!j?m&865qepjp9Mf7!FWg220rWwj4*DgnVnLa?#`X2_(f zCuA62hBYW5(?ml%vw&eB>bIWBlV!#+b9hD$j551*#XmUU3PyT#yFEUR|z1AIMpBiQH5xqbWKZ^x+ zC0KW(C*6-xy-yn=>OI55tA4Vm2w~|z;eX5fr7lZN7uWYgQ0jBF$22R8_}eZ|`a+Gb z^UF}G@9TSLY*E8ym({C`X_CJ3OGWS$UfGuP`&GZMWD~_3QfjT)VtL7n1r}&s9 z(Sg!Ofu^zEg(8Da`JI73pYDE46K}l?7l3uMh;6D{tkJovuYf@uZR_;Fx%uHEfGJLs z8t1~*`}5KRr*y-ygTPnAdhkF7303S0AT5C~^0Tskg6@X0!%Xsrw!_c{Y2pWIhWHgI zmW%c|;ERws)XP@ z;qtJ;9;gFqscQ@rP}(06$Ekap3c_^M%~2muLlE=oViT<8)~3qQ@g$s<)}gmr(? z{Np42dPo`(y1a%Xo?ArDu$Vl&X^zj`^m^!H@TQDdp1Q$g&`VV?%v4gBgZ(t|gU)1#_xSYkaxKC?Wdz9)-`+8r9% zVcn*-`_;^^%}ooU7RD9Z7H%1OF{!o2jT?K|FSWz6)pqO;-*eH6*PqkBxRr6`{b>J+ z?a#kOFpT5`=>iH(5E3WAF54_@MtF<7f#idL5hf^XoKG>6h%O*ago;FmgcbhQFR{aj z!<5CoPRhx}$=3?nirwna>d}hZ+T=8LOMRPg%XvF_OK|IX6nRv3yn3uV?Q5u~x73|G zu+@z)9ycoAZx_4`+-Dggf>t>b*jyYD9KRf*>2 z?4BHPwtgI(9BOVI>@FPMA5QL6ZsYFh>>wU6Y(wpj?6(XsjYjS#Z#!>AAMy;WPIC1P zO%_iaj-?K`M%xDA?WbQi;ks^@TY3HiwiN-0(>(UF;>sBk+X@<#& ztC6dd>y}6yb?7SSo{Ga@`fIfABWM8Q*v zqgbd2GV5k8b1Z+HINQNk5|u6;CtV{QOHElui$(3J*l0^+Q?M`?7F~!Hx-aek?qKhr z;!w5Ev0t%2w`V)ztB9az}iQiNWlUiqjUt}>!XAycYzTvi)ZTjfx5?FX$f zplsYEnKg>0qM_nDuk=H1e(9&x&-=25l8PUeB}(&U^TjOv%|3l`IwYu`I5Oy(M7avJvQg&OEAZki{-aUv!)vKYSVf3;m_YBlsA z^!U=D*unOk|LpU8ct-~N9aiu&Eru7PGV^!L4Q6fn6{94ppH@)}tW1-PzgYEI>=`)p zuV03@kUzVeR2X3xsp$)!FmIa^DRws% zI>bIaq*bJ?p{1#muGFbau7t4}v=Lh$Ttit)T*q_2^Z@nz>5jzxm1oLx(wbpev3kEE zHC-)aaawhxf~$#lZLp2TYIXfwdX-|e%5%4Uy`9dZO8$(zFo^>XCI=};LzigNuoLg~ z_U-zu=*{^x_E`@62oxJO4f-e4I7}woEDYu6bSPG6Uc^_De(pV|VZoBGN5Rt#^i9?2 zb_UI^kLQpJVbfua;yuGz@!krx3K$B8T&(BhOAJyC`Ps3e`AwpW1J!-8hn4E3OWrkA zyH2|iyFUGGgSwj|wM+)4Y5~%{{y`(cbN!BO)oos`4aDKZ=Mo-SR&ideU=mjn=F2p# zT;30>%5^^@cy2ufAGl?eq`A`Xy{lF?o}K(}f8Jhso4ovBL}x0&=zD2+$eHXn0XKEQ zljpE|?Vh6UDxb6(IO{!24(x>Bf~UZt^vC{>sRg?QBVAxMgR1tf6L06E^!bLA)AYqM z+ptaYmJt`GGSpI;lB^CCC(H85g361={qq!$^XClLy$fwK1atDvF?+V+_)dln`wEI0 z^Gc2%?gu(s9akymG*epZS`aJPE3K;)D|l;c9h)oq(=)gHhXQ?lGVr#p7A_ke-``6b zr7BJj3>${n+UDCVJ()dDJQ_SsUsxYl?oaPFJq=#>-u(u;3j|hsItfzqiu-i>4CUUk zWqDvc?~RFVjGo+2VAdkb6%J;4Q(x(%bS1ieU?}0Wy{tSsFJcw5O$~Vu@ktBImAA|I ziutIqQ!s0A6mrkgTXU|z_>8?Y;pOvEPZ@a`J*i(yoXkZ}J?FHUtebB7-z*J8<{}S1Z<2c4&Ugog79sTsAb2Lnqh1 z)A;$*U?Ko@FTw!D@c`+a25)|e>T;-bhIQj9is-%vvJ$c!>D+s~O9Is{Y{N<5 zfdj6kNd5%5Yh8qa%AxAp$arrri%|*si&Te{m+jrb-&QaqcuoX2vNnt(0x!Xh80@=> z(I=x=>$4;+`8Y)-v7Ay`lZC zNN|rXHZ!m92VcN4C^nAh61=G2#!7rd@@1f*0g6}80M=DhFVe#Hzx z7{YsUUhr9*w>~uIwG|bYu(eK=%B^I>M zHR#54aWWV2+;86vUr70Y1EciN2$uGmilno0qh%qR z#vvpqC)UQ@r%1$2th%XGO8H14mJ#Q-YYZr{h|*|vXzw;27*?=lblMJ{ULI2(FCT?s z?4j#0oUpu`NirkTt2NTsIMrM?#8fYvXBads`s4_O7#1m|+z6ynFFG}WKH$Tf%I(s4 z=oD%3G!59&U3LnZUmf3CKeQd|B2`mO(}**qec?u)#nQx6#n8cyNB)K?vc4@cAB!5H z6N3@eft`wYQ8z~{z@T82%8w++C6ZF12$*}OORXJxad#@_qz zlPuY`&C?oJSNY=e3sNMhIrG)JH67_tYE=Un*9|^R5vR|m_O8lUjhpL>Zk?rhEms=@ zDMS?`)>r4H500F&yyTv4KW;7ymS~HI9M+e9#b;Y~EPE5Y!O2O3OM~Ntc!e0|6!ER{ zCA@NP1<#OQ9F32yR^7+8bftI-dEMBwJMZkR;#}O4NhE?O8PBzCLik>0Ks}?sQ=B*g zLI<>y#b#Tm&E3O*!wJ+h)XER~rz^7=$E#h%3utp^Bky-(0W5=HZjmj{upES$`gi&%kVq4H6ZpQjewP~)9!t0V5-+r0v>%FsOTIw$Rhd>% zLgh|%PI0L0!R(7!tL2p$&#IH+s%>2@oX%mPO@&U3Pn>^EUJzm(02rAtnsXYt47E@9 zZYr)hjQ<#3nGDgJvuInK?9E<%?+_|5%vOr4YlK$zJuH?dmFJUw6BiIkeKi!{7K&GdZ;5iS!p2JG6Spk$apT|KrN#JKJ zj*2pTv#HwP(tuYiO~fkp10%0a?Nq0wY?KJL8PvKzT!68G8vB+{p zC~}#59EDz*r%?+U4T`~xr4I3q+=m*p(`wTyj6LGBEqmVXzIXfSWNNCF5?>$M?Qcys zY3?~=S4r;rV4K@!qfKOZC)zHuEX=LE=NnygzxN#pZ1n|Zso}voSGY($SRL~$JY0ug zcjxuU^~uWF#)fgzp{uwJJaYOFdQxr|oG(6!K&-re{OFju2W{sBa;Kki;sKp92Xe3l z#cjMRE@@$L^qjo+J@hztpAo(s(+W4Q&zbeOdTG)_+E zFFFl>icbYeMHqe5_ezh+0eaKpVuURskN6YePUxYJx(e@WZvo9o3|HbXRsfUI#LWmHj+q~e*dZyC?{JhbSsGm)^pu0%;(0>D8$qw zp+6;2$?))f4V+A@{JzQ3GU;vfaQE!=%=TG~dZfxER-||%ds2lG4Y8Y2qh*)HX$7>! z45gSxuqDcc+h%^$`^Dy#Z^7ri^nwxkU@41SNoY!pNG2AV8iN~OSaFl2 z5?&PM77kakm))vA<&Of-)^`;oEaKBjVB4abh zSI~|+i8SkzebCGx&e7eujom7*SH03lVH1jm@O_;=nDr*lXZC)i%`;c7)JjBuGG1p9-s?FTn@$ z6G~VlMdWfTj!ZxE4MHadmG($?OMW9_#afLKvg2(2+RW9A(vIsx_fFvdZA*Y%>`{^# z{{V4w#(ZvnW@0*{mqS>Na4oQJt_K zfu9Z>DZvJOUXLD+YLHfzVVM{oZ_@g%p51U#o!zis$5aC!?5Wu~$8h*5)oYQ-M&_3; z_k81b51tLuW}d;eA+euq-BsNmCj72j!qX0rrX`YTj&9oh;ll?d56YEhb7{>>F!n@T z-;k}499?*1Qp6=Tcsj}K=o~#vMWspKyWg$OddB;_I4WAq-G70J4%Nq6qFLtr8l++?LF%f}JW_wpw+oozYh6M0I>$0A3`zYhp3>)OZZn7rNM*)GFm6_Rh8+=~%CrLj3l7ewPiS6o$J>GRRj%=9x(GdNFdjGj6@YMPTYlL?Bd2~y475=tg8 zEeu;!>fl9BERqvcp)ess0y}@Ph-(6Fa6_B`xM2tvG0iMbEzc8p-84fhzL zD#yZ*72=uEJv5w93|c0Xc7XQ!TBy618|;(Op63-A&Q*l)T<A%xu&H0<@F(#HFxwk@kY!17v(BXzL&)Jo=p9*VoRb_ouz2mjtCqr??hIA_YBr> z*>msMw`$LWIkLGas5-JP>}SlEiO1F6he*dp$Em}>gG00()FNNEw<8T^&2mjbIuV*X zx-uFx8efeXb&9VVI?g&BugEuZZ-<2}Mia*8gx2o`Aj*0jNVt$A2q}2Fl@;EJKz?># z{N~ph8un)!8s-_(tlEKcInEY8IG9aVK7>iC%u19@=#yRE9DQpX@V_2K{-2jDDo zWpyWY8EH;KTWeZt}rZDr%g>Bd9&ZwpSq^FPIO zg!un9akAtgRF{#*7qWFQ#%G~rrllw3g~rFn=XNkM;ZzhB{jWRV9}l6Klan1M9i6MI zE3GRNt*wJ89Rmjk2OT{l9U~(RpaqSiyN#2+8;y-4(QhGt^jJvIKea2GE$ zH{D;?^Fn`l9%TapBFB~x7EpErKF@;iQdU_BoueW^kR&G*R{}0vl}8Zh-*8qrBRmP% z)U0l!EQ4{W$=xZgjQF}3(AHYwm#+x+#aVzEzXJl2_`9#1+Z)^>#R&1Y?x^>}LtAdg zUmO?i7ml{BQ-_X7J`v*ocg@J*(>}`ynEv?>s6YWFwsgV^^Mm|-y~;w0 zFTBdqewP&j73Tka)rvm+sSfMD2=X(UxY!dsVg6J7j{x}pD}dN-s-V1_nvbumzCJ0S zNyiuw0r5+ZPb8W>L> zSh+8AS`S z@S5E!{4oSS0qU{%(?tSH{8^J1^8eaXLWwUZhl|7hH7GyO&q&5eo6Mc!kL%<~{5QFq zibfZxRLjZ9$<0>k%}q>9lA~SaKokRfp7v9Bc6JUXG8W6!Vg)87xcjFxpZRHLcLpLc z@`Xa-prHIUzJc^GCfX5EQH`C7qOaeiH#nfvO^3i@IXF6kWV6V@nEfnK@bGBu0zp(q z79|Cqis61$DO2tFE|bA}#`<|lH2Jr4+CuraN;$Wd#@FPyuRuQnh|qp@Jm}4f`jm2%Wi4G%-ICxbH$e0O+QcO|kEjY6L(Q=>cFLlncdUp7t!J4G>gi^1W-b=v~u zLiXu=k2g9zyLBf0{lrR*8nJl2+!9G;$U_%-auBnwsLJs5oGv$v$h$S0@U(!K1 zrJ>q;BPqzpAdb5&-(R2RYsZ_6be!xBhBKvQWh+y%{Gzk2Bs+uKSb=HeTbzz(v25Gz zcL$>v@S}b`#hRH$W0t*v87w?BT~ugvc-$S$6rj;)?o~u}*TN^BuQuuWzTK^vS9LyH zxOISey1|a7|NEx!J3}cGY3{Oo9bvw(M)g?!4t1Wz3Dsd6R4*+pZIm7wl?8J}20Fns z#ocEm_SABiZOB?-sTRw9Jq!ZJj=y#D-IDtjmThgi)>x`aRVY^qDuZg{LUqSklT>)Yg?Nmz?Z{pL7pykf z#-{5di9owesM`E65hLjPqT{YBn*%N@th$j_pq<+Bu(3)gUCDs_^wo9UdEI$&e}BIw zS4mkpDIsAeMl-LvI<8X%E{IQCBfSNydk7A%CYBjMKohGoovBv`f$MbaO!bT81+1F~ zIgaC1;rLdKGep@XPw~E-`N5Wa4i>8Bi_l|Lq5F3&AVl$37{My7G~4f{DO7gcYbr8q z_-P!0dDw5#7Wra~KYWpBi3|Vco9+QMUZX$+%`mPzc zpY!p0=(_2>SgKUaG|Ao6g{ zyoT$C6-_$Lu-434(sfOzN$T!n$3ADu} z&%PJO+;8wy7HfFH7&C2u*2YiCg>v1l4MnQT))UH$?z0pFB;#xLx7)eW!<-AQi}pDv zG)sw-D;(D~d%za=aJHPdJRlLuV!42@M1RNRd4D#9=euT!p)@Ytj-dFp&E*dF$MiJQJT*z+B5n({m*N8`egpe7-%OOl?w|7$tR$^Jr8U8-k30HATm% zI55B(kH_kN5Y;ok*fkDk0&Iy{BD{Z!q_G=|;ARU0N?|6kkGYZHbzhvVM@?aL8OuNejW z3DWJm)9q8=0cNF?zzgar9=0AnDB;S0#hJl&n&lwNCsHCs!y@vaUf?0hrvmy6WxzzG!|)sfA$$`^$a^rQ1^bm+i_H{8t zemKgAktoaqsq#Fm=ZA|a?3<&4*z}?v{mueM3%d5pPXsA`tRSlSG|~j_v9dY5I9UR) zJ%N53E9qfVJD3GG2BS{ko1PaubHKu}lROXFL1PejUV7%<>OIH225*(SOQzpqevV2qJaqrQP@&~1 zqaa%B0D8_!Y9JM9bnTeXVi1^?pHRW zVFb!}qIM=Dd;P}ZpsAHaQ4#6{VC79@jXmD?66L%w zAzsDbhc-XnU17@XcE%s{HXE(67Kh82USAwIqk6x{O2s%Ja)7B$0IVMpd#)uGCNXAC z30JG!npe}cPNpWUjktX}%yH~cM-;kiC16ht#q}5_Mik(>c1E!H97^twvP}}%ldBeH zs6l7IQO{uP;is#dv9-Gt;TnW+@u6z%l6v-9IQVzA%f`zAYby{o}Pj&*>tJGViX*LKL!g5Y|=$PC69N`xcSLnkM98p;1&%?3-12N5&S^lD7MPa=#QD=MlasG?Db+ z{Y(*qE4iNkIw$KQQUb%3(S$rJu~*z_UjUjV#1VX%X{Ey)_dVbp7gSaGqwoV+9z3xb71l54yC<2u^8I+A*ss{)Y zkBVcT#Z;*=J`3{>A6(gLNJLjq&G>o29dN*WT*hBK5U;6=6%lqWE14J%?T4-qFbXMv z_jPZSkEP}O21Z0H9%_@XxX$32*Oknfm@r0r(bk^Y#2og4I$-O z9@Drn7%cGluS^D)0l91-vhk*aTSf&?lLkUG2zv_hW~Q&o22<{cjDLpe70j@{zml7wn3kEb=d$dW8xSTX;v$lFR zLNb_agqmNS8FhM)9ejsvXF-QI8Cs=Is?ETxsA-WYj0|8W;-&fOjSdr&S2vPtgtt12 z^o?ZvS%;0iUyKf#5PA4h4jw9`3vDKK^m$T?sEs_;R@6QhGPsZcBf_abf1minc8EU1 z3@1|IE`k5qy#oO%9@jfwN3ot52beIDvG(0y+3O2^u1oDd4 zco9axtF%?S_zTHvcag55)@9(=wfEW(jDgMorh>SEeKT2y723>}Wd~=>MRNya~!#FUR3XmPITgCbV z_FE`JOCrI4NelE-Tq2sHhm~=gP2=N@2ntqO>P_Nn=brPRO~&wiU>oN}cSG4z1dwZ6 zGX0VTW<=H2?+Jq$im}A3{xaZzLYIyRv!}qbrVK>9-Zokcw1plS>lVhhMq^_Qsib}o zDoasaa)QU^K>PGXa8Evv4?4&HKTO%3!++<4Jlf@(%rXx9%1`>@D&4Q{dBAk6YB)0p%D45=mf$D1H!P}`XLfNqs zdQU+JI2R6XpW67t;@0UBdmm27FQCiw3!sYM}J;ssz2No3Ni|tYX;Z8 z(i=;!j7C|bF=9h!9Db4JTcK|~uNTA$Zf-;;3_W>Qcyz1$4~+Lf{%k4N*UQKkUm=lN z6#mSF>?u7?Ha6!}_jtWOM$_M0CuGJSL!Y62G!RMG{EFZ&v)9PMv82)BahquUy%+9e z)McI#hp>*CwHw}>h}z6B5qnJMfVhw0A^~VmdS1j|W13K<`4({EU5n)WRIZPVZ6%~j z+cU=2ix2*K#Y}4EFTYz#@4T%N#_Ema9m9D-e#-9i>V|7%X6(YZ?)&kUq(E6N=t1MC z;ZEHERw&Nnb5dGdjv*HS9Qihiq^1u*)xQK{&PHnQ#As37+e&z}40n#jP*rs_wdD<(xI|$ zGe~AENJ}06l4I{Co`tS+qOLWFbZel`b}iPNsr4-#{v`CU>Jn1(Y?pYBcylsq)*%p_ zy4gITfL92@>SAsXHO*{fWaa7kAz=G*yU#rrE>xUmXMc0h!Yc~G5;esGE7F;PRkX%1 zY@ZC>!F&6DD-fO#HJ&<#AQbI7Qi)Fe-~p1SDNvJMfBPw4c9~I!UyewYGX+Oiz zbSlTli*@#~-N)O*A>g~31sO8#^&s01RI*&yJRHm=ep;&DS^PCpM^u)_m2(GbK*t@U zw_ed9Ncc<J!EUlhFH?d*__`-Dm=Fz{xuxwVE@BN=tpJx(jQucl5I4EUyd#6VN# zn9YoRboyl1LZM9ir))Xu#0f`()ZKz|-G9N&WN{&AoLP8PX3f8Rpak_2B=JGBRsQwX zQiEZkCf^r?d}muGQVv`M!Czo=K*-=X^$$=!3kf2?MHr;;P5!|Hqzm|QEaTJEYRlXc znn(+f;Fn3>8LjOgU{p8qTtz$qRFL=~F0DhWxMQ#NpI|WRw<+o;VQn*7$sIYxnPo$7 zNVxhZk~V70`r5|?Q6l_5Ilxknzk%k5S#dxeo!5$uK8_?HY%?1n&xV#Abclv&`n+Wz z?>)%49}<}gOBK13F?85CO2s{mH5?4=x*)XaSS}=-4kU(d`3XqJ>%mD>A$~BTtR93Ni;8A?rn_b;;= z;oL#c zFBPQ>oX&qq(=h5!09w?UXD|A%@Mr)l`V&2iGvW{TD~t-zakv%tTJ(=_fE;2=izr!~ z-=Pga3&Kc%jz(YM-HHA(r-lH@ETY9Rf63i=5rB@hm7(p3e<;`z27qMD0wuA()(;cL zA>?xbk_iNj%1nPs0d7L`Z?s+wv7!8lCr3_63B6vT`B%L#esxG<5|UsWu}Jy6Iz_2J zz5K&S0iK*m6`KtIV@Z%KKm#XLi@)?P!VJI=!sqK@j=#O80pE!1asrxQ6Uw&au)(Z-Co%q3^~7{^ zcYc*LLu+_;Ry;9u_^2ws{dI=%iLY`AJvtp+{fM4BC#TM3%CF4gCr+eql!r_o$KZe? zDi};>>4}pNr%q_E`_uJ4GO2VLgCTf~`qODumrj$-dbvj3=-3#DN0Z0h34kJ2K`PX4 zbvj;aaSU{ZH&gnLuJ%j;`Y;pwnmLHrcOz*+vS>B+Wpp&3OLn(pU?9{Ir=rqm0>DJu zv>q1$I6Bvn1d__A=5LI~qeQXXii63Jx9QyO*Gn~q09=Z6q$h%taMS~V_j!Rwoo@a& zvJ|HFUx=QAKV34~M7<+g5aK`;0X?BKPGhDb&$R+5rqa%oJTmI;?hatrY6{-dWO?p> z`n)}}SS?L|#LW|vk`@&e4Gs>1TjqNFJM;cWgm&llFL%pLBel^_#XPs}PVTrh8>9_p z@e2)}(pJ*uHZ~i#RfG#ut#;I(Yf0JIT-TcIZw@AetUqJ3U+zTGk#4Yi+#dDz_KE@U z?V971G0x~{s*Z=bs_Me+@mwezj^u7I3>q(h>C9lWm6en0y6lB{dAR5@o5`0*B!$HT zK#S!%)2`cDsWR0HNhv9=?I7ey_T8xF=GF+Bc`%LT-)j~!*w0&`VsG^XMh$m`w{7ET zx9G5ZHAH}Ux=+Z%>-sHSOQ(zwYj=4JexpjndvWGex;W*VP>k8l!uY;ps@3(v2kvN1 z4UJ8+@fg_$1s&BGHhW3?cc;~}ZyPreQze@R@k2XIOka)N&5s*3nAG^tvpd8m&u}Sz zsxIWJRdzm~r$ttC#!vSnea)Sf2SpttOjqujbl{gv@iEcuDrdd0>IDtFJR%Uo*&Q z05*96SRXJjFhIUU7r-A2Ot-t=kmYzGjX2D!s39g3ILx&;nyO}Le-mm9x_v&aA|ob_ z!e9y^Dei;gI;$O{CCXc3wV&~G%G}#CGT`|68J*rwe){?DwBSq48tT8h9HjWxy;9rl z5?PtVn^6p_ZQS!@gSVP3ZSzUXGBDPQnvSzmsFG*XC>^!=w`5gi#rqYtF7D?X5!l%T z+_sX%cbd}+a@y#~Xd0@rr920(hm;Q{x6N`7i6pd&70zF~0|g&Hldmg^og}2gUJPcQ zYtU}brl|whsc(Fiot~KLUWXzg($8-WOt3fD9(0jmQfcov*LI$<7Ny;0w1hA;>hybI zRG0PkBZ`DVNt(?2hDg!0*S6AnYDPv1-Q6=bJU}cx*L_S4TQ4@-aKS|RNb}cq5;w1|8BP4+TbqQAN)x$^bt0^qXe1PV{9SH zHNmRY^}@!SS=dR(Z5s^9a&6}Re09_NVO=~&p+GbXkZAy9N!S?nFiZX;Rn9?mGTx;` zEd(VEL}*O}y{ueJMy2L{Aaa+cCM?nOP%zPi>yQ*0Q&ZlpcOCDdshOp_OF72VNkG|i zsmOdzFB0(B(PB#VZZYF&83}A-{qT^WB|KQ&Z;@KG^}SBmIIm;keX^No8guZhAMw}= z$X0-Eq~`0g5)&8+fyD^LR@6~Wn#~h3aAEDqxK7wfh{p1grDUa`Xiz$g;uSN3Lr-(R zWnkFf2m5%->tPsT<-Q^Yh1JI*XI)+!v6!(k7= z{_-14#1RNh^W@+z+WGjD&}2&U;j@q0+CMbZ$xc(u zUF5a1NHv$Zt7Tj`@oL^DQ#ILT)7$Q>Intobag)N&|g+?-;*<3C}YyndUs|Yo0q_kyF}&H-5jJquRd(Q=Nno@ zm1aGgfA3LkhaA7$=#c3ndaxZem~&L}eb?V#V5{WyI_!yH`yy>&@Cm2*wfcSnV+`^< zx9P}Gt5Ume(>SlZ#B6LR@$4sL4Kw@wWAjhuJ-A32s*m@k$Ec{K?|V@~@T=FyLo$Ory_^;31SJkh1zeU?>U zsx(zpn~5B|XSh)5p67*|Kh(4|gpkHj)U>aDD#=BoGkn@SnJ;ra%yLCC5LiG6u|Jip z91k?5rgNLl6&OpQ@w7dRjQJ;HQRLv@(5zuDojsAs;kZOOK(HrUESt5&H;`f*qxoRx z7{~KF>RA`-HpdJ(YtvPFFQ_(9dhb=yqNt`?t-GNxIhev4q3%2^uYB;m?9|nA4gM~X?dd%$8BpV!Zw)v)^ttl!FzFljs zH4`;}h1Z!2u>wY+lxJdK;PESw#phZs$g8!%Caj#G?_e+6bH99ZFt5bN`oqNMxUs!A z6FZ-pB!e;~h|(8PDG&HlFu&9_ul4D}xmd!5j%yU5BdUgy#O6+erDT(p?CAndp`eM} zTc=n;c)Ry6Z9+~A?^tPz4TG0g_kq&|O=!oCKsX)uhmxXH*b3K6f@Zbw}OGYJ^kFSOL zxWR&Ywb$6mT7Zsqo!Q`h$!q>>A652yQ!EES@Q3n2Am|X9`d}SFdC0MThF0Zvb_+$X8$ZB88x46Dq9aL#`_sjGT!E>YImFK5=}}| z!Y(X15tSt|x?pVS!vL#|rba%w%KqZdv_3RUL5=&9uf`s^ijM+^(*(XPVO?%R5|_Ds zdq1_EB{}u<;dH8XHYNuZjapOPU5ZO`Qs%%9_>~i-Ow%k~@9S(UcHC^I(AD!D;G2pY zTcvh=?@$S)*VEF{14w^Vh6TV3wc+eX_K6M-QH<&2f3hLONx&1 z9|Q^t<&V9ekb=IRhS+9k!m8MEH1BD&v95F7O`Aujtni#lsL(Q86EglW!;+AmlAN-) zUx>RzL(NNJ%ubDNEc`D{&1L+g#{IVcnt9~;gVG+8c|xi0S=q(L^LA-8Llo7EE64Qc zT!GGlg&j~QGsf@$QJ0@3-!ojI^M?t*AB9wwS};ST9IdQeL-~X2Aw>Z=`>&#a!%i3j zfSAeK^c>Xwc0>o1=ou;hCV2opKrjYC@%*!Zk*|NDxE`P+AYS1QffB}_1aM_|Eexsa zUvM6P_z&>zc`o~_5rB&b^2=vIbRgIZ`HRo3|KT)Ja-V;L$A1)p1Pl+^g5dD?Yq#9S ze>e>(`M1Ba0dkCFg0vx92>t+nc`X2^(Lhr2{`*x2+z|x0Ld#z z%D#WifFuC$5Cmv~Hh&qNpD6&z)=)pX{wf%R@W@9mA&%KL8sz`aXPXitvci>udIA3r D2g?&Q literal 0 HcmV?d00001 diff --git a/doc/context/pl/admin/addons/help.html b/doc/context/pl/admin/addons/help.html new file mode 100644 index 000000000..fe63718df --- /dev/null +++ b/doc/context/pl/admin/addons/help.html @@ -0,0 +1,14 @@ +
+
Ogólne
+
Ta strona zarządza instalacją dodatków (zwanych też wtyczkami).
+
Zarządzanie repozytorium
+
Jeśli serwer internetowy ma niezbędne uprawnienia do zapisu, zobaczysz przycisk Zarządzaj repozytoriami, + co otwiera panel sterowania do zarządzania zainstalowanymi repozytoriami wtyczek. Te repozytoria są + przechowywane w katalogu extension/addon/[nazwa repozytorium]/. + Oficjalne repozytorium dodatków Hubzilla można dodać, wprowadzając adres URL repozytorium + https://framagit.org/hubzilla/addons.git + i wybierając nazwę repozytorium, na przykład oficjalne. Powinieneś zobaczyć to repozytorium na liście + podobnej do tej: +
+
+
diff --git a/doc/context/pl/admin/logs/help.html b/doc/context/pl/admin/logs/help.html new file mode 100644 index 000000000..1d79d6a8c --- /dev/null +++ b/doc/context/pl/admin/logs/help.html @@ -0,0 +1,20 @@ +
+
Ogólne
+
+ Ta strona umożliwia dostosowanie ustawień dziennika oraz przeglądanie + istniejącego dziennika. +
+
Ustawienia dziennika
+
+ Po włączeniu opcji debugowania informacje o zdarzeniach systemowych zaczną + być dołączane do pliku określonego w polu "Plik dziennika" (ścieżka jest + względna w stosunku do katalogu głównego huba, na przykład /var/www). + Zauważ, że ten plik musi być możliwy do zapisywania przez serwer WWW.
+
Pozion rejestracji
+
+ Opcja poziomu dziennika umożliwia ustawienie ilości informacji dołączanych + do pliku dziennika. Ostrzeżenie: zwiększenie tego poziomu może szybko + zwiększyć rozmiar pliku dziennika do ponad 100 MB, szczególnie w hubach z + więcej niż kilkoma członkami. +
+
\ No newline at end of file diff --git a/doc/context/pl/admin/queue/help.html b/doc/context/pl/admin/queue/help.html new file mode 100644 index 000000000..76277e0c2 --- /dev/null +++ b/doc/context/pl/admin/queue/help.html @@ -0,0 +1,7 @@ +
+
Ogólne
+
+ Statystyki kolejki pokazują, ile postów znajduje się w kolejce do dostarczenia + do innych hubów. Priorytet jest powiązany z liczbą nieudanych prób dostawy. +
+
\ No newline at end of file diff --git a/doc/context/pl/admin/security/help.html b/doc/context/pl/admin/security/help.html new file mode 100644 index 000000000..0e582e6b4 --- /dev/null +++ b/doc/context/pl/admin/security/help.html @@ -0,0 +1,8 @@ +
+
Ogólne
+
+ Ta strona zawiera różne ustawienia administratora związane z bezpieczeństwem. + Aby zapisać zmiany wprowadzone w tych ustawieniach, musisz nacisnąć przycisk + "Prześlij". +
+
\ No newline at end of file diff --git a/doc/context/pl/appman/help.html b/doc/context/pl/appman/help.html new file mode 100644 index 000000000..867b5b482 --- /dev/null +++ b/doc/context/pl/appman/help.html @@ -0,0 +1,10 @@ +
+
Ogólne
+
+ Edytowanie poszczególnych właściwości wybranej aplikacji. Kategorie umożliwiają + sortowanie aplikacji, aby ułatwić znajdowanie ich na liście. Wsparcie dla + niestandardowych aplikacji, które Ty lub Twój administrator możecie wybrać, + obejmuje pola, takie jak ""Cena aplikacji"" i "Lokalizacja zakupu"", które nie + są zastosowane w podstawowych aplikacjach Hubzilla. +
+
\ No newline at end of file diff --git a/doc/context/pl/apps/edit/help.html b/doc/context/pl/apps/edit/help.html new file mode 100644 index 000000000..42db07d17 --- /dev/null +++ b/doc/context/pl/apps/edit/help.html @@ -0,0 +1,7 @@ +
+
Ogólne
+
+ Edytowanie lub usuwanie aplikacje za pomocą przycisków sterowania widocznych + na liście obok każdej ikony aplikacji. +
+
\ No newline at end of file diff --git a/doc/context/pl/apps/help.html b/doc/context/pl/apps/help.html new file mode 100644 index 000000000..7ad3bef5c --- /dev/null +++ b/doc/context/pl/apps/help.html @@ -0,0 +1,15 @@ +
+
Ogólne
+
+ Ta strona pokazuje, jakie aplikacje są dostępne na Twoim kanale, w tym zarówno + aplikacje podstawowe, jak i te dostarczane przez dodatki. Aby dodać aplikację + do menu aplikacji oznacz gwiazdką + aplikację na poniższej liście. +
+
Zarządzanie aplikacjami
+
+ Naciśnij przycisk "Zarządzaj aplikacjami", aby otworzyć stronę, na której + możesz edytować nazwę, kategorie i inne właściwości swoich aplikacji. +
+
\ No newline at end of file diff --git a/doc/context/pl/cards/help.html b/doc/context/pl/cards/help.html new file mode 100644 index 000000000..f60d66f1c --- /dev/null +++ b/doc/context/pl/cards/help.html @@ -0,0 +1,31 @@ +
+
Ogólne
+
+ Karty reprezentują trwały obszar współpracy, który jest niezależny od + strumienia społecznościowego. Są nieco lżejsze niż strony internetowe i wiki, + dzięki czemu zapewniają szybką organizację informacji i mają tę zaletę, że + umożliwiają współpracę i komentowanie. Są dobrze przystosowane do pomocy w + organizowaniu złożonych zadań, w przypadku których często pojawiają się + aktualizacje i informacje zwrotne. +
+
Dodanie karty
+
+ Tworzenie nowej karty jest bardzo podobne do tworzenia nowego postaa.

+
    +
  • + Nazwa linku do strony: nazwa linku do strony jest nazwą + karty dla statycznego adresu URL +
  • +
  • + Tytuł: Tytuł jest wyświetlany u góry karty +
  • +
  • + Kategorie: Jeśli na swoim kanale masz włączoną + funkcjonalność kategorii postów , + możesz dodawać kategorie do karty. Te kategorie zapełniają listę + Kategorie na lewym panelu i umożliwiają filtrowanie + kolekcji kart. +
  • +
+
+
diff --git a/doc/context/pl/channel/help.html b/doc/context/pl/channel/help.html new file mode 100644 index 000000000..bd454c361 --- /dev/null +++ b/doc/context/pl/channel/help.html @@ -0,0 +1,13 @@ +
+
Ogólne
+
+ To jest strona główna kanału. Jest ona podobna do "ściany" profilu w kontekście + sieci społecznościowej. Posty utworzone w kanale są wyświetlane zgodnie z + uprawnieniami obserwatora do oglądania treści. +
+
Tworzenie posta
+
+ Jeśli masz uprawnienia do tworzenia postów na stronie kanału, u góry zobaczysz + edytor postów. +
+
diff --git a/doc/context/pl/chat/help.html b/doc/context/pl/chat/help.html new file mode 100644 index 000000000..3cd4e346f --- /dev/null +++ b/doc/context/pl/chat/help.html @@ -0,0 +1,19 @@ +
+
Ogólne
+
+ Twórz pokoje rozmów i wykorzystuj je do komunikacji w czasie rzeczywistym, + używając standardowego systemu uprawnień Hubzilla do kontroli dostępu do + pokojów rozmów. +
+
Tworzenie nowego pokoju rozmów
+
+ Użyj przycisku "Utwórz nowy", aby utworzyć nowy pokój rozmów. Wpisz nazwę i + jak długo wiadomości mają być przechowywane. +
+
Czatowanie
+
+ Wpisz wiadomość w polu wiadomości i naciśnij "Prześlij". Możesz ustawić status, + wybierając przycisk menu pokoju rozmów sieciowych obok przycisku "Wyślij". + Inne osoby "w pokoju"" są widoczne w panelu bocznym w panelu „Członkowie czatu”. +
+
\ No newline at end of file diff --git a/doc/context/pl/cloud/help.html b/doc/context/pl/cloud/help.html new file mode 100644 index 000000000..419ed01ee --- /dev/null +++ b/doc/context/pl/cloud/help.html @@ -0,0 +1,17 @@ +
+
Ogólne
+
+ Ta strona wyświetla pliki "w chmurze" kanału. To co widi przeglądajacy zależy + od jego indywidualnych uprawnień do plików, które ustawia właściciel kanału. + Jeśli masz uprawnienia do tworzenia i przesyłania plików, zobaczysz przyciski + kontrolne nad listą plików. +
+
Karty zawartości kanału
+
+ Karty zawarości kanału to linki do innych treści publikowanych przez kanał. + Karta Informacje prowadzi do profilu kanału. Karta Zdjęcia + prowadzi do galerii zdjęć kanału. Zakładka Pliki zawiera linki do + ogólnych plików udostępnionych do publikacji w kanale. +
+
\ No newline at end of file diff --git a/doc/context/pl/connections/help.html b/doc/context/pl/connections/help.html new file mode 100644 index 000000000..837184334 --- /dev/null +++ b/doc/context/pl/connections/help.html @@ -0,0 +1,24 @@ +
+
Ogólne
+
+ Ta strona wyświetla listę wszystkich połączeń tego kanału. Lista można + posortować i przefiltrować + za pomocą przycisku menu obok przycisku wyszukiwania . +
+
Szczegóły połączenia
+
+ Każdy wpis na liście przedstawia szczegóły określonego połączenia. + Przezroczysty obraz awatara wskazuje na zarchiwizowane połączenie. +
+
Stan połączenie
+
+ Połączenie może mieć różne stany: +
    +
  • Zarchiwizowane
  • +
  • Zignorowane
  • +
  • Zablokowane
  • +
  • Ukryte
  • +
+
+
\ No newline at end of file diff --git a/doc/context/pl/connections/ifpending/help.html b/doc/context/pl/connections/ifpending/help.html new file mode 100644 index 000000000..b2d05947a --- /dev/null +++ b/doc/context/pl/connections/ifpending/help.html @@ -0,0 +1,24 @@ +
+
Ogólne
+
+ Ta strona wyświetla listę wszystkich połączeń tego kanału. Lista można + posortować i przefiltrować + za pomocą przycisku menu obok przycisku wyszukiwania. +
+
Szczegóły połączenia
+
+ Każdy wpis na liście przedstawia szczegóły określonego połączenia. + Przezroczysty obraz awatara wskazuje na zarchiwizowane połączenie. +
+
Stan połączenia
+
+ Połączenie może mieć różne stany: +
    +
  • Zarchiwizowane
  • +
  • Zignorowane
  • +
  • Zablokowane
  • +
  • Ukryte
  • +
+
+
\ No newline at end of file diff --git a/doc/context/pl/connedit/help.html b/doc/context/pl/connedit/help.html new file mode 100644 index 000000000..31a47c1fc --- /dev/null +++ b/doc/context/pl/connedit/help.html @@ -0,0 +1,44 @@ +
+
Ogólne
+
+ Ta strona umożliwia zmianę lub edycję dowolnych indywidualnych ustawień dla + określonego połączenia lub całkowite usunięcie połączenia. Być może dotarłeś + do tej strony po utworzeniu lub zatwierdzeniu nowego połączenia. Jeśli tak, + nie musisz nic robić. Twoje połączenie zostało już nawiązane. + Możesz chcieć dodać je do grupy lub dostosować specjalne + uprawnienia, a ta strona jest prezentowana, abyś mógł to zrobić przy okazji + ustanowienie nowego połączenia. +
+
Narzędzia do połączeń
+
+ Menu naarzędzi połączeń + umożliwia dostęp do kilku ustawień. Wyświetl profil, wyświetl ostatnią aktywność, + odśwież uprawnienia, ustaw lub zresetuj flagi (blokuj, ignoruj, archiwizuj, ukryj) + i usuń połączenie. +
+
Grupy prywatności
+
+ Każde połączenie może być przypisane do jednej lub więcej grup prywatności + w celu grupowania kolekcji znajomych z dostępem do określonych postów, + multimediów i innych treści. Możesz dodać je tutaj do istniejącej grupy + prywatności lub utworzyć nową grupę prywatności. Po dodaniu ich do istniejącej + grupy akcja jest natychmiastowa i nie musisz przesyłać formularza. +
+
Indywidualne uprawniena
+
+ Udzielanie uprawnień jest zwykle automatyczne i nie wymaga żadnych działań + z Twojej strony. Możesz jednak chcieć dostosować określone uprawnienia dla + tego połączenia, które są inne niż dla innych. +
+
Ustawienia specyficznych funkcji
+
+ Szereg indywidualnych ustawień jest kontrolowanych za pomocą dodatkowych + funkcji, które mogą, ale nie muszą być aktywowane na Twoim hubie lub na Twoim + kanale. Kilka opcjonalnych funkcji ma ustawienia dla każdego połączenia, + które można ustawić na tej stronie za pomocą dodatkowych zakładek formularza. +
+
diff --git a/doc/context/pl/events/help.html b/doc/context/pl/events/help.html new file mode 100644 index 000000000..542661fa5 --- /dev/null +++ b/doc/context/pl/events/help.html @@ -0,0 +1,18 @@ +
+
Ogólne
+
+ Na tej stronie wyświetlany jest kalendarz wydarzeń, który należy do Ciebie + oraz kalendarze, które zostały Ci udostępnione z innych kanałów. + /dd> +
Widok kalendarza
+
+ Kalendarz może być wyświetlany w trybie miesiąca, tygodnia lub dnia, przy użyciu + opcji widocznych na panelu bocznym. +
+
Eksport/Import
+
+ Eksportuj lub importuj wydarzenia kalendarza przy użyciu plików w standardowym + formacie iCalendar (.ics). +
+
\ No newline at end of file diff --git a/doc/context/pl/mail/help.html b/doc/context/pl/mail/help.html new file mode 100644 index 000000000..b8497709c --- /dev/null +++ b/doc/context/pl/mail/help.html @@ -0,0 +1,25 @@ +
+
Ogólne
+
+ Wiadomości wyświetlane w poczcie prywatnej są widoczne tylko dla Ciebie i + pojedynczego odbiorcy. +
+
Widok łączony
+
+ Wybór opcji Widok łączony spowoduje wyświetlanie całych rozmów w ciągłym + wątku. Dostępne rozmowy są wyświetlane poniżej menu w panelu bocznym. +
+
Skrzynka odbiorcza/nadawcza
+
+ Poszczególne wysłane wiadomości można wyświetlić, wybierając opcję + Skrzynka nadawcza, a wiadomości przychodzące - za pomocą filtru + Skrzynka odbiorcza. +
+
Nowa wiadomość
+
+ Poszczególne wiadomości mają raporty doręczenia, które można wyświetlić za + pomocą rozwijanego menu. Wysłane wiadomości można również odwołać, posługując + się tym samym menu, co może uniemożliwić odbiorcy przegląd takich wiadomości, + jeśli jeszcze ich nie przeczytał. +
+
\ No newline at end of file diff --git a/doc/context/pl/network/help.html b/doc/context/pl/network/help.html new file mode 100644 index 000000000..cbc6c035c --- /dev/null +++ b/doc/context/pl/network/help.html @@ -0,0 +1,36 @@ +
+
Ogólne
+
+ Strona strumienia sieciowego wyświetla strumień postów i rozmów, zwykle + uporządkowanych według ostatnio zaktualizowanych. Jest to strona wysoce konfigurowalna. +
+
Tworzenie posta
+
+ U góry strony znajduje się pole tekstowe z napisem "Udostępnij". Kliknięcie + tego pola otwiera nowy edytor postówów. Edytor postów można dostosowywać, ale + podstawowy edytor udostępnia pola dla treści posta i opcjonalnego tytułu. + Przyciski poniżej obszaru tekstowego po lewej stronie zapewniają skróty do + formatowania tekstu i wstawiania linków, obrazów i innych danych do posta. + Przyciski po prawej stronie zapewniają podgląd posta, ustawienia uprawnień do + publikowania oraz przycisk Prześlij do wysłania posta. +
+
Grupy prywatności
+
+ Utworzone grupy prywatności są wyświetlane w panelu bocznym. Wybranie ich + powoduje filtrowanie postów do tych utworzonych przez kanały w wybranej grupie. +
+
Uprawnienia do posta
+
+ Lista kontroli dostępu (ACL) służy do określania, kto może zobaczyć Twój nowy + post. Naciśnięcie przycisku ACL obok przycisku Prześlij spowoduje wyświetlenie + okna dialogowego, w którym możesz wybrać kanały albo grupy prywatności, które + będą widzieć post. Możesz także wybrać, komu wyraźnie odmówiono dostęp. + Załóżmy na przykład, że planujesz przyjęcie niespodziankę dla znajomego. + Możesz wysłać zaproszenie do wszystkich w swojej grupie Znajomi + oprócz znajomego, którego zaskakujesz. W tym przypadku "pokazujesz" + go grupie Znajomi, ale "nie pokazujesz" tej jednej osobie. +
+
\ No newline at end of file diff --git a/doc/context/pl/photos/help.html b/doc/context/pl/photos/help.html new file mode 100644 index 000000000..e9ff7ee9d --- /dev/null +++ b/doc/context/pl/photos/help.html @@ -0,0 +1,15 @@ +
+
Ogólne
+
+ Na tej stronie wyświetlane są albumy ze zdjęciami opublikowane w kanale. + Widoczność obrazów zależy od indywidualnych uprawnień odwiedzającego do tych zdjęć. +
+
Zakładki treści kanału
+
+ Karty treści kanału to odnośniki do innych treści publikowanych przez kanał. + Karta Informacje prowadzi do profilu kanału. Karta Zdjęcia + prowadzi do galerii zdjęć kanału. Zakładka Pliki zawiera linki do + ogólnych plików udostępnionych w kanale. +
+
\ No newline at end of file diff --git a/doc/context/pl/profile/help.html b/doc/context/pl/profile/help.html new file mode 100644 index 000000000..9ec5b0e73 --- /dev/null +++ b/doc/context/pl/profile/help.html @@ -0,0 +1,17 @@ +
+
Ogólne
+
+ To jest strona profilu kanału. Zwykle wyświetla informacje opisujące kanał. + Jeśli na przykład kanał reprezentuje osobę w sieci społecznościowej, profil + może zawierać informacje kontaktowe i inne dane osobowe tej osoby. Kanały mogą + mieć wiele profili, przy czym wyświetlany profil zależy od obserwatora. +
+
Zakładki treści kanału
+
+ Karty treści kanału to odnośniki do innych treści publikowanych przez kanał. + Karta Informacje prowadzi do profilu kanału. Karta Zdjęcia + prowadzi do galerii zdjęć kanału. Zakładka Pliki zawiera linki do ogólnych + plików opublikowanych i udostępnionych w kanale. +
+
\ No newline at end of file diff --git a/doc/context/pl/profiles/help.html b/doc/context/pl/profiles/help.html new file mode 100644 index 000000000..18953a829 --- /dev/null +++ b/doc/context/pl/profiles/help.html @@ -0,0 +1,49 @@ +
+
Ogólne
+
+ Po zarejestrowaniu konta w matrycy, utworzony został również + profil i kanał. +
+
Konto
+
+ Masz teraz jedno konto. Składa się z Twojego adresu e-mail i + hasła. Za pomocą swojego konta uzyskujesz dostęp do profili i kanałów. + Pomyśl o swoim koncie jak o sposobie uwierzytelniania w jednym + serwisie Hubzilla. To pozwala wykonywać różne czynności, takie jak + tworzenie profili i kanałów, za pomocą których można łączyć się z + innymi osobami. +
+
Profil
+
+ Z pewnością już zarejestrowałeś/zarejestrowałaś się w innych usługach + internetowych, takich jak fora lub społeczności internetowe. W nich + wszystkich trzeba było podać pewne informacje o sobie, takie jak data + urodzenia, kraj, wiek i upodobania. W przeciwieństwie do nich + usługi Hubzilla daje Ci przewagę tworzenia wielu profili . + W ten sposób możesz rozróżniać profil przeznaczone specjalnie dla + wszystkich (Twój profil publiczny), od profili przeznaczonych dla + współpracowników, rodziny czy partnera. Potraktuj swój profil + jak pojemnik zawierający podstawowe informacje o Tobie, jakie + przekazujesz innym osobom. +
+
Kanał
+
+ Podczas rejestracji utworzyłeś/utworzyłaś swój pierwszy kanał. + Tak, poza kilkoma profilami, również możesz mieć kilka kanałów. Na + początku może to być nieco zagmatwane, ale wyjaśnijmy to. Już masz + utworzony jeden kanał. Możesz używać go do publicznego komunikowania + się z osobami w życiu codziennym. Lecz być może jesteś zapalonym + czytelnikiem książek a wielu ludzi się tym nudzi. Otwierasz więc + drugi kanał dla miłośników książek, gdzie wszyscy mogą rozmawiać + o książkach tyle, ile zechcą. Oczywiście jest to nowy strumień postów, + z nowym profilem (... lub nowymi profilami) i zupełnie z innymi + kontaktami. Niektóre połączenia mogą istnieć w obu kanałach, ale będą + takie, które będą występować wyłącznie w jednym z nich. Ty po prostu + przełączaj się między nimi tak, jak w prawdziwym życiu, gdy rozmawiasz + z ludźmi, których spotykasz na ulicy lub z osobami, które spotykasz + specjalnie, aby porozmawiać o książkach. Możesz nawet połączyć się + ze sobą lub lepiej: ze swoim innym kanał. :) Pomyśl o kanałach + jak o różnych przestrzeniach poświęconych różnym tematom, w których + spotykasz się z różnymi osobami. +
+
\ No newline at end of file diff --git a/doc/context/pl/settings/account/help.html b/doc/context/pl/settings/account/help.html new file mode 100644 index 000000000..0507c73cf --- /dev/null +++ b/doc/context/pl/settings/account/help.html @@ -0,0 +1,49 @@ +
+
Ogólne
+
+ Po zarejestrowaniu konta w matrycy, utworzony został również + profil i kanał. +
+
Konto
+
+ Masz teraz jedno konto. Składa się z Twojego adresu e-mail i + hasła. Za pomocą swojego konta uzyskujesz dostęp do profili i kanałów. + Pomyśl o swoim koncie jak o sposobie uwierzytelniania w jednym + serwisie Hubzilla. To pozwala wykonywać różne czynności, takie jak + tworzenie profili i kanałów, za pomocą których można łączyć się z + innymi osobami. +
+
Profil
+
+ Z pewnością już zarejestrowałeś/zarejestrowałaś się w innych usługach + internetowych, takich jak fora lub społeczności internetowe. W nich + wszystkich trzeba było podać pewne informacje o sobie, takie jak data + urodzenia, kraj, wiek i upodobania. W przeciwieństwie do nich + usługi Hubzilla daje Ci przewagę tworzenia wielu profili . + W ten sposób możesz rozróżniać profil przeznaczone specjalnie dla + wszystkich (Twój profil publiczny), od profili przeznaczonych dla + współpracowników, rodziny czy partnera. Potraktuj swój profil + jak pojemnik zawierający podstawowe informacje o Tobie, jakie + przekazujesz innym osobom. +
+
Kanał
+
+ Podczas rejestracji utworzyłeś/utworzyłaś swój pierwszy kanał. + Tak, poza kilkoma profilami, również możesz mieć kilka kanałów. Na + początku może to być nieco zagmatwane, ale wyjaśnijmy to. Już masz + utworzony jeden kanał. Możesz używać go do publicznego komunikowania + się z osobami w życiu codziennym. Lecz być może jesteś zapalonym + czytelnikiem książek a wielu ludzi się tym nudzi. Otwierasz więc + drugi kanał dla miłośników książek, gdzie wszyscy mogą rozmawiać + o książkach tyle, ile zechcą. Oczywiście jest to nowy strumień postów, + z nowym profilem (... lub nowymi profilami) i zupełnie z innymi + kontaktami. Niektóre połączenia mogą istnieć w obu kanałach, ale będą + takie, które będą występować wyłącznie w jednym z nich. Ty po prostu + przełączaj się między nimi tak, jak w prawdziwym życiu, gdy rozmawiasz + z ludźmi, których spotykasz na ulicy lub z osobami, które spotykasz + specjalnie, aby porozmawiać o książkach. Możesz nawet połączyć się + ze sobą lub lepiej: ze swoim innym kanał. :) Pomyśl o kanałach + jak o różnych przestrzeniach poświęconych różnym tematom, w których + spotykasz się z różnymi osobami. +
+
\ No newline at end of file diff --git a/doc/context/pl/settings/channel/help.html b/doc/context/pl/settings/channel/help.html new file mode 100644 index 000000000..0507c73cf --- /dev/null +++ b/doc/context/pl/settings/channel/help.html @@ -0,0 +1,49 @@ +
+
Ogólne
+
+ Po zarejestrowaniu konta w matrycy, utworzony został również + profil i kanał. +
+
Konto
+
+ Masz teraz jedno konto. Składa się z Twojego adresu e-mail i + hasła. Za pomocą swojego konta uzyskujesz dostęp do profili i kanałów. + Pomyśl o swoim koncie jak o sposobie uwierzytelniania w jednym + serwisie Hubzilla. To pozwala wykonywać różne czynności, takie jak + tworzenie profili i kanałów, za pomocą których można łączyć się z + innymi osobami. +
+
Profil
+
+ Z pewnością już zarejestrowałeś/zarejestrowałaś się w innych usługach + internetowych, takich jak fora lub społeczności internetowe. W nich + wszystkich trzeba było podać pewne informacje o sobie, takie jak data + urodzenia, kraj, wiek i upodobania. W przeciwieństwie do nich + usługi Hubzilla daje Ci przewagę tworzenia wielu profili . + W ten sposób możesz rozróżniać profil przeznaczone specjalnie dla + wszystkich (Twój profil publiczny), od profili przeznaczonych dla + współpracowników, rodziny czy partnera. Potraktuj swój profil + jak pojemnik zawierający podstawowe informacje o Tobie, jakie + przekazujesz innym osobom. +
+
Kanał
+
+ Podczas rejestracji utworzyłeś/utworzyłaś swój pierwszy kanał. + Tak, poza kilkoma profilami, również możesz mieć kilka kanałów. Na + początku może to być nieco zagmatwane, ale wyjaśnijmy to. Już masz + utworzony jeden kanał. Możesz używać go do publicznego komunikowania + się z osobami w życiu codziennym. Lecz być może jesteś zapalonym + czytelnikiem książek a wielu ludzi się tym nudzi. Otwierasz więc + drugi kanał dla miłośników książek, gdzie wszyscy mogą rozmawiać + o książkach tyle, ile zechcą. Oczywiście jest to nowy strumień postów, + z nowym profilem (... lub nowymi profilami) i zupełnie z innymi + kontaktami. Niektóre połączenia mogą istnieć w obu kanałach, ale będą + takie, które będą występować wyłącznie w jednym z nich. Ty po prostu + przełączaj się między nimi tak, jak w prawdziwym życiu, gdy rozmawiasz + z ludźmi, których spotykasz na ulicy lub z osobami, które spotykasz + specjalnie, aby porozmawiać o książkach. Możesz nawet połączyć się + ze sobą lub lepiej: ze swoim innym kanał. :) Pomyśl o kanałach + jak o różnych przestrzeniach poświęconych różnym tematom, w których + spotykasz się z różnymi osobami. +
+
\ No newline at end of file diff --git a/doc/context/pl/settings/features/help.html b/doc/context/pl/settings/features/help.html new file mode 100644 index 000000000..a33e546f4 --- /dev/null +++ b/doc/context/pl/settings/features/help.html @@ -0,0 +1,35 @@ +
+
Ogólne
+
+ Ta strona umożliwia skonfigurowanie ustawień dla wielu dodatkowych funkcji Hubzilli. +
+
Główne cechy
+
+ Ogólne ustawienia funkcji zawierają opcje związane z Twoim kanałem, takie jak + hosting strony internetowej i wiki. +
+
Funkcje kompozycji postów
+
+ Funkcje kompozycji postów zapewniają dodatkowe opcje i możliwości podczas + tworzenia nowych postów. +
+
Sieć i fitrowanie strumienia
+
+ Te ustawienia modyfikują funkcje związane z filtrowaniem i kontrolowaniem widoku + przychodzących postów. +
+
Narzędzia postów i komentarzy
+
+ Ustawienia te zapewniają dodatkowe narzędzia do kategoryzowania postów + i umożliwiają dodatkowe metody komentowania, takie jak emoji lub tagowanie + społecznościowe. +
+
\ No newline at end of file diff --git a/doc/context/pl/settings/tokens/help.html b/doc/context/pl/settings/tokens/help.html new file mode 100644 index 000000000..cebe30ced --- /dev/null +++ b/doc/context/pl/settings/tokens/help.html @@ -0,0 +1,43 @@ +
+
Tokeny dostępu gościa
+
+ Aby ułatwić udostępnianie prywatnych zasobów osobom niebędącym członkami + lub członkami sfederyzowanych węzłów (hubów) i zapewnić zabezpieczone + wykrywaniem danych identyfikacyjnych, Hubzilla zawiera mechanizm tworzenia + i zarządzania tymczasowymi ("jednorazowymi") loginami, zwanymi "tokenami + dostępu Zot”. Tokeny te, będące swojego rodzaju danymi uwierzytelniającymi, + mogą być używane do uwierzytelniania w serwisie Hubzilla wyłącznie w celu + uzyskania dostępu do uprzywilejowanych lub kontrolowanych zasobów (pliki, + zdjęcia, posty, strony internetowe, pokoje rozmów itp.). +
+
Utworzenie tokenu
+
+ Formularz do tworzenia i edycji akceptuje trzy parametry: czytelną dla + człowieka nazwę, hasło lub token dostępu oraz opconalną okres ważności. + Po wygaśnięciu token dostępu nie jest już ważny, nie może być już używany + i będzie automatycznie usunięte z listy kont tymczasowych. Pole hasła + w formularzach tworzenia i edycji wyświetla tekst tokenu dostępu, a nie + zasłonięte hasło. +
+
Udostępnienie tokenu
+
+ Nie jest narzucony sposób udostępniania tych tokenów innym osobom. Można + użyć dowolnej metody komunikacji. Wszystkie utworzone tokeny są dodawane + do selektora listy kontroli dostępu i mogą być używane wszędzie tam, gdzie + są dostępne listy kontroli dostępu. + + Przykład: Odwiedzający nawiguje w przeglądarce do Twojąej witryny. + Ma podany przez Ciebie token dostępu i próbuje odwiedzić jeden z Twoich + albumów ze zdjęciami (który jest ograniczony do przeglądania tylko przez + Ciebie i jedną tymczasową tożsamość). Odmowa dostępu. + + Odwiedzający wybiera teraz opcję „Zaloguj się” z paska nawigacji menu. + To wyświetli stronę logowania. Wpisuje tam nazwę i hasło, które podałeś + i może teraz przeglądać zabezpieczony album ze zdjęciami. + + Alternatywnie możesz udostępnić łącze do chronionego pliku, dodając parametr + "&zat=abc123" do adresu URL, gdzie ciąg "abc123" to token dostępu lub + hasło do tymczasowego logowania. Nie są wymagane dalsze negocjacje + a żądany zasób zostanie wyświetlony. +
+
\ No newline at end of file diff --git a/doc/context/pl/webpages/help.html b/doc/context/pl/webpages/help.html new file mode 100644 index 000000000..64858fcf6 --- /dev/null +++ b/doc/context/pl/webpages/help.html @@ -0,0 +1,24 @@ +
+
Ogólne
+
+ Możesz tworzyć modułowe, rozpoznające tożsamość witryny internetowe, składające + się z elementów, które można udostępniać. +
+
Strony
+
+ Tutaj znajduje się lista Twoich "stron" z przypisanymi adresami URL, + pod którymi osoby mogą je odwiedzać. Struktura stron jest zwykle opisywana + przez powiązany układ, a ich zawartość jest tworzona ze zbioru bloków. +
+
Narzędzia do przenoszenia stron internetowych
+
+ Narzędzia do przenoszenia witryn umożliwiają importowanie i eksportowanie wielu + elementów strony internetowej (stron, układów, bloków). Możesz zaimportować + te alementy albo z przesłanego pliku ZIP, albo z istniejącego folderu plików + w chmurze. Możesz je wyeksportować do pliku zip zawierającego wybraną + grupę elementów strony internetowej w formie zgodnej z narzędziem do importowania + lub możesz wyeksportować bezpośrednio do folderu plików w chmurze. + Czytaj więcej ... +
+
\ No newline at end of file diff --git a/doc/context/pl/wiki/help.html b/doc/context/pl/wiki/help.html new file mode 100644 index 000000000..6aa6a7192 --- /dev/null +++ b/doc/context/pl/wiki/help.html @@ -0,0 +1,29 @@ +
+
Ogólne
+
+ Każda wiki to zbiór stron utworzonych jako pliki tekstowe w formacie Markdown. +
+
Wykaz Wiki
+
+ Strony wiki należące do kanału, do przeglądania którego masz uprawnienia, + są wymienione w panelu bocznym. +
+
Historia strony
+
+ Zapisywana jest każda wersja strony, aby umożliwić szybkie przywrócenie. + Kliknij kartę Historia, aby wyświetlić historię zmian strony, w tym + datę i autora każdej z nich. Przycisk przywróć załaduje wybraną wersję, ale + nie zapisze automatycznie strony. +
+
Strony
+
+ Lista stron wiki znajduje się w panelu Strony Wiki. Przed zapisaniem + zmian na stronie za pomocą rozwijanego menu Strona można + wprowadzić + własny komunikat, który będzie wyświetlany w + Historii + strony przeglądarki wraz z wersją. +
+
diff --git a/doc/hidden_configs.bb b/doc/hidden_configs.bb index 42c9e67b8..27ea415bd 100644 --- a/doc/hidden_configs.bb +++ b/doc/hidden_configs.bb @@ -62,7 +62,7 @@ Options are: [*= system.email_notify_icon_url ] URL of image (32x32) to display in email notifications (HTML bodies). [*= system.expire_delivery_reports ] Expiration in days for delivery reports - default 10 [*= system.expire_limit ] Don't expire any more than this number of posts per channel per expiration run to keep from exhausting memory. Default 5000. - [*= system.filesystem_storage_thumbnails ] If '1', use filesystem instead SQL database to store thumbnails. Default is '0'. Introduced in 4.2 + [*= system.photo_storage_type] If '1', use filesystem instead SQL database to store thumbnails. Default is '0'. Introduced in 4.2 [*= system.hidden_version_siteinfo ] If true, do not report the software version on siteinfo pages (system.hide_version also hides the version on these pages, this setting *only* hides the version on siteinfo pages). [*= system.hide_help ] Don't display help documentation link in nav bar [*= system.hide_in_statistics ] Tell the red statistics servers to completely hide this hub in hub lists. diff --git a/doc/macros/pl/addons_footer.bb b/doc/macros/pl/addons_footer.bb new file mode 100644 index 000000000..f16d5cce3 --- /dev/null +++ b/doc/macros/pl/addons_footer.bb @@ -0,0 +1,2 @@ +Return to the [zrl=[baseurl]/help/addons]Dokumentacja dodatków[/zrl] +Return to the [zrl=[baseurl]/help/main]Główna dokumentacja[/zrl] diff --git a/doc/macros/pl/cloud_footer.bb b/doc/macros/pl/cloud_footer.bb new file mode 100644 index 000000000..a9db7f819 --- /dev/null +++ b/doc/macros/pl/cloud_footer.bb @@ -0,0 +1,2 @@ +Return to the [zrl=[baseurl]/help/cloud]Dokumentacja chmury[/zrl] +Return to the [zrl=[baseurl]/help/main]Główna strona dokumentacji[/zrl] diff --git a/doc/macros/pl/main_footer.bb b/doc/macros/pl/main_footer.bb new file mode 100644 index 000000000..8bf25fed5 --- /dev/null +++ b/doc/macros/pl/main_footer.bb @@ -0,0 +1 @@ +Powróć do [zrl=[baseurl]/help/main]głównej strony dokumentacji[/zrl] diff --git a/doc/macros/pl/troubleshooting_footer.bb b/doc/macros/pl/troubleshooting_footer.bb new file mode 100644 index 000000000..19328ad64 --- /dev/null +++ b/doc/macros/pl/troubleshooting_footer.bb @@ -0,0 +1,2 @@ +[zrl=[baseurl]/help/troubleshooting]Dokumentacja dotycząca rozwiązywania problemów[/zrl] +[zrl=[baseurl]/help/troubleshooting]Główna strona dokumentacji[/zrl] diff --git a/doc/pl/AdvancedSearch.md b/doc/pl/AdvancedSearch.md new file mode 100644 index 000000000..f76ddf99e --- /dev/null +++ b/doc/pl/AdvancedSearch.md @@ -0,0 +1,52 @@ +Zaawansowane przeszukiwanie katalogu +==================================== + +Zaawansowane wyszukiwanie w katalogu jest włączone w "Trybie eksperta" na stronie Ustawienia > Dodatkowe funkcje. + +Na stronie katalogu, w widżecie "Znajdź kanały" (zazwyczaj na pasku bocznym) widoczna jest opcja "Zaawansowane". Kliknięcie jej otwiera kolejne pole wyszukiwania umożliwiające wprowadzenie żądań wyszukiwania zaawansowanego. + +Zaawansowane żądania zawierają: + +* name=xxx +[Nazwa kanału zawiera xxx] + +* address=xxx +[Adres kanału (webbie) zawiera xxx] + +* locale=xxx +[Lokalizaja (zazwyczaj 'city') zawiera xxx] + +* region=xxx +[Region (stan/terytorium) zawiera xxx] + +* postcode=xxx +[Kod pocztowy lub kod ZIP zawiera xxx] + +* country=xxx +[Nazwa kraju zawiera xxx] + +* gender=xxx +[Płeć zawiera xxx] + +* marital=xxx +[Stan cywilny zawiera xxx] + +* sexual=xxx +[Preferencje seksualne zawierają xxx] + +* keywords=xxx +[Słowa kluczowe zawierają xxx] + +Istnieje wiele powodów, dla których dopasowanie może nie zwrócić tego, czego szukasz, ponieważ wiele kanałów nie podaje szczegółowych informacji w swoim domyślnym (publicznym) profilu, a wiele z tych pól umożliwia wprowadzanie dowolnego tekstu w kilku językach - i sprawia to trudność w dokładnym dopasowaniu. Na przykład możesz uzyskać lepszy wynik, chcąc znaleźć kogoś w USA, nie za pomocą frazy `'country = u'` (bo pojawią sie też kanały z Niemiec, Bułgarii i Australii), a za pomocą fraz US, U.S.A, USA, United States, itd. + +Przyszłe wersje tego narzędzia mogą już działać lepiej. + +Żądania można łączyć ze sobą za pomocą operatorów `and`, `or` lub `and not`. + +Frazy zawierające spacje należy ujmowć w cudzysłowy. + +Przykład: + + name="charlie brown" and country=canada and not gender=female + +#include doc/macros/pl/main_footer.bb; diff --git a/doc/pl/Features.md b/doc/pl/Features.md new file mode 100644 index 000000000..1977df379 --- /dev/null +++ b/doc/pl/Features.md @@ -0,0 +1,107 @@ +Dodatkowe możliwości +==================== + +Domyślny interfejs $Projectname został zaprojektowany tak, aby był dobrze uporządkowany. Istnieje ogromna liczba dodatkowych funkcji (niektóre są bardzo przydatne), które można włączyć i jak najlepiej wykorzystać. Można je znaleźć pod klikając link [Dodatkowe funkcje](settings/features) na stronie [Ustawienia](settings). + +**Wygaśnięcie treści** + +Usuwanie postów, komentarzy albo prywatnych wiadomości w określonym terminie. Do edytora postów zostaje dodany dodatkowy przycisk, za pomoca któreg można ustawić termin wygaśnięcia publikacji. Zwykle data jest wyświetlana w formacie „rrrr-mm-dd gg: mm”, ale w języku angielskim ma się nieco większą swobodę i można używać większości rozpoznawalnych odniesień do dat, takich jak "next Thursday" czy "+1 day". W określonym terminie (podanym lub zajmującym około dziesięciu minut, w zależności od częstotliwości sprawdzania zdalnego systemu) element jest usuwany. + +**Wiele profili** + +Możliwość tworzenia wielu profili, które są widoczne tylko dla określonych osób lub grup. Twój profil domyślny może być widoczny dla każdego, ale wszystkie profile dodatkowe mogą zawierać inne lub dodatkowe informacje i mogą być widoczne tylko dla tych, do których jest przypisany. + +**Strony internetowe** + +Zapewnia możliwość korzystania z funkcji projektowania stron internetowych i tworzenia niestandardowych stron internetowych na podstawie własnej zawartości, a także projektowania stron z układami stron, niestandardowymi elemntami menu i blokami treści. + + +**Prywatne notatki** + +Na stronach, na których jest to dostępne (Twoja matryca i osobiste strony internetowe), zapewnia widżet do tworzenia i przechowywania osobistych przypomnień i notatek. + +**Ulepszone albumy ze zdjęciami** + +Zapewnia przeglądarkę albumów zdjęć, która ma nieco ładniejszy interfejs niż zwykły album. + +**Rozszerzone udostępnianie tożsamości** + +Domyślnie Twoja tożsamość "podróżuje" z Tobą, gdy przeglądasz matrycę zdalnych witryn - tam też wiedzą kim jesteś i mogą wyświetlać Ci treści, które tylko Ty widzisz. Dzięki rozszerzonemu udostępnianiu tożsamości możesz dostarczyć te informacje do dowolnej odwiedzanej witryny z poziomu swojej matrycy. + +**Tryb ekspercki** + +Pozwala to zobaczyć niektóre zaawansowane opcje konfiguracji, które mogą dezorientować niektóre osoby lub powodować problemy z obsługą. Funkcjonalność ta może zapewnić pełną kontrolę nad funkcjami i kolorami motywu - dzięki czemu można dostosować dużą liczbę ustawień motywu wyświetlania do własnych upodobań. + +**Kanał Premium** + +Dzięki temu możesz ustawić ograniczenia i warunki dotyczące tych, które łączą się z Twoim kanałem. Może to być używane przez celebrytów lub kogoś, kto chce postawić jakieś warunki osobom, które chcą się połączyć z tym kanałe. Jednym z warunków moze byc dokonanie płatności za połączenie. + +**Edytor tekstu formatowanego** + +Edytor postów dostępny z poziomy matrycy jest edytorem zwykłego tekstu, ale matryca pozwala na stosowanie szerokieo zakresu znaczników przy użyciu BBcode. Edytor wizualny jest natomiast edytorem WYSIWIG (what you see is what you get - otrzymujesz to, co widzisz)i zapewnia wszystkie najczęściej używane znaczniki BBcode. + +**Podgląd wpisu** + +Umożliwia podgląd postów i komentarzy dokładnie tak, jak wyglądałyby na stronie przed ich opublikowaniem. + +**Źródła kanałów** + +Automatycznie importuje i ponownie publikuje zawartość kanału z innych kanałów lub źródeł. Umożliwia to tworzenie podkanałów i superkanałów z treści publikowanych gdzie indziej. Zasady są takie, że treść musi być publiczna, a właściciel kanału musi udzielić Ci pozwolenia na pozyskiwanie swojego kanału. + +**Jeszcze więcej szyfrowania** + +Stadardowo, prywatne wiadomości są szyfrowane podczas transportu i przechowywania. W dzisiejszych czasach to szyfrowanie może nie wystarczyć, jeśli twoja komunikacja jest wyjątkowo wrażliwa. Ta opcja umożliwia dodatkowo szyfrowanie treści "end-toend" za pomocą wspólnego tajnego klucza. Sposób, w jaki odbiorca pozna tajny klucz, zależy wyłącznie od Ciebie. Możesz podać wskazówkę, na przykład "imię pierwszego psa cioci Kloci". + +**Wyszukiwanie wg daty** + +Daje to możliwość wybierania postów według zakresów dat + +**Filtr grup prywatności** + +Włączenie tego widżetu umożliwia wyświetlanie strumienia postów tylko z wybranych grup połączeń. Powoduje to również przełączenie uprawnień wychodzących podczas przeglądania grupy prywatności. Jest to podobne do "kręgów" Google czy też "aspektów" w Disaporze. + +**Zapisane wyszukiwania** + +Udostępnia widżet wyszukiwania na stronie matrycy, który może zapisywać wybrane frazy wyszukiwania do ponownego wykorzystania. + +**Zakładka Osobiste** + +Włącz tą kartę, aby wyświetlać tylko wpisy matrycowe, z którymi w jakiś sposób wchodziłeś w interakcję, jako autor lub współautor konwersacji. + +**Zakładka Nowy** + +Włącza tą kartę, aby wyświetlać wszystkich nowych działania matrycy jako węża strażackiego lub osi czasu. + +**Narzedzia zaprzyjaźnienia** + +Filtrowanie aktywności strumienia matrycy według głębokości relacji. + +**Edytuj wysłane posty** + +Mozliwość edytowania i poprawiania postów i komentarzy juz po wysłaniu. + +**Tagowanie** + +Możliwość tagowania istniejących postów, w tym napisanych przez innych. + +**Kategorie postów** + +Możliwość dodawania kategorie do postów na swoim kanale + +**Zapisane foldery** + +Możliwość umieszczania postów w folderach lub tagach do późniejszego przywołania. + +**Dezaprobata postów** + +Możliwość dezaprobaty ("niepolubienia") wpisów i komentarzy. + +**Gwiazdkowanie postów** + +Możliwość oznaczania specjalnych postów znakiem gwiazdki + +**Chmura tagów** + +Udostępnienie osobistej chmury tagów na stronie swojego kanału + +#include doc/macros/pl/main_footer.bb; diff --git a/doc/pl/TermsOfService.md b/doc/pl/TermsOfService.md new file mode 100644 index 000000000..9b42edc4a --- /dev/null +++ b/doc/pl/TermsOfService.md @@ -0,0 +1,9 @@ +Regulamin serwisu +================= + +#include doc/pl/SiteTOS.md; + +Polityka prywatności +==================== + +#include doc/pl/gdpr1.md; \ No newline at end of file diff --git a/doc/pl/Translations.md b/doc/pl/Translations.md new file mode 100644 index 000000000..4b9e2793b --- /dev/null +++ b/doc/pl/Translations.md @@ -0,0 +1,89 @@ +Tłumaczenie $Projectname +======================== + +Procedura tłumaczenia +--------------------- + +Ciągi używane w interfejsie użytkownika $Projectname są tłumaczone +w [Transifex][1], a następnie przeniesione do repozytorium Git na +github. Jeśli chcesz pomóc w tłumaczeniu dla dowolnego języka, czy +to poprawianie warunków, czy tłumaczenie $Projectname na plik aktualnie +nieobsługiwany język, zarejestruj konto na transifex.com i skontaktuj +się z tamtejszym zespołem tłumaczy Redmatrix. + +Tłumaczenie $Projectname jest proste. Po prostu użyj narzędzia online +w transifex. Jeśli nie chcesz mieć do czynienia z git & co. w porządku, +regularnie sprawdzamy status tłumaczeń i importujemy je do drzewa +źródłowego na github, aby inni mogli z nich korzystać. + +Nie uwzględniamy każdego tłumaczenia z transifex w drzewie źródłowym, +aby uniknąć rozproszonego i zakłóconego ogólnego doświadczenia. Jako +niewykształcone przypuszczenie mamy dolną granicę 50% przetłumaczonych +ciągów, zanim włączymy język. Limit ten jest oceniany tylko na podstawie +ilości przetłumaczonych ciągów przy założeniu, że najbardziej widoczne +ciągi dla interfejsu użytkownika zostaną przetłumaczone jako pierwsze +przez zespół tłumaczący. Jeśli uważasz, że Twoje tłumaczenie będzie +przydatne przed tym limitem, skontaktuj się z nami, a prawdopodobnie +uwzględnimy pracę Twoich zespołów w drzewie źródłowym. + +Jeśli chcesz samodzielnie przenieść swoją pracę do drzewa źródłowego, +zrób to i skontaktuj się z nami i zadaj pytanie, które się pojawi. +Proces jest prosty, a oprogramowanie $Projectname jest dostarczane ze wszystkimi +niezbędnymi narzędziami. + +Lokalizacją przetłumaczonych plików jest w drzewie źródłowym katalog +`/view/LNG-CODE/`, ggdzie LNG-CODE jest używanym kodem języka, np. +`de` dla niemieckiego lub `fr` dla francuskiego. +W przypadku szablonów wiadomości e-mail (pliki `*.tpl`) po prostu umieść +je w katalogu i gotowe. Przetłumaczone łańcuchy pochodzą z pliku +"hmessages.po" z transifex, który należy przetłumaczyć na plik PHP +używany przez $Projectname. Aby to zrobić, umieść plik w wymienionym +wyżej katalogu i użyj narzędzia `po2php` z katalogu `util` w instalacji +$Projectname. + +Zakładając, że chcesz przetłumaczyć niemiecką wersję umieszczoną pliku +`view/de/hmessages.po`, wykonaj następujące czynności. + +1. Przejdź w wierszu polecenia do katalogu głównego instalacji $Projectname + +2. Wykonaj skrypt `po2php`, który jest umieszczono tłumaczenia dla pliku `hstrings.php`, który jest używany w $Projectname. + + $> php util/po2php.php view/de/hmessages.po + + Dane wyjściowe skryptu zostaną umieszczone w `view/de/hstrings.php, gdzie + froemdoca oczekuje tego pliku, więc możesz natychmiast przetestować swoje + tłumaczenie. + +3. Odwiedź swoją stronę $Projectname, aby sprawdzić, czy nadal działa w języku, który właśnie przetłumaczyłeś. Jeśli nie, spróbuj znaleźć błąd, najprawdopodobniej PHP da ci wskazówkę w opisie błędu w `log/warnings.about`. + + W celu debugowania możesz również spróbować "uruchomić" plik za pomocą PHP. Nie powinno to dawać żadnych wyników, jeśli plik jest w porządku, ale może dać wskazówkę dotyczącą wyszukiwania błędu. + + $> php view/de/hstrings.php + +4. Zatwierdź te dwa pliki z sensownym komunikatem o zatwierdzeniu do repozytorium git, wypchnij je do rozwidlenia repozytorium $Projectname na github i wydaj żądanie ściągnięcia dla tego zatwierdzenia. + +Narzędzia +--------- + +Oprócz skryptu po2php, jest jeszcze w katalogu "util" w drzewie źródłowym $Projectname +kilka narzędzi do tłumaczenia. Jeśli tylko chcesz przetłumacz $Projectname na inny +język, którego nie potrzebujesz najbardziej, ale da Ci to wyobrażenie o procesie +tłumaczenia $Projectname. + +Więcej informacji można znaleźć w pliku utils/README. + +Znane problemy +-------------- + +* $Projectname używa ustawień języka przeglądarki odwiedzających, aby określić + język interfejsu użytkownika. W większości przypadków to działa, ale są pewne + znane dziwactwa. +* wczesne tłumaczenia są oparte na przekładach Friendica, jeśli znajdziesz jakieś + błędy, daj nam znać lub popraw je w Transifex. + +Linki +------ +[1]: http://www.transifex.com/projects/p/hubzilla/ + + +#include doc/pl/macros/main_footer.bb; diff --git a/doc/pl/about/about.bb b/doc/pl/about/about.bb new file mode 100644 index 000000000..73d710cbc --- /dev/null +++ b/doc/pl/about/about.bb @@ -0,0 +1,181 @@ +[h3]Co to jest $Projectname?[/h3] +$Projectname to bezpłatny i otwartoźródłowy zestaw aplikacji i usług internetowych działających na specjalnym serwerze internetowym, zwanym "hubem", który może łączyć się z innymi hubami w sfederalizowanej sieci internetowej. +$Projectname zapewnia użytkownikom zaawansowaną komunikację, tożsamości i usług kontroli dostępu, które bezproblemowo współpracują w różnych domenach i niezależnych witrynach internetowych. Pozwala użytkownikom [b]publicznie[/b] lub [b]prywatnie[/b] publikować treści za pośrednictwem "kanałów" (ang. channel), które są podstawowymi, zabezpieczonymi kryptograficznie tożsamościami zapewniającymi uwierzytelnianie niezależnie od hubów, które je hostują. To rewolucyjne wyzwolenie tożsamości online z poszczególnych serwerów i domen jest nazywane "tożsamością nomadyczną" i jest oparte na protokole Zot, nowej strukturze zdecentralizowanej kontroli dostępu ze szczegółowymi, rozszerzalnymi uprawnieniami. +Z praktycznego punktu widzenia członków danego huba, korzystających z oprogramowania $Projectname, oferuje ono szereg znanych, zintegrowanych aplikacji i usług internetowych, w tym: +[ul] +[li]wątki dyskusyjne w sieciach społecznościowych[/li] +[li]przechowywanie plików w chmurze[/li] +[li]kalendarz i kontakty (z obsługą CalDAV i CardDAV)[/li] +[li]hosting stron internetowych z systemem zarządzania treścią[/li] +[li]wiki[/li] +[li]i dużo więcej ...[/li][/ul] +Chociaż wszystkie te aplikacje i usługi można znaleźć w innych pakietach oprogramowania, tylko $Projectname pozwala ustawić uprawnienia dla grup i osób, [b]które mogą nawet nie mieć kont na Twoim hubie[/b]! W typowych aplikacjach internetowych, jeśli chcesz udostępniać rzeczy prywatnie w Internecie, osoby, którym udostępniasz dane, muszą mieć konta na serwerze, na którym znajdują się Twoje dane; w przeciwnym razie serwer nie może uwierzytelniać odwiedzających witrynę, aby wiedzieć, czy przyznać im dostęp. $Projectname rozwiązuje ten problem za pomocą zaawansowanego systemu zdalnego uwierzytelniania, który weryfikuje tożsamość odwiedzających, wykorzystując techniki obejmujące kryptografię klucza publicznego. +Dzięki oferowanym aplikacjom, $Projectname świetnie się nadaje do budowy platformy komunikacyjno-publikacyjnej o charkterze społecznościowym dla realnych grup społecznych, takich jak rodziny, lokalne grupy, organizacje społeczne, środowiska szkolne, wspólnoty mieszkańców czy wspólnoty religijne. + +[h3]Stos programów[/h3] +Pakiet oprogramowania $Projectname jest stosunkowo standardową aplikacją serwerową napisaną głównie w PHP i MySQL i [url=https://framagit.org/$Projectname/core/blob/master/install/INSTALL.txt]wymagającą niewiele więcej niż serwera WWW, bazy danych zgodnej z MySQL i języka skryptowego PHP[/url]. System został zaprojektowany tak, aby był łatwy do zainstalowania przez osoby z podstawowymi umiejętnościami administrowania witryną, na typowych platformach współdzielonego hostingu, z uwzglednieniem szerokiej gamy sprzętu komputerowego. Można go również łatwo rozszerzyć za pomocą wtyczek i motywów oraz innych narzędzi innych firm. + +[h3]Słownik[/h3] +[dl terms="b"] +[*= hub ([i]ang. hub[/i])] Instancja tego oprogramowania działająca na standardowym serwerze WWW + +[*= siatka, grid ([i]w oryginale ang., grid[/i])] Globalna sieć hubów, które wymieniają między sobą informacje za pomocą protokołu Zot. Nie są to tylko huby oparte na $Projectname, ale wszystkie hubyy implementujace protokół Zot. + +[*= kanał ([i]ang. channel[/i])] Techniczny odpowiednik tożsamości. Kanał może reprezentować osobę, blog lub forum, żeby wymienić tylko kilka. Kanały mogą łączyć się z innymi kanałami w celu udostępniania informacji z bardzo szczegółowymi uprawnieniami. + +[*= klon ([i]ang. clone[/i])] Kanały mogą mieć klony powiązane z oddzielnymi i niepowiązanymi kontami w niezależnych hubach. Komunikacja współdzielona z kanałem jest synchronizowana między klonami kanału, co umożliwia kanałowi wysyłanie i odbieranie wiadomości oraz dostęp do współdzielonych treści z wielu hubów. Zapewnia to odporność na awarie sieci i sprzętu, które mogą stanowić poważny problem w przypadku serwerów WWW z własnym hostingiem lub o ograniczonych zasobach. Klonowanie umożliwia całkowite przeniesienie kanału z jednego huba do drugiego, zabierając ze sobą dane i połączenia. Zobacz "tożsamość nomadyczna". + +[*= tożsamość nomadyczna ([i]ang. nomadic identity[/i])] Możliwość uwierzytelniania i łatwej migracji tożsamości w niezależnych hubach i domenach internetowych. Tożsamość nomadyczna zapewnia prawdziwą własność tożsamości online, ponieważ tożsamości kanałów kontrolowanych przez konto w hubie nie są powiązane z samym hubem. hub bardziej przypomina "hosta" kanałów. W serwisie $Projectname nie masz "konta" na serwerze, tak jak na typowych serwisach internetowych - posiadasz tożsamość, którą możesz przenosić ze sobą po całej siatce za pomocą klonów. + +[*= [url=[baseurl]/help/developer/zot_protocol]Protokół Zot[/url]] Nowy protokół, oparty na JSON, do wdrażania bezpiecznej, zdecentralizowanej komunikacji i usług. Różni się od wielu innych protokołów komunikacyjnych, budując komunikację na podstawie zdecentralizowanej struktury tożsamości i uwierzytelniania. Składnik uwierzytelniania jest koncepcyjnie podobny do OpenID, ale jest odizolowany od tożsamości opartej na DNS. Tam, gdzie to możliwe, zdalne uwierzytelnianie jest ciche i niewidoczne. Zapewnia to mechanizm kontroli dostępu rozproszonego na skalę sieci WWW, który jest dyskretny. +[/dl] + +[h3]Możliwości[/h3] +Ten rozdział zawiera listę niektórych podstawowych funkcjonalności platformy $Projectname, które są dołączone do oficjalnej wersji. $Projectname to platforma o dużych możliwościach rozbudowy, więc więcej funkcji i możliwości można dodać za pomocą dodatkowych motywów i wtyczek. + +[h4]Suwak zaprzyjaźnienia (Affinity Slider)[/h4] +Dodając połączenia w serwisie $Projectname, członkowie mają możliwość przypisania poziomów "zaprzyjażnienia" ([i]ang. affinity[/i]), czyli określenia, jak bliska jest twoja przyjaźń z osobą reprezentowaną przez nowe połączenia. Na przykład, dodając osobę, której blog obserwujesz, możesz przypisać jej kanałowi poziom zaprzyjaźnienia "Znajomi". + +Z drugiej strony, dodając kanał przyjaciela, możesz go umieścić na poziomie zaprzyjaźnienia "Przyjaciele". + +Gdy to zrobisz, narzędzie "Suwak zaprzyjaźnienia", które zwykle pojawia się u góry głównej strony kanału (matrycy), dostosowuje zawartość strony tak, aby zawierała elementy z żądanego zakresu zaprzyjaźnienia. Kanały spoza tego zakresu nie będą wyświetlane, chyba że dostosujesz suwak, aby to uwzględnić. + +Suwak zaprzyjażnienia umożliwia natychmiastowe filtrowanie dużych ilości treści, pogrupowanych według poziomów zaprzyjaźnienia. + +[h4]Filtrowanie połączeń (Connection Filtering)[/h4] +Masz możliwość precyzyjnego kontrolowania tego, co pojawia się w Twoim strumieniu za pomocą opcjonalnego "Filtra połączeń" ([i]ang. Connection Filter[/i]). Po włączeniu Edytor połączeń zapewnia dane wejściowe do wybierania kryteriów, które należy dopasować, aby uwzględnić lub wykluczyć określony post z określonego kanału. Gdy post został dopuszczony, wszystkie komentarze do tego posta są dozwolone, niezależnie od tego, czy spełniają kryteria wyboru. Możesz wybrać słowa, które jeśli są obecne, blokują post lub zapewniają, że zostanie uwzględniony w Twoim strumieniu. Wyrażenia regularne mogą być używane do jeszcze dokładniejszej kontroli, a także hasztagów, a nawet wykrytego języka postu. + +[h4]Listy kontrolne dostępu (Access Control Lists - ACL)[/h4] +Udostępniając zawartość, członkowie mają możliwość ograniczenia tego, kto widzi zawartość. Klikając na kłódkę pod polem udostępniania, można wybrać odbiorców postu, klikając ich nazwy. + +Po wysłaniu, wiadomość będzie widoczna tylko dla nadawcy i wybranych odbiorców. Innymi słowami, wiadomość nie pojawi się na jakichkolwiek publicznych ścianach. + +Listy kontroli dostępu mogą być stosowane do treści i postów, zdjęć, wydarzeń, stron internetowych, pokojów rozmów i plików. + +[h4]Jednokrotne uwierzytelnianie (Single Sign-on)[/h4] +Listy kontroli dostępu działają dla wszystkich kanałów w siatce dzięki naszej unikalnej technologii pojedynczego logowania. Większość linków wewnętrznych zapewnia token tożsamości, który można zweryfikować w innych witrynach $Projectname i wykorzystać do kontrolowania dostępu do prywatnych zasobów. Logujesz się raz do swojego centrum domowego. Następnie uwierzytelnianie we wszystkich zasobach serwisu $Projectname jest "magiczne". + +[h4]Magazyn plików z obsługą WebDAV[/h4] +Pliki można przesyłać do osobistego obszaru przechowywania za pomocą narzędzi systemu operacyjnego (w większości przypadków metodą przeciągnij i upuść). Możesz chronić te pliki za pomocą list kontroli dostępu dla dowolnej kombinacji członków Hubzilli (w tym niektórych członków sieci stron trzecich) lub upublicznić je. + +[h4]Albumy fotograficzne[/h4] +Przechowuj zdjęcia w albumach. Wszystkie Twoje zdjęcia mogą być chronione listami kontroli dostępu. + +[h4]Kalendarze zdarzeń[/h4] +Twórz zdarzenia i zadania oraz zarządzaj nimi, które mogą być również chronione za pomocą list kontroli dostępu. Wydarzenia można importować i eksportować do innego oprogramowania przy użyciu standardowego formatu vcalendar lub iCal i udostępniać w postach innym osobom. Wydarzenia urodzinowe są automatycznie dodawane od znajomych i konwertowane na właściwą strefę czasową, dzięki czemu będziesz dokładnie wiedzieć, kiedy mają miejsce urodziny - bez względu na to, gdzie się znajdujesz na świecie w stosunku do osoby urodzonej w dniu urodzin. Wydarzenia są zwykle tworzone za pomocą liczników obecności, dzięki czemu Twoi znajomi i kontakty mogą natychmiast [url=https://pl.wikipedia.org/wiki/RSVP_(skr%C3%B3towiec]RSVP[/url]. + +[h4]Czaty[/h4] +Możesz utworzyć dowolną liczbę osobistych czatów i zezwolić na dostęp za pośrednictwem list kontroli dostępu. Są one zazwyczaj bezpieczniejsze niż XMPP, IRC i inne rodzaje przesyłania wiadomości błyskawicznych, chociaż zezwalamy również na korzystanie z tych innych usług za pośrednictwem wtyczek. + +[h4]Tworzenie stron internetowych[/h4] +$Projectname ma wiele narzędzi do tworzenia stron internetowych systemu CMS, w tym do edycji układu, menu, bloków, widżetów i regionów strony i treści. Dostęp do wszystkich tych elementów można kontrolować, tak aby powstałe strony były prywatne dla zamierzonych odbiorców. + +[h4]Aplikacje[/h4] +Aplikacje mogą być tworzone i rozpowszechniane przez członków. Różnią się one od tradycyjnych aplikacji typu "vendor lockin", ponieważ są całkowicie kontrolowane przez autora - który może zapewnić kontrolę dostępu do stron aplikacji docelowej i odpowiednio pobierać opłaty za ten dostęp. Większość aplikacji w Hubzilli jest bezpłatna i mogą być łatwo tworzone przez osoby bez umiejętności programowania. + +[h4]Układ stron (Layout)[/h4] +Układ strony jest oparty na języku opisu o nazwie Comanche. $Projectname sama jest napisana w układach Comanche, które możesz zmieniać. Pozwala to na poziom dostosowania, którego zwykle nie znajdziesz w tak zwanych "środowiskach wielu użytkowników". + +[h4]Zakładki (Bookmarks)[/h4] +Udostępniaj i zapisuj albo zarządzaj zakładkami z linków podanych na czacie. + +[h4]Szyfrowanie wiadomości prywatnych i kwestie prywatności[/h4] +Prywatna poczta jest przechowywana w ukrytym formacie. Chociaż nie jest to "kuloodporne", zwykle zapobiega przypadkowemu podsłuchiwaniu przez administratora witryny lub usługodawcę internetowego. + +Każdy kanał serwisu $Projectname ma swój własny unikalny zestaw prywatnych i powiązanych publicznych kluczy RSA 4096-bitowych, generowanych podczas pierwszego tworzenia kanałów. Służy do ochrony przesyłanych prywatnych wiadomości i postów. + +Ponadto wiadomości mogą być tworzone przy użyciu "szyfrowania end-to-end", którego nie mogą odczytać operatorzy serwisów $Projectname, dostawcy usług internetowych ani nikt, kto nie zna hasła. + +Wiadomości publiczne na ogół nie są szyfrowane podczas przesyłania ani przechowywania. + +Prywatne wiadomości mogą zostać wycofane po wysłaniu, chociaż nie ma gwarancji, że odbiorca ich jeszcze nie przeczytał. + +Posty i wiadomości mogą być tworzone z datą wygaśnięcia, po którym zostaną usunięte lub usunięte ze strony odbiorcy. + +[h4]Federalizacja usług (Service Federation)[/h4] +Oprócz dodatkowych "łączników cross-post" do różnych alternatywnych sieci, istnieje natywna obsługa importu treści z kanałów RSS i Atom i wykorzystywania jej do tworzenia specjalnych kanałów. Dostępne są również wtyczki do komunikacji z innymi sieciami za pomocą protokołów Diaspora i GNU-Social (OStatus). Sieci te nie obsługują tożsamości nomadycznej ani kontroli dostępu między domenami. Jednak podstawowa komunikacja jest obsługiwana: do i z Diaspora, Friendica, GNU-Social, Mastodon i innych dostawców, którzy używają tych protokołów. + +Istnieje również eksperymentalna obsługa uwierzytelniania OpenID, której można używać na listach kontroli dostępu. To jest jeszcze w trakcie tworzenia, ale poeksperymentować można. Twój hub $Projectname może być używany jako dostawca OpenID do uwierzytelniania członków w zewnętrznych usługach korzystających z tej technologii. + +Kanały mogą mieć uprawnienia, aby stać się "kanałami pochodnymi", w przypadku gdy dwa lub więcej istniejących kanałów łączy się, tworząc nowy kanał tematyczny. + +[h4]Grupy prywatności (Privacy Group)[/h4] +Nasza implementacja grup prywatności jest podobna do "kręgów" w Google i "aspektów" w Diasporze. Pozwala to na filtrowanie przychodzącego strumienia według wybranych grup i automatyczne ustawianie wychodzącej listy kontroli dostępu tylko na te z tej grupy prywatności podczas publikowania. Możesz to zmienić w dowolnym momencie (przed wysłaniem postu). + + +[h4]Usługi katalogowe (Directory Services)[/h4] +Zapewniamy łatwy dostęp do katalogu członków i udostępniamy zdecentralizowane narzędzia, które mogą dostarczać "sugestie" znajomych. Katalogi to zwykłe serwisy $Projectname, które zdecydowały się zaakceptować rolę serwera katalogowego. Wymaga to więcej zasobów niż większość typowych serwisów, więc nie jest to ustawienie domyślne. Katalogi są synchronizowane i dublowane, dzięki czemu wszystkie zawierają aktualne informacje o całej sieci (z zastrzeżeniem normalnych opóźnień propagacji). + +[h4]TLS/SSL[/h4] +W przypadku hubów $Projectname, które używają TLS/SSL, komunikacja między klientem a serwerem jest szyfrowana za pomocą protokołu TLS/SSL. Biorąc pod uwagę niedawno ujawnione w mediach fakty dotyczące powszechnego, globalnego nadzoru i obchodzenia szyfrowania przez NSA i GCHQ, uzasadnione jest założenie, że komunikacja chroniona przez HTTPS może być zagrożona na różne sposoby. W konsekwencji prywatna komunikacja jest szyfrowana na wyższym poziomie przed wysłaniem na zewnątrz. + +[h4]Konfiguracja kanałów[/h4] +Podczas tworzenia kanału wybierana jest rola, która stosuje szereg wstępnie skonfigurowanych ustawień zabezpieczeń i prywatności. Są one wybierane z uwzględnieniem najlepszych praktyk, aby zachować prywatność na żądanym poziomie. + +W przypadku wybrania "własnej" roli prywatności każdy kanał umożliwia precyzyjne ustawienie uprawnień dla różnych aspektów komunikacji. Na przykład, pod nagłówkiem "Ustawienia bezpieczeństwa i prywatności", każdy aspekt w lewej części strony ma sześć (6) możliwych opcji przeglądania i dostępu, które można wybrać, klikając menu rozwijane. Istnieje również wiele innych ustawień prywatności, które możesz edytować. Dostępne opcje: + + - Nikt oprócz ciebie. + - Tylko ci, którym wyraźnie zezwalasz. + - Ktoś w twojej książce adresowej. + - Każdy na tej stronie. + - Każdy w tej sieci. + - Każdy jest uwierzytelniony. + - Każdy w internecie. + + +[h4]Prywatne i publiczne fora[/h4] +Fora to zazwyczaj kanały, w których może uczestniczyć wielu autorów. Obecnie istnieją dwa mechanizmy publikowania postów na forach: + + - posty "wall-to-wall" i + - mechanizm tagów forowych @mention. + +Fora mogą być tworzone przez każdego i używane w dowolnym celu. Katalog zawiera opcję wyszukiwania forów publicznych. Fora prywatne mogą być publikowane tylko dla członków i często tylko przez nich widoczne. + +[h4]Klonowanie kont[/h4] +Konta platformy $Projectname nazywane są *tożsamościami nomadycznymi*, ponieważ tożsamość członka nie jest powiązana z hubem, w którym tożsamość została pierwotnie utworzona. Na przykład, kiedy tworzysz konto na Facebooku lub Gmailu, jest ono powiązane z tymi usługami - mie może działać poza Facebook.com czy Gmail.com. + +Z drugiej strony załóżmy, że utworzyłeś tożsamość $Projectname o nazwie [code]tina@$Projectnamehub.com[/code]. Możesz sklonować ją do innego huba $Projectname, wybierając tę ​​samą lub inną nazwę, np. [code]liveForever@Some$ProjectnameHub.info[/code]. + +Oba kanały są teraz zsynchronizowane, co oznacza, że ​​wszystkie Twoje kontakty i preferencje zostaną zduplikowane na klonie. Nie ma znaczenia, czy wyślesz post z pierwotnego centrum, czy z nowego. Posty będą dublowane na obu kontach. + +To dość rewolucyjna funkcja, jeśli weźmiemy pod uwagę kilka scenariuszy: + + - Co się stanie, jeśli hub, w którym oparta jest tożsamość, nagle przestanie działać? Bez sklonowania tożsamości członek tego huba nie będzie mógł się komunikować, dopóki hub nie wróci do trybu online (bez wątpienia wielu z Was widziało i przeklęło "Fail Whale" na Twitterze). Dzięki klonowaniu wystarczy zalogować się na sklonowane konto, a życie toczy się normalnie. + + - Administrator twojego huba nie może już sobie pozwolić na opłacanie swojego bezpłatnego i publicznego huba $Projectname. Zapowiada, że ​​hub zostanie zamknięty za dwa tygodnie. Dzięki temu masz wystarczająco dużo czasu na sklonowanie swojej tożsamośc i zachowanie relacji, znajomych i treści z zamykanego serwisu $Projectname. + + - A jeśli Twoja tożsamość podlega rządowej cenzurze? Twój dostawca huba może zostać zmuszony do usunięcia Twojego konta wraz z wszelkimi tożsamościami i powiązanymi danymi. Dzięki klonowaniu, $Projectname stawia opór cenzurze. Możesz mieć setki klonów, jeśli chcesz, wszystkie nazwane inaczej i istniejące w wielu różnych hubach, rozrzuconych po Internecie. + +$Projectname oferuje interesujące nowe możliwości prywatności. Więcej informacji można znaleźć na stronie "Najlepsze praktyki w komunikacji prywatnej". +Obowiązują pewne zastrzeżenia. Aby uzyskać pełne wyjaśnienie klonowania tożsamości, przeczytaj stronę "JAK SKLONOWAĆ SWOJĄ TOŻSAMOŚĆ". + +[h4]Wiele profili[/h4] +Można utworzyć dowolną liczbę profili zawierających różne informacje, które mogą być widoczne dla niektórych Twoich kontaktów i znajomych. Profil "domyślny" może być widoczny dla każdego i może zawierać ograniczone informacje, a więcej informacji jest dostępnych dla wybranych grup lub osób. Oznacza to, że profil (i zawartość witryny), który widzą Twoi znajomi pijący piwo, może być inny niż to, co widzą Twoi współpracownicy, a także zupełnie inny niż to, co jest widoczne dla ogółu społeczeństwa. + +[h4]Kopia zapasowa konta[/h4] + +$Projectname oferuje prosty sposób wykonywania kopii zapasowej konta za jednym kliknięciem, z której możesz pobrać pełną kopię zapasową swoich profili. Kopie zapasowe można następnie wykorzystać do sklonowania lub przywrócenia profilu. + +[h4]Usuwanie konta[/h4] +Konta można natychmiast usunąć, klikając link. Otóż to. Wszystkie powiązane treści są następnie usuwane z siatki (w tym posty i wszelkie inne treści utworzone przez usunięty profil). W zależności od liczby posiadanych połączeń proces usuwania zdalnej zawartości może zająć trochę czasu, ale zaplanowany jest tak szybko, jak to możliwe. + +[h4]Usuwanie treści[/h4] +Wszelkie treści utworzone w Hubzilli pozostają pod kontrolą członka (lub kanału), który je pierwotnie utworzył. W dowolnym momencie członek może usunąć wiadomość lub zakres wiadomości. Proces usuwania zapewnia, że treść zostanie usunięta, niezależnie od tego, czy została opublikowana w głównym (macierzystym) hubie kanału, czy w innym hubie, gdzie kanał został zdalnie uwierzytelniony za pośrednictwem Zot (protokół komunikacji i uwierzytelniania $Projectname). + +[h4]Media[/h4] +Podobnie jak każdy inny nowoczesny system blogowania, sieć społecznościowa lub usługa mikroblogowania, $Projectname obsługuje przesyłanie plików, osadzanie filmów, łączenie stron internetowych. + +[h4]Podgląd i edycja[/h4] +Posty i komentarze można przeglądać przed wysłaniem i edytować po wysłaniu. + +[h4]Głosowanie i konsensus[/h4] +Posty mogą być przekształcane w elementy "konsensusu", które pozwalają czytelnikom oferować opinie, które są zestawiane w liczniki "zgadzam się", "nie zgadzam się" i "wstrzymuję się". Pozwala to ocenić zainteresowanie pomysłami i tworzyć nieformalne ankiety. + +[h4]Rozszerzaie $Projectname[/h4] + +$Projectname może zostać rozszerzona na wiele sposobów, poprzez dostosowanie witryny, personalizację, ustawienia opcji, motywy i dodatki - wtyczki. + +[h4]API[/h4] + +Interfejs API jest dostępny do użytku przez usługi stron trzecich. Wtyczka zapewnia również podstawową implementację interfejsu API Twittera (dla którego istnieją setki narzędzi innych firm). Dostęp można zapewnić za pomocą loginu i hasła lub protokołu OAuth, a klient może zarejestrować aplikacje OAuth. + diff --git a/doc/pl/about/about_hub.bb b/doc/pl/about/about_hub.bb new file mode 100644 index 000000000..d338a563c --- /dev/null +++ b/doc/pl/about/about_hub.bb @@ -0,0 +1,7 @@ +[h3]Informacja o serwisie[/h3] +[list][*][url=[baseurl]/siteinfo]Informacja o serwisie[/url] +[*][url=[baseurl]/siteinfo/json]Informacja o serwisie (format JSON)[/url][/list] +[h3]Regulamin serwisu[/h3] +[list][*][url=[baseurl]/help/TermsOfService]Warunki świadczenia usług[/url][/list] +#include doc/pl/SiteTOS.md; + diff --git a/doc/pl/about/project.bb b/doc/pl/about/project.bb new file mode 100644 index 000000000..f8c24acd7 --- /dev/null +++ b/doc/pl/about/project.bb @@ -0,0 +1,181 @@ +[h3]Zarządzanie projektem $Projectname[/h3] +Zarządzanie $Projectname odnosi się do zarządzania tym projektem i zwłaszcza jak do rozwiązywania konfliktów w tym projekcie. + +[h4]Zarządzanie społecznością[/h4] +Projekt jest utrzymywany przez społeczność $Projectname i decyzje podejmowane są w ramach tej społeczności. +Struktura zarządzania ciągle ewoluuje. Do czasu zakończenia tworzenia struktura, decyzje są podejmowane w następującej kolejności: + +[ol] +[*] Opóźniony konsensus + +Jeśli propozycja projektu zostanie złożona na jednym z forów zarządzania projektem i nie ma poważnych zastrzeżeń w "rozsądnym" terminie od daty złożenia wniosku (zazwyczaj zapewniamy wszystkim zainteresowanym 2-3 dni na ustosunkowanie się), nie musi być głosowania aby decyzja została podjęta i propozyzja zostanie uznana za zatwierdzoną przez aklamację. Po tym czasie mogą zostać zgłoszone jakieś zastrzeżenie i oabawy, ale jeśli zostaną one uwzględnione podczas dyskusji i przedstawione zostaną rozwiązania, nadal będą uznawane za zatwierdzone. + + +[*] Weto + +Starsi deweloperzy, z długim stażem w projekcie. mogą zawetować każdą decyzję. Decyzja może zostać podjęta dopiero po usunięciu weta lub przedłożeniu alternatywnej propozycji. + + +[*] Głosowanie społeczności + +Decyzja, która nie ma wyraźnego mandatu lub wyraźnego konsensusu, ale nie jest zawetowana, może zostać podjęta po głosowaniu spółeczności. Obecnie jest to zwykłe popularne głosowanie na jednym z odpowiednich forów społeczności. W tej chwili o wyniku decyduje głosowanie powszechne. Może się to zmienić w przyszłości, jeśli społeczność przyjmie model zarządzania "przez radę". Ten dokument zostanie wówczas zaktualizowany o zaktualizowane zasady zarządzania. +[/ol] + +Głosowanie społeczności nie zawsze zapewnia Powszechnie akceptowany wynik i może polaryzować społeczność, wytwarzając frakcje (stąd przyczyna, dla której rozważane są inne modele). Jeśli propozycja została przegłosowana, nadal jest kilka rozwiązań, które można zrobić, aby propozycja została przesłana ponownie z nieco innymi parametrami (przekształcenie na dodatek, przekształcenie na opcjonalną funkcję, która jest domyślnie wyłączona itp.). Jeśli zainteresowanie funkcją jest duże, a głosowanie jest „bliskie”, może to wywołać wiele złych uczuć wśród przegranych wyborców. W przypadku tak bliskich głosów [b] zdecydowanie zaleca się [/ b], aby wnioskodawca podjął kroki w celu rozwiązania wszelkich zgłoszonych wątpliwości i ponownie przedłożył. + +[h4]Polityka prywatności[/h4] + +Q: Kto może widzieć moją treść? + +A: Domyślnie KAŻDY w internecie, chyba że ograniczysz do niej dostęp. $Projectname pozwala wybrać żądany poziom prywatności. Treści podlegające ograniczeniom NIE będą widoczne dla "sieci szpiegowskich" i reklamodawców. Będą chroniona przed podsłuchem przez osoby postronne - najlepiej jak potrafimy. Administratorzy centrów z wystarczającymi umiejętnościami i cierpliwością MOGĄ być w stanie podsłuchiwać niektóre prywatne wiadomości, ale muszą dołożyć starań, aby to zrobić. W $Projectname istnieją tryby prywatności, które są nawet odporne na podsłuchiwanie przez wykwalifikowanych i zdeterminowanych administratorów hubów. + +Q: Czy moje treści mogą zostać ocenzurowane? + +A: Z założenie, $Projectname (jako sieć) NIE MOŻE cenzurować twoich treści. Administratorzy serwerów i hubów podlegają lokalnemu prawodawstwu i MOGĄ usunąć budzące zastrzeżenia treści ze swojego serwisu (huba). Każdy może zostać administratorem huba, w tym Ty. Dlatego publikuj treści, które w innym przypadku mogłyby zostać ocenzurowane. Nadal MOŻESZ podlegać lokalnemu prawodawstwu. + +[h5]Definicje[/h5] + +**$Projectname** + +Inaczej nazywana "siecią", $Projectname jest zbiorem pojedynczych komputerów (serwerów) (czyli **hubów**. ang. *hubs*), które łączą się razem, tworząc większą sieć kooperacyjną. + +**hub** (ang. *hub*) + +Pojedynczy komputer lub serwer podłączony do $Projectname. Jest on dostarczany przez **administratora huba** i może być publiczny lub prywatny, płatnu lub bezpłatny. + +*administrator huba** + +Operator systemu pojedynczego huba. + +[h5]Polityki[/h5] + +**Informacja publiczna** + +Wszelkie informacje lub cokolwiek zamieszczone przez Ciebie w $Projectname MOŻE być publiczne lub widoczne dla każdego w Internecie. W miarę możliwości $Projectname pozwala chronić zawartość i ograniczać, kto może ją oglądać. + +Twoje zdjęcie profilowe, nazwa Twojego kanału i lokalizacja (adres URL lub adres sieciowy) Twojego kanału są widoczne dla każdego w internecie, a kontrola prywatności nie wpływa na wyświetlanie tych elementów. + +MOŻESZ dodatkowo podać inne informacje profilowe. Wszelkie informacje, które podajesz w swoim „domyślnym” lub **publicznym profilu** MOGĄ zostać przesłane do innych hubów w $Projectname i dodatkowo MOGĄ zostać wyświetlone w katalogu kanałów. Możesz ograniczyć wyświetlanie tych informacji profilowych. Może być ograniczone tylko do członków twojego huba lub tylko połączeń (znajomych) lub innych ograniczonych grup widzów, zgodnie z twoim życzeniem. Jeśli chcesz, aby Twój profil był ograniczony, musisz ustawić odpowiednie ustawienia prywatności lub po prostu NIE podawać dodatkowych informacji. + +**Treść** + +Treści, które udostępniasz (posty ze statusami, zdjęcia, pliki itp.) Należą do Ciebie. $Projectname domyślnie publikuje treści w sposób otwarty i widoczny dla każdego w internecie (PUBLICZNY). MOŻESZ kontrolować to w ustawieniach swojego kanału i ograniczyć domyślne uprawnienia lub MOŻESZ ograniczyć widoczność każdego pojedynczego opublikowanego elementu oddzielnie (PRYWATNE). Programiści $Projectname zapewnią, że ograniczone treści będą widoczne TYLKO dla osób z listy ograniczeń - najlepiej jak potrafią. + +Treści (zwłaszcza posty statusowe), które udostępniasz innym sieciom lub które udostępniłeś komukolwiek w Internecie (PUBLICZNE), nie mogą być łatwo cofnięte po ich opublikowaniu. MOGĄ być udostępniane innym sieciom i udostępniane za pośrednictwem kanałów RSS / Atom. Może być również rozpowszechniany na innych stronach $ Projectname. MOŻE pojawiać się w innych sieciach i witrynach internetowych oraz być widoczny w wyszukiwarkach internetowych. Jeśli nie chcesz tego domyślnego zachowania, dostosuj ustawienia swojego kanału i ogranicz listę osób, które mogą oglądać Twoje treści. + +**Komentarze i wpisy na forach** + +Komentarze do postów stworzonych przez innych oraz posty oznaczone jako posty na forum należą do Ciebie jako twórcy (autora), ale ich dystrybucja nie jest pod Twoją bezpośrednią kontrolą i zrzekasz się NIEKTÓRYCH praw do tych elementów. Te posty i komentarze MOGĄ być ponownie rozpowszechniane wśród innych i MOGĄ być widoczne dla każdego w internecie. W przypadku komentarzy, twórca "pierwszej wiadomości" w wątku (rozmowie), na który odpowiadasz, kontroluje dystrybucję wszystkich komentarzy i odpowiedzi na tę wiadomość. Jest on "właścicielem" i dlatego ma określone prawa w odniesieniu do całej rozmowy (w tym wszystkich zawartych w niej komentarzy). Nadal możesz edytować lub usuwać komentarz, ale właściciel konwersacji ma również prawa do edytowania, usuwania, ponownej dystrybucji i tworzenia kopii zapasowych i przywracania dowolnej lub całej zawartości konwersacji. + +**Informacja prywatna** + +Programiści $Projectname zapewnią, że każda dostarczona przez Ciebie zawartość oznaczona jako PRYWATNA będzie chroniona przed podsłuchem - najlepiej jak potrafią. Zawartość kanału prywatnego MOŻE być widoczna w bazie danych każdego zaangażowanego administratora centrum, ale prywatne wiadomości są ukrywane w bazie danych. To ostatnie oznacza, że jest to bardzo trudne, ale NIE niemożliwe, aby te treści były widoczne dla administratora centrum. Treść kanału prywatnego i wiadomości prywatne są również usuwane z powiadomień e-mail. Pełne szyfrowanie jest oferowane jako funkcja opcjonalna i NIE MOŻE być widoczne, nawet dla zdeterminowanego administratora. + +[h5]Prywatność tożsamości[/h5] + +Prywatność dla Twojej tożsamości to kolejny aspekt. Ponieważ masz zdecentralizowaną tożsamość w $Projectname, Twoja prywatność wykracza poza domowy hub. Jeśli chcesz mieć pełną kontrolę nad swoją prywatnością i bezpieczeństwem, powinieneś uruchomić własny hub na dedykowanym serwerze. Dla wielu osób jest to skomplikowane ale może poszerzyć ich możliwości techniczne. Wymieńmy więc kilka środków ostrożności, które możesz podjąć, aby zapewnić sobie jak największą prywatność. + +Zdecentralizowana tożsamość ma wiele zalet i daje wiele interesujących funkcji, ale powinieneś być świadomy faktu, że Twoja tożsamość jest znana innym hubom w sieci $Projectname. Jedną z tych zalet jest to, że inne kanały mogą udostępniać dostosowane treści i umożliwiać oglądanie prywatnych rzeczy (takich jak prywatne zdjęcia, które inni chcą Ci udostępnić). Z tego powodu te kanały muszą wiedzieć, kim jesteś. Ale rozumiemy, że czasami te inne kanały wiedzą od Ciebie więcej, niż byś sobie tego życzył. Na przykład wtyczka Visage, która może poinformować właściciela kanału o ostatniej wizycie w jego profilu. Możesz łatwo zrezygnować z tego niskiego poziomu i uważamy, że jest to nieszkodliwe śledzenie. + +* Możesz włączyć [Do Not Track (DNT)](http://donottrack.us/) w swojej przeglądarce internetowej. Szanujemy tą nową propozycję polityki prywatności. Wszystkie nowoczesne przeglądarki obsługują DNT. Znajdziesz to w ustawieniach prywatności swojej przeglądarki lub możesz zapoznać się z instrukcją przeglądarki internetowej. Nie wpłynie to na funkcjonalność $Projectname. To ustawienie jest prawdopodobnie wystarczające dla większości ludzi. + +* Możesz [wyłączyć publikację](ustawienia) swojego kanału w naszym katalogu kanałów. Jeśli chcesz, aby ludzie mogli znaleźć Twój kanał, podaj im adres swojego kanału. Uważamy, że jest to dobra wskazówka, że wolisz dodatkową prywatność i automatycznie włączasz opcję "Nie śledź", jeśli tak jest. + +* Możesz mieć zablokowany hub. Oznacza to, że wszystkie kanały i treści w tym centrum nie są publiczne ani widoczne dla świata zewnętrznego. To jest coś, co może zrobić tylko administrator centrum. Szanujemy to również i automatycznie włączamy opcję "Nie śledź:, jeśli jest ustawiona. + +[h5]Cenzura[/h5] + +$Projectname to globalna sieć obejmująca wszystkie religie i kultury. Nie oznacza to, że każdy członek sieci czuje się tak samo jak Ty w spornych kwestiach, a niektórzy ludzie mogą MOCNO sprzeciwić się publikowanym przez Ciebie treściom. Ogólnie rzecz biorąc, jeśli chcesz opublikować coś, o czym wiesz, że nie jest powszechnie akceptowane, najlepszym rozwiązaniem jest ograniczenie odbiorców za pomocą kontroli prywatności do małego kręgu znajomych. + +$Projectname jako dostawca sieci nie może cenzurować zawartości. Jednak administratorzy hubów MOGĄ cenzurować wszelkie treści, które pojawiają się w ich hubie, aby zachować zgodność z lokalnym prawem, a nawet osobistym osądem. Ich decyzja jest ostateczna. Jeśli masz problemy z jakimkolwiek administratorem huba, możesz przenieść swoje konto i wpisy do innej witryny, która jest bardziej zgodna z Twoimi oczekiwaniami. Sprawdzaj (okresowo) [Warunki świadczenia usług](help/TermsOfService) swojego huba, aby poznać wszelkie zasady lub wytyczne. Jeśli Twoje treści składają się z materiałów, które są nielegalne lub mogą powodować problemy, MOCNO zachęcamy do hostowania własnych (zostań administratorem własnego huba). Mimo to. możesz stwierdzić, że Twoje treści są zablokowane w niektórych hubach, ale $Projectname jako sieć nie może wogóle zablokować ich publikowania. + +$Projectname ZALECA, aby administratorzy hubów zapewnili okres karencji wynoszący 1-2 dni między ostrzeżeniem właściciela konta o treści, którą należy usunąć, a fizycznym usunięciem lub wyłączeniem konta. Dzięki temu właściciel treści będzie mógł wyeksportować metadane swojego kanału i zaimportować je do innej witryny. W rzadkich przypadkach treść może mieć taki charakter, że uzasadnia natychmiastowe zamknięcie konta. To jest decyzja właściciela huba, a nie decyzja $Projectname. + +Jeśli zazwyczaj i regularnie publikujesz treści dla dorosłych lub obraźliwe, MOCNO zachęcamy do oznaczenia swojego konta jako „NSFW” (Not Safe For Work). Zapobiegnie to wyświetlaniu Twojego zdjęcia profilowego w katalogu, z wyjątkiem przeglądających, którzy zdecydowali się wyłączyć „tryb bezpieczny”. Jeśli administratorzy katalogu uznają Twoje zdjęcie profilowe za nieobyczajne lub obraźliwe, administrator katalogu MOŻE oznaczyć Twoje zdjęcie profilowe jako NSFW. Obecnie nie ma oficjalnego mechanizmu do zakwestionowania lub cofnięcia tej decyzji, dlatego NALEŻY oznaczyć własne konto jako NSFW, jeśli może być nieodpowiednie dla ogółu odbiorców. + +[h3]Podziękowania[/h3] + +Dziękujemy wszystkim, którzy przez lata pomagali i przyczynili się do powstania projektu i jego poprzednikom. Możliwe, że przegapiliśmy Twoje imię, ale jest to niezamierzone. Dziękujemy również społeczności i jej członkom za dostarczenie cennego wkładu, bez którego cały ten wysiłek byłby bez znaczenia. + +Warto również docenić wkład i rozwiązania problemów, które powstały w wyniku dyskusji między członkami i twórcami innych, nieco powiązanych i konkurujących ze sobą projektów; +nawet jeśli mieliśmy sporadyczne nieporozumienia. + +[list] +[li]Mike Macgirvin[/li] +[li]Fabio Comuni[/li] +[li]Simon L'nu[/li] +[li]marijus[/li] +[li]Tobias Diekershoff[/li] +[li]fabrixxm[/li] +[li]tommy tomson[/li] +[li]Simon[/li] +[li]zottel[/li] +[li]Christian Vogeley[/li] +[li]jeroenpraat[/li] +[li]Michael Vogel[/li] +[li]erik[/li] +[li]Zach Prezkuta[/li] +[li]Paolo T[/li] +[li]Michael Meer[/li] +[li]Michael[/li] +[li]Abinoam P. Marques Jr[/li] +[li]Tobias Hößl[/li] +[li]Alexander Kampmann[/li] +[li]Olaf Conradi[/li] +[li]Paolo Tacconi[/li] +[li]tobiasd[/li] +[li]Devlon Duthie[/li] +[li]Zvi ben Yaakov (a.k.a rdc)[/li] +[li]Alexandre Hannud Abdo[/li] +[li]Olivier Migeot[/li] +[li]Chris Case[/li] +[li]Klaus Weidenbach[/li] +[li]Michael Johnston[/li] +[li]olivierm[/li] +[li]Vasudev Kamath[/li] +[li]pixelroot[/li] +[li]Max Weller[/li] +[li]duthied[/li] +[li]Martin Schmitt[/li] +[li]Sebastian Egbers[/li] +[li]Erkan Yilmaz[/li] +[li]sasiflo[/li] +[li]Stefan Parviainen[/li] +[li]Haakon Meland Eriksen[/li] +[li]Oliver Hartmann (23n)[/li] +[li]Erik Lundin[/li] +[li]habeascodice[/li] +[li]sirius[/li] +[li]Charles[/li] +[li]Tony Baldwin[/li] +[li]Hauke Zuehl[/li] +[li]Keith Fernie[/li] +[li]Anne Walk[/li] +[li]toclimb[/li] +[li]Daniel Frank[/li] +[li]Matthew Exon[/li] +[li]Michal Supler[/li] +[li]Tobias Luther[/li] +[li]U-SOUND\mike[/li] +[li]mrjive[/li] +[li]nostupidzone[/li] +[li]tonnerkiller[/li] +[li]Antoine G[/li] +[li]Christian Drechsler[/li] +[li]Ludovic Grossard[/li] +[li]RedmatrixCanada[/li] +[li]Stanislav Lechev [0xAF][/li] +[li]aweiher[/li] +[li]bufalo1973[/li] +[li]dsp1986[/li] +[li]felixgilles[/li] +[li]ike[/li] +[li]maase2[/li] +[li]mycocham[/li] +[li]ndurchx[/li] +[li]pafcu[/li] +[li]Simó Albert i Beltran[/li] +[li]Manuel Reva[/li] +[li]Manuel Jiménez Friaza[/li] +[li]Gustav Wall aka "neue medienordnung plus"[/li] +[/list] diff --git a/doc/pl/accounts_profiles_channels_basics.bb b/doc/pl/accounts_profiles_channels_basics.bb new file mode 100644 index 000000000..57d45dfdf --- /dev/null +++ b/doc/pl/accounts_profiles_channels_basics.bb @@ -0,0 +1,20 @@ +[size=large][b]Konta, profile i kanały[/b][/size] + +Po zarejestrowaniu [i]konta[/i], trzeba również utworzyć [i]profil[/i] i [i]kanał[/i]. + +[b]Konto[/b] +W serwisie &Projectname masz [i]jedno[/i] konto. Składa się z Twojego konta e-mail i hasła. Za pomocą swojego konta uzyskujesz dostęp do swojego profilu i kanału. + +[i]Pomyśl o swoim koncie jak o sposobie uwierzytelniania w jednym serwisie $Projectname. Pozwala to na takie rzeczy, jak tworzenie profili i kanałów, za pomocą których możesz łączyć się z innymi osobami.[/i] + +[b]Profil[/b] +Z pewnością masz już doświadczenie w rejestrowaniu się w jakichś usługach internetowych, takich jak fora lub społeczności internetowe. We wszystkich przypadkach trzeba było podać pewne informacje o sobie, takie jak data urodzenia, kraj, wiek i upodobania. [observer=1]Jeśli chcesz, możesz zobaczyć swój profil tutaj: [baseurl]/profile/[observer.webname] i edytować go, klikając ikonę ołówka obok swojego awatara.[/observer] +W przeciwieństwie do innych usług, $Projectname oferuje Ci możliwość tworzenia [i]wielu profilii[/i]. W ten sposób możesz rozróżnić profile skierowane specjalnie do wszystkich (Twój profil publiczny), współpracowników, rodziny czy partnera. +[i]Potraktuj swój profil jako podstawowe informacje o sobie, które przekazujesz innym osobom.[/i] + +[b]Kanał[/b] +Podczas rejestracji tworzysz swój pierwszy [i]kanał[/i]. Podobnie jak w przypadku profili, możesz mieć kilka kanałów. Na początku może to być nieco zagmatwane, ale wyjaśnijmy to. Masz już jeden kanał. Możesz używać go dla publicznie, aby komunikować się z ludźmi w codziennym życiu. Ale być może jesteś zapalonym czytelnikiem książek i wielu ludzi się tym nudzi. Otwierasz więc [i]drugi kanał[/i] tylko dla miłośników książek, na którym wszyscy mogą rozmawiać o książkach tyle, ile chcesz. Oczywiście jest to nowy strumień postów, z nowym profilem (... lub nowymi profilami ...) i zupełnie innymi kontaktami. Niektóre połączenia mogą istnieć w obu kanałach, ale będą takie, które dotyczą tylko jednego z nich. Ty sam po prostu przełączasz się między nimi, tak jak w prawdziwym życiu, kiedy rozmawiasz z ludźmi, których spotykasz na ulicy lub z osobami, które spotykasz specjalnie, aby porozmawiać o książkach. Możesz nawet połączyć się ze sobą lub lepiej: z innym kanałem. :) +[i]Pomyśl o kanale jako o różnych przestrzeniach poświęconych różnym tematom, w których spotykasz się z różnymi ludźmi.[/i] + +#include doc/macros/pl/main_footer.bb; + diff --git a/doc/pl/acl_dialog_post.html b/doc/pl/acl_dialog_post.html new file mode 100644 index 000000000..1be9f4bc6 --- /dev/null +++ b/doc/pl/acl_dialog_post.html @@ -0,0 +1,42 @@ + + +

Uprawnienia dla wpisu

+ +

+Okno dialogowe uprawnień pozwala wybrać, które kanały albo grupy prywatności +mogą widzieć wpis. Można też wybrać, komu wyraźnie odmawia się dostępu. Załóżmy +na przykład, że planujesz niespodziewane przyjęcie dla znajomego. Możesz wysłać +zaproszenie do wszystkich w swojej grupie Znajomi oprócz znajomego, +któremu chcesz zrobić niespodziankę. W tym przypadku ustawiasz "Pokaż" grupie +Znajomi, ale ""Nie pokazuj" tej jednej osobie. +

+ +
+
Wskazówka! +
+Kolor obramowania każdego kanału wskazuje, czy ten kanał — lub jedną z grup, +do której należy — będzie mieć dostęp do wpisu. Kolor obramowania będzie +również wskazywać, kiedy kanał lub grupa, do której należy, została wyraźnie +ustawiona na "Nie pokazuj". +
+
+ +

Dlaczego nie mogę edytować uprawnień do wpisu po jego zapisaniu?

+ +

+Możesz zmienić uprawnienia do swoich plików, zdjęć i polubień, ale nie do wpisów +po ich zapisaniu. Główny powód jest taki, że po zapisaniu wpisu jest on rozpowszechniany +na kanale publicznym, a stamtąd na inne serwery Hubzilla lub tym, którym chciałeś +go pokazać. Tak jak nie możesz odzyskać czegoś, co przekazałeś innej osobie, nie +możesz zmienić uprawnień do wpisów Hubzilli. Musielibyśmy śledzić wszędzie, gdzie +trafia Twój wpis, śledzić wszystkich, którym pozwoliłeś go zobaczyć, a następnie +śledzić, od kogo go usunąć. +

+

+Jeśli wpis jest publiczny, jest to jeszcze trudniejsze, ponieważ Hubzilla jest siecią +globalną i nie ma możliwości śledzenia wpisu, nie mówiąc już o jego niezawodnym +odzyskaniu. Inne sieci, które mogą otrzymać Twój wpis, nie mają niezawodnego sposobu +na usunięcie lub odzyskanie wpisu. +

diff --git a/doc/pl/addons.bb b/doc/pl/addons.bb new file mode 100644 index 000000000..6a9cf425b --- /dev/null +++ b/doc/pl/addons.bb @@ -0,0 +1,117 @@ +[h3]Wtyczki/Dodatki[/h3] +[list=1] +[*] abcjsplugin - tworzenie zapisów nitowych w swoich wpisach +[*] adultphotoflag - zapobiega wyświetlaniu zdjęć NSFW w albumach publicznych +[*] authchoose - wysyłanie potwierdzenia tożsamości tylko do witryn znajomych +[*] b2tbtn - zapewnia przycisk powodujący przejście bezpośrednio na górę strony, jeśli przewinie się dużo treści dół okna +[*] bbmath - możliwość używania skomplikowanych wyrażeń matematycznych w swoich wpisach +[*] bookmarker - zamienianie #^ w linkach zakładek we wpisach +[*] buglink - umieszcza ikonę zgłaszania błędów w lewym dolnym rogu każdej strony +[*] calc - kalkulator naukowy +[*] chess - interaktywne gry w szachy z uwzględnieniem tożsamości międzydomenowej +[*] chords - generowanie wykresów palcowania i alternatyw dla każdego znanego akordu gitarowego +[*] custom_home - ustawianie własnej strony jako strony początkowej huba +[*] diaspora - emulator protokołu Diaspora +[*] dirstats - wyświetlanie interesujących statystyk generowanych przez serwer katalogowy +[*] docs - alternatywne strony dokumentacji +[*] donate - dostarcza stronę dofinansowania +[*] dreamhost - zapewnia bardziej niezawodną usługę na hostingu współdzielonym Dreamhost +[*] dwpost - krzyżowe wpisy do Dreamwidth +[*] emojione - zezwala na uzywanie emojis jako emotikonów +[*] extcron - stosowanie zewnętrznej usługi cron do uruchamiania zaplanowanych zadań huba +[*] firefox - dostarcza link do zainstalowania API Sharing Firefoxa +[*] flattrwidget - dostarcza przyciski "Flattr Us" +[*] flip - tworzenie odwróconego tekstu +[*] fortunate - wyświetla losowy cytat (plik cookie fortune). Wymaga skonfigurowania serwera fortune. +[*] friendica - protokół Friendica (DFRN). W tworzeniu. +[*] frphotos - importowanie albumów fotograficznych z Friendica +[*] gnusoc - protokół GNU-Social (OStatus). W tworzeniu. +[*] hexit - narzędzie do konwersji szesnastkowej +[*] hilite - umożliwia podświetlanie bloków kodu, specyficzne dla języka programowania, zawartych we wpisach +[*] hubwall - wysyłanie wiadomosci e-mail administratora na wszystkie konta w hubie +[*] ijpost - krzyżówe wpisy do Insanejournal +[*] irc - połączenie z czatami IRC +[*] jappixmini - czat XMPP +[*] js_upload - przesyłanie jednocześnie wiele zdjęć do albumów fotograficznych +[*] keepout - zapobiega prawie całkowicie korzystaniu z witryny bez zalogowania się, bardziej restrykcyjne niż ustawienie "blokuj publiczne" +[*] ldapauth - logowanie przez konto LDAP lub domenę Windows Active Directory +[*] libertree - publikowanie w Libertree +[*] likebanner - tworzenie obrazu banera "polub nas na red#matrix" +[*] ljpost - publikowanie w LiveJournal +[*] logrot - narzędzie rotowania plik dziennika zdarzeń +[*] mahjongg - gra w chińskie puzzle +[*] mailhost - umożliwienie wyboru jednego kanału dla otrzymywania powiadomień e-mail, gdy używa się wiele sklonowanych kanałów +[*] mailtest - interfejs do testowania systemu wysyłania poczty +[*] metatag - dostarcza strony przyjazne SEO +[*] mayan_places - ustawia pole lokalizacji na losowe miasto w świecie Majów +[*] morechoice - dodatkowe wybór płci i preferencji seksualnych dla profili (nie jest to bezpieczne) +[*] moremoods - dodatkowe opcje nastroju (mood) +[*] morepokes - dodatkowe opcje szturchania (poke) (nie są bezpieczne) +[*] msgfooter - podawanie formuły prawniczej lub innego tekstu w każdym wychodzącym wpisie +[*] noembed - używanie noembed.com jako dodatku do natywnej funkcjonalności oembed w $Projectname (obecnie nie działa) +[*] nofed - zapobiega "federacji" wpisów w kanale, utrzymuje całą interakcję na stronie właściciela kanału +[*] nsabait - dodawaj do swoich wpisów losowe hashtagi związane z terroryzmem +[*] nsfw - bardzo polecana wtyczka do zwijania postów z nieodpowiednimi treściami +[*] openclipatar - wybór zdjęcia profilowego spośród setek obrazów bez tantiem +[*] openid - uwierzytelnianie OpenID i serwer OpenID. Twój adres URL OpenID to [observer.baseurl]/id/[observer.webname] +[*] opensearch - umożliwienie swojej witrynie stania się dostawcą wyszukiwania w przeglądarce +[*] openstreetmap - renderowanie lokalizacji i mapy za pomocą OpenStreetMap +[*] pageheader - wyświetlanie tekstu u góry na każdej stronie serwisu +[*] phpmailer - alternatywny system dostarczania poczty z większą konfigurowalnością +[*] piwik - analityka witryn internetowych typu open source +[*] planets - ustawianie pola lokalizacji na losową planetę z Gwiezdnych Wojen +[*] pong - klasyczna gra w ponga +[*] pubcrawl - emulator protokołu ActivityPub +[*] pubsubhubbub - protokół PuSH dla zoptymalizowanego dostarczania wiadomości do subskrybentów (wymagany przez protokół GNU-Social) +[*] pumpio - publikowanie w Pump.io +[*] qrator - generowanie obrazów kodu QR +[*] rainbowtag - wyświetlanie chmury tagów i kategorii w kolorach +[*] randpost - bot wpis/odpowiedz oparty i wymagający fortunate +[*] redfiles - import magazynu plików z redmatrix +[*] redphotos - import albumów fotograficznych z redmatrix +[*] redred - wpisy krzyzowe do innych kanałów Red Matrix lun Hubzilla +[*] rendezvous - grupowe śledzenie lokalizacji +[*] rtof - publikowanie w Friendica +[*] sendzid - dodawanie parametróe uwierzytelniających "zid" do wszystkich linków wychodzących, nie tylko linków w sieci +[*] skeleton - przykładowa wtyczka pokazująca sposób tworzenia wtyczek +[*] smiley_pack - rozszerzenie wbudowanej obsługi buziek (emotikonów) +[*] smileybutton - zapewnia selektor buźki w oknie wpisu +[*] startpage - umowżliwia ustawienie przekierowania do preferowanej osobistej strony po zalogowaniu +[*] statistics - generator statystyk Diaspora +[*] statusnet - wpisy krzyżówe do GNU-social i StatusNet [zrl=[baseurl]/help/addons_gnusocial]Posting To Gnu Social[/zrl] +[*] std_embeds - umożłiwia niefiltrowane osadzanie dla popularnych dostawców strumieni, takich jak youtube, vimeo i soundcloud +[*] superblock - bardzo zalecane - całkowite blokowanie obraźliwuch kanałów w swoim strumieniu +[*] testdrive - zmienia hub w witrynę testową z kontami, które wygasają po okresie próbnym +[*] tictac - 3D tic-tac-toe +[*] torch - aplikacja podświetlania (flashlight) +[*] tour - prezentacja funkcji dla nowych członków +[*] tripleaes - wtyczka demonstracyjna zapewniająca niestandardowe algorytmy szyfrowania +[*] twitter - publikowanie w Twitter +[*] twitter_api - API kompatybilne z Twitter i Statusnet +[*] upload_limits - odkrywa, jakie ustawienia serwera (jest ich kilka) mogą powodować niepowodzenie przesyłania dużych zdjęć +[*] visage - pokaż odwiedzającym swój kanał +[*] webmention - przetwarzanie stron internetowych +[*] wholikesme - dostarcza stronę wyświetlającą listę kontaktów, które najbardziej "polubiły" Twoje wpisy +[*] webRTC - użycie zewnętrznego serwera (mayfirst.org) do negocjowania połączeń webRTC +[*] wppost - publikowanie w WordPress (lub w innych serwisach stosujących XMLRPC Wordpress) +[*] xmpp - XMPP czat oparty na converse.js +[/list] + +[h3]Repozytoria dodatków[/h3] + +[b]Zdecydowanie zalecamy[/b], aby autorzy dodatków publikowali (przesyłali) je do repozytorium dodatków projektu. Ma to kilka zalet. Programiści projektów mogą łatwo naprawić luki w zabezpieczeniach i wprowadzać zmiany, aby dostosować się do ostatnich zmian w kodzie podstawowym. Dodatki dostarczane w repozytoriach innych firm są uważane za niezaufane. Jeśli podstawowy kod projektu zmieni się w niekompatybilny sposób, może nie być innej alternatywy niż fizyczne usunięcie lub zmiana nazw plików dodatków, aby ponownie uruchomić witrynę. Często tylko autor wtyczki / dodatku może pomóc Ci odzyskać kontrolę nad Twoją witryną, a programiści projektów nie są w stanie Ci pomóc; ponieważ z definicji konfiguracja Twojej witryny została zmodyfikowana w sposób, którego nie możemy łatwo przetestować ani zweryfikować. + +Z tych powodów [b]zdecydowanie zalecamy[/b], aby NIE instalować dodatków z repozytoriów innych firm. + +Zdajemy sobie również sprawę, że niektórzy programiści wolą pracować samodzielnie i nie chcą z różnych powodów, aby ich kod był mieszany z repozytorium projektu. Ci programiści mogą ułatwić rozwiązywanie problemów i debugowanie, udostępniając plik README w odpowiednim repozytorium kodu, w którym opisano proces przesyłania poprawek i poprawek błędów. Zaleca się również, aby te projekty zapewniały zarówno gałąź "dev" (rozwój), jak i "master" (produkcja), która śledzi bieżące gałęzie projektu o tych nazwach. Dzieje się tak, ponieważ dev i master często nie są kompatybilne z punktu widzenia interfejsów bibliotek. Zdecydowanie zaleca się również, aby wersje repozytorium były oznaczone i przeniesione do przodu w ciągu 24 godzin od wydania projektu. Jest to poważna niedogodność dla wszystkich zaangażowanych osób i może powodować przestoje w zakładach produkcyjnych podczas przeprowadzania tego procesu; co jest jeszcze jednym powodem, dla którego [b]zdecydowanie zalecamy[/b], aby dodatki były przesyłane do repozytorium dodatków projektu i aby NIE instalować takich dodatków innych firm. + + +[url=https://framagit.org/hubzilla/addons]https://framagit.org/hubzilla/addons[/url] Główne repozytorium dodatków projektu. + +[url=https://github.com/23n/red-addons]https://github.com/23n/red-addons[/url] Repozytorium Olivera (mayan_places i flip) + + + +#include doc/macros/main_footer.bb; + + diff --git a/doc/pl/addons_gnusocial.bb b/doc/pl/addons_gnusocial.bb new file mode 100644 index 000000000..a35af6e1f --- /dev/null +++ b/doc/pl/addons_gnusocial.bb @@ -0,0 +1,64 @@ +[b]Jak przesyłać wpisy do instancji GNUsocial[/b] + +Zacznij od instancji GNUSocial, w której masz swoje konto. + +W instancji GNUSocial przejdź do Ustawienia > Połączenia. W prawej kolumnie, w sekcji "Programiści", kliknij link "Zarejestruj aplikację kliencką OAuth, która ma być używana z tym wystąpieniem StatusNet". Ten link można znaleźć w Twojej instancji tutaj: + +https://yourgnusocialinstance.org/settings/oauthapps + +Następnie kliknij łącze "Zarejestruj nową aplikację". Pojawi się nowy formularz zgłoszeniowy. Oto, co należy zrobić na każdym polu. + +Ikona. Pobierz ikonę $Projectname znajdującą się pod tym linkiem, po zapisaniu jej na swoim komputerze: + +https://framagit.org/hubzilla/core/blob/master/images/rm-32.png + +Nazwa. Nadaj aplikacji odpowiednią nazwę. Wywołaj swoją witrynę hubzilli. Możesz preferować r2g. + +Opis. Użyj tego pola, aby opisać przeznaczenie aplikacji. Dodaj coś o efekcie użycia krzyżowego wysyłania z $Projectname do GNUsocial. + +Źródłowy adres URL. Wpisz nazwę domeny głównej witryny Red, której używasz. Nie zapomnij wpisać "s" w https://yourhubzillasite.com. Jeśli Twoja instalacja Red jest subdomeną, prawdopodobnie będzie to wymagane. + +Organizacja. Jeśli używasz tej instancji $Projectname dla grupy lub firmy, wypełnij to pole. + +Strona główna. Jeśli Twoja grupa korzysta z subdomeny, prawdopodobnie zechcesz umieścić tutaj identyfikator URI domeny głównej. + +Adres URL wywołania zwrotnego. Pozostaw puste. + +Typ aplikacji: wybierz "desktop." + +Domyślny dostęp: wybierz "Read-write." + +Wszystkie pola oprócz adresu URL wywołania zwrotnego muszą być wypełnione. + +Kliknij przycisk "Zapisz". + +Następnie kliknij ikonę lub nazwę aplikacji, aby wyświetlić informacje, które musisz wstawić w $Projectname. + +***** + +Otwórz teraz nową kartę lub okno i przejdź do swojego konta $Projectname, do ustawień Ustawienia > Właściwości. Znajdź ustawienia publikowania StatusNet. + +Wstaw w $Projectname ciągi liczb, podane na stronie GNUsocial, do pól klucza konsumenta i hasła konsumenta. + +Podstawową ścieżką API (pamiętaj o końcowym znaku /) będzie adres Twojej domeny i ścieżki "/api/". Prawdopodobnie będzie wyglądać tak: + +https://yourgnusocialinstance.org/api/ + +W przypadku wątpliwości sprawdź witrynę instancji GNUsocial, aby znaleźć adresy URL domeny tokenu żądania, tokenu dostępu i autoryzacji. Będzie to pierwsza część adresu URL domene, bez "/oauth/...." + +Nazwa aplikacji StatusNet: Wstaw nazwę, którą nadałeś aplikacji w witrynie GNUsocial. + +Kliknij "Prześlij". + +Pojawi się przycisk "Zaloguj się do StatusNet". Kliknij go, a otworzy się zakładka lub okno w witrynie GNUsocial, w którym możesz kliknąć "Zezwól". Po kliknięciu i pomyślnej autoryzacji pojawi się numer kodu bezpieczeństwa. Skopiuj go i wróć do aplikacji $Projectname, którą właśnie opuściłeś i wstaw ją w polu: "Tutaj skopiuj kod bezpieczeństwa ze StatusNet". Kliknij "Prześlij". + +Jeśli się powiedzie, Twoje informacje z instancji GNUsocial powinny pojawić się w aplikacji $Projectname. + +Jeśli chcesz, masz teraz do wyboru kilka opcji, które należy również potwierdzić, klikając "Prześlij". Najbardziej interesująca jest opcja "Domyślnie wysyłaj publiczne wpisy do StatusNet". Ta opcja automatycznie wysyła wszystkie wpisy, które napisałeś na koncie $Projectname do Twojej instancji GNUsocial. + +Jeśli nie wybierzesz tej opcji, będziesz mieć możliwość ręcznego wysłania wpisu do swojej instancji GNUsocial. W tym celu, najpierw otwórz wpis (klikając w obszarze tekstowym wpisu) i kliknik ikonę kłódki obok przycisku "Udostępnij". Wybierz ikonę GNUsocial składającą się z trzech kolorowych dymków dialogowych. Zamknij to okno, a następnie wykonaj swój wpis. + +Jeśli wszystko pójdzie dobrze, właśnie wysłałeś swój wpis z $Projectname na swoje konto w instancji GNUsocial. + +#include doc/macros/addons_footer.bb; + diff --git a/doc/pl/admin/administrator_guide.md b/doc/pl/admin/administrator_guide.md new file mode 100644 index 000000000..86e5fd80c --- /dev/null +++ b/doc/pl/admin/administrator_guide.md @@ -0,0 +1,385 @@ +### Przegląd + +$Projectname to więcej niż prosta aplikacja internetowa. Jest to złożony system komunikacyjny, który bardziej przypomina serwer poczty elektronicznej niż serwer WWW. Aby zapewnić niezawodność i wydajność, wiadomości są dostarczane w tle i umieszczane w kolejce do późniejszego dostarczenia, gdy lokacje są wyłączone. Ten rodzaj funkcjonalności wymaga nieco więcej zasobów hosta niż typowy dziennik. Nie każdy dostawca hostingu PHP-MySQL będzie w stanie obsługiwać $Projectname. Tak więc, przed instalacją zapoznaj się z wymaganiami i potwierdź je u dostawcy usług hostingowych. + +Bardzo staraliśmy się, aby Hubzilla działała na zwykłych platformach hostingowych, takich jak te używane do hostowania blogów Wordpress i stron internetowych Drupal. Będzie ona działać na większości systemów VPS Linux. Platformy Windows LAMP, takie jak XAMPP i WAMP, nie są obecnie oficjalnie obsługiwane, jednak mile widziane są poprawki, jeśli uda Ci się je uruchomić. + +### Gdzie można znaleźć więcej pomocy + +Jeśli napotkasz problemy lub sam masz jakiś problem, które nie zostały opisane w tej dokumentacji, poinformuj nas o tym za pośrednictwem narzędzia do [śledzenia problemów na Github](https://framagit.org/hubzilla/core/issues). Prosimy o jak najdokładniejsze opisanie swojego środowiska operacyjnego i podanie jak największej ilości informacji o wszelkich komunikatach o błędach, które mogą się pojawić, abyśmy mogli zapobiec ich występowaniu w przyszłości. Ze względu na dużą różnorodność istniejących systemów operacyjnych i platform PHP możemy mieć ograniczone możliwości debugowania instalacji PHP lub pozyskiwania brakujących modułów, ale dołożymy wszelkich starań, aby rozwiązać wszelkie ogólne problemy z kodem. + +### Zanim zaczniesz + +#### Wybierz nazwę domeny lub subdomeny dla swojego serwera + +Platformę $Projectname można zainstalować tylko w katalogu głównym domeny lub subdomeny i nie może ona działać na niestandardowych portach TCP. + +#### Zdecyduj, czy będziesz używać SSL i uzyskaj certyfikat SSL przed instalacją oprogramowania + +POWINNO się używać SSL. Jeśli używasz SSL, MUSISZ użyć certyfikatu uznawanego przez przeglądarki. **NIE WOLNO używać certyfikatów z podpisem własnym!** + +Przetestuj swój certyfikat przed instalacją. Narzędzie internetowe do testowania certyfikatu jest dostępne pod adresem http://www.digicert.com/help/. Odwiedzając witrynę po raz pierwszy, użyj adresu URL SSL (https://), jeśli protokół SSL jest dostępny. Pozwoli to uniknąć późniejszych problemów. Procedura instalacji nie pozwoli na użycie certyfikatu, który nie jest zaufany dla przeglądarki. + +To ograniczenie zostało wprowadzone, ponieważ Twoje publiczne wpisy mogą zawierać odniesienia do obrazów na Twoim hubie. Inni członkowie przeglądający swój strumień w innych centrach otrzymają ostrzeżenia, jeśli Twój certyfikat nie jest zaufany w ich przeglądarce internetowej. To zmyli wiele osób, ponieważ jest to zdecentralizowana sieć i otrzymają ostrzeżenie o Twoim hubie podczas przeglądania własnego huba i mogą pomyśleć, że ich własny hub ma problem. Te ostrzeżenia są bardzo techniczne i przerażające dla niektórych osób, z których wielu nie będzie wiedziało, jak postępować, z wyjątkiem przestrzegania zaleceń przeglądarki. Jest to destrukcyjne dla społeczności. To powiedziawszy, zdajemy sobie sprawę z problemów związanych z obecną infrastrukturą certyfikatów i zgadzamy się, że istnieje wiele problemów, ale to nie zmienia wymagania. + +Bezpłatne certyfikaty zgodne z przeglądarkami są dostępne od dostawców, takich jak StartSSL i LetsEncrypt. + +Jeśli NIE używasz SSL, może wystąpić opóźnienie do minuty dla startowego skryptu instalacyjnego - podczas sprawdzania portu SSL, aby zobaczyć, czy tam jest wszystko w porządku. Podczas komunikowania się z nowymi witrynami Hubzilla zawsze najpierw próbuje połączyć się z portem SSL, zanim powróci do mniej bezpiecznego połączenia. Jeśli nie używasz SSL, twój serwer WWW NIE MOŻE w ogóle nasłuchiwać na porcie 443. + +Jeśli używasz LetsEncrypt do dostarczania certyfikatów i tworzenia pliku pod _well-known_ lub _acme-challenge_, aby LetsEncrypt mógł zweryfikować własność domeny, usuń lub zmień nazwę katalogu _.well-known_ zaraz po wygenerowaniu certyfikatu. $Projectname zapewni własną procedurę obsługi usług *.well-know* po zainstalowaniu, a istniejący katalog w tej lokalizacji może uniemożliwić poprawne działanie niektórych z tych usług. Nie powinno to stanowić problemu w przypadku Apache, ale może to być problem z Nginx lub innymi platformami serwera internetowego. + +### Wdrożenie + +Nowy hub można wdrożyć na kilka sposobów: + +* ręczna inastalaja na istniejącym serwerze; +* automatyczna instalacja na istniejącym serwerze przy użyciu skryptu instalacyjnego; +* automatyczne wdrożenie przy użyciu prywatnego serwera wirtualnego OpenShift (VPS).) + +### Wymagania + +* Apache z włączonym modułem _mod-rewrite_ i ustawioną dyrektywą "AllowOverride All", tak aby można było stosować plik _.htaccess_. Niektóre osoby z powodzeniem stosowały Nginx czy Lighttpd.Przykładowe skrypty konfiguracyjne są dostępne na tej platformie w [doc/install](). Apache and Nginx mają najlepsze wsparcie. + +* PHP 7.1 lub w wersji wyższej. + * _Proszę mieć na uwadze, że w niektórych środowiskach hostinu współdzielonego, wersja wiersza poleceń PHP różni się od wersji serwera internetowego_ + +* Dostęp do wiersza poleceń PHP z ustawionym w pliku php.ini parametrem _register_argc_argv_ na true i bez ograniczeń dostawcy hostingu w zakresie stosowania funkcji _exec()_ i _proc_open()_. + +* Rozszerzenia curl, gd (z obsługą co najmmniej jpeg i png), mysqli, mbstring, mcrypt, zip i openssl. Tozszerzenie imagick nie jest wymagane ale jest zalecane. + +* Wymagane jest rozszerzenie xml, jeśli chce sie mieć działajacą obsługę webdav. + +* Jakaś forma serwera pocztowego lub bramy pocztowej, taka jak działa PHP mail(). + +* Serwer bazy danych Mysql 5.x lub MariaDB lub PostgreSQL. + +* Możliwość planowania zadań dla crona. + +* WYMAGANA jest instalacja w katalogu głównym hosta WWW (wirtualnego hosta w Apache i bloku w Nginx). + +### Instalacja ręczna + +##### Krok 1. + +Rozpakuj pliki $Projectname do katalogu głównego obszaru dokumentów serwera WWW. Jeśli kopiujesz drzewo katalogów na swój serwer WWW, upewnij się, że dołączasz ukryte pliki, takie jak _.htaccess_. + +Jeśli możesz to zrobić, zalecamy użycie Git do sklonowania repozytorium źródłowego zamiast używania spakowanego pliku tar lub zip. To znacznie ułatwia późniejszą aktualizację oprogramowania. Polecenie Linux do sklonowania repozytorium do katalogu "mywebsite: wyglądałoby tak: + + git clone https://framagit.org/hubzilla/core.git mywebsite + +a następnie, w dowolnym momencie, możesz pobrać najnowsze zmiany za pomocą: + + git pull + +upewnij się, że istniejeją foldery `store/[data]/smarty3` i `store` i że są one możliwe do zapisu przez właściciela procesu serwera WWW: + + mkdir -p "store/[data]/smarty3" + chmod -R 777 store + +To uprawnienie (777) jest bardzo niebezpieczne i jeśli masz wystarczające uprawnienia i wiedzę powinieneś umożliwić zapisywanie w tych katalogach tylko przez serwer WWW i użytkownika, który uruchomia crona (patrz poniżej), jeśli jest taki. W wielu współdzielonych środowiskach hostingowych może to być trudne, bez zgłoszenia problemu u dostawcy. Powyższe uprawnienia pozwolą oprogramowaniu działać, ale nie są optymalne. + +Aby działały niektóre internetowe narzędzia administracyjne, serwer WWW musi mieć możliwość zapisu w następujących katalogach: + +* _addon_ +* _extend_ +* _view/theme_ +* _widget_ + +##### Krok 2. + +Utwórz pustą bazę danych i zanotuj szczegóły dostępu (nazwa hosta, nazwa użytkownika, hasło, nazwa bazy danych). Biblioteki bazy danych PDO powracają do komunikacji przez gniazdo uniksowe, gdy nazwą hosta jest _localhost_, ale niektóre osoby zgłosiły problemy z implementacją gniazda. Użyj gniazd, jeśli Twoje uprawnienia na to pozwalają. W przeciwnym razie, jeśli baza danych jest udostępniana na hoście _localhost_, jako nazwę hosta wpisz _127.0.0.1_. + +Wewnętrznie używamy teraz biblioteki PDO do połączeń z bazą danych. Jeśli masz do czynienia z konfigyracją bazy danych, którą nie możesz obsłużyć poprzez formularz konfiguracyjny (ma przykład w przypadku uzywania MySQL z nietypową lokalizacją gniazd) - możesz podać ciąg połączenia PDO jako nazwę hosta. Na przykład: + + :/path/to/socket.file + +W razie potrzeby nadal trzeba wypełnić w formularzu konfiguracyjnym wszystkie inne wartości mające zastosowanie. + +##### Krok 3. + +Utwórz pusty plik o nazwie _.htconfig.php_ i uczyń go możliwymm do zapisania przez serwer WWW. Krok ten wykonaj, jeśli wiesz, że serwer WWW nie będzie mógł sam utworzyć tego pliku. + +##### Krok 4. + +Odwiedź swoją witrynę za pomocą przeglądarki internetowej i postępuj zgodnie z instrukcjami. Zanotuj wszelkie komunikaty o błędach i popraw je przed kontynuowaniem. Jeśli używasz protokołu SSL (od znanego urzędu autoryzacyjnego), użyj schematu _https_ w adresie URL swojej witryny. + +##### Krok 5. + +Jeśli automatyczna instalacja nie powiedzie się z jakiegoś powodu, sprawdź następujące rzeczy: + +* Czy istnieje plik _.htconfig.php_? Jeśli nie, edytuj plik _htconfig.php_ i zmień w nim ustawienia systemowe. Następnie zmień jego nazwę na _.htconfig.php_. +* Czy baza danych jest wypełniona. Jeśli nie, zaimportuj treść skryptu _install/schema_xxxxx.sql_ w phpmyadmin lub wierszu poleceń mysql (zamień 'xxxxx' na własciwy typ bazy danych). + +##### Krok 6. + +Po udanej instalacji odwiedż ponownie swoją witrynę i zarejestruj swoje osobiste konto. Błędy rejestracji powinny dać sie naprawić automatycznie. + +Jeśli w tym momencie wystąpiła jakakolwiek *krytyczna* awaria, to na ogół przyczyna leży w źle funkcjonującej bazie danych. W takim przypadku, aby zacząć od nowa, usuń lub zmień nazwę pliku _.htconfig.php_ i usuń tabele bazy danych. + +Aby Twoje konto miało dostęp administratora, powinno to być utworzone jako pierwsze, a adres e-mail podany podczas rejestracji musi być zgodny z adresem administratora podanym podczas instalacji. Jeśli stało sie inaczej, aby dać dostęp administracyjny jakiemuś kontu, dodaj _4096_ w rekordzie tabeli _account_roles_ tego konta. + +Ze względu na bezpieczeństwo witryny, nie ma możliwości zapewnienia dostępu administracyjnego za pomocą formularzy konfiguracyjnych. + +##### Krok 7. BARDZO WAŻNY! + +Skonfiguruj zadanie Crona lub *zadanie zaplanowane*, tak aby uruchamiać menedżera Crona co 10-15 minut w celu przetwarzania i konserwacji w tle. Przykład: + + cd /base/directory; /path/to/php Zotlabs/Daemon/Master.php Cron + + +Zmień tutaj `/base/directory` i `/path/to/php` na właściwe dla siebie ścieżki. + +Jeśli używasz serwera linuksowego, uruchom polecenie `crontab -e` i dodaj wiersz taki jak poniżej, zmieniając odpowiednio ścieżki i ustawienia: + + */10 * * * * cd /home/myname/mywebsite; /usr/bin/php Zotlabs/Daemon/Master.php Cron > /dev/null 2>&1 + +Lokalizację PHP na ogół można ustalić wykonując polecenie _which php_. Jeśli masz problemy z ustawienie Crona, skontaktuj się z dostawcą hostingu w celu uzyskania pomocy. Hubzilla nie będzie działać prawidłowo bez tego kroku. + +Powinno się również sprawdzić ustawienie parametru _App::$config['system']['php_path']_ w pliku _.htconfig.php_. Powinno to wyglądać tak (zmień to zgodnie z lokalizacją PHP w swoim systemie): + + + App::$config['system']['php_path'] = '/usr/local/php56/bin/php'; + +#### Oficjalne dodatki + +##### Instalacja + +Przejdź do swojej witryny. Następnie sklonuj repozytorium dodatków (osobno). Nadamy temu repozytorium pseudonim `hzaddons`. Możesz pobrać inne repozytoria dodatków Hubzilla, nadając im różne pseudonimy: + + cd mywebsite + util/add_addon_repo https://framagit.org/hubzilla/addons.git hzaddons + +##### Aktualizacja + +W celu aktualizacji drzewa dodatków, powinno się, z poziomu głównego katalogu witryny, wydać polecenie aktualizacji tego repozytorium: + + cd mywebsite + util/update_addon_repo hzaddons + +Stwórz reprezentację dokumentacji online z możliwością wyszukiwania. Możesz to zrobić za każdym razem, gdy dokumentacja jest aktualizowana: + + cd mywebsite + util/importdoc + +### Automatyczna instalacja poprzez skrypt .homeinstall + +Istnieje skrypt powłoki _.homeinstall/hubzilla-setup.sh_, który po uruchomieniu zainstaluje Hubzillę i jego zależności na nowej instalacji stabilnej dystrybucji Debiana 9 (Stetch). Powinien działać na podobnych systemach Linux, ale wyniki mogą się różnić. + +#### Wymagania + +Skrypt instalacyjny został pierwotnie zaprojektowany dla małego serwera sprzętowego za routerem domowym. Jednak został przetestowany też na kilku systemach z Debian 9: + +* Home-PC (Debian-9.2-amd64) i Rapberry-Pi 3 (Rasbian = Debian 9.3) + * Połączenie z Internetem i domowy router + * Mini-PC lub Raspi połaczone z router + * Napęd USB dla kopii zapasowych + * Świeża instalacja Debian na swoim mini-pc + * Router z otwartymi portami 80 i 443 dla Debiana + +#### Etapy instalacji + +1. _apt-get install git_ +1. _mkdir -p /var/www/html_ +1. _cd /var/www/html_ +1. _git clone https://framagit.org/hubzilla/core.git ._ +1. _nano .homeinstall/hubzilla-config.txt_ +1. _cd .homeinstall/_ +1. _./hubzilla-setup.sh_ +1. _service apache2 reload_ +1. Open your domain with a browser and step throught the initial configuration of $Projectname. + +### Zalecane dodatki + +Zalecamy zainstalowanie następujących dodatków we wszystkich publicznych witrynach: + + nsfw - hide inappropriate posts/comments + superblock - block content from offensive channels + +### Dodatki federacyjne + +Kilka społeczności internetowych zaczęło łączyć się przy użyciu wspólnych protokołów. Stosowane protokoły mają nieco ograniczone możliwości. Na przykład protokół GNU-Social nie oferuje żadnych trybów prywatności, a protokół Diaspora +jest nieco bardziej restrykcyjny w zakresie dozwolonych rodzajów komunikacji. Wszystkie komentarze muszą być podpisane w bardzo unikalny sposób przez oryginalnego autora. Rozważany jest również protokół ActivityPub, który może być obsługiwany w przyszłości. Żaden inny istniejący protokół nie obsługuje lokalizacji nomadycznej używanej w tym projekcie. Stwarza to pewne problemy z obsługą, ponieważ niektóre funkcje działają w niektórych sieciach, a w innych nie. Niemniej jednak protokoły federacyjne umożliwiają nawiązywanie połączeń ze znacznie większą społecznością ludzi na całym świecie. Są dostarczane jako dodatki. + +* _diaspora_ - protokół diaspory używany przez Diasporę i Friendica. Najpierw należy włączyć „Diaspora Statistics” (statystyki), aby włączyć wszystkie dostępne funkcje. + +* _gnusoc_ - protokół społecznościowy GNU, używany przez GNU-Social, Mastodon i kilka innych społeczności. Ten dodatek wymaga najpierw zainstalowania usługi _pubsubhubbub_ (także dodatku). + +Każdy członek Twojej siatki musi indywidualnie zdecydować, czy zezwolić na te protokoły, ponieważ mogą one kolidować z kilkoma pożądanymi podstawowymi funkcjami i możliwościami Hubzilla (takimi jak migracja kanałów i klonowanie). Robi się to +na swojej stronie _Ustawienia_ -> _Ustawienia funkcji i dodatków_. Administrator może również ustawić: + + util/config system.diaspora_allowed 1 + util/config system.gnusoc_allowed 1 + +i włączać te protokoły automatycznie dla wszystkich nowo tworzonych kanałów. + +### Klasy usług + +Klasy usług pozwalają na ustawienie limitów zasobów systemowych poprzez ograniczenie tego, co mogą robić poszczególne konta, w tym przechowywania plików i najwyższych limitów wpisów. Zdefiniuj niestandardowe klasy usług zgodnie ze swoimi potrzebami w pliku _.htconfig.php_. Na przykład utwórz klasę standard i premium, używając następujących wierszy: + + // Service classes + + App::$config['system']['default_service_class']='standard'; // this is the default service class that is attached to every new account + + // configuration for standard service class + App::$config['service_class']['standard'] = + array('photo_upload_limit'=>2097152, // total photo storage limit per channel (here 2MB) + 'total_identities' =>1, // number of channels an account can create + 'total_items' =>0, // number of top level posts a channel can create. Applies only to top level posts of the channel user, other posts and comments are unaffected + 'total_pages' =>100, // number of pages a channel can create + 'total_channels' =>100, // number of channels the user can add, other users can still add this channel, even if the limit is reached + 'attach_upload_limit' =>2097152, // total attachment storage limit per channel (here 2MB) + 'chatters_inroom' =>20); + + // configuration for premium service class + App::$config['service_class']['premium'] = + array('photo_upload_limit'=>20000000000, // total photo storage limit per channel (here 20GB) + 'total_identities' =>20, // number of channels an account can create + 'total_items' =>20000, // number of top level posts a channel can create. Applies only to top level posts of the channel user, other posts and comments are unaffected + 'total_pages' =>400, // number of pages a channel can create + 'total_channels' =>2000, // number of channels the user can add, other users can still add this channel, even if the limit is reached + 'attach_upload_limit' =>20000000000, // total attachment storage limit per channel (here 20GB) + 'chatters_inroom' =>100); + +Aby zastosować klasę usług do istniejącego konta, użyj narzędzia wiersza poleceń z katalogu głównego instalacji Hubzilla: + +* uzyskanie listy klas usług: + + util/service_class + + +* ustawienie domyślnej klasy usług na _firstclass_: + + util/config system default_service_class firstclass + +* uzyskanie listy usług, które należą do klasy _firstclass_: + + util/service_class firstclass + +* ustawienie całkowitego użycia dysku ze zdjęciami _firstclass_ na 10 milionów bajtów + + util/service_class firstclass photo_upload_limit 10000000 + +* ustawienie konta z identyfikatorem 5 na klasę _firstclass_ (z potwierdzeniem): + + util/service_class --account=5 firstclass + +* ustawienie konta, które jest właścicielem kanału `bdziennikchan` na klasę _firstclass_ (z potwierdzeniem) + + util/service_class --channel=bdziennikchan firstclass + +**Opcje limitu klas usług** + +##### Opcje limitów klas usług: + +* _photo_upload_limit_ - maksymalna łączna liczba bajtów na zdjęcia +* _total_items_ - maksymalna liczba wpisów na najwyższym poziomie +* _total_pages_ - maksymalna liczba stron comanche +* _total_identities_ - maksymalna liczba kanałów posiadanych na koncie +* _total_channels_ - maksymalna liczba kanałów +* _total_feeds_ - maksymalna liczba kanałów RSS +* _attach_upload_limit_ - maksymalna pojemność przesyłania plików (w bajtach) +* _minimum_feedcheck_minutes_ - najniższe ustawienie dozwolone dla odpytywania kanałów RSS +* _chatrooms_ - maksymalna liczba czatów +* _chatters_inroom_ - maksymalna liczba rozmówców w czacie +* _access_tokens_ - maksymalna liczba tokenów dostępu gościa na kanał + +### Zarządzanie motywami + +#### Przykład zarządzania repozytorium + +1) Przejdź na poziom katalogu głównego serwera: + + ``` + root@hub:/root# cd /var/www + ``` + +2) Dodaj repozytorium motywu i nadaj mu nazwę + + ``` + root@hub:/var/www# util/add_theme_repo https://github.com/DeadSuperHero/redmatrix-themes.git DeadSuperHero + ``` +3) Zaktualizuj repozytorium motywu + + ``` + root@hub:/var/www# util/update_theme_repo DeadSuperHero + ``` + +### Katalog kanałów + +#### Słowa kluczowe + +Na stronie katalogu kanałów może pojawiać się chmura słów kluczowych. Jeśli chcesz ukryć te słowa kluczowe, które są pobierane z serwera katalogów, możesz użyć narzędzia _config_: + + util/config system disable_directory_keywords 1 + +Jeśli twój hub pracuje w trybie autonomicznym, ponieważ nie chcesz łączyć się z globalną siecią, możesz zamiast tego ustawić opcję systemową _directory_server_ na wartość pustą: + + util/config system directory_server "" + +### Administrowanie + +#### Administrowanie witryną + +Administracja witryną jest zwykle wykonywana za pośrednictwem strony administratora znajdującej się na ścieżce _/admin_ adresu URL Twojej witryny. Aby uzyskać dostęp do tej strony, trzeba mieć uprawnienia administratora na serwerze. Prawa administracyjne są przyznawane pierwszemu kontu, które zostało zarejestrowane w witrynie, pod warunkiem, że adres e-mail tego konta dokładnie odpowiada adresowi e-mail podanemu jako adres e-mail administratora podczas konfiguracji. + +Istnieje kilka sposobów, w jakie może to się nie powieść i pozostawić system bez konta administratora, na przykład jeśli pierwsze konto, które zostało utworzone, miało inny adres e-mail niż adres e-mail administratora, który został podany podczas konfiguracji. + +Ze względów bezpieczeństwa w systemie nie ma strony internetowej ani interfejsu, który daje dostęp administratora. Jeśli potrzebujesz poprawić sytuację, w której system nie ma konta administratora, musisz to zrobić edytując tabelę kont w bazie danych. Nie ma innego wyjścia. Aby to zrobić, będziesz musiał zlokalizować wpis w tabeli kont, który należy do żądanego administratora i ustawić _account_roles_ dla tego wpisu na _4096_. Będziesz wtedy mógł uzyskać dostęp do strony administratora z menu profilu twojego systemu lub bezpośrednio na ścieżce _/admin_. + +Hub może mieć wielu administratorów i nie ma ograniczeń co do ich liczby. Powtórz powyższą procedurę dla każdego konta, któremu chcesz przyznać uprawnienia administracyjne. + +### Rozwiązywanie problemów + +#### Pliki dzienników + +Plik dziennika systemowego jest niezwykle przydatnym źródłem informacji do śledzenia błędów. Można to włączyć na stronie konfiguracji _admin/log_. Ustawienie poziomu o wartości *LOGGER_DEBUG* jest preferowany w stabilnej instalacji produkcyjnej. Większość problemów związanych z komunikacją lub przechowywaniem jest tutaj wymieniona. Ustawienie na *LOGGER_DATA* zapewnia znacznie więcej szczegółów, ale może wypełnić dysk. W obu przypadkach zalecamy użycie *logrotate* w systemie operacyjnym do cyklicznego tworzenia dzienników i usuwania starszych wpisów. + +Na dole twojego *.htconfig.php* znajduje się kilka linii (zakomentowanych), które umożliwiają rejestrowanie błędów PHP. Zgłaszane są problemy ze składnią i wykonywaniem kodu i jest to też pierwszym miejscem, w którym należy szukać problemów, które powodują "biały ekran" lub pustą stronę. Zwykle jest to wynikiem problemów z kodem lub składnią. Błędy bazy danych są zgłaszane do pliku dziennika systemowego, ale uznaliśmy, że przydatne jest umieszczenie w katalogu najwyższego poziomu pliku *dbfail.out*, który gromadzi tylko informacje o problemach związanych z bazą danych. Jeśli plik istnieje i można go zapisać, będą rejestrowane w nim błędy bazy danych, a także w pliku dziennika systemowego. + +W przypadku błędów "500: problemy mogą być często rejestrowane w dziennikach serwera internetowego, często w */var/log/apache2/error.log* lub podobnym. Zapoznaj się z dokumentacją systemu operacyjnego. + +Istnieją trzy różne obiekty dziennika. + +**Pierwsza to dziennik błędów bazy danych**. Jest on używane tylko wtedy, gdy tworzy się plik o specyficznej nazwie *dbfail.out* w folderze głównym swojej witryny i pozwala na zapisywanie w nim przez serwer WWW. Jeśli masz jakiekolwiek zapytania do bazy danych, które nie powiodły się, wszystkie są zgłaszane tutaj. Zwykle wskazują na literówki w naszych zapytaniach, ale występują również w przypadku rozłączenia serwera bazy danych lub uszkodzenia tabel. W rzadkich przypadkach zobaczymy tutaj warunki wyścigu, w których dwa procesy próbowały utworzyć wpis *xchan* lub *cache* z tym samym identyfikatorem. Należy zbadać wszelkie inne błędy (zwłaszcza błędy uporczywe). + +**Drugi to dziennik błędów PHP**. Jest tworzony przez procesor języka i zgłasza tylko problemy powstałe w środowisku językowym. Znowu mogą to być błędy składniowe lub błędy programistyczne, ale generalnie są one fatalne i skutkują "białym ekranem"; +na przykład PHP kończy działanie. Prawdopodobnie powinieneś zajrzeć do tego pliku też, jeśli coś pójdzie nie tak, co nie powoduje białego ekranu. Często zdarza się, że plik ten jest pusty przez wiele dni. + +Na dole dostarczonego pliku *.htconfig.php* znajduje się kilka linii, które, jeśli nie są zakomentowane, włączają dziennik PHP (niezwykle przydatny do znajdowania źródła błędów białego ekranu). Nie jest to robione domyślnie ze względu na potencjalne problemy z własnością pliku dziennika i uprawnieniami do zapisu oraz fakt, że domyślnie nie ma rotacji pliku dziennika. + +**Trzeci to "dziennik aplikacji"**. Jest to używane przez Hubzillę do zgłaszania tego, co dzieje się w programie i zwykle zapisywane są tu wszelkie trudności lub nieoczekiwane dane, które otrzymaliśmy. Czasami zgłasza się tu również komunikaty +o stanie "pulsu", aby wskazać, że osiągnęliśmy określony punkt w skrypcie. Jest to dla nas najważniejszy plik dziennika, ponieważ tworzymy go samodzielnie wyłącznie w celu zgłaszania stanu zadań w tle i wszystkiego, co wydaje się dziwne lub nie na miejscu. To może nie być śmiertelne, ale może po prostu nieoczekiwane. Jeśli wykonujesz zadanie i występuje problem, daj nam znać, co znajduje się w tym pliku, gdy wystąpił problem. Proszę nie wysyłaj mi 100 milionów zrzutów, tylko mnie wkurzysz! Tylko kilka odpowiednich wierszy, abym mógł wykluczyć kilkaset tysięcy wierszy kodu i skoncentrować się na tym, gdzie zaczyna się pojawiać problem. + +To są dzienniki Twojej witryny, a nie moje. Zgłaszamy poważne problemy na każdym poziomie dziennika. Gorąco polecam poziom dziennika *DEBUG* dla większości witryn. Dostarcza on trochę dodatkowych informacji i nie tworzy dużych plików dziennika. Kiedy pojawia się problem, który uniemożliwia wszelkie próby śledzenia, możesz wtedy włączyć na krótki czas poziom *DATA*, aby uchwycić wszystkie szczegóły struktur, z którymi mieliśmy do czynienia w tym czasie. Ten poziom dziennika zajmuje dużo miejsca, więc jest zalecany tylko na krótkie okresy lub w przypadku witryn testowych dla programistów. + +Zalecam skonfigurowanie *logrotate* zarówno dla dziennika php, jak i dziennika aplikacji. Zazwyczaj co tydzień lub dwa zaglądam do *dbfail.out*, naprawiam zgłoszone problemy i zaczynam od nowego pliku. Podobnie jest z plikiem dziennika PHP. Odwołuję się do tego od czasu do czasu, aby sprawdzić, czy jest coś, co wymaga naprawy. + +Jeśli coś pójdzie nie tak i nie jest to błąd krytyczny, patrzę na plik dziennika aplikacji. Często robię to: + +``` +tail -f logfile.out +``` + +ponieważ powtarza operację, która ma problemy. Często wstawiam w kodzie dodatkowe instrukcje rejestracji, jeśli nie ma żadnej wskazówki, co się dzieje. Nawet coś tak prostego jak "got here" lub drukuję wartości zmiennej, która może być podejrzana. Ty też możesz to zrobić - wręcz zachęcam Cię do tego. Gdy już znajdziesz to, czego potrzebujesz, możesz wykonać: + +``` +git checkout file.php +``` + +aby natychmiast wyczyścić wszystkie dodane elementy rejestrowania. Skorzystaj z informacji z tego dziennika i wszelkich szczegółów, które możesz podać podczas badania problemu, aby zgłosić błąd - chyba że analiza wskazuje na źródło problemu. W takim przypadku po prostu to napraw. + +##### Rotowanie plików dziennika + +1. Włącz dodatek *Logrot* w [oficjalnym repozytorium dodatków hubzilla](https://framagit.org/hubzilla/addons). +1. Utwórz katalog w swoim katalogu głównym o nazwie `log` z uprawnieniami do zapisu przez serwer WWW. +1. Przejdź do ustawień administratora programu *Logrot* i wprowadź nazwę folderu, a także maksymalny rozmiar i liczbę zachowanych plików dziennika. + +#### Zgłaszanie problemów + +Zgłaszając problemy, staraj się podać jak najwięcej szczegółów, które mogą być potrzebne programistom do odtworzenia problemu i podać pełny tekst wszystkich komunikatów o błędach. + +Zachęcamy do dołożenia wszelkich starań, aby wykorzystać te dzienniki w połączeniu z posiadanym kodem źródłowym w celu rozwiązywania problemów i znajdowania ich przyczyn. Społeczność często jest w stanie pomóc, ale tylko Ty masz dostęp do +plików dziennika swojej witryny i ich udostępnianie jest uważane za zagrożenie bezpieczeństwa. + +Jeśli problem z kodem został odkryty, zgłoś go w bugtrackerze projektu (https://framagit.org/hubzilla/core/issues). Ponownie podaj jak najwięcej szczegółów, aby uniknąć ciągłego zadawania pytań o konfigurację lub powielanie problemu, abyśmy mogli przejść od razu do problemu i dowiedzieć się, co z nim zrobić. Zapraszamy również do oferowania własnych rozwiązań i przesyłania poprawek. W rzeczywistości zachęcamy do tego, ponieważ wszyscy jesteśmy wolontariuszami i mamy mało wolnego czasu. Im więcej osób pomaga, tym łatwiejsze jest obciążenie pracą dla wszystkich. W porządku, jeśli Twoje rozwiązanie nie jest idealne. Wszystko pomaga i być może uda nam się to poprawić. + diff --git a/doc/pl/admin/hub_snapshots.md b/doc/pl/admin/hub_snapshots.md new file mode 100644 index 000000000..fa38be7f8 --- /dev/null +++ b/doc/pl/admin/hub_snapshots.md @@ -0,0 +1,127 @@ +### Hub Snapshot Tools + +Programiści Hubzilli często muszą przełączać się między gałęziami, które mogą +mieć niekompatybilne schematy lub zawartość bazy danych. Poniższe dwa skrypty +tworzą i przywracają pełne migawki instancji Hubzilli, w tym zarówno główny +katalog sieciowy, jak i stan całej bazy danych. Każdy skrypt wymaga pliku +konfiguracyjnego o nazwie *hub-snapshot.conf* znajdującego się w tym samym +folderze i zawiera on określone katalogi i szczegóły bazy danych huba. + +### Konfiguracja + +Format pliku konfiguracyjnego jest bardzo ścisły. Między nazwą zmiennej a +wartością nie może być spacji. Zastąp tylko treść w cudzysłowach swoją +konfiguracją. Zapisz ten plik jako *hub-snapshot.conf* obok skryptów. + + # Location of hub root. Typically this is the location of the Hubzilla repo clone. + HUBROOT="/var/www/" + # MySQL database name + DBNAME="hubzilla" + # MySQL database user + DBUSER="hubzilla" + # MySQL database password + DBPWD="akeufajeuwfb" + # The target snapshot folder where the git repo will be initialized + SNAPSHOTROOT="/root/snapshots/hubzilla/" + +### Migawka + +Przykład użycia: + + sh hub-snapshot.sh my-hub.conf "Commit message for the snapshot" + +**hub-snapshot.sh**: + + #!/bin/bash + + if ! [ -f "$1" ]; then + echo "$1 is not a valid file. Aborting..." + exit 1 + fi + source "$1" + #echo "$DBNAME" + #echo "$DBUSER" + #echo "$DBPWD" + #echo "$HUBROOT" + #echo "$SNAPSHOTROOT" + MESSAGE="snapshot: $2" + + if [ "$DBPWD" == "" -o "$SNAPSHOTROOT" == "" -o "$DBNAME" == "" -o "$DBUSER" == "" -o "$HUBROOT" == "" ]; then + echo "Required variable is not set. Aborting..." + exit 1 + fi + + if [ ! -d "$SNAPSHOTROOT"/db/ ]; then + mkdir -p "$SNAPSHOTROOT"/db/ + fi + if [ ! -d "$SNAPSHOTROOT"/www/ ]; then + mkdir -p "$SNAPSHOTROOT"/www/ + fi + + if [ ! -d "$SNAPSHOTROOT"/www/ ] || [ ! -d "$SNAPSHOTROOT"/db/ ]; then + echo "Error creating snapshot directories. Aborting..." + exit 1 + fi + + echo "Export database..." + mysqldump -u "$DBUSER" -p"$DBPWD" "$DBNAME" > "$SNAPSHOTROOT"/db/"$DBNAME".sql + echo "Copy hub root files..." + rsync -va --delete --exclude=.git* "$HUBROOT"/ "$SNAPSHOTROOT"/www/ + + cd "$SNAPSHOTROOT" + + if [ ! -d ".git" ]; then + git init + fi + if [ ! -d ".git" ]; then + echo "Cannot initialize git repo. Aborting..." + exit 1 + fi + + git add -A + echo "Commit hub snapshot..." + git commit -a -m "$MESSAGE" + + exit 0 + +### Przywracanie + + #!/bin/bash + # Restore hub to a previous state. Input hub config and commit hash + + if ! [ -f "$1" ]; then + echo "$1 is not a valid file. Aborting..." + exit 1 + fi + source "$1" + COMMIT=$2 + + if [ "$DBPWD" == "" -o "$SNAPSHOTROOT" == "" -o "$DBNAME" == "" -o "$DBUSER" == "" -o "$HUBROOT" == "" ]; then + echo "Required variable is not set. Aborting..." + exit 1 + fi + RESTOREDIR="$(mktemp -d)/" + + if [ ! -d "$RESTOREDIR" ]; then + echo "Cannot create restore directory. Aborting..." + exit 1 + fi + echo "Cloning the snapshot repo..." + git clone "$SNAPSHOTROOT" "$RESTOREDIR" + cd "$RESTOREDIR" + echo "Checkout requested snapshot..." + git checkout "$COMMIT" + echo "Restore hub root files..." + rsync -a --delete --exclude=.git* "$RESTOREDIR"/www/ "$HUBROOT"/ + echo "Restore hub database..." + mysql -u "$DBUSER" -p"$DBPWD" "$DBNAME" < "$RESTOREDIR"/db/"$DBNAME".sql + + chown -R www-data:www-data "$HUBROOT"/{store,extend,addon,.htlog,.htconfig.php} + + echo "Restored hub to snapshot $COMMIT" + echo "Removing temporary files..." + + rm -rf "$RESTOREDIR" + + exit 0 + diff --git a/doc/pl/admins.bb b/doc/pl/admins.bb new file mode 100644 index 000000000..e27b3ae73 --- /dev/null +++ b/doc/pl/admins.bb @@ -0,0 +1,15 @@ +[h2]Dokumentacja dla administratorów huba[/h2] +[h3]Wdrozenie swojego huba[/h3] +[zrl=[baseurl]/help/install]Instalacja[/zrl] +[zrl=[baseurl]/help/red2pi]Instalowanie $Projectname na Raspberry Pi[/zrl] +[zrl=[baseurl]/help/Hubzilla_on_OpenShift]$Projectname na OpenShift[/zrl] +[h3]Utrzymywanie swojego huba[/h3] +[zrl=[baseurl]/help/troubleshooting]Wskazówki dotyczące rozwiązywania problemów[/zrl] +[zrl=[baseurl]/help/theme_management]Zarządzanie motywami[/zrl] +[zrl=[baseurl]/help/hidden_configs]Poprawianie ukrytych konfiguracji $Projectname[/zrl] +[zrl=[baseurl]/help/service_classes]Klasy usługi[/zrl] +[zrl=[baseurl]/help/directories]Praca z katalogami i ich konfigurowanie[/zrl] +[h3]Najczęściej zadawane pytania[/h3] +[zrl=[baseurl]/help/faq_admins]FAQ dla administratorów[/zrl] + +#include doc/macros/main_footer.bb; diff --git a/doc/pl/bugs.bb b/doc/pl/bugs.bb new file mode 100644 index 000000000..de1ed03a5 --- /dev/null +++ b/doc/pl/bugs.bb @@ -0,0 +1,31 @@ +[h2]Błędy, problemy i rzeczy, które pojawiają się w nocy ...[/h2] +[h3]Coś poszło nie tak! Kto jest odpowiedzialny za naprawianie tego?[/h3] + +[b]$Projectname Community Server[/b] + +$Projectname Community Server to oprogramowanie typu Open Source, które jest utrzymywane przez "społeczność" - zasadniczo nieopłacanych ochotników. Nikt nie jest odpowiedzialny za naprawianie błędów. Pracujemy razem, aby oprogramowanie i sieć działały płynnie i bez błędów. Jesteś członkiem tej społeczności, więc potrzebujemy również Twojej pomocy, aby zapewnić wysokiej jakości oprogramowanie. Nie ma mitycznych "programistów", którzy w magiczny sposób wszystko naprawiają. Do nas wszystkich należy włączenie się i pomoc. + +Pierwszą rzeczą, którą musisz zrobić, jest porozimieć się z administratorem huba - osobą, która obsługuje Twoją witrynę i zarządza nią. Znajdują się ona w wyjątkowej sytuacji, ponieważ ma dostęp do wewnętrznego oprogramowania i bazy danych oraz [b]plików dziennika[/b] i będzie musiała zaangażować się w naprawę problemu. Inne osoby "w sieci" nie mogą naprawdę Ci tym pomóc. Pierwszą rzeczą, jaką musi zrobić administrator huba, jest przejrzenie dzienników i podjecie próby odtworzenia problemu. Dlatego staraj się być tak pomocny i uprzejmy, jak to tylko możliwe, pomagając mu przyjrzeć się problemowi. + +Aby znaleźć swojego administratora huba (jeśli nie wiesz, kim on jest), zajrzyj na [url=[baseurl]/siteinfo]tą stronę[/url]. Jeśli nie podał on żadnych informacji kontaktowych na tej stronie lub nie podał "Impressum", zobacz [url=[baseurl]/siteinfo.json]podsumowanie informacji o tej witrynie[/url] znajdujące się pod nagłówkiem "admin:". + +Zdecydowanie zaleca się, aby administratorzy huba wypełniali raporty o błędach, tak aby możliwe było dołączenie odpowiedniego plik dziennika i informacji z bazy danych istotnych dla problemu oraz aby byli oni gotowi do wypróbowania rozwiązań i testów uzupełniających. Bez tego poziomu współpracy rozwiązanie problemu może nie być możliwe. + +[h3]Jestem administratorem huba, co mam zrobić?[/h3] + +Oprogramowania zapewniające tą usługę sieciową jest typu Open Source i jest dostępne do wglądu. Zachęcamy wszystkich do zapoznania się z kodem i zobaczenia, jak wszystko działa i sprawdzenia, czy nie robimy nic złego lub niedbałego. Jeśli został zgłoszony komunikat o błędzie, często można przeszukać pliki źródłowe tego komunikatu o błędzie i dowiedzieć się, co go spowodowało. Dzięki tym informacjom i plikom dziennika serwisu możliwe będzie ustalenie sekwencji zdarzeń prowadzących do błędu. Problem mogą powodować również serwisy zewnętrzne i jego źródłem wcale nie musi być Twój serwis, ale inne miejsce w sieci. Spróbuj określić punkty końcowe komunikacji (huby lub serwisy), których dotyczy problem i skontaktuj się z administratorem tego serwisu lub tych serwisów. Spróbuj podać czas zdarzenia, w którym coś poszło nie tak, aby można go było znaleźć w dziennikach. Współpracuj z innymi administratorami, aby spróbować znaleźć przyczynę problemu. Pliki dziennika są Twoim przyjacielem. Kiedy w oprogramowaniu dzieje się coś, czego się nie spodziewaliśmy, prawie zawsze zostało to zarejestrowane. + +[h3]Biały ekran śmierci[/h3] + +Jeśli podczas robienia czegoś pojawia się pusty biały ekran, prawie zawsze jest to błąd kodu lub składni. W pliku .htconfig.php serwisu znajdują się instrukcje, które pozwolą administratorowi witryny na włączenie rejestrowania składni. Zalecamy wszystkim witrynom korzystanie z tego. Po włączeniu rejestrowania składni powtórz sekwencję, która doprowadziła do błędu, a powinna ona zarejestrować nieprawidłową linię kodu. Mamy nadzieję, że dzięki tym informacjom uda Ci się rozwiązać problem. Gdy to zrobisz, prześlij poprawkę "upstream", abyśmy mogli udostępnić poprawkę pozostałym członkom projektu i innym społecznościom. To jest kluczowa zaleta korzystania z oprogramowania Open Source - dzielimy się mim wszyscy. + +[h3]Jestem głupi. Nie wiem, co jest nie tak.[/h3] + +W tej sytuacji warto omówić tę kwestię na jednym z forów internetowych. Może być ich kilka, a niektóre mogą bardziej pasować do Twojego ojczystego języka. W tej chwili kanał "Hubzilla Support" (support@zotadel.net) jest zalecanym forum do omawiania błędów. + +Jeśli członkowie społeczności z wykształceniem i doświadczeniem w zakresie inżynierii oprogramowania nie mogą Ci od razu pomóc, zrozum, że są wolontariuszami i mogą mieć dużo innej pracy i zobowiązań w tym czasie. W tym momencie musisz zgłosić błąd. Aby to zrobić, będziesz potrzebować konta na framagit.org. Zarejestruj się, a następnie odwiedź https://framagit.org/hubzilla/core/issues. Utwórz tutaj problem i podaj wszystkie te same informacje, które podałeś online. Nie pomijaj niczego. + +Następnie musisz zaczekać. Jeśli jest to poważny problem, może zostać szybko rozwiązany, ale nikt nie jest odpowiedzialny za naprawianie błędów. Jeśli problem utrzymuje się bez rozwiązania, poświęć trochę czasu na zbadanie samemu problemu. Zapytaj o wszystko, czego nie rozumiesz a co jest związane z tym problemem. Dowiesz się więcej o tym, jak działa oprogramowanie i prawdopodobnie dowiesz się, dlaczego teraz nie działa. Ostatecznie to ktoś w społeczności ma zamiar to naprawić, a ty jesteś członkiem społeczności. Tak właśnie działa proces Open Source. + +Inne osoby pracujące nad rozwiązaniem problemu mogą potrzebować dowiedzieć się więcej, więc odrób swoją pracę domową i udokumentuj, co się dzieje i wszystko, czego próbowałeś. Nie mów "Zrobiłem xyz i to nie działa". To nam nic nie mówi. Powiedz nam dokładnie, jakie kroki podjąłeś i jaki był rezultat, a także co się w rezultacie wydarzyło. Jaką stronę (URL) przeglądałeś lub jaki formularz wypełniałeś? Jeśli były jakieś komunikaty o błędach, nie mów "wystąpił komunikat o błędzie". Powiedz nam dokładnie, o czym była wiadomość. Powiedz nam również, z jakiego huba korzystasz, jakiej wersji oprogramowania używasz i wszelkie inne szczegóły, które mogą być unikalne na temat konfiguracji Twojej witryny. Rozumie się, że możesz chcieć zachować prywatność niektórych informacji i swoich połączeń, jednak jeśli nie chcesz udostępniać informacji potrzebnych innym osobom do odtworzenia i rozwiązania problemu, może on nie zostać naprawiony. + diff --git a/doc/pl/checking_account_quota_usage.bb b/doc/pl/checking_account_quota_usage.bb new file mode 100644 index 000000000..b2cc0075c --- /dev/null +++ b/doc/pl/checking_account_quota_usage.bb @@ -0,0 +1,20 @@ +[b]Sprawdzanie wykorzystania limitu konta (wykorzystanie limitów usług)[/b] + +Na Twoim hubie mogą zostać zaimplementowane limity klas usług, przypisujące ograniczenia do całkowitego rozmiaru miejsca na plików i zdjęci, ilosci kanałów i postów najwyższego poziomu, jakie może utworzyć właściciel konta dla określonego poziomu usług i inne ograniczenia. + +Oto, jak możesz szybko sprawdzić, ile z przydzielonego limitu aktualnie używasz: + +[b]Sprawdenie poziom limitów przechowywania plików[/b] +Odwiedź nastęþujący adres URL w przeglądarce: +[observer=1][observer.baseurl]/filestorage/[observer.webname][/observer] +[observer=0]example.com/filestorage/username[/observer] + +[b]Sprawdenie poziomu limitów miejsca na przesłane zdjęcia[/b] +[observer=1][observer.baseurl]/photos/[observer.webname][/observer] +[observer=0]example.com/photos/username[/observer] + +Przykład: +[observer=1][observer.baseurl]/filestorage/[observer.webname][/observer] +[observer=0]example.com/filestorage/username[/observer] + +#include doc/macros/main_footer.bb; diff --git a/doc/pl/general.bb b/doc/pl/general.bb new file mode 100644 index 000000000..0dc15ea91 --- /dev/null +++ b/doc/pl/general.bb @@ -0,0 +1,18 @@ +[h2]Informacja o projekcie i serwisie[/h2] +[h3]$Projectname[/h3] +[zrl=[baseurl]/help/Privacy]Polityka prywatności[/zrl] +[zrl=[baseurl]/help/project/governance]Zarządzanie projektem[/zrl] +[zrl=[baseurl]/help/contributor/convenant]Porozumienie projektowe i kodeks postępowania[/zrl] + +[h3]Źródła zewnętrzne[/h3] +[zrl=[baseurl]/help/external-resource-links]Wykaz zasobów zewnętrznych[/zrl] +[url=https://framagit.org/hubzilla/core/]Główna witryna internetowa[/url] +[url=https://framagit.org/hubzilla/addons]Witryna dodatków[/url] +[url=[baseurl]/help/credits]Podziękowania od $Projectname[/url] +[h3]O tym hubie $Projectname[/h3] +[zrl=[baseurl]/help/TermsOfService]Warunki świadczenia usług dla tego huba[/zrl] +[zrl=[baseurl]/siteinfo]Inormacja o hubie (/siteinfo)[/zrl] +[zrl=[baseurl]/siteinfo/json]Szczegółowe informacje techniczne w formacie JSON(/siteinfo/json)[/zrl] + +#include doc/macros/main_footer.bb; + diff --git a/doc/pl/main.bb b/doc/pl/main.bb new file mode 100644 index 000000000..24caa1453 --- /dev/null +++ b/doc/pl/main.bb @@ -0,0 +1,20 @@ +[img][baseurl]/images/hubzilla-banner.png[/img] + +[zrl=[baseurl]/help/about]Co to jest $Projectname?[/zrl] +$Projectname to bezpłatny i otwartoźródłowy zestaw aplikacji i usług internetowych działających na specjalnym serwerze internetowym, zwanym "hubem", który może łączyć się z innymi hubami w sfederalizowanej sieci internetowej. + +[zrl=[baseurl]/help/features]Możliwości $Projectname[/zrl] +$Projectname zapewnia użytkownikom zaawansowaną komunikację, tożsamości i usług kontroli dostępu, które bezproblemowo współpracują w różnych domenach i niezależnych witrynach internetowych. Pozwala użytkownikom [b]publicznie[/b] lub [b]prywatnie[/b] publikować treści za pośrednictwem "kanałów" (ang. channel), które są podstawowymi, zabezpieczonymi kryptograficznie tożsamościami zapewniającymi uwierzytelnianie niezależnie od hubów, które je hostują. To rewolucyjne wyzwolenie tożsamości online z poszczególnych serwerów i domen jest nazywane "tożsamością nomadyczną" i jest oparte na protokole Zot, nowej strukturze zdecentralizowanej kontroli dostępu ze szczegółowymi, rozszerzalnymi uprawnieniami. +Z praktycznego punktu widzenia członków danego huba, korzystających z oprogramowania $Projectname, oferuje ono szereg znanych, zintegrowanych aplikacji i usług internetowych, w tym: +[ul] +[li]wątki dyskusyjne w sieciach społecznościowych[/li] +[li]przechowywanie plików w chmurze[/li] +[li]kalendarz i kontakty (z obsługą CalDAV i CardDAV)[/li] +[li]hosting stron internetowych z systemem zarządzania treścią[/li] +[li]wiki[/li] +[li]i dużo więcej ...[/li][/ul] +Chociaż wszystkie te aplikacje i usługi można znaleźć w innych pakietach oprogramowania, tylko $Projectname pozwala ustawić uprawnienia dla grup i osób, [b]które mogą nawet nie mieć kont na Twoim hubie[/b]! W typowych aplikacjach internetowych, jeśli chcesz udostępniać rzeczy prywatnie w Internecie, osoby, którym udostępniasz dane, muszą mieć konta na serwerze, na którym znajdują się Twoje dane; w przeciwnym razie serwer nie może uwierzytelniać odwiedzających witrynę, aby wiedzieć, czy przyznać im dostęp. $Projectname rozwiązuje ten problem za pomocą zaawansowanego systemu zdalnego uwierzytelniania, który weryfikuje tożsamość odwiedzających, wykorzystując techniki obejmujące kryptografię klucza publicznego. +Dzięki oferowanym aplikacjom, $Projectname świetnie się nadaje do budowy platformy komunikacyjno-publikacyjnej o charkterze społecznościowym dla realnych grup społecznych, takich jak rodziny, lokalne grupy, organizacje społeczne, środowiska szkolne, wspólnoty mieszkańców czy wspólnoty religijne. + +[zrl=[baseurl]/help/what_is_zot]Co to jest Zot?[/zrl] +Jest to nowy protokół, oparty na JSON, do wdrażania bezpiecznej, zdecentralizowanej komunikacji i usług. Różni się od wielu innych protokołów komunikacyjnych, budując komunikację na podstawie zdecentralizowanej struktury tożsamości i uwierzytelniania. Składnik uwierzytelniania jest koncepcyjnie podobny do OpenID, ale jest odizolowany od tożsamości opartej na DNS. Tam, gdzie to możliwe, zdalne uwierzytelnianie jest ciche i niewidoczne. Zapewnia to mechanizm kontroli dostępu rozproszonego na skalę sieci WWW, który jest dyskretny. diff --git a/doc/pl/member/assets/qr_text_to_post.png b/doc/pl/member/assets/qr_text_to_post.png new file mode 100644 index 0000000000000000000000000000000000000000..887c85492e24e6e2146de1d16a0ef9159dc56674 GIT binary patch literal 273 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

o)ANEpkLgx00ORdb@&Z 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

x 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 UcTG40P>@GnT1Bct!tnF|0EYo&QUCw| literal 0 HcmV?d00001 diff --git a/doc/pl/member/bbcode.html b/doc/pl/member/bbcode.html new file mode 100644 index 000000000..655c021ee --- /dev/null +++ b/doc/pl/member/bbcode.html @@ -0,0 +1,343 @@ + +

Informator o BBCode

+

+W Hubzilla stosowana jest własna odmiana BBCode. Niniejszy informator jest +treściwym opisem składni tej odmiany BBCode. +

+ +

Dekracja tekstu

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Składnia BBcodeTekst formatowany
[b]pogrubiony[/b]pogrubiony
[i]pochyły[/i]pochyły
[u]podkreślony[/u]podkreślony
[s]przekreślony[/s]przekreślony
[color=red]czerwony[/color]czerwony
[hl]podświetlony[/hl]podświetlony
[font=courier]jaiś tekst[/font] jakiś tekst
[quote]cytat[/quote]
cytat
[quote=Author]Autor? Ja? Nie, nie, nie...[/quote]Autor napisał:
Autor? Ja? Nie, nie, nie...
+ [size=small]tekst mały (small)[/size]
+ [size=xx-large]tekst wielki (xx-large)[/size]
+ [size=20]tekst z czcionką 20px[/size]
+
+ Opcje rozmiaru obejmują: xx-small, small, medium, large, xx-large
tekst mały (small)
tekst wielki ()xx-large)
tekst z czcionką 20px
Dodanie poziomego paska +[hr] +Tak jak to + + Dodanie poziomego paska


Tak jak to +
To jest +[center]wyśrodkowany[/center] +tekst + To jest
wyśrodkowany

tekst +
+ +

Bloki kodu

+Kod można renderować generalnie w formacie blokowym lub wbudowanym (w zależności od tego, czy w tekście znajdują się znaki nowego wiersza) lub można określić obsługiwany język dla rozszerzonego podświetlania składni. Podświetlanie składni wymaga odpowiedniej wtyczki renderującej, takiej jak hilite. Obsługiwane języki z wtyczką hilite to php, css, mysql, sql, abap, diff, html, perl, ruby, vbscript, avrc, dtd, java, xml, cpp, python, javascript, js, json, sh. +

+Jeśli wtyczka renderująca nie jest zainstalowana lub określono nieobsługiwany język, dane wyjściowe bloków kodu z podświetleniem składni są takie same, jak znacznik kodu formatu bloku. +

+ + + + + + + + + + + + + + + +
Składnia BBcodeWyjście
[code]funkcja bbcode() { }[/code]funkcja bbcode() { }
[code=php]funkcja bbcode() {
+ $variable = true;
+ if( $variable ) {
+ echo "true";
+ }
+}[/code]
  1.  function bbcode() {
  2.    $variable = true;
  3.    if( $variable ) {
  4.      echo "true";
  5.    }
  6.  }
[nobb][nobb]W ten sposób [i]możesz[/i] +[u]pokazać[/u] jak użyć składnię +[hl]BBcode[/hl][/nobb][/nobb][nobb]W ten sposób [i]możesz[/i] [u]pokazać[/u] jak uzyć składnię []hl]BBcode[/hl][/nobb]
+ +

Listy

+ + + + + + + + + + + + + + + + + + +
Składnia BBcodeWyrenderowana lista
[ul]
+[*] Pierwszy element listy
+[*] Drugo element listy
+[/ul]
  • Pierwszy element listy
  • Drugi element listy
[ol]
+[*] Pierwszy element listy
+[*] Drugi element listy
+[/ol]
  • Pierwszy element listy
  • Drugi element listy
[list=A]
+[*] Pierwszy element listy
+[*] Drugi element listy
+[/list]
+ Elementami listy są 1, i, I, a, A.
  • Pierwszy element listy
  • Drugi element listy
[dl terms="b"]
+[*= Pierwsze hasło] Opis pierwszego hasła
+[*= Drugie hasło] Opis drugiego hasła
+[/dl]
+ Opcje stylu hasła mogą być kombinacją tekstu: +
+
b
z czcionką bold
+
i
z czcionką italic
+
u
z czcionką underline
+
m
z czcionką monospace
+
l
z czcionką large
+
h
poziomego — tak jak tta lista definicyjna
+
+
+
Pierwsze hasło
Opis pierwszego hasła
+
Drugie hasło
Opis drugiego hasła
+ +

Tabele

+ + + + + + + + + + + + + + + + +
Składnia BBcodeWyrenderowana tabela
[table border=0]
+[tr]
+[th]Nagłówek 1[/th][th]Nagłówek 2[/th]
+[/tr]
+[tr][td]Treść[/td][td]Treść[/td][/tr]
+[tr][td]Treść[/td][td]Treść[/td][/tr]
+[/table]
+
Nagłówek 1Nagłówek 2
ContentContent
TreśćTreść
[table border=1]
+[tr]
+[th]Nagłówek 1[/th][th]Nagłówek 2[/th]
+[/tr]
+[tr][td]Treść[/td][td]Treść[/td][/tr]
+[tr][td]Treść[/td][td]Treść[/td][/tr]
+[/table]
+
Nagłówek 1Nagłówek 2
ContentContent
TreśćTreść
[table]
+[tr]
+[th]Nagłówek 1[/th][th]Nagłówek 2[/th]
+[/tr]
+[tr][td]Treść[/td][td]Treść[/td][/tr]
+[tr][td]Treść[/td][td]Treść[/td][/tr]
+[/table]
Nagłówek 1Nagłówek 2
TreśćTreść
TreśćTreść
+
+ +

Odnośniki i treść osadzona

+ + + + + + + + + + + + + + + + +
Składnia BBcodeWyjście
[video]URL wideo[/video]
+[audio]URL audio[/audio]
[url=https://hubzilla.org]Hubzilla[/url]Hubzilla
Obraz [img]https://example.org/image.jpg[/img] +w jakimś tekście + Obraz Image/photo w jakimś tekście +
+ + +

Kod specyficzny dla $Projectname

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Składnia BBcodeWyjście
Wersja tagu [url] wykorzystująca magiczne uwierzytelnianie + [zrl=https://hubzilla.org]Link rozpoznający tożsamość[/zrl] + https://hubzilla.org/?zid=[observer=1][observer.address][/observer][observer=0]your_channel@your.home.hub[/observer]
Wersja tagu [img] wykorzystująca magiczną uwierzytelnianie + [zmg]https://hubzilla.org/some/photo.jpg[/zmg] + Obraz jest widoczny tylko dla osób uwierzytelnionych i za zgodą właściciela kanału.
Wyjście zależne od obserwatora: + [nobb][observer=1]Tekst do wyświetlenia, jeśli obserwator JEST uwierzytelniony[/observer][/nobb] +
+ + [nobb][observer=0]Tekst wyświetlany, jeśli obserwator NIE JEST uwierzytelniony[/observer][/nobb] + +
+ + [nobb][observer.language=en]Tekst wyświetlany, jeśli językiem obserwatora jest angielski[/observer][/nobb] + +
+ + [nobb][observer.language!=de]Tekst wyświetlany, jeśli językiem obserwatora nie jest język niemiecki[/observer][/nobb] + +
+ + [nobb][observer.url][/nobb] + + adres URL kanału obserwatora
+ + [nobb][observer.baseurl][/nobb] + + witryna WWW obserwatora
+ + [nobb][observer.name][/nobb] + + nazwa obserwatora
+ + [nobb][observer.webname][/nobb] + + krótka nazwa w adresie URL obserwatora
+ + [nobb][observer.address][/nobb] + + adres (ZOT-id) obserwatora
+ + [nobb][observer.photo][/nobb] + + zdjęcie profilowe obserwatora
Co to jest spoiler?
+ [spoiler]Tekst, który chcesz ukryć.[/spoiler]
+ Co to jest spoiler? +
[toc data-toc='div.page-body' data-toc-headings='h1,h2']
+Utwórz spis treści na stronie internetowej lub stronie wiki. Proszę zapoznać się z oryginalnym widżetem TOC jQuery aby uzyskać więcej informacji. +
    +
  • Opcjonalny parametr: 'data-toc'. Jeśli pominięty, domyślną wartością jest „body”
  • +
  • Opcjonalny parametr: 'data-toc-headings'. Jeśli pominięty, wartość domyślna to „h1, h2, h3”
  • +
[nobb][rpost=title]Tekst do publikacji[/rpost][/nobb]
+Obserwator wróci do swojego macierzystego huba, aby wprowadzić post z określonym tytułem i treścią. Obie opcje są opcjonalne
[baseurl]/rpost?f=&title=title&body=Text+to+post
Wymaga to wtyczki qrator.
[qr]tekst do publikacji[/qr]
Wymaga to odpowiedniej wtyczki mapy, takiej jak openstreetmap. + [map]Wygenerowanie wbudowanej mapy przy użyciu aktualnych współrzędnych plakatu w przeglądarce, jeśli lokalizacja przeglądarki jest włączona
Wymaga to odpowiedniej wtyczki mapy, takiej jak openstreetmap. + [map=latitude,longitude]Wygenerowanie mapy przy wykorzystaniu współrzędnych globalnych.
Wymaga to odpowiedniej wtyczki mapy, takiej jak openstreetmap. + [map]Nazwa miejsca[/map] +Wygenerowanie mapy dla podanej nazwanej lokalizacji. Zwracana jest pierwsza pasująca lokalizacja. Na przykład „Sydney” zazwyczaj zwraca Sydney w Australii, a nie Sydney w Nowej Szkocji w Kanadzie, chyba że określono dokładniejszą lokalizację. Zdecydowanie zalecamy skorzystanie z narzędzia podglądu posta, aby upewnić się, że masz prawidłową lokalizację przed wysłaniem postu. +
[&copy;] ©
diff --git a/doc/pl/member/member_faq.bb b/doc/pl/member/member_faq.bb new file mode 100644 index 000000000..1da05ef92 --- /dev/null +++ b/doc/pl/member/member_faq.bb @@ -0,0 +1,11 @@ +[h3]Najczęściej zadawane pytania[/h3] +[h4]Mogę edytować tekst postu po jego zapisaniu, ale czy istnieje sposób na zmianę uprawnień?[/h4] +Krótka odpowiedź: Nie, nie ma takiej mozliwości. Są ku temu istotne powody. Możesz zmienić uprawnienia do swoich plików, zdjęć i polubień, ale nie do postów po ich zapisaniu. Główny powód jest taki, że po zapisaniu posta jest on rozpowszechniony albo na kanał publiczny, a stamtąd na inne serwery $Projectname albo do tych, do których miał trafić. Tak jak nie możesz odzyskać czegoś, co dałeś innej osobie, nie możesz zmienić uprawnień do postów w $Projectname. Musielibyśmy śledzić wszędzie, gdzie trafia Twój wpis, śledzić wszystkich, którym pozwoliłeś go zobaczyć, a następnie śledzić, od kogo go usunąć. +Jeśli post jest publiczny, jest to jeszcze trudniejsze, ponieważ $Projectname to globalna sieć i nie ma możliwości śledzenia posta, nie mówiąc już o jego niezawodnym odzyskaniu. Inne sieci, które mogą otrzymały Twój post, nie mają niezawodnego sposobu usunięcia lub odzyskania posta. +[h4]Pobrałem swój kanał i zaimportowałem go (sklonowałem swoją tożsamość) do innej witryny, ale nie ma treści, postów ani zdjęć. Co jest nie tak???[/h4] +Posty i zdjęcia oraz inne pliki są dostarczane niezależnie od podstawowych informacji o kanale. Wynika to z ograniczeń pamięci związanych z przechowywaniem rozmów i archiwizowania zdjęć. Wpisy i rozmowy mogą być synchronizowane niezależnie od podstawowych informacji o kanale. Zdjęcia i archiwa plików można przesyłać za pomocą wtyczki, takiej jak „redfiles”, która obecnie jest oznaczona jako „eksperymentalna”. Tworząc tę funkcję, pomyśleliśmy, że najważniejsze jest zachowanie wszystkich kontaktów. Twoi znajomi widzieli już Twoje stare treści. Posty i rozmowy miały następny priorytet i można je teraz synchronizować. Pliki i zdjęcia są ostatnim elementem, który całkowicie działa. Kiedy znajdziemy kogoś chętnego do zakończenia wdrażania tego, będzie to zrobione. :) +[h4]Nie widzę zasobów prywatnych[/h4] +Prawdopodobnie wyłączone są pliki cookie stron trzecich. Musisz je włączyć, aby zdalne uwierzytelnianie działało. +[h4]Jest wiele obcojęzycznych postów. Przetłumaczmy je automatycznie.[/h4] +Istnieje również wiele [b]prywatnych[/b] obcojęzycznych postów, ale usługi automatycznego tłumaczenia wymagałyby od nas przekazywania tych prywatnych wiadomości do usługi tłumaczeniowej. Nie wiemy, jak zostaną one wykorzystane na tych serwisach. Właściwie to wiemy, dzięki Edwardowi Snowdenowi. Naszym najlepszym rozwiązaniem jest projekt o nazwie [b][i]Apertium[/i][/ b], który jest tłumaczem open source, który możemy zainstalować lokalnie. Obecnie brakuje tłumaczeń na język niemiecki - które są najczęściej żądanymi tłumaczeniami w matrycy. Po raz kolejny zostanie to zrealizowane, gdy znajdziemy kogoś, kto naprawdę chce, aby to się stało. + diff --git a/doc/pl/member/member_guide.bb b/doc/pl/member/member_guide.bb new file mode 100644 index 000000000..d7f559c9e --- /dev/null +++ b/doc/pl/member/member_guide.bb @@ -0,0 +1,1024 @@ +[h3]Przegląd[/h3] + +Chociaż wiele funkcji i możliwości Hubzilli jest znanych osobom, które korzystały z serwisów społecznościowych i oprogramowania do blogowania, istnieje również sporo nowych koncepcji i funkcji, z którymi większość osób wcześniej się nie zetknęła. Niektóre z nowych pomysłów są związane ze zdecentralizowanym charakterem sieci; inne są związane z zaawansowanym systemem uprawnień, który jest niezbędny do ochrony prywatności danych. Celem tego przewodnika jest pomóc w zrozumieniu, jak tworzyć, konfigurować i używać tożsamość nomadyczną. + +[h3]Rejestracja[/h3] + +Nie wszystkie serwisy oparte na $Projectname umożliwiają otwartą rejestrację. Jeśli rejestracja jest dozwolona, zobaczysz łącze "Rejestracja" bezpośrednio pod formularzem logowania na stronie głównej serwisu. Kliknięcie tego linku przeniesie Ciebie do strony rejestracyjnej. W niektórych serwisach. link ten może przekierować do innej witryny, która umożliwia rejestrację. Ponieważ wszystkie serwisy Hubzilla są połączone, nie ma znaczenia, gdzie znajduje się Twoje konto. + +[b]Twój ades e-mail[/b] + +Proszę o wprowadzenie poprawnego adresu e-mail. Twój adres e-mail nigdy nie jest publikowany. Ten adres będzie używany do aktywacji konta, do ewentualnego wysyłania powiadomień o przychodzących wiadomościach lub wpisach oraz do odzyskiwania utraconych haseł. + +[b]Hasło[/b] + +Wprowadź wybrane hasło i powtórz je w drugim polu, aby upewnić się, że zostało wpisane poprawnie. Ponieważ Hubzilla oferuje zdecentralizowaną tożsamość, Twoje konto może zalogować Cię do wielu innych serwisów internetowych sieci Hubzilla. + +[b]Regulamin serwisu[/b] + +Kliknij to łącze, aby przeczytać dokument [zrl=[baseurl]/help/TermsOfService]Regulamin serwisu[/zrl]. Po ich przeczytaniu zaznacz pole w formularzu rejestracyjnym, aby to potwierdzić. + +[b]Rejestracja[/b] + +Po podaniu niezbędnych informacji, kliknij przycisk „Zarejestruj się”. Niektóre serwisy mogą wymagać zatwierdzenia rejestracji przez administratora, zanim zostanie ona przetworzona, o czym osoba rejestrująca się zostanie powiadomiona. Trzba więc śledzić swoją pocztę e-mail (w tym folder ze spamem) w celu potwierdzenia rejestracji. + +[h3]Kanały[/h3] + +[h4][b]Co to są kanały?[/b][/h4] + +Kanały to zbiory treści powiązane z profilem. Kanał może mieć różną formę. Może reprezentować Ciebie (kanał osobisty), być witryną internetową, forum, albumem ze zdjęciami, czymkolwiek. Dla większości osób pierwszym kanałem jest kanał osobisty, reprezentujący tą osobę. + +Najważniejsze cechy kanału, który reprezentuje "Ciebie", to: +[ul] +[*]Bezpieczna i prywatna komunikacja "wolna od spamu" + +[*]Tożsamość i "pojedyncze logowanie" w całej sieci Hubzilla; + +[*]Kotrola prywatności i uprawnienia, które obejmują całą sieć; + +[*]Usugi katalogowe (np. Książka telefoniczna). +[/ul] +Krótko mówiąc, kanał, który reprezentuje Ciebie, "opisuje Ciebie w internecie". + +[h4][b]Uprawnienia w kanale oparte na rolach[/b][/h4] + +W celu uproszczenia zarządzaniem uprawnieniami w kanałach, w Hubzilla wprowadzono "role uprawnieniowe". Podczas tworzenia nowego kanału użytkownik jest proszony o wybranie roli jaką ma pełnić kanał. Z każdą z takich ról związany jest zestaw uprawnień. Najpopularniejszą rolą uprawnień jest rola sieci społecznościowej. Ma się wiele innych możliwości, dzięki opcjom, które są analogiczne do grup i stron na Facebooku, przestrzeni współpracy, kanałów aktualności (RSS) i nie tylko. Te role automatycznie konfigurują kilka różnych zmiennych systemowych, od uprawnień przyznanych znajomym, po domyślne ustawienia prywatności i opcje widoczności. Dostępne są zaawansowane konfiguracje, które umożliwiają dostosowanie każdego z tych parametrów do własnych potrzeb. Stwierdziliśmy jednak, że większość ludzi woli "ustawić i zapomnieć". Dalej opisano niektóre z różnych ról, które są obecnie dostępne oraz ich wpływ na prywatność uzytkownika i zdolność do interakcji. + +[h5][b]Kanał społecznościowy[/b][/h5] + +[b]- federacyjny[/b] + +Kanał tego rodzaju jest bardzo liberalnym profilem społecznościowym, który jest kompatybilny z innymi federacyjnymi sieciami społecznościowymi. Zasady zezwoleń są podobne do Twittera i w większości zgodne z Diasporą i Mastodonem. Prywatność ma niższy priorytet niż łatwość dostępu i łączenia się z innymi. Każdy w sieci Fediverse może komentować Twoje publiczne wpisy i wysyłać Ci prywatną pocztę. Domyślnie posty i inne publikowane elementy są publiczne, ale można do nich ograniczyć dostęp przy ich tworzeniu. Jesteś wymieniony w katalogu. Twoja obecność w Internecie i połączenia są widoczne dla innych. Ten tryb może zwiększyć narażenie na niepożądaną komunikację i spam. Rola ta nie jest ogólnie zalecana, chyba że musisz regularnie kontaktować się z członkami innych sieci. + +[b]- przeważnie publiczny[/b] + +Kanał jest typowym profilem społecznościowym. Twoje wpisy i opublikowane elementy są domyślnie publiczne, ale możesz to zmienić podczas tworzenia elementu i ograniczyć dostęp do niego. Jesteś wymieniony w katalogu. Twoja obecność w Internecie i połączenia są widoczne dla innych. Tylko osoby z bezpośrednich kontaktów mogą komentować Twoje publiczne wpisy i wysyłać Ci prywatną pocztę. Zasady pozwoleń są podobne do Facebooka. + +[b]- ograniczony[/b] + +Domyślnie wszystkie wpisy i opublikowane elementy są wysyłane do prywatnej grupy prywatności "Znajomi" i nie są upubliczniane. Do tej grupy prywatności są dodawani nowi znajomi. Jeśli chcesz, możesz to zmienić i utworzyć publiczny wpis lub inny publicznie dostępny element. Jesteś wymieniony w katalogu. Twoja obecność online (na czacie) i Twoje kontakty (znajomi) są widoczne dla przeglądających Twój profil. + +[b]- prywatny[/b] + +Domyślnie wszystkie wpisy i opublikowane elementy są wysyłane do grupy prywatności "Znajomi". Do tej grupy dodawani są Twoi nowi znajomi. Możesz to zmienić i utworzyć publiczny wpis lub inny element publiczny, jeśli chcesz. NIE jesteś wymieniony w katalogu. Tylko osoby z Twoich kontaktów mogą zobaczyć Twoje inne połączenia. Twoja obecność w Internecie jest ukryta. + + +[h5][b]Forum[/b][/h5] + +[b]- przeważnie publiczne[/b] + +Kanał typowy dla publicznego forum. Wpisy i publikowane elementy są domyślnie publiczne. Członkowie mogą publikować przez "!wzmiankę" lub wpis pełny. Zablokowane jest publikowanie zdjęć i innych elementów. Kanał jest widoczny w katalogu. Członkowie są dodawani automatycznie. + +[b]- ograniczone[/b] + +Domyślnie wszystkie wpisy i opublikowane elementy są wysyłane do grupy prywatności "Znajomi" kanału. Do tej grupy dodawani są nowi znajomi. Członkowie mogą publikować przez "!wzmiankę" lub wpis pełny, ale wpisy i odpowiedzi mogą być również widoczne dla innych odbiorców wpisów najwyższego poziomu, którzy nie są członkami. Kanał jest widoczny w katalogu. Członkowie muszą być ręcznie dodani przez właściciela forum. + +[b]- prywatne[/b] + +Domyślnie wszystkie wpisy i opublikowane elementy są wysyłane do grupy prywatności "Znajomi". Do tej grupy dodawani są nowi znajomi. Właściciel może to zmienić i w razie potrzeby utworzyć publiczny wpis lub element publiczny. Członkowie tego nie mogą. NIE jesteś wymieniony w katalogu. Tylko osoby z Twoich kontaktów mogą zobaczyć Twoje inne połączenia. Twoja obecność w Internecie jest ukryta. Członkowie muszą być dodani ręcznie przez właściciela forum. Wysyłanie przez "!wzmiankę" jest wyłączone. Wpisy można publikować wyłącznie za pośrednictwem wpisów pełnych i wysyłać do członków grupy prywatności "Znajomi". Nie są oni publicznie widoczni. + +[h5][b]Kanał RSS[/b][/h5] + +[b]- publiczny[/b] + +Podobne do kanału społecznościowego - głównie publicznego, ale dostosowany do źródeł kanałów RSS. Elementy mogą być swobodnie publikowane i pozyskiwane. Obecność w Internecie jest bez znaczenia, dlatego jest ukryta. Nowe połączenia są automatycznie zatwierdzane. + + +[b]- ograniczony[/b] + +Kanał nie jest wymieniony w katalogu. Obecność w Internecie jest bez znaczenia, dlatego jest ukryta. Kanał jest publikowany tylko dla członków grupy prywatności "Przyjaciele". Nowe połączenia są automatycznie dodawane do tej grupy prywatności. Członkowie muszą zostać ręcznie zatwierdzeni przez właściciela kanału. + + +[h5][b]Kanał specjalny[/b][/h5] + +[b]- celebrycki lub mównica[/b] + +Autorzy są wymienieni w katalogu. Komunikaty są domyślnie publiczne. Obecność w Internecie jest ukryta. Nie wolno komentować ani odpisywać w jakiejkolwiek formie, chociaż odwiedzający mogą "polubić" profil autora. + + +[b]- repozytorium gupowe[/b] + +Forum publiczne, które umożliwia członkom publikowanie plików, zdjęć i stron internetowych. + +[h5][b]Tryb niestandardowy i ekspercki[/b][/h5] + +Prywatność i uprawnienia ustawia się ręcznie, aby dopasować je do swoich potrzeb. + + +[h4][b]Tworzenie kanałów[/b][/h4] + +Po utworzeniu konta zostanie wyświetlony ekran "Dodaj kanał". Zwykle pierwszym kanałem będzie ten, który reprezentuje Ciebie, więc użycie własnego imienia i nazwiska (lub pseudonimu) jako nazwy kanału jest dobrym pomysłem. Nazwę kanału należy traktować jako tytuł lub krótki opis kanału. Pole "Wybierz krótki pseudonim" jest podobne do pola "Nazwa użytkownika". Wykorzystamy wszystko, co tu wpiszesz, do utworzenia adresu kanału, którego będą używać inne osoby do łączenia się z Twoim kanałem, a Ty będziesz używać to do logowania się w innych witrynach. Wygląda to jak adres e-mail i ma postać [i]pseudonim@serwis_twojej_rejestracji.xyz[/i]. + +Możesz tworzyć dodatkowe kanały, korzystając z odnośnika "Menedżer kanałów". + +Gdy to zrobisz, Twój kanał będzie gotowy do użycia. Pod adresem [observer=1][observer.url][/observer][observer=0][baseurl]/channel/username[/observer] znajdziesz "strumień" swojego kanału. Tutaj pojawi się Twoja ostatnia aktywność w odwrotnej kolejności chronologicznej. Jeśli opublikujesz wpis w polu oznaczonym "udostępnij", wpis pojawi się u góry Twojego strumienia. Znajdziesz tu również linki do wszystkich innych obszarów komunikacji tego kanału. Menu z ikoną "hamburger" w większości motywów zapewnia nawigację do innych składników systemu i aplikacji. Strona "Zdjęcia" zawiera albumy ze zdjęciami, a strona "Wydarzenia" zawiera wydarzenia udostępnione przez Ciebie i Twoje kontakty. + +[h4][b]Profile[/b][/h4] + +W $Projectname użytkownik może mieć wiele profili. Można używać różnych profili, aby pokazać różne "strony siebie" różnym odbiorcom. Różni się to od posiadania różnych kanałów. Różne kanały pozwalają na przesyłanie zupełnie różnych zestawów informacji. Można mieć kanał dla siebie, kanał dla swojej drużyny sportowej, kanał dla swojej witryny internetowej lub cokolwiek innego. Profil pozwala na precyzyjne stopniowanie "aspektów" kanału. Na przykład Twój domyślny profil publiczny może mówić "Cześć, jestem Fred i lubię się śmiać". Możesz pokazać swoim bliskim znajomym profil z dopiskiem "i ja też lubię rzucać krasnoludami". + +Zawsze masz profil nazywany profilem "domyślnym" lub "publicznym". Ten profil jest zawsze ogólnodostępny i nie można go ukryć (mogą występować rzadkie wyjątki w witrynach uruchamianych prywatnie lub odłączonych). Można i raczej powinno się ograniczyć informacje, które udostępnia się w swoim profilu publicznym. + +Tak więc, jeśli chcesz, aby inni znajomi mogli Cię znaleźć, warto mieć następujące informacje w swoim profilu publicznym: + +[ul][*]Twoje prawdziwe imię i nazwisko lub przynajmniej pseudonim, który wszyscy znają; +[*]Twoje zdjęcie; +[*]Twoją lokalizacja, przynajmniej na poziomie kraju.[/ul] + +Ponadto, jeśli chcesz poznać osoby, które mają podobne zainteresowania, poświęć chwilę i dodaj do swojego profilu kilka "słów kluczowych". Na przykład "muzyka, linux, fotografia" lub cokolwiek innego. Możesz dodać dowolną liczbę słów kluczowych. + +Aby utworzyć alternatywny profil, najpierw przejdź do [zrl=[baseurl]/settings/features]Ustawienia > Dodatkowe funkcje[/zrl] i włącz tam opcję "Wiele profili", w przeciwnym razie nie będziesz mieć możliwości korzystania z więcej niż tylko profilu domyślnego. + +Następnie wybierz "Edytuj profile" z menu swojej witryny Hubzilla. Możesz edytować istniejący profil, zmienić zdjęcie profilowe, dodać rzeczy do profilu lub utworzyć nowy profil. Możesz także utworzyć "klon" istniejącego profilu, jeśli chcesz zmienić tylko kilka elementów, ale nie chcesz ponownie wprowadzać wszystkich informacji. Aby to zrobić, kliknij profil, który chcesz sklonować i wybierz tam "Klonuj ten profil". + +Na liście swoich profili możesz również wybrać kontakty, które mogą zobaczyć Twój dodatkowy profil. Wystarczy kliknąć "Edytuj widoczność" obok profilu (dostępne tylko dla profili, które nie są Twoim profilem domyślnym), a następnie kliknąć określone połączenia, aby je dodać lub usunąć z grupy osób, które mogą wyświetlać ten profil. + +Po wybraniu profilu osoba przeglądająca Twój profil zobaczy przypisany przez Ciebie profil prywatny. Jeśli nie są oni uwierzytelnieni, zobaczą Twój profil publiczny. + +Istnieje ustawienie, które pozwala opublikować swój profil w katalogu i zapewnić, że będzie można go znaleźć innym. Możesz zmienić to ustawienie na stronie "Ustawienia". + +Jeśli nie chcesz, aby Cię widziano w internecie, ustaw swój profil jako prywatny. + +[h4][b]Słowa kluczowe i wyszukiwanie w katalogu[/b][/h4] + +Na stronie katalogu możesz wyszukiwać osoby z opublikowanymi profilami. Obecnie przeszukiwane jest tylko pole nazwy i słowa kluczowe. Możesz również umieścić takie słowa kluczowe w swoim domyślnym profilu - które mogą być używane do wyszukiwania wspólnych zainteresowań z innymi członkami. Słowa kluczowe są używane w narzędziu propozycji kanałów i chociaż nie są widoczne w katalogu, są wyświetlane, gdy ktoś odwiedza stronę Twojego profilu. + +Na stronie "Połączenia" oraz w katalogu znajduje się odnośnik, odpowiednio do "Sugestii" lub "Propozycji kanałów". Pozwoli to znaleźć kanały, które mają pasujące lub podobne słowa kluczowe. Im więcej podasz słów kluczowych, tym trafniejsze będą wyniki wyszukiwania. Są one sortowane według trafności. + +Przecztaj też: + +[zrl=[baseurl]/help/pl/AdvancedSearch]Zaawansowane przeszukiwanie[/zrl] + +[h4][b]Siatka, uprawnienia i delegowanie[/b][/h4] + +Strona "Siatka" zawiera wszystkie najnowsze wpisy z całej sieci Hubzilla, wykazane w odwrotnej kolejności chronologicznej. Posty, które się tutaj pojawiają, zależą w dużej mierze od ustawionych przez siebie preferencji. Na najbardziej liberalnym poziomie uprawnień będziesz otrzymywać posty od zupełnie obcych osób. Na drugim końcu skali możesz zobaczyć wpisy tylko od znajomych - lub, jeśli czujesz się naprawdę niezainteresowany społecznością, tylko własne wpisy. + +Jak wspomniano na początku, możliwych jest wiele innych rodzajów kanałów, jednak procedura tworzenia jest taka sama. Różnica między kanałami polega przede wszystkim na przypisanych uprawnieniach. Na przykład kanał umożliwiający udostępnianie dokumentów współpracownikom w pracy prawdopodobnie wymagałby bardziej liberalnych ustawień "Może zapisywać w moim" publicznym "magazynie plików" niż na koncie osobistym. + +Możesz również przekazać kontrolę nad wpisami i połączeniami swoich kanałów, ale nie nad ich konfiguracjami, innemu kanałowi. Odbywa się to poprzez edycję połączenia i przypisanie mu uprawnień do administrowania zasobami Twojego kanału. + +[h3]Przyłączanie się do kanałów[/h3] + +Połączenie jest w $Projectname określane jako zestaw uprawnień, które nadało się komuś innemu do dostępu do swoich treści. W tradycyjnych aplikacjach sieci społecznościowych wszystkie połączenia mają takie same uprawnienia lub najwyżej dwa poziomy ("znajomi" i "obserwujący"). W Hubzilla można ustawić (dostosować) szereg oddzielnych uprawnień w zależności od sytuacji i relacji, jakie masz z innym kanałem. Możesz zezwolić komuś na wyświetlanie swoich postów, ale nie zdjęć. Możesz również odmówić im pozwolenia na komentowanie swoich postów lub wysyłanie prywatnych wiadomości do Ciebie. + +Jak przyłączyć się do jakiegoś kanału? + +Najpierw musisz znaleźć kanał, z którym chcesz się połączyć. Można to zrobić na dwa sposoby. Po pierwsze, ustaw opcję "Może przesyłać mi swój strumień i posty z kanału" na zezwoleniea dla "Wszystkich w tej sieci", co spowoduje dostęp do wpisów od zupełnie obcych osób do Twojej matrycy. Zapewni ci to dużo treści publicznych i miejmy nadzieję, że pomoże Ci znaleźć interesujących, zabawnych ludzi, fora i kanały. + +Następną rzeczą, jaką możesz zrobić, jest przejrzenie katalogu. Katalog jest dostępny w każdej witrynie Hubzilli, co oznacza, że wyszukiwanie z poziomu własnej witryny przyniesie wyniki z całej sieci. Możesz wyszukiwać według nazwy, zainteresowania, lokalizacji i słowa kluczowego. + +Jeśli znasz już czyjąś "webbie", możesz bezpośrednio się z tą osobą skontaktować. Webbie to identyfikator, który wygląda jak adres e-mail (na przykład bob@example.com), ale odnosi się do kogoś w otwartej sieci społecznościowej. Aby się połączyć, osoby te muszą używać kompatybilnego protokołu sieciowego. Domyślnie, nasze oprogramowanie obsługuje protokół "Zot", jednak dodatkowe protokoły mogą być dostarczane za pośrednictwem wtyczek (dodatków). Więcej informacji na temat łączenia się z kanałami w innych sieciach znajduje się poniżej. + +Aby połączyć się z innymi kanałem $Projectname: + +Odwiedź profil tego kanału, klikając jego zdjęcie w katalogu, matrycy lub komentarzach, a otworzy się strona główna kanału w przeglądarce kanału. Po lewej stronie ekranu zwykle jest widoczny link o nazwie "Connect". Kliknij i gotowe. W zależności od ustawień kanału, z którym się łączysz, być może będziesz musiał poczekać, aż właściciel zatwierdzi połączenie, ale nie musisz nic robić. Po zainicjowaniu połączenia zostaniesz przeniesiony do edytora połączeń. Dzięki temu możesz przypisać określone uprawnienia do tego kanału, jeśli chcesz wprowadzić jakiekolwiek zmiany. + +Aby połączyć się z kanałami w innych sieciach niż sieć $Projectname: + +Proces łączenia się z kanałami w innych sieciach (takich jak GNU-Social, Mastodon czy Diaspora) jest podobny - wpisz odpowiednie "webbie" do pola "Dodaj nowe połączenia" na stronie "Połączenia". Jednak zanim to zrobisz, odwiedź stronę "Ustawienia" ("Ustawienia funkcji i dodatków") i upewnij się, że w Twoim hubie jest dostępny odpowiedni protokół (Diaspora, GNU-Social/OStatus lub ActivityPub) i [b][i]jest aktywowany[/i] dla Twojego kanału[/b]. Te sieci (protokoły) nie obsługują migracji kont i niezależności lokalizacji, więc jeśli przeniesiesz lokalizację lub sklonujesz swój kanał w inne miejsce, komunikacja z tymi połączeniami może się nie udać. Z tego powodu protokoły te nie są domyślnie aktywowane, ale ich aktywacja wymaga Twojej zgodą. Aktywacja tych protokołów wiąże się z podjęciem ważkiego rozstrzygniecia korzyści płynących z kmunikowania się ze znajomymi w tych sieciach a z drugiej strony, zapewnieniem odporności konta na awarie serwera. + +Niektóre rodzaje komunikacji oferują więcej niż jeden protokół. Jeśli chcesz połączyć się z kimś na Mastodonie (na przykład), możesz użyć do komunikacji protokołu "Ostatus" lub "AactivityPub". Generalnie, protokół "ActivityPub" zapewnia lepszą obsługę niż "Ostatus", ale Hubzilla często wybiera pierwszy protokół, który odkryje i może to nie być to, czego chcesz. Możesz połączyć się z kimś przez określony protokół, poprzedzając nazwę protokołu w nawiasach kwadratowych na tym "webbie". Na przykład: + +[code] +[activitypub]https://foo.bar/foobar +[ostatus]foobar@foo.bar +[diaspora]foobar@foo.bar +[zot]foobar@foo.bar +[feed]https://foo.bar/foobar +[/code] + +Aby połączyć zię z kanałami RSS: + +Administrator huba może zezwolić na łączenie się z kanałami RSS. Proces łączenia się z kanałem RSS jest taki sam, z wyjątkiem wpisania (lub wklejenia) adresu URL kanału w polu "Dodaj nowe połączenie". Kanały są przetwarzane tylko raz lub dwa razy dziennie, a administrator huba może nałożyć ograniczenia na liczbę dodawanych kanałów. + +[h4][b]Blokowanie, ignorowanie, archiwizowanie i ukrywanie kanałów[/b][/h4] + +Kanały w książce adresowej mogą mieć statusy, takie jak [i]zablokowany[/i], [i]ignorowany[/i], [i]zarchiwizowany[/i] i [i]ukryty[/i]. Na stronie połączeń możesz zobaczyć zakładki, które wyświetlają kanały o tych statusach. Na stronach edycji połączenia możesz zmienić status kanału. + +Oto ich znaczenie: + +[b]Zablokowany:[/b] w kanale nie moża odczytywać elementów, niezależnie od uprawnień, ani zapisywać cokolwiek. + +[b]Ignorowany:[/b] w kanale można odczytywać elementy, jeśli ma się odpowiednie uprawnienia, ale nie można tu nic zapisywać. + +[b]Ukryty:[/b] kanał nie pojawia się na liście połączeń profilu, nikt nie może zobaczyć, że jesteś połączony, ale trzeba mieć na uwadze, że treści mogą nadal pojawiać się innych połączeniach, na przykład w odpowiedziach na wpisy. + +[b]Archiwizowany:[/b] jeśli kanał nie jest dostępny przez 30 dni, jest automatycznie oznaczany jako "zarchiwizowany". Wszystkie dane zostają zachowane, ale zatrzymane zostaje odpytywanie kanału w poszukiwaniu nowych informacji i usuwa się go z autouzupełniania. Jeśli później dowiesz się, że kanał wrócił do trybu online, możesz ręcznie przywrócić go z archiwum. + +[h4][b]Kanały Premium[/b][/h4] + +Niektóre kanały są oznaczone jako "kanały premium" i mogą wymagać pewnych działań ze strony odwiedzajacego, zanim będzie on mógł nawiązać połączenie. Przycisk "Połącz" w przypadku tych kanałów przeniesie Cię do strony zawierającej szczegółowe informacje o warunkach, które ustanowił właściciel kanału. Jeśli warunki zostaną zaakceptowane, połączenie będzie kontynuowane normalnie. W niektórych przypadkach, na przykład w przypadku celebrytów i światowej sławy wydawców, może to wymagać zapłaty. Jeśli nie zgadzasz się z warunkami, połączenie nie będzie kontynuowane lub może być kontynuowane, ale z ograniczonymi uprawnieniami dozwolonymi dla twoich interakcji z tym kanałem. + +[h3]Uprawnienia[/h3] +Uprawnienia w $Projectname są pełniejsze niż te, do których możesz być przyzwyczajony. To pozwala nam zdefiniować lepiej oceniane relacje niż czarno-białe: "ta osoba jest moim przyjacielem, więc może zrobić wszystko" lub "ta osoba nie jest moim przyjacielem, więc nie może nic zrobić", jak to ma miejsce w innych serwisach społecznościowych. + +[h4][b]Role uprawnieniowe[/b][/h4] + +Tworząc kanał, można wybrać różne "role" dla tego kanału. Tworzą one całą rodzinę uprawnień i ustawień prywatności, które są odpowiednie dla tej roli. Typowe role to "Społeczne - głównie publiczne", "Społeczne - głównie prywatne", "Forum - publiczne" i wiele innych. Zapewniają one pewien poziom prostoty zarządzania uprawnieniami. Wystarczy wybrać rolę, a odpowiednie uprawnienia zostaną zastosowane automatycznie. Możesz także wybrać "Tryb niestandardowy/ekspercki" i zmienić indywidualne ustawienia uprawnień w dowolny sposób. + +[h4][b]Domyślne ograniczenia uprawnień[/b][/h4] + +Istnieje wiele indywidualnych uprawnień. Kontrolują one wszystko, od przeglądania strumienia po możliwość czatowania z Tobą. Każde pozwolenie ma limit. Zakres tych uprawnień waha się od "Tylko ja" do "Wszyscy w Internecie" - chociaż niektóre zakresy mogą nie być dostępne dla niektórych uprawnień. Limit dotyczy każdej opublikowanej rzeczy, którą tworzysz, a która nie ma kontroli prywatności ani kontroli dostępu. Na przykład, jeśli publikujesz zdjęcie i nie wybrałeś określonej grupy odbiorców z pozwoleniem na jego przeglądanie, stosujemy ten limit. Te ograniczenia dotyczą wszystkiego w ramach tej reguły pozwolenia, więc nie możesz zastosować ograniczenia do jednego zdjęcia. Limit dotyczy wszystkich Twoich zdjęć. Jeśli wszystkie Twoje zdjęcia są widoczne dla wszystkich w Internecie i ograniczysz limit tylko do znajomych, wszystkie Twoje zdjęcia będą teraz widoczne tylko dla znajomych. + +[h4][b]Kontrola dostępu[/b][/h4] + +Kontrola dostępu jest preferowaną metodą zarządzania prywatnością w [i]większości[/i] przypadków, zamiast stosowania ograniczania uprawnień. Polega ona na utworzeniu list połączeń lub grup prywatności (lub obu na raz) i na podstawie listy kontroli dostępu (ACL) użytkownik decyduje, czy zezwolenie jest dozwolone. Lista kontroli dostępu jest dołączona do wszystkiego, co się publikuje. W przeciwieństwie do ograniczeń uprawnień, zmiana listy kontroli dostępu na jednym zdjęciu nie ma wpływu na żadne z pozostałych zdjęć. Możesz użyć grup prywatności i "domyślnej listy kontroli dostępu", aby utworzyć i zautomatyzować zarządzanie listami kontroli dostępu, tak aby zapewnić dowolny poziom prywatności dla wszystkiego, co publikujesz. + +Zdecydowanie zalecamy skorzystanie z ustawień "typowej sieci społecznościowej" podczas tworzenia pierwszego kanału, ponieważ umożliwia to innym komunikowanie się z Tobą i pomaga w razie trudności. Przekonasz się, że te ustawienia zapewniają tyle prywatności, ile chcesz - kiedy tego chcesz; ale także pozwalają komunikować się publicznie, jeśli zechcesz. Po opanowaniu obsługi możesz swobodnie korzystać z dużo bardziej prywatnych ustawień. + +[dl terms="l"] +[*= Zakresy uprawnień to:] +[dl terms="i"] + [*= Nikt oprócz Ciebie ] To jest oczywiste. Tylko Ty będziesz mieć dostęp. + + [*= Tylko ci, którym jawnie zezwalasz ] Domyślnie osoby, z którymi nie jesteś połączony i wszystkie nowe kontakty będą miały odmowę tego uprawnienia. Można robić wyjątki dla poszczególnych kanałów na ich ekranie edycji kontaktów. + + [*= Każdy w Twojej książce adresowej ] Każdy, kto nie znajduje się w Twojej książce adresowej ma odmowę dostępu, ale każdy kogo zaakceptujesz jako kontakt, uzyska zezwolenie. Jest to sposób stosowany na większości starszych platform. + + [*= Każdy na tym hubie ] Każdy, kto ma kanał w tym samym hubie co Ty, będzie miał pozwolenie. Każdemu, kto jest zarejestrowany na innym hubie, odmawia się dostępu. + + [*= Każdy w tej sieci ] Każdy w sieci $Projectname będzie miał zatwierdzone to pozwolenie. Nawet zupełnie obce osoby. Jednak każdemu, kto nie jest zalogowany (uwierzytelniony), tego dostępu się odmiawia. + + [*= Każdy uwierzytelniony ] Jest to podobne do uprawnienia "każdy w tej sieci", z tym wyjątkiem, że może obejmować każdego, kto może uwierzytelnić się w jakikolwiek sposób - a zatem może obejmować odwiedzających z innych sieci. + + [*= Token dostępu gościa] Umożliwia to udostępnianie pliku, folderu, zdjęcia, albumu lub kanału określonej osobie lub grupie osób. Nie muszą być członkami Hubzilli. Możesz ustawić ważność tokenu dostępu. + + [*= Każdy w Internecie ] Element jest całkowicie publiczny. To pozwolenie umożliwia dostęp każdemu. +[/dl] +[*= Indywidualne uprawnienia, to:] +[dl terms="i"] + [*= Można wyświetlać mój "publiczny" strumień i posty. ] To uprawnienie określa, kto może oglądać "strumień" Twojego kanału, czyli nieprywatne wpisy, które pojawiają się na karcie "Strona główna", gdy jesteś zalogowany. + + [*= Można wyświetlać mój "publiczny" profil kanału. ] To uprawnienie określa, kto może wyświetlać profil Twojego kanału. Dotyczy to zakładki "o mnie". + + [*= Można wyświetlać moje "publiczne" albumy zdjęć. ] To uprawnienie określa, kto może wyświetlać Twoje albumy ze zdjęciami. Poszczególne zdjęcia mogą nadal być publikowane do bardziej prywatnej grupy osób. + + [*= Można wyświetlać moją "publiczną" książkę adresową. ] To uprawnienie określa, kto może wyświetlać Twoje kontakty. Są to połączenia wyświetlane w sekcji "Wyświetl połączenia". + + [*= Można wyświetlać mój "publiczny" magazyn plików. ] To uprawnienie określa, kto może wyświetlać Twoje publiczne pliki przechowywane w "chmurze" serwisu. + + [*= Można wyświetlać moje "publiczne" strony. ] To uprawnienie określa, kto może wyświetlać Twoje publiczne strony internetowe. + + [*= Można przesyłać mi strumień ich kanału i posty. ] To uprawnienie określa, czyje wpisy będą wyświetlane na Twoim kanale. Jeśli Twój kanał jest kanałem osobistym (tj. Ty jako osoba), prawdopodobnie chciałbyś ustawić to przynajmniej tak, że "każdy z mojej książki adresowej". Osobisty kanał notatek prawdopodobnie chciałbyś ustawić na "nikt oprócz mnie". Ustawienie tego na "każdy w sieci” spowoduje wyświetlenie wpisów od zupełnie obcych osób, co jest dobrą formą rozeznania sieci. + + [*= Można publikować na stronie mojego kanału ("ścianie"). ] To uprawnienie określa, kto może umieszczać swoje wpisy na Twojej ścianie po przejściu do Twojego kanału. + + [*= Można komentować moje posty. ] To uprawnienie określa, kto może komentować posty, które tworzysz. Zwykle chce się, aby pasowało to do uprawnienia "można wyświetlać mój publiczny strumień i wpisy”. + + [*= Można wysyłać mi prywatne wiadomości pocztowe. ] Określa to, kto może wysyłać Ci prywatne wiadomości (zotmail). + + [*= Można publikować zdjęcia w moich albumach ze zdjęciami. ] To określa, kto może publikować zdjęcia w Twoich albumach. Jest to bardzo przydatne w przypadku kanałów przypominających forum, na których połączenia mogą nie być ze sobą połączone. + + [*= Można przekazywać dalej do wszystkich kontaktów z mojego kanału za pomocą +tagów post. ] Użycie wzmianek (@-) spowoduje odtworzenie kopii twojego wpisu na określonym profilu, tak jakbyś opublikował go na ścianie kanału. To ustawienie określa, czy jakieś osoby mogą w ten sposób publikować na Twoim kanale. + + [*= Można ze mną rozmawiać (jeśli jestem dostępny). ] Określa to, kto może dołączyć do publicznych czatów utworzonych na Twoim kanale. + + [*= Można zapisywać w moim "publicznym" magazynie plików. ] To określa, kto może przesyłać pliki do Twojego publicznego magazynu plików lub "chmury". + + [*= Można edytować moje "publiczne" strony. ] Określa to, kto może edytować Twoje strony internetowe. Jest to przydatne w przypadku witryn typu wiki lub witryn z wieloma redaktorami. + + [*= Można zarządzać zasobami mojego kanału. ] To określa, kto może mieć pełną kontrolę nad Twoim kanałem. Zwykle powinno być to ustawione na "nikt oprócz mnie". +[/dl][/dl] +[i]Uwaga:[/i] +Wtyczki (dodatki) mogą zapewniać specjalne ustawienia uprawnień, więc możesz otrzymać dodatkowe ustawienia uprawnień wykraczające poza to, co opisano tutaj. + +Jeśli ustawisz którekolwiek z tych uprawnień na "tylko te, na które wyraźnie zezwalam", możesz określać indywidualne uprawnienia na ekranie edycji połączenia. + +[h4][b]Koligacja[/b][/h4] + +Ekran edycji połączenia oferuje suwak do wyboru stopnia "przyjaźni" z połączeniem (to narzędzie można włączyć na karcie "Dodatkowe funkcje" na stronie "Ustawienia"). Potraktuj to jako miarę tego, jak bardzo ich lubisz lub nie lubisz. Wartość 1 jest dla osób, które lubisz, których wpisy chcesz widzieć cały czas; 99 jest dla osób, na których Ci nie zależy i których wpisy możesz chcieć przeglądać tylko od czasu do czasu. Po przypisaniu tutaj wartości możesz użyć narzędzia koligacji na stronie matrycy do filtrowania treści na podstawie tej liczby. + +Suwak na stronie matrycy ma zarówno wartość minimalną, jak i maksymalną. Wpisy będą wyświetlane tylko od osób mieszczących się w tym zakresie. Koligacja nie ma związku z uprawnieniami i jest przydatna tylko w połączeniu z funkcją narzędzia koligacji. + +[h3]Tokeny dostępu gościa[/h3] +Tokeny dostępu gościa (czasami nazywane "tokenami dostępu Zot") umożliwiają udostępnianie pliku, folderu, zdjęcia, albumu lub kanału określonej osobie lub grupie osób, które nie są członkami hubu Hubzilli. Te tokeny umożliwiają udostępnianie poszczególnych elementów poprzez wysłanie linku zawierającego token w adresie URL; alternatywnie, osoby mogą faktycznie logować się przy użyciu poświadczeń tokena, po czym mogą bezproblemowo przeglądać zawartość udostępnioną temu tokenowi. + +W celu utworzenia tokenów dostępu gościa i zarządzać nimi, otwórz stronę ustawień "Tokeny dostępu gościa". Przy każdym załadowaniu strony generowany jest losowy token, który umożliwia utworzenie specjalnego adresu URL zawierającego ten token i opcjonalnie określenie daty wygaśnięcia. Istniejące tokeny są wymienione poniżej okna dialogowego i można je edytować, wybierać lub usuwać. + +Tokenowi gościa można przyznać dodatkowe uprawnienia, rozszerzając opcje "Indywidualnych uprawnień" i wybierając ustawienia prywatności, takie jak "Może wyświetlać strumień i wpisy mojego kanału" lub "Może rozmawiać ze mną". + +[url=[baseurl]/help/feature/access_tokens]Więcej informacji...[/url] + +[img][baseurl]/doc/member/assets/zat_dialog.png[/img] + +[h3]Język znaczników[/h3] +$Projectname obsługuje kilka języków znaczników do zaawansowanego formatowania treści. Domyślnym językiem znaczników jest [url=[baseurl]/help/pl/member/bbcode]własny wariant BBcode[/url], dostosowany do użytku w Hubzilli. BBcode jest obsługiwany dla postów, stron wiki i elementów stron internetowych. Strony Wiki i elementy stron internetowych można również pisać przy użyciu standardowego języka Markdown. +[table border=0] +[tr][th]Typ treści[/th][th]Obsługiwany język[/th][/tr] +[tr][td]Post[/td][td][url=[baseurl]/help/pl/member/bbcode]BBcode[/url][/td][/tr] +[tr][td]Wiki[/td][td][url=[baseurl]/help/pl/member/bbcode]BBcode[/url], Markdown[/td][/tr] +[tr][td]Elementy stron WWW[/td][td][url=[baseurl]/help/pl/member/bbcode]BBcode[/url], Markdown, HTML[/td][/tr] +[/table] + +[h3]Tagi i wzmianki[/h3] +Podobnie jak wiele innych platform, $Projectname używa specjalnej notacji wewnątrz wiadomości, aby wskazać "tagi" lub powiązania kontekstowe z innymi podmiotami. + +[h4][b]Wzmianki[/b][/h4] +Kanały (profile) są oznaczane przez swoją nazwę poprzedzoną znakiem ed, np. [code]@Jacek[/code]. Jest to wykorzystywane w mechaniźmie wzmianek. + +Kiedy zaczniesz wspominać o kimś w swoim poście (wstawiając znak @), mechanizm ten utworzy pole z autouzupełnianiem, aby można było wybrać z Twoich bezpośrednich kontaktów określoną osobę (kanał). Możesz wybrać z listy ten kanał, który chcesz wzmiankować. + +Jeśli wspomniana osoba znajduje się na liście odbiorców postu, otrzyma powiadomienie o tym znaczniku. + +[h4][b]Wzmianki dostarczania[/b][/h4] + +Znak wykrzyknika ([b]![/b]) oznacza [i]wzmiankę dostarczania[/i] wstawioną na forum lub specjalnym kanale, która umożliwia rozesłanie wisu do wielu odbiorców. + +[code] +@Gardening - wzmiankowanie forum Gardening + +!Gardening - wzmiankowanie forum Gardening i równoczesne opublikowanie wpisu w "sieci" Gardening " (np. rozesłanie wpisu do wszystkich członków tej sieci, jeśli ma się na to pozwolenie). +[/code] + +Uwaga: w poprzednich wersjach, format wzmianki dostarczania miał postać [code]@forum+[.code] (plus na końcu). Ten mechanizm nie jest już obsługiwany. + +[h4][b]Wzmianki prywatności[/b][/h4] +Jeśli chcesz ograniczyć wpis do jednej osoby lub kilku osób, możesz to zrobić, wybierając kanały lub grupy prywatności w narzędziu do ochrony prywatności. Możesz także po prostu oznaczyć je tagiem prywatności. Znacznik prywatności to nazwa poprzedzona znakami [code]@![/code], co zmienia również uprawnienia prywatności posta, tak aby zawierały tylko te osoby, którym chcesz dostarczyć post. Można wstawić więcej niż jeden tag prywatności, na przykład tagi [code]@!Bob[/code] i [code]@!Linda[/code] sposowdują wysłanie posta tylko do Boba i Lindy. Ten mechanizm zastępuje selektor prywatności. + +Fora mogą być wzmiankowane w ten sam sposób. Wzmianka [code]!!dogs[/code] będzie powodować publikowanie prywatnie na forum "dogs". Forum ponownie dostarczy post do wszystkich członków forum, ale Twoi obserwatorzy nie zobaczą go, chyba że są również członkami forum "dogs". + +Można także oznaczyć grupy prywatności, które są "publiczne". Gdy tworzysz lub edytujesz grupę prywatności, jest dostępne pole wyboru, które umożliwia innym osobom zobaczenie członków grupy. Jeśli to pole jest zaznaczone dla grupy i oznaczysz post, na przykład tagiem [code]@!Friends[/code] - zostanie on ograniczony do grupy Friends. Zanim to zrobisz, sprawdź, czy grupa jest publiczna, ponieważ nie ma innego sposobu na wycofanie postu niz jego usunięcie. Nazwa grupy pojawi się w poście i powiadomi członków tej grupy, że są jej członkami. + +[h4][b]Wzmianki a komentarze[/b][/h4] +Powyższe mechanizmy mają zastosowanie tylko do postów "najwyższego poziomu". Wzmianka o kanale z którymkolwiek z powyższych mechanizmów nie ma wpływu na komentarze, poza tym, że wzmiankowany kanał może otrzymać powiadomienie, jeśli był już uwzględniony w rozmowie jako odbiorca. + +[h4][b]Tagi tematyczne (hasztagi)[/b][/h4] +[i]Tagi tematyczne[/i], zwane też [i]hasztagami[/i], mają format terminu poprzedzonego znakiem hash ([b]#[/b]). Powoduje to utworzenie w poście łącza do ogólnoserwisowego wyszukiwania podanego terminu. Na przykład, [code]#cars[/code] zapewni link do wyszukiwania dla wszystkich postów zawierających słowo kluczowe [code]cars[/code] w Twoim serwisie. W tagach tematycznych powinno się używać terminów nie krótszych niż trzy znaki. Krótsze terminy wyszukiwania prawdopodobnie nie przyniosą żadnych wyników wyszukiwania, chociaż zależy to od konfiguracji bazy danych. + +Tagi tematyczne zawierające same cyfry nie są zwykle dozwolone, np. [code]#1[/code]. Jeśli chcesz użyć hashtagu numerycznego, dodaj tekst opisowy, np. [code]#2012-wybory[/code] lub umieść cały termin w podwójnych cudzysłowach (na przykład [code]#"2012"[/code]). Podwójne cudzysłowy są również wymagane, jeśli termin zawiera spacje ([code]#"My tag[/code]`) i mogą być wymagane, jeśli tag zawiera znaki interpunkcyjne lub znaki diakrytyczne ([code]#"EndsWithPeriod."[/code], [code]#"Exciting!!!"[/code], [code]#"Ósmy pasażer"[/code] itp.). + +[h4][b]Zakładki[/b][/h4] +Zakładki wskazują link, który można zapisać w folderze zakładek. Używają sekwencji [code]#^[/code], po której następuje link. Często są one generowane automatycznie. Jeśli zainstalowany jest dodatek "bookmarker", sekwencja ta zostanie przekonwertowana na ikonę zakładki podczas przeglądania inline postu lub komentarza, a kliknięcie ikony spowoduje zapisanie zakładki. Jeśli dodatek bookmarker nie jest zainstalowany, można wykorzystać rozwijane menu posta, które zawiera łącze do zapisania zakładki lub zakładek. + +[h4][b]Ręczne wzmiankowanie[/b][/h4] +Na przykład, tag [code]@billy[/code] oznaczy połączenie, którego nazwa lub adres sieciowy to "billy" (dopasowanie dokładne). Jeśli masz dwa połączenia z nazwą lub adresem sieciowym billy, na przykład [code]billy@server1.hubzilla.org[/code] i [code]billy@server2.hubzilla2.org[/code], będziesz musiał podać pełny adres, inaczej wyniki będą niejednoznaczne i niewłaściwa osoba może zostać oznaczona. + +Tag [code]@"Robert Johnson"[/code] oznaczy Roberta Johnsona. Podwójne cudzysłowy są wymagane, jeśli oznaczona nazwa zawiera spacje. + +[h3]Strony internetowe[/h3] + +$Projectname umożliwia członkom i dozwolonym połączeniom tworzenie statycznych stron internetowych. Aby aktywować tę funkcję, włącz funkcję [b]Strony internetowe[/b] w sekcji [b][url=[baseurl]/settings/features/]Dodatkowe funkcjonalności[/url][/b]. + +Po włączeniu, na stronie kanału pojawi się nowa karta zatytułowana "Strony internetowe". Kliknięcie tego linku przeniesie Cię do edytora stron internetowych. Strony będą dostępne pod adresem [b][baseurl]/page/[observer=1][observer.webname][/observer][observer=0]channelname[/observer]/pagelinktitle[/b] + +Pole "Tytuł linku do strony" umożliwia określenie tytułu linku do strony tego adresu URL. Jeśli tytuł linku do strony nie jest ustawiony, ustawimy go automatycznie, używając identyfikatora wiadomości elementu. + +Pod polem tworzenia strony pojawi się lista istniejących stron z linkiem "Edytuj". Kliknięcie tego przeniesie Cię do edytora podobnego do edytora postów, w którym możesz wprowadzać zmiany na swoich stronach internetowych. + +[h4][b]Używanie bloków[/b][/h4] + +Bloki mogą być częściami stron internetowych. Podstawowy kod HTML bloku wygląda następująco: +[code] +
+ Block Content +
+ +[/code] + +Jeśli blok ma zawartość tekstową (html), może również zawierać elementy menu. Na przykład, zawartość: +[code] +

HTML block content

+ [menu]menuname[/menu] + +[/code] +wytworzy HTML taki jak ten: +[code] +
+ +[/code] + +Makro [code]$content[/code] umożliwia osadzenie całej treści strony internetowej. W tym celu wystarczy utwórzyć taki blok: +[code] + $content + +[/code] +jako treść. Aby blok pojawił się na stronie internetowej, musi być zdefiniowany w układzie strony wewnątrz regionu. +[code] + [region=aside] + [block]blockname[/block] + [/region] + +[/code] + +Wygląd bloku można zmieniać w układzie strony. + +W regionie można przypisać własne klasy (css). Ten kod: +[code] + [region=aside] + [block=myclass]blockname[/block] + [/region] + +[/code] +wytworzy taki HTML: +[code] +
+ Block Content +
+ +[/code] + +Za pomocą zmiennej [code]wrap[/code] z bloku można usunąć otaczające go znaczniki [code]
[/code]. Ten kod: +[code] + [region=aside] + [block][var=wrap]none[/var]blockname[/block] + [/region] + +[/code] +wytworzy taki HTML: +[code] + Treść bloku +[/code] + +[h4][b]Narzędzie importy elementów strony internetowej[/b][/h4] + +Istnieją dwie metody importowania elementów strony internetowej: przesyłanie pliku ZIP lub odwoływanie się do lokalnego folderu plików w chmurze. Obie metody wymagają określenia elementów strony sieci internetowej przy użyciu określonej struktury folderów. Narzędzie importu umożliwia zaimportowanie wszystkich elementów niezbędnych do zbudowania całej witryny lub zestawu witryn. Celem jest uwzględnienie zewnętrznego tworzenia stron internetowych, a także narzędzi upraszczających i automatyzujących wdrażanie w hubie. + +[h5][b] Struktura folderu [/b][/h5] +Definicje elementów muszą być przechowywane w katalogu głównym repozytorium w folderach o nazwie odpowiadającej typowi elementu: +[code] + /pages/ + /blocks/ + /layouts/ +[/code] + +Każdy element tych typów musi być zdefiniowany w osobnym podfolderze przy użyciu dwóch plików: jednego w formacie JSON dla metadanych i drugiego w zwykłym formacie testowym dla zawartości elementu. + +[h5][b] Elementy strony [/b][/h5] +Metadane elementu strony są zdefiniowane w pliku w formacie JSON o nazwie [code]strona.json[/code] z następującymi właściwościami: +[list] +[*] title +[*] pagelink +[*] mimetype +[*] layout +[*] contentfile +[/list] +[b]Przykład[/b] + +Pliki: +[code] + /pages/my-page/page.json + /pages/my-page/my-page.bbcode +[/code] +Treść [code]page.json[/code]: +[code] + { + "title": "My Page", + "pagelink": "mypage", + "mimetype": "text/bbcode", + "layout": "my-layout", + "contentfile": "my-page.bbcode" + } +[/code] +[h5][b] Elementy układu [/b][/h5] + +Metadane elementu układu są zdefiniowane w pliku w formacie JSON o nazwie [code]layout.json[/code] z następującymi właściwościami: +[list] +[*] name +[*] description +[*] contentfile +[/list] +[b]Przykład[/b] + +Pliki: +[code] + /layouts/my-layout/layout.json + /layouts/my-layout/my-layout.bbcode +[/code] +Treść [code]layout.json[/code]: +[code] + { + "name": "my-layout", + "description": "Layout for my project page", + "contentfile": "my-layout.bbcode" + } +[/code] + +[h5][b] Elementy bloku [/b][/h5] + +Metadane elementu bloku są określone w pliku w formacie JSON o nazwie [code]block.json[/code] z następującymi właściwościami: +[list] +[*] name +[*] title +[*] mimetype +[*] contentfile +[/list] +[b]Przykład[/b] + +Pliki: +[code] + /blocks/my-block/block.json + /blocks/my-block/my-block.html +[/code] +Treść [code]block.json[/code]: + +[code] + { + "name": "my-block", + "title": "", + "mimetype": "text/html", + "contentfile": "my-block.html" + } +[/code] + +[h3]Język opisu stron Comanche[/h3] + +Comanche to język znaczników podobny do [url=[baseurl]/help/member/bbcode]BBcode[/url], za pomocą którego można tworzyć rozbudowane i złożone strony internetowe, łącząc je z szeregu komponentów - z których niektóre są już wstępnie zbudowane i inne, które można skonstruować w locie. Comanche używa własnego języka opisu strony do tworzenia tych stron. + +Comanche przede wszystkim wybiera, jakie treści pojawią się w różnych [b]regionach[/b] strony. Regiony mają swoje nazwy, które mogą się zmieniać w zależności od wybranego szablonu układu. + +[h4][b]Szablony strony[/b][/h4] +Obecnie dostępnych jest pięć szablonów układów, ale w serwisie można udostępniać dodatkowe, własne układy. + +[dl terms="b"] +[*= default] +Domyślny szablon zawiera definicję regionu "nav" znajdującego się u góry, "aside" jako pasek boczny o stałej szerokości, +"content" dla głównego regionu treści i "footer" dla stopki strony. + +[*= full] +Pełny szablon definiuje to samo, co szablon "default", z tą różnicą, że nie ma regionu "aside". + +[*= choklet] +Szablon "choklet" zapewnia kilka płynnych układów, które można wybierać według odmiany: +[list] +[*] (domyślna odmiana) - układ dwukolumnowy, podobny do szaablonu "default", ale jest bardziej płynny +[*] bannertwo - układ dwukolumnowy z regionem "banner", zgodny z szablonem "default" na małych wyświetlaczach +[*] three - układ trzykolumnowy (dodany region "right_aside" do szablonu domyślnego) +[*] edgestwo - układ dwukolumnowy ze stałymi marginesami bocznymi +[*] edgesthree - układ trzykolumnowy ze stałymi marginesami bocznymi +[*] full - układ trzykolumnowy ze stałymi marginesami bocznymi i dodanym obszarem "header" poniżej paska nawigacji +[/list] + +[*= redable] +Szablon do czytania dłuższych tekstów na pełnym ekranie (czyli bez paska nawigacyjnego). Trzy kolumny: "aside", "content" i "right_aside". +Aby zapewnić maksymalną czytelność, zaleca się używanie tylko środkowej kolumny treści. + +[*= zen] +Daje swobodę robienia wszystkiego samemu. Tylko pusta strona z obszarem zawartości. +[/dl] + +Aby wybrać szablon układu, trzeba użyć tagu "template". + +[code] + [template]full[/template] + +[/code] + +Wybranie szablonu "choklet" z odmianą "three": + +[code] + [template=three]choklet[/template] + +[/code] + +Jeśli nie określono innego szablonu, zostanie użyty szablon domyślny. W szablonie można używać dowolnych nazw dla regionów zawartości. Używa sie też tagów "region", aby zdecydować, jakie treści umieścić w odpowiednich regionach. + +Zadefiniowane są też trzy "makra", które można użyć na stronie. +[code] + $htmlhead - wstawia zawartość nagłówka strony. + $nav - wstawia zawartość paska nawigacji. + $content - wstawia główną treść strony. + +[/code] + +Domyślnie, makro $nav jest umieszczane w regionie "nav" strony a $content w regionie "content". Tych makr potrzebujesz tylko wtedy, gdy chcesz zmienić rozmieszczenie tych elementów, aby zmienić kolejność lub przenieść je do innych regionów. + +Aby wybrać motyw dla swojej strony, użyj tagu "theme". +[code] + [theme]suckerberg[/theme] + +[/code] +Spowoduje to wybranie motywu o nazwie "suckerberg". Domyślnie używany jest preferowany motyw Twojego kanału. + +[code] + [theme=passion]suckerberg[/theme] + +[/code] +Spowoduje to wybranie motywu o nazwie "suckerberg" oraz wybór schematu "passion" (wariant motywu). Alternatywnie można użyć do tego zwięzłej notacji motywu. + +[code] + [theme]suckerberg:passion[/theme] + +[/code] + +Notacja zwięzła nie jest częścią samego Comanche, ale jest rozpoznawana przez platformę $Projectname jako specyfikator motywu. + +[h4][b]Pasek nawigacji[/b][/h4] + +[code] + [navbar]tucson[/navbar] +[/code] + +Kod ten powoduje użycie szablonu paska nawigacyjnego "tucson" i reguł CSS. Domyślnie stosowany jest szablon domyślny szablon paska nawigacyjnego. + +[h4][b]Regiony[/b][/h4] +Tak jak wspomniano wyżej, każdy region swoją nazwę. Wybrany eegion określa używając tagu "region", który zawiera nazwę. Wszelkie treści, które chcesz umieścić w tym regionie, powinny być umieszczone między tagiem otwierającego a zamykającym. + +[code] + [region=htmlhead]....tutaj jest treść....[/region] + [region=aside]....tutaj jest treść....[/region] + [region=nav]....tutaj jest treść....[/region] + [region=content]....tutaj jest treść....[/region] + +[/code] + +[h4][b]CSS i Javascript[/b][/h4] +Jest możliwość włączenia bibliotek JavaScript i CSS w regionie "htmlhead". Obecnie korzystamy z bibliotek jQuery (JS), Bootstrap (CSS i JS) oraz Foundation (CSS i JS). +Ten kod spowoduje nadpisanie regionu htmlhead wybranego motywu. + +[code] + [region=htmlhead] + [css]bootstrap[/css] + [js]jquery[/js] + [js]bootstrap[/js] + [/region] + +[/code] + +[h4][b]Elementy menu i bloki[/b][/h4] +Narzędzia do tworzenia stron internetowych umożliwiają również tworzenie eleentów menu i bloków. Dostarczają one fragment kodu, który można umieścić w dowolnych regionach i w dowolnej kolejności. Każdy z takich fragmentów ma nazwę, którą definiuje się podczas tworzenia elementów menu lub bloku. + +Ten kod: +[code] + [menu]mymenu[/menu] + +[/code] +spowoduje umieszczenie w tym miejscu menu o nazwie "mymenu”, ale miejsce to musi się ono znajdować wewnątrz regionu. + +Kod: +[code] + [menu=horizontal]mymenu[/menu] + +[/code] +spowoduje umieszczenie w tym miejscu menu o nazwie "mymenu", ale musi się ono znajdować które musi znajdować wewnątrz regionu. Dodatkowo zastosowano tu do menu klasę "horizontal". Klasa "horizontal" jest zdefiniowana w motwie "redbasic". Może być dostępna lub nie w innych motywach. + +W tym bloku: +[code] + [menu][var=wrap]none[/var]mymenu[/menu] + +[/code] +zmienna [code][var=wrap]none[/var][/code] usuwa z menu element [code]div[/code]. + +Ten kod: +[code] + [block]contributors[/block] +[/code] +umieszcza blok o nazwie "contributors" w regionie, w którym został wstawiony. + +Kod: +[code] + [block=someclass]contributors[/block] + +[/code] +też umieszcza blok o nazwie "contributors" w tym regionie, ale dodatkowo stosuje dla tego bloku klasę "someclass". Zamienia to domyślną klasę bloku "bblock widget". + +W bloku: +[code] + [block][var=wrap]none[/var]contributors[/block] + +[/code] +zmienna [code][var=wrap]none[/var][/code] usuwa z bloku opakowujący go element [code]div[/code]. + +[h4][b]Widżety[/b][/h4] +Widżety to wykonywalne aplikacje dostarczane przez system, które można umieścić na swojej stronie. Niektóre widżety przyjmują argumenty, które pozwalają dostosować widżet do własnych potrzeb. Widżety systemowe są wymienione [url=help/Widgets]tutaj[/url]. Widżety mogą być również tworzone w ramach wtyczek, motywów lub przez administratora witryny, aby zapewnić dodatkowe funkcje. + +Widżety i ich argumenty są określane za pomocą tagów "widget" i "var". +[code] + [widget=recent_visitors][var=count]24[/var][/widget] + +[/code] + +Spowoduje to załadowanie widżetu „latest_visitors” i dostarcza mu argument "count" ustawiony na „24”. + +[h4][b]Komentarze[/b][/h4] +Tag "comment" jest używany do wydzielenia komentarzy. Komentarze te nie pojawią się na renderowanej stronie. + +[code] + [comment]This is a comment[/comment] + +[/code] + +[h4][b]Wykonanie warunkowe[/b][/h4] +Można użyć konstrukcji [code]if[/code] warunkowego wykonania kodu. Jest to obecnie oparte na zmiennej konfiguracji systemu [code]$config.system[/code] lub zmiennej [code]$observer[/code]. + +[code] + [if $config.system.foo] + ... zmienna konfiguracyjna system.foo przyjmuje wartość 'true'. + [else] + ... zmienna konfiguracyjna system.foo przyjmuje wartość 'false'. + [/if] + + [if $observer] + ... ta treść będzie pokazywana tylko uwierzytelnionym użytownikom + [/if] + +[/code] + + Klauzula 'else' jest opcjonalna. + + Oprócz oceny logicznej obsługiwanych jest też kilka testów. + +[code] + [if $config.system.foo == bar] + ... zmienna konfiguracyjne system.foo jest równa łańcuchowi 'bar' + [/if] + [if $config.system.foo != bar] + ... zmienna konfiguracyjne system.foo nie jest równa łańcuchowi 'bar' + [/if] + [if $config.system.foo {} bar ] + ... zmienna konfiguracyjna system.foo jest prostą tablicą zawierającą zmienną 'bar' + [/if] + [if $config.system.foo {*} bar] + ... zmienna konfiguracyjna system.foo jest prostą tablicą zawierającą klucz o nazwie 'bar' + [/if] +[/code] + +[h4][b]Złożony przykład[/b][/h4] +[code] + [comment]użyj istniejący szablon strony, który zawiera obszar banera oraz 3 kolumny poniżej[/comment] + + [template]3-column-with-header[/template] + + [comment]Użyj motyw "darknight"[/comment] + + [theme]darkknight[/theme] + + [comment]Użyj istniejące menu nawigacyjne strony[/comment] + + [region=nav]$nav[/region] + + [region=side] + + [comment]Użyj wybranego przeze mnie menu i kilku widżetów[/comment] + + [menu]myfavouritemenu[/menu] + + [widget=recent_visitors] + [var=count]24[/var] + [var=names_only]1[/var] + [/widget] + + [widget=tagcloud][/widget] + [block]donate[/block] + + [/region] + + + + [region=middle] + + [comment]Pokaż normalną zawartość strony[/comment] + + $content + + [/region] + + + + [region=right] + + [comment]Pokaż mój skondensowany kanał RSS "wal" i zezwól na interakcję, jeśli obserwator ma możliwość interakcji[/comment] + + [widget]channel[/widget] + + [/region] + +[/code] + + +[h3]Osobisty magazyn w chmurze[/h3] + +$Projectname umożliwia prywatne przechowywanie i udostępnianie znajomym dowolnych plików. Możesz przesłać pliki ze swojego komputera do obszaru przechowywania lub skopiować je bezpośrednio z systemu operacyjnego przy użyciu protokołu WebDAV. + +Funkcjonuje to podobnie do usług "chmurowych", takich jak [i]Dopbox[/i], [i]Dysk[/i] Google czy [i]One Drive[/i] Microsoftu. + +Na wielu serwerach publicznych mogą obowiązywać ograniczenia dotyczące przydzielonej powierzchni dyskowej. + +[h4][b]Załączniki plikowe[/b][/h4] + +Najszybszym i najłatwiejszym sposobem udostępniania plików są załączniki. W rzędzie ikon poniżej edytora statusu znajduje się narzędzie do przesyłania załączników. Kliknij narzędzie, wybierz plik i prześlij. Po załadowaniu pliku zobaczysz kod załącznika umieszczony w obszarze tekstowym. Nie edytuj tego kodu, ponieważ może to uniemożliwić Ci udostępnienie tego pliku znajomym. Możesz użyć okna dialogowego uprawnień do publikowania lub hasztagów prywatności, aby ograniczyć widoczność pliku - który zostanie ustawiony zgodnie z uprawnieniami wysyłanego postu. + +Aby usunąć załączniki lub zmienić uprawnienia do przechowywanych plików, odwiedź [observer=1][baseurl]/cloud/[observer.webname][/observer][observer=0][baseurl]/cloud/username, zastępując [code]username[/code] pseudonimem, jaki podałeś podczas tworzenia kanału[/observer]. + +[h4][b]Dostęp internetowy[/b][/h4] + +Twoje pliki są widoczne w sieci pod adresem [observer=1][baseurl]/cloud/[observer.webname][/observer][observer=0][baseurl]/cloud/username[/observer] dla każdego, kto ma uprawnienia do ich przeglądania. Jeśli przeglądający ma wystarczające uprawnienia, może mieć również możliwość tworzenia nowych plików i folderów (katalogów) w interfejsie przeglądarki. Dostęp internetowy powinnien być używane tylko w przypadku mniejszych plików i zdjęć (do kilku megabajtów), ponieważ wykorzystuje pamięć wewnętrzną. W przypadku większych plików (filmy, muzyka itp.) przesyłaj je za pomocą protokołu WebDAV, cojest omówione w następnym rozdziale. Takie pliki będzie można nadal pobierać za pośrednictwem dostępu internetowego. + +[h4][b]Dostęp WebDAV[/b][/h4] + +WebDAV umożliwia kopiowanie plików bezpośrednio do lub z systemu operacyjnego komputera, gdzie Twój "magazyn chmurze" pojawia się jako wirtualny dysk. Dostęp ten powinien być używany do przesyłania dużych plików, takich jak wideo i audio, ponieważ nie jest ograniczony dostępną pamięcią wewnętrzna. Zobacz [zrl=help/member/member_guide#Cloud_Desktop_Clients]Cloud Desktop Clients[/zrl] poniżej. + +[h4][b]Dostęp CalDAV i CardDAV na Androidzie[/b][/h4] + +Możesz zsynchronizować swój kalendarz i kontakty w systemie Android ze swoim hubem. + +Poniższe kroki zostały przetestowane pod kątem zasosowania [url=https://f-droid.org/en/packages/at.bitfire.davdroid/] DAVdroid [/url]: + +[list] +[*] zainstaluj DAVdroid +[*] dodaj konto +[*] użyj "URL" i "user name" do zalogowania się +[list] +[*] podstawowy URL to [baseurl]/cdav +[*] Twoja nazwa użytkowka to [observer=1][observer.webname][/observer][observer=0]username[/observer] +[/list] +[/list] + +Aby udostępnić kalendarz odwiedź [observer.baseurl]/cdav/calendar + +[h4][b]Uprawnienia[/b][/h4] + +W przypadku korzystania z protokołu WebDAV plik jest tworzony z domyślnymi uprawnieniami do plików kanału, których nie można zmienić z poziomu systemu operacyjnego. Może też nie być to tak restrykcyjne, jak byś chciał. Najlepiej, utwórz foldery (katalogi), następnie odwiedź swoją "chmurę" pod aadresem [observer=1][baseurl]/cloud/[observer.webname][/observer][observer=0][baseurl]/cloud/username[/observer], wybierz katalog i zmień uprawnienia. Zrób to zanim umieścisz cokolwiek w katalogu. Uprawnienia do katalogu mają pierwszeństwo, więc możesz następnie umieścić pliki lub inne foldery w tym kontenerze i będą one chronione przed niechcianymi widzami przez ustawienie uprawnienia do katalogu. Często zdarza się, że użytkownicy tworzą folder "osobisty" lub "prywatny", który jest ograniczony do nich samych. Możesz używać tego jako osobistej chmury do przechowywania wszystkiego z dowolnego miejsca w Internecie lub dowolnego komputera i jest to chroniony przed innymi. Możesz także utworzyć foldery dla "rodziny" lub "przyjaciele" za zgodą udzieloną odpowiednim grupom prywatności. + +[h3]Klienty desktopowe dla chmury[/h3] + +[h4][b]Klienty dla Windows[/b][/h4] + +W Windows 7 połaczenie WebDAV można nawiązać przy użyciu kreatora z graficznym interfejsem: +1. Kliknij lewym przyciskiem myszy na przycisk "Start", aby otworzyc menu "Start". +2. Kliknij prawym przyciskiem myszy na ikone "Mój komputer", aby uzyskac dostęp do tego menu. +3. Kliknij lewym przysiskiem myszy na link "Mapuj dysk sieciowy...", aby otworzyć okno dialogowe kreatora połączeń. +4. Wpisz '[baseurl]/dav/nickname' w polu tekstowym (zamieniając 'nickname' na pseudonim swojego kanału) i kliknij przycisk "Gotowe". +5. Wpisz pseudonim kanału $Projectname. WAŻNE - bez znaku @ lub nazwy domeny +6. Wpisz swoje hasło $Projectname + +[h4][b]Klienty dla Linux[/b][/h4] + +[h5][b]Montowanie katalogu w systemie plików[/b][/h5] + +Aby zainstalować katalog w chmurze jako system plików, musisz najpierw zainstalować davfs2. Dla większości dystrybucji program ten jest dostępny w repozytoriach. Instalacja w Debianie: + +[code]sudo apt-get install davfs2[/code] + +Następnie skonfiguruj davfs2: + +[code]sudo dpkg-reconfigure davfs2[/code] + +i wybierz "yes" przy zapytaniu. + +Teraz musisz dodać użytkownika, który ma mieć możliwość montowania dav, do grupy davfs2: + +[code]sudo usermod -aG davfs2 <DesktopUser>[/code] + +[b]Note:[/b] w niektórych systemach grupa użytkowników może być inna, +np. "network" w Arch Linux. W razie wątpliwości sprawdź dokumentację +davfs dla swojego konkretnego systemu operacyjnego. + +Edytuj /etc/fstab: + +[code]nano /etc/fstab[/code] + +aby uwzględnić katalog w chmurze, dodając: + +[code] +[baseurl]/dav/ /mount/point davfs user,noauto,uid=<DesktopUser>,file_mode=600,dir_mode=700 0 1 +[/code] + +gdzie [baseurl] jest adresem URL huba, /mount/point to lokalizacja, w której chcesz zamontować chmurę, a <DesktopUser> to użytkownik, którego logujesz się na swoim komputerze. Miej na uwadze, że jeśli montujesz jako zwykły użytkownik (nie root), punkt montowania musi znajdować się w twoim katalogu domowym. + +Na przykład, jeśli chciałbyś zamontować swoją chmurę w katalogu o nazwie 'cloud' w swoim katalogu domowym, a Twoja nazwa użytkownika to 'bob', zapis w fstab będzie następujący: + +[code][baseurl]/dav/ /home/bob/cloud davfs user,noauto,uid=bob,file_mode=600,dir_mode=700 0 1[/code] + +Teraz utówrz punkt montowania: + +[code]mkdir /home/bob/cloud[/code] + +oraz utwórz plik katalogu do przechowywania danych uwierzytelniania: + +[code]mkdir /home/bob/.davfs2[/code] + +Utwórz plik o nazwie 'secrets' + +[code]nano /home/bob/.davfs2/secrets[/code] + +i dodaj tam swoje dane uwierzytelniania w chmurze + +[code] +[baseurl]/dav <username> <password> +[/code] + +gdzie <username> i <password> to nazwa użytkownika i hasło [i]na Twoim kanale w hubie[/i]. + +Nie pozwól, aby ten plik mógł być zapisywany przez kogoś nieupoważnionego: + +[code]chmod 600 /home/bob/.davfs2/secrets[/code] + +Na koniec, zamontuj dysk: + +[code]mount [baseurl]/dav[/code] + +Możesz teraz znaleźć swoją chmurę w /home/bob/cloud i używać jej tak, jakby była częścią lokalnego systemu plików - nawet jeśli aplikacje, których używasz, same nie obsługują dav. + +[b]Rozwiązywanie problemów[/b] + +W przypadku niektórych serwerów WWW i pewnych konfiguracji może się okazać, że davfs2 tworzy pliki o rozmiarze pliku 0 bajtów, podczas gdy inni klienty działają dobrze. Zwykle jest to spowodowane pamięcią podręczną i blokadami. Jeśli występuje ten problem, musisz edytować konfigurację davfs2. + +[code]sudo nano /etc/davfs2/davfs2.conf[/code] + +Twoja dystrybucja dostarczy przykładową konfigurację i ten plik powinien już istnieć, jednak większość jego treści jest zakomentowana znakiem # na początku wiersza. + +Pierwszym krokiem jest usunięcie blokad. + +Edytuj wiersz use_locks, tak aby odczytywał [code]use_locks 0[/code]. + +Odłącz system plików, podłącz go ponownie i spróbuj skopiować plik z wiersza poleceń. Zauważ, że powinieneś skopiować nowy plik a nie nadpisywać starego. który został utwozony na potrzeby tego testu. Poczekaj minutę lub dwie, a następnie wykonaj polecenie [code]ls -l -h[/code] i sprawdź, czy rozmiar nowego pliku jest nadal większy niż 0 bajtów. Jeśli tak, zatrzymaj się na tym i nie rób nic więcej. + +Jeśli to nadal nie zadziała, wyłącz pamięć podręczną. Pamiętaj, że ma to wpływ na wydajność, więc należy to robić tylko wtedy, gdy wyłączenie blokad nie rozwiązało problemu. Edytuj cache_size i ustaw ją na [code]cache_size 0[/code], a także ustaw file_refresh na [code]file_refresh 0[/code]. Odmontuj system plików, ponownie go podłącz i przetestuj ponownie. + +Jeśli [i]nadal[/i] to nie działa, jest jeszcze jedna rzecz, której możesz spróbować. (Ten jest spowodowany błędem w starszych wersjach samego dav2fs, więc aktualizacja do nowej wersji może również pomóc). Włącz słabe usuwanie etagów, ustawiając [code]drop_weak_etags 1[]/code. Odmontuj i ponownie podłącz swój system plików, aby zastosować zmiany. + +[h5][b]Dolphin[/b][/h5] +Dolphin Browser to przeglądarka internetowa dla Android i iOS. Odwiedź w niej [code]webdavs://example.com/dav[/code], gdzie [code]example.com[/code] to URL do Twojego huba. + +Gdy zostaniesz poproszony o podanie nazwy użytkownika i hasła, wprowadź nazwę swojego kanału (pierwszą część swojej strony internetowej - bez znaku @ i nazwy domeny) i hasło do swojego normalnego konta. + +Pamiętaj, że jeśli jesteś już zalogowany do interfejsu WWW przez Konqueror, nie zostaniesz poproszony o dalsze uwierzytelnianie. + +[h5][b]Konqueror[/b][/h5] +Konqueror to przeglądarka internetowa, meadżer plików i przeglądarka dokumentów dla środowiska KDE. Wystarczy odwiedzić w niej serwis [code]webdavs://example.com/dav[/code] po zalogowaniu się do swojego huba, gdzie [code]example.com[/code] to adres URL huba. + +Jeśli jesteś zalogowany do swojego huba w normalny sposób, nie jest wymagane dalsze uwierzytelnianie. + +Ponadto, jeśli ktoś uwierzytelnił się w innym hubie podczas normalnej sesji przeglądarki, Twoja tożsamość zostanie również przekazana do chmury dla tych hubów - co oznacza, że możesz uzyskać dostęp do wszelkich prywatnych plików na dowolnym serwerze, o ile masz uprawnienia do ich przeglądania, pod warunkiem, że odwiedziłeś tę witrynę wcześniej podczas sesji. + +Ta funkcja jest zwykle ograniczona do interfejsu sieciowego i nie jest dostępna dla żadnego innego środowiska graficznego niż KDE. + +[h5][b]Nautilus[/b][/h5] + +Nautilus to popularny menadżer plików dla środowiska GNOME. Jeśli sie nią posługujesz: + +1. Otwórz okno przeglądarki plików; +2. Wybierz z menu opcję Plik > Połącz z serwerem...; +3. Wpisz davs://<domain_name>/dav/<your_channelname> i kliknij Połącz; +4. Zostaniesz poproszony o podanie nazwy kanału (tak samo jak poprzednio) i hasło; +5. Twój osobisty katalog DAV zostanie udostęþniony w oknie przeglądarki. + +[h5][b]Nemo[/b][/h5] + +Pierwszy sposób: + +wpisz w pasku adresowym "davs://<domain_name>/dav/<your_channelname>". + +Drugi sposób: + +1) Menu > Plik > Połącz z serwerem... +2) Wypełnij okna w formatce dialogowej: +- Sewer: hubzilla_domain_name +- Typ: Secure WebDAV (https) +- Folder: /dav +- Nazwa użytkownika: twoja_nazwa_kanału +- Hasło: twoje_hasło + +Po otwarciu możesz ustawić zakładkę. + +[h5][b]Uwagi dotyczące serwera[/b][/h5] + +Zgłoszono problemy z klientami używającymi "chunked transfer encoding", które obejmuje usługi Apple iOS, a także narzędzia "AnyClient" i "CyberDuck". Działają one dobrze w przypadku pobierania, ale przesyłanie często kończy się plikami o zerowym rozmiarze. Jest to spowodowane nieprawidłową implementacją kodowania fragmentarycznego w niektórych obecnych implementacjach FCGI (fast-cgi). Apache działający z PHP jako modułem nie ma tych problemów, ale podczas pracy pod FCGI może być konieczne użycie alternatywnych klientów lub użycie programu do przesyłania internetowego. W chwili pisania tego artykułu problem był otwarty i nie udostępniono żadnych aktualizacji przez co najmniej rok. Jeśli napotkasz pliki o rozmiarze zerowym z innymi klientami, zapoznaj się z uwagami klienta; ponieważ czasami występują problemy z konfiguracją, które również mogą powodować te objawy. + +[h3]Zapisane wyszukiwania[/h3] + +W celu szybkiego wyszukania informacji można skorzystać z widżetu "saved search". Ten widżet może być prezentowany jako narzędzie paska bocznego na Twojej stronie internetowej i prawdopodobnie na stronie Twojego kanału. Różni się od narzędzia wyszukiwania "paska nawigacji" tym, że nie przeszukuje całej witryny, a jedynie podzbiór informacji dostępnych na Twoim kanale. + +Ponadto podane przez Ciebie frazy wyszukiwania mogą aktywować jednorazowe wyszukiwanie lub zostać zapisane na liście do ponownego wykorzystania. Zapisanie elementu wyszukiwania wywołuje również przeszukiwanie, oprócz dodania go do zapisanej listy (która jest wyświetlana poniżej pola wprowadzania tekstu wyszukiwania). Każdy element na liście może zostać odrzucony, jeśli nie jest już potrzebny. + +Zapisany widżet wyszukiwania zapewni automatyczne uzupełnianie kanałów (wyniki są poprzedzone znakiem @) i hashtagami (poprzedzonymi znakiem #). Nie trzeba wprowadzać tych tagów; chociaż wprowadzenie żądanego tagu zmniejszy wyniki autouzupełniania, aby zawierały tylko istotne informacje. Zachowanie odwzorowuje się następująco: + +[list] +[*]@name - przeszukuje strumienia sieci w poszukiwaniu postów lub komentarzy napisanych przez 'name'. Spowoduje to również zmianę uprawnień edytora postów, aby zawierały tylko 'name'; jakby to była grupa prywatności. +[*]#hashtag - przeszukauje strumień sieci w poszukiwaniu postów zawierających #hashtag. +[*]text - przeszukaj strumień sieci w poszukiwaniu postów zawierających 'text'. +[/list] + + +[h3]Usunięcie kanału lub konta[/h3] + +[h4][b]Usuniecie kanału[/b][/h4] + +Wybierz link 'Usuń kanał' na stronie ustawień kanału lub odwiedź URL [baseurl]/removeme. + +Będziesz musiał potwierdzić swoje hasło i kanał, na którym jesteś obecnie zalogowany, zostanie usunięty. + +[hl][i][b]To jest nieodwracalne.[/b][/i][/hl] + +Jeśli masz klony tożsamości na innych hubach, nie zostaną one usuniete. Operacja ta spowoduje tylko usunięcie tej instancji kanału, która istnieje w hubie, na którym dokonujesz usunięcia kanału. + +[h4][b]Usuniecie konta[/b][/h4] + +Wybierz link 'Usuń konto' widoczny na stronie ustawień konta lub odwiedź URL: [baseurl]/removeaccount + +Będziesz musiał potwierdzić swoje hasło i konto, na którym jesteś obecnie zalogowany, zostanie usunięte. + +[hl][i][b]To jest nieodwracalne.[/b][/i][/hl] + +Wszystkie Twoje kanały zostaną usunięte. Jeśli masz klony tożsamości na innych hubach - nie zostaną one usuniete. Operacja ta powoduje tylko usunięcie instancji kanałów, które istnieją hubie, na którym dokonujesz tą operację. + diff --git a/doc/pl/toc.html b/doc/pl/toc.html new file mode 100644 index 000000000..cadc5676a --- /dev/null +++ b/doc/pl/toc.html @@ -0,0 +1,75 @@ +
+
+
+

+ Poradniki +

+
+
+ +
+
+
+
+

+ Dla członków +

+
+ +
+
+
+

+ Dla administratorów +

+
+ +
+
+
+

+ Dla deweloperów +

+
+ +
+
+
+

+ Informacje o ... +

+
+ +
+
diff --git a/doc/pl/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png b/doc/pl/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png new file mode 100644 index 0000000000000000000000000000000000000000..d5cf1093f311ff605e5f5da3e37f4d929eeb2c06 GIT binary patch literal 249151 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

Flugtk1B2Kv_aj8iX}C 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

b%JeTpUJ@p}>xTPE6`OKLG>%(QARt5U2CE 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%0AdeP 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

4Vu0u2xn2IT}5LzVkSt_C*ssW>t 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

R>%=WG0BYa(29#ll3ty*~bN z1uzrrLMi5g+M_QNo5Ra%t&lSalYEJW@W|nkraln}*8&g=f?ml9+@B z;m%R5F)F=W|JphcKWgZe&Y&I17|dsjsq^{Z=_i6eUbAdSshGs9aBCooz;+9lNM%cY z>G7-8_AS0Kp1I9qSWK~**|MJf>c(mI$_&?b<4pO>|AuNSy0UBGce~aZk2ov1dHYr> z`WX?JT$Rl}e~w=-B87ACIW#iYXW+i23+0mt$Szp=QAv~(MtYr&OszX;a!Q)pNLTy? z=OqVOJ}LtshMqxC1y=ZIGbHJgRlEG1Jh2LnLKW8d8hS5I?Mq2)VCPv_6Xe1+*+OiC zh{`P5%UKRS*nDd9{N+?5L>~v+^*Q8q#$puDQ()vpf+7AJ>Bat<_R&j^Tta?G2G5^LLi7FwZpPC9#Ti1lN3LW=|Jgsdans6GyTW zI@=}%$p={7lByFS>xB(M#Zu4H%WLYL9Dh0vf8N0xbtTPV=%u z0SEhN>y8!o7q18;L}0bB=zNR!t`rZe*tpXx0}90=Jo^-cFYmC9mjZ%afA!Pmx|IDF zZBbCk9|gXKTB;ag6QGt$W`@-=Iax-gKslm=j|Ty42AZ4__dNK*k$k}0f_5LHx1loB zLpJ4^IOS8CMS!V4;9@t3-Va0t*f4>!fxXXi2)FLF;Zo#q>NbB#DI<05cfQRrKUS9> zRo*}YfWDb38(rh>?k?6gmmx3c+|;5okY3Fo;@Wq2{-Nn)Xr4q4;LmX+6s!Fffj_wNh_%x?NavFy)x z^+2vQ>i7X}Qlg-y5YxoBlD@ONU;NIjL%zan^F;G3w~U`K36IE{?bdPEf0{<~SN`E& zeU+eWu(D%lqWXZdD_rG*jar@@$m8_qycpDKEZurVh1>-6=6L_Eztk*tqN2}FP0tF8 z6Nmg7B;F4KKO}>eq_1*d!HCI4-_Z?E(BgW3;dyGR=rXZ_v^R(6y#DvZ9+$@*UKFy< zUBKcf2JVb^9Kx8H*$m%}6-C0hn)=j3H=w+h4Yxqwr=cjOU~Ydw%s&vz^W3;_QZ>>P z{+30^3oS`girmvsu~IQ8MF>}Sk8~;R1vu>n(DLgeo&x6E{z(S{rzQNSL>5P5QiX%p z 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 V5)XYb8#>x$2r$ttePsXQe*y49Iqd)d literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png b/doc/pl/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png new file mode 100644 index 0000000000000000000000000000000000000000..c403bf80604cc2e3705ce62afd22096c45edab6f GIT binary patch literal 178913 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 z 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%0Dc!h6=qb z;?%#%E_dXSQ5=0shV|oi=ey4~Sx2X+?d{nb9&GnH9R@vTiN0hRe*)B%CRbc?H{XN< zY`i_;k}mlL_-s%xahn~}&>*S8+*q_7})2hcQq2*0lZJ$d^>{5L3 zIvnU`l*mK9Zk4DJkYSNFCCm7`vlwEhpPSgTkHSPNUodHFnsJW58__j}{WZr)g6GSC z-Up4~sq5AVstMv?TV|vUv&i$0ddKp8q$jjv{?(W)?;=(8_<0fK;*d5mgw6f139M-+ zDkMKxlgg|8N+LA$o~uEv97T@~_ zUla$|b})bXy1u(tv@;mPd)Pgy`|kRM6G2zsmU~7(Toc%msRhJT{0oA%zc$w7Qo<*i zq4uVfVNt%qHznf;?kOc&vJ$egY6Z>%ou=t=w{UDk!2a*Z?3hDP~ z>@p~h_!R|Flgsx=0rjUlhEu37JhO0t38UkppM$es*L><8H*8k#KZIYp}!j zLMzStbay&EOZvn4qQG-4>d#-g+|W&!d>AiZppS z(rj!K!Ph2?b_1(}j^7a-Y%7i9&Lmx$E!e$}WrGkwCJ>TzNL}M7;$ySxN~t99hCIwi zdD;W$Xiyc-!Ss~l5||zQR!_h?*13@VY)0D)%mxTUe zU`4GoO%7CsKgMH3otD}=hbbQs_HNAcu%@r?Piuh8mhC&SE=X~P6yS4Q)LC^WFTt93 z!Vjr2>b6c`QKr%1Yho}*5z2Kt5)CkQv5)VVlLH-1FlRxI^KGtTK zTe*B*C&r|Scvw;!lxG)pN&2Sgoawx|Ou36kjHaGa` z7%pffE$mB-IO2+Lp0kuA{jgt&HBxG8xZGEDtUlGB`*>J@rG~66uSo1aL=guQ+Ocam z|2?61t##9QVlYW`z+)yJ#C!&_8KffccboSK%%cxt=G4E90w(eYUGWAGN_t8Xtx{>d zijx_o2DxNndw0t4lWGt)?souKb#124ppIJpzDE8~(^W%+^7?~LQ% zmI3(c`1p?HLP>+i@oc|`+vDQ5J(KDkp~BkTUrizDRxgr2Ovo>Z#D7F#tvE+q_B$)T z2G&HHvW4GScHE-3*bt$Oi1q8u*L*cf_XPZM{^3Pqv28XoZRnZh`*dUoRpH~f5QlF( z>t%HKH6+=Nw{@9nk8QbCTsBqen?5Er`)yu`UuC$w8K;_Qxt56eWiCZUjj|;4wP42` znAU)!N=5Cv+}MJoN`)zreCw*)^JzI_nHpUZ;rGpw9&z|ycKExE6?XIuz4MNIsb7~U z@32;GzqdQWT09R!`_H($hLLa>q?Wb=&A%G-lgO65s}7NiPq>ccO2j?h7$6ic6v&IR z4pIFYe~?1^xkyV&jbKLlbDDV(Bc#YShqcdEeieUVL~Vwyu1pocN-dF+CU72?N;qx6xVCpWWPs&EXG%a$EKekGI*sRx2Ujj1A&_@XH?6q`H5`d2%pXPm zw}KPt?s+V2D9;daz$Cs_Ae(J#{9TtxCXF(kdLrm{ zY#$)Jn`S}||5)RR$SoagF4ZN0@Mu*(I<@NN2q*?jxZm55`I3#gGdbDgpn?L_lQ%g8 z@6}#TeQ$o7y;(qdPsOymV#T8ntFSgSy;nw2`$_5z;s6X!5`pKkD?mLaW8}x!DQ4K! zo%N}>BQg+X%od*P1qZS90gAYIw#x=of&Hc9f0p^P&DW0ro+lbp+Sje^OG7c}z$} zMM$mK+tV0VOjmX`;c5MW8^|X!eW#-6F;JvNDe2$GJA?ELSo3yJMrRC4E96547_);t zYqoyQzLiVr1xxTq-}`UGX|sp+01UE@QEYeV77N$E6!ds8A)yH{nj7glUvW$P{w6&> zfXd@agvw_FiD6z{*?uGuZuro}f8XD6IkPg@3eF5DxY&mmq%p*ax)?;V*a9^+#Ub0Yi2)TZPMApzsI*VhyQ9$F(NvzL!GSn zOc^)qtAk~=Zj5C<2Z_Z7M*MLwXqlyX`c4qKdWIv;p;-N%anoJg?bnCVc|o5i*7!ON z{6M2Zq|{HOOxTztbaJ+5iJkn*dE9h{D#f)u+H_-H7Skj{r1bJZW3sfic%-ko6>Js^ z=7JKkrx9vXzc{XguR(+u%kvHs`^f1!ddH!2_{?$p)zo1$X1P`tag32wfq(4K|9XY} z&FbUx$d8FFxC!g?s4w62T2)Qrji>Lzi{%*m)tqyKI! z$L`(dz{O^XX&o04YG+aha%G)}hT~(qkE=`)RyFctR@{3F4;6@|j zQ#KX#B6u5%iRm?AGHESZPQr3Z`F5G4&JR8^mwjc*RWu3&gy!2T`g@E|)$fXwb$Fb= za~s0tsFD5Yz1DrVD5zQBqHiPF1`d|MfE_|PA)Ao32J`KGQpF-Dmsv;4 zo+m!A4|3GO+;*MM8kEO_$wtAKw_^JG^sKE;aIOKJVN1d6=63rT!4;d#(A;nshV)-U z-tvz;C51=+z9|atO3#9Twp_Fqka5W5&05JM0Yn6Hv>LOYm@9AzE=JSmd2~yF+pCzf z7^Jn=UOi9ePU~gq_jwX2kB1xLv3c&Cnr4W{Zl7o9DKgr=X4$-?KT*L?t%v%!I40dU z!V!eF-rkZ!pXA?qv<7=*TzuX1yw%4$UDh)Ne}qaki%{^4)6CJ6R@-A@vUrF~-nkQr z3*GIrAAOc<8&ste;K4fJRD!UW8!^VRr<p*>YhtLH8Z3zm04owi3yS z?mew0d#rc+MlrNMc!pi@TGahZHUfXdawukNwv!9_Q-SRoNr=;=YQ`gN=b95{r}tW9eRz!{f#)0Wg@9TXGR$E3Gi zl!m-b;h2CMi5J3KLTX%)mN`{JM_Qnuh8CQD@&RL~S*kgVHAx`9TAdn6XB%7nPktVb zzk(NFwrbb15jn?1rrI?!^Jw0RIb7MMb*Q+kcTt)|y5IN5uHG{?1W`UDYjXz+>Tle<$?JorN;^zp^ zXz2y7^vb8f?WdcLXWu5r!|hgR8&(yUeB&z|#VbA}GNI*63+g8TFt!W{t&Bn4XoRuO z12EcFDEfwP$~`0%qA8>)Z(~F~b7R|r6G}yfUbIK$DHTi`;!lIFh{DQe8&p88iw)^t zur8k~xZP#VT|@ztF2pqZ-`>bwjZ(w0UhHq7vlq-?ZP+O~dX(F`6{nLM)eSnmhP{FbB} z3+-XbKs_INZJ!qLl0A2XmCxtJ@PByLTk#6tG9i=W>VhI8`VeFipYllwLe5h zjW25Ijj}4*xTX#>T~(|k%IA!72{tZ)h-mCDMv?y*(grMha`An40rl+IQ@C_E+>XSt zQ+LRdGpa&Ak>cf*;&!Dx{S6eWaovUxt?N?=wO@4vGB^fb&CqjjW+GFQC2Mi>O*MJC zbTND)(F)le=c^w-?RijbPCmB290yq)zof{Tl^HqOKYnA(>cuvdFsv}2*CnI=AQ|Bj zOr($m79>*a_dd!nSa)ysq>2{t;5YQ%!@7TRc*gA=R&g9pGda3&7J0eDD{492)rWbD zGidbI{W|~p?_@G$526B2``dA=;(0Lc6P*1Foo|A7(OVo5P{J>=&qtF*s9yFx>2r5f zjq_y_`+qK+%}uP#L6Ton>F<3}Om1RSXSDkN4&fa-Vvxdf7$Qh2tX0guSm7%|LrqT17^zd9bBilrD<%5w}i2fVO*NxuOx< zM?ThX(Z9jhTrc1H8sV^&GV6oeHFvb(e>qgN*s*!(8KUl?Xha=-H)TC(r6|ylx`OZI zxbks%R-2rX6ZjftS~S}UU0xRR^^EleI_2_PTw$J3F8VV{M{!me9~ER6X;SqwjSqta zv}uLtFS!27n2-gJQB!jVT;0*;aAPbBzth^~VwdSbHRwSh+LTh#7FE4VIC&GnGrMC8p!v6uqMP4IY(f-^jYCHxbAeRGExg6_)W7h3uW@Xe z@!u0)h?%u@)g5e!1()mFd6!+ax3rgnMbD6LUOnAZj|PV&dxp=aM4rc3279O&pY>zO z#fKT-7g!hiScV@EUE)3@rZI$#3V$lL%X%V^c3z74kjIdCNh2h9%jkQ_Q1G9tx7t`??eN}>gtbl9OdA~vwKSJlcLvi+OOI#hpkR>0ir7K!%ANx_YWKIqmTU7mmn3u+?zKYwa5NDug+ zi?Tp~_rqp-R$kJE26l2N-usz+JT)7fLsQJP3pZ`-S)^&=R8D-LHzXiy#u=0q_qCvc zOV;J!ZmBr*-UDLh@rMU5mSOmO`MWHR_6KPsL^^_8s~*~{m=Zy&%P(!cb%#q;&pHY4 z^w}iC=Pkvbo2jKbNB4VmB>V-VV%mr8f-s-hAckz;NQUfn=#N$V^|xJ@ThQ!n@w~KV ztA+0?NAY!xrx$poe`6o@LSze#`I9wyueb#Cpa|L?xGz%~E7b2K5;4rrKS) zCKI`hFHsG{+OM@u3{ z{b{B~|NEp)_)J)d`a)wLAg~Ix`X*u~L@CO;3@GnZFv>SSe8i)?Aq`3@C}Ql>=IWDo z19XqoN}|b9{!Yv)w*4U!BSjNXAF`0c9jeT$_4e=5Uwfn>Su@?RFgzELv}AxLWif?N ztN{LJR5y@GtmfL3W)SUXH76+(yxM4qzL`D^e*fvhvGaXz@t(o$LL9UK@z#uFeZ7B} zC|v7UOoYEM9{mN9GUFkH^T4JN5QnvX?K%T1h&t$j+9?Q-T+b_X-$}L8(R%BB?v;t} z)kco>^AL8i?$g7yB;cu-zF2+vv;P*(d-`${eZJycsiqsO(4W!bfn^C3>SRp)JAVBh zE+YPtEfx_vuQSYpBH(=R@#!~wZ`*7egPP~o=kD=N7z>$TxSVMC5RK3Gj5$jdQUuNDi>Vv%SN*GXA21{$1|sU^BS z9N?O~`A2b4Y~*fv$8r845Wz0UL*Jp_2YoXgG^Smo##(T+5v$bmK(Hd7=Uc~4`*e8V;pHF?ku=wRU}>iv&g)#-(c}rE8?*)?P*kACUS44O;oO^N)JT<@A5)Y!t1MKTdfUW|2@mzV`^v}2;BZF3|QlR_>R zvovkmqFqpw$ReXOAybY*?9_*RY39&L0^#0-6KV-!69@^?j@Dp|)Nw3Q}~%aITm%DJ3%a80UBlJWa`kREIG z@dK>w5nPtvkF%Crg@WIuX!jN+Ji-lw6E|R~;rB^?)e@#-i0TO%&5EofieKQ|>uArG$Sn^aiodfT|Iq zx=P(NKl#d5&w&WKx;N;^XGNj_9h*gdL=I392L_ClF~NY-)pYY#*+k2i@|141->0j} zlpIky?c^3G+Jcu50RW31oDv5EBT);K!3RUS_a)|RH6O3&aN)P{n%p1{_JxRtf;U?p z9p@ZguJ{$bVZ-Z|9b85npS_Kd7LM+&2aLS`oyh)p<*4zzeAmI+R8J;UUp)=Q9H|zx zzj;?KSH0O~l3a5jgLaBxbt~OQn=T@|%=*CI%Hg9atf1ZAwwSXy5Wc+{Vf*S6y+feR zlvdD3sv;&d)$)%na<$jU!!XaSR^;3G~p%#xDz+8Q;>_&(sYf9 z>2N8a#JNR)?no0EeeJUH-6FMs9~cL6A0q#yrZQv8GATv z#Db&u7i?!i4PQyb78&&3TkWTYt zLGZxXFqls*yHI-$a<5zuY2agN6Hby zR9T#nYeQM`gZ!TsB+uxJh1e0nbKJl5&GnL87xJ$tNBm$V=9E+Ooi|wR(+$}A_c^5= z)F6_5W2f(KI83(@GFt_7iXI(>A!G7ttSC+pBb3N%!#{a4b>BIWIba460s& zX=}G9h8T4$re8rZg=_Wi5*}OjZV!1umI;6+bI3Fbm3LV4r^YlC3EoUKzPOzk$BR1D zFN}w}-Csm=vj{wl2Um!_N2}sl(#+lhDNJ$VHBCz>hLtrmwyo5Em$OCQ7(Qfi`d_S^)ls-W=LL8HLs%=|8uP0RJR} z{wE>Bnp;?LwrZ|KhxDWPzX+Lt9XAd|0)X|$tLKUO=DSX2!F^D_yQYG&+;x)H1174c z_~Fk(;7KJQX71)C1{;d)S;M?qmWCyg2NR37nomRL9mCQZ_-?5clDkI*cK%w|v#1vB zYqfe=&xIx3-$CI$Yxzr9X|^QyPi`*bwBU{iMO{uaGkgX9NOAAWb478nqI~ab{L^oG z(b}NcKzC;~+&pFEkyPhq@@dUe+lh#%pUB~U+1+Q^+Tc0Yf!mqC`vm-Hy1lJs?6xK7 z(C~H|?>;EnP)IbSBluL;@c&I>bP6)P{a++Ti^~ZiA-%66`e20{(;|i_jt~DY^NK%0 z+p&@mn$TMeM{bMD3g?KqsLQ2Y%WC!4w#z;01QHr0)F?sj0whF&bbMX(0DEx{10x}T=;?Je9n1!v`WOgVZ5s!q$P3``RL=6 zWbA0OrqgLIxRg#Xl=QY-rM*VfXEyQ*ll-MDb`AyRv$EA6m_ms{bUP1P)<+jdvEo85 z(JDLMjI8W$xr1KbVfx|OU;-F>R_L1+a#w9!^uw-doCzh5z}A8w_65i;D=63Yq3;K= z@ywhuijijWFWYpeae#}V&t(jG7jVA~#7+lxUV8p6C!{5ppfk|i0CvMSuYI`SisoiB zMqzfBYd?zlyV{2(={&2wxLxlpZJ0M5^Gsaw5388YR}*DP|B)ar?e*4WRX9j1c^+oM+~z{aYkL6x5u`sGk> zxv*o2OvvZt72o;!_Y#OnIN*>ER!3H;aqEFrYcij}Ay4+(r?{WM0!aF6^X52j?VZ1e zbE3RKU-E`pAP=9~Vd_P-?F1}>AZb(?8s^^*w1-8JTe(yOPcb8a*MU)F?5+yWA z?E?64VwKd!;zHA=Y?XN5#aCz1S&4TMk>ZVO85$}CXvlGdto7%9k&+p{o z?F;pf*vNpwa0rXh=LCjI@=Dm|_&mOSyiAg#C5HY3 z)QFhIsl? z7rFZPUa-xRV@xiA5amFkvF#~qmD|@jqc8otZ*?BvA2#+su{8U?E)Dt_k|l_>sI%tD z(BDiF!&dEzv9{rI#MBAR2tH9=;ZuDgEptt<+X-0Ehh=xv>lmIWVDXpt2X*$9(OuiK zmJ=uG<25kXz}6e4gHkVpAOopnrXjGFgygQp{5uHCl;tbPFZ&4D#^^n?j-LkkbuX2~ zy`G@?3MJD&(gx7CJdpTvQsPd|2I8+-{-dZFgN)^yTQ;LDis6TpDPmqvdKNj_XqmcE zt=q<54(~e;kf4YDBLj3TLeGx2bnR_d`^aDe@P_0k_{QG*`+uQWNZU0SiE#0o(D(kY z7UaTL03Hu~A)dEh|7yH9Se5>yuT&L&w-jJCzlAlpD_-`#7FHF^eKa8#f-N(_&(Xn1 zwt34*4=qYSFt|&ai=raEpf?l+bdR+*l2a-*uDs=lp62^oKp$l_t7Bhkc~1zvf+&_CQt zl`5(7Dy^v+Lekd%tW#)F_%t+bo0G< zSL!rTD0Sq=7H^l2T_)n{Aq(M;+K)_*)eWo3W#&QE*pRuvw-c6*SjFR{T_ep%r>a=1 zF_tJ)fTn)|zqrd0U+^EivxA)o&a&HUKwyJxt(Z)Zxx#!t{mimE@yuC;59Z&S|0{l; zd5vwrS?jV8;}i|-2=;OZb$bMlwAoTMCsae6DVu{zGosns=Wkz(C0^s*u3hxcg8gYQ zA*&E*RplrU9IzrCbW;sb+4s7Qdg`EouODCd%5^|w-maRrp%(L#lpqD~0V#r*T=LP& znyZ1pMg8rs*IR#GC|hivD}p)@(#3zV3CcF;^<*fDj?3PzZI**jVz{@i7B59EIxeUqH92DGnI(pYxG(*soa1k z&8}J9QAgJxSq?CR?e?|+t3q*l)gJ@kO$^CX)LkCD)K> zW~IAt=K%?n!eJt(KyRm(Ti?Vs-RmvU+R^R^bE~G6W!Epkq{LCwfyMS1-}%ca_a61l zPooqLgkC{s*%vAw3@lKo`wo1ve!f1qd0cqmeLFu=dENNJkE%9R2Qwl^*I5cGn{(9a zxmz6Ld4Wf2%A5H}{E^&I_vgvW4CnqM{88y2zhpOd$(z<_be9{$-&1*sE3jmNPfL}` zK{9cDvjZra%$;8?ro%G(sy^Zgh?~%e%9yZL6AUQOL^9yf;NmM2W8-eWyFNyik>pV* zR+Mcsm%9iN(d{n837puVeN~_r>@Ce<_9gW+L+U>!1TM(uArQ$k{{#HKqRgibAi&>E zV2v8=<6=(cncJxA@4?MLVk$CC2}^5E%`ulI_cQ^(Cvtp+Vfs|(i=_ou9JYG9TN^@g^v@dy)hYl!K!Yoe`doUHwmf!!!ciTREAML zzGRsv41mnIPNHxX1dv)t-c*Gr2O>&T)bRZuaBTO^8?4N6?4DyFq^LB?GLd0so1D7< zsIYv}NRA~+Cab007M>;fAKn4f-EUwp`TsW_yGe1s-of`eHDT?S;4`q%s|sWp>5;I5 z!_sVV3uBNA&G@_ikh7eJ>-<79(j2#Gcg?lHf;QE5hk3*?hi z?^SU(>DFumh6ZKRS6mONlPmRhFUIh5|C}KoP<&<4BcB}MNjw+G2Ik8QqFN(*eK9WJ zRR`3tf~1+gd?h8HBMV?1xJ=ktKr*+)zfQ2RG>EFK4k}ITH2cTcl>%TMo}0sLUzAjj zVGRC3xhWzepE2XX)X9`E!B}3^EZLvdM^^Ef#cha$7(_?2H30OJ^pBvWjt-p;QL6}1 z4-FUT^GGZHv;eRc^-TDamgcnd!{*tCvh~gfx6SX?No@qSr@T^jV~rrJefPXl^r6R3 z2qLOf4a+pYS~RD%&4pH6F3G@v$q^G7T^03`e#%Qr#H3>_W#!!-aY1_rH()W%`$JHv z!R$0y4kISP3~+N6G|xqA=tMA)uj(h>lhVpe{AJ+bhN%b$rP?n^CcJC}~3U=xe2_ z=k!4Y0L2qL1AqPXxyL=hzTW;ma#4*shPQmD$*J#NcZ=QkDjcs_C=_X! z<%C^sVbR@S`!yflw(tQ{_C*?su3LN;=erS8ecq@COUe1I1fpOg!U)!c&oGPCmF)~R zMw-~ziN4vL=oQQ%QV0J?Quk;Llbepvl)XzW%n~YlZ~ad@N{J)i z(TrNRtHz%|S)uTA!i>Cn)fC*4jK&g3MQH1v64IfgWvL2(lw(AlafUQ{g2tx5nFZEG zL;kwe(%ZDk+O)b#Zq)f!7RQZYvC72#rauWcT|o&EA-FN9MN)qVtPVnFR&1$I`{nut z-ij#*iU|$M_>cl+P#{10wlg#52@*}z{QLrQI=-PA8S=VwEMSc^wnTzHAq1o3VOKtv zKyy_Zk9`YaT@(GLuT&qz;1{+*?cqBgxv$dml($TzpulP4y_r6^W>9fD6JNvO+NylBEygA{dJEG$=rF*&Iym>9`=gR3baTkAZMx|=5jTKoiY6BH1 zpyl|IeND_o1T-eM?-N`$Kj9Qwnw4Dtmn?31nRl&QQ-rw20Bq?&;KPmYZX`#mzI^vO zKu)hV8hH1T_upZ7d*SfF67o$csN3fO(>XcVSXUS#$*}V;=xW*A{?vw}76!~(;R~Ad zj=4oZAW9#6v+KK_?#%fq*!6NeKY{ot1~E_b82Oh}=+;b=w{FWhu8JNQGn2&(an^0H zjE@+G{RR7xm^{Tx=7bGbB~HprUXt88t)R>EcO-daeGeIGt|nJ$Jx-U}VvsIxE)xJi zvv5x5B?~D)?IKP)A-VqIx5{PpserVczyOt$g)9FbKOz(b`GPgMq}-OBBu^ZpKBP{XNzs%gz%ioM1Q(h|-RV8}1)pn@j67NeFC1rW zQ1mUJ#Tafkx`1o&a}T8~=!)m5hTj1^Os{3^(#|`BCb{Fr~4_sI0enz66MZNP}??`#14@N7b~0CTdAZ)(iu(&2_Xi4X|J-mX@`>QOq<T+C7^-rqw zXLU3tP(mZATN_>tOGEy#QN< zzV-osAdmwtDpsGd{(?W5sJP*AAT<1YAHzS)9~9K+>N)mUb_Kjzvk0&i7KT7`$A8Re z&x>A_u_+c>3;XJuQjt0>^d>K@VSTpI)>L3!ieIUQPp+?BtDb+uuGpls+Xt9E2f*1F zo*f?pEGp}t)`F|BevHB9vWfVi*wTQGqR$+)|8%2WDf8VF7v-sO9PPGw7{;=8gWASk z6#*ly=FZ#}XQ2n${VqYMMcl0BoLRf-(7;>xjFG4BL`|s!D1F*(B!L z$`Bga3hFCHVCoLa=9yy;qxz1TR2)<@A5w%K`xbCBg$*o8xA)O1ac!H+e&Q4*7V>l2#{INH`Vo;u31lx^qhTahqT(KR*?cimilb5$ijqZr5-m7 z$n!etFDDb*r|PJHz|GPieXP+%^01(lMD3M2EQn_e7@AwUVzunkYQGEreq|x4U_; zO8kFEm*Y5SbZ(UWQP=)FhTC_0))jhd5*9Svsgw9=y7o+D!H#iKwk}!5cz)q5Lvq-P zeq((~N)chS^siQx_(c@c2JA!z?I?Ll<2(~#jhSjwo+0_aIFcwsCuB+u1^CO$cO}4a z`aILfhN$urw%3L5ZjTF>#j3W84o5=+hk=Q)vn;|WiK~>&v9*s;)b9-Sb7oFHeUy4a zS|teAe8*9;fHp0oq#fA@&;`kqxpVD1*WWouMtL_jo(NwRl^tpLBp`wr`Ypj!^_Nu0 zw+2fNdzw!%?A{CkbB|L_lCd$#&-PYBL)a{bB~8l1?Nn)AoB{5x=P`Uo_EeRq@7fM= zqx7HHXbG$duoRN3utFaWzxG!&1=ivT!Lh}bk>%!tkCzELd0pBb%#=ccixgkbA&_?7 z!#Ho?l?Og_JChpTvPZ}r#rO3{$PoOqLxlumv4b69AA1d7G8ud|%U=ofYyl5FF6+MB zo;OsSV=>|Ulzmx`g~NF6*Kf&pNM4gi*2aesC^L*uzJjTiHn`9Hp3$Z(Jy9{D4@~;> zyUcad!I0@;KDWgbtg*t;Ljpu%mto~JX=P{4A{ME^Qavr15` zF^B_T&m(FUz2vboAy`&JWiR5Bc*#@CGe7aXARgV$IVgtZp50J=R5Rb#@^F*Ov08Mb zzSckmBfeMhy$-BsDt8hK5^{Yw4FNw^v!=O_j2|Q7>Jh$~ax2Dc3ut(K=NV%fN?$P! z2XNMmSd-KLoU7F9TwSCs>JAo~qpdL{jE-N!Q?Ns@hwqKqUel!bX@3gNqzOn>xz)8H z-T1yVm{WzV!YR;+bn;MteAM~pJunlZk?SnQ-ao_TpHgC1)WEE_Xyhn0v|S5Q7#2{= ziw_y{OZUvHZq$tJL8PNiRZ?XJ$ptFW=HL+9Bt+?wnHLEJP5o2;yoO?t53EC^@R7R(kZ`zK}>N(ak( zDqLM`CqC`P=$O`dG0*A#@ufLVGx4P{m1Mg^jkAY+Iw?YRtimyH4+(kn zcRF(`QOoSUgVr$-+wr4#gC^#JJ#?bUBSsEq!vQ8 z0g6_)olvO~l*Bz0%c8bi8-SfIb)D>DN}snKzHw_WFw{($GBQ?DUB$uZJ5K~NV z07%_Rgs+7$X4EF#=U>9KkY>;uKW((v?#?wnPK28mBoL<&47_TP@@9-MEDjwb zY4Etz$hY-+XZSwIMyN+do9LlV37P?m3$wf|7C!XbNKEQj6m+J9^=a}%b}C97klIy8 zx)NxJ)Zx;qDJ106ddl#n#n6)2=At_C^ke1X+}v71R1yzRm6k!-X9 ze_0A!hS7MWCJ)g%$(*v9`{sxcNrl#8ssjen#k@|I*MX1K%xrao9TU7B-ox0fU&*_I78lHE5*v!O`;MM~V!54$7FXFUXJ0Hr~wiRC~VydonNvJ!qr}KY)+Z<%? z#dlC&QyL-hM?whplKI2_lSGHp3?dI@HN)+AxMS12_3S<4eAF;RGZbT;hSr9{78rAy z$r~w#CiBqM7vDQ@=bM)#fj13uc-THs#@Py^w3Hh77}{X~K~gTkBpT9S=Om_gQ2>%} zTT+u&ifj~Lh2nG|(gFBPb6!7;M&RRX>FI~q)J{1GFJL()_$>obVfPa{9+OUg0IpcdErXJ zI&GNOq-y_zuDASZ16-oLTdZgyxVslG(&7Y{;OY;{U%5Xho<)g=Z_>Lq~|wgpb-zZ@1c}~oQhAO zlqi>D(%Br!7ohm0^e;T~1;gA;gaK7gwx;!zy@eYJ6RgUSFJXfgm*=8DE+XpC!lBS& z-zJi4#`g2S)M+9P<#7(vYya@a<2_H3WRsK)tAq_LR%IxwKJRU#qEoCl-LY#@>fpUL zvl1CfP&%9#3_hbSN^!L7WbrOGl?{N1@qq~YSv?gCkP0-IkyMz&h@g+h3F)gz4=j!L z^~qS&5hDE(VQ9K0MPF|})mn9Fg&NEpq*yA7xPcfL57w@9dVh=Gw&bv1@M5dwH%t_GMF^~3Jd z-(<-;C3Cu{ShhldTE1K|Z7hR2nf-gzh*|^(`qtW$Sq2NUTEYHUb}!9%Jw@4)!7qqW zd4xX_C~>Bxty$b?dC_A+=>K}CZ^cT@WG4P_wqhAb!tyZEb2C#VOZ20Spsgt`F6Rvb z5Knen8YM?W6htS!??ETV;F+dTX46iSx83!R0(pho1P!pw9&Obua?sMP)J!_>EQ0rn^|=^)>91OlXe8|Y)z$;iGpZgo|QKt=d#KYmkIR2(7Y4omAfM;$d0*KGdkfv`Ro3YN!x?P^7|-Qj4Ry z;-!(pUbI!mH0EQ~tjL#g+DNb8PF0fCDm1)}sin+753o`-P?n&)io2 zW)@k`P`z5KuvUCHb4fco5&=(36CpaKw=Rq)@lrQwA(=NKAwnuLQ}d_P5Edqjen7(; z6bC-@Oe>o7;%9@mK-1pQKpr!6d?4r;*4Obb^=Ol|EMJt`R!G*6%q^#C+=NK|oWy)X zGI}NDKvu3_BWYFNLo7|lo8Zm2TY+A}kZ4fpn9Exy4SH52cvCuqBO0N)>ase*5XX;X z6~!-Nxk>uCGLk`+cYoc;O^-({MVS{h&fj!k*XN&8)mGCxFEjtLbXPD&j&>>=9s@~y zL7fe2;=i@)hw)DsHOAn_?CnvXvjNBzh(rMH9OjDkq(R*6~ zp_G-i_HTe1UxCIB!g(B9QPe6M4M^hQtpx{c)H{Za(3=U5svNEe^$|LiUu*tb#HzsQ z+Qg(G#$z(D=Dt~Py#D#WdIAzjb8d0{m~ivp8DcPZTX7X~6B~=HE7Dw*U|AUo`X{GQ`Y`?@89T>dT6UWXqeC zx_|{PBkF9vZKQ337lF;kLV2N%P+ihcZ%NhyYziyX{7*&8BdSKWfS7=TIZ{(U)0a{5S#Ticd+rR&kjNio$p_)}q1u5qWUk9tf#b=$nZ}vD7FMbA@wGaUVhY8H@M#id+ovR@ z<#F1&#~TY)z3HFCVTksO?Fj+$>lgt3){zJ% za0p=40(y(PU**T3(cXT4`Qx%>UTjwUw=OV%qjiXk{&-17$K;AHD=$cLW(V%H{O#Np zcKzkF>s{h}D^^%o{IpsuwuuRh+zO~lMs($oy3C2nKqIvAUqS<4bh*f57pV45u+e1- zaIJE)te9!aQu>%(d|CI{YH;XCa zz=#~=BArdbgKEnEl%m&*mczSBFf+ub*Q8I$b>i9SCk#!`XO`dI{&}*hQ0_Hos~ysW zBOj7{G`K+VNyYj#txV~C21&0(Qvg^LIyIIW*tbg@)d$_o!X6={7A0KLDo{@ox_`e1 zdco|v7lLI@h~5foOHF@Hyv#g@q4`}m`=yXgE9O*;08AeI{lom98iP$<<6aRxL}7lS zH-m(*p=ubqlW$*bkd4pw#H+z;#l2`Zh0}xW>osgE$AxuqbDQd+%k$hM1{&jk34Y!X z5uh=U`jPpEuEBUIO=hW|Kg5^}_!ZA?-G{*lBAtoxQ*v4%>&Px^hmc2B5)9P_O_-pG zk?zdzy;gy=mv2nw_dXP!%`n7O0AS1GA5BQXgXT@P!iEgLII`wYoP5&1GAICigtga) zp_}zi>oE^7^9>MlRRar^?bc6J+v+GH`d$chZ-DQ)D->3-#Ggiy9^<~F-on_2^?B<9 zul{)^uLH`A4mSSqO^Z^CXuRRGRD^YuOe?6`hbf z?CnlX={Xza_$6J9OekN-_KiYlT!e_<^J?W|G&6DePxT#Cmf9)Wa5ct2)_!U(LQ9Ig zcsZKMMr$YUKX-j^rIBSm?1(3v$Vw4z3ChTzOG4s}!>tRIZQKzLU^d88W(*{Ng zd`h?}vmei;@QkWI7#%E$7I_saqySWNI*o7liXp`AJ4Q@reHr63k?JHS}Do zh>SQ^$=6XbIYBb;M27A{Tn!gEahj}!IS$F&1GnY7>q|KE1&>#JjtJ*I5}z4wK=&uO z*z&sEDM}oLl}SI8PretD1lc$w`4#`XW2djIu5@e>Z##Si{W(PRTkrU~B>%TS0|MIJ zBEJUQwa~UW42*MrpDI`;<8-xDDDksKcuHpTCV^r$tNh@c3STNG=_1 z{(>d%;AmGr!5?x^q|)W{;sPjv?#Ui7zS{lq&+&C_6zio7-S9Vnwz>_37>w*iOw9c@ zUk5t;f&Zx5F4yn%8%Q9c`e3GkHyj>Z^nBd|{4LQwrhei+ztZ>*Evh`4<>leoy3X7% z{@d1}V*=ovOD`H16!Bfe{@s^kPoRuI1zx%X6#MYt|i6VD6bO4H1*t>S%%T1Sve45tgnF*%oSHotN(=+0}pvgGi-^ zQIrWt?CNuZzFShN#SBe|f*=xrBtwn6l$|<~hp#fP~@ypLk2l^c&*&q z+H|Q`c7%`aHG{2y`t;WB9Kf5%&+jmeTbsC*t6CS6S@(H9fgD_=w=$R33$LqC)sqJJ zW)}Ev84wQEdN?8bB83RS>Tc}-6WFM%Cu~6ZdK$LId3EP)F8cTm20t+HXNNtSbS^*r z4602+P&>Wc?Rq6%zs}5&MGFjndk5VzdBLK3+>rfbWMer=djGmJap8L2lJyR@r}FS` zT~yi9bv%1{cc)^lw?g0>^k&^R=Am~4T9yOjTe}TSp74KAc^I^T{B1QF!TQ!2>;J5> z-Xmn}jj?|Q!|{LKO-$>0*?$p-&f+ztbSz73e;Zw06p=k0*&1DaXW8)ovKU(7Q~`IO zkf2y6on(r$S}YvlDl3~YzibHWYpksBhxk40)Y^Z%Q15}^JncmlK7M7uH%J|tu)@pQ zg9l?~#b4f-k9nY(o8&X@61W=bODhfz(WBNZRq#pGllt6uqLE3Pcgj7OOB= zN$B#E*^X2(*>;%+P$gC(^p;O(gM0A_MK~6PnkP1%<6p7?1qykOe3PGmTDZ}<pY>UH zXQq{h!PYR|h`FVW7Qi8iSFQuXkXtwJIP4rj4TYOHsS1pNof@3aE1t#tbrbZ1PAK+g zo&3nMFXLS~4J~bsp?w<_{B|IG^d*ymi`W8hh6Y1N)DqnY?(cU0OJ8PE);- z=e$OBnXdlYko0#JTh;NU5_^<+c;Z}}czWF-H2(H<8|^W1@r;2?)*j+YL)In^p87aX zE7YLvJUbZo!49YG5_O0eBZ4(FRxio8?W-+;XYfsdZ33aW1&~lNZ^6Cw>PwwY-b;)A zrI@ATWB%7PI_z~BY9uEhVZB3mlMk6E6+e{!yQnYPqHxQ}@@zP4WG&3TN|NWDD z`$kU>xjE%!D1IW=A^czX?0>lBKe+U1W_;XO?SNh%UnWVyjt3L8w%!x~Nc5UaE^a(| zrD-Ih>7~mn(}0A;R#3g;dnG@EmFyl(pHo1@=<~#KtHjver6(XMlZvVVKm1Y7KL)#G zYmha6J&suZzV+AQ1iyU{nEyf25o7cda4wQrou09n?qmKE52fZ#yM@g1=cZ&g&737v zB@q@*X7>;dR`a5883KKlWYFX`x)pN2<_wfFr1n5iW)P{8ug9$0kL|z`od(~-l53eX ziOh{%jaD)-e;6MesH zrdN`G{VhV?9|VFW3n#F=3(7{fkb!)Uj|S9)Uw{_kLyX8e(T$QrW}d@}TN>rP?JN#B zJny=lB4Zk{)Xi{gbJ!A-$g%q9^(2))afZLR2%2-%i{5uY2Rx;nGrJy^<1T}L{7AyN z|Go>qP-+&kep=CsEGs4!ff{?f7jVZe;4R_E`Co0JDL{O5}ml- zcQr2ExHFg1Q{er2c|5_x!K&Q3tMkw(6iVI>ZKD>N?T3Wm3z zu2m1_i#m6ysACMPQ`5;iV)RQ(bj>r(C-Tb6N%gjnCeb5+A~;y1-vYkX5a4S`8)FZC zj2fL&ZIr^qbfKk@9qLDZ`p{+NPQFD_qEQnY&@7$LuWYt*efSZXy?&N zkXVq&w;$$0*er4K`?z|CXziM^&5kzZQ`y6og*et!09WRUzP-42oG95&KMUl(Qmi)( za_96Ac8yZ&nRwYM3q9&t-+^})YmZkt>SC8x9I0XOkPO-oaRxM?T)rHwobLJCe%d2a zvg%s*RTjri*Q8230kxUtx>@;y8>hW-Klw~X36!;FIVaL~evBdhD^&SSw^_ILd~pYU zeF%OB|Mk!;zX|%6FW!<%xIY9y7}@ccjvwN*+{@5lz=4gTFqq@tRvgckd|Oe^;M6y~ zMWbOCVvQv5GDG;|o5Rke<#y^~Q5ph#fNuWxYV>|Bcwr`f=A`c)r1!5%Bwoc2WHA}4 zbVd5w#e2~;_95Ac4*m2e7=br1awKR|@%Az>Y~n-vi4e`9a8*+)u~=5}iu53kc};AS z^J~UC5r}2ISgRCy-PQ$75% zv3R?Wc@u+!UU3cwlU|Z&`yRa1hOyxr%5dQyNbX5#z*3hgek=N0#PBgNO>np48FxL) zpS8m@41G2bRDQMw95#O}#1qr&Eo)!@leO-{8Rz>T+E1WKq;fqPLXj`zxO+#|_Pn}C zUW=?ip)^hRXj%-bew*QT==96H(_C&P(-(A`LE*b03q7)`;Qu3K#<)gv zp*(1TM~(igWfHxHrD6Q0#m?b?a^>5e7-gke-PU-JDI+_<_s!_i%9`0AMbkb18l0>e|=bI)J<-oMa3p!F)S$AHR*wo*Fp zpn{Sjfm$I*I;lU>F)>j-@HhHVzV)XnuBXsmZMn*b%Ji9@v``;mYeR8cak?6Hn#5>z zDdLoTX(fjbzavZSC2Y~-8PMg8HFtt&>e41nOiGqj5~kFN7?MN7ky38uy^f_;-R+6& zG721Ge$!OZXyK+XL zF)=o-&kY~yMg_S<7D#&C$o+}Om(gKWM;#1tac`J>DTYEm4M+~z0x?Ugvmw&e8C}X% zm*wr}d%tvi5}riwStxM{q>U|X-Uryz(uE*w1@QzzZA#fBxfl@=Z^@vL=8lvw2$VU; zlcw1JsBtA-WK;)oW%k-UK=0D2!d>;r-&*`{FMxX2Y&ri+J`V{(zWbS9j{!XKK&-p# zX@%+gk>U?Ew~w%$dE*{^&fUL#Hl7!GLaaY$Rgq;ju1KICZnBngVj~V81aN2lG>A%n>#OjK<$;l6f{9 z&a>Vfx?EIMj)yE&{DXey+k&x9I2j<|M8Yb}^FIt8*1d&a_mc8H_ z?70xg@>%w=ys^n4_?$;PFR2qWByJFYDKgJAqgrh)_q22)5FBiMb>Auo3wmP5;4>K} zYPo6s`p3rR_ND|0(5+!Zxve4!eJlD@q~hufLvR+bve+h00M!;r93>8>7S6b(h}%lm zny6tSxhHUqTHLt=5~A^ghAPbr?ULmV-Jje9(OAow$3(sRK8N0l@?k`ZTdjq>rw z%Egt0L#%Y)*CIx-;itkhupI99lF7y<*7@;!xm)|Q zH2a|&Pof-U1BeI_C8TKDfG!59m}BUgJ0$kN-Mri<2SW%^vuRvk);yYeOb}Ird_^VW z=VlB2(eKF!Wat`YO7!6!j~lnSlTF;q-+#x|wXLl(`SfkXJcE4BB`Ta+X$;L;1uAJ# zSUOj&d9FLlmn&KUuL`%{W}kcow*8m){qDD6b_{9jwyv&P&vugG9$B0Y zb+m~W#~O!qWinSRn90vej9LnZf%Cw3l%`;C6x)bgVlcgYINVQTW{RyL-cRZ}_am%` zkx|Y>L`@ETqV6dqKnIn~vUL9gJu=hIY(L(SP^@LGZ`8e*{<0I{8Ddh*zU7FMjqDVN zt^4JM{VS`|>0id0iIuPN%D?@cA17K%7Iaub zkv18A5B90Y_3?t>Gqer;QWY=$_yz3qU=`RN0BmIRC93tq=OJ8yrSYn%W zr0I?|S#yG^D-Gqf{gMtz0C;IVdugYkxbAi(#k>}5$<3Ce6)v24F_NZy-ZNK00@E3K zZyO{K_3|ai88WS4_+q;ybA5a7vQx|KO|=GZO5tA=CcMrkMhGK>B2fv7bNn;7QRa1D z(HYqMxCOe$7J)FiohH=04h^Y(=xcpICcN<@1OY!xf4M-s` zgn%m&5^|g8Xq53;0i}a=_1>|x)rY+#$Jt0(z|7*Ae$@l+0zn%a&HRQuyh;E@MAMIs zQW7G9ZReOi+K|GT&mn5PU{m!FIU#0}g35f#w3z}@Go-piX1YU5Bh9X`SPMG_ZlJl6 zya;8kl2jq4vwe6&u!8z~HhIosyplpG)d6O>l`DEt7-krvi~{#j+)!ERP_c6GqS$+7 z1f0L*s?TueYGH1V@edzanrgN#7NqBWu8OkQ5u--938Sui1gKKk#eLWs@&<(2$i9N|G~p`IXD6`)MD}Fg_RfIVgvv8 z?VjKdYLOe;wU654*g3vWj=eAMr2NrSpggGCljB6Sn2(P-;5y%`F8q8s^a=Opwb0;MrZErQ1I-OT@?4WhE5F-H!o zYnuMSE_?d&6Uygw|9Wa4~!ExtNHpldBW)7DIN8R*xh1=h? zFv5eMf0_>Vo)%W`Ec|tD^cdZk+K7Jw=(ajg0obB&yebUE{nYyA?`)`6+~?N9)S>$B z3&47Cyg1+DyZL;+hIJZ@AB^pj{9~2>mxQ?}ZvuPqXv$a^l3m!2+-RcUr0Q=Wga_p@aiwbyl0tb!vvfm`F8_7Ie5DR+$dCTRFzR+V2gC~KDD3PYiyvFc+ z0dwoxvFXd@vq?&EXC^kx7tEyc%FEBUq3YG@U^30vveK;`)B=hQoZsoW=M9IK2Y-53 z!&u?KoMc1Sy(cmWE)$EB}up5<|*5S@({%a@6T{>wSctlV9fqOXq_Q`TJ znO<8Xk*`NzEc>TYjX*BtUV3f+op-tvH$SqwI!!Y!{E#MAQOa>~PBOGDSCi0+7ga*I zB96;L{XG|jNw3)z%<`G-#}MF6eefHaOO8mOT!4?@@($noi2T;2y~tj^#xD7NBS0Zz z9JsU=e59E5r2yPLJNLAPAA-uRbLF69c*ia^CraVsOIa7-)MkR3rrU7QjyE1+kL8w4@i@HQxo~`gs{s z^p9toiMe8i%l}?iYOW_$3@J`T0F-Fz*NCwJhU2Y|3l~vrf6G~v9{aLl;Rb3&eo{zq z!AtO%>_N@`V4s*@m~Ww;xPU_!UPKeiS~&H^p-dXsC}z$(Jftbbio_pS&Ib6KSjepp zZm5cw!pvZyWl{GVsBOBnPwq`AXkI+wZbrF*>(chwuBPo34K=cLVwWn_xHpf~;3U!vo z0t!$%>`wAR@+{^G(>PiyY2)JkT5g7I{{QOQciRnrZ_nW3(ojnV-k2=x|EgS>|C@G=n)LXynw%qgQa1o%nb-i z=rXuzse^WwMv3SLQrzljkxQmUv@EzXJ>+&Cxx4W)AZ*5%3160Jsk5c}9(AnE% z{l49{Hvh`+wY&5^^r(UJMQnz!{n52?(|_5of#e?iK*bRUpFJzn2AVNolDA8I0<<~b z{>ei2D?DwFbf>RVi)cbgmC};T7F`V$P81DnC4Dx*?PA+z9@w$T2;?*&^qkJSR5-84q}ZNpC80&q5W&TdOpq6n zI|pzts?pEKk;{wE0L}sE6Pb|%rItwZK9~a%hL8;KXGp!8f(TKJj)#hcA|syAY{eK? zmAE7F4X2Y=BTJb8bqH)zbIg@PBQ!xTMxg}&8M%Yvot{XeN|q!fTRMCFgc=!ZOf7E4 zs5VXOUS-b&k#@-ebb5e-@~asZ?pv4C3o(*?lE5tn9}II3!JdZq;x(E!z?iZRR)g-H z6C)HZFLj<&|I@I>XN-Jf;~?jB!Y&?USOMlQy%f(Iah*x+P6zKwtYey*ha9Bf3Pxx3 zGn#+fi@x8B(YL%E9%#(N-!RePpv&y%zt~-|jcf?K`#CR+InTXfUzf38n8m*Cr_v2u zw><33Ls!x$_d^9BLEcVAU}?tLnH-!>y9#g6ghwMgeaN)d^l2nQn`o+>Hlg_da zOK#pNmaQV{8ZWyWu)n=hSbMgJ@fm|6sDcc(YFkz{g{%WJoaD_B1}eVERNs?)$XSZ^ zFU`hmggGck6S_NO73D;T<)XNiK@*K+vvZstD)KFO}&R}of-`WSw^RxWQrpwIf z%xS;6_{P0Fs4@jNGqPZ}KD!>uxFO^s1~a~Y1IAGrJf~&M`c{cmk|Q*Nc<&#R?P|f_ z#&lRRfKwclulW11caqe$P9pI)omN_Aa7Qe0O5)23&u?l0Rnn;VL^j1kkB@b1*$v&g zg#@a4C#CcsxygnE%jB39L5{pl1vS3%2|G2$Nt8iuia1W_y=~I>yak1px#+{a=I!W< zTJaKAuA$pTk#+%*;JVn{b&wog#2Ci#DZq=jxE$pt%dg#`ON*1msF~==9bL5_rISs6 ziCxog{kb-9({Z^J-Yc^2Wh2xF$Am;I(%)OnKTHXv9r|aX$|p_g7Uw{co2&qtR-pog zsZ%x!spB*scPj4v17$z=gN?lfIQ{p@4x9N*o1ewY$ztK_?P=Wx&$NsVJPLdB!|QX7n8Qy`R)^RR_gTKHse%Zm#>@5O?;i$ zeg0pHaNX^a?&c|PagHH5!>w)9@_rgQe6 z52Jed8Ky`SY?v9s^N|>6S?O3B^Y~4pfy3dS4yl#WmaM;!(KP(gMA6vkb&n}y+x;HE zu9!GDrN#ZSMhb`SP^NTgX}ck7CHR@FO;Sdnl$b+D#vA3{^jq{KT?M=Zoy7cq$;shL zczxXTEcsR8Jo5AXQVH}TsR<5uG))KPrZr;Xb~W55^WMT*A_}r3{E6Yp9+ACw|2{&H z^J;*UpWei#!Z1>`VNrc1S!hu}+E1d{XqQXXf?~jMBOp(x51=(Zjne{+`rX+Br1|Pj zU=_V>&-<(`L(CiYuI2nA=k{#ZRnSl9R>{M*|NXphv&h!Ns#v$vYkwRd$3HpF{{Um5 zGEo-th}zyRBwSxf{O!?4g+wFAH(u;@9Tq(yrtLa%?EljQR`ku8Eu)cU@2uH}YH|G) zVB+Z*mPU1~f%Q)K^4`SE_r=KmRBRA-DdrbkEmA+$@8GnT_PVHYIea|F-DC3r^Ml>D zoc}CJD*8#nu;ReJd#CXXeJA#3UE~JyXeR4nA0EBZ%13#5u`k;1%SkLVA=1Ns|H=zH zFshb9PMionkRS$_m=UzIb3kP5AgpFnu4}#z$Zq>brcM5ZCHD|@3 z1&QO+(x&%%KZb`tD6jXd^OkmLmN`_kVJFEb@C}&QP`q(H~*SZHWZ06yp#r5-tCnCi1Lm8MGC#l-0&8$gE{% z*~Xo1OmDH&Jxx4*>zVC(_v|^Iy(lrmV&%9Um-Y6N%FU)A`L4>w^Z^+}^eAg#O=RqP{Q)d`vnfW~zHR*aV)9H9$>|pl+qF>P zrp(^krh5ALdgVm5)iw_a5pwLvNGdtonE}lwS&{f`TdbJ)W5Wp|@9!rcsdisXzTe4- z36((7&QA-Uq3gn-lcC-4UQmP*9wI4_j#Ab5TMoE0bh=j=<|{mb3? zMH=?sto19DraMYYYU;9I`<>_Boc@oR{mXuLtK{BCNzdP4yHxOPyYT(2%Ee}!-_MfW zm=(V#=VS{*L+a&zYxdzv+f4%8z{|tgExxFUo7)03A;aszFf7n~=s|@FC1{~$n7FyS zI^OSLX@Pe_au+~~W!Oh()cLS}c9Z;1l-G!gRv?Y8B?e?7UDB2Ead(@FzinYp1GsV|Gvm+g-z%%98FOEgBNKQlF=@@u8SBkV%+RqwT z!_9b>izg45RRss9^d?g)vQ|b+CmR{@upxsRX%md@8fgF|wr)S$$fu!)~%g!@f>BbOL&Ok zdm_#-Cu0tS@D>HI;k{G6Dmqk|Op-`yi-CzrQx1G+4+*7uU0gTc-f_R#@;y7z@i`o& zymOR1-xGo+tUnt0UByOozHGk#YdnzMY!voAAK{YU?_R(^cKm?+sto=*2g9=5H6v5#0}tLsgeoF=5B85T&rDE8RO09nUWYo-Idr zz8;)Xl%R)31;I|RaqzH(*3+Fid|RK(Q#r&7>R->NG-oFsKW=X>aMoEV6f2fiE^6qHZ9 zUVhpkbTO!(Jxq`W1eu3Zrr{-apczq8M@R(&6NnfJ0*lD|m_O)6dEFG6i$vhKch|7i zDA3js1LO-6!ao&|pP3g)NC)uJucjL}tF*F2%zwyt4}W4%6J|_7=7}YVj7}uZs**_L zS*vEgcP->8mEvwfw!*YhQSU>8W&$y!J+=h--NVxHHFOh=BMxHWWx%7nUbyWVrn7XvgYTv0}k90!SK8p@DJL{n#NJifJ|;4Oa9l3DxZ$|W@3;qec% zo5mUvwL{$-!$0&K8Fqvk+B@DBIDo$IVedqt5@+7eY`xsu7>HiefT}|382nr&m@QVn zX$3h1Hs)6J$F$VFJK5|4J}zFaQSE)d@7n)p;+^)ybNc1%`1xaNb)tu)B2})Ri@Ga(8S)A56Z9bgaEWS?}+D)Z-P?uXytf(B8Ijy_TYb>u?y2Np@fs59$zOJj= zed$!9PjiLmY4v&!+S{1k|gKB1?2xu-(NsY0*0p$uR0Vp{J>ndOETsC}=g& z{>LHZI^`Mky%_Gb+6L5V9On0+5#AG%AMdgx6I4qm5yNlMbU$%@a~*fRQxL~3?3>`8 zkf1lh{H4zA&C|cK%$Ns# zBhoz7yIt7hG7IzDx6hTzu3ldQb=IFd$a z;gghGBeTT{K>=+{7*~zHaS9uadwWPhzjwo+H^5qK{%PimyJCp8PM39Ex@#i-)pm9d55w zhmz;Yey>#)&(-iMJb!)%-CT!cb;_RYLng9!Z^d9aml$GhbSBR|une(bcC~ZCwmsT7 zk&nzd~!@nI1=9e2$`oIu5N!ut#tHn63L@#A&(pAWwnr zoe-3%E}r;9LB5V;*;fv%zE*5i$s+6KQv${yhx-^OJjV8)yP_0VF>2E-hU35m0SM@{ zOZXXEsD7C#%W8WgF=xW@X)jE%pN1p@0wqvbnQuVFO33*TMc?~B*3~YvfaaRc4X^7Y zGrsZc8}9!UV=g4v^6*5F5XXu>zlu+jHNg|19by$+=Zb+r=6SZXb*L&ElPun3Ezn4I zM9{32^-V|$b2>~77@odYl(#tB|LtKgdcM8Sb7V8>W&U_qv*g{hDfX~D!$OS>VSBIs z9H%g@bng8Rj}frmbNb3a@b;biuC+_{8!nAv|8)DHoo>h^YAF*u)6vG}MmSFN3CCt! zbYOe~vv$_LpT!nyhXMNU-z-bIC~=<$H$9bBp?g|+!;CbNd~}&zLmBfOu06v)Z3I%f z55WjUZ@|R+pHs^IEvZJkxFIW8Yf6uO@eeNJ#YL=>VjyrA{%eWyNSd`v{8-TFLz}~N0h$|aTatio7 z@$lAK`3IdWD*5Ca-Cs03mqcuWzwIq%m@L)SEL*bnmU;RQtT51Ykjmf;t%gC`Z4sjI z>$jW@I-5AP6Nl>=0V-O^zC#D}v|3^X#w&l%tKzf$RtEdmrpCl9F;wfAl9vZBoZ>le^MdL4Dcx&BN+z0smJk z(WjVt%=|D{gQ|n-axTkr>s+ko<1FF*+M|M3LCN=nz%GfHoV~5I*YvPa z>Z|HEGNx+1DHta** zLY)Xy*V9S9frcH4IU+K@Es8>zGKbwmd z3qcnhfAuNWNBoZk=;8HueyAk~;|Pp6H@l)R0RKj2VH$;L6aSu^9^4syOU*T>N)|-G zClgJQZ1er~nNHaME-U)#S}Nb%NQV3)3k8K5Ht+Te?nlDj;-DFBcgIo%ES~;hR2p+G z?qu$KrP4br!7w?iLFWD$(yPo~<~n8>=7?x|Ai7dfZDY5#Y7A@nX8HnYGIQ-Dv6sco zQo!RvxEDBhD74qPuU}t^?Sqm?KWk}`rDobm^!*~qIam2R`j>P!x*mGMN;Yi}1z$fd zog8oaC9$5?jS#oYUbrK&ZG@Q;xy}qG377d#?H!{}HvO0&ECt#S8iK@VRI8cZdY-7q zs6)%_SQ@Sb6(;xf;s9qAjxy%powPhKpXSkl7 ze3tPD5?Fmg=PyXCTsG+`Yjih$9d2JxAdokooJ~JisQkHfl#tz$J-<@NH})@L;gdU2 z^LpFo&$8~0hEummQi6Nq%^gt!5c{OUtjTkdrimPjE+x;|inEFg z>z`d*=BEoR#;_$F=X;U$5wN3B_xC5^iC>~Bov%E8S44gZX}5To0J0L}ZVJU;$NIto zo`q>KFFa%?S4~g+@*pyT9ODpsVZ*3PRW@7F5A)U&Ap$gf#SXihtR>(~0}w{8))SzP z#qG9zs6UuTE-bd&?%}*Ch34ujJHoR4ZzHmd_|YG#905&NsL*zmRM55yoCy9~XSI%z zq2i!kuCqAGo)tH;v{{G8LGh&g2gc~hTZsicbwgcy;QyL;b+MS-^d0YS7W`9i3P*?Y zHRrQysB(!UzBF@@ssfx}Q1Bem_j3N3IkyA^J4iCBeaX~ac1vR1CI$L!wcDWf>`mUl zkL5R*)7H%h|G2UBMlXQaD6jp#pEGo+G*JQdC*M1>yZZ_Cc>*;CJ+eM>vYQB5 z5sz`(@tkUwVI&8ylQ=A*JK2+D3lvRE2l+q=vY;|PcfH!?W?6Q=&ZOh;+w?q+($G*% zw*z-CsSGI%)f9_zH3@DGW{j9J2DH@Js=-9kRT7?~b5$dqe5d;8I3mrVct^WdzX}z* z{`5;q)`&r^-YUMI^P#6pi6g;o+n?mW#gr2sCg(LX+XTIWz3|>O? z1jL9I(SjL_r2vpU+VDi+YNM^D8N!`e@l`TXpFznerf*Pu@)&xod)&N~t4@48jC2dJ zSFLgr18Ow+CZJMzG|CS_3_TxyogNQ-ixdV{JH^4){X82^2Uy<+IHd{u*xsgDNG{z7 zHB{%_Rh|ldatoR+rqWTM)Io=JtzPLCQB^hh3tckKK#c!OY=~X_L9};pNU$Q2PmHG@ z3jCPMVo)tFU|l`9PjQoQ4z)7|;ujwJrCF?G{&6i!!`h>*3CmkDpaH;d;MQI?^&BL*qQntWa zvP+JavkmmU3!S)nUUd3uwvTpqpJP?y|BLMuCknF+lTp4@AwnAkU{FXnV;#*+YA<2W z4wkx6k}|Rz?#LzA(rl$6Rd6W)1ij72CKExHr%G^Bqb=r8jI@ic>R-s0iVNG>CTF3W zYbQC5u(F{0>sWYlk9Pw?cTKYD(y6!MV`UwR$s?Z+PY@?etSw^>mOdsez*_VQOD0wd z=0ayM$LG$+m9kP|#kJS7h>^BcHv+KFt$?mfCaIaV7!O)t!{PZ*SD4z=XckC$P&bH~%bo5xaqIE?@G zb|R(!JW2Konz%+XM=-2x>;VoP<8*-O;uy)AM>(Lh4Gw!_tanF!f8ccT9DlnhK?hoG z8BN(@)VWT-f7o+oe?C^m&VRIT9)>k1u+-;a!Ll2ZNE!IOoh$%!-dKA7gJ7)duu! z{g&d^0>#~e7He^L3mz!$P+SAW3c=mIKyi0>EfS!(mE!JRT#}FTKlj`_#u?wkeaS;! z@{m3DUTe*1*G}v8<4YoPXBlJZp0n~P;MhtyW23%jw@pO)V?Nx7x`f6^2Pf4%9kjcI$umPhIE;Zn5P>_bjDq8-=sE!OT$ z(|oe8c>3%3!&qFr@=m=^NbyE>hWAMZm2y4$kN?V6;7vH?{kOdw0B6tdkH2jlVw6_- zZ@cgG6`FWxeIUGHbPe$OkT6!Su-`tEMuU@&#h&+w$46JQo0O2RIxLy3}6 zh^WO2`Y{k`8O-Bje=gdeq$)N5juRU@JJXGxP@p}yiNn`2oVP}9`$NX~2i;=~IzAc>yIb;U3Q zWoC8Po-qBU>&WPiJ; zP4y!Ix&E5C_chXT^dFu7B7oj}m?#0$>)}(X!JilSNtb@y$KUSzcTsj%tt+X>p7MaV4QJQQ0_aU_LP6hrY$%Jm-~d_W~d+*|MUqsRWK=lUlzCoIhEFJ6$F;~OzP6&sStnT|iVDI()@s8w&` z5|+yQiq{|v$UM8 z%*#EYrWN@@Xi8MfQ9SAq1kc~2SM7=cuDc<_a}{;gJ0!_Geji`ohR~?WyCD9 zsxICMD%?AS)R8vUUS@Dw%v`?ljZ=8-b&(R$)TwZCh}{acUQ^bRfmkfFmIqxjEOOsM zMQ^aApt9&xIw6N~&n3%BblLEWu8f#z9V|s^dgsyH6iOG8v(YE7MZ&Aw0)&6qBbyR- zBdZAhe$-U!-#sVlgrNM@=(kj&EpFvqg`7bBH;NS)sRvADo*6Uxsxf>X<-V~9IRzdO zP*Ci1+uss_exZ~I7OpLTn^ISUMJJwKcKe{&sZW}PJA18Q*qX;*s-kVS@w!61++eCA zm3>mf#x>aFY~7bHzyrgeFin;U&}7<}i(_Y#TjgK6BDds&1E-`|4KJMv(7qnu>+dr2 z!IYQaJm(@FvFn5sleh4{u(X4@b%xiYARs5V3^mR=Cd)v4@UDDa=+IKgO~qk-I8Um| z*2|aU_{P7)2X!udpE2+t?BM*t4J%h=71Q2lz(Rte-El^6I1-S;WO?ZBn4;GKxAagyMq z`>;JP-Bz1=ZULY%;`@Bwn#GC4r6@*A8M;{?-*$!rOLfmd+oQLt3c>hZqA$dvC(gb( zn`rsY6Z`^raL%npwvQX#h+*WzSk}~Jak-9I{!V|}Lcbb+#rEXse-NKOHIwu{b`A;U zC%S_yZTJLz%2W!?J4Bty>N51DT!a#W1&M~~m1c^+-|W|^`t45z^CS5`)R6_Xio1n& zf4VL!h@zNgR+`N{W>c5oML)*=Yc06yQb{M~b7NdOc(M8W?xEjd5G5)B13<|}`I9F! zp+;df<$-mkjCsSf**NZ(AS_wcwPArALs#U4=k zfnq%>2+ZMP6sgp=)KztG;N$-4DddMA>naEM#}qTgeR5E1V>htf z>#)|mJnWmYtT%T4?F#wiCe&aZmbk{c2~B>{V<|DNuiC%bHhB4B>(q_?1W|DxCiVH3 z9&7akw}(U4Paq>t`?t{T^}m3jH1?^iX&(b`E}44`Drh2J4k<*BA7*m_xm$Ot91_#@ zc}bV@K0(s5HPAdODmxxv{cKfS!&Z;EVV_`M4F+=gaZu9`C93n(oU#P!r$x0jon)RO0Po{79`% zm}uugOv(LT^L?W6ldJa!jWum#D0vxvnlH2lM0vE$G(CgOGz z{ zv)FGu>Mw4mpsx$azG<3oKo}X1+%N}x2cb-ek5#R!zz}&7mdmU@$O(D!wM^>QKZ@QR z6Nfa0EG1cjF@^;ldv3${{$q*NKk_>UXwq3j3_uGlUwHSTujlSTq2Q4V4&+b}cg?s8 z8*)mVr3HGe6?;&}x31znzljtzAjva;L{G1v%-xGf&hr%J>G5RzWs{Rp8+@$x_Na+I z4d~NjK?$noZRt@A7%k44!h?-#B_tmdc=xnRk&Io#%1y|j~jitIoA^Zhm|hszB$WAw65j>Gfj#!fz>+QFtrNweQ)M?cC| zgky}bgw3H6?>nz!yB z9c4g0iNV`H+bqh}wB508S{Aj4x|n)`S%)^w7x`uKvIo8)-S|g_{ms<}OR0I7O!}tD zC6g4sN{i`gOVqwdDVIjLj|eG9=JylQ+2hn(s8^@qfH>>^KR|9ufx&|jd{`l-$$)} z%!Cw4+=6_{8y(DJo58oxrNW8CxYmKVl5&NdnIE7k!Z@c_EM<9OxJ4N2345Mxj5d_~x zd#805)EN&BdFph~LsL7dyH92vQDP?>9u5My{nF{=FI7?-ib@H}BYrD7^KKoH!SSUb zY2zn(LJhp=ZlRB@6{Ki|->I?XTpbU+`o}Lp-OtY@(ck&YLO%ZOq9 zJX~(pA7|u#xyupoeZSc9WpQX77m@PmWnHYbED<4+*bECk`Fs>p9O;(@<8B;JZkjdn%^u6cJyK;|}+z^*A*-`5;h%=|j`1c4`EkqwD z0I>R@w`D?GjlTpYIq4rAO~NDWKMi>qD9TUF8F8xD4sEc$mkoCSmUyFlKu^TMTp-mT zQjp56#wrsEB*?0xj+lEd|E-jM7$+fKT|G~eHf%VTHg9x8r0omVx7^*(p6BJBo%ufj z5cswo?7jmYd)J&cS1iejX{NS)gJeDJ^giqg?ZDGxywKWTN##eSxap9bblm+LMuDu) z!2p#DP^iZUNzS9!p=~BlQ3(JQ0jTmo8df?$JZTxK$dasB9|;D80~oLDC>qOV_XQX` z8nrK1#wHCGa=9;be#Z%f^;nD-@3_V~?OzlG#|pH0kCJ3;L9-e_`Q~dWRG`Q5j&G09So6z%xkGe3!bE`QPOX(J6eUgr42+xvnVlfa`NH{!Fr2y5NhU9jBrqNAYN5 zHYuD2zc+{@I_!<@SoiwP{<=AAb^89I!UN(XJhv)DIp>7AEeuv6MzTD)UlvX+CQ}jF zN*uupucO<4M^fF^1&coJC!&W)g=;TvhGOPWV=#p+WT$h}d@bKgoL~$jjBeH`b1p9) z&2A5&2#t(n_gSH#KE?LsZMDwhTO^ZM6}P8LL{f+lBr%H2bMgr_hYpc^TSjq0jF(pl zUzlM*`$k>npGtWkuqUoU;?O(4jg3-H^j4&galqo_odJal??!TQSsvNjy5%GU3OWYX z9pYiZZL?xqVU8?`P8ob+R8N^S0s$$-A6aw)h=Mdy)FI+ENQWp&=BAw2T(i(-Jp|DD4wRPTf0{DvotHf{(j zSm|wWq84EE<|PIGv*SqS!8IeY!x)W;ms1fPLCh~-7I)m_dL^es(p+>k2mvDSB7mda zX!ZhAJI}-}X_0_-pIZLiy-}tuaBBvcipw!r?V(`~Cs{{y%nC9&InL*sdQwel{?>9b5K`k12;m zS8xqOVL4TF3f1x5mU&oBk@x<;-_gc3={QRDaPatImlc(4nZi1~y-7RzfKFKW3 zJ!P{tOS5oX`62IT~{DZ?$-J{bC&DL3(O04D*cO;WLX}MR zbFD_iGwG(PECJHqbm17`A2edIcTq`Pb{Sx3xw2@2{0 zU)D7pWBh*J5cdG{5!;ZXdPzSwh9SgsODlYS3v(w)mhj@6z?6~1 z1tij&PI+3Y?8|y}!qtAV<9!e3;R5kC59y|}Li9A4&Sy#*ca+#jsx*oOcZaj>Jom20 zW^@4Jigvw)#Roq=&w$*r%rAhzvb6iUy;bn;FVJzjW?;)#vGMULB&M=PB~NS$yR5RA z8>8QGU`rd8<1g(f`+wo}59}jriT||nofKIpOX@R#{2#$St}L0&193Bi{$+^|c+Vv~ z$HwK1z#DkRmjr12ZL(3uthU|VxWMDlA5%E+TA$hX+{`Ka6yERxH*AF4i57X1H7B>W zVRKq)?x}F5D*C2ILublPK>DD{f++y@d#KEu8YSYFRR%biEJH7poohrWKNEPbLpe%n5JpqKYea*2euZjY0x zUGZXB{2UL;^1=SA7&$saK^8Ru(&s6A;hPYN2LyBE0=lL+1AC--K(kO37q(%hfc$R< z3?@{voHBzjPbnpeX@3tMc2@fd{*hoN6a1i2&jM>cPJU;ijKa@(an~e;UvlY~@6g`a z2`l536W20txE9|Mi296esEq_7x2$eNqrAg<>}BNZ*{NvWv%N>mf5^y#C#F4ibXIo% zZiW$SA`fLF$*Xx+GL5)K-l!&iO%}C;$d*aM0b4hI>y}JtE1cE->v|gewGjkFf+mk`V9>^Oqfuh{?R0iSj zEh$8Dn{>{b1X)O}@9(%^h{6W+T^2~4oC!g9} zYL3P0o&BHI8$M%&o_SvPyeMEUicJ4+t~k@@Ynf!OH1S?~d*Penbss)rXVm&)d<)<9 zYUS1S14hO|UUzK@YV+{ord)OFpHNhAw-}9D3GdsGA(D_(ES5#9(B}VP0rJsGS7=rP z=H5$B2h+?#9sy6reiQS5obI>&O-_Bvo%4@C?S{1N?lzm6<2Ruh;WG=yI?+CHATAhe zG^aJH%LfJ0Uq6ZS3l<`_BYY5Ux-r-o;S%>i%A`ik8t+^btk;q*7%7S7UNT`t9HP;Y zMoRji@57?1%ErLJ8`I~6-4-B$YG2^|EsBc8QE6l2j(ER}Y;eO{$r>FG7g1Ki%-$=W zSbj!=u>SM?=*3o1f3xJQPA7jT6SwF_3P77g8xTz^@rekrokhfHLBTAt5MICz}aM`sUoilfiAoHXb?(GVYIF7c$&&XNxfT< z%JE#*!qg-CJr%|ccLxZZCBBu9hrn6jT< z0Ix#u9Uj9h-v3`AxQXq}f3&}v`Kq3ZTgagh$mIF`VLbrlaOI7kW7f>4>>`h}ZjVu% zSmSogdX=78SIEtJf7BzA@90(B{99RZ{(y(w@L&X2(uN1w)pf#LFp>i`sItw|v zQ}^Cu1IPVUn(@UTV-AhOo~3&PC^ag}W;qon_8x`30y}1=wNOn0{I47kW!l&6plwf!M5g@(ZO+eW!G)it$9B6J0ZxkKzeOUAMMA?}}i_aip4- zGS3b*b~QoDhq@S{(L{Mju+&bfYjz6jx}C8!yn)A0pKd(8ifTu`lH5=K^4I*q(yXFt ziMO6_Z+PyqbQ*1t0=Isj!>92OC?8oO$uL*^6Cqh{0@4>Qeu<9gW$`tZN_VV8&cwwG z($24HKUNq6-$v!vaBqF+iqXsr^~A5#GH_)3x@{fiUl*CCHD1kkAQg5-$6|5o68D#% zcOvOl^2t`*9Y=$f@7Jwlo|5=UK)TO6-`omv4%Vod>_2=76_b#VcRWOy?;j@aAOlfx zJ#n81%_)|&s0l-42eD`h>QNwq%xxb)UQ4<<9ddhbuZv9Jn_$38HUOhrdc>E^Em>1o z`LL>FC{t)&6zV@Y-7&DuEC*XT0Yz+Uz5Sw@{|^{AG;^tF?R7*L)pTx{IN#QLMDD$A z2}zD^;f5wE`s4W}3;wioo3?%G5r^vOvgLU&KWW#;DI(k`?(y@j=?N~JBxndKy1j-z z%9ROM&X<9!$bfFi$z*VbQ+USRYnZH4)PF02K(`~Oq!;7Itb&5mZH|c>Y>^QBhdHDP z5+?;4QKKmzfVVcrxV~EB(_Ht;`acijHI8TqM57Lqv9<^GpN~K81!16a%#S1dTE9+J zBlWCcEunkX2R$cV z;Dbf_DRsIO84@WmdJW-RvqG*whi`K!2%zai`3HHil^JkQGp-f>nr&x;3GLIF|AGJd zmy>TChoC|+6wT8*Y3z|DQvx)Ez)+)|ex_K!Gy9bW} zZp6+no-#QuBqe?P<6l7q9;rJU%_4ZA2og)n3r7Y)>B3sU;@ zCl|C1RO(_fh^o!By|zxXalEHuh57S!%%%qD=SCCzd%3W7i0d4}TFJgAsS{xfG+l3o zzQ)r*#NT1uMlN%}5{zF~jq}_G@4D|0{qCJ$!FwHI;yfH`8i?-(qWk{aE&+TO!0q2{D1i0pprJ;5j<02__M`sQr#x&f+{M;j#aovMq>*u?f8 zZ_}=g&|f?MKN~qOpun2u}7eA6)_J_~U!+HzsCWsyquG{wE~vVI8*@zr*RN^Hdn$ zDt^kx%m2{mBk7YXa&p)%!rVeESY0E!{ZAF1u>8kZy-bOdP|N9W1~&G^^hAlK`-<`0`c4=|jHD-cfRaq|a^>3qJ$u%7Cj{A+RwN{%qWHr7y z<=QD|7HtV4n~INt&XHwl%l}CzUI}uEosK) zctN#4#_V2!jBqv1QRygImS(Wc^Cl|OpQB0+OYft7m11pqjVx&%B95s>i5_9%Dm0>F zPKu2e3<;KwCE*VLVhu9YicuyY;9<6WT>KE|98dQ;eJ(|9kq3;AM!mf5iVtL<@7wz8 z60j3YiDbv4g5}O}&ra?1sb7m4E3nUnJ0t$HfX#sS6!vv0jA?*feLnOwiXsO2uiYBC zQ=Y3dZMR3Mc`+$|@$Z%Iu#A^uvL#hf247f9=lw)azTbIA=lzE9rWg!&rn56mLcL_e zI3`R@>5$Ir3W|JsIq)SN14fiQC7@fzqxA+HYJ+}aebfb_Rso*p9AjqZ`<7|sHyV4F zMY~mf{&HoH-aAezDsuA#*f$+fNf8$NGpV!GpfehWXXR2=U{K!;c-H?6!@F1^^&3Mr z2KbhMpLJY=i(xO-g4PjnfLB{2z8YCu|MxlIN6r!z$o%7Bi-0d5G|s7jz!V*Nlmmvm ze#7hqNi#83=o!B>KV0o$_W{{z|EHYi*j(;$dxBI`w(8pnF*<_+^}TP_lQq7VpO{5P zG+;i)Y&kt>9ClTAsxiC+C`I?y9Fi#z<>+;Fg9CM8oq(Z%Gd!UW23WV&dr%5PuH zm5Q?=Xm`gll$$_YvMyItGmGfkNHIyIZ49VB9eD_+HMQszjn}_`M#@^bY2bX470Rk0 zCYG<;ZazNzY1%VwaFZ)Nt4Z*MY$`JAv-Ia?fdQp;23Mp+hHOW5oGO=Q2}adcWGiel zBnol{pIZm$pQltQMJ&?C!qQ6UHk$fyi=<I1lB7h8aA38Ny>_WD<@`6%+0{3*@0Oee|Sq_xJW1Tel0gH!mVjvGmU2CH(==h2~_G0OUi)WwtN9J(_B=QVEaedzb>YgDl{gY_Ge)^K=r8Kg%0%JjD z(RbAYDrT1KbrxnS?zk#+rygW9PywF`xWgewKZ-W0cQAVJD0(#C`l`6gqBEIC`1$-t z_WTRufKVPs14v~oI#DjT0suwmK zm6681ZdOYlQJc&N`A}(Op=t9EZ9`TtB|;@M%3Be@w2yN{+C2AdN-COrS*2mja`g#rcM*3J9(3x zStjfEiBi=K`75RpllEw{f6pZc%}Bh)d($Pb182^$Vma1&d&~Q0+pt}1&+}CWX;SzJ zpmK?zQq@WlE&5!d$40q+d$HK^v%o1L7T~A!H%Fkm8eL`2ZBWmbhwt@z<>!I(w0kor zwOjo6H467_gadQhMk~vRm)V)C60?64U1cQ3v=^tH!+aj9RpIzSz3J!#UOqwVXwz~y z;TE>sdd&4`0nxe6XnIH~2v~`Dc;56)^46QRa^25aFO#qU?HpL5C3G zMXfBT4C6DgZPRu=EMAfKpx+-Ff5B<7B*pNaFhy9Lq}PorI=%zVKNXCXDO2 zI@$G4@L6}rkhGQw-w#l;(V#XHrRg}ewkq8#PsZcng)Hf3ln)(8(*wnJd~}D^P3z=Y z3$uv7Z+ZGewKvjZ;wpE&_)~FH{d+9l-%Af4ou&LN#c9E9h$indpa(SPEKq#F^Z|7JAgzh(!rw6Jmm{~7fH@tC*o``Rxl4AJ~f83EyqEIZwt<^uGXK^kK*9O zzFrXy8JB_*vQr8pB*OQRaUpn85|0?z(T*xV$b&s|~Hq^#?|%_fikGMf}xf+!*OhYa3h(aa&-Ma0D_ zkUyl+PS5({yQlSlO#JD26d1u=eb;@<=1X^fN6P*!?ZhC6iiOvvKV((HxiKs@3)z?t zi^f$LP0=>lUhRI?RK^0lIqe>jh`_sXao>*c@iIL^cbY;k3-jcNGzZHeZP+*1emF5a z(Pb3Ze9P1RaE)968qG&gJ&JW0zG~0aXO^EA!9&!ZhwT%JGdw!YnrEfjjIQnAvXqoB zYZF(+Qf}J2i$Eb5k0=PJRPaP*w$og&uvB-KD#x2u0S`c}wv8IGV|?VhB?bv~B+qE;Z>t_>R;E=lhg(*+@C9tuku>zEI;h|30Tef|TmP z-IVu<5$+w|_m_rA&uv)f@3@}dMDPdr_Tw&)-S3(Xb`5#X@qEoYLSxQvq6~V;8WJ~% zVSfCWfW?ocI|O8(V^*6S_C(%390djmoHooNEcxOF_~S~WM|`(Mp322~e>SNz&(J8V zK8`GCmtqt#lT~5DH0=aBXF|U5j;t=C90U9K_FxMxR6mfuspk21$k!KFWa5A=MhStF z3oiIA+_J+2cWqy7Pt#9YWIxI#uLoW_?;NbybGP7(PNI;pQ-!0nsW*f5PL0L#l*z?K({@b)%&-h zhJqAXtUO+kKlZcFCQ@ir9H&4Fpj9g&sG2m5`ANYU44beod?@Sfe{HI^NggfiPdNLg zO8NG3(dFNJvE7T=92`f{0{9W=85T(_bajccYNW13mb{?ZHuw-){;hL`+dxzQS#8@V zPW6ZM0Lzqmg1+(zmP-w1`L7JpWSU({`!|-0XDlpOW_`M0yw3JQW@7PxX(~ZM!E2Rm z_Yn2iET2Xd?i5*{zEW|@PxWH?9sW@mjOc}ofW8h4!vNRFB^x(|G49bUSy#qPrF6iWldr7Jsw9{fm@I3`c5tRmRe$twoFr(k(C0L3P4@6g{r<2Y5 zNz?e_pKpLhPcT=iX^?j%WE!wAc5V#=fGC zl%WKKvL0`NwL*Ylg{6ou5MvUl2sZBG$eQRIIt#2DWcaNw{>E!r!MWvF1+qz|jrfrX z&NDHWHO-<`4vIZ#3$>bXF(j=BUf?m&09}uf95M?|aNQRb%>kcv{++eCZZ^eQ*g)=Q z{sBo!G)ipBW~v8h*iY3zx*sS$xKw{swp>;GV`BRbygO9%&oHq|<7ZPbzMq2C_>EZF zH8F?fZ0f!G(pyfgPsV}p#;-5H8;dfS@hr=g&O-JK5d3I++ASbw%!W)4-kn?z?a~FV zcP##YzHFjj*7gWK_W$-z!Zb=qAv|9JDWvZa#Z^v+J-ie`#!X}ju5`Hk-)hK01Lizl zTT#|(u@?dxh>7P-v^h2d8w>yq<$u|jKAE^p}FGv?TDqSjMP-ZMbV znrU*#$HF<{w5R-9L?Do=*_okb&?O2RApy65?Ujj|T-abd z_?L8uUC1z{I)#FOW^+lshfM5C`ono_A)iS3tf!6jfSIf0d-Sy2zKeR>c%24i0s+!; z12C4P8b*DtYcUrk7BPuFzU%e1#4J>vh%KK?bLLv1;T&b@R$dEzVt7%I27@a*8t|0{ zooO5A)VhGSQId}-pK#5<5Eq#}Ie^3HG6{YI*`9}A!Y>M_;OTMjn>ZWT^W?PHvuJaD zYmA(6G#{(<2$po^0)LS_SCZL~V32H_7B_9Uq6N1{iz!Rna@uwbvA3|1kN@Wj9GP4! zEUSq;!^g4Bq~z35Wq~qP=CLsIv^SH_l`6$wu3@R07oK4T>oZrEbQiobw&(5zX3 zFjUUn_bEs1GXm^Y)2~?dv=iW|fIj@YZ6%Loy&W*F#9j>@ZDod1RPHV%89k>#OwkAS zC%HrQFbCk5JYnVNt9XBH4}XQM&)Z*B(T}G8L{h1Qtj0?GEwY!~z>^=f(2~*mla%H? zBw&V|R~HLCsPk_W)Dk+7_R>#Jd_pHhxAz)UUjf<3ysp8L;jo27KJ2hec~JvXttbk; z9m}B^3=?+5S3=cq8S3cr?l6wrPiuG>F4baYGS===Sc}y2X&dFZyp6Wc7jxvm! zKv^Zi)TfP7#NDRtZ+d{2M_|qBic>gVYNVDKeo5LR(6xIO3!4a#*Qm|sf@LRK%NNvxC%MG%zvV5j6%TmH6)SWw1;*!n%`qUi}{ z)=cnr!tpkbHv|ZhskF`z&XqZc$s3PH4Y5{jT9v%T;+qS^E>X)dfNjIQx-#Y6fqXd9{h*H^1eD;%I4c)=CiwR`$`b zY*vt`gr~6^Q?ws%;&+>FRia;KnTull;Qmm?QGo#%uO~RUbBDW<3wEA3sGGk_?x!T+ zvVXD<7GGHSsx&bonDf6~Al>p;hf(T}z@yEfzv<~?^*BT7)pr%AiGVlNy2pu?FKtf+ zNQP-EkfT z&4b6pr8)9>6bdm5Vqu5ZUAF_t2U5MBAvLUSO>}ON%34X1GM!au(B9M20CvE0)L7=@ za8#TvF@7EBgje67{IdS_V64!GR`(loFFMF@PLa_F27UWcO84R%wL>Q_7qU@BN7gq_ zhT<@sIISFVAm04L0Q*EL>YlA>IojXXu$Mom42w20zAr+y4Wnz?+HkW|hL`eD1Pj$| zw~j;5a_t)(QH|X84nbDCBFs6AhOG>#9zuuV881M zDQx@(M)2T45UXVzm$S|ZtD0B9q9NW2)Q*S$QkXVWsX%(P}-{{Io z+{iC4lE{-%p{C2_hQKO`)9+681`2E$JY=KMmvplLCAjZR8GRn0n{SrIGB7sYw3Dk5 zF%)zbHlnF90>2!k%7;8(gF<^A@Na^8iXXMtx1S)lat5#`NQ|d^zmDZbWoRKani*1^ zSMWW^{8;=g_qUUqFed}dT(#)ZA9Npc+xy?D?f!8WDcbmR5D)Or6(}hx+_F)065&}} zDZ3Rw`5wEL=+3O0IrAUS$=h;PPq27R_mdGio2p?;74bK4YPH<6p?L`D7^u}0cS@%e8v#vGrgl2DXomcU>Z!{ zQMAyQRoXE9UtBbbQ$|u#_nPMO08z*3Bj3loA>`k=JaQ1%dTJP`E=D>9tqOSv12Oo+j zb!u#sq_kL@&rh8*=@bmjUEkwITTA0q4erq(;Q%N$#Nh1tNZ@VTMF0*+4oio_0S4t)2l!RA?-|o|~u^ zd7*SF7l7TRl7E9YFMmjr@Z3~toc9JP_n7WGq7qeM&VUS6R zdBZAo`Q9yqYv=gR8kdEfyvWOD=qPFD9i4+w!z4vb7~kTTylT4gaeJhhb;uCoEAGul zeC^TQ&jH)&+46z+Lw-XcFgl~>3#pX}7fEO*@H`2Sq+l@<{>Xv*^CtY7!|9TnTXNx3 zbr7k?&r+y1`UKfI-u}^UCgd@hvpx=HAU?XmU|>)4xCm3i*?W6BkTzia8{E6! zy(gG@Z5KVKrVJ_C{B9zf?YIOqp0GzSoE)9*r}zxI?KDEgZy!mS~Z=Z%+Ad z6FjXW`ZmYKBMDNuHU{*}Fx-%S$EG})u$X0T?nc8b} zMoK|U8vbrH{tE7WavyK5>!iHxJajsYrU@@d!(|gaU3dNt9*m0VpC?Pi(-;kAr*5P8 z-6~`K-Y1&N8sV6nqnRjJis25ogaRe%LzET<)&S^9T!UIM&+?@0d^vz0OVh}_(~^1` zn{-~2n=EcRlIFS)KRmA_iozk77&!}I7c-k+xLs-|)4*kK?CANBfZ*}_h9jRVejLVhtZ37Yxe1wFavihj- zDBZIBFrw5OE^KvUoD*NV}!mHP-(_qvB-~Fs`Wa{h3ElI=`ruPi|4bf~fhNH&{h@v~k*2*zyPIe`JHkKJ zP*U^Ds?e*92g3$Gr#3j-Mq5iIlxN>gdG)aArqvS7@DaZBF{)E+QRl1)<(NGfe_>4%Z|~C z4p`4IyyfIiP6o`W>gRiy(aEO1us87C_ea0hA?Gw=4~OF(pyXv!V-zsT(?L>fo^m-Z zEM08wp(4O9kO{o8`n%~ZbT+{la>rK0H-!JAQ^Kv)Vb58Rs}X%aqj8=fDT0uV?b!hhD_0a|Y>rTy5-rnkTm{N~ zIy1?d6j%POB0S*}*-0GJAA(`K*La7-7t^_{t5}2TQEJlZnwt;9SKJ?}=rs4ruZeB= zzxnll8(y3_ERy=iarhzhF*X+ATsT6cx$iYwn!Mn6t5lS*GH0gjBUvoD8J|?DF&qwB@u4n*5LH9B&(~3V7%|RKrQm=?0yc zO`#IJrS#tkSEerNsrBkME?KTomXLoSvr>?eTl5#llCesam)4ZBeY}xB2(eBuQPYD) z;M(O*D$e(^i>GOm*Fd4>Cx3zV7)XeB6{A(7LnnjYWR8cP_rSA>>H0ZWxLes}%-3lo)>1z^i_7#gk3Rf_m|Mm^!JZv zI%*Jx+J~&t$m{LEo_4Y9WW|Da}M zLI-iQRkqu3*~jAr@&^uIyn)!otUvGZ?PN`&wh{%tF&>T9H|K5ull5|-wleT+5-x4n zZ6M~T4p$BTF2Amu{1AKU^nAa02TrN~34DXa^i!0eGpZBbWxP=YGAPm&3Yxc(OG7s% zswXX3Ivm$A$iE-b6w(=N!xqK1=1M1BAoWv|bkn(zCQ`GxZsw%uE=Z1S3q+t191`C6 z#I2v6Hp(g8i^Ijs+^ccW^#R11ZS6Y5REhwm$mz8) z`N0A_-Wm7zh@S!5^g41J^zeWDM3;Ezd!CD3<`M52 zeuT~#_R0Zt@YroS*ZQ4iui`)4O_2#>u6 z^a;fKSe}zFCliNZn?9pNy)Rv#;WiQ3fClP`dEsnwPq~E~vhQSVhnM9*vfu+&q<=pE!S0e)iqg6Rk2@Kcee9C2l@ zaenFaIr)%1^jjBR@?v9!^#*tI-vH!k4jAvwD4%xwvhTVzdkE*m5*87;%v^sCU3I)G zPHGogJ^VjZy=7D!;T9|!++BjZ2e%9|xCIXu+#xVvkB5MTxguEBL4 z=e&2;yZ6txdUdb@Sho(o&iAd5lA!jo>c=sg?d?FiN9I(y06C!vFo=Jq#_(mbBc_o&| zX5!~rurXtgGMBgG8#3*|bwMq{S*AQkegw0bQ@)3v@v)W566w|v`-vkuEhSiI78&*J~S^}i0xc5WT+FSxueOt3?%bj$EIDOdCkDRCs4&?mU2r>(r4BAeZm`X zoM~9{V*waVvPM{ufAV!nmQ|^L>oP!TCchocQ3(1Hy^Hsy&mlz8wSUJ8@6O3IW~70= z5J`FVFCn&nO!N1t(Gf%Xew=86Mm5ZxblwwPOT+|^t7yIIi~9qG&`l%#P8CVQ{Sgp)@A`Do%PIZ9K4J@Pm9hEy-Be5Wq{X< zYwCY$u)kd1_eozF3T8t-Xkre=JT(v%`r|Vd+^*ORL{i^vko~?O>(+sXcEf0s?=LR; zL}&e<-lWO$nPl+)37eM^I=ucTca)}=K(%-I6PKLedznRvn|&Q04UwopzN_X7 zl~27((c-@%Ol6IkB7x^^nE@f3-}$QRf1@4AlM|hLXM6LMLnnWOm^t*T5hFd!zdH zFwLVww5EvUcLI^FrV8L)%5JT$&|75tQi@Cux(W#rf*MckE3|P%ufm_njkLdMsq~L^ z?_}fzsjw&cJe@GjB)-qv7p}xJNe?##w3ditrc(SCcbM;AEdBT5R;(;v%83c!1zSh( zIA$`NiJ|3;np`+F?MRXvq>}J+!1gn6morw9v*?L0;<7V*qtMcG7) z_yaS-+ibNyXM1*hVE`zLnk#0+#tcTG1~R04CcO-dTST!%7nDPQxzupZ6}N zid3JkF66tO27zKs^~mL1G~m##rP<6?$i=gG+OM$>PeE9rM=gYM`xMrZcT`YkON30) z?~kpP3;!S8{J+d|ty#*YWZHe_eIA7Ru8WB8ASI7-x!LRf**Qbwl?!;^lA)^!x?fX* zop!Wj#P7@oq-20{yAj_ZUZ2EmV~RchZKZg9iw(ZIk48R-+x}&yQb|oF{IM~vG#Rad zz>0yvrG#5al1Qr3W2N#}{Q;VV3?@3CDp7Bo!vg)RJ;fjR6p|=lIwhUrO6=o|ImTK% z6k!{aI(!$A85vznzM5pwt@uG<{RGXg|CBx+D`Dgkz(Z+9@RMEUsG(so#F>gJ#*?Xo z54|TnHf}3^yMS)z>l<=fwCxW)2#NZU%xW_hYUg zIa5_3$8C4w28=Yji4rC1sB21L4;@6KtJvs+Sg;6-mF{ut(H%b*$00ILd2V07pizgf zeNfWkXTlz(kE9Q{>g(ijNk%TIkSo$+Y2nLbQ%=)~Unb8XS?!$^Ed}y8CSQ_|h`xn{ z6{x8LT4P0Zicxb?p-X0XN0>SkJPwk)iiP?XRf=BuWno&VoW&bv9GW(>W_mMF&u%`? zO8eErA!9*)BHUR{=17iuEq}_G#{L_)FBoVd89uh7Q5^m7h(&ScYn98D-xahEupFtF z6M2|MT%+vzNKhLk_hs@TpeS-ag@U7pt3uCi+iI|Tm{q>bTP<_gYkD{P6OsBJ?=XIAHLQOqXf;fE~ASIx6$Cu{queX-i%tPy7uQ^zf86M|6kO9Fe9$@xIhi# zMZFN>z6G`U7T9uZ%C%ibarHj`^=!q}a&9?l`<1=b@@=SBK=)}2gG(OV1)$@K-u?Qz zS|y1Q9d&C)`)Ku{^IG>W9=##I@+je6vIIxOH2%Ad5w>b_+c!pO`H@C_kG z`W&Up99x2sst+c1QN7$iWy3t9IAt?4JyUC599qE8{GRJpA*beomgdgkf1O{&2@p@d znEHjMAIUVP1wJDEiBRJ7+bK{I(z8SOQ)ZuZpsx^3FTM~j#~Odaf)5*#ci>*4rg)6q zOP)Dhw4ABR=Ux>rU9O!;AtUN2xGTh~lD9*biSEdHUE5sjFD`!d^tPtP5c{=H0<6LxWL5! z(7G{`q+{2Gsu3+5Nmp86W&TItFUmL=V@YT{Kn;bBZ-^6~(2y6d!+FbJ;wT zOExNPVlGnRS0Oj>j;A0Mll!WHKevs2t;L~ZSc zIPc+$^J%de;QNKx&si>GApTDV%EIofgkdjF1@qtP+0*RP@+oP3n}fARN500p4uP1P zN1zl>_kEk^zxU-I_sB2MKsI7--%D#5;t;jXy&M#6UcZhAw~@`)5)#E8+qm?$fBvz3 z6gE8+3ANx~oB@0DRhW9==Ss`%HiG-WrVqifO z;DubpFU>PWDpzzzV1#6o4<&Rp-L^eSM*mJ(qlgJk{mQVhwJw25{;$45XUkjo-?cOI z>u%5k-)$$#>kjO!033)HsC)|Z=X**1$0dHd?*Gv1Dr9k>^C3;iZA-KHN>k#JfU^(8 zd;CAJ{1-QmtP7y5cP8+bLB#@;YCTimVb^@spCB-Ol-IQYPWY$pt=|RyPt>^q_ti|$ zTv}7#uNNLp6tCMN3r#!ZK7GWD_gDdV={B@f^qd1F?v`u;LWRHTRb=Airw@KfPhPLt z;vdj1nwR>jk-*aewly+6%mUf?QND*NhxVkBwWX@7vP4qDlYJO+SC67ZABD*?Ff*+~WO+1zlwRoU)s2{R^W?3VnTUO3AiKmC+h}AH@+X zlDoK(rtG}`Gb)bch_Z#OrC(CC+auQpIfJ`kj*4d-Aj*U?6>lG*iolbIrSYSAp^8Y0 zOymz#Kx2tV*HQ#KQz-k^{XuTl_O#MdhJ4180z22-=rhva+%!DtzRodTuMRfpnbK*h zj}8j2aLx$RXgy>-G9w)&1*s6R0I1rCxW$#zZqh5XAh%NrAcA05%vG3UW7?-?pow^G zg&@4#die)sobWZg3=z74D&h{$VmW_8hlA#&12ful`OR(^DN3Sf z2EASQUGE+0c9yD|zrQbCI(Q>6jvec>Y|Ff#jo9?kvYim$ZZLIgsR{#5f@ZF_e$UR+ zKIv7$XF9h0MYAHcywL(+JsQH_c5@QDv3uOPHC(J&DPaC&#KqN&biszdFOMf4=kwN^qb;0`cx+Hl{3^!tWz?E<-eTWF zcW&6-c0?Xpm^kd`8=vXx>$ud&t&(O;-j9Kh*v}m5NMd37o{A@jkYHLHvR%C=3^5Uls^RM**-&t4!q zHv}IIjan{p6o`X!{>drmjK45svu|bUr+D8rN>7x$x#J9k&6r+GrrAPfoUWG|O6zr5B=TX9$rUt*$rXEX7 z;$LKtSfeP~&A}W6%N|RMgw}xIRegX&Nd!9}^b0 z6sl?G1!|?Kv}{a?xCwVT1q7iQ*qyRY>Nzp+(W>-tAVD1i?b#Tn9e|)sT-d z`dqH{1f8zU2ATY^f(rOttpR)eZ#hgCR>H3Z{L>5|K_I^jfxFJsw1z#Oy79BtK-k)& z5!q}Fe`{+zEWJmMF9Td+AuI9eN^q|$Bkqn|J!RkKTMBms z!tAGECV!|w9c(pQX$Jo8)3qIp&daX>HSBFnado5(8QAHy30{sb#|E{%Bkrx&ziaLc zo}LZd0~3O{jIMNEJQ6Z`b$WVbd%9&I>o+hX80@JO=6ncUS$=5o3vYFZRU-KM>Ap7t zua31&>8>>+ED&YiBgoJ0%dIq1-y{xFM^V%EWhKtkEalyjLZGxXKxj}fM)-YsMfkYi z_PcQmYoy}@Ej}|+R&86pYeMz9Of*&zI&Kwe-F!Cf2-jBnGOW#yBd%c?6NlH~WimJk z`f6iKsAAmIs#8(H*F#!-1E`$y9iv%z7JbY~YWZ!X{UQ^t=3;r3wS3mewzhUq(Q>er z9Sd438h4;@3m5zFLEKg=o*#vaSyUW(X{cKL0pBq3TVTV!D_j@qxKDc3yz=~-E7K4F zDlIcyxt6sbaYnX5rkR-)8F7J{loMi%n6$k_JE(vj(_o|jITXwCPw_XGT&CQ+%CHCZ z%%qsHkKuclS5gaE$)aJ9ZL3MQ;CAgfncR=fVdmKiJM>~wDT?L67?@%ygbq&kc69z; z18=>8Qss%u_IV~VA<|jd%$>1ZO6HKk1r{O?okzrnSI2GS`69k$b->$iSWWxe`tL0-qX zd|(hKQX{G1xr}1+r`-d3o7JEv%w+d6go`yQlbtq0g58ze1OqA9-3U9!uKg=u9JZKssk7ZIsi(THPB0_>mJPRHPW9{f}3mkt-gZ!U~uILa^7^K==IM~ zijr#;>*UYK=nyx`Su~KW_NE$uC|c^~O;)b& zj9`%eLYV(L$Xn?+cqM$UEWvLawav3vN%-ENB`yG#Tl^ zkF7=xNT=sywNozTR^M0k$@_sc_ze*1s304|M^s#!Z)b`{aX!9tmdU|y_nnl}C4fAV>}qrp(> z`&Wy7JK-WTrFgU~QMV%rxpWziL|U7l?F4RgX`v>0l~b#BR!wdMRQsu z&>zB<%At&6#kElwCo!^^r=MJ4ou-{}*V4sQMP)9`#^*-fkLmyRX~?O$z47|%%ou=B zBi@1cUeDE&DK!xUw_@{M23JkZfC24KJ)_Mm7f#T4lu4kx$t!A;$L&>+Exc_()aw2E zQ!f#?*SfN|C2d@Q{zN}(VGUG=b`9F`j>CgxFSJ`RKvD`?Ew5@^jd=fYg$x+;GC9|r z8;D37@|iCGn-wtfJTx-lTdGaCJ9h(aHYU}QZns`vseOh)c)vTJ<``5&f|N+>YDPiN zzSArQe(+w0KA@E|4!?it?7COEN|0VAkjWp5R?H10ci8gcv4Gz}in3uR#A&>B#oI<@ z&gvBCbov6~wSMF3W7vP2oNvK#;?8GfAvt zw_V`>W-w#J_MJcVVuf4vbpi)7U7ltR2g57rh159Y{MWxx6SX7(f)F_}QMY%5-p%z3 z$X8-jgqW?SFyei0m{L1P{oRK3XWB1&;A)h4ZT-M|z20h-SvYw^Y6dQi^gUZP;yzG% zwFq(GHRN;_LeLsY{h_nK%8=b7s}GHgQZUhh8qz@CnkzPw8+ZdI#=OawrQBd*(wB}U z1~C7`AcSH?mRHWLb|ESdx&A4TR!f#)YdeyPPM!?q^sR%bJ1P|Q9oos<>CT&ET3T7j znOa7>S!ADDrfx)EfvhQM&zL|jL{diV3v_*(R6N=A(Qsb%N_#a5u^URlcBd-oZAKE^ zc^7?Qkt3mJ<6Xm(T}Mj4qS3Nk?o=Bv+e)GYnjkjTM6DB&Us2t3n*No&Z^Ebe%DHTz zk~M1Jz2!CkG3fnq!^rAem$2^dg8-$sQvhuF(S)t@;Xgb(0;y@Jv6Ji=p)r}nY0U*2 z$X$TW-9hmtBGe`ZBX4_)L29upwdZ8}Hdsa=zL&L@mFwyAMk>(lpX{490hHF;Uj`I0 zt%#IokFewG={Itv+BbsLeWPAk=Ikm9Jev$LjC;2M&!F4My+UWx6ZCjtHFsv1@_ZP+ zFof&L-kUG*=fonqE^^JB1VdoYPG50uH65G#kwXhbK-Mow-I+>u0`r;gD zw;zM&EB^Tp8X9E`mHeHc?B<&UV2`M9YCeP1U5e@}|RsJ2Gw>)lt_Pjs`iW=x`q3bRy+v41z zRZ;$9d$+MC<~D8uJ8G0qaXxXW7jIf6(Mlh2$&Kn&A|rFIQu8v4`)C^GYe?a_%V*Rn zU9Qz)2Ad%kcFjRw36cX;cOh^9gZ%7*2+GPm^nLy$*ookYWPZ;KUkc0iOGg+XaE6>y zYBbnAa>O-TPc@?3=a%KmyjIOLmSJ?|)Une|1l^gM{Iio#+3M)aNVNTWyftxXt zCMr@53s2_(RD zrXLM9ABfL`rhWe_V&7zdxZw+Rt*n@FTvv~v&`RICm2zUE?@{d&%?0*J!!wD!s93T! zaL{O)LU;L~l3g5xZGwuz>&;|iTllY^=c@L>y;DKnn5T`btT+Lx>VBmG8 zc48F5ni{4>pTKDI)B&`i($--NbAM$iR=q0ESx)JCLP{o1|=Fr`P!;Z&j7?|TN3U>~->(RT( zTfR0c>*k=T#>~5LonG3X@4u74C3aPqvEi0?mXSL;1h=2ipc7NrCsrca%aZ}(P-AKb z;^(K5%N35<@tD2{wNEf0Ee=!;K3D$2zrx23q0VCfR44trqvggl~MeBTB--u20P%6~#relKq;Q zG5wOm>_xXvW`=R4bpo7DWly}549@pojM3UAYfod>WIK$8pwM$ z#nt`C$lbEt*4j%$WW|bbp!lbkpfZ0baZ)wqD98TZvag|%tnuQfLk@ozJBk&1`<3z> z6Tb4g@gD-LC!pmA{2*hu9;dRGo}Xf%y!jT@*&2-`t`&zGY~7sh#u3)1HP`Ai=l{-l zc)h@IzQCd&j8YG47`;CME17S)w1csFI?rG@3!p_|6dwsk83lc}60BE)8%+@y?_F!1bc>o6Os` z6)Jq+wT!+igySpHPKragkL)0Yx2+Dhbr@A}k-KB|J#Mz;#s-{US`=f^)aa5YnhHZwh6r%JBUy)}2`vgaQm*HtY8zUaw`UBC5h7@X|O`ZWFvQ-g3r43Y>>ZNRMp(b1nFM1@poH{bbE=1OBqTG~T## zPseeUEV%&`c>#G#mJd0s23Bqti#yM0c9wPp0L zrPr`8C(}whZOGT2tO{<^>Ve0P5MIj_GS7_7D}CQf1Iwvw)7fm->h`l`0H=^x-FT0{ z(^+=Bo+f_dR~Td)+uj<{nAh6c~5XqTv6;gcxo&^e1D4Qok*)g_KFD3G(r(t6fL6uZzUGu*x^g2 ztk+eG2E(ObcpK(QiBmae${!Kd1o~LaU`7eFk@^_jyVc_RN(cXN{R3*^u1EKYmJjTU zA?D1H{K=Y36$)c;epB_NmGecL!Eli%T?7MP8O|wbIoNNNk5LruFj;xysharkgMN(Q z63Fxq2T$6_6HC z(K!-pGWzjT_?K`pY5P{R4`X5u!Bgev=L2KZqH_5LHrd$q><(Qv=iw(5LNZz+Yh+fe z>@9^0uJiLo6}P@$m!%~dgMG@4g_dUKJ$(tKqA`WdIiaAaV%y54cAnM&%d}wi&Jr%Z ze)(!-Wgt7=3SBMcJw-A!x@sptP6)4S)UepEKNK1e{+07n0}V6+Dw>meu!*-ez>=V1 ztHll!jf^Pj1rzzW&HsdmQ&08jDZMa2CDM?WkTdVKIsw|l1YIE`Zaqpj(e%&g zc}ia!P_k&({urRL*CRNh#2esf4;4Uho(A;nMkvh;Wk2Y~4Fw)sUUKZT{S`Ix+pF0( z^1Ia+yJtOuwN7LR9ACbP%w>>D>@}HQb7Vzr9+e4(j3HmH^Ce^@-PtgERLSpt&A*p% z&f`;0Z9Amp-Qe2wNsHTIOK&gHJ~U;sivi-aWz{A4vDI?Qz~lJ8^}WI9Wp-}QG0fBN zii|p3fYlfD4s)3$vjzTNO5dZwT`Draav=c^MQB$WY@hJ*Uy&)_2^9paMjy3LZ=Yt& z+;Loq#NciIue1o?QZijmh&?yox|%DzGW^7quI&s@B&^2s%K-}~e+SWbR7`qz+e)@d zy2T;uCPtJZTMHkt;<#;j$)$r9jrUty`y%GpS~dJc6Ndq1`5BFimFN!$iHF8I|7^SZDw zS@C6xKB$OT=^d06seo0iJISLv`{rl;@1DUL40=opJR&HO z%4A0f*s@2M(=I#~ma)ET@JsFs{@#acrkv*REkxKg>Sa)J%xyH(Vc})6mI64=2n7=g zwNd(EB4j<1TpsILlC)GZTDAqOE)CxjuGl-N^yq?F$!~;+nu8w@!=Uj8!u^t%$=$fc zxMYY`2Zs0e$LCoE@2MVtUy8qfmn#Viv~6SE*U8+^&1t38=`D+Nt)b8dy?f>~x zgpsAeIsu|F2y5xsTHvee{$pVE@CM5A{}%7PYA@71&)YR?p$48NAPw5(VD{=Cj(`=) z0wWyBt@vkWnxi68UQ%A^L&ale2G&0T5|_IPcniOMtDQH~dx7s|s z*2K2E=2cfo^?ix(>9%1)#Ttsqa9{v~Ga9$7Q$fC9<9OkKl-P#vKEcBEv;qlGqN}vrz#7odekdzF)o0BblC>y1Wf=>862Z}^tD;3B6L9~u)V9X{@=qx zpV_sp%N$Ln+07bT@n@GHSj?rzKygFQ^VEtn;94J-@g^7J~;yU2Dh`a($ z6-^X_mVW`tedrN(hFOvKFexSObwGpuJgpu42xNr*g$%sDNDkE$INp@LoW4S?vJB*| z@fPx18+-hCA%2g>&LR6X3%|QfFUHopzEJ!5ibJGpTfR`=srFDE-mN!TJEbW@zMZ$` z_Cg+gT9*f@F<`BA`+gpxcekTJl&|Mc=fHhnsq^`%N$<@oFyPpLvBkM2s{6^JPV6={ zLOez0cT>Tc&`a;|bGOx>+vLa>VsH1!O<)I1>;i@W6Tg5Zg~80YVkQk@+rH4bCVA`` z!#02#=|R0dqM2I^P?!62uQb1#Hcs_~+Z3T7pRLJBjK;pV=Hesk_V(EQ(xH=eRhB;S z%wM8jfIk|5G{%)~7!3`*$IQHvWS9`c#hVQ9lA65r;SvoyDkNXzx0j_xA~9g=vTW`t zHX|`9F9g*#c^#Non#xXkoZEWw z!-GImLOY!)oCJb^DX(S0!eDo#rgtfLm;%Fxp%vQ}0}03tnv5mI@o#=VoV<-=L@~T| zrH~AzfcN$l-&(36nWq>ZcD~vyN`7Jjw;Vvsy|#}IGu!p1k1)wQt~%W{h`MUH!M;eh zNU=<)?91G_<9naed)Y0w8m;JAgvG-wA%-4rGrZX&${$e~DGl~RXF?2vvZE~E-9n*C zBiB(hFX0Q`-hVig5kba$5PN2kStx;+3MSj`!e<+A(MDkp9S>sPuUbfy2$JbEfl7F?aLj75T%9oqbn8P>qHTZ{-%NG`5eo-_2d^2crt&UbhIOX zX|0r4^U!s3UUIyT7vO-TBwn0^^9<{Qy&cqHu&sQ&j=QKa5$t&qp_ zcuVX%;F*it-**yNMrj$n&jVaR4;W=^{qm?GBs8URzDHVLlDo{M!;a?7N^{A(tA|L0 zFww3OX{fqrSoFVWq4WAis^wQl?0p~>ww}0Dqk>RKe>6W|E!#35&03He@s%!R+W1r?-G z`2OEtDWmt>W;9~5(eL$bGtq5F)gw)nS(E8ft&0A|2Dvq-S1K{Agj5rqCTzl~5axJy zOVkhH(zheekl7OJq56YHl+L^O%Z5K>8CNAV*2aH+S0+S{9pjYO@@1Vi8D)oSKO)GU zuTJt%#xUMPvzoY=0`TT9*wI9n;EQ{T`yQ10jLI%~E*ki)@zzPZxf^8jQF_9OXo-hc%;rrsc6cm-d; z-af`-nSC%YXws~^B`HuQ5s1AB6uPaBfM_I|h_o3b-T-ZGTKgh6L~f~sex8hWYa9VF zkCG-DT5RqnE)|6Ch|B$Np}`^f4sg^9z`hf(C<;daqDiJo@PG_O-#J3P}7ZLHxa&S=e_^h zZLJm_PG2tJ5@~`|Ktq{u_JxhFEWe6xYTI=%+!w_N)yb3sc$I-s#yWTz?MuI+T0*ay zOfpuZ*|v!Wxl*32YtAn6%w^2QiAK)-+SSQKFf%#z_m8q&{^3%x+Q7YsX*}Fbj0w}By2L+dq&D7lYn6~4!h@DimW1Xc~;alPAFDGIoG`c6`$364{J6SF|SvAJ0cK3T51H(C~hN-&MTx4|~ zf}EFB&4(t>?@3zj!OWgp!J}Cg(TN4v2pyJEC--4R(iRCw)R@g0W!&N50~|n|@=VcY z3G7rzqna_$wA{Y8`HO$vezo%p9HsQ0ok1J zb++oiTixU6^ixWdziIFsXly-kcJ93ZcC`zb7=X4m{Q_mE4OAbxAKC<3TPY@hjB5t} zo@pN`KRj@Hl|zgsAk+4AzIO#|$cWxsQ6#1qf; zyCaKPzT1Nx@Hc2p@CA7BTAt18EYG+{Aiw(~<$4nm^*t;E_I5lC!|DYxyMbb@g7+LH z?n+>TZY&t=ZtM;{_`^%);T`qe@h=~(uoS$!Pv6|g=*~Qg^yS9+SqZIYPRXayO5v39 zm8z<}rL_1Z?N&sfq!HY{k*stU!$2?2e^M$DCpwK<9d|4k=81>*Lzfsf*t`Y&R9G7Z=;rNU#otALv2#WD)ZJvRYYmA zq4D1pkMn$L2+v8yVd3#ad00jfSL=GQ+kVUiT+P^Fd4LC*Y&yr}W9>wp`MJvire`w= z6}#c0Nr{Z$U!g<*DzVS}O>Ggh45g&lNqW}CUy#3KiK!^mf8dfhjK<(MvP%csdQ4Z6 z8OPhoY5WCH9`atS+@uNESPPKF(BxO=uctCoNMj;8bE9pO57z;3WO*&RHsd8GG5fbH zWyM9oqxrhDSX_Eh0(`PyPu(77(7uZXLyYbB;iSJ?a!CNbx`n2UgT)hT=yZUIb z^M~LXGMGa>KbrsYGh_FB{-!kw^9+wXV0Q1kb~#!<9DdxDvFKT~(tFoVvmM zj5ZrHNO;j*Oxt7~C1@MQtr|)h|BEBnr$6b#<-0(VPxcDNm$kfDDEUc=xMc3ecFZm^ zB*2*@%#=cp3AdtVW!r(2h(|}O)AvJO=7b{$LWogKvELH)OZJHN*{aAZa4V^Ly7Kj& zCVX8;=mn&j={XsSWtK!8tK!4B%i&y63~@UoHD%jP;mB5YgXN0o=O{S=Lqby`E>!2D z%@WQrd!hh&1sWBw21%EVsBhP?)|EFUElJBXpf0yu!dYrX^&?}ndE}faVKY&D+A`ZX*3dzgzv(}4 zzbPu14V$4@%Poot?+T&a@4HV2YWqi>JRvGNPV{s#MiN9@mf9MMW*1EPTo!vQa4cW{ z-j^fsS7q3w%|MV3{Bc`hwAUA^ce_u&g3pOZf_y5(UeJ}{uYm{GBQY&wrv&syx@ta?c>5mi3&hzn}6{;ZS zM)#F}mIQ@1CmBH@SF?Q)>%Gax7}A2pM9uH31+ssE>|nTko`y&9^B2fPAFij4fGr}i zbzKLFBzyv08c|F+=f z&%5{yNdMOCuo9!jb}2P4FyYt!rLEA^H8mn*QfSq(x}U%2_J_G+qfu$&UWEhj0}9Etw4)JJB3j7z5M!`yGi#$w zP^0ALzv!EwAt<{_+01Fowa^)%ZkiN0LbHoG=Z@K!*zKiWW`vQaFn&(7s$FE*Rp`O3D&pZqJp4uZ5K)@G7`gLe_)9T zhO2-S&WgY?fi}Scu!dxs#&5RlLlZhJMWyw13lCyH?{0gOv9PC3b6>{4w0^8Y3GG}& z`{OzIamqfnV~x3v?W#FGpNGf{RhQ845mv_hq6Xqa)Q3?^|0lKpH`{0EgsL5ZSBpd;Ofreg1w zX%f#>vwN1WIG5J*1`?OgBHUKDiBtD^Wd}-j3?@l|(|q#ueu1qD+awg>#1nT(Ih7dS zTj<4Kfkr9f)u_(pY7Ji%wdlVO{#Y<5`jzI{J!e1s=be%343F>VBCejktiJRQDEE<% z904v+cThg8Tn1S~IQWD2x$AP)k#X2|g4Dk^}6X^tz=<%qed@J2T76`Vqyn_yW<{ija!yEQ@&EPpe!e zJg049{SN+5$4Ga>7aL}jid+-}1bb@y_&;!}f%VxoIu<GVH;DDA)WD!_@y2ZXD7gcM38hosW2 z5j3C|aRMBp8S7=dVv0kEbi3w}lM+L*LX|=b@VC4r90uf*f?h_BJKWG|YBi5T2}=G> z%)(yk*kK%QkK!;4yEY~{ibPW?>4V4a(y@lPp}!m`2UNjg=4yfbS1;)ZJxHc^Bc30A zbR)?*2kdP&y$z%oU=IMLvLO12e!x^ewWFWAZTsve;2oX5r}P=fKn=%Roz!|ac4>?A zTqE!@Is_ZN+v5=0L?=E=I9;aLbPH|0?)^J<=6U3laAoXsNiS%v)@YMN;V0JmM!S9c z9DiDEARA3Qe)>|kXRsQ9e=Ks2NX&k!-|uQy?zZ>-TT`LD!d@@L9UL25k(;8PO+PF) zXB2MbUml(L!dIDVi5k!_A~5=zBpJXvj8MzG zCm(yem@|t5c%G=zXzSLR&~|yHR4Kz++bQdGbw8 zcHxIf9WDKAoauG(dBHe>vc6JEi_ZHO-t-xwC=%_F*}2QQ+fX3mr>$AbaZ+enHOzQ) z;EOB>N72&0ElE@Jk1f#S!g_LxY^R;ZOR+ei2XZMO3iOnTL) z#Y3s~by0lB#1rW<6lEhrA15RuGDy1}D2ykra&H>#NvNhR9~mT+VE(lO~q`QJ4 zY@-;JaTEU(MgPbJsjm>HmzHq>Nc_!?Zz9JYGbp?zCRumyI}e#$KAhdeJTpKJtg~qN z)%r|)vGMpv-WS7pyz$q^H^JD$xWkdt)5?Eg9Na3OXi^tp&_9&_u)4#r;g(K)h}8Xl z*P-UH8)UC^+kFguqt~Rh4B(^pF`wUcONESY631Fo`B@$nL`i1dJ-2lk;`isH)AUXa z(BHX-`V;>tt>Yhb(evp)^j#vQhW+NMPAAP*-JSoOmr^{) zEU(E(DK~{R#ic0aov%8^s4<(?kHZjS$jP@XGHO?>S7BXdwc{h|hDvlu`GNE*50`@1 zTLzw3#Q4TH!uSk84hYBl7OVgTVDoeNkMrs4M7o+QfN2s-u~{SG@awwo9~Sx<#R6Xa zim8iGKVbvNB@pz1<#5_bS7_A8L!_#_3WMJoS~ONdZ-}_^c1TFns|D?Ucq5xf7iQ&> z|21#hyWGf}wUI%WKFST{k-xylU2#>731e0$`jNuQ-ebmzy9lmFZ;|*xS(Pt|Y$&Wz z?aGQ}kT6UGq`ben3X)qW7*`5j_Pt!iJ^y{JLf$2+~@xJ{>(T3_V@1nuC>=%4RT`HP7XqI3!z&Y z!+>U^p#6gN?h^-?1P?tOwi>JJmfx=eAMTIUt#&`xo9TMjHI3;s2UZ>IJ zS&nKJuuLIyF3gzI7dX%wYxb%M@u_b}F>@l^>v)it;L}+EEum0ElC$A1c!Vik+3pZq zm9pna3z@U|@PyZM`-7BJ`||_@CE2u4)&YSZYi0DPV#RFuj96wJ4EypT`?~Al#SHqK zkd#}c3yR1?Frrzg5rWtqRg52nr4-hq4#;JD`3Q(7E@1 z2dH2`eX}L*33T)Rq6;PB;_BXfe!IK0lxa_VzM8oq58A|ls7Nzm;3R0j19-F2UJ1oQ zq9#_$C?N_ zhnxRSt7-k{<9&tYe}aquZkG&+8si*nbv>fI-aM*~@IL%Yi}Suh@a)3D`*f~p<|la( z)(|gw1Z?8xcd`!hf+1DT+ZZXG^Ooo}X&fRleBQ~lb+nn`Y4n#MTOUCTdqO)VY5Rlp~H&^Fl@e@-b>k|SuaD%yv62QN}#9md^% z-jN03Sd4cr{aWV#ittKAU(k+p-Gwz^U@4!oOC&e(IbEz1IJGFfc2mp#7oi#cIWQ_o zgs$3X&f4RZX>Pt^$0@6b7<~YRc^p5v&3OQ1&ityGD$y`?wkW+%MNbzjUQz4owJ3!F zkLFDSILpJi@Q)H|bc65dmA*257TFy31*e;+Uted7)syt}u?Iv~ZS>2+DqUlP;i zFq?XpZAMnxA3p}}Up$Y&Vkd2@8sC>>vr8;#VWmrXA0x!CW!(rTFkp@BPd*c8cd8Y1 z7Qdm8N~OdXK7YF>YQIiStU-;C<=tGK#_D;(7|R_*SWC>a5FKM)W^Bq2t5bWbq?PgM z4N1Uo%;{1_W`GRSSBOCqA{Lu1U`ABrrL>imIC>J}>neW7f|jl7Qn2*M_Kc+LOG0cm zdj*Yk!^PV`!{(R4+d1SR(LZ+}wMaO>TQg%35E1yz*I$@UPV5Ep_YfF9iAr}p{5{n1 zsb2j?9#xwUn()h9RYqY#|^I^bG`s+yk!i zeGPGyKfnyM7mZZ{cNrX`;CtW6J+$C9Qt)qcoWudN`wQ^$X!;)YUmz+19maU~6!h8x zZqVOBkpL-R(#Fe3!G>FjAjH~`VqMyEs@PQe z7K5OsWsPT5-yPA{HmiWDtL(WD{0@8+i(O%)anUxVc8@e!wp)G@5F^a;W zU?oW#u4-OYOh^+gR$`a2N%a~;+3>rx5m!MNmo%Uv!?@(PCJ*>@Z1hf7!9I7wOD?^# zd*LER3+!Sgde*|8r-GMc>X$sLo2M|Pxs#5gv{M>WAzW=u#=3CDCwBx1aK_A0zPB-r#4xhu%C^DF99>NgEu)gLmNnK(PafOK|jiR_lu zuIhL3xe;Rv_09q<%CC6)y=@dv+!epE{bD6ZWMx|~Q~o{O3H9}5A$#_U)QH`OI65;A z)(64WwDARuuzU@{rKK<8D)2D}j8_^rP5QTF=LG*a-ctpY0e zZbeYq{nu@d;h9y)a;AM!x3h=H6{bv4wUZrZAxIRo;2+B$G$=?3TCf1|-bHI*NG3EW z>W?7EPxmS4{I=}oN+0$o)86%^$NlZ@O&|t~?U_m2{T~K}9zuk*I7J`buR&h7W%IV~ zC@%B&w5SKL5==Z2mm?D?@Sh*c_pt8DgaPE4=*e`3GK^^pJ}!X9?8}A0-|6@YC4$C5 zA8^97rvSORM23pr^t9B=3^I?`5nuRg;h$a>2E0kF&9)<59$w=W8A#O|q2+v&x+w1z zQJnJX@kPIL3w%VP)LM#@&U5!>)X_5jUVG148rt=J$z<+VId-%zr4Uz+qiWwMn_sQp z=n~K2=O-uAvxk~<+igRra9x1pvlhi;KnLD>Iza%I(s|)-_HJ^xT}?bMd*oA6TDe)N zDS~tJVaEy=Wf>`1kpYFZzZvCBmU5rv;n866`&03+>gHeayY7jfxAEsbj+r6mCE-!} zmQojq0^1T)Q(?85^cW5nA5<1F~Sg*-O_2zc+{S1mST0|wdQ25{WaBR z+RCgN4g{&&Se00BUa@J|(cuMaBeHWp`0i_atp^760y(mhYc=QkH+7v;TM+TQ89GXz zZNApmj^PR-g2G8Md(`Tx915%juyo@CqKvj1h(5UVAw z@t*nbamT~7{Ht{qA~cI{EL6vr`Og`YaUOWPtG>Cofxv*KljfKk`c+d@`rCD|cjsuhFw6M;P79fO!MwGx~DzN^+lGN3z7Et3Jv;)+?Ji`0y*9M$C2- zDW#V2`^gr4Ph|%}O`QxGoGUre`zi(f`DBwgEqu+xId8QP?u6+rCCRJVS@A0Sbv+X6 zXMSeR`?$f|0mmxB1%nZZWuYL|9pQ8Do&)M>Oym!TA0ByR#Jt9AI8B+Lxbd?}Y8{fEwnM*)yuUHtdqqYMid%0$#|JwZN>kgLt%XEkJ;9aTbiwact)a( z?1ViLg!7Db%qO_PNzVS!?*gC{y@{<|nU0nFCO=;_rJAwf9rqBB&UcFa9bLQTPDICg zu9NAs)aN%c=Pl^e5l0Vud1||05nJToiZ-}Qd1?1WcwtGFZEEg;Ii)fg^_i~PjBY+$ z38~l|kiGp%WpPaQ)X1c|&5miQz=e9Sk8;wzdwlrM^fL{eavEN`6`bC1{N!*SQWl1> z)5zS^r-NYe;o?OdFv)z=E#NN+;ugnqq4MLdfRmk zWh{Mv(&hgF)%h{$A{6-=W$fuQ$-E30Uy>OCjYX^kAv+SoJ5q10LJk54nM35fDPYuO zFTFoMXlzY%%#J|^f1oO(K+TB%3*?7&U9mLd{eTYb%;R-A`nvOae}k@hp#6M{A2S`? z?$pJl2V}t}1a_zeF*Z*1axAP&6z&Z1E4wtTe7}gsGR+D+n~8rAY#oos?7KirD%v$K zn5DJ*?Rzmj|0P<*RQ#)K0gjNc)BD5P&(dv?3pytDe#Byyud#BAy1etPt2v{1)mWne z6V|uOO`#?A3d&$nGmWp}V6MA#XMStg1vYOTeC?WwS71dsu30}d2e-k=6 zzCRyD*-ROk$+Qp&J!#>!^w2|SYA>E{1to?1Dv5}cENEN4`~KV;`)ysvs^wIYvM_n8 zO1a7|`F@0r+9_?Xls-P&=0si=JH~d6uv>1LP!w0m)6{*pai&-4yT(86WvmN};U9%Z3UA1OKeEhmNNXfHP8a7RXMn}rE0f@_(OP}G61dh{h(5RcW3ONU>9rROMKQ#aWRhETAoVV@_lg zq&%_VEK=pzaX-oKljo`HN2_)yXAzCTgFbKWaH2P{OCLr*mc&+*Q^g`x@@N2+V6C@v zS#`0W8yyB(U1!GkN1+RYJGzBmA&Ud1zsN}`g;Zf`LA3K&{|1p81tRR$=u_gj+^&uD zDsJs31?;N{FObsgpl+xA9caOAmt<;M`tgChd~i9V+tdBydERO8!IAu<)gZL|qkBON zXn*o2b4$H&6{s_s_Rl`;$4A}Nj(#`b#60{07KiwdCVmPUL<3VNng29neG=UH=qh}8 zeQ&JjtD7o6u?gDQ&^HVHxez)=gLENYwBPqg@z9+Ld+LE9S3#G5tunjR7gm|YTGT(B z%YW%wsO+NkcrZ@=zndnjap*NGmmz?o7?cDps1(_e*!pElw0rp@mv?&(+n2SUYruE% zUEez`(w(*Y;>$^^V)l^HePsE-oh>o(9dSr)twCK+YO*g)jmomJVbD6@G9rJ z8~$e~25Db9sIg0m`PC9V_An!zmplBb8CS30N#&R+bx z#5G3RKDg^4Bf|Wdu+e8@hltIr$svqKK|kYX+h(GX>6Lhr6oY4B_i}A|V*p0_`0_IR(#jhO zQ9L$&y)lmh-p3%PhcG|8{yLmq75uYWmL@ON)`=?*3uFRdZKxze( zvl5m*`60eyr6yhm#t%{3oqZIPx+A$p+ zH;|cN@!V5^#;D3pZs+xj<^$gK$xg9}-bUo6^GuMrCX0H~VNL8ey>a}?SZGhgAJx_T ztM)g6tpfx8;PJQwBf0o!>r_pj4tCQ=3Fc$&-OJI_NwnsD5MGBBw~Lff{R>tpDEfUl z^q{w6{LnaTKc^!gn*P#w%9~i^$Z-ZGLyHpI1ikjZl;H#YI7Ml4v1IHCuB?8)2AwzN z{(2DH`S30J0)kv+m=)Z4_wB{U{hyx5hs7V2D7?@xjl102g{(t%a(KEuf6JelA@J!s zPyy{X);%w?IJ+9UkA(XAPv*mw*<0ht@4;XX$Rx05!PxA`xb+4Q;59Y^_W^VZI)&*z z8--uPXmMaBsU4Sx|6j`w2PmIIKq#lW)V}j7vuFE)I zsY&)_W?J-BrCvtz&e3Ebu6(7)m&RcNwQUr^J5snx&&@5#F;t_a$=y$}5O-KkzGEi_ zgO@3;XIdp1nsw3<)ywJa;g%V+U})m2FtQ+sCevRSK2++!F-TrKPS(P&(W)g9Qj4|k zj!Aq{SRq^KcHXq!grolZIea1;?v`1SJ`jzo-5ym1B;zh^A_QbTF zOr9n?*84_RJ<(*2dOV6J;6nT5X%>64@B5=WSa1nMyiTyic^ENVDiHqV*;m=N=fUQA z3yHpYl^Mzf4XuDy%H05xLqlqMwg2q`q*O>G?sFgs8lw!`o_}YsOxdKERyC4uQrwGu z0J3)n#^&jr&B^Gg#6N%{Iruv!^>AxMVkuur8%TNoQwImx?Plz9X{c|Xbc?9;Q<*Cl z?(EhrC_UdfnUKPXuS3*M*Bl!}>$~Rxr&r+E<2L-_w8c*>zk<8A!aW`@c6hCfzW0cj1{SrVYJol%IZ>Wz zdfU*P4XdYH@K0@m(nr$7pv@NQA}n zf27~Ps~I}*-n6Vs7k5^-DA@$Ooy?nrom-DcILPTSZibRmkJEiK=6aD1dX>axNw?8Y zhkqx6FjTVde~Kae9qZz;6_|P08p|Wr8tiYxyy>XVV#xS5rm8#iK<^+iwJEXK!n8eI zh&`?XjZ{+7t>7N9F))c*kq*==gu-NJyMOH<#F&U&aePnl((pUtQ ztCdqw|Hs4jv^g59A6r%{=Yr!QlY_2#osyEr^Ee(!OkIb>3tW`IC3~%OUqRE*a+>pb zjvcEa_)^u;pUx(hJMwF^e(<05G}Ox<1J*!;a;VL8&PzX6)YZIFKcxHG3VrK*J=o+A zdmii2gaQ!10jm5xdL!r2^cT>EkGfg+SPe7UK`?k&^+7>F^vI@P^2veGK!t1cCp1gb zhJ3-pCfd#Z%vgZ{XmH+4K=*+y5ArDRNkb^;*S1XJ`mqh-gJV9r=j5UbTYZMI-%^E} zGj3dj&$<)WDCYD&`a)Ao7n#!RPxF-uoFRpXdj$71n!+P(^Yym0T_le}-~_)9Fr(`b zQ7I9A0wMm*kRum5DpfU=R=Z;z@I|+pc(L*Hr@#M9Nuemv>>@k&L9-;?Rox%|&ekrw z-vYb2XtxyBlpPj`3DGf*4M6Z&TKE{EQ6 zOQhTIy#IUY(#g8#%v9R*uY=XOl0)OLWq-Xg(yYQH{qR9L387N6qCM?wmX7kqv?>_dLyRe=-7oKEKQe-z@Y0@Y=7FQ~T$D@WN3$r)hA1 zDsb8J7ku>rHt-s?v<(hpIRv5(TGVfle@-$)Pu17ZY3I411rV|mb=TgcyZR*{?B_i* zM8D%LS z@^z#C;BPgO$JR8ZjzP{>Y>0JoTKPDatueSBHJ)T7M5XE=Qg3YhHWpjJ8ax}Cds zEur&EH@hJJj-Cr-hWhg}Fa7J;B5?ezhsN^SZ0c5vx4C!^=Wt>2>1Y0~33W}%c?psD zQeAAClH5UC368fk^3%1`p;;zZWG+Xgv<=RVU&WgwD%r^GOa1%k&o}kmeCw}xMdaSp zCY^p`Hv30dXq+15eWW))w!erl`_q`Y`*vh(^d&w5a&ptk4jIFI8NBkM z!THtdfZqVwZz^K46f-1l^ep%s52j=Zxl|84O7z(@$)#Wh#wKcWWHLEun<>IqeOwXI||bvpY?dh3HP`!;kYJZ}Q}wBuH#kjF+wa37|+PGN4x8 zdt3cae;? zCku3B3rjHoy-^f~uZVnnAUL(cKL347d_nP?d>V{04uLYe_y`}js(}{_oS>OK0Jk&! zun%AF@8VnLjl-6gu7k?qKA5QM9I=qG&Q*+CI&$A~|7jS# zFfG0_Q!Q{$2U6=uQgd!KY84 zl)al%4&#S0l10w8Tp>?LqSz`jbYo&OXPCtYZW8AyMPHsAPEtzJ-vkX}7ytvVaM4k+E!agMlX zvT3i+x))Cd2&zp$N?q3`E%O92+KROXsqXTGoQ9w}dxJHF2gx+-+c+#YoEMgSK7j)t zaf|YRYFcI6S{<;zOnS-CGvfN@^h>a`ij~QvInhM&P9NtM`q0l#!T4(+kf zvG0}A2-w@;QWsm-8oVb-IXHM`t@Z&)<}yB(>}cDCPMlYirmxEFJss=439${4Zahm> zkY_R7$Ep)QRF{yZQ#U@l+jx6oE}a$OAbYt{r12~LBD*eP1h>YcK+`s7T;}=v$RpN; z(M*%MH!WU6ba?M>Q}>-pQ5-A;Y*S(7yH4M-3^2}ag-)83%Ggk2B}4WIeG0>9GODtT zLcri-B%o5sP0fdhBzmoz4wcN1K&?a`jP0aJQ-+)VDt*NB)0%-@6*h$6)zk8AHiz$> zQ(^&mvHP3woIS!MB#74v4rokMSTpSyOrS#i)Y1eSWDCa!Z2IcjOToKT>$^XoW z<~x{rfD7%^2bMoJoK&jn64KpVkb><_3&R)WqCbk7HjMd>XwX(0^{%1qRkfhWRM*2$ z;p*#Zg}Ogpy4}wE4##P|Xy6bU<4o-8@4@5&JVwl)xql_>poPJ;;vUk@hdM^k^CJiH zu(qu@!H0XZusea(vA{x`q#Rc1%ZYKp`8L z&JZvkjn{gx{Xj+~aj#$I!JHkQ+rP;@jysME~_7|3ZtJFlHC8rt6H4c2eTkG^(4J>q*#K? z2vDl*IWUZpT^0m!*2e_aE&h8gCb|)*fAyBH&KSPb>pJq&n0|a?oPgjLz5pS6@x(@y z6A6H-rwE@U&AH{k{gx$^CFN>h4UE%Q-Dt1g_j8tbk?8t^GvRrTBAzGdr*4rq@g}`= zE^MBBg+9ar(la!G`h1Un^z^&(>&uVlY$;C4!W|jFG6aqv1T3Y&PFCM%XbC`3bYv&x zRKl`*HCfFwwNXe+JOw|TzB0Su*)J?vasM7s3Ibm);(!+j3KDD;WITJk(&VV7lcf43 zcmy|-q+IBL5z&p?M||F6Tc*q%HSPI{tla*shCi!AoJXO-yPvdo6wcGwg~l{L>*ZSe zOWL)JUz?e2j2}Tn2*T}hMA@zGl>e;&75%k}y;ExIaK)jviOn(vQK~6owLf^^2(vjM>D@$daj~p`D?^u`ePh0K|hMCdLc-?Tw}Yl+rI^B^(yA1y3E3x8Bw+ zO=Zj$RQ)gdKgM#9)M)6dU{Cas*-*qYsd?eh5-Qt3X$y?l3#S<;WZMXKu!i6#zFhkn zXL&@V>d9cq<#a8xLFy_&iO;+dBK6JJJ3i;it-t z-7X<~G=I&5IBsyOn&1|V`-qt{9HKb}{CM{AJD@?b;#!_!6{{O~eAw|83HpWrHe53w zS^e114_p3g`{(l|w8`pT$Dx20xL1&eRcTS9@Qr z(M^EtB@pW?Xz}=OxBq?!@+;h9Wv}x^YikTX6z9j$;bsSIH@qDQNe+iZ+!}{{XdR>p zllx8??4fiu?0y5tmxcNZuY$l3%*uFg6Z0QvhlX7@wT zY9>{`R&t{2ZuBokyVuO>FwR$X-5+F;fuQRmQNf?ExjnTYz06k&8 zOHoo1uc2se#|r;=(KY#GBDKd&CC%)YP8t#>1pf}CIwvI$N@+m%{bL+Oo_}vZcM`w-A&Q%+p7zs60U{}3u3%-A;xu$ zhHBq z+C*?r8*gEfnu<1fTMPmgayjEAt9%5pdwar=r({#xyNhj;JN{HWbDu;%AI44c*bB@x z=z{B_iDX*EF^nTbFa_u`a?i}tejso-lrRjk;vG|ZKAEK!i}TptOl-%e3XMYD_sdIqaRJMAB>0rs4MMsdhP z3OBQr4pju|C@e`a>}i+Ydygc#WdL0W@fp^1)5g#|_d7P7|b53}g|X``X8#m=&s=7z1^Zw5Pp@=sg5a zfG^o@N)3OgCka4fgv1LWty0;xKBnzi*fz1)$~Hn?pnRvD`=U+Zli#3rM*1-*4U!l} zbDY{~HBs{7u~TZ*Ju?e_&Uf!or!4C7*+l&$_20HS0hSX#y@qCwscB~`d~F^vkrWE; zooo3yGuSTAx)p!HE|P+de=pcw{}WQUn1aoa^%lc|=Bk}!v&Rfjf9Fw+=EBIT>a*$O zqXMd*kj%KpJtY@TxwF%V-(~hDqw^=x7O2O*2v$*b?yxKMWpAYyJ>(&xVI5NOk7zk7 z@8qsc2o1G85}*DU+ZTVtNQ~>kl%IXsu_4}1GR;_~S}xs>XCS9%ZY#*&!M9Ek#mSK@ z)x8IXvj-iSK8BIa_LDtzpiEZu?;Vk;H_o?Lx&%4AZ!sq5m?`WND1k@$Yg+0Pd1?3x zl}6Z~AK<+j&~K+GqX?<|lp!I)$PRiVccCa{Z1HQ(>Ue?xyT4Ox<`1r}Hg<<{ec@7c z6TMD~v)VE94&|@pv(JrCfbwy)%Tpmlh}};OWbSx&tbT-5%6##<=nI7B&&q0PMsg=Y z*}&emKH8W+%8$RZjzqLOdw&>+0dCxqZ!LlxS{&8ww9K~!wLvOIy9}WZm!DBs`+{G4 z(-7yF6OZi>vhI%Jid-;YK;DPecOC;CT4+pH_kDnOAAen@UD*?-!T0gQa2~?uSTHaA zN_BNR&)5lch`i7blVgv(+MPI>4{g7=fcL-Cl0V8>K>_!cFog;1TuJl*-gyaXAj%y&iY2NO=#x(tgG zY?{UFdn%DA1rceu%>`CMV~&y~i_DC9o@2B`)1c$gYW`ZRI(s1lWkdmugvtcmt2t>2 zHmJCW)MKogRr-xfKG~(6AXzK0#3RL*D#R44LnjB}_i*GQuGY<}k=P4}!NC!YWwV=L zvpcsOdaqupx8D25Sd+^8{1K6p#v6WC`DIILENTPoNoRm6S4{n zb-Od>!&*^aUSglq!!Ws#y7RnYEJ9Sd=CQ1kN_KdIAzO};sfk)b@~!*;v7}TlRR#kl zlvR?Ss0yP}&O^8Ff=D%AXjTnkE<$wBL_R z8%9HCT#*+U5dY;b%gbj&Ip^!HVQ9CJ?vBugiq88b6!QAOSfoQ$#XE`pMo__ezi5HW z8a3mMtoWwTOS=$xAjpknL3|0#D*50x3H%hEw$w50*6MYlx{=a5 z#!eloMyT#3oN@YM1fMI&aXUGBJTPQK4jtup9pmC1&k-qA&U3l#?5DWL!LoR$Zp>ur zT5&-sW&3v0!h{Cduz5n+@;KQJdwlv zSU}A1SYRR#*zLj@(136za`Vn*Kz4Ya@=H3+H_r?a?nf*Mnd5%*)w%CqHZf21#pf2B zbH~vlVb`Y6W9;}C$>YvVqPQon6$WUJp<&;7FTkgg%hS|&$zt$PY+A+nt?6$%&#R*Z zhz|i+L^YVK=1K0z`HLZ-k+;w0HX%l+=L}6{DDF(&6#?c;xN8OLVQ1xZTcUXc2y=NUrPdr z4!xOU&&ZN%NgCf+Y6j^#c67|jadlRsFb`660O{NOo9|HX4%(25Dx@fj* zG`9WOXC~wu8h81>P0wL8IICyq4n==gy^n{|9u>3-k)l8vQ1fErmJbGteSQ-7^tL&< z9Z2`1g2Q3|s%t@=d8-=q>64)BZ{Y2|df?fA>+=&DeT`}T&m55Q<1{BxApSQ%Tn6{3 zg)NRp9x>k^B6FamIck9)vDr3W9sz0x=j9&aJHXd z4|J|9_;DKKzMFpBj$Mb0cUX3xd`Wbfzq^<1Uh2&x!I>60`JKj=ERCM+9^ z84uKF2N5)Yr%Lt|)96cb?0`fY(;*lcuwQvh86sdbU(L@PMIN}G=te>8!0Ss5kn)}^i-hf%-g*|=8pd78xomJ$;P_u z`D|6{RX)|^kR%Lh)E#e9amW>PTIarJ<5XE5j9^{wjf2tM}<& zd9qD~^u6xGO|y%qjFoCYWfT%?JfEMQzC28RTWKt#04WML_jU!*i9+nrqHk1XJgZ0xRxq_?E`3ju`Lypfoko4J5HI)exBx}=bQtX@6VThU07q~Jqc1&ms8g-D_vmuSI1tho-+ ziGK{lP6GLjA<0*pkS`5@0l#uUezQ;!l>D=L+nf2hZXhL0(EqMk*y4-!2bVO#S2ImE z*BRzhz)uCBkRaEhHmBS9(Bq*^^w6febp||A6?iiTS=j&*lS8p~K=;V9 zt!E2MCrfmlzu{>D5^m&f?JrJXzunVznV0vIx|Px};iDFaOG2Ij3P_*O-fmjv7EwqBr=B$!awF%S5~Z{>gB4@%_ywtoP| zKC2lI++xk91KiRTOBDEzKU1A7SmHMa=z2}M6D&^X@3q{hDWD_GN@z;_F#c3vFIr4w zPm@gv!k}+JDe(zCcE)hfu@TeN%^Rr+@g$tV9S`jz`g%%q8_(*_#6SLrhM}j4hkPfk z#ZAS(=qe*tY}v1(Yx?rpbw;jJ5SVnw>g?umUtm0k0hX>ZL_}NnSXo1-4RPT8vg7Iz z>1Udp%R%$i>h8f*HIM)80yM%-PR#@4rGvwIa}(O|mOmeV-rd&wWrWpZ)ClCQ<1eq}^ckJY#>JC(hx}B5-K~m#k15%7!2j6CPWlUo;oO%ltS#{g0Q-Z| zp%m~|meCNDcwHSH`qlyt*iuP0P^$Uk*rnYAnun_h(lU`}%8$UoR2`OfwVjeWlb zzrX+i@@V(NSriwX#jQ)-)yU&_e`r5keQ;Sm_{v!}%%NmABViwaydN*^r(sdRI1TE% zxA;#2Cog$&FhlMA!hdJmFb<4`aOjDZTTe$@z2H|epbAa%+;b@^uc@Vk4QsSV@Iy?! zEI^(U+{xAXvTv871Lx?)Z@YI&9Klr4Ima4*Tt`Rg3U z1??#eZuxlzJ+<+OIHGCH5iDxOD@}{PghBtcUub**MNCSb!g6HVvq_j;zNFpQYaQ;W z_ct})Y|KwA04~75oAIWsJ>ca%_z(rMMw*9R0Zz~z`yMV`poOjl50(xzWItHt{IKj| zf8nUB!u{S#^AL1zyMML#FHO*8Elr^G1HCRZ@&SVe!26m7OKrRGS1tP5)rVI9hpu{E zDSV*z3Y;W|8gRHLOf1)QwR4W19wEq`{kE=9=r|*|l$`3|j>>151Z|OlX_t_S`50sV znhc$CfCP1o;)&jXeqmLd#&JTG=u|tR@7z9;!vSJsC_v<%%s5$CFDja^cSoF5=q0;# z>=$>CMt?ws$nlOYt~LqG=W6OlQqs9Pr1 zGMlDwIn_q#g_Q4U)TvFxmMg|%Z`dkwRm4zIF!ivrJ&9fe44Go7&X2R90#zq7}e=bGmSlfnzrpM2q#1y>}} zVUYLre9}*L5@1+vQcGVMdrhjNFFG!h$d0E^UH@c3mWJ^;hY_FT^M44hj`jDrJA3S# zl>takBFFqa(qnKI7Q{~`#e%`rirhq$MVQ#cYalL_YwFb=M)W{-RtzYEgabNqN$*+q(m$e%y^pL=A32F0@&Fhqkj&&D3BALCU8QqyC-tHVlbb}dwVCiQhSTY2A-<+0k*9}WGOKSP+hfFT7wQGpQiV|8& z{>6(S9J{{(YGX}Ha;Z%)E@b@@r4Zqz;sVZu8ALvj%&+p z9ncr~RbkhWjEui&U_JzeiB7!CC$if@u)3IH@sI@`OOYhg!?{m0O~pR8%YLM~;FX2= zmiS5VO!Pa=Zz;_TmXz{}?!9Bz{isj&hZ#qJPJD~hbBab9FPTi3{(Yidvb|kbn$*s) zd|BO^T^|e9#)8UU&YS{i;&ZwTypktV_;WH9@8$ePi5k13K=NXS|JP zLLFo1*b5rm3-!a67w@1Lt120kyw3H1iPKGVnES)i1?C4Z!KCEOqKu*k`9;&)lrSU* zb~2oJ>~3&kqMw1#wY*)Em*4f}iG)$-0lv9@8$J>>e8is`9zC3Sxw%Wn>%27Et8z@K zEMwDw=pD`j3(GbHR{Yk?3a@F*8bvMXxoKlA1{4Wp25z>z;`2lkGG5vTq@V-eKq0p$ zK4c+^40BMxYn=DCg=`@q?D9yn&)za`gT*TAAMa^e(eQy+j`(%JW^~;Y75Lz%84Y1d zmxN3)EAC39sT)rl+vl^TivrA^QHZ^z$WQ#ne-p&@z6w}uR_s#xwq5&Z&XzjJMSC{> zDah_hi6pF7XGdzALPxSAWH0lfs(NBW+>mTo^w@ zEOqG1?@(23{pU6^SF`;4kHKA%y?j4Qvw3kV8C~66dm50uSFH_)lBAsv2eI==u0W(j zx>8xTzchmwhq>50pvZo-L?dWPl*4o~-(FZnl0fM*R{@^))48{%xVu%rU?dl{Jw?rUD15# zjB8&w2$*9*`I|OZ-n&6)I|p7YEbUuaxA+wmoeXsp-x-4}T>rX0-pZjm1YO>VUKO=R zT+@UtyXFc;%*lVaa; z6qx@IcD`T>c6f20F%7(}$Kh<&{og2m zc@fwQ<1upZ`;LF+kpE#k31(0AT=pPD=pl<29imq=zyARo+q2Cwhc8Qn;ihl2|8<7J z`xJo;Wfii3S*<%z>XQ$P5j`SNy3wOioHJ^_(WUI5=%$)a`#!LgR*vqL=CuJ%_-vZV75QU%LSr`J@Rp#w?4iqi#K?j8y_;$m+2cBd;9`b|#q#wo#viq?+c3f; zt~8T9zQ8x6&zFI#msgMYjtR|4lpv93_3$saAISKbUQK>G9A2~?joK9}IE{L>DXSs4 zRW?yW=uxe`Ae26`$zexkD^sK#CrrF+)n93W2c1&oWU+KBX5yU>(;NC#AhO|ssZ0k# zH#^A{?=OGt$#*+^ zrvQt69(?RYO!7yjtx|r)?9AoNIkD|g`sq$io<}e8wufguSh{_# z5LZ2QhKkcGglvDL^<{nQs~C$k>1vm&=N>NNB|}7J9AQ>9pDFKm{gv{wNU`Ti6DHvi z$&uS;{Y}SEdG7a=<(1Hew4`Y23c$(3&4bF#xp-2piX+7`WD<{FAB_rVQ?@-D-6*1) zDvpC24@9M8$P%p*OvaWX<_ErGY>JmdrP82aV^2>#r!lx3kuVN_nRr8|t;_c+B3n-G zI<>^rKKw2CYf%iUL~y4i`)vj}W`9Z87u`*%8gidZ8`Uzs`PJxNy+<%zQPI`J!Gd5h zzOtR9;#(6+1ewa824WS4Vs)aAt&J;0b}mzxJ*_-tnxTa?;BJWMf50+K%f;%(zeVc9 zn6Ycu90zHJY3z&79)%e0z^zV?y{Hs?Jtk=>XfxSbDj#x%q3BR}Q~js+e^K~sT7OnL zDrBC&J)yNX#T5IT>JD3P!~ZSWEw`AQEQLXvEG5p{s`ZAS$WoIa1te4K8M&H|8>@UK z3m9|^BCiZ?V-;ajK&uX4ooL4A*?$VTPRjvZj)qxVeT!gg7TLt_??$8L*Y;`0hMmtrN<@1C6M-|4axaK0CG>ZQGm8LyU6mNWgFN5>SrBs(L1G z58Cg4qb@;*|IjdnG#OITK0VqZDp>c;B>EDyEn@dSnI7b?eqhSeE_Sb>!oSQ8LM0GX zmU&A5ZJ#`a8u7{m8wlWw*y10De`dLq9B;<{o#k5i{$z9Irq%>~TBh+|IRxIa4lnXe zJ`UX=aMo&%@IE-=Yp);fU43zGymQ^&-y;9f-326S|Hj9*-XipvtYpuSrpe((gqw5T)Lqp{u)+VuEL*CKQGiYv0TFQg|dQGH}DItJQfgJj8CA~h<+sL zSag~&lmBUKbRo>z=9a3e+C$4xdD~U8N%qa_8jul>s4DedVB#)>JZ|AK+>_jaxE23C z$25kAsx4}qft?0qM3hUIlRf-1DM6o z!tn!Bjw*F^AB!2kkjR{6d*Zw-noS-{Izz-xmvX|L#`|?4PH>-oZmaGgOtD5v#q<|> zwVdAv0({Hx+K&@uiX6z>k`QV4GUPw#>3%Po02b=Jr?P~x0qrj&wIO+6{#GaL<#Nii zMEySyE&#ET>QVR%)i1nr$V^`GL`qXY^)lF^EBf5;P9ma<8IBmi&u<~!s2c>1Bv_yY^Yx_8@0 zj*IT*<)1extbZFRjB<80>nW^Jy<7R3c*?Z6NLBu~YGlnJ(@(Ax<`Fo$hZrj~7I=V# z)X8&xJAHaw<@ePWtdp?qow_257~Q(rG=jqi zlY-?x*4T7B%^%So{59rjkCb&MWVja-TdSQk8eS-BT#-LMoLuj(qJvJxAvJ|OiCM5h z7cPx~XBxsc_f7xXLcO(NPdybogO0S=AXtHiNp&{?ave{d`|!t3p`mbQ8#!(~vef`1 z;WXI{vrKd~5GDO0%aVaXAmX#ggWX4cUS9rj-QDRcVfbTR7xjTquVk-m6n3{H#_aZX zHQ&=R;o7Ru^LH%{dFSvYxy?m&_a@AbUfZk5Mj2CHY`FYg^aI&~wP zYupl2^Qf^w21?MiH`exGfboIE5gSOt2&4Jucvbq)s=B?{FVnCK3MrjBHKi z-*Oe9&M%9^X@!llFzG248N;W_i|2y-_!p2=`NkKMcYr z=>JS>rJZ$@UBXe7YE?&xsDXQM&XrDGL zBy8@oJO^&VS)SpS8-afH!>iB?v2Dx*b`>Z#<%vkO+dz|v-CkhP)oJ~?VoVPsUxVO0 zEeB@ybjJQ}Ia3?Pd{a-8$?EO3gs%M<^`2Zt{5J7HHW5L5rp8EkTsI_UAhu98mKc@& zMH9+9I^(Hksp?pG;jT=?~D)AYZ4YNBf?EI^t8W+IQcyo@Ue zIjXK5Ir}1sJQ=&0!nDH5CP`-?3EB=|K+K~qMiy|k)6eSp4p&E{+GUMAOP@gAk|6ah z&%te@nSgq3bQZP%dAj1=b7<46soOL^JUaPSG_LU)L`q;&NjcShU?$W z@AN_*>48{>ZGy_5H)0)nQO#sR61ANP@h&TdgGSKXRbL4$+a;N$8`kr-Cg;gB8qwN* ziRWj7yilWNpV3aS%~5X`Cz`tqo0@A7T;d#VAiR1x`{lON#bvcFw7Kl93t@0KP0->I zor~}{_(fjJWAN#5#XNb%$Ifde^BQgs$NH zpd93xX7T=`+Y^PwSC*GV$x4PfO8ps?l%O7Pz**~G-4>6_Kt5_l-_LMx1RrR7OMZv9w!a#PfOa1&Xu*+H zatZ=o*hK{s2)*F5U8UG9*FMAl5$t7l6bE4}^Js5$6-#1tkBW8#6>!)wGNa7InT?dH zCLfUp>oWihn8D>gt`#riLh+R8Qc1*2Aa+uji8R8UuZ>MO$`+)&%#a!gUV82FM;TyA zVY6MnmLtXejbYQtGe1IXLoiF0DmxR~&<6`#ThB4DY^7Q`wj2C|J28o71`WD5SZmyq z-CSJ!ZG)&ujr=J4bw|THP1C+|zarMX$>+Y(kKxRc-L&Ke3p&W#zAkFKhQ!O~!}F+V z7a0Pn9^palqQ0Flaad9SZ0V|~@1f`jhH#j+XZ}tYdKk-tZqtglPSCOui={M+U;dQP z`Ue|mV|^TZB=L`RCuYoMjgAyHQ(~jLmE!ARG04Rj?i5j6WC}_Hd7F0fY&_1`C zw!N&aGmW@Km{XF}(v`u#Q-4!0iuhMueN1zj9callIG}z$PutqC3Blg+*m&TErx;Tf zP6dy5g%(zZF%{WuP>Z}}kBcz0Q4HpP0r6qRkg9ss2ohk|FA^*wwR%HUh0ZvkP59fo z*i2R_Rw>^_on848aKPQFkv7ecQWI5}X80gHADbfAaB?98<3)6CB7O3!P{|jn8d9Av z`y69icv&+9wDDg=#KuE=p;pTirbpMik-R*D{8(TsNDO8q79|j@{M(wp(-e3hH7tcK z%oCnD&4Ir+hqGl~ygnwNPPCG?9h|8=KcOw%NHGY=&?)z~s3&O{ zc&VowzyZ*-!og&;UQ(a1auuht(gO7NpU|XuwFEsFRoRj4q&u$W`v(~P+B#PtbjL=ri|D&xM zTk_MUg<4BUNdJ$vDlZeZV!_vBSb91P)BC<=@)XeYcf%zd{f&KUGd;fZ?ND$ttHL;&?@pJgU zTj*&h+zsKag2ps2{Ohe+ef-B;1#k7C9Ou$D62@R*2Gh%`g(V(fHQ*V#EX?lU%b|KQ z6*@ZA%;R#txub=zpCwf9r=zlCn_!BFP{t8)5%bL(F4{94jlHFB%@cy(aJaqsfhNCF z?mtD{_I`2iHPZ^EOhFl>LHQFdr05}7+*+=k6ip=Q@-UWvsu;~Jgqaze|7Z@SA4lSl z>IY3ywZs;-9FjGwMakETTIGEpz>QwIPRanc9m8Fmr$3yLf(Z}-Na3lh%j1YgM#i6L zqaKQcWTd&<A>)eTFM6N2W0`nV&yIzQ__4~y9->0&Vm^gX=?FI0EW!3X2 zJ%&rK$W7KLQe#|RH8Uvr+M;3Vlg1jJ38q#|-y9DH7iyd|9`+H%K{T!0SO$?{R*^uTLhq7OM=oWq9IX0h}Q|Ed3 ztaAYh#m;@|!(cacvmTAkna9YCVFeHgL%V z=NCZs(RX{{cJajcZH*%p)%C`=AGs2l&8r@p-(@tWaSH?9{`lA)qmm86m)4$RDDqUT zQh$S{vYiNd4iBZaGsXr>kL;TGFScSyI^#*^x~SvFp1R%v2Xovse5vP($#MPje&lzi2#LG|%{fR@`vV;F zjbtK|=DUAm^q5}7Y3gEym*P)vvj4DC$=jqmZl^7osK@yJJa3tqf+vi6*#~K1wPNw#&@i z3#*DdZYvy>%?e)+wneT&bP)K&v_lh8{(#C?P`(;um(jiv(qfPPz}p-dmc2_xpH)A_N+VY~B1D;PWkyLT*&tIM3xXyF~K=l^PAOQlm`>6B)pVjEYUO|sHp#4wKMQxaKc3dW6miH2c;$0(H?#n|Hhh~Dp*h%#o- zlJWj0t8Z5}!_X{JO}d@Wsoko)D%wpWe<$W9l=_SYeq;RWL4(9E!6jhZ%Vqfdn>Y;u z9O(40{N`V9VATSHQ8P?9P>wbsVg|VJ=8|G`B-kCC>8P@ z8wtV3tCRkHh@)ungNFNuNm>Ls(AOgwW{mW(|KZdV?JxenvMT7`=|Mi0?gU_ujq2=| zgOwI9-@DbzzwHO>dEB@ErcC?bfyR#s2{hKHv6EH!0iy>in%hN-5%9-9TsBL~RQ{Y0 z()}Jo%Jh4=OSyB@J=)x3ZGBmN4CS}NmB81Dd*L2_U_YM?mDtl`W$k@4x*$)P`H6Cl zusAzKNEXkyZTJuNVbbJ>Q@sgfnS%!KrZOlhM4?Q7!>K*rfjPy%x0J&huTNC!!M{{A z)JCQstGlICJ4pls(Kd^_{Lx%X=#GvSJua>RE~lEgr6vJNSB2qDtdENFjVFylh{^0L z<{C_oB<&d%V_c=JWaMmq=KPKT8FyS*vXrPHS?$+YkV zD>8d#46f6uW)Q=H6dmp2d`|vFITN-{FPYI?@F;B@qA09Q zd(}UL1@&QLC!Gvng>Fb6k;r0IHlxe^tbI)1)YmfKHVm4cn2J%0u2I&H(dN+aoI#C9 zR7cF57Gq-?+yZS#6KwVR=y^H&c)BRjhU9-@Xj4HOtJObE?(%nc$10Z z8Pf7#?1u7+NHJ)QjHOKTyp+VpzeQse!wO%oW`4_OPY{6vF;%WzUMU@znh^OR$d?CNAZ6gRd7~tE6ZS> z=|$1e`L~yWALpNwxL5f|YX%qAd^^Mx;9_leeD}ZW)^3s?#T){mL+g3x(=fkh<1fz| zZFiIIe*a{k5NRm!#{`(+n>@RemYrJ{BH&-0v37PfF%#Q#{A1}UEKVK)3o*||!!x02 zwI1&s#T9{^b?J$ZPEVy%rI|@2UqD4V_SBFtVMeT^Rm@cpw)<Mb1!~iT;p@EMgPHO z4EV-TL{%K-%!0y`webhxaaGIYp%~@gQfX;>4|=3dWy7M--=$~_Nt6DJUyXm1RDr!3 zXBnz}oK+sLxF)bE%y*O|nyQPlidQG89G%0r8dsGU4a}UCE$48)HnbIHjQ`LhVDSwf zA0WC;S+jJGp+Hw3<|6$vmx+9ls&pZ2(QuGDi*PP35v7kJVIi9?3-hHi0C*B=A39I% zgxb1+--pHo_!UiwC?RwK6BEh#TO}u=$3jH<8h()b;qyfjLB3lOvMzkZlUJ`~KgoT| zQhFzO6{Q3&&UAoEOY#GYwu}#+dTK%xB+>h%{1PnzTAMsudsA<*v`wvO;)?D!V|)^|PY6i$zb``|INax4V)d(Eo1Txqi`z+3?#eP+!jdWtg_Bs7 z?T7d~+$7wpHr}N!<=?u4e(OfEjgsyB<#IrXJX6@jXB09AM?AThC^=~Xb6_bCFMw+= z&GX&aFaS5qa%}VJ&|8Z+Q^O(kTG`}Hltq8%IT+1H&gxwjbx7eordx|B{| zW9^lBfAocKOMY#BZ*Y9n`lAEIlV@;fp6Up;_Iri`S22$?q{kNjD0t_n$0Gx~y(Uie zqb;u)TOD<$t8gw`S=`ICDav}qnm!GbT*<92-P~gjv()ZwkjXAYR@k%1C5`U#lo}_* z{M#~x5^gu<(E;XHFZ3mp> zFo}|-m4gw!NNfge5h?~DS*BgcXRyB6rEMf0ubgm_tGQ08^uuD5k;)xh@< z(o!r=T{J8qv`LLH*l>OEi4~Pkz6Xi2pJP+KB10}B*NvW6N_C+p zgTMRyeU@eDTKx)2EHv$^y}Q31=gv4ew>@}dweqq3^RSJjuNth$ z@0rH`uT@-p&QE?Y0lY}LA+J>(Zp=3=V{|cyZ zZeXzmf8S3+6}seiejly<_l@Wa8G_eR@$d8#+g{#}Rn$uP2@z5o`(O)ivl;0hd?jBf z0{q__nLTMx>`6J-=#+i@jc8nN&?;l##KZ~R$R$RlBtD9Bet{po7LZdOz$_5_YUl%< ztkvPd?CM)!bTkoxc37=|9N#upB@w>rqJSI~nnH1g!mAWZv(!Gp*8`&ZpT|shL<2&d z&USW&HfXuSgf*K61StF8M7??uR-!HUgwBZ&s}O%qRRA;45UKPDX=U-+Ti__h_V8jF zGt#9G2$5~i2tT=RKGI6)FU!J)uokjGhaU^JWreu%bEj1Sz>UNjPR*Z%dvO)ymr-Gf znU_f#)N464A_^~(f^xYQj7Vmbk0eO`o`Ops{B2R zoFyAbOZQcj)EJoErw1m+XEx33FUR~sq#@ZsGc2_|sbR68lw^}v$L|haMSYrrGN9WW zE|_)Td)5}DbMX)KNqZtxW95qUAdU=xL&darMRn-5I6 zcbrz`l-dYx=ZkcZVv44Fubxc-Hvepw4AG+Bm%Bx{m%6^D^)B9~R(Uh8V*? zEIU@6IH|m;RZBqPYl_Pb+Ol!-wT8G;9BDcr_u19js}s z_(C7^gV~j&OYSOhL!WyN#rz#}n$}lYPveIH7YUJU?jbNpxnfx^MeYl#k&`V>AK*Jn zVb$iZ8jRKaYt_oMl~|$Fsj%rFr6%9qhq9Bc24iAT|VJ}`DFJ$?9>Q3`0RK- zrS;}O1}VfSNpbd8%j-hf+}+4I>T%8G#3#m*-B3QM6=zZ4+jHdf68ZudnQAR5LrqCe zIi9r1B_@VoY1a$5%SI(TnWa-aOFWf&0?Ty#XZX>3ot22i$ zI{lM3f-XzFy|Kk2w=uWCxg1k2u!uN=k%&e8yT_vip8at%-hid!s`~3vVWb{+NCssu zM>zZ_j1EG*NoTj6fGD~{eqL`d*7!jjtKY6oUO&g zfj?qTtokivL2Ib#^8Yt$Nks53*Z=QpNfI4<2M-);&s&1VfqsKRd|9*5u5mlDDN*T( z+bDht>Ok>V-aGZLMNkog$Hv}OAqHlL^3oF!3J+wMYO1ViG!xq{s$5A^+A97*gi9RH z_dXB%32J(4P>BFnXYP-`%CjK}QJ#@bK_oAAO6}+^^(`!p$>uL!;HGVvg&44Da~auu z4UI1X^L~3Z;c|ONHJBdGEe7O{)*v~K&&BU$t@;s18%gBz zX5I;}R@%Kd9)r~}tw2&xSBqkE4Bk**9v}}_NM+CLA&N?* zudYU~aKRh)c99Kd9k8`&ea-l?p4`@)E^SHhu$vA;k!PZW&+M`OT~@1< zdTJGn#Wk@@RYg|oq>Q|RQAi|ZYh2+@M;%z&G~#0vEx?*i(&XT#@RA3wFRk~gCpo?z zCw;y}yNFW1<706%ht)Eqou{ASPwFcDFd2_ceVVu~)ECdG4td2iKZ8_aR? z{zC0B@bUWJMAKR{{5*l%kKgFb_QXMrqmL#zT&xbi)Bhnn5Dp968f;oS>qx4OY|b~u z8c(G}eatz)4u}q=btvHupYm?}_Z7sty8ouM3`Mov>z+BCV&>ru=+C3L%;b|KPboJ}~N&C#M#`*_b1fF!_1U=Md9+8Rv&G&Fe1j-7ls&ax;$zU51d@N zFZ#R$`)h{4TO(2cP8*ZN8aIE-pi*#?9|5O#jbg=Sf#|C%7haPmo$?)z{|)j!XA&m} zIxvFSMMt8Y82 z9wqZtyQ%||+V$2nZ*XS{z17C;&B?;p4bMYO7x7*;t*VJv4L@RYjsNy(*1DVCg9O4C zQ&6Olr4jL?v8PfxISQZQ_PVg=B*|GFoeS(XgUnuRN8d{S7BZ{X(eYB*BABW6uSnSA6VT71& zeW(K8!$Nsg$D|I57=BF~b_<$E2rDyszUz|x{TSOnQ9lOpLK!HYFbheyrM6?FaD)A{xT-BfYmKecp&zAsQ=A!ixhD!=B~Oh&;G|9ubLBm zuMqS?W&#vU70dTiKc;*Ojq%PYT3*%+M0R;hx`-lFQ#=2vrtG_YJ?OnppH9%BP20D8 z#ac~}p_^~8yxBUV^?SU`#V=`F#vCU!PpduEM!wL#Zx4`oqoZe51aD8=dH6gE;hK7N z>(vc!e+cBRnCEPPoivF(udiO7WMcahw~5{TY^h8cA=)HbEmK6R?Xp30^ZnC3&}I5MbJ+5G1bQm&Q1D@>5(FGfg8~zs2 zXH0K<0P`Qr9(~Oo4TnB%lamp&x@M%kwJ}~$h0g~gS8cUQYiuf6XNg#7ju@34M!-jL zndJyoqkFP~tL4u!NvU3oFspJ>{Xqe;5M#Xt7&d?R_lO|Kx^Ivyoa*V4FY?Ym?6V@@ zv%L+9Vqg^^&VaZLh$U?)&&Ge2#v3V5Itjt&L8d@ZoN~w@@2tN1iXm4kDhBU%lF_t+ zs~EZ~+NauiinpfiPOiiuq>|mpmq!mK^0K7rW=d(T9hwWELH?xAWcxiI4cPYNqCj9w zd;D1B2y^==N?SSr_A9V}>F?789Fap+^%`eWd@8amJx5ojIb7^ylTTa~Ko+YzJM+V- zUekj#Wro_MO}e)XFLJ#hjyjU`p^|@cs6j`z^}Dih>r?mZAwBQUb?!^+PQb zCC$jxlOv-=PwEdUF``CfV->i)c2hszp?BTB6S#KS4^`{SvkUy$^b8A0HF96+DTR8w zahv*u2_}TJK}}%0yRdqs6EnxoK>%9+ghz$#k=p+KlMf5J*VWld==?NT9Y&4)V}p{_$mUg|NAB7}aTMZ|V@OS%0Gdsu zn5HP4+l(b>Cp356oIZG^PLzzMSv}TXca_<~ZYN2bb_4$b%bWhJvyi#pbhFCxM_*V^ z1O0706CjF?HC0^_3%T|sqtfS+&s#?{f1El4o{CHeI|)vO+h`h>Hy7O#9UCkel;o0` zzyOpm$)F+aq?j0O0>MboM_&n5or8JnD&f7QhZWf>K8!6=*x$POd+Yo8Oo#72y&AUx zxI5uG9%-Orsjzb5LY=roZBcDse>5qIfWuxTv0Dqao?$>-bGR&9K6O5IvAR?&F-6WL3-KrehO|1gked4Wjf7MpJ>j${FYMmI(m+;OjhN5r^f*C0npoLL^t1{UA#zG!$5Kg| z0!sAq0zB?=dKHG-iiG4-Ge=Q-L04tb;;4-WoRSly*PRjdg@8(|l=AR;zW??DjFU&} zNddK|qO|ytW1Hy1DueAe3yc$pSit$fVyT$lN=e0R$&dyPM(v>HRoV8%Ft5kStF*7} zXNuy|jO7n(<|GB0mGo7*`Sjt<)6#gf3dK{3Abvwh6x!pR#xi3kowxFRK8cD-CM>q{heinPNC!H#aEN3{6a=|08 z^^tOhM+z4o>9qq&;zz^JdAmEpM2VmIk09@WK}_c=>DRlp>&d^z`rm^HjQm|$Ue44? z9Qd2XxF}z2ItFKzMTs}72s06;II2)7DntuJ+K8WZ4$Ct!r3kRxB*zhxQPolz9kjh$ zfF39a!geBJFtvMMo-nF41@G*Zu%i@Hc~yurT0pMMJ^;u3!S%u_O%*Ezs@$GONzWyy z?4&}^UXQ1@fhQM%U7T{hgM-`arTG?`j9yJgtGMM~)narc!E`>Xa72tgC@01UDZ6F zsE~xcPYPrVkSPg@L_;=5!{Vh-DNGX}@+y%;>T4fVi;zKQ#34xql=2?Bp%MYTe*s(V zaVk^k#h$}?365-iL1)AOU;JV_EN)~)jhMXOGOu;_<%66j<=J$xlF_Pkqby&BuU!FB zNff1Ggq)<`a?;@xB)?*2VdmjC7}WpEP}NuNrNdjHm;v#hYexc8+A`wD$`zeCfPE|9 zO9JU2sM;aykNV&ktzt8rwM&336MqWEj3%BA!TKHYjD3*M6#&YnjpUsdf+Kosj2+Mt zB7{cIEk&8Cp-aNr8S$F~tV|WPbwlQ%%*+~z+*TYSbiSdZ#Ja%F$|T=h#9k5ERh^&4sP2YqmfS=rbyA2uNS!dRhT zX(7SB3R8hinol)R7nq+#&&3oqs_;MwsfqsehegE2 ztPgC8Zg}BXBcFm1(a4@Ii&{!u1CsJ_Ym^Rqor!lOII@dyor#7yizpdMvR_6WcO4U% za-3AL3P4iK+UvlQQb;=D7Mo8Y(+_TilA;>NmMUsogS_)1^X6pOE{Gy%lAB{0E4va% zfat|$VRBW$c{=Zr><3gL!u*=ovISsTp+zbnnuCJ^72&MnBOWhB#^Do9w25&wB3qU# zv!z>C{TSx}mF(2Q`$WeZR_d7nrxj}@`^jVso8h845IOP!VPsjR@QV=V@;>=F+rmz@i zsqCJw_1XLVDd0k1kOlySm#36@>P39vn-gcaov@B{GLl$DBv;9LxBL7(}j!wDf!qf}K{lm(FEZ_1j8NG&B&GiBfOfW+MDKZ=z6oci>`#V?C5SVMjx2Wjtp^(U?>{^Bm?dlEUH|s$ z9{Ea`-RuCZarMkWFKj7}@!y?DuLjB{mIbj%NukPZkjl!vA>= zCf`5nDI^zbmShBd=mWbM4zGw5ImITJS}u?(VqPZs&Vq5$6F_DqE0=5*Lem1t6nk+f)#v;;<{^q4ZmZrq^!97!LdAV5I=y55K_ z6I+%-%x_dp+A}{|b{+L-kyQZK+ut$MI5NdiL}=obB}l>5`N?Ps#Psp>j0&;*=qM!l zyLuXmO6n?fRb`ND$siy~HQIWZ8)MWau|nn22Vb_H=4f3?`g34dK+F^jkcKMDL|c^{ zS^o|t1j(%uAWs9p#Og&eqeQU^cW=QX;qWd<0FImiX%RyP#Nk1N<&q6w@!CFy_R*bb z5R5>~!-aI!jVatVi+(94_OZ3i$>)!p#p{vWo)sh$yO9_CvZo_p@IKopVe%e)c*V$@ zAA(d#Om{&d&HZ+tZLSE-ZYh9tM5cn8PS|+U_$G)SuVC}WS~SY0ELg>_d`_OS zEUE|KHizOD?yg5-j2)$esv#0BE_5h=-5&M24M7nOqLM#-SbOV5qbc4HF1&tAd`m3)o3C>&#))KH{6O(%ajqD`R) zMUqFMx55hQsupPMQWeGPcQ_hZ^f6jUG&6HDzHR8T!skTA;wZQ3Yyc)~pb7YfWWC8r z#6IGz5G^2?UNXjgU8V%PjWL*zkVcU;4VqLK%P5?uqb62goqmg?2$|9R36lgeR5k{s zvDuT&s~@m^QX65UdgnZA@n99k;F;a5V`*V&7|AHZ^(V)bYEYC)hV4$VMW!%8l#0aY zXCWk`F8p9F((=-Lmh(%m813EKydc{j_a9xvHjZw;9g{0m8ntO>to3rI4DxuL-i$9Z zf*E-mAzA`4UyIu;L2Jby88+%fpOXX!{(G!B?~K_JYPieiw}re)GjLB~UDh`I{QfH^ zf!%I~y`H)9DIUYXUA6&%!{s*kn5KXcEh>zs(02j z(D9?}oCzmCEqaOUalJAN1W=LHefTI_b7p5#-I#igIp$*Rpie5vK9Ad>lv!p*h0cZZ@O>zAIvQh?IR22%+M4wGznbYIaWm!Ann? z_FdJx70C42Y#LikEN3E}b4yhs_$?-0XRlj2u{#w}XC(`IagQ|GeXbIkkNZF5XtjkaYSLy{*(g6Lc4_H(tx&NP zUBV;d;@5AF9+yX}g0Izht9T!TQ>Z=hU23-$htvdVtn}u*4WL8juNMP|?yUTyW~-f@ zC%7xpx6x#?#K!L<`_dV=7R4>Hl+q1Kw^_!;l?GG#C{$^4lU0oUAtO+y$Ev7D#`EM0 z!3k@|k~tqshBTA1!P$P*|LmGaPs9J*uR(b3M)pDCmo2#8y-*2u{{jpS6Yf@p!lz?K6zE zsGzo%xr=3Wa#bzGQopX+abC_VA?#=R>uVS@b*WpO^lt5s73?re@#ty9ayu$h^(sY; zWCU6DydCZ*#oXh6>*|VcUOpf#0%r~B<^Mhxp!`8oWOk8OklCxSs1B7%Ec;P+Pp{Ow zcs6plj8&rG?>KXZoA1x0fEZ1hCIx&N~w8R3#LOGoujy_xdWjc?lQ!=7z zYzeeF3Is}UAF63WkHW-Rf9|K^?`_}>+puk>j}*<`4}Dl4LxdS84$ zv_<=NWT145DK}*{a$G1k)=uDl3LU1ps7+Hl1ez`W;l}LrNkoOMGJ&4F*dafUdj$M8 z&l9mfNF=liJ##mTSBPKSM*ipD+_`5BG5dbeDgW=W)KbENJv@V5|Gh$D^ey8!XX%7P zj~P2#(LjkSM9H(clu?8s^-u|EbZHUkAidWps1P7@1*A$5 zkLUMzycfD)vyU#v%kNf4Garaj~F!FEn zne!?0M`ld$^S>_rkzOWAc)A}AP9&3^7=|Ojs2k-1NiLh?%he~j-GHw}0tT#k+5PWn zC}fW^SFgXTd?WHS10gM)Ft52%YoJ-GQd{&i6JStz-@sCHJlRe~69B^?I-bzY>fuM6 zRSU3>2McssWnsR~t$pa&0!q(13p9~*>z^Ch#;nLjC>uUlngklX{v3k~)`?V0 z-B)T~XkC9*0EuNu?Ae+~0J zA;}(3K+iR0b!uYxzUjO(2f@UF_I+h$ArTy*k3L<-U^){>F9)FA)+&hNx$n;WMT))r=ljj5RG;Lf;`7D`#SmOcNZqNiLr9MGEiF(@ca8V zy!B}j+==&?&WgiUAmwzv-YEoMCz)n`tb+X&jJq@gouX8R!TfD#inwh86=iAJh&vW)3ZdsQzm;1O3oGY3oS&WarGy0^BD zj*Zuxm}SuZBxW0r#xAZzI2`oSI^bfoBvoY>u4wu5=>Q z#l)0i5+X75^$JRk88#g!UpQIVJKjPgb{5V=bNvF956%=n+8)Vl09X*A(S3JyKSMZy zHzI8*sR>C~UrN+L`=cO*=|V?}0>ar~lpA9g*yJw`KP8HwQHzZywzbt$k0U~%nzNNR z@vS>x&nJs{gRV6pu{r>m!rOId{%?7Ro{6x6x6xfdukoP|DqbpgkKv{Ck$YNeJn|P3 zp6C`git?y-`PTHOEmb*Acp{;oLsNxp?l+z%D@l;uH8q17CzR{G1-^OK?pZl_LXyF9 zLab3x7KbjA;xZS0U8g|qIP%zPj%&zQ=FnAPKDArd!=GmfpNU;O@390@d_rBL+%i$Y z)r5c6hQ?!;@y$kvmSnDU4a8l9kpQ_jS@$PX`GX^hv*p>>W)&*Lm-*a%ml>7N*mY)( z$ycY@fhaD5B5aNhjtY!T+(tAaKm`k0&ZP#Dmr@8a>6^`U=W%XUFF@+M&y=kH*fRa?i7xpq_VNAkK-okwt$+{`(7iAUXD|(n6b-i`Y#?0t3kae zAD7YyF&^FAX|Ve4Wp@dKWC{Udh)a4z)J|TCernqJ!sp0G8iYRzsR$$)tG$NF2VN}y z7I%wtV0GM1y{?&0pjy1al_ke4wP618qAUys5RBGH)>{oSI7*9JQ)9XU(J?4NgHgRn zD%y*s^wfr#NSxJ8AHitIgtq1aIGM}f{&6_++sVX$KIYuGaDU@ zo$#p)pe%VV+C0u=6>VCi{7M!o_?^ zZ}#wFzQ-8#6@+}wEV$${*&_Ek} zq)ub)izTw0l8>tHBd*z23T=omD=GJ*>9hD1duGPb;j`VydZhe~&b>71o{$VOgLNhX zJ_D8RvwYCeVw}_F)8r?+6}CuF#O$rFtRw$W4avn4gG zArhXi{)i6SGZml~Y15Y0u1fd{ev`bGK2e{c(How{MPU(G-62w`rb9C%kldxBUDX?{ zh9qM%oye@wF9y>FEMQ(uF1X_oI$E4Xv^^x9pJ>;EoL>k)e^}wZOj5!LblppsoU>WT zjSkM(*`YdTq@(`7%uK;sd%@O^>IF>PxJA76qDo2)Wb?)HR~96b8NA1iZ0WgistHN6x0f$V^xovi_NM)C5MS3Nr)PH zQf&39o+iJOYrI&H$T@I7(4%`f*iCfA%9pbb_$55max#`|`K7`(l26m=4)v_iQ0-MQ~)CCo2!q??BGv^)^>qx@TDGKipyxC6#f#U+2U$ z6vy7YupsJ1ahs4ES*K&&&k}v&2bIT@%?V5 zOt9ynE{_YhO4s8&x4*l7{MUXwhji^-adWZm8CIkWBkUVh($9(Q;}wgaFL5vVbdZKp zAK8o{b(E*Z}>WZM|yGtUY?(Jkyy@s1GSL`=nfl4^zY zqZjI4?b#lnttk58=a;0p^*9#nge#7^ac4DtJ~Jp+S|#pRKJja5C!vGvNVteasGZHF zwr@2yqm8m|kZqUTDn{4IT2iRv>j$Y;abGO_1!jEKH)|IgMy;J`UU;!3&fg%I@j>;C zuE0mnNL;Whd}w&n*?R36v2osM`=xn)OJ5uVWKy1J-?jalOCx*E$wHZ2agRC_LK%;n zyB2ewVg@~2p|DIlg{@RXNA@niEndrc7gneh(jUx$p}}8R{knWnld}UYisxHeU%jA$ zeLUBMO?^)Lf>U#v^p%H37CWfRVze)S zQQ&>zkNju>Q#KhHPG#jEw46Rxae|}06Q5RR_=|y2&0mlAXnBii*wZt%K2MB=3eV~t zsvZ|@C22e=(wKiE6C^SIMyfGghMDb4zXNX6`C+N(qj7njz_t#P)vnS4wkfZuVe-a= z?`@>fQZ*V23+K2iJiFpHHWq%~|BXv$>tMIRRN*j>T)KYuUXYhgw|rIm4$neTkvQTN zLR`WGh?^u@pAC``Or~u;aS6o3XPe^z!Q=u&cuX*#)y$(Qk7b9QU+|d-A(>lkc^y}N zk>na}s?N5O@EZr|OI5n>k-2r4I=LfE;cmSM6`~n5e&!ZU)6mNvmwHA9ZRFV8L#2}; zr?GE7Y*+dlE;)R76qn88Fkj#C;6_~KW&&UiKI?b6g6b1+ofCoiDVK3@d8e#)iH_ zL|qQ-zOK3BdoRg+p|gB!TezCBYP<9*QnR?gL%K{hUWI>Z%F}4)Q`ZwMjg&z$ra?#s zg}rUAK%>4)CseB%U)}0HpcX+dM9G&SbAXRopX@&+>^(B8T>ti7(g!#L3s?H zSg7-x-tipQ%OYOuE?5cRHzeH)M*FOy&|G6Rdk-LhsF1B;6Fuj-gaAOZE=K@M*~BAA zTJ1W}RDQ=5A4%P>|DwL38#vsg3-JOAX(!RPtNg0d4>;76O z--VZl6oW*YQ>tI1*3cckme-Rp;e9sTpi|bM{yZL&MlX5)_Z*DDD>C)$90XjCCMiT+ zsSs|fx~KKi;!vl>(_kdv=%UXw$w55+^*+WTcy5T|g_j3yEk4Nl^zcx0tKRUv8R+5E zQg(J+QekhrHjmuBjH;DT)`R1Xz`Eddgv9)t?}MKjZ_1T?i+~x(!HYzS3~rS>z7Z&Q zKl#+fVptd;ieveQV5lfo+VD2vIfdmYdk8G+CNfLp2 zDk`n=wNT2i!d7S~CQFqe-O{|CB3a3)1$EXjcb<{KPB)ACJr(kGT51iP{w67aN0{0C z%=_wh>Bk)|tP_EGga)(Z42w2$cHdU21)ls`BJfiaR`;H`l2k~Gt!)#=BBOOr=j@^~ z$sC;F(#x%vPHu~eBYE;FaklF5dB3VJEPt4J!6OZboj)4`PN^xb1vp}D ziaKiYq&sPgq z+X8}tDY7)Sr!5U~QUpXwETmRZ!t79vOA#J%KT%xl9Y2nN_Z6g!qAs=vN(H0l#Gie| z2~!&tO%C?T1%-x;?&Tt!gCLiLy+^5H!uT<`<(FNtsi_|P+7|uGi60=@x&caoduv6_ zb~kCrsi&DPO(Q1k=!z6|>X>a|lHL;eTujsvk(afLvx_h#lS%9Q+Rka(=`O6$w2fr0 zVkJ5L$)4_C_W=fMNnk@c{#GgHMlY)$1@18uH^z{2zJ?B>3h?YEtm`&>D%CCvpANgC zP%iEq>Rp*RK<1O7juz^Kn{pJ{P%=e(JzxDz3;(9>mQ~KF;fq;s4O9o@vsa;6Eoq3s zgt4Sz_npY5&ftKr7YoQ)5(&ehQ*PCv<`g!2z0!TW>rUlaL~tx{@=*t?;*kyQZ3gn2 z*qd~@$kO~8-3D7CwaM((S*#z!n&fCM$qk07uJ7HSriLRVD+2lIw(w*_7e2`OaE&;d z#KMZN%4Xco$Q$-&2tMEoel@UTxuGaWnoCB05mLXac`NAImFGwpLXs z>|6bS;q5I`x`Z?pp|9_I|M1>I-X8YPE^@Pr(!_lbPJ3;5lcpO7e(tPrAsIQR)6FCP z3Z>oU!2d0$2`joMAF1Niud#1G(LRZ|xq9Zl)>GZrCoq#VW|jTFsW;oN?Xm)*C{l!#X+|yUFU?MSP<9?}cC73$*Q4T-s-iCw8NK-m z7rQ4D#2}QC6Y)NUhz78Z@N+2ZJQ+UIBO0;v5fZ`Ac=}o|i#><gECHJ_BlKAsf5n5 z5)t)_&a;0xbH&Jhu^{q(+Cz@cG_N1IuE{gkuzl~O&*$Qz$G80^qi4oI{+C|!swJ$h zm&)rXc9e1-O0JpEz9_kIle2syU?4V+%6+`v*v`;q_ga^-sZLNPUUP)sarb7{XiJjvFkY9sHvu=V_vL*yU`KF zH9p&GkNfhO$wes&u)F)(uKwn3;s^a!_&_Ch;0gv{7jw?JSnYb8GcO9qRvqq{np=~0 zRPb+nc8VNdHI`h$R*z)`%2c9=)#yqNMVj+wG6J#Os$L>_tJ5Ol zIc{^6+O+K6D_Prl>CL7h6VAQT+0A3&54}spcAfdYP|VK;YX-(c-}`5vgXr0_>BGq2 zGSWc&Y4f;4Vp>V!wX7{g9^e*q60O}2Um{d}s(J6-pu9o#AgBiFhxTgN&B8%_z+j7P zQU7yIfWdKZxXR2f*6K#1yUI|hue`+xe>a}?>~Fdsf82%_1i_Me#N1jU4XKX;rkCzK z<2G>Urn7TkiP#LR+13IUTLfp^R1Rc*S4_6D+50jqQN7sR&A;nC4J#X4%kr-#`hG9e zcc=J!o7P3{^wX5|k+yZxo-IJvsk9!ssGZoMV1>^D=^|`?8`*WhesuPEZ&%#`|Ch1c z|9Cb(1~DY1YAo{j*k$e-t-j^q*jndrgl;SIt%sO+o z&0v{X31uAR{~oTk{6(QjqJzt@8bC+AHj~yh13|JDlVyFV9V@GTe^X97s5v=(J!739 zY{(E8q{Jx!{O4h^mtoN%bxT?bY(pTnzr=@G(7z9wO`0%nX%dPo+li!P4b27aoZ*nA zZV`y44fpzz3YRo>mV3I`aug7G@*T>TAdj-Y^I zZ0}zR&L0XG*pIRDC&|@FkC8IbYqwhu^b5}EOxuld5L#EVv!N@1AcR|T{Z&KFMLPhPv4WKJQ1}Agf2_=-`$@10Sq|eUiA8G~{d6eay z3=t7NDj4ea=W%bBGL@>cDlH_ii^JQw4H-pSA)#Cf}Hl^jL>!Rt}fi z(RVWt^#@X!ZU4ckbM9VPJ2n&~f>gDb`(0pi6KH#rRHkq1F>V2uAkQ*17-ulMuGt+| zuq!#AyWbOQ|GrwuR`Y;U;MxMBX4M4Z$#T!WP*K0?nXT>sB$xv~w{M4nPx*5{*FG*> zke`%LFa1y|p+Bg=eSJUgUAo{uMBs*>< zvN^k@VP5U>Od1MwITZM?u;cfz6>UyjhJqsJ?{7|L%K3-%CGwQEvB>5vL09hmhh#lL ze<$w}e4u7E^NV~f9nI99u3X(56tlqYsy1#@A112&0(iRnr4sKJTG;c9SxMr>y>*fH zEGvwX2+;Pe@(kieP1CRDx`Q4)!Q+wL_wg~-PoJ_iyiY+cR^Zt!*S-+}>Q>oJMiwI% zWW9eB$iLv@s3q%XGmV3bkZeI+=tmn)+iGppnjUyk!X;XD#zVOC9~S((sIYAwC4O&_ z&(x~e*{NFZ^;Qs#Qo=B_#-zI;_D?%@xG?q+gp%;i54B7RJl7|UqD zZ&X*Ok2b7FZ_w2q@rk0GbIvaI1uavp2npYH9ap237FYRoo8kt)vHts%s}Y>Emr9bL zHzLKxU+b4WnDe917(`Vux9s?mCqLM3A*(YpsjKA`w91p%Wpf8@SFNytWmCZd@vDCD zZ_agw*DZ>Yu3R1O*Vt0llxTuf#l9;`> z|5z|_yhDJQ;nuVXK6ELTUJGL7ul;x6`v6DC2`RgOM*MyfIUo zqj{aK^Xb9Iv_Vq-@+#lHG66Bggg3 zwt>x`N4K{Bn#Qd9G`@_m91BT!C|i#IE{cjfG7oJrZi@f5H6F<`%$fACp7@LTbacd* zRCIz>6A3ho1_?Zyjy9==T(g|1VqKrb%hxX>TYaU#fYxhmuU^S-KEVeA?O=&20TV} zIYw^$?`T9!7=J}L)~63dlqw~+K8`Y+!fP$)B&4_mme!Yg+|>jOh(fbk?<6BN_nnZU zr2u_6Lrp=SjbWlO0q6X-z58@=si(k~@okU&t%|KcO5fXL&6NtUkwSdi1uB070UkRa z98aM-zM*+|G`?KinA4DRABspy$T&Hc4clsa^`K$w@H@dFGIQ5ySB&HISI>&Ya5RCi zM7kZBVuokWl(F5PwRZL!fGr_hYGb^n*F;T;yzs)li*v61HR!O7mP}a8lzbH+ol+Ow?4x?AkQnP z#%{Szzry9mqe6<0=CEI^UUXa$ZFQElcx5@OSRPLwdve(_VAYQpJucyB0Ocrf{g@z2 zJ{y)#+{zZP52$nS$`L0izA0BrDsE)UnH5am@|YzRR!vSe+N^$54-zdJyFp%6G*VKIQa1PM{;g3DSjgu_q`QBNW#16PsXB7Go8sYUgHV=uW{3>eM3NHh4d?e7M# zABv;VzL4(JnkY>vlK9k6!M6LE-K?4CqO{5LZL9eXHCq!}r3mAO2beF$Sz$OX@fn#$ z8oJZxw$@K+_1o0wspis`$=qhL@C@5cfmFN?N#wA*mTbz;=})n3CFQ1JOW*Zld@59% zDs~7;&`0-#)~e5}JC*%VHirjlN=HVQ?{Z*&sg*=TyWzT7NWTDIoCV32uU>D@wtQ9>%v8{_v54$z8w{dGx1^_-`mg)+PPF5*gY&-2LLG+F49~$2Jwqmm{T0*3^qo+!KJLANpu^dpg{7QU839u~U zJXd)d^kS=piI5;rLbs94^F+J%4zpe(ddfB#M}|9g8naMj%E20cv97H6=wn0KSa1}i^kL}2<>`bb;H{WYn?i4D(7 zB9*dqArM0;l*nX75(mV{PWqTHQHNeu3#NvHLyXdSR>r73Mw4lZtOtkxq0iXiA0-}^6 z1eKISoln(#lPRzUBv)k3!{OVtbb!;J$t4f8=ZzLL>DwW4FC zU8dgOjk0$>Y|PJB^d#lrvAz$3hPwFF<%GN7di0c`??JO1(G3+Gpq|1%Dc-t^r1lt< z)6VBI9n)w){#p9{RidZTtR$Fn2X7-q$Q)%a^d}KNbI^$5nwBC3_`PdqJ z&Zfeus0Ph=F_^}9M0W@3f(IW&0~SC zWT&1)kgJaXOLjX;+a1hWJ6AuJ{H0^?sFe@>)-kG3n)`R4zj8I;gAp!4AW(%7K!L3W z*S})x0%*VG)rJp5 zM7kDWjc=KU z3H5zIW}oIDQt=*S-DPTWCWKypgX(8!XmR&W!{Jn6qvXfqC02AI8K7M^J63PYG=?NB zLR?8MM6UetbVkSJH#UK@LcWLN!g4ZmsPxmuNMnv&{jDIfpv}~Z&X+*E8TQNyEB`Q= zPb_m}r;o-W)H|B=sJ_{AL#35`k zlTBlBno^;giB9O_^m6~>r`zkyjxHB-#rzf=1NRgs(d$fsj4#M^NiNqvcW*YbSafVu z9S;Y?BWFNOpLM8hY zh#9ZSNRgFZ;zc<}-Ko{u&w-6ZDaCIj4!f zjjYCYG@C0e271ffn^fk5S)^q}$flytW4jMDOjb3t>XuOUUIx~WMN{qbTwE)UDp|Dr zH8tAEH^#qSA)}_bA$(*#-+dr=6w{%>8{ux2bjbgZ**2wW%pL~FH=#E&;W_t69=SaS^?^Ui|iIjs=IR%!- zElB&7ierc$!!RVQyJV64kasx`kv#Fqk?q}&sA`K+u-4Y6=iRcUN72YR%bJrnSBpR{ zFwtuUY(=pVkwng+pZjof2B_|Bet6Mq5gO_(ExIr1>C|jR2V-+$>`SBYTMxB?uny$QOC*c8QN z1DXvb+B6609oe`-LYI$s>J#60l289UvNmYf5A?{&^yC4ZHa5xf^bDm?O;qWh zl?Q}aF+x9-i>6XfA@u|%HRCCff_#H0%&SU-sPeNe1ZvPqIy+~h;PubNf{$l$B80QV zC%?};1keIuYh1cHB!6pq!Tvkv(S>AEk4QDmu-bNvgRLd&@+Z!+ueX43umvBYnrfjs zM6Iszn71i?KVdv=v?DG3AmJ;U?GxJ>rSRFVv^Ng*Ust$_^IiK=ux$8ctDN&MWKVz) zjmWuv-0KDDQT!L{;fC@R3tM8xM3QM`KEpw>=`(6gUvoN&N$YNDXl3ukr38R<1t_TQ z7~E@6i}o@p_4xP!#|<`?J5Jx4Tll3u!of{t5!Efau9g|(?dcf=YS2C!=ZCrlefXxU z)nz{M;oeD%qX@i6nQx}J`z~0VvqHrS9SfJO_*a`>WNK2Ay9}2=VILQ3DON!_TjaUI zZ)>jAw(cLQd7E-pJL3Fe1|tX@ZE{MMe&RT(8E8Cf;V)CY>)x>r>SI>_A#`=Q=t@KZ zTY2Jt?Wu=JNcN5FCW-e;v)$`i=Efy5MNk2C_*~br6Q|a_&Rd1Q+wmMr?6&@WHG6yT z3*GwQ?kt}rN%JUXRWt&dq`h3rIFd$Mk8EG06>Qj>iSTJv&HaMO^`=QU3< zhq$}x7+xY9z47YVt%ALH0z>_;#I^^Yf`a15U)5c%-a+I%@bz^Gli?!QTG=kBEC z4#I#@{z)gbWpq9lLa`at}7CeR5>EVz{DPK*=FMbPe2-nWL+7;P{RxFIKcS`-PRrPqa zKn3zq6Fs&T*2;T5V$a8A8Wz*Q&Efvs(Wy=5r~-1Pi(I~U272b2^^?q=DXVH;DUi?G_W8-~sT>1C`H~eJS#@QeEH(-Ka1jRPsqNIoWc+_|e|jyU0NKfD|RI zWBKKE-n{t@!P5^5DrsG*B_{ZO#uB;<$Cb=|r~oqk1&-9)=Q2;6oo=~~}C zwt<6Q*>i&U2cljC@#91Mk40w5|Ab0j#sKjr=X_L-t~dgX|MA_m$kuEIT~9}&nGs_b zoCCF&RIA%4{nQmILTB^r}kpu!YOo{|g=dCvx>ak*oiST>Vev>c1Pg%9Xh&8JlAfwk1!HrT^2!)qf8Zq*pTr zBKl;%?ppUffs8&KwASzly`7-MV-+{XU8(o~Sn70um8$9t9$XZggj-0 zesCQApi)hckmNVajz`HYk|xXCd&7UnU;+WvPb>E;M1d9uR{fl{h@CS`H8l4Xr2jpn zTYLI&uSgeX(VheDmd#|Z)ZE+HW3FzOkFYHV>2>66aE z$AwkjP0v6Xy5I zsVqfvFE+^F9^MUt`GSsF9VB4}Yf4oK-4%nVRhwn=`Cx(IbKgvb86lk((D>`P?k<29 zw@p|GGB4MOe=@!>96`{B`|(I1@pteOR>;>=pMh_;hqk|ZuY?9>KT*zVeXN+Xc{fxw4AQzf3(?Yj7&w3tH872%but zij3={hU`Oj&9bc0kqHFP1PBnvphgfBs(wBEk=Ez*zBsU>O%*_KBBnTu+V6RS+R8HLkVR@V1po z$e@=@6;2`5bzG8(XWK=7Y~fax|0N$(yr1B+N$Uraxs^2(LG@68!wjl7#*K2r5mJk= z%G5uOnXx5Ya@l|Fn8~t!mj9-6>2C?`clOy;9G7Z&f!~0ai;9t6d|bh5W_DS;NC`FG ztw57Lc1Zw^jv_r!VlAmZboizcNwv&bRR72BLNCAyk4yE^A>`LkUJ^y)D{4$riuQ(n z-*4(_Cn6B(pM=+>3QJU?tlyM}_&4%L(EE)LW<$KvArjLx_9yWBXX;8_&%gZYYd4$;& zETcnrUkSZMX$lmc%w^=c2WfP$fcymPjbX?9Pz@w26C50!mnui=8@pDg5VAbG)#HKQ z3J8twF+zO3sK53)OhL5;AL=ksM;Yw}nhwtM?-ug(r#eLbFSk1I&edHgy$2`K6>fWT zahYxKzV#4h9Cm$BQi09LZGhxqcRJ6wz_i@BMD~V4sRs`TG4<&_Ikn;Kc}+upKL@HY zZY#k#4FuuPvdA-#Y~;}CkiWdyQs5xBEW3&Tb$N{OS`IH;=C=K8zwLY8-Ng;l-CK*x znHBKYud3f~RKrfKd9CtnI2p9$WfhFPslS?|c3&stzEIg?k{;YB6DRS(OJmML5SoMX;wXNnGRuOEE zAis*(CWeF@Zc76kVmziGNg*Cmu)DtRTQ?>@ipfEVo`b5llNZ*tUsk~?bw#ZepM``I zR@Gx>Z^7$N+^|6Wu@%;V=xY}wtZV_7r8735s0#ZBOwh;alp7D!cRq}ljQr2GIzTq` z{VO~~kaIhrGd^9mYDZGrD(TYfC5gD3fm{bUH^I#XSh=iv&@uZc|I>1GuzrB&@9*(^ z;A16dR_B}){>M&}`gN-0Wa$ek=%B-(4DPlJsC~6e9rpzvQKz+SFo9iq^74nh?N_?X zU4gXuzvgpCbhEa!$*4iR-QoW&3qG!s%a%a5OJHOIs@NDyjyqU0+>QV~mK+ z1_!<06Eaj9SZ!M{Ov=$aBt-t@{;1uCMM|R7i2%1k?>fpxYBGCI+D7rNtX(TYC6}vZ zP8&`oCmZ&99RtvFwnlQ{qMMu z(rq(gr&l;GEbzZ0rbG~9N?PMr9a3v#AfEW{5j=O0g-n)>E<<@8@^Ea)dySdcyIg-hcK11iw1||E}>;cVNn9t)8&M z119mzoFd|rQG}Cbo}_B2iWg7->b9t1^eU}8b6kP=a}b44A<*#aLw)F&6g4tKb#){g zs`8%Z9X7!!q{id3c;qVbWTdQxxLAvR%r6*SG_@ zB1d^Q*k(1l#fqZ|_|aqIaP1#&C@`k-A5Mm=$3zEM0R|$OaqIH>7guVN9&2=ul!$-b zCr z&<3r4QsKsRckl}|{q373Jnr9XQjFc%ie&&l0(>GBson^}pLJV%JSWs+w}c;B0-8}> z;anAWK;6+L#|3xoJs{K(3-YXN3e#>U#gIF)aY>m`V^ZGulEKFGPRqR$-eOPI*`)9N zPxgjanYlP6K}~dKvq>-!rifkS+?K6DrAM8cUO~okPX@Jmf~c@xqmovjVb%2%A}VT&%o?<0jQeFar zO&@6VaZd#AA+a!j&^gi!ehAhG1W9CXN)~;EWE^JtTEU0NGn(eF8Z~%isTCIUi?~4*3%%A#-yVT{zCP(Au)p zrOF<1kn=>q`9NcPDnFP}2+oEaNTs^d&$E`|=^ZcfE_SXifTukNc<&KhP0{F8vt)eq zZqdI;vFm&PIZOp`gQkKGo2!qIUDItEMKM_gQ!ph}ha2`VCxZ z3YLKjJX5Dxu5-B5I8Ge~L1nFv^D&=S-Zz>W4~D40A|>YY7F4qgRuPMtMVG0|?@$h# zXeyyzC+^d8n*k7gG*}qC~1t)7^C)c6B(Gkfzx;E zf5!$!RwXbBY)QQ!41(LIJJ|W)&itH>^+PLOHlsmKL0;=bkCCSUfFj%FI2;C z@DF;Nx2R1A$3QU>yK-{f5wU{w%b>x_?}mgG<7aWgu%{Pwu`7==y_b7U2F(U26iR6x zcgD$zaq#Y7Y5kc*JKr(%=pA_Xio7V14hai5oEtMC-U;+N5Jjvd_xv&x<^LZT6WDw}CN{4?_(Kuk<`DYsqV52_z|S3_bbDxiKDa z=|JwK)jJz>)B_WvSU1ev4VJP?a&=^iM=6yq2ZgnD1MSGh8uI}++6Wqs=7hKIcR^9P z?*UGuuFauQs$*%*^TZKvlAJWmY?(RAxDL8as{Gj>-rBgIOSraB+2@-b-|a5@UhroU zX?vHf_3Oc5SIqkYzssY6;U4C2UWKG;LpVtAJ>-$>%dltlsw5^NB?k8X1Fv|8SiC*g zZ7%Q_mb<69G!)T38RUHpqwzU$m^6wqV`ZB4S`4Cvx>cq}f8%AVIr)huOMYAo3At%9 zSY5;C1{-kCQrcZn;}d$PH1a9rd(bO*+b3Rvduu+}&{Kdy(LU9DY7WU#%qn2zCeu3( z9KNK7Ol0Gw_?L}5Ij2~FTl74A8wr=;PjLYQ1IFDV?0Hx-0R@ zyUaC>jZ6nuFLz6SP+3My~xAguh zC3}l45JMf8>>sjpIgUE!=AG;B`x|IwgE9UeR-({I-Qe&Xl|8}xH)#YTe|>%`Tt0;r zfhahz`)ls!7$mq5fkRAGw_vH^x!Q+()BIZBZzEk{x!=29>AeBGLm>dL+QvE!z5InM#~9L}7Np9oU_fw&$5L!+q( z>9(uN5l>dNBk2=18j|8SiDR8P;KEIyD~Nz5-bU7OlZv~VEi&XiZ%qDcuU8Z#(ri;pYA2M3If zuni|?HMx9#BzyH@`x);R>5mS?7-H@;Mm&4Do;&#+mL9ky?x!s%2^uykgryf4ptavE z!N#&Xh#=+AM z4b7c^px4!5JoO$(=X%fGQ{SL|7Ox!KWk4{F!9`cwI!_|hDK+3{-LYf6JCb`wuKq&9 zXk%+J)5!~e2E*iQ`}_NE8@-6*8vQQv#ckd{=;OgIdC3;>ZO>12;v@S-rV$9@PWRnS zI^Uq9XZz4Iauv+J1h0^-+#aq1{cTU#_z7~t&*jcGvub4moUt^?563<#i~7}a zfs%5jW4D(KJrcS7cpJe}>%B#1&Ys=8ZwJ7gwuy>8n0fVO){o4!={a-HS_5XfbZ-Ta zUC=SgAX=XDNa-ZW$#lV4nrhdP%})BIN7?k}LB3>)qRz^UA~C0$a+-sPSCe%*T)I}` zpER9?gH1A*293V+C=4XlT@9{Xa?tcQ4X$;=EF~^Fl!lL=Se(#y$f)P--+%1~08}nE za^fz}f4NtNF8~$@zI^xj&XH~Z{(%k=Y=iu&hQ@%w;fx0CArk6UAmQa|c}P%;OR znN}lr;u-%v1~2a<{r8ajwi2&$pg+TK*+D~f3O~i1${MV)Tix8rv;ELuHpQxIg=?2n zYGmfkU9Z!P64=Zg<`IA&nJ8d7Vo8jMdv9Mesd7=IZrW#|cHX?(=1ZoN(-5VoJY6ekiEwamwdtx;mfQJp z0rJ$jdFUOf`SxntqA32ww|-evqUYID=U@ug`XDxVs`T8}N%B({9NSA_#YzW1KwqFA zxz?A>&UxbZzwpP~+mmlqB4==BD;&4xe;!ezR`vpZjhM6_Qt<>rSC!3GJTHhkuc^NM z86Im9fIeZZu(k-`8hLo?mVb0*pHe%w5kkrJ`O@M9{WH*YGat79tGe$BYijG-Mcs&q zfD~y)vgy5qUX#5+1q6hxZlr`7s*x@r0!9Ui2%&cbM2a9G^d?OOLMIdn5JXInU??I) zN+5(k>bL*${pWek#ko4`X0CNL$68~I_kG8B=9=?e?)IGO4d3pk_*j1${^^NP94iRy zI8ac~M<~TrvY(>TzDHsf9ARcULJ?P1haMTfu1NJ0pH(yRUB*u}^vWdKBI=y4mdISU zq1C}V&>Qvp#*4wI;znNh$+V$e-eq-04Yuh@u~bSrT`chFDwQA%9Rh-BZ+jYS1U5*; zy`@L2npdmpoK7M?8=LtH0Yt3YzCT2ru++|BuKR9Rw=93bFgZ-x2W~@Fj^0fl@fvq3 zv%!}uvZ>rY))RJM6dEX8RurQYkwoe>pWfV@UJfj~Q0_+Npzwd4TJ3y?BrF*$~?wD230O9N_L5S_0(mQ1+F2hVPVDibWPsfP2{=BRPQB}vA*#@065yX&CVsj)cLL>IE-Q=8qW8q zd-qH`|7862qr>3q@5Csm2Cacufo8aNc7osjp525cWr(jEH0){h{^&=Z7c;%Nc%A#sq7c=1<%9C-dN$HLtAdPUX%fDoD5 zH?**jF-`v6Ea_&RQL1G5jTM%sviuJQ_k>RN@mg3}9vjd&z3q=zbF6T=efPIFul%vz z*_NW){?D|iFWrvwd)5q}UR&Xp{>!LuP#FMzEjY4$P*`PU#r)U$MSbbh;}7gT0KLKv z_%cE`)*f_CHzNgQ@F1~) zJ#uShovJwPH~O7VsO_N@n4x>0z5!gsuY>qcPwuU(9+Mn6Or*mW7h4EXf>le>4VqbA zm#>}JPJwrVj*ASg+uB%IJ54-Nir8KJ^fp?jrQ<>tt`J*&H3ar*EMdv)!W84Y&|R0T zkMYZ!@dyS8yuZbJxpEgNpOGt?|H{@V7{-?yyRWLF7Zb+@Ki?H8VA%LuZ(@eGmZ{s? zyNJEjt^<>2)wg?s`xf35(t8VuQ&~G=!ou(NK1;4V!eyV-#M|jt${~}i;m2Q8SxLyo z?x82tR@u`o#?-IBTq^VA^F&eL8bDlUVpNdM`9dwxMF$FYrViEXOR$U;bmpmU4=kyk z!ng(vkhROTXBD|tD}cdH6H;VCj^5CHyxk4pynBG{iwy$Ni{t`YMLan~t1tw(fQ}R2 zu_Pgd0!>6opU0g^lA-`IGdQ#J@=p|8K)n`Q9EseI3-}rhB>Kl%eR}Ns zrh*&tMibpzi<$poZ~vBZAQ4sn(f(Kni`j+pqHo_ikdRw{C>^s_c+u)>mOyll9REUDzU0L5KuC3ru5w%T3=u)Nb@7?6nX=pof6PN!MwK=6TJ06#a z73Dt$-CMHy79Y1k%*o7&v#<4BvcFSBgV1-DA>ChGfKAN{Zx4<_L}Z&udk!Yn*`4xi zBB#CW+gKZmaNiCPhY=Rcy)lO>J9Ma1K+t^a1#<#n%=#0<;k*`D5~1$l3f3-~-~-4( zptUkf$UCFSxKzEfWs^- zlHB}VK?R|@hkkY3`LIqymnm=lg@P)8L;t(G^I;1aq07*db-BE%kV*Ya3|Vy8@^X=N z-ufq9<6VbcpvlK7EU=m+Blb(l<*sRTV@;GoCpi0x4$F&V&;E48wPW`{p z^WiKiUHc+U)v^e9KIhW8nbsmf5CuDve0W_nXpdWQJ zkT$4fk)>a|FU^Y<_5`T;jD;$vs)iik=$ZQ-Pd`ovRxdtsI@lx`nW_ho9b-C z>AB|HMiJL}-bng6uKYPsd(5O@9(4}>ddy%psel3gutMo`pLn2zT<95)Xsbn+^5nPe z6niwB?+A+>hp5KbxAL(iUFasB&>!nWpOer&sS46e9G|mW6H_fbB%&?P3X5< z9=_Rtb>pzz5GX~|$k<%J;NWfH;*_uXU-?2N8zaXW{0XsDc{VR>WuL3*Jt!cuqY3v} z^tJD}hHP^AeGoO;*jD(`srlp{)xMp+4_ce6DoUICIFoF9MlsFmJKa<-QV{{9BZ zZM2Og87mbwtS%1%e-YsinS2@hKWLFhf&r01_n zw;(sbu6&3_V?$AE1v_W2U18NUD8&EF?ko0O2f`Qunycx=Iklqk6t#q`I_rgV%oFMB zpAWoI_OMhzZ`{U@^olcdY-nr<@)QO^wA>rIKIM>)Dr|K1{Y9%Vq5C8F!0G z8MH|cG}#4s>-Lb61CT+-s5h*;`(|$3dcR0@w;(BVuuXo5KNKhPA#;x$=|cg5vRv@x zT%r$|Qn`KK=^iXFE3|uPW-!BlB1EK5^;u39q*GxZHKFJE*< zFVE{xtdjt_{gB9fSX|}iJg=UZv4MZxXuC_4P*9G7Ws5P!=&&sVIJkB*6A5W(=~sv~ z)`+H|rF+nZTRTWAx}7##?#6!^@-vgIk{Q#h+mhUUd#Q<+?pQEUokKU8blyU2kw(zF zXc1{T=+%xc5e+(VP6W}p3UkxBm~AxOw=W?HiDbWxabA0t35moGq)kTBiQ>EMZt@ou zjdV~;SXzRT=d|H_pq*+Bd<=toC1!^~{ZPb`PA?c<4#3ruUO&%pW;ZNkQcuHI#cB4TfavwNC1 z)Z8B(GE(~S;^A_OdOUOZ5&1yzuz%g$;PRe^Ts!uu{`~C>LED&0){_yT1B86nA+#dE zhEkxyHLcem>AEgM><<#{oAwfe#WGJ5T>B!D7qwDCyB5#0nvlZZ2e!)2ZgCAgFy89k zO(;J%Cng2O=NKv^8PO?l_|9;Ff2)@bA}0N~nvSA{V&N^Y*Oo-X`*{-E<%O*swzO)y zQGavTFMA;Wz;xH#zH|B1Ei><69^i{@Ur}*kvs?5Or%DyBCf7Lp1EYG@Nq1xWFw;Lk zOP2_dXlt`LU!n_!`j$BP+hfBySX{i-S{-OaBX2-K+nA)Op{-PS@L8J44SCh=y0O0B zig}_;{pw!8H?3v4Rt?Iq8NrW@`KFRp;K~5I&W4!CaL=H$R$x-p_4-R9GLG0Zr9=c}>un|_tE9B);*qzuw_Pmnpv@uYh zz7_7b^jcEG23lI}F&b^wS`t`OlvW%E9T}h^KXD|MalO@#u`ov zF$=h#IilG2!+u<%;5LHz1yN*EDTRN2`}%KKc5tb063ofdAT%l*r+;$?7WyJG54M-i zqkIvtwl9!(NLDuy?Q2hgk+n?()cOn(!)GVnwy$S-v_H<4uyXSQD<51se80xnf7 zV$NCJQ1(0FE@uAC_q)nyf^rZ6VKI4b=ssq%p=APV-gjbhOsev5Lf4%(t=XKBMTieS z{_bl*88v!9%F|#0UeX$wyEEL5TLafGf(&3Z36;5+{b;$3?SW>+9oXKrA#DZE>}xA$ z=W2F_A`Aq>{-x>it$yJ@&cvVm?*3m#-Sj_?v>)KzJKf>=T`=5nA4D^rC{9cEGz=$x z%g60T?F0uuj`k&`3372T|Gcd^rQLI+SkQ{)5lOOJbmb`L1LF{rL)b8tKy{5cQ^u5Oak2`+Nj0pPPRnCfPQcyTn5Dtj~qh?(#yC&MSFu{`e zR`e_)E5LNI40U@QYj5>?HZA*kAaM*|Z8)F90T{lT9%Eh~ufnC^Q}?Mxq{kce7)ncF zMQSLYhfF-n#X&c{P(Fs^fxQot3QOBVmNI%wlo6)7rAu)F{$RQ%?X8DGd|PS$mNnp- zsBLKo=0c<(ml9d1BV`SSv%kciy z!h3zrus&40Au%4@7A7EkYhFm|FBr(7tyeL;PQO_!^i(e~IxZ@RbcNnd|B3#?oaP0L zZ*K=lo6Lq5O1N(@3_d@cXxMFH1Kr2g;Ajd9|7ZNC|GwpoT^ulM3!w6H=#|g{u)w7^YF}cFcy3~99oHxAbG)z()@vQ4<$Dioke@#nE zP$l##voo^zdBBH>$te*|pmX8^V$ZNai;>vO9Sx~UNS%wz^mE6;zm4ml=YP1*wEf~C zt_h3>iqUv}x)bq{NfC-S4pnZIUI2TjQE;ZEXX`mv<=InXl6?F?5l-yL8`sKEl|&cw z5OkR&=6Cl);(i6KTi#?M^hsmB`hq*ttFBXYnGCqcHqvVG_e!~R_&Q~Ek})<2tSXbc zea2@Rxo_O<>nP(`tSJzbQpP+G<04kRsQ!wa9m3Xf9BuHvC00&liu5$ciptjQFQ9FH zulVrmYj)S|?w4j4inY%;o6jh9xDKi=U-5sz2>y_Bi8=h}?{KH+|LaDctzi{d!SZdE zvuTh+@!iz%XgP;TY(r>R)Sx8PtYRIrM@W{_cVnXe7#)sUTCGn8*&$S=9^q%!uFH&M z*(a!4HW^*9i6X_#uX7J@4_Sd*eX5XgFeR0o)yN@$odewC#e`n=h3{y_DLGbV1(t0K zo{Aj(Y~o$f*2|sHxwOtL?W~mOwypFJ?Eff^nX&fy7g~XVXAIli4LM!%t28~5Q}f@7 zrEsWMlVt_cVk9)4XK#u7f^Eu6dYS@Mr)i%8XxObT0S-){ZQvm9B!O1k9;`0uWE?!X z)oSIZwnJ^D4d%gwK=p%W#zAT49OIEjfws#aP0TX|KyG<#q+KwvpSjlR^N@O4-tdTO z{EvR1=XR$gKL1zD9o6N2(dT zJ4;Uwux-t{50SKy+H54{wAu^>D@;oj)sp0+l!8Sq2BlCOn##37lWfTNmr+{@oB2JL zQZGaWnBFU1O5M0FM^<0U!T!_d@zRxM+K&irFF)ciIpS!vSE@bfkteQt^_!e;1c0ix zSi3qD@v*fISkJdK2k3s85Fkc!nQoq0(=OEA(jlV&>Rq~Z$-3mg;h{_}vTv8-qEZha zoHv*nIIFUP*xUaRK+YBbzHP+)HSL8D0(wq?WTUbH)BO#~&3j(`jS+)db^+@#rk214 zNAs*rv^0OG`z_6=O*s$tMqqtJsV3_& zRkmBt8WkJr!n9VkzjqquI~%&Ikq@*`1})N@Bu17d8@$L-p1V00l8C}X!0=h=_dtvA zYO79)z`Y%s@jePo3xFNvz)CG6q_km>Y{jOsT(o`u2 zGChB2W=&Yk^MZ0Jw-3IU*dN?sK^1j|jLL8|#aTJ&C>l^7c8h;FdsKgyEMj76pthVY zAi~7~%!7y-kSEVveyWML;t)0w=y0XVnDeRH0GF?6J5JYHJ{8Dic%hnqc}2zG5GTR) zEAD{{#M4pz@_<1num0Qnv6JH+g}r zbg`xMOd0$3(#1>h#zWl74t5`u*3*%sUo!y;mhj_SG! zI}(4#bWw5$$np1)T|wf{&vrx_Ly(6of91q7Gp4rh8KyjWmyu2Qn$yTv6au{?JhCLz zRQw|T`^-u3nKDHyOQwPpuPfaBzp#PHP*~OXE7XWnK)XQ7`EKxXbtE-ufQqK|U>!sm zV6SI?+7 zVW~?WsBtGAH#o>JnZ0QG-0m&ET0wP{aZeAjBoaGxWkpQex@dE`4J;jN93yup3Jo#Z zk}#jOJ;i1lK0N9}>-KtPpgYnBi-C}R{T+W6kr=Nw=Z;cU?r*i$Q3+}DdhOyR1u_<>m!oRJlW1z zUXChf)pWZ@$4P;m$&srs$=sCyvpF$*=xAixpAKEIe^U!@U^1qFU{o}^%o@}9vfApv zSOL+HTUG-qaRjb#z;FGXo~6Yqbo7sT?_x#N6%05;F+ zdKy9*vKt@H#7&QVXo&opmX~lC>DReM7P>r)4w^{*;C^YERAddnhg+Z&mQN$4Ux_*6 zp*nSuKJ2uu;m^{+>cga8rQv@P2cr3V7juOqXStI7af7xq(X4(_Wl3)vHYcUjCp47- zBD$?l{x(zE`Z__T<7yQ&ZWfe<@Bfs1s#o4}d@Y~LWuQ}psJdw8KHLM0NGtEC zu9|-8p`b0**7~hhCmUv9asP@A`h$5Fkhd~*&wg_lTDjDkv6?z&8<^3Vsmm?Bl!|>U zl4aXUiSF*51czhyu9CzD62Ur>9pga*yA}LY;T;RuKRj2@#B<0BMBnNC(c|Ky$M#j3 zw$XK#JVG*i=}m@-;W?W#+e?NU(AlKfxGmpA;`PfdX9H_i9d7UB;Q-+P>gB|o1%O>Y zfT~0GFlVDSIcIJPxFs6IwbEMF1h*lPQ9tyrigaS!J_NFp=kLdHVdLo7AeY=9=L$H8 QEX>R7($$L?BbP`20S3K}p#T5? literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png b/doc/pl/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png new file mode 100644 index 0000000000000000000000000000000000000000..ca8ba6fb972bae0cb7b41eb17f5179069a981ef2 GIT binary patch literal 43797 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 WG-4#Cs_X&>4ha!i;UYmDpZ@{#Od~r0 literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png b/doc/pl/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png new file mode 100644 index 0000000000000000000000000000000000000000..2a209b2be6d528139690c95d7c4d930e5fd22c21 GIT binary patch literal 257211 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

OG(ziJ0WX@ePH=j#LqUQPzAGGvuPPV4N?;I)J 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

rGBK#iU$<*XE0n_ZZr=Oom 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≻cVoQGk%$uVBI|8O@^`flt-Gg8_GC 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�nynTDhHZl=bEOz$AE~XF|(AK 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%0D*rmsAy!yu(x;RclF< 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

h7xZ?i%p&`L%HC{! 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 literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png b/doc/pl/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png new file mode 100644 index 0000000000000000000000000000000000000000..f158ad5d9dd9013bb92fbbee597319667892f727 GIT binary patch literal 532838 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 literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png b/doc/pl/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png new file mode 100644 index 0000000000000000000000000000000000000000..edc8b01cc915162f1b7224a7ae0d6f43fe8af151 GIT binary patch literal 137827 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 I=H{V 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
  • Ew1pbyk8WHEUDAcU(m((_7+XvK_qRV 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 JS7PSb*dMgqS%gU( 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 z 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 AuH(bXm7HjQ7WVE(Q$0-|C=1$*zTy6)N= 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Μ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≧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

    T9$lLF1;pnmBv|s8VkxHQ`3TatE(G)~91VmIc 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

    d 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 literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png b/doc/pl/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png new file mode 100644 index 0000000000000000000000000000000000000000..c03ffd18d4c22beb69d9163a3972b0169df27acc GIT binary patch literal 240495 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®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

    6S!}Io9cmd!TdG$;Dr=g;o7J!xP8QBUFF>qm;q> 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 literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png b/doc/pl/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png new file mode 100644 index 0000000000000000000000000000000000000000..65d4c5f0a1d42e230b06daaeebd33e328db54c58 GIT binary patch literal 665755 zcmZs?1yodR_%Av`j^rraAP7is221n3iHC43F@ifmq)<{*I%(wh zm)0EX`F4YD9*v)#H(~Xi*GeVYUw0}$P!Rf^l$_@{3G9=Iry;+@5MhPet?UU*k173# zul%lU6#%yE+_$aJOh~@WZb}s$E-xM`EzJOH8leep9~KXBwzJne(q-N*ZlQr7bRbX& zlvi9`j@xgYp$(a8)YH>L=Ft{#gt@)P+66O!(5Y0+bf99$v8zaSqG0sZ(Xru;kol}g zwT`S};-I45GZRumxG2TNBFDy5Rcz=Wq<1#xb<%4M94rY~a`{+y0m0aTrrD7C)vl66 z)w1}tTQN`v4BI%(#Knb*zq~!Bx!y5Ht3(nqMlN$ZE7Ujh(0DpGa=EZVAL5$-Q-MZx z6t@1nH*UmTGb4gL28XK2H#$e^^!8$9fv#MUNI!NvYap1pt#3?Ti&|)hmY$x`^QC-+ z!wIugg+q51RLSXAcb28np8aHv%YyoTPo@8?;X^>Xj=K>U&-JwD4x z0y-7EuDO_pspM4V2VOd#_%7L8BbU5T;W(>x%aSW=c?|E#cV0XK9yT+Yrl?O=QAsr% zaRxEJhp?^fng=M2P3`kaNQ(DO^&*H_ji!q)m2*knZTo4 zWUCM@8Uzdhp`d{A7V6f}#e!%%mJP{bXgEzhJ)h@~bLh_?`um@yiMe2OOLaRLkocBI zWSjMI3Gv}c2HfAj5LpSQaS~7hM{i_lElag(;XeOGOxXv1g+_^zv9%^6ewW$cc_2Eu z2mAY73QzEV|3VYIbSG0k5kz9-N7UEHs8TkqQltSz1GBOE^upP$GVnXmA!v~20miGw zmG%_T8y#*~vkS*a4?pUea)a*aX(0$vC0mfpX|;(_d{?c(8Bqi&1x5Gd&V+#bA(?_g zT2Ds@h;k4m1Y`!j>yTMG?Q*BY0)rXRLZHCmK4mn2yT-g!)zkYbYOf%qcz9tjS)@35 zq06Ar^4D%`2{!Z*Tai6-LTD+usZ>WVI=kO*M0lmzKOjjE_ule%B zRgcbAUeke6VMk>VS9y|>S;}f+RC?@{1CFXa({LG2{l*gVV~&fK>-RNpetnA>4b>|| zS*XSgF^h|}u3l0Pz7ALIhmR$FttoF@Gv%8%|8(+?)TJ6yBx_6cw5Cp_*~wAI?kDdy ztZ!;f`G%F+N9si|)Ut*Iz&3}HD`Z6P=4O_=z7nVx&iGE+z_<|aAc1>Am24D#&;U#v z;(RECb~Sg_%51-fSxG4^#J1VvZ2P(2&0&lx+kByh{Or=)`&wPZ!vhCGMuywV2d!2Y zHbF-50HLM3c-lMHQ60vP*PMf zJw7HF67>i;@;&l5aks+m3%jXmgQJaBbi=#!!6a53tLdZu)Tya@+WOi(8@hk8TUhnsUN3>qnWw;%U|r=2qw?{k{6!gX=csWlJPUKy>u)`DOv%*yI(98AdlNvx7`Q zf>nK52=FLCA%_>k3_fYjP`Xu2vBfr&kqqIOxHu+b9llNKk&Wqe;Rf$Zjt^lNmB=eP zH}`szIYQ!mP(WE3E+IC$zJNdVR;DM0aC7q&vO5NOPjd&NpwROWxCEW+;zrwV47iMf zX$!r@zDZ-G^6NjcV+Dku<`L2^JtJg-3ZbN*DV@5{)#YZWcd}bA!Ual1%yNeFE;X!+ zu$^n<=*8h8|Lv)3iD_JqMb)wJn5k*Sd6d!H3h|_W@Uxg7&xh#>%1dEuwwZTg8+awH zn^<}CG%@8m!q29vFokMn{sormGl~9^q9F1ve7OPV<$kNY_eZ5KIypsod|uw5IoAvu zW*=MRH}OYH%TnV^amL}dNNVk3;k>*i)sHc6qJ?}Z)TP?A!&9NUNnU?^mxI@=Qr52T zKZPrt)?HKCKmNI^xSqo&Mak^G3`P`W26JPqTy~OTZc+NJc3Oc^FwhpmM(y?6J@IMo z?id~X&YsI9ybx)R9v;T!+N4K{auEkqgBBJRW)~KEFQ$p>>g!j%-)a*FZp<39NkBcG zN*dq)3YCq6JxgU@s)G~-(b*`G^yPa%*c|4&*FSgy4$Ss1^d`+IFTLw8EW}HAY8Niy z4X9C)Una&6|-=i;vSrlsU!1agR7Bn{=_#6Q(GuQ9M&5Iw%ijH|sLXk`~W?g!G`Sn0X@qq6OD)X5( z7B@+&a=BQTrgu3jg=$O8?x>LO&Dl&Yxv2jdIwg%Lc(kPZbT{hzt<$L@1bu@t^4d7k zFJpaB{n$97*@aNU$MlZWeBE*~0U? znQ*Uaf|FaGFrg(%tCmc?gLF<#^6qBfN2n3r-mD7nG3QsZVWEIRRyU(E0c4{1|HZk! zbQZKg%y!j*3d76QS(6jdvEKuuji3!MwWwd@bssA!b*ki}3K?sOUg4CeoulL0*}Vyc2n0ow1EUH5zdaA8?17J_ORYiX)Z=uv{i4DHqe3_m-nOC$f!P| zqsjyV7O0!}E!&}Y^#b%!Kr_Bbk&_}d|AqPj9?S7Q3pX9h`KHCXgkq+{udnZ-ZKU|h zmH4WE6_Ng{Ig9J>TKwA1MlE#BsPR`*6QOw~!&IObhF2^IGB6CB zJmgJ%ZJ5-3U1KX5xOaELd5r*eD7UMbi-2{V@ghY?d;92>7!Ykv$Or3>XM#-5{wN+f+F8& zqf{25cS$LO5TqR4{K6vqB@eINC}B|5}oKWP_)&wZ2jfF#YKablL3m#0~EFr5W*M2 zA|Zg8A655?DX!sY0&!4s!F1cE6j@(%fq9VX1KS-`I5^0SkX@5p?d%Wl}YGP-H^Y07M-X4Vq5(zGzvdOhV;SgYZp+)tX zkw#xn=UuCzw9zrCk2t87oQc|mx&s3pu1x&%|DytxDHuXPXvh{J0jssm6=!30%tQ-1 zq#(*l-|_=Tix-hnXXnTTV+NaO*GZSz{=tE%>u2bmErl@{q!OULiX#BC!P*)TMIAk@ zs;`g8@9hKN5mkZ~jh0q|wnH%Z^IzNmkj)g&K)x>yPGrXkRl}t9UwRN4I0?E+#$ee` z7f$)*_y7CLFRGVPfNud=8M6hfQkL&!X|r|Z5Qabn@InKkiqr|NqKqCjOG^(|56e;; z+#m6#`4d5iRd1NaAd!kqFcfPBW~|4DKp;$1v2Sm0J+6>+S~FUmWHKJ7qad*MBnBO1 z5XytWh~m+PxpJw>Mz|`VL{9=neFb7d)97iI?&*cp`qP{X;+d}`lAV{J3T=k(?YmI`YMCr@AcTp0vyiR zt5_}SxcTTC1DTn1)90{%3JKJ*_C=xWZpV~{MU26Ny+7ph|#_U38f3iT(~i#yYgT^uN< z(y&vD6=V9B&Xs*Cd$NR!so8Aj<)BfUFLaZ{TbDO2sWY7o&z-vUgs}RoVvy2EN3Krbxsw$EmaLEFk=)oY^_K^O_5x!jhme&uL;|k4~Yd zM;kQ|67n769Xgs7G%Y;*c_dge%di6cz5|ZNHi#mjYXV|%eqgjUDu{YD@fx35Pffw1 z)cVV_?f6=*=OwSzG2Yi5)l@0-jOGrg@IJ=U#u7S^k>k~0M>z2fkOBX<3UVJO2#*fgwy=f$B*~z zE1h@2%~?n~Z7Qn~g|+m@11dZFgEhqY-t5W(`W6ltO{5~stS{Qc)D#6!7uve|UH^Uz zLL62Qo12zGlr~O|7gjK`Ly-+1cBc)``_D(_7b8xcO~D`l+i({P=2etxw57#xAZV|80EySG|imj%Th8O%_)fXLCLJ zg~96NzK*|=9f-XQ^cBip$IdHle6>U&p<2%W*Nnq%E@}od*C2A7yB<4BGY%3j5RrnN zzdEEEggf0`IqSE25gFaBlW>cQMwwPI=VS9EP@0Q!#v$v4jl`V3jWq;r=?9>LZEDE{ zPE{)s)-Yijwy%apSGqB2T4IhKMju1d%Wxr13YmhTj~6TD>qE(Jl2Y%%b@luvIw;ZV z68=WwfShwa-Bc90-N#|hf3jPJ_JMDvCC_NPP(b(uP!!rIeK7dcWDX^5fi4;{h`F1# zSd{i#P0sn|%o+zD9~A@~K$YXC^Lo!SLM(I$9ddh&9tRK4)W?Ssq{8vDs6-#6^qY55Yz<;CS*P^5y6Qd z4u6FsMUC_P1>rQ8G(i^(qlc59&JTCj?E!|kgqK>}8f~BRUtGiPrq}0?HTa*cM=vyP{-TCrAK_FXO+u7OK zj)#Y~ldnbJR^O*z0MVJ4SoGJg&q~Y7B_V+mzm&~rU1UqOJA9kS8-6n?61>qDv$574o|KV+u&rpt7(I15`70~p za|MmwSk3=w*abXChn2P^p~W9j1Zs`WQ8~xgr(4eFyPA~Zew624RQS{)9ksSIKs2NF zPv~Ru-n`-=P@o%8{Hp?Zb#-;X>v)u)?aB7(6+vssnJ0tPB_p<%bcd^y` zvO}N7s^0J4CqHx&PD8YOLifW(Fdf>ba{bPS2Qi1GrcfYC)Nk>4{_hLf<4wimx8dPo zWwsBB3)BP`AKiSDrZ--(kbF!VNuH!jJ`c9Jb4$5av$#*P+*du#A1W&<-YUlP)jVjA zWRl$yF#kMxK$Wm4*mR-w0mD@^Q^8xSx0Y(=L#rVs9h%i>MpU{?b1Mz(;{tB@g%#{C zyBH?uxs%;DmH?aDZyoijC5IdL_^?S?`Vi^}hsRtE*da^Zp4x zSi+s$^M(dxtrDuR5poF%h7vF_R#vqIdbN@>DnKbK*_=jz;KqI-YZ43dBeMiM4mCy4 zhENu@?H%Gd7Y2&N>|Y6p1b^on)d+RSSXY(j>K~E3&kxIY!>PkA`&c)9x- zF%vrd8z72|iK##PcXxgIfTne9cqQz&RAe*I(o zB3Zbrs#WV>-2zka_NJGAL$IvP=os#5&X28(Hz7!8j+njk-W($HIWIBlot-63OiV;p zXWrwq9c`q$FL(ZIzq8;%Ao=}I`L(sRKeO`*XM2K>eg1cSS@EX!_PFjx%l2gkvD;VI zKvvX#o!b6v5RObg^1+N(ySs3F7yHedH&; zD0=cI6kZofUgg zw~Km>TJH}Ryb(dW+YRB13q}7jt?u1j7Jxr)Zf>{$t_1kFmhZqh{5;Kt3(+AMZlP1j z#(F}Vz0khUUM(za?f<6^4dVtIic>gcgA4}6kkG7+E;KCN>)}^2cMs7rU`mu7^=uXCneaiy1=GypF6CZ2C7le z^06(TSFr^^p@Tu7(5+`&5!oM0KfdB68k`y0zIwPl+PFAa00pQOg#d-Tw6vrJ3#zSs z3j}_vW4SUQ$s0|UgdyZN6iJBKY4WJCr6oplb8}S4*N&c^_em@7z%=TO*dn7+wYmvy z?6^Uob1zYzhyoiemt?))fq`JCBo`M~Km-YAPDRC0M>PqDe!yN+nK@1Q9=Wh@yl8*5 zJq1u{m^dL8I@?D_G4`zAMx1>#$D%ArBkdeQc&l<4kxGN%h5`GyQq9Yk>xgNFrEznU z8LIFBb}#Z4n5Uf@vEo+2Zx*E)^Kvjj&5+QgM787XVd3Ebf9iSu_}2UK!-o%m zJ2Emd+RMpac;|H+iuy;p`&vvXO&~BTDyn=r_CUbr$a_VqQ9lfTcE5WevCGC$>AEHT z?;m>05uO<4Cho3w0d@*rT7o=YjeZ|D48}%2#d#%%Sz5bT?req$7LOJjXQ2 z!67#Ag}sWL z$pYW*xey~06Ze}p!IIfo`b+)M!fU^X1NU@EMfd_*)zE?PUTY>Z>rm4~6=m~{6S3uX zy&Wb9>I5Ey13eTzK0XzepB<#AbcCTn5p8W^0Daixe`8`DMBWK8Dn+k7-0Pg36TK@! zN5PtIviM~zG9(2=e1#T)*kHP@38IlFXNMN*r;!@kXDv zkx?JOYFxa$Xb93}-%Eou0cVsaOa|H6*%{l~VgnEUO^Z;cGbLc3Sp~c=*Z?UQR8;i( z?DEnKz>~ebJ=&10_V)HyA9=2l8nVl#Y#Q8;sP$)h&(2)`J|l*DWh^$jV4j|yR@tXE z<=gqupn=_P+}E{~zQ`bMe`rSm^-n z$gzz7nG67-;x}V4cx*R*_cQ)f?dN*!Qz@elyA=;uPxvzav&}WjUlPK{&#%goplcX> z)OPEzSHDSK;#&$F=^v|6r|?lruxZsS{1KqG&ieLy`^9GW3fO;R_MK^=OWe-gRs-cJ zyGEZ3tC5!dyE+Cb`TfIjjQm5YzI8vZ?crxCAH6suN*{E_{2U$ek6JIOwY0RJAX!04 z$rN}hmq#lyKv8c9cx)zHfqZy)H-JT*l%C!@G=u}J3+8+vFZ1*y<9A%{!RBlMlo6>n zOlSJCNi@fkrNj5wgOm z(rVI&1Ca!bE=8ovsA%}8&*qy<(v>(SW#nP=QI2j|-G6KZ;c~BglY#6;Q1BV;;vbZb z$w`gDC^K{Oza4Le7v>!>K|1F1`$tE8sg7-5fl~l_0_$^DnbQ9L;t)EZzXhnG{x~L5 z8k#$6p6RsA3fL#LqtqHA zlW`<}gu;gPKbg(O3*3vZ1Wd^D3V$j|2w<@ZLDBD%!ry7V=v51V~ zaWRgSz=1{Epbys5HLZWM?S?#41Q`#~Xx~^SH%`P`eRJ?*B)DGH*h-z7(*dw#HQ|$C z=jo_8{z9Ge#lB8tWaMh=<#PAQ2@imcdenWxRS9zWi6qm9haBYw%^0*Tw5?v}EW{)v zzybpl>=QIaMn|uYqzjW$QuYjTwnrWxI|DJ(+I+1oaKYWbe?ttt4{EO{L6PCd=V@So zejrKV2M6p>EYRAABsJ_>FOXqLur4uk_BI8nM7|;FsV~$93`QpblVW!*JlYTeH!uFh zq>UIK|BNbgL!nklr9DY#5QP^h7hWeinuT%XQ;v9X!FYp-Nm1@tnsA<}h83Zmse(6p z%EiwgzP4uaROZ&tx`8@(I^7&Dcer*Ypn_(&9UUE+0j6CNGHLTRUhWmpWChk!F!wap zv(HVCnzuLqYZjnvW)BAZ&`c*f4oI_d3@gl>ou6~IU9AV|xyil$AS0v7ObC1u$@mCd zt*@)s6Sc0puSMR7w{DM5~hV=g*L~BQs-TS~Uk()4I48Ho!sv z%KZs>v=c)U5{MRCJPGda@5|IXHrKSQ*54D&7Y)4Jq6Bn$cXu~ZNF!owF!fv&-fqjri-GkUUQkJjBmC@BeMB_TP?xh0xgQd<7`l!2} zsK$F2BO{t+&n+qt=F(2;pR{)0701$&&okP0z!C@H(}?vP-Hja8OiMkU8$E{lKWzCU zfbOxO&#^Q>Yp4=~QWbMrr(g1YQO5=AZZD6_TwDn19hSPPN5vvI{f;99-1bSIt`+dh zfWLF4lA5mSwYHE(6r|KR>P)xX$}&__gU4lwhUs_nu2p zeoBOU>BT8Gq7qm{ot^LWn_QoTN`fUmxBn_Aa01F20IXa9-ta&vd_F*c0)$-{`Ghev z;tmEWBg4aM07?MWYbPo!F1{is*WS?ZU$gsBPJ25Izr!LZpYX{{ZEkHH$7S9zJb-9F z$3GA(e#oAU86Jl1?>hw7;Z9aj;o#z;#%CRRu5F%NIhV4r=W3OhdR&q2`hm~AaNCZa z01tTjPYw3@c^0+^V>h?DA435hr{tK=5^?DSNbx1!b$SHI5Yw3doU5t6SSEMBTT46v`wwZ-YNMpJ)j%=j!U}qP+)y`{M+BZ(Lb1T)n)=CnhE^m4uan zhh1$o>i3e8RvsYr$A_awyg_&eY4FjlvUGC8|Afl9SisT;s1gkXuxnj0KCEfgJxu>C zfhu@S`geWXIlIs8!U_VgOvq_H$Id!?I|qk#ij^yjwu{<|wX>ZG z6{r;jK*t9{-JV=Oa7TlKgSYqgY&CzPN;+0NVLJf<0Wb~$2q~m*JJETB7+5Le76pXX4Y2w@|gFh8@E9hWZOyV2oE;P<}qT#=z}1jR@YT87)$! zB9y`j(WMgX00g(l)67RoAcO+cqoe%;Y!L(yBj@7@rx{=)(p;XNC_qDHdi$FnJ_AqU zQ-vWq=qXMSf7lQQew#83+r|LTe#aNUezv6Sp!jKSFelJj|~V=qiyzE>y7m3l;s zh3>N>Z`Adv?Sx20?#UnA9jrXC1I`uSyizH}d&Te8{tl>6F#zkUnwul^>K)d4NsNH` zn2x~9iE?)M_`P9&wB3#(*+O=XzxC&AHI6s7^CcsntnJHjI9Oa->;xsJsu-hWWcOuj0itz#;Fg^qrS-^q=`fCnr${}1bJD{~ybhZvx z5(1o0RZGj_2?Vfi;>hLSzkh>8fcM|r2yJd|Lebupz*DI9FzBF7vo1iy5q5t57DOq@ z6`%s-nGMm{g9S)Ye8;v2d5?pihP~~N3+*N@=g-0rGTgi#IE!wTEp=h(2kcK&IGB(6 zZ!u)`v*jI0&JR^Br$3dHpp-SBfPe*N3WMQhCMTho5vhPrYxcaO%3TKly%UMk8kJV(n6|fV#WYN*o5*ddjyj66c zC{LErG;}>yoifpBt!67p(5~3w!wPZnezWy$ujy)jrfvGm+!31G>vH|Zpq-r^Eq(tY zjjppZ-iN=+4|y<^7C1a;#>k(Fv;B?-_}u4T)wk|kb|;IpUZnxaYjv z3?N7WMiS600Ap<|w|dVmEk&_KiShA;0Yzs5tc|$1H~`^00OeT;R3eZZJZ0;EsQPi+ z3e?Gy8V3%Ql$_jocPAothwQ%M37`dGlO};!Zl7}KFo)|%V35dZM72n((ul>xsgj1X z_3TC4mH*w5wxLI4>QOtURTj-gpNtAA`MX9fnOZgQR%wD%0Jr#^LYEY15dN-cDrMF# z6(ywZ#ymbtjbm-CTTnl#5fTvK0=ChC>UUhW5QAftPI7>Zz@diB3~)cvMH)d+6aac= z=jSD>w0i)BLuxj=xG1uEQ&(M0klMk);Vk#!A$_Ixu@1=Dzu@ZwN;w^EsnwfALVL8$ zlQcIrK9}Hfb1M%`O%mdf5iXbih1T1*Io35J0f>oNEd2fzbDUyN zLi}tfcUU++jVWO8^z`&HKe7}_rWOWc69MCmFf}+|GKKP-xhUL?so!#E*YbrD3$=() zKa1v|9&962DTkIQm0>WIK{T;8p-Bk(^Rt51L$0gbR9N4z9^55WVO=}h5qyA6ds!=5f&f?5az3p`MZ!w6(zH+)C4Lnw{&}q#NS%&+ zwuC({=B&79e-~*m6C$4|%;>6%q_VDV`rDjiCPC^Szdy7g9Z?kg$la0(Q$RLm-tSu- zuSalFBWb_u2>%Wk!1YY?>G8CFKbOrw76BJ7Zg{n$xp-Ih^3?fMCygr6fOD|4UL)@9 z0Pnl>lH8FlS(T_P97Wt0(^kpL{VO9RQPrF9`v{ zn&oA~{a*Le*m*b`Fs)(c;D86Ps>zCTeF<@`1PDTG3=D$g--~L;OE^XAmf=+#2ERbD zQN3ylUT}9<3%(r9(JIT)c%7|Ply&G$N-h5NOJgLh@v3B2qcc7e;aDM~1Vu2BF&Onf zOgUz@L9m1bc?P6y%f!?9xjZ&@l8`8_9Oxw)DZUFB$q{E2i_&-Byx

    2m$>L^mGt` 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±`-~PYw-XFLHpZ~r0<9A-L@MaaC{_1nM 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%0AO(Qd-&r&|5Lnt zN{X$iJU7AI91_i+a=2wA6w54+8b0OI8e>rC7B%DCY&g#JZJOJR2@sLz@US(iN>{sfQR22qW|V~6xVJ*sWJh(0(+Eq#&x;q zZ-Yc_9j6{Jl#PG3_W-1V4FS^8b{#BJwhTQ4gSVUu>|+N)Z5pCBFhQJm-lz9O@z5tu zfrXjD}VEekm3F>dot;m`ZX6a-p-Xgp2M2hzXT)MVZqFj;A^Uvf zFt>*JpeD9``TL(YeiMTMGypf+?8`LV%ws!qnmj!xJj$X#aE)v|Pg%*g^C1vL+*t$b z3^q14aO6lA^Ye4)&URsHx-Z&Lpd}Qlx(91(Y;3IJ+O@aw{Bs|}k@-c;c4sjfk68sJ zQB?*-DIrw>tras%#02m%1jU>CXkCyGJ z+r2(otqx9~J%`1?0=BodFdh?Nv^EY!tBvL3CkRSxD{QQ+00Nj_I0EM!Ha0h4oW=Ra zFW|`HB1~PO)tNy{b#V9YeO!I#9bA9sZEUVTz{bV{j7B|-$9-lNk?Kqefo`XR`Pn(F zudd_z)pzjfE3cxz-6MX0E^zGFGM>5kEb7`|I2@*HLP|LylaGI{dIi;iO`lR4YZx zK@QxEz*FmJ;bg7l;cQIUX%w3=nlfgpXce%$w1BgxkD=QsVJfm%85b}ZSLhGM*y;_? z9}o-a$ovdWpI*kfvnMb&*TMC>TOVoPwC4ceqxiwo_{3fB)y; zXD*_3{4~xil~@@^Sy&Io5y(jZK=%oJ<(Ga9U;76y;Kb5A9{lwkeCNtt3_4HaKm6)f z&>C&v27nM+c=nT@$A9uqejVrfui@Ux3hupr6TQkL?^u4kos;Kr;jxQY{G0di`dhbg z?-KoJaujXV)F@n=e<{P_k;KG+Vu_0 z@aqhVpT%$ev#;SZ&z!@l#r8wZ-EPSNhmmjZMatic!LXMcf3Kgh^UtQaj;4t@oEF|U zO_MyW&1J7thJzm0haC*$=k-zV#bJ{Z4tfmEdDNAmT+|f#N6n>=vTiOe9D68*Byuff z-%_S=d?*RYTLUj>Bg}&UYkk^ydgoD_nj49bNY?pAlzs*Pevpv@Qm{{-B%4u6P7N(J zb|UljTN5`M407Yd0q^2#;Rqe!nO0AQyDQkJ7+ zl%R;Nsa6xP(WkAmU_WOFKwa0#%TEQNpV9 z^c8E(k$=3A6RlLl7X0T$k;hbqv@y;L(qgo!H!y&zDF08HfD2ftFmr&fu*0p7+w??Za;et(3bvk0LqkSdNxka=^ z?C|=>YbF&{K{j3yAtnk^YH%8Pe*|(m=O7_qyh+G|_WD^ZNTp zB#&EPhjf1-RTSO7%CbbEH9P`LN>kuu6_!4y%_+krop&(CqTtB5&CLxQJ$j6bek!ty zQbScu(=FJO8@suva%vI>#Ke1Qjh$!`cW&^ckgOVMI0X%;tNH%O#fT8hI4H=QgoYq5 zxXErlw{h@cjbTL=Z7M12Tah;#lA1%#@E(uHSXo&`XJ!U7of*_K9#uW&IL(6XHU`yr zfV;PE;_jW>IDfta7aT>oK|v}FXDsTvPJ_p0_!W{3iccdN`-_?wjwGTv6Y%4ZH~w=o z%tiuh#sN|qKm|A9efC)#Sq^4Z8K_lcac+}?34kLL_&l&hh?y)Q2djx@cm@Dc2?`Tr zegkOs4R4~SJdlFM(|ap9>NDD4VzNP`t;fbtJi_vlh73Y5f@d-zfK(22ok>-o-EO0< z4SL%>+`WAV{azonts#_1%$|0ug`#Yst_|kq=P)}vhm)sHq0|E7VGmnd8(4dAADdg- z@Ij)}?x4^G+MN#OX1mx}y^q0oL<HaE9$>((vY zymb>Bo9pQHx3IOnf#Gl)&ekx-l5zwJ-Odb@5LjPb!zTqq1P4-g2)Xf6c>amAc;ZxvAH01Dul)ISto839=@t2pc0;qB4{cQ|;Byau8 z|Koqgx21qH0{}pOTw`Txfb)E8kALoyc=5%L;qhag?2z|A=LeCRPy6rf_q+D`-ksOk zUTTDc(EJ~DtkWFdZs+B&68Zf&1k-*l4l|J0ZCG*;u;X3;$-}&c^t~+0vJ7Feo@7=r z(ksfPt+i-{7Spo{xKp{B8h204qEr%E5i7t8o)!xSU(sht3C$brfVwsap8Vl;?SY`! zj~`%dvx$g911eBSf#6(#^&ZX!SX)6W1!GNu^Eqc>ZIl*M!D+qajWYjlM?`oQH^3VS zrMW>R9siB?&ns;UIBv&KTok|b~m@FwBlVVr>wj<%mv%|I6t9*)6$0s<~=s*?{i z<;k^8ytjyv6MfrivqeR;p#d`uoFZq zgE__~m^^}t-WLJrvg9F#gAazbFg!$(NP9D0ON|nue5%Nv%;TPI_QKk<>EfN(*=tg@o2EG_0v6-#TOsi&i?>Dk88i7Ai$i zrY0aBODxc70~1)cPX0~;;#o+kIbWWA*;+%X=6>r74XspC0j#a|v9@{-wjKh(CIF(A zK&R89XgozK0AnmVoi22tQP*Q4-Fv{8Izg2h198Zrj|30QFrjM5vzJA-!OR;H%RX*d zmPt{92ziVfnpo_yr=NaC&2gcMH`LTn$Db!S!YZkaCNkRN^{FPdoN>evH~g`Yiqh-x zc#Nu|*h#4!hAhEf*iBUD=^Fg0GW5`~C7_}A$NUmuDqV+&X znIL@B(96u9jciNLpM3#>hPjMPACM&v&>#yUPzs5ZlvDy_zIefDA9U|SiY}vjT2U0u zX9j@x4QB$WP2u4}p!+~sv;Zg=YticsFz64lw0I2dj)CY6)90w$ox^x2VZFoZDy0G_ zrLny|K&x!=04An82uLl{Ku0S%@m%#j!qSlLSNT0rWM1h>JDT8T8#Lfc^7fF(>XUU= z)9f`35jR{?Je1xw5#Pt3D+DAZSO|bFWooV)Xl^`Sk+!6FUDI+_v9!8@I&Ijmn z2Hm+?bh~qy>9+Y=5-5s-o;`sl7imaiQIF;^J2#J+P8aiA+Zc?-lt-h0!EhU^t9Nkg z{p+YkBS8VE{oWP^y-j#C#`eZ4HrDQ8INZi) zG=TFlc2ZI1g{Ohqcr?JZcUE!j>N^+?di*TXn3QUbT+jJbTOy_4&`=KPelL}TGlJmG zAtX+P^C5LVafs%DR6o(r5NH$(1WEPYqpru$#SGO+LPDtkW9j12g-$%fJZ{!`pV$%z z1o)eq@8a0;qd2y_fQ2J%NX+8Mtj6Yc9~+wkNGUNI8EkL%F{p>AYRA?*0a@tj>gHYg zioN<1z1K8hnqPL1=I0=U^8BBJ^6+4CX74t>@w|+!N2|1 z%T(ml!vrB|w|L@JjZyde=^@ls^q=7D+zf&zd9Lg%;N1CRc=I;BsFO!$ zG1Dp_4)H!5w8=dT>*2#Ru6rHVVLb8&xhD5(ny2}B`%UUT>aYFY=Yt&YkJIiEzle%2 zDawjtpi+DlH;}QB5D@tPhXQ5+$FgV5Cj2&_{vC-iy#Pu2)amolK^%s!=NZea^zT)$R^n>vb(FQ zyQGLn}uh*le9)|9klMx7K>!=Z$@UvK5dLLf<3tv`=F2 zg3m}Cm9F>((4)<%OuvT- zivYl?%0XLVF!a7B3xm?oRfUPM$cbg4{ES#<0j1G*9h@fGyw$=jh{bPccvoj@f}t5b z#3sp9XAFiD-?jJT)7OTS3Nte)(n*q-TNrJaFEA;7c=5(d0V*3?qclMg6JTX}z=b~* ztaeM5m~)2X;tg3;ErXQS8i^f@>;+fQpacnPEB4!W0Klq?aZ*NtQ1F#zm%d@&cTP~5 z&Y820bJsIc^r$ML*CS>0U5f_~K1SP|!5WV)c%&2&e8({$pnYjuEB?h zx~^fZ!SZ~G)6-LI;)V(;m5{_!nRwzVF^4g3H6V?4T*T#3)Y!n?5NnNOVbg?@i-eSb z5a0_uZct8m@45J81ws^=XkFKqgisVK|n(G)RV+J&<46j*3myO}xhQ-DXzGkXP5}uS&S-9z5Ir`h zfH=;ZH=6Cm1ZU0s+=bv_9W_1?fsitcriR*b)#AoAgSvKbCSy9$OhvDdD}&gquv)G0 z!3RG=UDr4`yoop7cpLZb9iweGFjm1?SDGNMNc}T6g$4qDjPa4)_F-~b-o`9lr>2o} zx)i=cGioS$L>V(|OEiYCIr@DiZDFKvBF4bTX2I4L1%mDh`CK6vMcttOVID;a$cj}y z%Cf}!!T?BEHvng|($8DXsthUQAXXk~{Dc^h5$Ih|&J|Euipu~3LH)k-?8T;dwp2cc z(Xs~6u%T%^R_g}FRM_3WhTXkA92^{Cv6y2rouaBOy(f%?vyK3zIl+gBu500pK?)YG za*cQHLNz2g2L;WFluB7BN3X^yc?%K4AGvn4`bz<20W)P5scVS z6fzXRO?fB+nQAEXF=5kepe?=2Qv{rLysz?z{N4o;;8pqGsxU(6cql5BnM$DH0dFD7 zJux)e0D)C%O>33+9@cP5gCeeo(H4={hGN;_!qOPaDgX@)1;h7*tt^za(AJ=yPcZ2{ zrW23KT39F`DdcF-wgC@M&vCX~L)-LRd;cfx-|e$bOrK@bf0c~*PZn1VzVpxi2$PdL zSk%C`|EK>J|M*UXaX0by>wg7bc)iAVtwqL9;IID5H}G>`dI{hD`|lw70PVJZ5t0Jp zqYmMtKgOSYc!V#_`4|F#0^lF%LLPHIlv1c)`YgV1^DX?5eiuhE1914)e)EgmaF6Ii z#QtaA#xMTnzlzW8e28x^kMS@oTt|kTU&q2}oUJui@dp_$To=Zrj%20A7#J>q1!`yvO{4*e&QZ!DrGWWtx<$esCWeYr z3prm`E7TJzreY#lu1FlE+bz;g%IeOjoP#&E*1fk-h**XO{h2HnDJOz>sFBCAJ&)N4*z&oS# z1xYYVNbL|OXRY0m71MFqvZO2U#KzF(gpQr0k9jnuNGyj07k%}lLdDZ&l6BX`qdQD9 zGso}+=n?5$HXL$I#_9v56x2w1t0k+OrKx4wmldZ^^u^;lcpL|%fT#k77&h7(hm=_M zJg900>84^^3V9sY>ov|!PD@c1*|Gv zjtSGcMjv{zs~{t5+DI9;ErjSVMCnQKKg5*Dy(x__l_J^vat2ahcq0(KFTY2RI1gia z_*gzZzCL9-Ezy_*E`p;c$MJ(ejO4YZIJrS;yd_&tYKZL1!@ZK(&LgsHN<<*=;bc-X zfjYriJw&21d0O*SD#XAU*L2Sqtr5IT{S3*ksZ2-Y5}58Q6ncM33BC8I9A#>2V~`?k zaJ5o6KR?CE@dF?x1W%i9>nx0ArBXl0y~p>P6n(?`gW);~1%A}@p@u1~H*%kk*9v4k z$|9%lR~kiOpfea;MrxjfD4f<}Nf4huHBb|?WDHau(ikM`Tw?Wv&k!;x2duW3O)I?p z)?0Y}&DU}7<9j$cJwtcCLQEP)XH=C#?=51^I6i)e{evUC_Qq%N=9_OLMU6XmKP*yx z-$$S_FiJrsRT?coEWDW_Egsoc#_wg}rU>6aJlVvs8NB@T`yxYH8KS9%)P(`&rb{6- zyz9kkWG}$?V)@>bLTP-Ck9Pokl2UD8^zizv^9A5x-r{p;r8)K|L60~;pNP565g{iS zt+=U>7{V(LGl5Xat55fU;Rc~JWvz99(pa}0Hf@8+WP%$vU%_IrhnT4eS5Ir~?#;PL z&vrURDy!9cg|_Wst-*X!!_*FaPnJDxEVOlS>l&eNv09(u_K)Ak`|tiaHtQ20^vIDW zkglq6>(;AOBr1h|)8XXk2=Bi81N{Cs|0&-4!S}H|KY?#H2%)FOh_Qe&q+Vb(g)_2fQrduS$3eYitfS#W22@t)xy_RqimZ@OIeL%QmJ&Mvj)gXK z4Ko85yRPTBXL|Q{eODr7$NQnu2y&z#%_$>mR>mZ{|NEZqUtJTNC(f~XUTS#fp zG#!?!22B?*s}pnv+AibtyusOdgVm-((|LrL0cCK$Y;gO-``F*#L5w@kF*l?;001BW zNkl*(&ktcK)U;dfb@!B8FarD6&cIWH(+Ut9u&gl%-_9uAfy?=q<{xAP7es@yC zH!X|;HmhU!!*Af<{e_>v-}{Guh6msI9sH+%=XXkut9;%3>aXCZ{_pSO-svCXAN+U! z8UA;cI#rWHeE#)Yc;i}yV|lp&kIY(qnqvC0>vLJd;6)by&r`fVYct`hjgHHT;YWS% zWkvPHf4-{9;aQ-CS9!j#(hPYN1L9e(3&FCgviXfM7Jp>UpsC%3c%KjgjJ8F7C*VM1 z3=#qZv>Z(pQi8FLBi#aAZP_QzY9C7-aTNe-6-nzWo)0NNsd@xQL-CN(#>a9YmQYJp zHWxM48aPYExV07&ZA*mC0O3nzGCY8G=s2x4r6D4cPQ{QMA-QW!FZ)Sd7m~emt`whI z54q_i2OT=g<9{yjx^yMan;mVs8q$$ZBhY%69>RWBU}ATu{RvY_&y!T)N*ctLGn5}B}iqn zgCaK+u#`+gBr|)QAuYc4@%@^Lf`i^LByl9gfy7Kod}R{l2qZ;76>_yqK(&rro@glq zWa26md^489asvPyXJoZ_qB*XR>GLsA^xxU}8Ih!WkKiMNB1zFw*Apz}3#`{0?CvaZ z{qO)y+ad-}K&#VJtk(^!wFog#ES=FvFoP;4DVB1xe?QSNDVA}LiT~DGq~M8S&k75X z@M%fzU=Wm+O!tv*eB2m%)csG>`OM88T?!{%)GREzAMC580Mc5cs$?@cfZ2?3Y&A+- ziji&Eb!J&UseCL)D$4I3vf`Q!}SSvnO4yr%2AnF?%xlQ@qhL+8`ovGnHdYGb?12qG?@Kp>h>c zB>y?FVkjzbcW)PmhX?R|kNXcE;NF(Y8Gmp8)pu z_wnHPV{#HElp?H|n zkawQasCi|JO+?m9Fp-_!U6H-gs>rG3XJd@zT_I~C{hn9=g&2Vwh5oNpD7=sDy@iIL zB|;3)7xwcP_o~vw)6jICwP6H|8lb2Q>O%&yGPM415gJqAXEvd2$-=bQ-NVlAJ{CK> za8-qaYr8l&*n@SfSm9IDwhh+n4ML2lYAUc@Wude|r46*E^<}=8qjC;iyTS3%eH`CE z!t(44UAu(Nk&|pHwuxz|q_AGDae8u!Km5Z#!neNlO}zi!yI8MQWM2q922Hv&uCyE$ zrn3p!w!zWS5!p_U_wNeX$TMs|=~-YwE>GMXA^iZky+ z^i;t6RCpB`8NO?{1*x`xsq_rXdX``;DKT?m`MxsrOo*aLo=s$)$^+L97Pz**2WvGq zOr_xjq^!|&0jH}qmPpt%J$k2UAkBV0e+gT)OX2RwLijC=PUVzpf3^lXizlXI+^4nAe9n+|tBegNx$ zkM2zH@|&NzQa$r1j@J|S+m8dTJ!_G5)qnq_qEjgaRqf)f&wdGCYxlQ*PCLBvlYa&O z`oH-NyfOnY{Stoh8-EjL_ygSEM40LZzVg)@c=x;Sqt6Z>ymyMv+`5UM`P$bo{p{N~ zsE4BZ)>nT6fA#BU_|tpGFp~vt?#!_BlV8TqwHj}~bwEp$n&9=%d=7uParjF&79=x$ zOyPL*3tz)me(3@1OCRI#E5Cu)rZto@IDF}+@o)d_-^B0!lOMt-VE5LWcx3@Rynhd8 z?F!3~@C*O(e~x4PJ$&nf6(S7w_7_;p6^@Q9-hBBw-25&4?f>xK$Bn(;!9RQN9-5e; z^bD_m_80MQ{MK*am3ocaufC0+{kfmR8?Rn3Nd-?Ta<5w0J?ZD3bPb=k=)USre3gd8 zW&i$hMfbCOo@Xh*pY&ND2R(e;wRl#m&5O7e&(BDp&Mg&?8X*kiXKO7&7^be`)uV~7 zMqN)(Rk?V=oU_O*Q8R`>c~Yp-)QKR085x#i@vOBl+9K#7D#`MOIAwzW3Cua|7^(WSe%FJku-gXq_Jc z+r+CoE+QnaS&1)HWwuP%0`!5R-)Sv_$O?=qm%_h%rUG!2L<4@7Vqw4|<-jx23(uQ) zvw70xJxzDUaeTx3bevmEQ#_d}h+Hs6$z#u)LrlJ8A<(BxQ>n} z7jT#=9_l!XSRCT%hB&eDbYIpVDta)oZm1Han3F28a(Z+g+g2UUUL2;I^w8#MyP>;E{-W84%1E9mH*PZ5cR8_M#&5(R;V zhEYJ4>&$DW=7v$B)8~X7asd&_vz&PeDa9YF4H6Q34$w+NYloPD&8CAf4%cs7!@=P- z?C$R2;P4RB`4oExb3om@?(3r9u@eo?K+JA6Ky z0XgIN_z2$jyp~#AyLKJ7UU?O-zV;dpuU)6e)(}hMjIN(5P|M-HpN8ZdC|Ip|-44jv z^K+leL_DVmPRaRtlxLw3y?o2Ey#vxBK4+UQkb2;`qM zsB4QC@%6~RlOnp!8tafTo6Rw)>?hAfN@&hc&}NI-d=HcA(Z9bte~6XOFlLJV{n=Ad z*01XMey-2@g1-OLwh&zPdmmS@zlgu_te^4Iwq88Xb$#5ijh{my7t_Y4N7r>YJ3GVg z{o`-qo$tNNi?9%bx3h^wa!>zE#WN9C=>;LhGJ#y^cNncnvZ!@|Sfw1xR2Sp;Go?xF z7AViP;%R=2p-39V&pr71M;lJ&3lLR#$S{v77MRQsqorAfiUMlNGR@|fxTpYtjH-5| zcre(?b&fHU1t9}DCW=MmiRo}XG?Tf<8}3KvZI7dQWP(m|QQBN=O@%VHu6N`Y-^EC& z@$Vl;36aX9E5(oz$(_htHC+!PtJB83;*CNqOoWSZSj;!biLDu6uO3UEk)g79b(u~s z(-ZKfTIrGmAjRRBn*g9l??3r$($9JCiyDF&FoQQ-fQ=GqnIwj7Bz+a&o5&6aXqps6 zD9JR2p?zYR5E-RXiW>lG%Mvl3dKf+?ifB}bo}%-X%X579&%T4(x8H~NEqdRg?K=2C zaK*#DeeCb=!}r8;nA8=ZC^B%lI>)4{aBz4CYbtcTM^)8m`wq+H8RZ}MJ##atiKAuG z4uU8W_#N%FV3dO8{AVaC=ydt)bepuQBz0Y}&srLRiq$_B85~up0%c`q zc5btO+Bu7tUb>05-hLbJfAAsR`TjdpIAdrGDP^{r%lrHL&{|`)T0!T8FMR&<_|liY zgl~THpQ3FW+`M@cPznzoJVZU2!BrD9O^ZJCI6XZ<(=^4_QkrI?;y*Bi?X}llLyQqe z4~~Fh!?8ou79SryZ@Dx^thGQ&h#W;3e1MPQ*A%#;9;VOvllk_vxn~>8Xx#{s764Tu zTqQxFsw%cO(J_%qO(CZqH*Q?R*T4Sr*xlX5(a{m!d+$eh|HrqHVem6w`B{AKbDzU^ zzxzFC>+ppyei<*{dL7f*F7^)&;9SPp*%`X7!)CLgwOeUq5H!yBO?mc1^aHSxKUa*~ zdG`ZUEyLJx<24uQ{&DW4uN3nX_1CybdkhdC;!blMX&sb?wu8RU- zhT=VhSa>!BUL5BA<=v}f-OCJiR0ZUyv_n%Ozj^(8x1d!vKg$qwNAhQ0Utp zecPeitnuCtzK7rYNB;-j`O`mv_ZvWwMatS5m7AiT%y4+)B~vq9Hw&^7em zecKTyC#$V%t2HSOT~(p3YlO}Z90skie{hJ`UVj6x+H*LH}3I5?e;h=H3e)&e;o#U5H`{CoewZ{fy`8>s6VbV+*4X( zx_5{vKH)gnKHl9!)Q>oqSBZjn)(P(8ir^RV`ycnS&r{q!$&>ypp8m)E@2m0%o`#|E zJW+#Jo#bCE#xDE)mlgF-8#DO0FQau?*r=E^qgb9X@pwDlNo#|o0Ug2gdc{+Y1g+f` zby|U919R5J$CkMPmoriQl>)TYMXp#p<~$)9$mP1o+Qnm<64SSVVq2g>KbM!QOjL-_ zi_wM-L!4DgWrHqXeecWaRx)tedmkd8!J9XZKikR-XRuAm16h5XuPvLqF}#na!ifu( zSRxUJDU&V{Vsg#A_r;1K7LD-+d@KtUSvV2Y1AFF)2n{|iV=Y38u+G6KyOjej9_|<- zZ-&*Vz=~y)NJVg8HuZoo0Ju?N2-+ypY?AJq;$fD_WEh=Sx&~<^88ii?6+%D64CP@% zOV>A%>@~~eUk!Ga(RnOV@fd09s1%%KDQgChGOTk1SqcNlR%@2>vz0--&?H~fpLoUz z)D&S12>7Tp`p_e1^8YWF=Vjs>d?<~T+Sbt8qG>zC5HO$3P*pXWW&>nke|Hay`5cq! z488YQ%oi}u!bg(%=8m5?XlOWeJwpQX@9~VEe=aA#M$R#k)g(=bZ9f+PC z7y@Vj9bvSC)|8SWjX7#Mp!nK-2nbRnYJ(I#psAUHkyO0M$vI|JzJ?SAY1{@>^^_Zx zkj;+S|_*##lfOM@Bf3CFUy_cUACISH9$-m}zKkXZU zdNM&hnV{Nqm@oEmcz7N2#R4%!bZyIOpc-ys;Hnzdm;wlv=<~(b{0OT4K362U0}nIz-BY+?n0|ecXKcCazt(hP}OgN|Q;X!it$JL84$1rCMf|lI(|QC_yiy z96g{DCbJ5+Zr#M;{ywa6FjhdhKt_a0fMW%w(Lf9t$495Q|KJoy56{r{WOLKXQ0y-v zGTThZzQJpCCZMNt)ZlQHg*8B3TR5ZOyM!DAd{D@UfJ#Kv*9w5}aWY$3GAnyHsbut( zQi27&yJe80N>a+O50Ifpc|T#WVkcG;`j8P<9oDOc0Ff~l4iP|uDW4_+1r|+w4oY0-wK*D z+vNo+N`;izM_yG3J|g%?^mwZa%t(W#_n{AE13NByjU7N&S}R076grZ@ZH#5&F+=qt zcyb4(3U|A@e^XvzJTjt-DQZ7+uA%-%c5V?3cAJ*{H(D4gr*iZ)FBL+|D3jz*{ z64_*nVj=OSKIL5Uv^6(ea!SY}NR?a*is}n23Ctw>V=;b~*g%%!k&JKv=gG!Agn-~f zIe$;iTNmOe4$#0@H?Vauq(V@WmLuXy#HkuJ;`4}Ypo?lO3kWC6F&Zdd2kN@U zq^>ZjDrl{+S+8(%a*C#D;HnyXyZe|-0=hmx8;ecT7ORVM4mH~pg-@f9;VjwRa!SbD ze5ooT*00trLP&59*eusLJv+z4qX)SC{-5KAKlm=rPLH9Kq@5|UWTYV~akX0Fl0fdxw}#YbeEF zQF&=`8jC#FM76iYMn~Z)tdda*&>8i_;V0gH6F>FSU%<6%*I*6rC4?h^2&4d=B65sK zDWKc*s4EMt3_=8s&sKmYMu}ozaMyPX3uId&Cklm_VIt7^fTr_QU}puyjHdTkH7(9p z8=Nm2oUdA}H!YfWLrN1P4JRi1YZU7ssm|!RK^`n60wo>>PunRR1N%p@WiPQJMawpn z(wH(3Vn)n>(U!Ca{2sH8RI0&KaqyGN0#0Nf0k@%$VeUY|+7iopK>hFHuX2y$3-FVV5JZl2N zi}=bVr#O|#C;{lyCz^T#p?#2ERgQ|+m^?*IjV2wrYhXjOy zDsOo+tB|DF$Y8!XC^AbZS3F@85E`9tmJ^PfCuU$RD25hNG@vf>XL**SVUQTMnE9Af zq$B|6?2r}DO_&%Xnr1_30C}J?7tb~_oHLkCr|A2D&^OpwEHK^QM~b0Pv_q80!-Tf) zv0SYXLSOu&T4^}T9$v{OuMJb_yK*m$pL_b!48uzUSV}0><^NEc2#yCR!9HskMd=LvbBq zK;{G#f^gB#$3O}aVQa{_>b*zbcSYhFBQ~;5^3UqClut$aFnAag~y5afq zMPVUU6~)hWjG3;j__^5{VTxBDMV&I1i;t5sq{*40M}QFMH51-Fu>w>c>>5lAmu7@C z)?yGjykc@UMeXTPY60EhgAKFFuF_f#OT zf}p&M1^`EEYDH^W9$H4srqDn($O@#`VoJO) zRWJhF=1kX|;yMSboLsMRywGd`QAPa#`TOFXgG6-d;`c`;=0!>wFopob&S9~bV}E}a z`@6fSoW<=A-pBX9|2^EkeH+v193e#P?(QKaLtGA>Fr7`YySt0Yq(W6WRJDaRq`0HL zuH-9HgUMM+1es22EYDZitkytQc=+H5AAj@_KK$TAq|oEe?f3EVM|a?T2hHpgr79@U zzC&A$m=oINInK{d$ug!DsUI`}@+itxbA++thHQ=Lw1)RBQltpGsy5i&+r^u2y^c5D zdK-KD`>3i3L35$u`+%lt(DxoWX@qkBS6laryh{o|*HGhdI-TInw_e9G;k@avTD7#-Gn$fccql-Ti9BFoR*P2jKCLvjS#x4*2Q@Rs zb{fTl7t3}--}wQksj#&dfLMtb#tK%!T zzwASNT0Zd?_4TaBcGZdU^GfO;^>?2qPVQ;%p{M=czo@vu7Y)&SlJet4{{F{(@2A0D z_%xoo5F?Y4!7m$K3d><~KpSY1E34u~?|qBDBiW(%o;L~l!m$o^0<9$;sX)ZbbiwjO zq-{54O5yvi6hK8TuQFl)Z^F2!N&zuN#1Kal4f_Adrc*`}V>16(QdWR&V6S5atgD&2 z5BL;{XEOJp#CF9X0Jn@Td1NG*L=e3w(n3XrUy78EE>n4+MwKi}H><7tVJz{Nb416! zJp~t=z}Wv>3b;%Kx8i6a&9RJ%w+2L*wgb7FSq+3322uz}%!W_~#qOne(o+--DZ=Oh ziiNBgt_PZqFd15dBBcoOn9zrSaj*jcr??Tq)(y=uMk3u)qYVK4PD9fQ(mV4ef+l;A z1_?(X%7#_(4X8)4bl~D&U}TB!4aI001BWNkln_Zk7&Oo_@X&xOR?3h_NM zxQnCi5?d6&1yG6o8a1jef{urES+jhf!{=CjOZVg0Uu#O_rL{wWnt4MPV}f%uU5Zhn zr*uir0KjU5Fq+m-a|${^Yl`JIhHWtm(c%`^UuP19qwTA}MZ zYK(EoCTi*N5-t&&DJEEDV4MMrfo9NZ=Jh%7a}v{_$SCS5UQ?CM|yd|Mh!ozgDp>jnKUmAV4$o`Lvb^*n2h4^ zv{oB3(9F6J8*LPnPRy%upLl=Enjb=hu@vtrjeL3vN6k`@@{HE0 zI5guDH!oD)vLYz(v&j4hQMnYWNft|(g3hX_pR6-*b&aa3FquxUySu=_{vNI!?&J1{ z@8ci+!~YZC{)2B}XR(7D}(>h9u2I<$d87TqP%;+3-K z3Pr|8-Pv5=dW@~7qL-&!x(TBLF+19Q#rT3$;0f$e_0&yFBN_FKS0qBknjW4Jzn_Qk;cZFcgp?O{HH% zlS;!yJxy3lnapUGVx}02R2o1bs*k0$;$x&qOx_}|kEgH{Nu{8aSTR)bvjZrSe}X9{ z?v6)f-V9(QSCxr9{cDknnlk04jTXzHM-#@x&^TO(o}x*CV(D?>iHeYZIjTpGRUmmw zYD|S40pqg9NWG9?dD20fPkyen1iPyew>YRhB9g|ac+{+}R9lUpA^r^H^Vg1mlVZb& zsZ3o_$l$_k0CNQLR?|f@IMKkAJbSS&XroIcmeB(-J;%iP(R4lAO^Z#_kg7yt1Nr)D zrLeoZL+8v?_{?X160^w+ecxkwehS}{+&ShJo3=;Ww6Lzi-tHb|iy3B<8Zml2JUK!1 z5mhxQP^hM9(6%k)R=KEwERubu)`u8LCY=*U^O5~Wm$V0P(Hx7{Uh{QJkBEON%?53F zI;IdpF3AW3pJP}LX|3YMmKxxaP83AJbF8Q?Y7lE2x~}JFQ?R;*C)*~&XoaXy6eKxi zBn9LYSYn@`vPRnm1d~wL6F6&%-6V5!WN0iZfE!^s4K@QQl$26vHqD@LiY#wd8rr(T zDyixUwGZ&ChDrScY>yO4v=%6%NvRa&c_Fn1k|M@O<%YD17?AjLQbC|fvq~&R#cK}0 z#|Xpe23i?p4YtsfHy(3O6kCrZ^#B~>f&vR9KpFjv(F5;6@w2@0S%x4#Re6qd^+&d<-V-mG}iPwzVxQ^6QR z3=QN_LqnHimdSd~3C>o4O30Zf$&wDiP0Ex~iBKHx6Uv&SNEwx4L^gnP+{9DdSV}{z zrXSq71?RPO%b1@>|OKr^_)z8BW`wy+sTGZPVZ+MfA-I zKYZsMeE*&AVzWBO{@yN{W`n-((QH~wXS-yHvkpzuqU#z~77(D(SW+N#9l=afA?8bZ z2(bXZ|NZac-rc*nbNdc6TojJ)-@|&f!r9p=R004>KcQI78ol?ZoWXQ9g)$mGQsY!X z!8t=Jz61ao^<;{AGKDb?^TjR}iy4+@r#N}I0&>Ena+oisxc>5W{PM5-B7Wm<{5oEK z`IW+1L8eC7>BAGurWPvoxO@K`IkB2Tja5<_3aRjOApfk$X5>RC?)Q|57qDg3R3y<) zA)#w}tj||CJ6mG8Tw=4?loXs|spR#PEGqPTN4Cb1YKoL`C#NekZC?~jk=2kPMpm8> zgg0fyHo;u1Dg+v&{p9%lAj&!GEU!_1ND<-x$gm?NRTuyib!v-kFz1ZO`~zbx&onZ< zpCYZ{n)hm=G7!5bsm)&eFs@ht#{c74HuhKb%3oGYeHzmKr=N` z5Vo9<;;<1c@-U_|%OsT=3n-gl1$q$_AequYBFLJ&WUbX@W22R(mqW}Yn_4z!^l~te zw5(LXRxBycC}L=u{L>5384GI_#s2|NaUdiQRA_8Lq^MBQC8mzDnQgH{OI)H%t%W0F`9OTloY0u1u_C+POzH>Gh=Xg zc!>SIJtDqqN*F+nSS)6kPUcvxH}HL53Ra0&+)~A;iy87L)5UQNpG=A6J{{tv=%hbz((GJd4sHz%9Tlhp=n4BW|o)R_!M_jI#8s0Z} z@bPVY_s{+WCr8KFUF^VWjds1p!{hs~)}ZTJI9tQV2p>FBrbfQp1LT7zMU=`zOr_F5 z@IAV&K}r!n`q6t>oj%0L$w_JYpPoKsnm++P12?*@F=RD?=HZ7L-VKr7OV;w#9e_0! zF+{A_YwYao!5NM9YKi6f2^1onGuYjq;f>c{#jpO_uj8-%`fuRo&6jDdlD?NbOA1KQ zA<$>nN@KHWaeVv`ZP#KlnGlhsz$sZ3={?rV6*j9= ztd~nH&(}CTS>ovE94Dve=tF{W6?@_pMVpqmUv8XBl&)4hG_eQ~ST4Jvsn7RKjMRh` z3!&^EL}e&@G67U#^sXg%afGX@vOm#EBdJu9mxN7}6H2o)rchGdD887QkOGU2G1By( zKOgd7W5X!II7W^z{uFCGdvW7_S-jZA@4KuRd))UusqnjM5%efH-lM+vQOEqGLj5X~ z^a5sj%rRX2U03;RkNUnR(bpgMIUiMIKkm9ct^mC3c*oy&*}ZU;^Y*A?y6pNs>ik?K zrQs^yca`INRH1y;b8s2R@k#g0qmKD;*X?mOip%b^t9-skfdZfQe)z;!0{I$w0}5V9 zWx|v-0G=plV_+=3a8;sdr{)cXOyEkKm)0fIIdP#C6Zzq3qHhK&zShu|UNA(3Cu(=! z69~_0jp%vu1&!zvq9a*!jzIJYDl1r)(UTH@rETI}j}ehOz&?1M99ZtS(-k?R?$36SV#!LUH#8aU?=HOF6tz%NgW7!&Hc zg0==4fXNv?3=?^}&Qz$;B&Kw0ir+csM0vfzmno$rLBt$koTDB_=n-Rpv#vB)L`F;3 zVmnG~$hekG^zeCTLZC}rkW2>z;?{e*M+_I@%0z&K& zV!&iF!E8Q7*L6%iH-&isWO(1f+KT1G3dY&8xl1u3gv8I0;$|MUy#4|KtR^)#=tvk( z_mnD=NV0%X5gQT}6IrF9S(PJ&N#j@4=jWSS^h zV_~gB-}l8|x)lv)H7i{b7@&>XIA|ECq@fk9m4VqH+E|L`N*YEvXw}2ny4>G`g+fch zVxjJn7dHbs!8!$_VzI1hfY)Aq z4X?lcI(ByEXf|uyy?Y03*TC5d)5#RG8GWBp8te56_wV1s{rewbvpGeKp6+d9F`w_? zrJJwd;P3`++;|!D`3_Q|0(CyEsZrrvDf*MZ{p5Npz#7Gz8dawJS`koJNdMGuBWP~S zfq5aSK4eHfA_$QCYfX77AH$OeyajW|Imj z^jNRXp%AgNGr>>1{ThD$=YJNz^vl15&;Rt-VB7@A3`i8K8t9t4%3-nC!KB_{b>6TC zOvo^b`8bNMU(7vXj!2o-rQT<}|NdRJZ?~LuTqR$R#ZI6t9`KuebPZ)Rs=on zgFUHOzgU!97GHPO3I5{}5*~NVPdcYh0`6U9LjE+x+M^mMSA`TlsUUvTu|4f%`6|Wx z<8s9xcYj>gNO>AS;$^?*ao6lBfBP!;*;TH~Rh1-{HGD3+Pp;Y+cwEEb2`d==3{QuV zWrIv{HW{EzX~_zYqe3dPM2|M-T01yP8-H?F|+A-8hvj=?0%1$Yk z40&rUj5dXGZ${I2V@RqdQu@SF@gl$F&!?@0=WH49k5ASw*;E{_`kGF=!;tB3eXIeSB7mx3uO_X{aR zBWb@XQC5INAJX){M49DCQ)%|FhfI@IijzuQSXpW?Ko$SLs0BpbVJnB_>Kx6cMd&?K zts|YQlwn2!`Se(9(1OTYZfSgn^hJwJo91}8_yxck9vbelEy_GdVl?Vz4bFqsg) zqU&0mot>iZ$(!zdkDLvqeo2TF z^=5RrzJ^KlLK#fboOG1qEs7)7kibB}^P~|eZ>J5g`X?%lrrBVk(uTq^eOm!^aL?^w1U2&r{CuF+m&hILDL$F5;;WcIY}%4uG3)Lw3Ao5BU(enMBIV zwux-0I8ix4XHLvu)mMo{8x`V`b^#4kbw$rM{Z&#VD2g#tF%!E(jcgB*x(nI>-8EB9vtDpgJV>7ipovVHXVGQ5CRn= z2fK4jrxWb#?4g?0r7<$*vXsK8GR3~-T!kS6CKvuj=Jn2GYLOYG0V}q*G^Ajt!2;GN zN@j7cruS(|h&do-idr=aFd)@I&aqhBkjUae*O2ZPC~BZhCNoSXQ#j|CMM3YArfJYN z4f>8ENxk>zeTTkl&@^lGo*IJ$n*=_*{Udz%;rnQs4J^y*bB^#m*uD9t|~Nb%S9d5CW97K%#dN zgk_*i*^iL*C_^(%HnRG~SV!tEh#gWBvxJYsx|$mk`pSj>ETIv%TCs!#pFQc@NkLj}Lx2q-^Jk8hRyy?%9 zc<{8xb(Q<*s`t%P6{mPQ`^k9GdD`o7u|f1S5C3J>fs4m>nWE--8V*mLcwjV)Glhhj zq~OaDIVOzU|E;6*iP3OaMJyq?;nk6%YRS+ztRI@$rF+ zAAZR*mq0e65YSc@OMxNVL5MU3%s^F7inoz1ZxIVEUh)Xrit z+re9J{sjK|U;j1C=QDik+uy`TAKk@zxx`0z?!qaJx88aK^H~jT4Q4wFR-=THq29GE zeAjc-Bax2xXFG893~k$DwOVnpK3q3BFG>O4b8MisqcxW0lBKB@M@0EtV#kKbRxXYe zr3X-1kv*44N6(vGvt_YRoNz#qWNM46vEHnS{vSA=k|)ZJW1eCj&cETGLjYbup}ywx ztiX|f#hT7m6jdhE&S-9CQe#jlQ_>4U$nZWC02NAOOqV!Rx_`G*5Qgt#53|aE$OFc9g2!)U!V zeHYtQ1}KuPu7PgUP*X!Q&p8KUcx@LcF$~2QYK&MRsYL!6BZ(Ab@rofJ@VYMF1CU)! zQck+AE7p~e0*rQ;&StR2Qp1BM>Z{cfXJ@CBtihih8F={cA@=tVu)DjDs;arsYcQGC zxN+k;CX+d;YD(u_O=0Z}O4m3&Jw@Mj*xTE~V!lAzb?CYlzVESKEn$ttd_FIh2k8Wj zc_k@jYO=`wK>j<)vtb2lLbUQ2OWH(c&I**-ddJ7;iItubvhRy>pHdk>&uUOK|nwZkuprQp-Hc@FsepX*RZxiHJM@Bh zwIms6Q{!~ipq|a}_FHe`=FMAhRR!|01G_s@?Cf2GQVuE6;Ddt#O4^0u=+xi?mgh^{ zx%)959-kC|vE1(^UQwa!Zv>=?oM3GQtrLO|xOeX%?%zKKkVthAB^d}Xid2RvIx*2h zX@ktNc_?a#C@nELd6Whep^WTjRe3kkeaJ`zZqUY*i^?K%@bj<3>;xhmN3Nh+Ba0t!?L ziDhZBkVejpRUCUn&2!p-$3Va!T2LiUN@9_?gUyn9DYBijRA49t>xAMBj;e6b%>c6!P*Q9~&1U?AIl0 zK^BK>DIUg22a*E~5RD%Idq*|8uIJ);1pMKMHpRuLP|(YZj=g^+;tOi)B{x3ilr+Z6 zl@iELR=gSEi99z5gaZ%)73PLX>*Mn$-h68{dgeAzL1H+%2xS8$=XE@dPdN$`y-e*& z6PQ&7G#O?Own}8NND^H(z!(Ku3Hj+9iyA@ThVop*m>}Pp(%?hPB@f*eS@)REEs#K& z5R}aY#}Qh#ZwTzJC`ZIUE7MqMSTWR05!Z@~G>s4vLQH5!_k>moRvS#FQ%omweD3pK z#83X@=kO6CIQ1cz9*%rSbV6kT-TQHo4!s8N|>glFKSG{BG& z%WrvlE*ue4A$AEN(k9xB$nC}$c<#T)KTLg2gDT6 zwJj=F7vQMoXs)j7S*b!B@&P0|fVGSz$#e``+3EqlU+Su6rH|Umdk3G}&~@yW zXZwKCsOpNF6pEprp>Rn=Ipi!w{8d$rz1=-rd+9n353a#FhZrKx&XzbkJHzSe3Htw! zy*GQ3B)iW1zPq_cMDDe8E!}ABYzQDY07n{=G#b%J7|Fj`qj}Q2$ZVcCCJhLHSbC{F z_t@P1ZhAQ9-0P8@OJsF5D48i~U^fa`nVl6jl>h)B07*naR1qHT_ug~P_x-;9zhM{> znx@5M+ThXSM|kq|BRqTl1l|wu{Q__1XIQV-)Zhuk9Y`s|r-a#Thl*!w;7n7RY6@g4 zN^C=EnS%n*w3^^{#NL5X$dYZ&#abTS`!d~@VlkvxVk9N<5=bLH3E-L*jhmn`oSu?Z zv7^m)cF|6z+&G9>tyefZzkq_KG>U<2Il=c>FPB)(FR`4@(RVAXS4;F=hvj++pCg)f zf(H*CqMcYQ7nfMhFA)5|?}I>(ZQGzli+&)eUyK>fY8ag`nNFdN#@T6rj~?C=TR<8G z(Gv?}@E*YrY(pdvu(b_R)QCBb_C*epixG{sm`rxCyR(O#*&e2|8G;`GrLenqfX9y> z<7Yqn34Zv4?_hs_f-npi)*h>s$N&ACKR{WEHnf(bA{ivN>OB7Nr>}5y^bpTJehOnX zqNiqjhzUbK(8Pba#C*QM#lnmrCG10JZnYn1A0Q<1SzSw?UKN_UC<@ zl>GO(KHE(9uX|lri}DX0SNJ}K_kCZ>pDRJ)zD=-gEG6%AAK%48xXGq+*YCQ?9&_E7 zHUz*6QG8snbe`$o!4qlzeu-aGl3`6g(Q#~;)&voRN(CZC5_H9pLlx*m{%7$)lMmKd z3-3J4`rJ&+BGKQ1MVO`!YH7c6&_hgz*#gXGlSOxQ# zGF4_c5L*x=&z3ePN3K7K#p4ag@gz$+(WQ7{FS1P3B=%28(tsk69!u(Ff@aEusb*2FdvT$OVR|u$fyuzUO4RNCO33BZbsBst_BhDZ__@!S`iNh%q3t zH`^Lp=;6+iT0s2hY8166MflYyIgu}p^M7jtM{i8E$G&CZHKfrrU<^Hy&xGE;5Q$Zp z6eBCLL~F_B-lPbV?2*$MMt?4ioWzH|uJ7SPAnz=zA*|JyG!33U{RDsc^Izb1|MENh zr~mXH@#^IZ96dO~kAL_BJUl!^zgpw?&0BPRhbA|45Yrkd3^+eqVm`mb@$oT22x!_C z!>Yq-wL;f*7zSVblhRNbt0+==uIsgrY)={c*h}@sSBs>hEUmW|+L9GQ$lbCw(S%hY z<{E#MIku^;UkrlNoZ~$DO`fOz^gNCH;(X{N339b7gv_*aj<-{6c@dwsu{0f{LKkQ_ zH$CMHYZP?Qqia#Gf&31-PffXglHjocLcMyn6M3)JuvP&nB8CA-5h^F7Fd%6SqsRhf zRD#tCeIf;t(*)UzS$xfzp9kUw$l-nP{l@y3nA9CpX2nFcCWvJ~X$_-@n4WV&*L8>? z6o!aq&VbTn1Ec#XF{^_kOmixn4extSVHrJBNx*Vk!XX`E?p&h=sy7 zfwpbS`k+DTtjH`IqYWDCFq=&=o6azu&G7u==Xmz)8D_Ix@=dST@WX)9Gmndl3$$&E zgQG)km}!L2;fpVRkMpxLTwI)CKELFq4=FMxlYKmS@(i<`ee_)q>sr`$f}PneW!&eC zzVBeI!*n{Oh*QpwZ(EY1d+%{}cE+}!2Hp>dLys^FaIQhyHt2@|{m^fy)(X5bCm3hZ zx&~eE;Rj-Tct0Seh_;>J=B=?->xX8;nq-XjbN-bYy1AZK8;TH@^N1m_p0WY<%g z)H8_`Q$ydQTdlBOEqL33w8hTO1WjXb=?CVIBsgo~45@N_2uLde z>Iq1)TWcUkESHxUyhq2){S>LG2~O0=3{fNtO)5F@;5{)W%?+7|Y5^nlRnxRMJbH*H zA3ej)Y!4{|mzQVIjl<(d5AoBV{1iX^>1X)aPk)3*kM_~6RycWgiqF4zh4YoiN@9~G zWhat_$A^rUuiioF|AtS`&atyI!QcmU>mI9hkJWNbF|F%0)~hu_NEmu*ZlqM3>{rjs zc_VFu_T1o^wvSBdN|{uBHI`E%1XXF$D{Y}Oad*h-p?JtcYjX~f*Kwe64vCu=&>SXN z&Yp(t31I{s%+R2{miAdzPO$Y-EP7&bQ9Ln8!V6IrDslX7RDh*x8aP!&u8SzlB&kK# z)^YstX5?&Lca7ErvMzhMDoWOvGO{MVLdNznfcG81*{em{U4`EJWSwtQWZXwhaNmM< z+rs%i1=C%H;(ePI_f=V3cMaZWVtZX-`5}wm+X~jZe%JeW&_9G+{l1^+HlNk|7X5d< z&a2n?I@`*9o`r3iJvV)J*I5Z}Vhh~#m2$-3hXQSq>4JFUQLTX;&ik$ImJoOK(Mdd*WT+Vo=w_#Ud6xJ0>6Iu*%wEe6s?cU?T#h-yRfeRcASvMFce z>`UQ;{B{3pOu60*s3`=jbcNL#%F-lNi0Sf=vHjxawS_(#nW|TNS=vxXRK(~HBP{a8pFBBbRY~AugCXr zJDK45$DiQu{_a|m0jtFvi}?lmp-0#CFh*nD^%$7!OhrWt094qG4p7omi^Z!<&@b|Qr%~f57v)6G zvToG(s4|h4MeUKa350K$daeelp`_O7Na>*jbcS(J&g0u9K46Ezl6bU zdSeQxqzSAP7tw9K{>ZS#P(&IZ{H-QnoF4`_=Wuy(!QOD7?|V*Ih|tF1`LpL}8iyea zc=zrlPESv;SS+wyEz$QKDMqwrxTC?Nhacg`pM8cO{NTrU_~4zbO%1~3a*2?E-N_WQ>6BS9AV{9E zP@0S1m@wf+jBpax>lHz7jioip8Dtpvb&tV&_yX+HSS^=0JwC?8#VPsQHQ5ln_vnWn zDMobbHM(vM|tj*g%1OUp$9Txjf1lW?PO8_wlO9QLnuu= zZ#{EksQAAc6`DAzjn>Ut;7bEv_KeJYp;YQ%S{s^Xg4t{rJJVe}c=!>XKKlg25HLBJ z;c|YC-Tfmxef}Lh`sf)}y~pQYzQl4d$LaAoUcWg;*ZUH?2TG&mNj&}Du8;Wqi&uE{ z`W@O)hH3h8vt)LvRAPZC(0SnaDs;}1B${9Kthn%Tm?Y0 zwXQTv4Xf4E#(KreX#s=sjJ{Y1ubwX?C8S)Ml-Z8S>zlG=7*rT2<8^}9T8SYP3qj;_ zpW;~JI2zz+{!GW`!SNuZojaFgy+XWho^yLxuF+ZHQ#6{@!# z?ysBv-9+5K`u*D!#@iN;cfs@S`kiWihr2$9ZD56WO?K}BMcx!E zciTkyeH8(BK_9mTFy3^p-bTm23qrYVb7I>`{%yqn>;Ctf6g#)w^Vj|T_k}8MllpO2 z<1WQC@_UlZmOv?xNbxb6z;8&;Rk0JqD5sX%+!zD1w61bMIjvNAwkSkMMys?YStfhHsS$#DaM7A; zEuozkR7IIsNP{hd-isWnQb`pczhfT)E-%iRNFAXxO*fuAd4hlV$A84He)ab_zPP~C zXCL9?Pd>)OhmUY{c!V#%_zJIIzsBj=DZ14XR%={dk_VTf)-!?3VnB2T)9H*Su?EIA ze7`2FRx5b#(RE!Z;>Er#1)o+Uc_nJIL}KN}%^}Ks21$#xA%zHE9K)cv(g5N+O}z3l zfg0O5HrK!rGXr{qMWGZ*#3e-^N|UEfiM;n^y;0>TuP6#~eBf52-1L}Wj7IAkVt9l| zzS%2<{W#i6nwD}ejuimc?NK2FXaHv?XZWwn|B4uVX#ia2fJxK9SdD4x;2MK<2Q)3G zgm}#=8>WpbJz`QQ;WBcHi!JefT4E9P=)fHVh8WNfdE|vv$dNb%^1kXe6nR}iVJZ~9 zL(XMwqBvAypBSxK<%A7Zhj38nQRFqbtY3B`QcNb_)><@8Q^0}7Iyi=nQ3Raj2BN}r zI)QU7{4n6FFTX@e5$kn_A$VBlaCCTtXV0Ev(l$6gKE~%?{t0InXNaECII3-d5;B^} z1mFMO_wmbL{#$(aho2#5jpcd;zsRu8VLBrv*kZB3nlsmtGo0mYd8=`Lc8)i1-(fnN z;@Pw3IM_cxJDH%JOku4(XUomFBXV?fOQ5b48>{} zVno+<2r*C^gR`*CVm6y$e{Ua30nQM(cRs(wYPE)jM&l;*9JMo279b<#!0T{kXsCzx zH1!qFwWWIQN<=^*shmLM*V6zV6{rf$@9G|=Nw)3?p%8D zsqD>lty81339nL0BP9=sn;{j1DGf0_ns#T!k+zA~Im7ERN9N{)VpXHx#f%N+gY@3l zAqj|~B1LyDjd{JnI;m@?Dw2G$FRGDpPm3K;)I64%O)-}<4T_SB<^J4=p!1BVA4IKJ zgmwz*%n`RqRA&%Y}nVVmoB)0fr;&Jb;y4sV)b*cee*OvQ`Gls8YO9fv8A|sw%)wR0fJs#zrXf45!M97ji{@J~@<+ z@3BgNr|7q@dBsvKatYX#D!DsSqd=zeO{2@kA=4B2y8> zV^7^M3{1>*u+~+8oP56_;16;fQSMp#h(wV>8Jt;677b~f2peHM?F<~JMCAL;=8~ut zsNo@^Y5pvfEuZPQpcWMbl!nx_c~l6=p}#aCGEEl~OYNYj=$9#}a2-;NJQb{dX(>K* z0Tl{l@9RZWRY=IaQKgdtp{tOw~-Rp8cr*f#4$uHSW*q0yqp3HTk9iuOY@XUuruFAO~s5kuSGDR;%Vv3vV zwJ3x{ZL?8et8%EqkO4lDZu5)Qnj%`IHqV#KL9Fzix23`qPgJ|c-m`vL;X-zS~GFzfDESQsE zOlgG36Dsy2T6Zi;-NE$}Sp@=o@SI>m-=IXLqD1mLwgri@KpL&&m{HI*DP+{Bqb8s# z@WgSd3LuOYX~yc2N=tK^!kGWz$YXCbd?0VQQVJ$UBu)vCCXhA;O=}6d3WLRBfzz|I z0$6J&6YT8nVlr*9S}kyV{0{HlzQg(aoc#FOB87AIgJNi^Yeuj*+Q7i?9V7DXRYis#O}@ry0@fOCDg-J7 zZ9Uj;Nb*yn0|Z}-lq55^!UGlmf2%EmPBMQl8+3_Y%(+YljMXrP4(84|hPaJ3;=&Hl zHG5rCcCT!{*1C;@wHi-Uc}ibp%XLySw#nrj0cBtv6^07+&`(+FHIgl)$VC=22(H}Q z*12-nOF6QKT8|_ApxE$+MlV00x& zBl9G_Joj}(`(^xLN(#C#JfUyA9Lr>qcq&>zegTC)!l)~ZBA*Qnl7m5zXTFe)7oSdA(dyn0n zeHx4(I3RSS%KJ z`0ybP_VzI#A@wa<6S1D3zM1{}Y8i%C1h zd^yMQ@jEP+Oa9ClJzUn+CI;8Cvo)aJ*fHLPFQA zF~6K6BVf6_#M$Wymdh121!CkPouUa-io`jHk)O9zeEe#ZE>hSjnvx1M6nV8%E=s%% zX}}q11BPF6)0-_PO3|Lt^*v5cPVk36{0m$=!Lw&`Os7+vowk@?&T)QzfuZksU(*a; zv;ZiEGXq6kMEd|ORwafuQwSY0DROdQ`($obQ2ePj{NEKTjugc&CZ6Ee1e_7)A@Tm4 z60A0epu$+#ER`3a5E6l4jV3-(i3S#>0JwP00S2Z<4(Do#OdP{US|zOK@hp-PR< zCH09k1hi2cUu*!CD(8r0{gft9G=;^oH0JmuPE*M#1GWEy9CJ|0Q35IM~L+|4obZe~m)$n_Qm{O{IU|*YqKa z#SeMiKg7@YrUmY8vi)y*-R{HN*w$9@O&cZGEhOJo@ei;ZIRrk~8kXDB!U&yVv@MG} zn1U~dSAeHmuncR-8=x?4XyJ~r=7s0X8v#SKWrI*G^M_J!P0JqZv_ZMoOu~;bW1KNx z3)HkB6W2_Xm+bKv>!i>*3#ANCNldW=5Jeapph1~(k~jaV=NHI|7zuumtaNO=2Im}0 zWD_4+#jBYM;a+Lka05>jW!gBV=L41Wt(n>@-gN20b9w?>0qXOjHeiTanIfMX`}`$x zFpEUm+ERd*MuE~q?Pd@mwe=%%W~m=(FbiQETo5<9K@O=*T}urvFg}Jh#Sm#4Fv=tr zdGZ)gSEq_{Xav0Xe4R9VLUYL%CNL2-equ~zVl@O`fPOKBVl}bOLgfTMME0zssxcA@ zU!qK-Mi4f!UMQ_fN(7P2QR43=vk6j)_~RdckD>3N5Rnu4fq(F$AK$@{|B6%oFRmWgWVadRxp+#%`VQ)aC&--*RNh+ zGHIcWDqt`lJY5fd$-c*)4n$`G86p=U-* z7IYdl4O1-uQHxTUltHsLg+HUQDk+N{qfC(Km0G1>9eZ12;o^|`+#JpzOW}~Y6WD8EK8&4E|3Sf z4*}5+XdGQL1v)58bJW;eWAHrZv_@u#q(Ij^gFsoD0D1|5*G!hp)`hA>S7!F63&%mA znDl$AzgU+@JBs&%)}shaPGV5ilTBAj0A=he&oy2(GGI;{4PBa!3Ero&&p6lcS~_k{ zC@Ag9^JWc2)ULfpV7rGjKAk1c{?5)0oU_>7ouO&l@;r9y6~+89WY2LkY&xA{-!;r* zX|S`q3$3YHaDIM)TIM_eLY-b0Hq3=4(rc=C{wm7>u z!Yg)vR(Dxo+eeo6Ey?KS@VvfDNeVm_A&b<$nDbhHH$IqVP z>60h0uEoX0C3cj>-p(G@-5Pz@VYOc1^z;~$NsHOelu{u29*c`}T+ZkG+$F4?trjr= zgZHF>$duHejDfZmuBFd`8oq&I5Pe`CP{MlMq3f1dujlCdHP-7Dx~_-!)HsVNP?2s% zO)!-i6pJ$9&D@T)%q>Vr$O#Ck#<$Y8Y^cyR6*6ax7Ks+xrU4w?D+0<4alqO6DZcpP zkBA}T;9wulQ94Ra3I-ZcEHvPI6&g@!BoWVL@(lnw>(aQe$^gp2C(nR9-YduEIeE@x z4;kB@SS=&X({dIB!9bHFf@GS|hnzS`hy3!QmZPT-W(F0d3RM$I)1pb}5lTv3x)i$cFJ{8<)|Ud{;K zGtYpUF4_`5V=|fI^85^M-n<0h>A>!cJ#PKg3T;8U5cDpJ&^oM9A!x{xC@U)KV7%z#lE(3{hw5IiU* zG9&W6CBAiVToi#4bBV1IAf+}MNEA7zxp|gZ)}J{?TdP`dlgC^`fZ4{<8q%~=3>jF? zFQFmuKS$3{lJ!u-adS|3318{LI4KuLIRpfikdi0qE*BMw8#tCF-PJ;o_&%;M&BT#`YP4@9IXY_* z(n<`fJoh|}D~Iv`Xuv|!Tu4n(z-IisYb9!{h~Q&6)Jtke-vdoUMSItEv<`tLirQ$T zkV~ezF@_ZbE!xI0=#VT{F?x9K(J%yaKEK4-**O-gHLP`LTT*u^WL#XFqirYH-Q7h9 z1KzxO$qj-A%f%cS3Db5TP1C?xg`r|vDO{YNAw^2#th(=n%X|a0W3&gb>j*4aEWG1g9;m z)yPS+LL*@qI>azw@BnU8A?QB zLX4y)Nb+Y|bJ0qSrBGBml;}~|B0f~!M^PcjwE~P*FbWLgtc`ZEK#h1oJTVtZy;6Wt zta3|g1U?3T27nKNuO+Q3Tr;bqhf)UCDdZfGJWmF*q6UF7$Vx$5 znnZQ$j$aFRvtyz&y(Wh!9qxEKmLil+B*n|sr)8{$w!|37i3)$CNye&KE|*e-&jCsU zt#wd3iLwvII`|Ng8UB@1;!Jr!!-(S+Mms1KVYTIrIHGOZVhspEiecKwo2JDuc*vC8 zlxVX0xu=v6dzx@MXK7Q`3XOGqs3%FZ4|K312`x=MfdGJf{94s0C&f^j91^_u)!(Zs zfXEqFW01H3q7%%doa#>NxpR$!pK?fiSEtU=JT(Tg3&qs6Z+5%g}qO5ar_GB>}Q(DYNz>-q|mla@mmv#nmnh( zZH&;$z;~YR=|Fka;QaL%C?mZw29vhMzx?)d%rB1-BS~a!GsAbj_hbC`|MuS_M}yD* z@F)EEN8iPdfAn2wMNvySB%Ho|iPtYa$FQ1XI<;twLFYZr&Q5W8xxg@ZOr{Q#NsGY; zoS&a#wOTVZyoI$5`Y<4a8hAbo1nRN|h!IvPL@0z9kVH8m06-{2PgQSB34>3i00wA6 zWR*8%rSQ{V%>E(pU>g@0R+|8@G+zB2DFjA|4;}aj(qHSWDC)w{fUZ^ z7^zWbIL1@t^GXraOp0Mrme4^ohlG?Pb5W>)m#ryQ1fQtLHU;vRp;Rnn_>=){Xgvzv z6R3?X2_l8giC}TYR4W#NF9TA{P}*`Afm8<8x)MbiQ=-!>Ph6AOKzO2R{avzD|FoweLtZ00sXp1NWd4L z{}Gp$r?@;nMM?ql%S$v(gK29>C1flo(gfrjfE1|M3kiPkNQek3Gel7##{qysV->73 zP|2fTt>HsJ-*vdSxWIhAL<|u=C3qj;y)SAkNqwN_H z%w{`Kwkh{&5*rHRMx<#>!X;XJNHwT|P$$t!0Wg(~5n@1;_~J~B&ya|Rq_u*N0Vb2G zD8|SjWnH=nDMf@ZKE0-FyfptoVB#hS`g%xRd|~BFi{#Qka}Je zOIl^*7?_E~iAvJApvSu~ie#Xm!07O!#fXU$;UlRc!OB7F z8d78VfCd`baw>pMCEl30FPY;LQvnMH?`Z&}4a6f5Lx5I*vl>ttk-Odn@;gdgh=~R` zFxxi(wpG{5m%UH)+-)TByQBsmA`0%VM1XDL?B3_+T=#SD`kwL6y;>Z7h@X3(YjoGo zyU*|3=6mn@p8KRP+~(JwzK)qRxM!?k;t$F_IXwCzUsW%-Q7QDY<~jthEJxCenRl zBFpDquW~+0G7z z!Q-p1zJm8dQH(Ur1b^`tpW%~FKgHk&JbUsHzVn@DKn9$#I6c0=@Bii3I5~NZzMCVb z0juR2-Fk_ffP;evI5>ESoFmp9#g++)xoH{z8df{buvQqN2O>ePDrAofb_b+^l_y%m z^Ay`?lH}6$h(#@6OocxZL%@t8KgWPbg_t)Xrb7L`3XvV>J{RkYvLo-AT#o#SET&*Yw%6-0W&e2_YT8pC?fL@y#6}tNNyYw zgc|^6fdCBbYg;C$)7qSJL{_Bw2*K0m8FNXu!DYr}q;9wuSd%M`#og!yo zGHvnj(Gi?&vAchO>2wCAfWBMf?VC5~`=LN#+qNZ7|G_@I@3CG}Z0&Nj#>-c4D9)~F zNWQFqqoX4{dGZuZGeOS4dhM~hyN8Dl9$`A0;{5y!FJ8PrObPq@`&h1NVs5R)&dv_0 zWQ@XMzCynSG%{AJB`z<|&^8Wj<1h>XmzPU;AJGp3at?6T!22FXQ-X&=g7+Pk%S*IP zi>7tt#U4q!<#VHnzkzdxieRnb*FD)tVpUBo77JWnUSPfMv0ARs_XE5S1!yY@sH9?% zb0aZyO%Yi>vu%gC7N#^Bk%2H!V=@MUd8$l*PeT(M2pYPa9SyV``I|(uE-; z={=bl7h;DI9+5RP-8M=?s|~eoV@0J*6iBv6Ad{a3?0{kqz6pjv( zCX0L?(R&1NtZ*8^phwp%hA4@I^t(AFqwo~?8k0&bA!$%^UGCdEzTT%!&pE^17A5vg zrh2y(5m$fLeV}5u6(Dy_KyULg-_+ZOb$TtYUT*TK-&YcUpVW!F?vL9(hr1rk_pu#pQ^emD^LX7ozRfebZNqEJ zm4m(iH50o`h*)--phmKCj`JIaQdDTI=x~rJCI?#4;W=^U>_$#~CPH_h=s=@1DF8Gd z$U!vdm?J`ruwXfy62l+KUxh$xok8DwXk%bgX8#~fsR%llS!%9J458+T9D!aH89GbJ z6=%`P!4-&wl3u4(OyY+wK7Nyx2oQOafH8S)1iR8jW-Ucbku#%83IQq@$%0UQ*W*ld zfu>3Eqa@CZi!LKM^%)2$0EwF3v@vEn;Bg_6vZMlNmgm+9JVCf(i6yEua4r$VcL-dG z6s*^&K$++#AcO=YE`)ePjtu${#sMWY@cW2)gWiAjxspba*0wZhw66SvlrmyS#d4uX zhdyCcjANy8uHYyiXkx9EMhu~3PEj+44nC1%8?6)00LO-LzOaGj375faI>WkK;N;}E zz?-sC*xlR3C!c%*rHK*n_@hT?8?sHDpI+jB|BwG0{>y*)KZ)k86(+L=VW27c{^21G z4i4d*#p&q@j!zPfjt-G?!eX(&e7?Y9vBJ=MWat8Ss@lpjZx(^?P{Y#df3=slYc} z+=AbSqNIQwkxK9!J{xqN`$0g`^_i= zJjDRtXAB(`uEJ_i$}$i!A;tl_JG+?8rkqq`5aWQe^EKA1H7+kMkYdDiIx7u`{r!E+ zW>bU^uwHk?+VS$`YYaYMwljlO8qQfvCQ~ToaB^~vy}f-H>#$m{5Qk3sEr=oE{Ne%! zhlg0N7FaG8*xB8o&vNLH0&sSEf{Tkwgply=?Q6v75#s=B4efDodPwo%0>-a*j*IL1Hp{O#&@x>S@rj6I{oHJANDY-y5qyWj03SeU`-IH0B1{}da zsp&hLTI}r}U^1IwXLlDzM@QJ%*~8(%A$E3mXc}K8{$x?JM%PKcLRAE$&3#wW1WExt z@|aUYxI*!imgE^}yvrUJ_%gAj%@`<9gDHa6v5B<|8qAP5y_Be^wZ^itC=#)MROl*> z@=GxlTaebaTqoJ@>KcyvpAuEbYgr}^g#1|&m@zAS409I}%l`{0rT|fynN!|-y`IK$ z^fAWPv8oJ_pIsWq*i3#Jr$b30y8r#e24%{S@&d(l=FcfhHq4V z+;o=zS`6U(6!-TjBDN`JZkvRT-`q{b{I*lq>+S_F28@!QbZj-R2tK)xg@OL2&c^ z#}Y4w-Oxl^0D82bhZv!`!&;_Ts0U!_ux7~Fqf+8k&J2)|sd(Z%R*3_n9Qm9B)0}mQ zwo!@vZH9|nY7}Uemh<5N8cIcuo6CYASQtwWvEVWT*!kT@wAYqKfF zgkgwC$-_3TNc(b3NU2U$>j8`>l37>3^!RtC+Weq6M>k?d)X!II1@Qe%AgEB_k5>!S zlsNJdnRDw&MPZ!<3?H5({!f8?+AO=wF_%Ft`9wz%ivWzZn6wREzdprkwSZPYV5P*< zXHW6z_dX@c_Qb(DQgC#u9>4zeKjZbA*Vx&eA>{$u7#tkz(ezkZINL&Nh1F__i;Htu z>u`8An9?&=n>_8 zO#T1*eIj3SuUwtF)g*#6Y8+tW^U_*l7zS<@B`8G=HLG+{^+cAr8fDP9wiMzLUzS!G ztFD7q8nf9H2Zx7v@!|!R%jHO2pi7)-jdYYKJvAz1)kY(1vl*7Y7FAjqA60rwMRF>K zUu#?eWyZ+&q)~{;kG!~%z-@`wLu8u%@?@|?5N6_}#2i=)OpTz#1p{)8S|soP*khfb zRWA02u_8t$$o0$!Zm=qjJ>ytVYoKA7e6Eo>5hU}oBMnqN$`h9YVi@}Jv*|tQl4t;v zYrLe+tiGaqmfj8VJ3{mrh83K1I6pf@iU~vT3`{iW`W}7f;jAOieT?Xb9@FU*)7ccm zFkrP_BPEK?>w1rV7+`IK{k;Rsc4w4n?*lI9XP8bV02EeTkIRco4C@8j2~GHs6}t6` ziehA3TwGvrNd;R7o*E)C!Py2zXCQf`I6y({ArWme!NJ}RNviuLR;v{xjp5|<7z!Fs zo<8MP{d-}z&4hx0impcK6rHN4j~4tmMe;_3Ni3=OG6k*7my~vXxqoodv5A6Kv^l`U|ea`rWlH4N4Q1w`*H;rYPL!h zpeGLlBP;*I$sia@b)$Nedk z*S(RuCZx9&J2$$PoDWZOp1U9b11uap@6r|aZ9 zq=2k>>Yq|Q=8rZ$*;J^A(ujek1X7qP=#2&=x*nVprwj5ddy%Jj@w9>>> z7)7Ynzb~<8Ea%sB{WtTtRe>&!?!Zw5kiO*5I+?&( zgOmc3_cNY7dyaqi@BT*^WATUI{~k~ov)PO!&xt6{gYR*AagOu1h}jRxR_#*Y0GsOM}a1WYg%gy$$Pw> zg&4k8B##?N<3d@a{$qs(fQ>0#&YGXaOneE{a5^F88$)rGDG`{?IhLI#DypFrmdho6 z@S`80X&U_QcfUj5cl`Oq(&z(ExuG-{-?c$e@TXifUyVAH=9Co3vJPXs|72=jL^;qa z1IHGutYU$&0+#&08W=oT9*j0*v5@47m{`5Qa#zkt7nmP?c4K=FK~ggmPuHrWMRiykBkxArj1!qk0|Hm9kgG{nX3H+8&xL*n*R!A)Cv(}j@>5A9MM8&Gs z$VwylVf1_&nlSU)opV480iG>f<4I&r3Dyw9X1-jYagOg-kF)bLR)c{&|G^{0jJBm{ zLhn1Q*BO1^6LTXb_`bvC1xe-oFhH4v5Xnm}6Xb49@s54p!S@D74-PSDTJ(JnH<@BG znW7&^&ENwy%$wFyGb(s2=NDKk=UA_nB*V|ZV!6a}xx{R?gWw|pEv;dj9$=Iz5MHRn z`>!nt8!BgFzObL4_S6ab&Lj8%-X{bfHj;R%LN3<^VTt}#r9qTIF{{>CwsB=BevX@_ zMcYo%v=b~>Yb+K^=C??UtwK(LEO*9WwzG$iKlu(m{`fn1`s`yodGZv84=@evcv?l^c=kAK~W>!QpOs}6luDEp-}RU{q|0Pa8$zZnQQBP1gI z(;0^B7qT`;V@?`_A$q8&%jYlao1B@n%E(H?+OeVxCCx$37xK@_6G$ZzP}ZT1#xWT5 zD!|?XI_3t4tj9)U7y>C_a)wHgQzsO1te=snN8k7B&KSULr}TGq6Sgf#?^Af*_1f-R z^xd~t_Ti2fhWott_bIBc^U`lqY;OD6-Sjiww?Xi}QF}K{ z$hWzs+k9ppI!WWEX45uSkh@;bZCr$H?wf7bm9l_pT{e-@1dxNa8pXYHq@Lv8N-ndi z!y=55x=S-b4vr)_tR3`HbZ$g`DTe>>bRD2b8z#?!H^Uq=f(n%$uc~xjqVTj*NRf!^ zN@cPpAdaN7v0S4VYaydRo=eHF-YB>;)43T;mXXUeSq}Q*ITrG+y5QyixLy={+|s`@RiIES%i>MjP^VJCdtsmVSz2o3hO{jHVbd z?|YmazeC@5h0Ol&(Ifog7r(^*-aeMAB_13d(0er&JMDxs$KT@k^b$TOOs5lQ(;%q` z&4awhe)8*XhsvWkqt3jk=tS{S4FvY z@(e0v3L~X7D{KR2Y@xvCl%Wg|O2K836)*&{Rmn}R7*a{=l&;AvWOgkFYsIAZJWeP< zwHJ+3LNb%s<sv5Ac$X00_PJ*7y0rIE^OImf6M zl^1C>V71Ixuh*p7iV^e6IR+nSKjU>;)GkVqgj=4;N>&F0ReN-O zgs}!gzos-Ejti#7cp}*0&=)=esbmyK^roWN5cS6R{x-_Mng-e^{y77h#*sCL_l9;d z#gBgc8G?`a^*{dxUAKld88Lc#oz|df8$5aX48Q!vU*of%{0zeo@#f7teEIS<&gUy` zh7(LU<+Nc@s2TAn>(<5|cjY`K_C<;1%Oj?c>;oxsW0+Tx8k@CM3FD;1=YH+nym|K7umJ#N-J2`UCe@j&%S4AOJ~3K~z;zgYH|uZFAzX>7!K63KA-p_rDvHSeIyZ-yOUjO%f|KCP~;68=yee4~7&NPC%zIU7ZXPe3W zH~lQ+iw+BK=OKHe~FY z(}l`xBi8(RBK7Buct7#=r!;Qp=uvKcos^KI-XKH(kurFdP}ox~2PsiqK(Psce}=4}c z6e&7=A3wjE;`9usimcZjgAc`fD!$A#kp;&NKHx)=7CD`K4`Kdqwa7x|Z4&yN6=GxiN~H zwe+kxXUde4K#pQFiHN}y30y^_NMWXJ;|e&jZ5C2%{Zdy?%$| z0j;wfbqoFPn zaeBsdDIl*l$m`yxi%mzfon@?0Dr^%7^CDFUZ{~%o6xpcpcl@7H_?D8E8)JrGk}{|X zfhO~k;VOI;^6aY$3NCVg4P(HZg1Uc?m7F6?QDKRsl#!y?DpiH}@j5R+LB$LM0EOY8 zc@mRz=4e?};#y;f#Xd%n(6lybMQ64cXx)+hS{jE@<;uz_&6*4-vjGU)P$BZQr6Xp& z4-4p+Q$#R|dnVxM-4=lB&f(kC1NOeL0q^^DpW@(~OjtieQS|@CuWh8)+y0zwuE}i^ z;ct2!zwLOzZU6kfQ}S(o_xs+D@5@No=DpqZTyFF1eyGnZNiMJWs8VF9G-qoUUtcOf zuf)J5C=ju_(C1kmHUhGxSixOo8c2Tv5ydHOpsgbb9#i6z691gy%@oC_s3fvZCRpMV z7x17~CGVRie>7zu%jL!rdNl&g=pvcZHRdi8lR!2k@Jy8VEXwX3L3RWlCcr z;sh#l91~q%*{qBDA&n!nuE372eE#&lXj8M!U1@aajlwv^$WsKvzl(u5#+1)pfu;x6 zT3BZZw#44J5HjauTlnDX5nKrkc|4`l#qS8nA;6R(JY`!XsJe9XSz4HBieyxsB*&C_ zf~AVrm#&K)(cs6Ngv=}f6#w=H#11H#z?!Et3e=@f$xyRPner?ur6`W6n%zr8og7G_ zr^r9;44Q^~t04v^TsN4`_OZLOk6)ks6Bdh0I!xvWYb_o>`iP2C+vDTsA9HLRJ#R{9 z>>unR=ZHrSA7J8Iym|W)Cnv|~x)m-j&vANkjQPa{N%(U{7(!8-P^6rJ?+2QI5H$)4 z8P>W2UnGSCzvo<)Br@fS!56Sy$?)dqQ^01T29m>;=Cq9psiOOg(h($HRBfno#-CL= z)LOcq=>Dsg6(3^BN^vtuJn1yaT=yLU7mO)Iq>$m20#+;XB5Ps@ z$m&N2RzNvj?$^>hP~)6%f`X-#SY8_n;XEfw;1ER>O~NTQ&1jL>(*Hs%6P|>Rrih|0 z3Bh9+hH~w+($LCMqCrf^&@kN16WTYVbWl|}g(!{K;$YfXZxSD(apm)&|2=J_tZdqW z)Tq`W&|+ycXKB!xjVYf}SNRF5G>+@ftn1$x5Gl$aA*d_%L-US@lvGKs(Z-;0menwk zz+^@hkGX3sa!y#SI%rK1pfLr8-Vsa=DI@0qZ4}z3h0$aI=++BZW6`>nppq%#;^GwR zevRG_*x%cy=*hlAiV4;k_+h|&eu=(cQ&Pds4Bkh?NX@Ft%Q-GCF0owBp^f4s1fXrF zh*=S#T^nfTMNDTiSYxR1%X_WlybobOj1g@+p#qpwPEw5U!+^f)uv#rxqEFXHAemWd z{tVT~vX#p|tc`(zg7-t&>$EauG9E%-fU{*UCYb_MCe@Q`S~P9~tql5Mzz{l`GHZ?9 zy?y+5Kl?fU^5=hr<*LKWSHH#C**Tmug?Xbg7o!4!lg1o_qfFN zFDcfG4KXF!OL_l}%o{0@nLHe+5_Vx9k=$OfwNb0I39}q=2TEE3%m1}fP`r<8r3>gz ztckSO<^n0K&vH%K5Cu-s)ncf%hGVE=j;zj8(r^GP3W1ygotXrFoHO&9WX+>UKBH9` z5~UcSGM(R2O7MXbV;DLZQz+0=;!&|DU*&7h$VQvec$TI?Z8GvOfj@Inh;b|{M+r+x zi|kWbn$qv_wat0l-c$@+Cq=)h_`WS}?XJS)y6?a1`)-oU-}GnK6|FaY-%S$y+kDJ- zy}#Q&n7btP*InoP6mWNa9@|{6`xMwWy}zqz2seGcH{B1n-6Pw)zuWHd`xLgf*&got ztZ%wrw>?kS-AnhmUiZ0|?tA~-#T>ZldAse43RWhdgP~bkaqQf{|E@}&eTmcKXfSA7 zB(+hbbUcMq8YO;3==QO84B!8>< z5LYMdW0HTN;W9N}rg~#Pnq(3Knc~twl6b8Qa^{1JN*mBJ`n$OthN=Z3kBU+`phi&E zF?GRn(p->PN-5yi=$tMj-<&D?TvP}oQ74KpMqWe8Jg<{Pv2zIBS5y>D(^mLji6qm| z&XkCrj11$5;BTy<;+X$k4nfESCCi22Upw)tykDgV z_GLH$qRKVRwbqEccuK3;;n@Nh1Vk2b=md3mb1+8r* z*B2?a1^B=pMigoBd`nHHFgj4iFoNW9s)iAWC@VrZ#t9>dZjB4v{4Ax(Ao6RH+R{NY z29jl$SUySo2oW(+6GSI!r5J4htq>B$4)*;(%?SmlEY=fhj%20LI0vW(tM!uU{2D3? zn2QUV9O&SP3Ir4oAVmr)KA^fXIUEDUikgL!K9oprRJACPMIqN_nW5)x@E+ZIi4c5g z8W2l0!-4EmV@-if9u;>ll>iIrVJgoJsVg+A2r#l+Rojd-)@aT4g^#ic@YJOs*P1-P zAu#N91UD@_mXsOzMGYxhM^Z`c5Q~>I7$xCFru))}bk0!&fWd+SK@}yEzzJJUu?Zm} zh79K#`kA0;TCFvfi%X=Gu(LBm^aIw*CHmg;d!Q+)bs9}eS?w2>7wG#A&N%26==;Q= zJP#NR>nxlzXeXrLSuExRWsJ3PJDE%|o9-Z`jKL3Bu6nGy0YFAa*@G0z3k}z{nCz;qA?y z>`1ON&(Dv$N8Fn$fW%S&3aEv}TF9m-E~059&4@Nsk8GwTvtFL2pXQI4xA|kntj*fS zY{uGb)TEkf4YhS^B$2HV7m>A*wE%@e0Z8PYdGCz~cR%xRj(fyKAv13#syfYNGNN+1 zH*SQxpL4$N_rZ|G>e@Q4UVRR;S%>@gA4$@I+HNe7LQP45r>Wlq6e65rD$h&yj}M!} zc~7?kg-nL+#SH2-ePpgE9^#-$Dx5}d zKhN(yi$&lph2hf*`twZDPm3p96yA7Tp?TJLz0(Tx)7TAXNhCPyeX;1jo%Z_{egCIj zv$I%e7EJ;ePD^wCc`Tcu#880-u`Zd)st`MZHUdB@8$Ka0&Q~6D=`pdi;~UI70EBD*S>7vhQ#xir|N?Oky)~!t(8MZVph)~$-k2=GPr!G z%*8-1pvokJq^M2IFtMLP_i6-NCL!`~rc9uvsRC^z^o26Gk4&@HqONNY`mAy1s{Y#K zgG8a*6O6H_s8W)4nv)zGqtT4{+0M3$;`XC**b#tMANylf84!{{q)7e$GL4Ytg`=z< zfT|x%u|&WaSn|3_Cpb@iaZ0vK705`#LFB#yZW2E!l;8{yvnCG=!OEumJ!vrYN&xRY zvPxv$ zt1HV`US7iT${H?iT*bvpgstsuJb3U4Lf4gP{CHGjWoa2#E?>p9t5>uCMyD!-y@Lb1 z`_9{V^yoeg_V=*AyNknv12nT4LK_g;z9~nx(x^LIu9w(RWcoL2rX|8mnhBzUNg8<< zH5$tl3yB__xc9846r=&Av2J-X4fGRmBCq#hC;(3R>=I(kje?}gk}#0Dh9@R#JZBw{ zEP1hv#MCnYa^q%^W&d=x95510 z(%8om`IXlZ3}pRgsO&F?|9t&qt;|!u2t@U-GNWl*bRobRD3b$)I^H!6+O{o+YMFk@ z^97BzBXDWX3Kzq`m;{?6S|KSgxzLI_T}+4|jRzYxX0jzIC!*x$YmR-)&*d&P))!7XBG+RwKrDOXVQ>hSd9+t6$x@r zhR}*vpA5RLQN^3lB1@Xubv=TsDzGs)noh-5V+l;aWHu4-9~(I5F|J2gU0VZdAwQkY zgX#=Z8OaU`ZUm%_S+S2??12Q`+%f-SO z3quz5Xi1U|nnsjzHmd`3!wKjH^m%CrTeNM5M~@!i=JPM$+VvaQ+uy-#x(zbGcs#~e zzWf!u`pT==+1*1kYln7 z^z{x^SQ4$t#jYg3QxqT}bgCZe0lt*u|MF{zL9b6%-K5@APqN-cDAp)Ee4wp>j9zo;Gl$uIX=LgLO^ zTpag%k1H6@D&aouznxS>e%@AqMPn2HYyIu>e0FD<>@Ip;&rB`1^7%f?^M2NUJI{N{5@A^&jYuU2o$Y*B%abjeslm*16x|r3OyabNObVmp)K3b8 z6mRBybA?i`lL38a+HH@L$!#@OCTA392puPQt1(`hNB}ZA>CwnG*wR67n^rb5OQ^}K z?LbK21d)R02s~CwxbvlT2#)X6C5>+?GGNP{9MFYE=puFYe04wdqyy@NC~jsmIDSEnQS?YeRR&D3jqXM z8Ywxqe&}VCdr>B>d79jH9SlT?Qe^0Q&swU=^ujw*kD*L?y|q0UQt8J*Az04KAvnek zM@JLv?e5~ygNL|(?_)gL+(gqf64PZ3D(|tregV(lx`n0Xbu>+bPd@n=JKLLxZ3CyW z^X26gT)XxhUU=a)tQn*4jGgP%8u@@aq(G;X;H#=gZ@~=94%R!QE|gsGO!IHs z8Q3tKR|#%RaE=vl){56t8+FD2UDt|?l^IA@C)|?gK}L8E91_^b{VUORJWwWaZ)H)E zHvlc_BM@1AwF#*cnQWGtW>}q-yhxb_k}Wjq7__)1111ulNN%&5e$rQLIE7*@60H2% zs4xZk>0itq?xg7{N!AjiBuW=e#ju(?p5@aqh0;(lCdVT}iyX|+;Il$T8n8hduvKX; zihU=Q&-F>c8=7i3gmkO%m}70hB8<%PfE#Yq*%^5PXU|&?<;xVdM_l3rEwcI z*F2>t_XYu-#);MS2r$`KFU^9w9-&JKvu3I(6Y~D1vkp-eJ}b-1SYKa9UDpU9U^_};>)N#;hkUp49%>; z#>Q2A`***MjVsr%xw)l!8PXXlBG%IB9pT_P*khAfytjYLKn zDiJXyRmn*+Ju9B_{WBao$bH@KQFBva=g_HrKpF%rd#zkXSuc$21=cxG>IO)UC1%S^hBD9oO2R1HW*@4%8{`1$~lzAoWKs{Z`zX9l#6eNArQGg&skW9 zKI)M3Jz@GGjV6O+SYKYta^z=k|LN@;S^1Q|N7jW{k^$z^#g_heJxX}|lt_uEO9jg#*4^ELsFdq2VwR)fVhl(a6ik%;|0LIzEEpZU!gB;r zlieA7 z;ll@b`0zgVc6TwEOt8Oq01g2uc9?}J92v}Jz-VcVQN0XKz;wEg`=7jrX0``#0Bhvp zrHu`|@WL&ut**#DWTY_L-rmNa|KR)hfBy7Oap&$`@xxAATwK2-WO!AQgcvZHOt3s& z!p4=WuvYHd$>9W($qajYduZE6eg2}{alS&^29T2jeu@y78p~NP=RnILOq3dVI&aB= zoHT4w%$dqbtsOG`BXY%;I+WJtgQeA>c#N?el5-Jlz0<>~s6MO{4}UTW*#f{MIovVF z&uKB7L8M*RqCdRnscq8x!s~&!6MA{-v`J;*tU-j+3B6MWfifx*P+N}>Tg1@leJJ<3 zwH0722n0i7gOI~JgZ1}&RgV~DgG4PJtTO`R^d5$tNKpZJmlY}z42h2untfF31jACL zph=Vj4MRXk0pu*KF>prw*vV)LMq-`P8ZhbeLVE9K282;-kV&N=m1ZRYA&Ea%Z4IK< zu>j&=a^Fwetg8Xk<#UEAd}8eSgawWT>}b(9owH2bdQ;*<^H+${bk6khm;xM}f-S|@ zP7p>5j3jX&S+q@r_X0iju1~g+sbT}?46Fmla%mXV^$4SC3Ep}*>oJ`+2qB=GwV1RM zzyKp(iOjtV027wS7f_FCj7GH--`YT_$IEbj1adQp!>c@+uEngGAqH97q;V(DUgc|8 zTVvKX;HD8J2m{@0RvM?AI*<`~Ye9}qhZDrL7FBIAn~E}_3jtk_20=5M zA!>GfU5~IdUV`@{tgTPUYH?4_!$D2;{s8wN0pod7?@6GC1SX8PWFiuLC&D^ zMlElu$byyiHyI>NZrIt`!Mkt1h2Q$k-^RDT`7Nxjtzc(w4@86qkG8OXC~(9K+{=w_ zGK?;E18^UK$oDFv(rBR4C?H~VU84s*RwaTdgOI!@T5T#@YgGx?n`?%OmmCurLe%2a zmh(+cz3AbSNmZ0RIM3>y!%6H)F(xFA2(bkjhCwR4rWhH{$a>W@oi2G|m-F5OL7I31 z^z36AWhmh!y(UND={bbRK`aOTb1adDDxZ&H6$BDOP|;DE2R%!}M4DKgS}36ktHga1 zA~2Wq9ZLk00PDRDDHL=nPv{(om?$A|1Ir%PRxpD>fU6wXFxo~GiJ1#g6aysZgFXtH z!KnuapY@!6TD@FsV2d2up9O}ti1hcfo(kumIZ3JTEJezBr_87Q%vlP=`A*X3li+aN zXShgX;AyY*^Her0@>!fEhVU$}`SZHZPJ0Fyfdrm~>#*qWIPG(OmV44V!g#3`pdE6Q ziiM?03I(0qvQdbg89;kXgsZ(w!pUMuCm+KOs~nD{TV0PSWk=f#L|qYZ6&{3Wwm)4UR6~u z2Sk>B53ZdtC1*C{-*bj<&I%9@yaT)JCzRsYX%wB+m_X(TLr$)bUI*`~5c{3$4+uT< zip$g<3?wpz-j%^j*=v`yVZeZ950m;tdw^oT_Z&HC4B6ECYmw&Y?IP=Qg?SKT2KQ;< zr|bYu67?6gSz(PUvOyWj8IY6WI!n440uU0mgQ_8jG?q(Zrt&nSKQP(3bwnbP^l)cQ z0o2K7mBDfrAX^TQ&SpqeREV5I;#B;iL=Nq=!Q-tR+`soRKD_e*wznSx9APa<4!aRK zJ+VYrj+e){apQ)7#EuTp&c=BB@PSD8)u%feE#cO!TX^M_SM+lhF2@HSet`e@AO8dX z^I!cXHXnR~$z&$48HCBSr)MWEpc5G5vBBo%V>C^JqoXO>w$%u)2xog~GpW>Gk~6F_ zC-NjdXS#C%V?~{Y=1JDjA6kISB*m}h<;j7^d0i7?Ib5Xz1kABjLjt`XqGRtl2cZ6A znF^IjyGHnBay5XtCWB1ea$(vx8nQK{BsWK*( z^9*&TuG6MF&34>P*z>m;DO>S+m}*eNv=>Eht)Mz zn#Vv;n-Z}UgFz$OhM?NS30513RV4+4ceT6+7)%=}mVM=r090(jT2QR7UlbDk;i0Nw zo#;y~PpED$lp2RrZ+s9=6La+27#;g?u(`+`?H8K0`D>&y+*CVW~tbnf&Z5RLm zAOJ~3K~%_MG+M^$>MAZ?yoCL|18i?^7n_b#=wLF8iN*#Bf!;nr)|Wj&LF>8#TendE9bAF#mYJY6ddempm-dtfB8L2 zN)nf1Tfog>AhRbOsEA4|#3Zq@$YWJpReT=QIlaY4E-C+6kTp zKv*>X?!2`8^SsvM;B8L>H=I_Wp0y}DOVN1N0`V-L-)YkElm7czY5iw;txwB#{w&lA zXKj8Q_uQOzosI()o}~$LUfa%T&(&GJeC07-8Y?k7qU)rnw&aU%m#oO~h4Amn!JCYS z_oVW{7GN$#bLIu)Xjp;9c~~+7kXRoR<(w`5J7u)~AYQNdLz&@x1?#+k=LQjOQuOA{ zxhLl5jUgtML%MfL%5nuf!<>*{;GI_nSSqyae7LmMD$!Ru)kK8I42Ry|9AgxaboL{s zq%n0y{gc`#AX7krC^@;Q98#G{riTi|lZJuHL1QXe*BGQK$bpy&ASctwB?V4X4F>YO z;@cZ^#)(J{&O}JDKfJ^!Q_v&?BUq&Z1ENew9JO#T1*9nOKmFZuG$}G-`TiU$B(IH& z|4%*(a4ZKUX;y#M|O`1s?G@p$VoX44~B5*eh1HDXkaQ27eRMBIMid0g7Kgzd*W*toob!-E5C zZEvZAXD=YZMH@=CRH*X+uMAOXh_SNERB{?S6)2xnmFQ|MO}G}$78So z4h{|4PNFpr4-Wts92_2&DQ~Cm-FvH)e@Skrsu~~xoaQwaFzC9V(Y$gEXR`@nl17}h zB=mHa7_%5V7$P`w2mt`;6P;wwapYham>eD9V0RB-#-y3zXfnm*Xo9Imh34j&NW41* z&`!{`GVz|yW^m47btPbRb#=}=ZH&QeI>U4}LjYquS{fWqFaYh!{hFIB0i@)3hPA>i z&_E$DB4*Ql?Cwf&f9=K#*x0y?D_5>)T2JWXL~}IgP%(+&gkGok)JH<*Z;k4C?`82i z0p~t`H`j<#1oPZFGdzC{C&<0c#g^|G0)vNaiwq7nq}%~A^Xs8b;)lO$J~os4W`GgT ze}0C`J~@aXENca%c>o=}zziEHecA`<&sk%^M%0BlS%K7F&q(?i^f84wO-a})W)A9_ z2HQUwg*I!vtASVzk`YBfITvdBf(#1)M^%YHWJDzBdYOWLcD;?TX*${8vZ|H2GzO(H zK!dgZd|#*4WbU}a;v@?BlRtBwc(O&O%%>HC$H~7>qs>3_CnA6HDBx9~Zx=s&3` za9VM=NMX1r2=S!%^5kUvq?Cn4i@@U=9w#+OPWrx+UjJE}Os6#>PP#W1fnuIi>_6@I zp7z--@;jdP{uYgTJn23=$(nPPMnF}0)T2rc5o~qS7a60mruayOcun9aleN08OOy*y zjSu2Ns^c3|x zc`t>kp%Pyso^w_vKorOhY&p!7oNV13Gx;3M1)7xMLcL#+kTRHvA_E?6!&G)qXhuwnom?(D=y#TdJmA1XRds1gNYflnQJEG1AKn=`r;5pt&kZf z`5BesKSw0yI0DwFHa*B&FDW1ew21;Sb50J#DFuvcY4%t{SYKU*w-#-4gwVFKrY1({ zI&>Tm4bTAyh7dW5&4Lq{a$J=yP0koYff8D>;35&$^+%)Zz(Yla89*ydDfZ{BJ$+%4 z(=bvpMNyL{%#@QGauj6d7JRDk5c`Z9B&LYX0#7u32JD!!mO%ioDI(=U15{$mviga2 zB4`JRA0@UcPoT9(OHm6YZAO_~c*TTdluBOW*!sq4pDZIP2#BEtku3rnc=8BQeD)@P zUor>>9i~l#rfW;H+YlN-h zT?JcJ=#)A?9*=ST`VHKC{zW`@^F^$!ufaPzC;K1%pSAt{le7pl1rFLn^Kuib3>J{p zFi|Z|J-APPpDEU|yzcb-PnNu=5_QX(B9edau=wv^2L_FSym#9{(oxcN*$u3M($J3~ zfQ`fk=KEIOv)|eU*t6%S8y+?a5$~lThz*M-1R=L5wU24;iMaOktWkgMfD;Lh2sj_lj0{A z1z;}n`cJ#ACw(r9+5r}Af-HLd7P)uNyAEV8w$SaV_&k|SiMEnfuSl&~JGekU-7-(y zQ)FcmEcsyE7r;&n$q=JRCdom21m$&m>y)@}%Yhdh%fXKg5VPDKGI2EIikDx$1cD>Q zw^9FFPvf^L1uI3a5jdbss}mB-W@W8~8@#_<@W@m$^>D1gn$bt03r-JE$X5Y%IaL{m z&4Eo)5^?`M`7oc0dsew}e<)8NHglUBoDVeYZQ6wBn{$@?Ue?Q@}**#O*A z+>IVqazUqIwPN+|B$qCM7@OGnA~(Q#bT1u{J|r{07^j{QHobHsgTK;3{qfh@9g3I_dmd|e)UTn z9PFbDZE03Wte7-pjPpo|arx2}+`e@a)8-H#-TMevuU&(_DP z#tl4vyoDe9*`MOi{_F?%<-6}}M`~GrOao2%=;?8X-3$+Mx-OrQWHnzEQ_SY|!Mg{tIkT#9_J4BRO zgXV;`erS;8opfzC*1+jv5ISwxsz+ZYmcs^sG=x%Vg7jyI66K~MshrNp>Y8xMV#tkv z7`PDVtrhl7Vgu(ZIPWoST0{lpW%~%!29wlgl8}=a0+@}`?AyV4Bgf&&-xW&+2C;Jn zHYx}LR1&qr4HBm}jCF^f8(>pFzcVK!^fwq3aoN0kMJ@KtU44hik~%j)!& z4B&HgARKBp#>iLj^%$40T*b}jpU2g!*RZs*qShG)Yf^dMb9^M5UZs>^=8D%0^()h9 z^vbfNdqq|!<-MW5m*RZ$tu!9eTpA7QZZ8%bgWN)Ya-uw6c(SfJrre*I(_)P8nJB~N zCQzpRd0otfcLoDWRG+SGM$U8@C|W?tgJ+_sI&)+r%oA~?T&Vg`DLz?AA4;)Pcyt;l zGBTJ`fzVd|SPWsX-qQfwC-&29)d(>v1E>drS}RP1sEHoVN~|p>X>eJSqh5P3aLkGX z1LdxyIkj0IkxMWZy$x%@v-3&O+fO^gyYm!T&mxmwM3#Nlc)LX|%A(Tzvlg$X6;e;a z)1D>z?X&ng?Xx_tAYJ6%covq!dH&whK993DgwFaN&hmQCql`K2^M95m(9;%%v#LVQ zx)7c9cjg8_?qHh|(4FI1a+*vZ@6t!?n9^C#o2#K=F>H&RH_k;k0i+W9lwy(emS`BA z*7l3Pfni%VN6t}pDgjMVCelE^0rjNap3pCyWSK077-4e6ly2roy`tV2;c78bIrR3K z@>~wD`F9Ts3xV~KTA_uqEA(KEqtc0Y=z;+Ijmo5T8fmg+A%=43HG04hnP`sWi7-50 zfRzb{9)>gN8xYxQR#lKS=-M#nf0GSADq%RsB$+b(H|PcjAC>+l4|1elzyyQ{XQLKv z(ruTGTfDq>5U)ta$`oFkK`^$+?GrO1g2WzmG2d-+$f=Xa_{wB6dlEIO4~$L^6Y?cM zqYOp_lTL>sI0bZ^^fhJ+Lxil+x=BM`(+apA%Rc;^vxy5F`9rjrQ{j}AoE-pz1uG{x@jK0*j+JE3~R$n$5> zH|uhfC24*&AWVxu`MqV^2_u%`5Oa}On4?7tv0f&6!xJgW^~s4N00i8Z;(SJS{sT|! zGkHQJjh0ks&e_H?RLaOryZbjuW}@Cd~w)xJ&UbQz4n`G3t@WD_?jK zU$}J}yIWg$^X<2Bc(4Z$W3=R9!Vzv>Ucwu%y^N7JSXx;{u*=xmJHnk0KE%Cy5Ab+% z2k+mxkB>ijgv03!1mUGPO`Aw02Xl_X!N}_%4}7gq8-!dR@#RwHS7>Z%=7Ny=utDM* z&w$gsmgeF!-^;ncDXb3`P-oI;$f2TOXy=gTE0;o6UR&QtE7x54TP0R3^`D_Ml!wyc zqBYQ)p}#+54bq}4pC^G*q~=17wP|R;YE8+ptJ@G&_h0XRCE3LFnC z_MlFHW{!-c3h1v2F{u@aN)aXyI4;bWY=LslVl*0~X=aEKWnB%OJZA(+%1DqT0}fG@ z3kFQWammeWX`IRPC+Za=@J#DqjX~GUz$v1tJ*;IIbTD>=<)sy@uT@BFaCmSeX&|M! z77$Y>4W20bRtA9PVzF%-P4a-k6vYM=lfv8#=3?i}ApTAoYMQo^0=y0thz#m#gbP=m z!=)?NuyN%I#!Jia^;nv_rP=+oy1)#`_*~L|ifyDn4d~E;OLKCVT0>;!A^?Y$xja?x zr`Q9_3jk8?h`f1L`8&-K>GSi@D|SpdyAYYV$@{SI9e#HdxPq-W^g@_J6lYsHi2OIwBz$|KSyc(zwyn06pQ6g>;2Cx*$;>z9gRbl&2i z#vSGSNbEC|2Ow%JScbDn`Bh0RF~SSV5}0Ab5}ML5yuP_FL0h>Iu=7PTfk>$N`b?|YW};IodDJWdsGT4DUG_rdUcKdT1J zY4(xN1LpXwP`_vSnR7p@Fh%w!Q@ZTa>t((k%|H! zZ=53Ei%%SU022d9t*aTP6w*wk+zjIgF-UU;Cj0(KCHhvquMx&LVY}<(LYgE3o`Whe zfKa;VTQKN3Rd5Mm4Gj7TcGAYMZdKmu*Fu7<0|AVWAj zc#KDnHgR}(D9s)PBjs4A($H`Ymo9DK^*3I}sP=gCop-SLcoR!YOSpdH1`ZAmu(!91 zm}FuSQ^eBBDxSZ28~^3+{{i3s{-1!^;5*;>J-qhX>!|%0_wL=tFW>nk+P1}LG{WKG z0e1IxvA?&ASu;h~HACu7pP2%!G1nodrimNTSFHF%-VVWHJ>X zs5V86VRWI*%RsL*DQb&+Fw@EGAWg!Q^@J7k(9^PwPD_({g6UwgzcW3tulG_}YpFb^ zSsjp{zf$;V18aDA?+@@vtmbJdkcF&>T4HZ4LYO}@}|h}LSOOCl2U z8k7&pI^pjI6)6d*I85TmrNX}fWnY>md;UhSguQkfrEN_F07yeUI zwbHbRMa`6(o_&*nKPB%kdtLTCXDT=t#tG~-L(fmy(>ufDPYi) z&gvM$1?ZMvpTwb?vUUQ}{LD<4d@nK&AdQ?P`VI(aRY7J;$Z&(N0SLc*D1F{e(vyKg4wK<*uqwm54sl2 zqOQpkV?&hLf~6TVWYY-XQhslS=US6sE#SS#{V!d*ic42+VEyuStX#MRS65&rq=EGQ z({g$)zW!nvQe_Vdp1v>AN^*uRYO_8;z?K_r9zL8W_5E5g*L+qs2kALV1S~ulhJ5;r z4Pef~GW?tQRvHd7hmC-kShmU1+~?B7l?I(^H;t$Z@?D$vNwG`n^~usW1;Lg?4oFk6 z2M+55Tb~hQNbMcHa;7}*DJ%AJ3Ih;S5mG>)d1wN_l0Z&#SBHT)cw~WpKCu=UBwV~W z#!D}~0P7q+_}~s6Ki*SqDygN)AR!`zD8Nakr#4uWohq@+b}CN-qeP%>040C7O!V2&uGOX1DBdbgvLTxu18DsKv%n*A7n*Ips|Qfi(lEO!AfD znw8ri_Jf3ENDKJ>Fp%R34Ya^Rg4H-Bvhw<^^?+eizCu-bwe%@KF|v|^BbuheblMZ8rP*1{qSXy4j&0EjojaT2m#np>=^XEUq zy^lV`basg6Z{Nb&+6COba|g3#CdC5*DI_c{Eu-rK{_-#W3f@=vgFpNO{MLW-TiCdC z8JiEcu)TEv7>ke+?%unH&CQ3H&8C=5r(#3k&_5?BA_fCvBsNU~<3viD3h0UoOfjTb za^Yd9L|F>wk&)DAob)*WD?y!gs+ED5&JEHkT)8*;lz>!zrjOLh_j%6{KyDD^EO&Kl z$mb1h=9odzY7jyXy3EtGeo`i%w|sx5SW_t?^FdG!_x*I6ip>c~u@xl?66(s~xvLvk z-&nwJbn_Y}`&(GLbU|eJRO7|VONiGl;qQOQ zu-w2|fT3Veqp#11?0k7#>6EoY2-=J@0F`70X=+&SApa`QJCQ{-8iSlenl*Y9*7O7z zbge{(W%_?EDg+A1Jrq(WVv%Ldv^t&Zn=GkJ_zPWKn?^bHK?;CeKls2wb6_N%~;$CtbRb^wXn=3R$$(1mj9w7uF=;!^72B;Ijz*&vUv{K*;aXl;3 z1oG+0NJ5DM(2VY@Nz*F?oGG&HE(CN(M;I?(LTEd1WHi$$oby;+S%xKpz5RWO_;Z95 zQn7J$U5m-&2ohUqLB?xldT&=F>p)gMrxdyX5kc<00gr-8e?-8fR+`=^psp*duPx)% z*IvapzWJL7?6JK+1IVLGNu~8^?z}@92V0VLFuyP5LbjB%x}b3Ji921>V!vLc^eMUi z@b8&o|KQRn%tHuEIZjs8cDa;gmXwE2)vt3NbRHz}e3}oC)iU{i=lH*%&tg^*WJQST zUQ}h5dL9e)DwM2TGum)V0YIe@p$hsO!dvHS1XK1`&McyQjd`f>X0^va)s{w+IrQw8 zIY(OL!!QVp$e*rNawEVP(XnOg(wAO;3E%wY*8yX2lZmwctr#?j*q4XHh^c@`BDS&N z3g$(B?z8%gKab-4vuut$>$Utmf99;po8z9JML(Cbz(5yzO{IIB3YaX$1mhu-`6y)7 zTp3t0uyBa6Lx`+?si=}+uRk9O2nP^$u9pzvd^)<_TWH9wbhw2dKh{8-FLCRegXf}Kl^=r^PAtm`uaLHA3eg~|9}4lKmFNHaQCCT z*xTF3?(PmIlS7qd%F|mC9}L03!Wy~XI}VaDAEYTJ6U+=b>pCTOrF*E9lH)G zg%X`6`O_NNW`*_~V?ymKF~t?0Zh(o zPD4PRotyZ}7nQ$}$@Wq#^itb=c+8Nz4BupqaK0Wy(*bQG*Vqx`;)ONbe&KmMc=P~2 z`RPwEYa5tE7&}5$k8t_Q6;xw~&BxoA9qi%#U%i9cCoCArWc-l6vL>^99zZ4M4i)1XUHfP{!81~bdEb9%>+WS)1891qqn z81q1_p&DRl$zZA2L6FbA03nHx&=)k;(o^=zep1>?h%;532UA(hagv6hQ`h?n%InVW zBQs=-k^3sExu7;U11Zd9J@28EWO@jh@MUai9vcgdUhAKO+;qzdmFxj8*A3FBAQp~; zaSoh15HXx(QG)@c`Qn^B7o9e#s(J*ngr@1xb)huZnnl{_5x)7Y zZ{dIVAAcVgHm=~!x8BFzv{lNxHkVQW!_BQBy>CA6Td8n|QjE$5GKJX#h>%5?4_$UB z6-GtLgMVW3UYH;T+MrUeyeb};6F6m0e9oJXFsjVxpNIMMlAwP0K6Vv)A97(bpIw$_miJo;b7$PFpip~Y46#_Zti>E>fs`8+V?gCBZr^$yOG_SY+u@~` zZsEbhEj)a*2k8^CfD%cD2q6fwBd5C*`;!hk7?Ko~aJDGGvz*1}6ab%ffwAZdI&VRC zQo(zYto&L3#!26^sK@`jUnhYPKdbk2Ug`K}{oWS^6rNZ9e_Au+S>N+Xzjx8kY|&@) zX-tYmZ7e7K+j)M+vwSf}w9T|gYsreNzex#zPRo??$|<5t;=it{5$eh#CYcQMKGFz| z5u98v3De0g91p;H zN{bEZ@e)5c7q242Aa)V3T%^VMKxXqSLBUTk2s6NtDgI*TbR*{oXfzE{fORTTR7QgM z_hmZdoQ1PaUaOw`EHP${NU>{gQB{PM)g`R1uBbd)rwk0;ELpOolfltpgSHI_F^IpF zNH!e>Rb}u_KW*zFRAdZVh3`0L5!0LlR}UIoNXYVe1{hALDhuxox-f$=jHU4yUwY$J zeEG}&1Z!&-WKxd85i4p7AR)zo+qa*`%E}Uc{NtZvXZrw#930#relCOE`YDWX6Lexp zBvy+U3Q!Wr^!Xk*WSv~=rR8OO?dxB~3%8#KbHw`E1x%+M-hAr=v`s)47?a5ikGCG< z;9$SR#gzmGl05ILS8w3e*WbW%*KeX;TE>TWKERuA{Q~>@yGYz(b>$+iUcHL_gCp$j z9q4rrNX)3~F>c>}5wE}gWqkYF{~ca_`8J$m-23=L{MiqFfdBNDe~mkL?_+moACt*M z;cY0_pLLohDhUT7gV;$oNT!jZaxjC5N{PNc0wv3EmIDzy_~c!vjT866u0h9q{x0B;>umX>h++GV`{ z+N)Sv8l!DHY;En~;lsyx>#cY2cxww}vT`QC5n$PZ4Wp`jQ8+kjQB{)5P2R$g!DKR# zg5Eg+sVe^=6+VhwU+YMqsxi~M?Of(~O0h_U^B%&3Z0%w3J=d^9Zh}f<&JE;CaD{>xFyAynLI-jg;@E!DtRX| z@U|+@KLGHWHqmt*+&~c%HJ>~;mNHy%sKj9Ir|p7~lUO)U4DtpV*ADMU(gL($P6W(m zt=vO(jZs~r3kh8}MG6Y4B@0GwgaCW{2N;dk00c~D6HF#YB??bu{qkHlO@pRwO8lS{ zc+y1R3>Pdp^*ykTHOWW#6dEB%D1bGIx*TI|?GkR@yoNWv`VCa$RlN89N7&lgM`Ejh zIbns6C6$f$HlLhYk)fF=z&~ z#?7J=;FExEi^SWVr)WHDI>EEN-qQ-{XDeu*?fyGUl;T;h6J z1lO)>LEfVB6=IAMbEc9^lQWV5p(9(_Y(%0eQ^U5Asfo3Ob~Z!gpwWF&K6gzEG7Ka= zpe0k}y{yw+9nB#`X*$H1DZgSl@RfsgR;8OAjBx_bOAKR`XJ7=*6ghk7xlAs)t|`rk zuIs=t!aMEWXHPI=;4N2wpmVxONltY>SfL~gD5YEJ<6wq!By{%GF-D`R0D7S>L>LA};}Kqa{fqeWm*2qp`kHp_`;9Tgh!`T;ro++E6n8$n zkGps7VSj%jvS=;5GW;s%e)r%;7Uf1tbCluCG2+3-pNq~MbHGUyAxzL ztl-|qcj27Ft6%&gE?&B#zszQ*uuOhPJ%mPN-K%~Hw_m)4J0IP{*7hz82-bR}z=%qF z&QWf10PCa0G?Y<_w!z^o7r6c5E=hb6GcI1bfQ?J*02&w&>QRlA)irQR*xNfm+gNlV z;pkwB$z)cFSIH6w>S~OaUVa5%{Nig^T3!W_!=nd}@T+&<#pdHjXq$<6{Fhg-y1Iss z?ma*=n@MaE5-RU;@!}=??zg{(QGO|b zG^#G;Y@5Y*0<*|62i026q$eUx?cg#s&iT$gIP__2U8d4Y zArhiM4>|Q~Z(dr-QMs2aS%4Ed<%&2@SXmk4<(FQ|=Fx z6W&n)a$UWA8Jimq5xXhs+9GiWvV^vcm^7UTpp!+HTCp1``@%U7CX1s7kmhGKd*}1sXsuPS9V2i8>BQYvHH;-) zj}t(H!~^s`=MtTo@-$a7BQ<$I;tgrAM&#JGR3>~O35XP=2Y<-52L>r8h&=;BA*DnF z>vHBet1o#F@8z6AQ%#6^raMlXEFXilcS!8QZsH_E92WvzT z=DmThB!*2U^y1G4WXhi~Ln=|MR+CLM?I0N>RX0s%Eym*!#^bRh7IaOS5FZ^)FrCiy zXQaU^?@<7VM%VucfrlDnFdmQKycNbuh_H^}y@jPb;kD&GkH=$Nxq1s%uHC}z+s|QZ zYaiRYKS78LW(ydfF)tuU)4zB=(Az@{Y0Mq>Q9}kSBzO~hR*t5D0EEdbX~RZ7LxJ)3 zjqy1((*Q)wY-F-sa_kelbrLD84Oj!f)fJqzn09SxIF_`Dn2J=tw?vhbUEgHVb-b$T z5~Y`$dptM;<~7+l2Zo;E3I}8a2Q6q5V>X)=1(8*rh;VFFossP^PgrPjG_%#UpF~b2 z>M>QpSZftTnM!@0`A3}M{CaF;eKN|eY1<&Y0y$i2ldrcw6dOiXj^sl_>=;Y9IDF0l0;^7U4->s5B6t&z1hFl(>70ktxqTRvw&`5 z0{I%X>tSYcW3?db;hm8wrSYh|ojaf`QaCO8-i~{{ix%Ri6_Tg@t+RgaXZhStx=$Cm zkB=*S&-z}^dMy@>u{_JQT%_@JS^~pKagL`&VxIMLJL$_XKrsO%ay^6&F)>0Ucwgga zdW6U=d_|gD?L=nkoO8wQv35Q1$m8F^zhnR~ZlgZeeK(>Ol3C>2WUmWAL*S>%+zWypM zUfPfY2pf6-R=m6UV@fIE!GnkR(GP!w58nF_Ua#Hl+c)t$zw_I;c;RA3MFEDijAliI zu~;%fz{aHw5CiYL`ytvkp$l9#Wn*O8D3f8*4b>ndhOrLDh`PZV(k?zqDuldFnuB?< z5qP1i41WFVU&3#E^Q)*TgRSjbxOe{{R@YXLBbkgg62!Bg;~|ZBpwWWhuryx5+Uf;V zeuNOX_qRiRv^x3k0bx5X5*rAwDeRNG|#0Ka_uC%Aw2SC~zY zv}ht+zwshgRxe^_>mSjzhcHH@r&Tq=Z~Vr$@K68gcd&7J9bM?~!@vDI{JVemf8r-U z{s-*s?x1OA=+pyllz^O-BbBcJ$b=}gGqJBY2SBFj)3!zAgu1TLM44ujbp_rQ6qqH- z6$@h$5(oH7_y*{JWE66#B>1RogIxkT1idU&GO1gFE*g;3y?@CgSS)DsEkV4(-7KVtW9z2jIyBF%fnS zJ8V6Ah|UGHHp18u2o);tF*Yr13&dnG2?p%OSYLe&-mYVJ(%~O|whzk_)O3W^Rg244 zFJj~qu3xTk<>CmJu3kkn4nKeMSLn88FxCrKA_~aL7!T)bc&Zh&n&6CsafIci6>M!k zQZQG7xBZ!ym_Q(y#4w!TNbRwLo6BcvaO`A8os33O7SpY$vtp7)i>fP_A(U3`qilvoKcI7(}@r)4*<$hVV(F4G04Rj}$w^t^-Jlb;B~T_RbfT z0H+9V3El~OkfS_<&T4clC$wF_*wu(hl~d88og{FIXhTHXMl_8~cYW;zW(x+n3L&vJ zKv)<*Nf;qyJq{*E7%j^+w^fZgEnzY_!r|UNrn3gDEE?}ba%~Wm_2Ej3j#O1890x`S zov0t2gSAFg15V@q#J0Dzw1VfZJ%?K_zKr#Y7cr_0td)jAN&#JrvL+`Bm!om5g|(u@ z5oV68Co;)3BEioo5i!BL4$t3w4mWOG(|9`I`pxHI4B?$$eSr7g`v?a|qLyP52Y&aw zpT-jT2xgFG)Qj}qsU%;U+9_yShALz;~b6i#8r*9jKe1%Xu#NiueR`htUj1;@-! zh;xdLG6*4wChTHFNDOaDnG`I-0Fr1x69J@7cKRgR6GI7PAxQ;B)~JMlWJKu#L()(& z(r95rNJ#L`>p&_XfyPlmU);g9|Mp+wfBC&HVeI9QvHkHc@qho@Kf;Bt{vQ6|H<$4J zKmHRuxb$22m%sZBTw8GqH(ZWu2ArkvU-YwlR{8r`n?5HM_lsVO^CkzJ_q`sc7&r~~ zc$#%%QNR6h3YgA(n9kIS4QA2v*4bXK_4kJ9$_!Q}sL%r|< zP*DkJl8HQ__j+-Puq2c4)#Vy5e&H4_UR;Cs7FF#Bg>07i3k0ugBWAM>`};?D_~ua#iV`uvihX+C^_uivzgUE@kDHEU=BREkhI?2l4iz&ewV0C$n zjSFL3+E~YEG=lXWzN!#G*nGT;k3QZ++sQOuyp)=OOG)yPV}x-61SBGb?InyxHE!Ly zfiHdObv$?THe5B*L2AA>(0DPEkCM24;}+g{{Q!sidw9IL2{^)y8_!{VeO0^iB(Sz5 z^13YJvkIyEvLo01&Jf-zZrsGJGQOM>=l{+36+%vzNe=XgVu)B+yR`}5z07J9~r%ru0yOdhgK zG3e{euSqs=3+qfFFoz(AY93ez01Rlx32oD2XQ#va?|q2TcnOZi_~`COc>Aq)@!-J& z?Ck8r`zc1_ps5TNgbK?ehnqKU;?*y_0cS^e_-GR=noWK8qxbOfz4tMl9?0uPLOmYg zrI%iUBa8k0Jut*uk7TiNaRa~myWhrh&t1pi!9ITa)1Tts{G0zBKl|BFF*!U!>{@hs zn9fqhs;W@ewHCd=blSlCJ`=t`)eI0qEpRtYd5{UH(IP?)Ygu$%Na_%2wl#UWna!kx z%2~8g8ZG%;kO7qann$17v#oUsu}j5Ao)5AybwE_vr5!|Wg;eDKM&-nmZ7H!UQ`P*H zGu`_`a;Cwf5X-H#1>6=xKZ)(vcPe(HuI<$4E6uO9wKaVGYhT6n8`p97!@KBaGdN}} ztuAAIeHoXptl^b^@-qBv53}w22<-u8vBOc*VRvVSowmc~bPDzcDYXDG#^V~+0Fw#B zFv0tEkh_M_(k&!wFdh-cG(nhsglTgh?|pa|ZI}RIAD1p&!*_n~zsH@A9^z;J_zpN3 z*vcWuAPvqrcvr(wC5i?(eRd4SOCvP18QQK@x$q#;(OC7bv-oA1Q8_O~r%n|^6mKr( z4$7K@q4!fxNXdmFfO5_gS#bm@q)uR=LZ*)?;qux#Zr!?#m9;f&@9toCcN_bAJD5z4 zG?FgKeW@_em;x9HqtUp$t~^C`-h$KMfUhu0fOO(cWq>93ZP0b8ho3sKASR$E9a z_LsgOOX}?xsGn8vpRjcj$C7`ZCEKi@Q@L&gIB#@)XGA28aaXwQw1syTDWZ7vJI!QI z0)han10apMPL&ogMin4hNOS+}PL2*STUka`tzkBs;^^=QhewC#+O9&%L z?%n?c_wGN&;Y4%bwE&MC!BJuy=V5&VcyLy)QNsG#5`O)wZ{W(6OE8wHm1a|J zO3PbGPoxl#-cJ!k-Ml4Hc?2cSGAC6S;kX#1#XUK|kv4LapMod~8+~StwW9or5@Vb9 zf~4G{kYb7Z%ZU{k<}A^Tef%+-{7DFVgp4%$oMl{CTf)Z11?*3b@Mv=%O`|qZd_GlW z^<0uc)r+0M7p)UZ4B%x;O3^D>rdS-fXQ``CQ&7Jl&E z8T|kJud$*J#Xu2!B3b^^1yjIZ{~!MrKkL4X|Mh?S7g#!DK|Ca9?!NyX?myl{3*e)l z{TMsH^F@sP2*v9Y0HiEu9(>yrtd(Lw2ofrDI$ooA@ zGwUpWW07mI=<7I7WA8X+z#^Z)aj)qtV9qc7+H3gA*ZzOr-s?+}Bunr6nVGwX%7|2z zS(T-`T8ru)v7^<_ECwKe6$F6=NWSope+?h_%168q58xq4EC|f*5)16?4yJcR&$O6n zSzT3Kx>AeKuFQ-N*W4qrr@FhUdj@$Kia`MocFj^|%^mUbuxs>Z=9Umt|t z`r0kGw2r}Gz&r1}%j>Vb&f&p6ownxkOV9D*OE1!Bw0P~+U-Qb(-@q2s`Y}UAS1)Hd z;XzBTy~0~L7`?M-JiXomr%$i3cA`hO+oI8IpiN9#IAWt24M!XeQ;`~ILz-n+8|Lpy zWCvBmk*eu#V#c+;c7oN_6PT!hbAfKA%-sE&QQE4gyVVmX=q+{`jR%xPNvqYWxcIf{ zm73K(0Xk5jn3rOu*-A(nk!Xc|NgP+%#x|Jv$e*f+s1R|G=6}{esbfGu6{}P=S|(Cb zYy_VKf|l5ONT*ZMX-cQFL>;&0z^h=_PF3tkl#s(SolY2!M?q5JW{tb8OeANtOlxhJ z_EmKB3Rv;AyDxLj+p~vRPKPutdHuC_+1l)*b%T5Nwt45>_u1XuW;h(vY^Eq}C<@UI zt}Lx{>Ec;7&a5*Tr`)-7i@4E3YsIbG*LnZyTO9QdYEwSzEQ{S9=gyvCcXyY5|FF*2 zZp1N9Klv1oUAVxttMBvj%RlDF|K&%#``){Zh9i+YgzKp>#7RQ4)ns{jg;hG`~Dfhr=(SJIBMz?PxmRU!4G5`c#$ zp!#F94hCq1-|0g$LukTh&hXl3v{6J#w6PVXyP|B*id{7a4u}y`UKS{=YF_}Mv+LTR ztty6VgHY7m&qX!JH3K5VtaPqwA&$f~Ud--Py&|b6aSjt178e)kb-OYNFEh$4CH9`g zdWz`?X9t`+d7hI|lhMKyV>+}K8e~Pm*7gzmY0T!>a(!!y{lO7Vfzd5=0(qKZlp$^` z(rm7xqprC0>lkC25Rb`9Gp>Q%~jp8^o*>mR$^XFHH$eW8? z6bYHohhw8_UkX?0f1`*fPFPx8;oSL)JbvkMPM*R>u7r@_Vob$OaTH}9;BkfZmb~(vsXSaN z{|@KSQH;_NX;DZrM35gCBgUY0uk7TSMLH%zF&U4E0-bw28eofpMv{nGZXssAN(Y0` z0DuVK7R-1908$1}z(j^57Dhl4$Fy2)TCFxoqd~jVVPoSoCr@qANE)D^(TsWNrORBr za2oGQR@c@*U*Xp6ZSq1=h@>%{kNTX+*eavRnQ5>{L>5=Nte#lH2S${T2nBFoSm?66 zyu!^pTWAeY)$qERnPnw~Q&nP#4(GL&6r(ETLRWf0FBJ7yi_FE^B1FbkeaFnq?zp#r zn*)nDCON2LY-fgbwl*-OPP}pT=NI6rL}^7{6eMLrYz&j>lr&8Ps2aQvl$ta8EyX0b zGSjUR18f=Yd0;pgQ!}!v6qrg{BgV@ie%ZS^_CqOHT59tTzV~I;)=#jxz0WUReTy46 zcPVWafO}V)NIDO3BdVEy)gEFDwFI!pb4*|(;mcq~t%;LJA`+3b4x=g%5 zXfzsPJ{n>n!OdcQKjqg)_1ZN9;9;k2h12V+w409Y zJNFoQi(|x{5AL#Y<}_`UvcI#*{?QbNB5C*7IDL|ZX7bS>gPm~g`aO0Bij`iQ!SDue z+#PcI*+#t){Kjo8QuglM;Gj&gPSIID#kn)97@IRX+~Y8fSUtH$Csshl&b>`0W|?#A zJ=|oEJDX!#OD)pFeZ~c}7gt#AH5ec4b2LhEy2+^v7g=qKhHyIAbRqG=ME@K&#SNgipjVD6^V|~QBy5ty6!{fuV^`KVMA<| zXu}(E#1l_G&P$(viG}VW&TEO_@w%P@SDC}mb2w1|03ZNKL_t()t|>^AquFXPNyps2 zeU0H@hjZuG_`(-n;PjbuXdUzX^CdTL-r>%zEu61ChC?$ew7NKn&{5Fpd+Pjg6L}J& zX|)m-m%6O1^jPY(X}6n1NrT}e#}<~Y?OjHbw9cuWWn25;;vSl7oJ_hEAyQ0q;X(LKk{|vu=YXQTa=6@Q@OTU2SY|D z5mJ#Aqr}<>Th)5qnImyURSYI^N~283)po9S+ZMAc0LySNveYt}PT1c+q~AYcGM=Km#xLZwTb(+|ptsOscmF<{ zo14T@lT)j!3nBBT9n3VH z6)E3znzHW?C`w1O-J&c?RF;M2J`|Ky{9cHU(@Gi*>#S(8{mjD8g=Vi})l}0I8@xJ< zF>?jFt(%m}JaGmn$t0^Ri(no{@FDPl#;t{}tY$#JOqrUo!c50l$Ea!~Z% zaa+a=X_|$CIuy+wRM7rPM!Xg$^N2d}q4FPSHki(VOo;qQ*fSU?65u(S~xk%r$j2j zIDi6MWRlw8Ew0E}>@D#5m%hO6&H=Bz_G|Lo6US}xOjr|*MvEv)>T9F4qAW_RmAJK{ zs8}Vk4rWvwUjwsR2|L640KRB2NkU{IQa=q@-?B!;m)mhn$*e1;QfP)Nc8QXvG>)Rs z$Qn!(b7K7z&pz`!k3aDQz1|{8+`ubEBZ^sXG+AC=X8q(Tj*bpFJnS>*4;YWfq-jc) zr8LSW)`~ZaLIq8~#EM~j4Rp+yOyVb@oW=Pv#G^?wJI@~Rl`$AI6FHe!MzxadT&XgncOh9by1Rq#@>VE|CEaKMFJ9(mu@+SMwsu7YVZxR7We%o`inpGqq^FPNDr z+8V5IoH})a3+Gmu=2Om{Sz$Q5!0z@D2ZvM8QKl`zz(&#bbN7lj(lJ(@4sNA*Gv>c^swo{WEbBfCdw3_r0c znKRP>(5A(?jb*qtn1#8zF<0LHId8o>W;`5``VKFA?fd-UKl~!ibi|dP|Cpcr@=dlz zC0cnJOB=lOrLXg~mlpZu5C4Lz{gm9l&!7Lf=R1G=CoJu~#*csYOYZEak|o_f!E;~y zD&PL<3oNx7zu_|gkR9IT-tHFViD&uFQ;wHkd7C$XdWG*ldxGR6Zq(7uxA@V`pRzwL z$VMqE=P&ck?|qvuoNI9F%^&fT`#paDAO3xwT8Y6P^7Fs_kKAm2k^kinKSy!<7yLi} z?h4Ciml@u@!9nU-Jav)BHx}5raf8i+0hwCh^4Gr4AO8I>5D)M2FE}mS%e1c~EqbALtq_h911^8*E@gKEDKd#|@l;82NMv0%)%s=XL^C)J0 z5A&HGMjr4e*Zt$boZmk1XM#pr8cgpkC`)g-$GMAVdHdaWnT#_j;G9tLY+-ScOqN_Q zf-%9>SqBQOR+?BPv>Hu`forzJaUKoG&($=d(A=W@Y+8awsffkiGQHk1QPiN*UZmA* z%faY9?RJ|uNyOO8SJ~mg@!R_l(Kkmsck+GbN?`ybLIX8M(`q$Y=(I>0Qpn_mrP)eo zG#j-+mKBkkIApsr02i9dvDt_H)1xTzlF@KNSy-Zm1BzqFvYv}MtX#OIfiJMuljkK_ znzOaN%XE^`YISCRm!Q8_F6ddMX)E%QogFd4$zk)|10o)f3ijGj5YL1&@Ibei)1wX5vyZPRQdtgkII9QL_!^8@w|cFD6W z&_G3}@4O?=GH%}dfP43E)s*ty!V=&3=C@c`S>?}v@B@DKv!61Vj3~=8=K7P_>W zZEWdiHQOw$EYogxNYjk*c*0~dMJY|Mw@9niqSNWpY&IxMD^%X`n7k+{oh6DQilSsX znNZ|K%@hy-%LFNiuG2SM&}lnnIni1x%0jZzMISw*%~!?gZ$_|jJlagn@9(n-dlaUI z)isl-QB%u!#Jo}(a!CrUOb%n>I0-snp{3i>if2fmX**j;v!oO{ifAMW&O5R!lL?)P zh*csDjERX&T*rc0Y?W1q>~AGk&&huNzw?i4*{4e zaJDEioGt67%{gDg7Mjo;Ddsfbe$EtCJPw=_zko>VS;nOo--UTr1i_cZ)o!T)B2hEn ziHb2+dt%IkTqtxEHChHRjTy7ag;ar=ftvuIIy8e?M|G->QlTXbk+k)xZ!{|Sa7B>` zQjDaI*sRQ1tI2YtXUPWyNscYc(3~6MSbS}g5cL|xO_D~Fq|xH^>GN!yK25XP43|T$ zg>z+~t6NE$&?>MsL|5-@iPkYz1-8LlT~h%ywo3J2hF2FYB%&aW&D`D=K(qj~5ts=YEs}#gM0Kj!89zV$ zpJypmNkV$grCyr;B$yX+j0Gq6Xl7h!3m@*Y3Gd%gmX6%#LHZyJ6&u#6u6=nb&}sg2 z>tj)yN(%^M0%M@GHUJ$#Qs_nIqJk%rttCK`2w;L=Po7O^G$R%|ZK4qKSsQYCi#L_Q ztgQ`}kJrF*gDZ~??>#DR3J_f-lc?DqB=OGyn^P*Vp*R+4I$yKYdm4>mR*>JNXpf`PvgSU7z>f_%%QK+aJ~PGI*l4_@#@RJ<{4B!4-m%DHN zjCWrCAz%Fc%k*x)&QIRnVPYxas^S zt+P*R8Xv~=?qS~VC#~a$@vHdo@BO&u_(4Das9%rbnecJ)fJc?_d=@W|PxE=bQg}5N zd{R-N3@mipv|0_~ctTltRL~7uTT+yz=mcGbnu{rs*1@@2&88%?C@)9F{jCjs369|C zI#x*jz0$G8;3JA0Ht+9q=hi08R*yK*?C$O|><>apK~y8*HQm@kX-iBb=7QBhOQrL) zmORfHPbLh96B46|Geg|)OtXUVBqb|KN*BO{U|47>l(_WZl$h8MCSTs+ydq6Ywzv1$ z+dW{T*~A1V?l23h4>&6LzXtrSB7G2x@C@(e{@a{KlTwzlpvolJsXflL~e7f*u2!y|tE z#;@of?Sn7TN^{}jW4v(rGOxVy3P1hXPs!40DC8BfPFP%AW_fX0yf|`4r_(_x#qRDd z-a&7%$MVuLCsxzb@la>0!lqF*ZFuHpXkb~Mr79bSHXaRZW->44uzt1VZsJ=oKr=8 zt$YWhFivC|q;1HZj_TO8vdr-z9@IG}fP07?osZ>mE`W_yjF+?F|2dL4;_0WK;#=SP zCY^;2ckbL~GB~2?9ZJVET1`ys8Rt3uB1ShvbDs|~b_VxRzMvVEOjMusb4@Ou?(#-6 z#+IJKDO~1pHl<7pigHY=<7vbllvQ+^CrOeB>klah2b6A1oM;|@@(DVNi`=|(i@eM* zQIH~qOzt?2Wx^gBUF&3@P|7ozj2MlFI2@%DeWa>-)UYKqn=Ooq8BZo8NlZ}|#Bo9t zMU2Mdnq8$raXlaHNdSy$h7%kE6_pZpjziIEFL3VsMJ``{iF4=A(`qk>o4C>f7KS7O zYYR-20G?PI;-pEhw*>2+jg2YO>4eE>$l=iuhX)6Y#$zUvF=;xbEb_2VS-g+LD(G^#2=sx&s)`;x$rJjq)}m#tsM{=d|fkRd*?ea>Gv zOB5N7j*cju$C!kjodY&EcSPD@bTGs-;oPg3X}Uh2D@S|T)9lQM4;9#PzK&B>fllr` zGh@LyXZ@;quj2n^rs)1RvTs#;@(iS_l9Vdh4RZ`9?XhPO|A5grr`ug6D?EGqebTHX ziV{pD5rNKHyb?g5I;VAbpVgTmW|HE0P^Ty8!1N2!8DS^6TGl@Ea!_@$O`X0G5`ijN zVdV+%X}>2RM>+2n<bHx3Jye&a%Y=)Vm_%?^)$>3jUax1VNu{Wbb`u2S@#;mhCo9#3y{xiY!RjlEro z8%q0>9=tbnPn_k#nbVxTw2fU_C;1fejE|$;Kj_{*Y`os@%2VJ`ViP|q((zG1iBJ0Z z&)WQdmh12+*YvYSO+NDHow0oDf?MJ0iK>{u`#|%p3LiDg2sZ|86=f;Sc4T5q6oK=U zuAnG92M2o;MMlFIaHW|4`KtMM;bF7Ku7O9i;{Br|hJyj%+27yim%n_CgQGri(%{;) z8}$1F6gr^Nx~6^2CLV&)DnGRm?b%QNtrbXqVTXX0{Qt%;za z^ys=cm^X}@Z`!=~b*z(h7Mt6e-suAnQt2*@iBOa@n=Q_syFeT@@DwccmRVgp$+Zve zGa61A_9r!kU+Kz_NG3JTdy1k68ay+XgKTOkh2$(#H`wyK&5RZrSRP6#l$Ts#uPf6( zaRB$Bz@JVtjt&Rx?HzJ-I3UkUiH3AJ=`=+VbN0+>o_yjN7CJp{-uQrf_iwYmze}^V zz@^6?!{~@xH*d1Fb&t{Dh&)eg;+zW13~xPonz6sP8zeEFUT=}7o_vOT_qKTXCqH30 z9O8jEX@F9+nk{<0C6Y!9XQA1OXtfuJVoj&BKoU1-G#V5|LA%|iC@cpD2c+qg>2%6? zJfSF3@;qlUnTBj*kyvOWMXmBd&x%Bec?TX#L~wHsO|j9l7&aI3qGj?@?K?ALwW?TF za|r>Jsnsl!akjr#1)UBPEOC1;1I<&pwx!-DI#b{J=l!fW#J6k805aV*7#_11uu z6NaUg9^GZdz3pvw%S|i;94V{I>pcGCMGglCT)%aLG@lU19kM(HrD!BEopwu7Af_pW z_2Kh6iZWw79+Bs%&}T)DQZuDg0L~hXCQ&2}zlmb9JfqX;hzVy=)G{R%DCLCpQ-iw7 z*I2$Pk%{p@QO=z^%<1c0@WUy~ zIjVL@ekrX?HjN1qB(PL$h%j9}_I$Wn-llaV`&=-X^iCRKl&TE~O_YQt)1iY=p!Ok3 zP|Y&dQ8MMMz+|K4`8GxeGINl1Rj&C;jMU;J5g=u0iKXQwy4?=T%S*JHO(yAt-Q8Wb zHn%uDJY<@tAxh1Ow8}fYE5V7|y{r?1jtof>(P%d5bbFjQvCiq!=jip8=aLzGeVv8b zVaT$Kot+)do?Q=AavNAjl{Z-x`KUhx>Q;?zRlEeIpZ7SY@Vddh`}^$f^)W_~<#~v} zGn9p+C|&JkRD)RF1>kcQfm@v+AFfm73^jFvM739HBe8jTp3kzVJFlQG|0b3WE`0pSS>k8YL00r4zBvCzqG$wS}6}Oe8{TFez9~ zOF9cDc}lSXU?BuX{k+C*qNC}xLG!v&{$q%{=ox3+sb1XSzB2^s^L`lNhx%0F%WLg$?d#Oje-9iJch7L$zMCbJLJl46zt+#)|aO(<-y)Mfq&hYt- zghu?kGxGbSXujXYntPar_EA3DXEF8rERlGR^89?7-|^el@Bdcr5e|*50WYOQ%U)W? z{{8{eG?nJk8I+FdBDp%8XL?*yyS2+8!{M>yMZpI*u5aCkJNbehCeCUZf*?BuYor<~S?sI`htYZ#7G-h1yF z_wQ}dYBg&rz37W8_x4IF>zJk)qe&Jb_zYo2%Km ziJ~}A={!o6K~HGvgL6iEa{<7xp&)glD-Dx_%6w;5;0u-57+q5XO9w^i#VI>zB#Xl1 zyi9JK2aSBsm8y1R_dd``RUCj2Ir^2F2zcWyp8 zLA2t-!IRh;*Y0 z-|&*@UX(@1ycgz)wKE#>WSUW0H=D9~M`Se0fOBe2o2}|8tu*SQxfTW#EH19_>@&~t z+;f*%KY0qRk`A*$}|rXN!(YX$83 zySv+rCu6e7kil?J@41p!7S^r{G8B}Y16qd^3yHN8m6{5St>Czh#<~*Y!m}SFEYhe+ zGvd6kOlD0T=)jE8I$WFTdMR;F7e5{!K<2sTSpi1YWt~G`JFkana@fn2mS;hS0a_f# zEUm1tva-tZ>MF}CD|EXHb;3pzM=bgkR#(^A*f__|&JG6$2aE9{t)tpE%` z^S(@1l@TZTBx%s=^;lkAXYJG(mX}v(x4UQ)iEK^*c4j6zmnKVhp^GaeDZ%KN)s+=m z&HD^TMa`J=!GGxZpy)S;Jvu}Q%Q>Os`a2t<^1%9{22A7(wF20PjqWio3x7;@rs`g# zmO9NDidt($f)f06vMdj4SODni-X3E>)wQ|_(!7}`K-IhoQ^5Sj;LBBwcmT{R_N37& z)Fp`93OslCu^eWbI-ZR4;V<*h^N|6CVU;+erkx&SNIi}II!JxJ9 z);qVkaeId}%a}|`tT$9*naX=)=1HULsK?``n=Y6~%YNa!JI1J(XHQfyfA#$-%U}}d z$g`q;CQ4h9=SBVcm5J=9>B}CbzKR$770Y7U5KpYjpKm5Mm(0qM8mxv(tFcJD;+(x5@3zjMcR@7FrRu zC~2>sWo7gM{r$Iid*{16@qoWs6y-64hoUGy)C>uQDm-DKaQ)Dieo#YQ+a-q=(sVao z;7|VhWp;LVxOwXaSFhgS_6IlE%9{L>KlmaWON~crWIt^K`>+Oize^C{QP$tXJ_8Ty znE$Y!>35m1@KGDXZv*W6tgqqRl+qs5G`6y|WSM1abC>t8TxUGaq6>}>7x@{eEU=;)A>>nE#3BCHi!Uy+wV_g;uwtrG|0qoVcdj@30vB* z&6`2^$9nA>-+v$K7l{?Q@LW|K>oo}|%e za`WbO?%lu7aCAsnrYPlzOqkRJ8H_6}t!A4zO2YfIEH5o{dSiq8_wTd2x5vfD9;4S= z;L@ch`2FvEm)_zM*RI{*-FM&T=%`PYW|GcO6!ZrJ_V;$^_xq%23LYluG%yc>Ryj0H z)v@dXO;i8?RqJ|%;iGU$k*9?`7fz=59#2u^ArZ*epqi^ED6=@GssJ^$ZnI*BI4aXd zYmZBs<_k#ykgDQSVWJ4{LYBBK#H32kXt;H89Q5tpdW;7bKn7{HN>mw|p(+gknTEx2 zn1%=KtPfI@8U&~>oD*nJRnnA{$QZ6)y~ca*yvt~Ch_ypn&4kC!p682~U*gQkQ$!8T z&fzw+o3T?gubjIA`|1RV>+E;ZOLRhBF{o$>k6zb zYWlub9v9L(YGYH5Pud!dCd1(oolb`+GEB2+{Y+I1AYqEkGd$*AYwq>LjoYxYy2gu_ zU*ef(USM%?S~?Gsc44u{*|j7eEAtpF0NsKYj52_>kgg3WU#?J1`>APyUw6LfD;dF^*{E@78!5; z)&Id8(^bCv$A8RspMHU_eeo*)>92ppJ6i{&X#q4IcppBki~nzbC_TJdA1K zr@2NCD~ z)3SNX8AOqn5J{sR2kN3L6zSM;1Up$-CAU4dyiYUuCcd&m+|O`R-?n?m!6>4UFP=9JKVc>oBrUCyiBE-@lF~lU&_P< zM-(Q9@(0?@geRVS5~VfUJKKEat6$~&-~WAD%?3-$tDHG=AsDMAwA#x6{PLAwaO>7h z4i5I&+1g?>IKq2NmSvQ7M*kFmp~^~DHMPAc-LYn%E-b4*)imDw+6zN8#;yjjoD&d+ zy6{%@v@pxdx#@l|4s=y?m^x;x6vy!#-O|;$&T;S(D2lRf@FcyW?nrBsDru~ApjXd| z^4VwCL8lrTu|hJ)t0KN?TC2I8()02JFNoBZOJzvP2k_t@HEUE6;bcp(loYfVo9L#+G)hvNvEFTSeRGff-4TTry28@xG8lO8+BGKAoG5NG z9_3+T7ULXDrc<(PN?v5O?}@6x6o>OAN{8pXtRw*P{btgj*=(ScVLZ-3!NS4J9Zpo5>T67V#N5;~m@%gd{*uB@@Tx<+qlnMSjXiDQyD2~nj2 z(90nz=dg-2CW_GB;|z40ZCcF*7ME8zckv?o`}+(AM`3!bXti4`Ec9r$+O%6O;$|Ck zB5WP4;Z8l>G8iljeI&oDe^7wihKHEE0ZMqkQ`bME=GD)h0nON>m9An~y zqv4Rkxmo0KSSQY@I?}H4kPvp@to9XF)$s{<#cps)*luD#8P3Nli74#pWmyEdodWA? zgFzDjSCNkxN*5YpB}_1hP1JZJ?1kf|g}OG%lOd39%Nlco{9xs51 zL528H??h6fP{c;#l`v`q*ip4%XBD&Qf(*f0OHmX=UI4;MW>h^}^LxH6OZnr-K_sMuj`|J zrU!lRx8WV|s0j}b`g;GpTU>kZJ+ui1VcJkSC`*kiCAZla1KLyCD%MF3oWk0m3k{m~ zD8eK$ItUc4mBxHBaWs$-*h$QB#I+%h9S!h^Ih4?BmM4L#oa<*!0tQ>SE61}R}k>f)1 z?-7PU9Lr?AD$+n$2s-F5mD53wKSv|fS{g1bKtttTZHz&CgEES^(V8_d-eJp<(w9NI zE7MCINs(boKSyy?wMJgp&6San01n<&`nTCXQPf50{Gne>sho4fQ7qJ7@4!pbKAq-V zy?#TcAJ$P?1v*BDA}*Lmhr-?l8GsHkakJRAN<(Z6cq>x`Z8TA=Q6UStN{^_d2rf)X zszS?I0!Si>0h7s;?d@G|-@47--Y#i2CC_q{PuSQv!xz8!WfYq0*KbMFy}wPG9}vf$ z3l}f2)LZ86olWlDy+?m=NScpBF(*ZA;WAJ*M1aZEq|s<%l*ZYT#l>ZwdFE+G!;}l> zFYu@T?4R-2V`rJBQ`(&_jU?gPwcEV*>KmL`Uq^Y^+}z~ez55IXeMW;mMV^NVuH5s| zmSLJBllUYNFvr=77G7eMP(E!L%*J$>+PGlyH`ln;uI*mTF>RPORytX6-k<3#XZuZ% z(}V_J?xlRk1S2yk%*vp#R5g2O=0Pzt^3vfwQfZ^ZyNjbp3U}{mG?GyKyHM?|l6w&aQR&xBvbxI6CUnr$9T8c8a*P zbh`}}yG=0Cctkp-og{RU9ybp%#^apAYSPlu?yhj*iKo~(>ht#d*T^jxV!SJeq9(0Y zhiRHJoupV>&}=qHl7uWv8I8uI`82Q}!ZtFe@2&1*6vZ{LQWSa6Zo_Ces;S6v9N`hy zZ`m{bOp9It#L8g;%P5W#E-VNNaLihJk4e%o;we12x(Q z<5MM48s#90bO0Gb^H^3CZZYxIjfmDlixX?>oLb*tef=bhi_1h&BG!E>!iDI*8uZfQ zg0GD1@7_8L8tkp2)nbt?V&{Ck)ETm^vc zxQ@MQysKuk(yc>~zl6HaXkBaZ3tLLuub2JU04lH&Y>+4#qmOCptJ=*N0j(==hMMg# z@5Udlt)n&vt{E$St|qI^0)-K#RY@Et6y*e84=%zPq(c3rW|9h}L|W*8BrwcsphpR) zljnsP=;ksE(cxLQ<%~%%FHsftVI>0-nWqArnX#Iztzw?b-&wB}J%|qcaarpRD)1ll z-}A5eNw4?epAnO#gjTCVSIwsM5BgaX#WXt|k|e78;-tGsr_-U=YO;3bYy6LYGUdNS4)|NWV0U0Y}QM}PQzE}UCMDfs+X9_QD8dyQ-FzQM{9{{w&YFa92X{)3nK)!+UF zZvZM<<$M3)zvJ?$6Cpw({C<}*%62&56wjYN$C)K_?EUG*7y0sqzvS)gkQ>{MPOn9y z6`@UoW@~|!(=l$c#ozqk79LnQ|7HHC|M~CHir}&5zsuL|{(D}(eTDtIilvh$Ik^&H zn{jZ7ZPV$rX(m!Un503g+oRiV5Lb~Ftq$$Zm?%y-_4$9qm#+V7-u&Pf{Mq$ifKs$i zUgi(KewoutjgP!{AJ5qXhIjIaM#p%q z0^09Gl#jwHF^!6}Aq)E5I9>>c(@ZnzLsU{|(PvaH6;b*s9?WAa#9Moei345VVh9wm z%05PGqS%Ck-4aLQ*z7}GjR@7kB+Ja`d(H(4vkwM;0rY6J65>RriA5pEdK^b}ERXjN zqmx=+FGXENzmteF>%#$FGwo+4d~*NF@VQNGswT!g29F75ZG?C#p$wX!vqP)el*&_* zmlB6nIZOMhc=a~?o>C?-m3y_(Xg5nqkg0FTw4QU~tw8|q#PK;6zX4oCVLi$!iBeNa zrsAc5B-PZ!;wZ};1!P5DPjh@7PdGR2LM(x_i7K^1`#9<8v>5fxO6h@4a`pbNdE|N4sQM zN)kt$J9m+Gr^of%AF#Ex&0us$VNM2mj#*+`e@itrXMogq`gjiYy}?jmfh~xHeKkLnL|L zCQQh^qp&jN@K)AeyU~&fSmhobicf7cu9V0~PbnH`WpGMU1V)DZvdURL3f`7MYEp*G z?NC&yx>nFKS#;tjp(4U`NMUVW-{1M^k*ka2!qliZU>g2o!EN=OLj?`24|$tCBNBI--#@C~}B&1EU=a?H1?Go|W~CMn?^- ziYat~k4mieT)lFI|NVdc-?*^UVKIiqRz$DYfJD(*T;%!BeUZcMA>+{zr7y7BVd99$ zMJzNE);CVjU0tMYQhJev$lyzd^(9Ax115e#8Ar4mU7mXUS$f?Qy#DszvA4e?nJLy1 ztC*#w6`p?fd8X5pS6_P#>tULe93JiAY=P1iTV`16Wnb{2Emj(DggF!$!$P-1r_-k2 zACc#l)zu#9G-Waw(@bJ1?u#O5fWz21P(>;*(ge+a5;s^{Il;5fJMVb)DQOypDqG~!mTXVICOYox+M|#;DBW>`u4E`c6u)Sh=4G1x{nz9fV zdR2yR{GCB?RJ-y zV`@N7cKMitgMz>N>02~gS1HSa=`=;y`ns0F zg)XgT5Q)Ud1{s+&qeW590D;;aUr_{lxPaLz06Ag|EK~iacm}wczrhSp5L&o4CPKG3X#|3H}IqHGPjFOt`)Zg|DOxfk99K>=m<0Bmpx6)hgi#1Fj5y zLj-w+^CVGBSrj;1(hSd0=^QGGC7HlEECM8X?Aq1ac{`&Ib@rhv#FiCJ=<1JWoX` z>cMzL6e+r`CJM!PGNrH%XAG_gpD#{CvNFeJkT_0XGta7P|EL}S4^wX+>)V`j{-c_M zPil-l?!_PW&3+uP@GuR=!~IT2IvsL&Fha#`mX^9SVsq^86lsc65sfen&!=OKj*iG& z#L~(Von~^3{{N^EX&?D{$|(o^0VNIARu+%FPMN2oq0>z|tp<@%57pFt)cbK|&ZK|H z(WE45wdpM`(vJ0KZZaQb{XEPy`#1;wkGqzi#)$8e{{AO{0iX6gJLf)o3&%!x%!A zx|0~B>OBET(x@lt^Cmv>?>?aY95eK({(F9n)suWHhrbTgb`vy-Vr~?iwT+rN{Z?8& zt?S9{O!qAZcap?JQB0%Jq|s_gl0cS`Wf^&z&GMfs4dE>KDiq|=v5e>v8)A<{J|Mzn2 z(@Dw)*RJ!y2iMu%+a?W-bg#F_v(H}U$;Y4K=y1TDJGZ!Z?=}Yq+oai)NJpGId!ADp zr`g%vVRLJX;h;~Jjf064lr{$?&A$zld}TzR+lU)1E-VtqO-vlKapp9qPM_lIU;iq9 z^hf`grKLss!x2i03--;MH`w0X;s^ilzvs%8D`bU9kFJ# zCY_AQf_z3%QGk)d@-GghpfSmmGp>7R1>@=N^W z?|#Z({inZT_h5&-Oo?O7%EAJt78mG6o>rL=mnjK3+7~n$niFd)w0b=@`z2R557``y zIZ8E_2F5}M%f()k3yTpO9nH#uA#PZfm)hh?^S5u^<@K$Uojl_7`N#OD|Ls5J+u!~k zKl$Y={HuTcub2)}#)F(Z_bjfi(d{mi7nZ!tDaxGDu+Ly{NRg*lmt$=fnjllNY^rAv zWr$6Kix;0{d1;k9x9?$H$@20N+dG>K28VNJiJOy7xX}MQbYLPWtweTDEOK;+SX0Ij z#SN0ALlh;HrKQM2^IK- zy@eAt&b*PU_g)4#;i0I2P+^iKwH&bWWh%?O23;zEMRr+T`zi=aY(}BCZq8ECd%U-@ zwv`Tzct!2^cqMB?X+_~2k!b{=Sdt==sk4R{y~Mk&{& zmIDre8P4EnG>$&%uF5ka-2Lf?_uM_QP)AlZSTq`}YqByUBRs<2``&kWNfuC6WCSc1 zjHwE|7q+AgAwLU>qQHOrkN*=kH#gDgaPkgc2Rmm>c%5Fwp4WJt_0#^4MQO(uH69n` zm7i{OE^3x8pF%5id#kv8clG=eAvbaSyRtXHR&TISbF?V!`OK!s_Hc8(H}`#0Mq}B< za@jri9ACtwIO})XmRMTf#?m@|^m*r9>x;hIMW1>4dM*-8anU-u3ea+yf5AoUgtOMx zRX*$V`&@KCEDEk&bevZ?FV_Jcu5&+L^;)00@}NLyd;^bcP?PU-$VTN_I&GimXHJ^? z`0$JmRE|K>DZdFaT(I4}_Rq&3e0tq%*ye3yB;XsnfY^7hE~Tfpg8HHZsN}X{{uGTcyIs3U!h} z3n@B?U=33?5B87n^5ttB9v-1-JWAWe=GGQI`tT#HZ){>`=Ow=W`YXJC`2)t|kwhs1 z+uOIWxv_=)y?wlV`4Z#t5Fs#Yf;?++V-XdN%kqR03^{JrxA=Ge z5j!*FN zxW-CHVX4$u>1fT#v%xZ_> zc#Ox7AEPJ?=~xFG001BWNkl`Qm3L09U-vvPAi47?4aN8q2C*zEIY7;MO9S@fw0u?qtoqT zd36OVD=Qc*t)f3zf>IXFd5M{8IE{t0q@-k8vlg!cZuALCfM-X6C)sfyNOG`{_A3%o zS{QdORo0O95B^6K7eE( z5TCJ4^sg~7(hrILucF%}!jI~|1OWH|C;M)ySCmF+4WP}OOMZw3d5Xb^fRK!X^m_&noSwmr$96HhogNZhSVsNjHqKB2$)zLBng5s zRzNOhl}7&`EpdRl7GDIV#m|WuL~#hyuBl_Jb$s^6b+u6Cd_jEqdHsdGs93)&+kKHH zV^OW~WzEH#{QIYlUAqb^;v&G~I@;|;F8q1d^t|6+RsVhw#r{ps>t(OK>|9+2C|#vl zUi27#DzAh^Bn;<)T#Hcc7rn19TH{x_7H@JMNO56Gh(>X71LmU31$OCI#5zr>|S* z91*Wv8zU$SgX5ziUcP*Zy@LbPjYqe)ggbX`;qAAdU~T0FUc7jLXV3nCy}j2s9v+~o zYLvEv?OS)SwYiPslVg1U!}mBm+Jg^HieE1t1VVK^T_{M@Qdx9)I<6Hqwl?smfA**N zSO4Z;V|{B2!|?<=yZh+(m$16BjL>-e)nEM;{;&Vz|HR43F$Vn}dYvw8(ZSO43Rc%{ zpss5iA0467>0o(fnOPBz{Wqr538s@V4h{}M9go4%5*p_)9*TsMm@^|F5PMYUWS~T1R>nq_@fi{qjR1(P|BI}hNG&ziAQ?t$4P_0;8!@or z=r^SZI_h&JZVt(%TBERr(=ou2eLBSrvb0Bm*fYQwPzCw!NT~&pMjiG4v9PA#InTVX zc=+%k9zA}9U;p|OyxMtzKt9K+!C*XXFs=4c8iP)0&?z)}g~g!TMLjDp8C9U5psmNa z@|bxASj)hU)*!7hBaK-wIH?>=O&E+6ilZTdX;3v5wPu#f`qm~k?`-1_U;P2U{M%n( zbTWc-3bhYdTJB?MWf^Kxq45D#HABCoZUT_7*dlE`>6SYBSkV6cqW zFLzLuCAz&HUcTHDc8gE3S;>_=$g@D4-IXy|Sy{u=C-35C?|p#nTX#^FJ)XXX9OI`_ z!5$Fclc^)WwTB|swa1Aw-&X7k5yRRNB|1{-HO_U#8)zqy6kWP;grg2p*$YtZfV(dl*3>2^Ux*xcH}Xn2Cr zXo%5pguUH8%&HlBy)MgUgz?hv_p!RVishwc^m=`s;5H4M_vm$d=ym((^#@F87KTgX z8jfdFfYFB8KFIf_n47mW-8A={=Tsct>9yt@EI`;Hidh&CPfo2Ag3jiIL`akW%nISU zp%BJzG&GF+FCUjA%BZ|gWOhnuHRBqYkw+qd^9j5Ql3)^uINM%Qy|lRQr-YK|Mj!G3 zB0AK^z4R=T=6I5*Wj;vBhbE%a5S9W^1!f{3vLw_zAVIBjH9y>yv;)Pgr>MCIBG~&+hbBTut{6u}dN_9+3HDGLm;1NL~ekRA-Fb*u@+KIJ|wHD-RAP`UKt$~Zt zv_|9}K6@O5VAI-e56^f{M2b8OAzZl^JgX--Gi7g)M)|6A_v=g;uhN)arIEYN=U?UT z-$eU-ort(M0S$htc)dlzm7l_$|EHwfpLOgPv0kpb)-QV9BFDMt`MoO0b=`=^)9d*v z=lCjr2e5uJ$R^rG#bcxB1j&vOcu?GEB~OqRx=qrE#n)?Xg`yta+Bsq`QSKziIZ)oX zl+KfDZW0V!5Ir18rnFHK_b1_SGTmfKvJ|Fb>=h`80hwqKp_A!Y)TZZYd^X*QG)N+* zH#(UlrE?@ji!ss^DBUs|icxg35gRu6Bbl6P9XBFMMs}$Io+}O{M$bjWUFY{#3dRT{ zL#FOg29PHQ?Pt5>=o*PpgBMLDvd&aNm=F?)BaNdLqp4_CmA-$}0uvj51xXV~4WayK zWfL$G>Z>mDf&4MqXNUlzbiXTGd)1sL*mF&Mc8w$gtj)aIm+Jot<4wrc;!i4xT)D zg16s(8vyY9`Ez{#{d4T>{(#}|fGLwfWAoM)Zf)Pj$;k;`ykNsW=V~@53+$xqL!2Vy zMkG4uDWNTMq!OEr-Q2i|CqH|F^^J9S@|e~YY|+8i)+RK7&wl$k{_;Qn1&)snaPRIN zZrnt3zO=lGPPd1{!+or+tzv0;3B6tq2!!c$iqU8Ur3lmU2#N@uZWq>C)IvKA&Pj%L zNG{g_0VEA`@a*dm(!`Ew{7&5WRdV=ODW^FaCdHyPJ3T|*9VzzY!3e z&oOk-Kq^TH#FUCCxt_CSg%V#82BNfp4q7X~>-0?00A>>7H=9)wH>cBml_IB7v}6Ej z_R}c4eZ2F|JLq&f`10#7aCCeGZK8=FLF*vv%)x75GHWoI5e`Fu)+0VgTC+UCc{F4| z;_Z=X(VBJ6q~Ks>TBSk0M&l;XWB^ZC-(17b-hB@N0srOy`3wB^cb}oDJ*tKyF}nR8 z_V)HrHy-O7Td3+9&%XHvhX=c;W>cm|11X1IYn2i_;ytCH(C;t7yMW1TicYVK>1>MW zY%1DrBqm0hvKkF-#f`q`V0-%x-uu}Hc>2!!Si5mk*dKgvsQ3UP0r7MU5G5E*u$o{D z&@DT#2B;c`aUEC>ObRNTGEvhC6=ve+s@eh)NAEf38BlpJPp6#GH{*Lv3ITB|}^lfp;lGR$CZl5kLaM#A_IvZIO7&HS(bqrRXE;fRmY`Ux2uEB7!an7>Wp# z)Krlj!T19o|De~0wHo8egs-W18D;rPOa73OBQy`S0s#`o8BWPz7VXa#WnL6W3W=*h<(K%MJWX zrrjUjntTCPYhfo4%5H&Mw>EKOZ52km9eVvf`n^7k*7)?(-{3F*^MAtL z?rRiQV`Zt2{$K#5EtKt`==3nHYWU!>vbF*cVSj%QbyZ<99^>R>h{n2;A{=(ZHAz#wc`qeLT4T2p|8^ALGIO$LN#;VMeJW>4@GF>|6ke0H1K0Cp-lYc2BycDNNC+DuGcZ(oO`se>8LwSz+9LRz znIP=!A1&9~fJU1M(FTrA*E4Y~5vfReOigeEj@UGpk~W+{La72Y`)yGRvWtru5eioHq+p9JvS8dD|ZECNo8(tJ3 zxM~xBou>b?V_LMSzV7F}39bE2Y5P|_&({Gt-lXZh?zz3{-(0teUUWTN_da@)>u}u% z&l}xC@<6rLK#Sf#Ru0a`qCy&64FEj(MeE_&&Jm9rbnpSBT++%hlYkxjqYjKhM8*S* z)$*AhhOz^Fd{~Q6S&FI{GQ^vR(FR^}&jZjxej!u(tm`_RBRr?qH(CtQLS`vMBpH}v zD5Nx_Q>H=jtVT&hq+SN0&qE3VBj$)P!bck|6PbCmI-2L9rGeznqm(+3n^B#n0ohpT z^wmZxv@)werHQ&xCV@aum;ml ziSdj|h8Bc0?m;f#;#893_e!_`>>nKA@c0-vZrs3=w;to({X3XUrg--38J<6Xj)VOj zOsB)7f8N;G!uIwZ3{S>*`SJxu<3luVia-q~GEmN!&j0|@dWsZUlL}a#6mD#6;G>T} z#+^I2Sw?{XSI=;;w~z0hKgVDG#ec$YKl>E*YzkM`*m?B|-F_csw+CBxp)5C6vQ(H>97ERa_L$*NbH4e}(LP4QAtsX{nx>X#IVC4;mKX6eCIUVH z(ChWk>693ahC&hgTd}x!L>6Nzf z&_D$NW;{FOHYy_30H}Qv!df7WAHi@P+dC$*_{M}=XW0g*Td)l)wpVFQ8 zM+hi_4D`o(C1m=4dngm9{&OAzXh-JJk9v!FKpgp*fHsie=e%=TnX8BZLzG)3zQ)|X zt6E7e>XbhM*vwHY_9pV|ZN$t#kq;`!b1X-;2$KwKl>!O<66OUEsO?)X)jxU}M<;RTfc)!utzidWaAk2xy$2 zt65Zv7}WBNr!?SEt#cf}{!y6~wU`IMc{Tn;HMqT~DOl8G?)2|3Yep`LiM#GGoad5$ zl{mYLnyy83?~Ay!U!<+R$XWla2J0-NzBirnUlv_=RpwnSpxa_}Yt?BdD`guQ`3ro`69|iMXEA{q3tSd98Mp41Cv?UXrGEFUOj{a^?_c>zRLfYu70 zJT&y2Mw%$H0Z2^xxNtC%wh*W0`MsHTnG0H-{@XsbR8SF{m>G$i@;d7A<_i}ho#Y0o zcR@t)m6$c5rMJs#DW?~-U6fU{9bc9c=A0y}@NwstX3V`yIIFMvQY zn~RADA%L`rBSp-n754THu)Ms2r%xVZb#)1chkJPb&2v0|{w)p;4p3Dij&oER_wGK# zojdn&aBzqpUjBgL=omg!JXKU&DEbh@2|0Thw2zsH`70)YJsu`#JbCg2|KiX89IGp< z*x%d5&dv@#`}8yX{&)X`@4kJG=g*$ug^)EFPaJ zr#vg-x$u$=u7xst8f6UdFv`er>6R%LGdD5_l;s~FpeQ)y!8wOn)xe1KqAbch;WP$K z!xJnY6hh$1Y-BWfI&Genair)@A1TPUZ{Nnd@4btqr6r8UBUDX|wbeD;yY~Rrc5yNs zVP}5_d;5E+s|GqM3J46CAONZaK&V}vrfPxMB+S|pWmzC-poW9@4ZNzLjfYZ%uGZ3E zTi6n~d2UUNyyZGDTHS5y-KgI_7Ol z6B`Tom_Kfe!Sc#7hyrHS44qDilhHBiW|p2?hz)|)u(pG;>|%X=10Q_w5#E3Q=h)u9 z&7LIQbF7_A>Ejf-9S@ewP{jdX8(?K+fYr5SbbBR?;pg%8_9njg>N!TEMu1)3Ga^+T z$sp7VyM~feIbh}4(B1>ZpQY7&WM}#oGsM{REOz8%5>74PFPq;HXHoJ!A?%dQjG+|u zHcusI289oe=;swj@IjgzZBo)fGI6Cisr4;jK#stGk4cQ+BB&c(*5i85_Z0(OMybSJ ziBt5%)-f%NRSTO>Sb>IG^lSx*>l7B3q%d$pn49!A-Cb)fz5?;t;aY}w)H()}87Hmj z|Ge2?ICYI%2HaYbW`u>Ikk3bZ4~=YzA2;@tfTKKpZ=2$^_brpWCrCU#=8O$nv4kAI zi8)g{Eqm8#FMfCzrW6FuVOTK-URWoCUTLf z@tgeqO&sj6YACnp>n=M_=e_=_hH#6%|7E{l)EM%zh`!6d^JN|k7p>8&m{y);>UhzO zxad@TkyL?288GLazpKhL7Cryx8B$(mD%g61tbx>$J5K@55z4|y>{j*(U_Gu$lh63j zj1f%1d(d3O8#f0`(dUMjLY_XPh9pw$gpwFHdZzX}(?{Tnyh^nsPd;=nd&CPAxzyAnFN5^>e z>J?5#$MAjzqDC~F;u7tGOp=ka>07kXbYB_`WBI-)I~_cJ^cZ*V-o?Su0sia%_y6J- zzxV~d`2Fv3xWCUuP*tOvRj`T;9fRi#cvOu{5E+0Not#Ke^v68p(80 zOeBBaL#?Fu-w>*v0#7!0cbp*kLaQi zHN>gV*GN;xAW>dSN7s0G{{imZe*mpDzIpx}&Ncnl%2* z>`)#Apv-z{m8R5QOg)>%%_X$N2G?-5VU86HgrG8=S{VgH0?taaNGdST0e* zCIAToa`_pWS#1z$3-4=1S->bhr%WP?CZr6uM{rja@!1GrnNgAtB!D9(r%0j=)3Obs z&A)C@=h8G8_GE->(k&*xfLHfQQV-W!b=O|rM=WBEegMPn z_*0(C)Bk=`zm4l$w+k-F{Cf$77~qLo-0)NET$=cKSZO-rM2DMyZU&T5sQ^_v>-n@c zlG`3~?2gdYNK4e1{I0M}m@+AL%|n}j{-A@KH`Xzk%y4*c0%a_!(1=ly6SEHCf+JBxLt-X`RxDg%RseH4 z;4~!CTqp#UX|%Dya4v!%D%wNwCM^^AIPFZvL#@V3H_yMoS6}`PFJF9%ljCDlRfD>AAf<8Z)@{7?_z8}WNBHjB?=YU6!221R zX3A?vYp~>4B4TX;1xhBCMNy>h5vOZP^RYyo=y){2AAbJ_{O#ZUE&lKS@|Sq_>}$*> zBehlaLI40D07*naRQRTmf>fhZmfQp&AQ+$&Py?dF7}DotPlqFys+Wn0S>dh#5TsawpJIR55j3yD{Q zf}C9=vrIcOPzJ=i4t3rbn2(`d=i*RB>o6<-#11D5?}*O_@6$86Z3O90c?Ptgm0sThdjN&H_K8J8)U?h+Nd73M z1;WO4lEJMYYhJSts&~9z4SNEG;7~}4jdKjfdLQEj#jgMo8Awk4ONlL17*0x3F-{r= zN(>*Z0f=fCYtZc#3{*BO4UAqG(QdRY33E=OJX4bEsyGunO3ZDDI=Y zw*Z~8OcB;GohGfzw#UGN?Ahz|ulAzi{W{IyqOovSX*RBEOt)zBauyZ*s^9ac04uK3 zY@a^fMJf1;e*R_G{i=@gKc%Doo4of`H1b#ZyhV@U^qRQp`Mu71yzF={T04ub@t+bn zipD3l5Zb+Ft!K`H6)l)(aG_bl3YBx;kv21FE(0Y;?@rM{HLIoYP|_%b)X;^%n%1(E z#-^&Ej6$K}T)d(N(|H5W`Fs-at%V#I4P}C9AHs!{IXXxY#LPG2%g z8Z}CVKv@)ilSzv)GSSUx3_)Uw60;$>cIPol)OAM9wh?2VrU@zep{^^G z-3}x0mi3>`HSnGrhe-KNC7V$C%Z@?6--mM!)9Dm&QRg2xyIh*hLZ-K;sgf~EI2JiA zk7pnn$;qfKMiSMohAx1z>|%Qj921eo4F;kkUMY4>CpNCUSlK1|B|qfaT>SeE#_}?C$Jh z{l-mfZ*M~zUaynk2}V0R==cU&E8M$x2X`LagDou9Zmb|sjmhW$Pai*q^A68n@8H&* zd#FYeoa`Us_3Kv{j)oWyhp@_^P=KxiPDTe91&2TTlZSZ!y+^42@C`ov_ya7hbnwN| z_fTPi0t(7&amzQDR5j|RK{cD9sw>Xa7IqaWPDlvB0p5#Ap@t@lAooqbzl_bzZ81@_ zsOt)&;R%2M@0$c9T4QkY=1si!?$7bwyB}g>eH-0wKgaaNs86Fou0d92=le7Qk(7W; zmGr-dheQ0+@4v!uIKrUc#b`XjcQ0OZItQ%8zXjI0i)xmY=nSuxCQ@&S1|CcCrt`;9*cz!TXw< zX>!t3W{@G*0Q_t>mY?NHrmtnE!=FhRWG!q7Ez%PuuQ$fB=Y(^~3nzNYD8(^>3L2yg z^JN4ei+fu<4!)12;SB;V7=v~`<5>WkF&Y8X+T)@LUS^%Oy>ha5&OH4dij8^mG~Op_ zxiOlbV{#shH3(kMr2}Y5MrdRp5xj4`SD5pBI8FV|G6Iv%8ym^_Y*vgc8&b-q=ca-d z&lQREl?FVf6yY=&B48&Q`0{fvgX22Y1oHz6kG6?ndx#M=|MA#j@(-75a*mW{24LyrwEL2FUCP5Atug~NN^gvqK?pVRfZy)KRT zqQ>#6&DwPg{obT8yh(FKoJpR$G18)JrQa$t#?ht`C_QU`zhCm-NX z{`6z?dtGdAZQ|hY5Z`|L1Hvq%DTi~Ori-M(o2k(FI1RsC&A)Isg{IlQTcfb1*(^-SyB?CAhnO(W2fiXZ~iOh$e90mAhim$%>9lreXa}+Wq9rXLye)JaJfB${_`~UF2%zNzc+UoOv+)$8;RwgaCm0Tgm`2#q4Q`q= zP!>k$qT=}==R4+iUyuU z+oBLnD4>+*crkJ)t-{l{-@@CE?xQpozxuns!*p8X$+{5uVHnEK^f6`hY;WqP!{}b?{>P_-rPc=ON@piC<4Z#5xi@7>Z}X`IV|;-aQEIl zeDu*D;qhBfx$%cZ;~fLR0SPGPTepBF*57JHVl?T+Rzy+&qJbHS^EfH&9!{`#^h`_{ zV@#nI4ZR06)A^ZuCE@l#V#rB>ykZTytqc&va8hDxl@Z?nqtP@qKwjwgQLG|Q*8q@XLsmk7 zGDdz+EP7T!(qlAK@UT`vqktzbQVoS(+2L03nDW zt1+Df*O;rKb zpeTyW9PoS`MsqZ;lXJq~Q6rF=GYO3TCj^zgJF^Lt$RBdrOx$m*?Lcb=bmO$2C?I$T z4Zs#fO5TWo3@0eXX*xki-v}Vd4WrpBL8Eb!oC1~&P|#>s_@4|G7|D!$*0 zmAFsJOC=>1c{D+i4V0FMPL&ul-shSl`eQ_?z)#f+Ei3`JsMtT<3@l2; zvbAy6@h*B?r?2Tn*Y~1hxC}Hn&m3@3v%sr-hs%r`uk!il{X|N>QW`-cWiNA9d_?Uj z>9=`EXHk^gES6;nqDEZ)NhZ|_k-6<$&XOl_QfH$jp~tmd;R7W)xNm|qtfE&0H;cVq z7e*V@je|7|93=XjEd-2^>AW}r=BbUANH3o>jco^H@BLidPGM~_BeKSFBd58@QK#~K zqnT2h84xG&iI(X?ic#|(@Xo^)+`Qyy!mLA$&07K)Oq@iS^f|Esjg$2l-^98(mFR9k z-1ez8fr+`(b=^n~Z;ruXZ6fFNve6zVcb~OhN#b_4wm0zcM;~B)eU*Rz{?D+#cZeTe z?4fo(>2E_T3mIv{=4pkGv6S*z-UZZthNd1$DuvK#wLwvKu)4O2rNIh}Epc*ujBlQO zg+Kh^w|Mo#w-}91*xX226rBQ_o40Z2&RrZGALEcN`ps_-p0TFH~#~E{?Q*}`_>)2^W+^Aoeq>Lu(i2~ zXJ417stQL($7q@wlj#K0>6BSHA;2{}H4F_G#?`FCbTScoB;cBwC%__6h*W6@pceKD z7wO1`W-8_?hon)B&k-)XAj}PxJOlv};@amasH`nsQPO;6C+@hGk_lFt_Gtlqyf|PB z6_~P_8?!V;W9%DH9pGFAV-1R;5nU=Jc@O&})M>g))QWo&(?b>bnPId>XgmxE)@Tg+ z9Xxt)4;$<2I5^nFZ-4tadc7{Twzg5&4&Xgbjt_Bsw1>ffUH#W@+`;p{A}cy$$POFg_A zkMQ)pKf>Mn_n}auV{2H;MK55{?+&oCyo$oi&_6!H$*5w`F@)qMucHoJ8J?UAG!W$4 zEH5qN=FOXMRRanhO;ceq88Q$f?5X9Y6}5jAQUFMKtOtMWW1FOM7_&I8|B)(F-B6O=5G(=g$ZT5JCPN;g=eDk?awosWYKd z6iKeVPO>$R~0vPLjB%kS9yS%Ey8{aK@-Y$1$41_1bT^R%BYM~+5}5wNalWRRiY z8V4=Lm#%IE%&~wHHlWH$O$@S!x$mi^mf@&p2d!8(1~8+rQ14XkZN@PP|wD1r+O2mxi;VT!+FNAF0>qk<=vJg^aYrwsS1&*CK+S@`;76N5q>wYw-bV^TrG*UYKUj ztO_=|;&WTq4N~+H<-#>hEJ`i$Qq<185)CYpAx^Fz^AtBvQIJ58*w_&To&?IY%O_Jp zag^3f?+>2y<=5A5V0Cpxj!U6GSjNiAD!%>hRif-dTTVd;0Wb!>X;4=cAX-1~8#vdX zsXgkd!E81|Rn0J+PQ+!M5J;iy3~=xML)_}ELTQVm!+pH?;X6Eg_BHnR_A#B#xPZ_K zWx-K@8|xc5K0d^E-+znYa3~aX2PoHa!KPLdEc(P27?3spIZYuJ`yjwIo~hSRFhvL5 zUI#ZeHu1mwZ~p=R^Z)wqF{>H`QW(xEy!i4Ne*F)>Mm3${)8G6Czxm`h7!FTRRWm7m zxm2y|8G`5gj_WlsK#Xh>A6Q=C8fNPd!8IO5VNsR_PN?~@!FEy{hJciGkU%Gur=7`` zObif1EY?+~X6CGHh%|-o5t5iMj-&JF*dhUr>Dl9h+_T8X&@#~CwMKGZ@kD19JanT` zRZVg?2eI~BX_pFgHrXOE0atPv#im=#4sjEfwI$qRu=VajGdib92_0v#`*^C-o1yQEsA~*K?MX5 zc6VN2c<>rMYOq=mHv1M!I>6Qyf+d)euzz%jp*MK?{-0uPV*_sTB}_r^!J+XD%A${6 z*#|sO*G)14jlL;!PUn=}=mEfL3#Bbe+rj$A2D;rI4#!hK6DG3}NI5pPD++9H-@?z{ z<>r5N8fM%>Xk6Ga`T^>=RoixH}H*PpBhc*E|+-x zU<<3u0|X-M>>c3S@Agpn08$!FaDZ2H`uF&Zhz+EH27*KFc>+#i-pZzJd~Ueu&+&4s z8P_@9ErcJ{EJ^Q8yiOuRECS#Oo7l?c#9+)rJ4ZX1@W#N-K4sQh<&C08%Q_JlM|9U*&S0pOTRTH|TXb==FOD-lLis zjK*V;0rCCHiwvNqk@aX2FhHuE%&=Gl;3ECPS^b{9$Z7n%2H>pMEjm$Ll&*eOGQvf`#v}0!mKb(IC%z)>N`Kjpht%;`eBp1{9d4>3k5kWSLsR#-3Z&(VbXnqvkW>25{wmG2pH5*-lkh7Gc}PlVm7Z9!#Yx2{A$^7OzXTy?QHv+7DY!2n~;DKZ9-~-qWmG55=zsq zHJe5S?~*w&7n=c|+5krDxr1!dL}D71d#7m9BhwuzNC*K32L~8WCRkn?Fv{P|P}Lp^ z21Q}eG)ze*Q1Xtbsu^ap3Uythsw$RS5TUASOedA-o2RI%8EVg_cPq;`aqIR2+_`-p z#&mIXaE#ZlzQy<7eS_WCuP_~r*-=;*=yW=`dGjV#S68sRzk}C1uQ8pDd9ou7evk>w zycr}VT|ZPdWsD39A052odQpZar_l?;b}<3d<&~(#OkFr-pJ4P+72QBLtV(Qt_3ZHuT{74TRy)bg2u3MfE z(fmx}OQqna5Sx9CPEmr*vMNq<2$YyO#uO;5;pQR)C?a&aB{nwJaQoIamiv8Z1^nYD zzsAY&F*Y{0V6BGt3`89tA4Ay!o42+wt31}$H=!-ZHP%hQ!QlyxPe$-T;nuzTAY{@ z(6|6?N_1==)|Ba7DXmzh5rRy{bz-GZ@F{UbX#=AQ+*sSd?c4WJY6BM>CbJ19voTTkwnQHHYh11R_kPh z);6#sa044^&)3NZP^eIpz}m_Zwl)Un6dFodly(b;2NMiOC-4faq4rJ~a}2=fmfk(r zKs+Rfon|}T3$A%>MO~L&(GLI5z18l2owQny2}7VfFi?_Yw;`5IF~*X%UK?R;)PT3ys^FLEBvdH`PM=e)`E zSqzu+j{Pd%^}N5mEW+}vwb(9DulxP4<2!NH_c?1#E_#oi^^tS}T{|>2%SU{0XqpOTx5UQg7M?tL z50Bq^in8qE=;#DHJ1?>G>IWPi>|#0|@_ADl-Ch?rZmeNxc^L~j)@Dbqs`thOR)F$gZC;(4Qe6x%&+m}UA(nv$z@G+AyJ*Z~2C+8N*m$`~N{GeCgo z$Q`4uWQslaoNLpBGdNcih3Lfjc|l5{EZO9+X&geBi4(m_1!s&ZO;ckHSX;stC0@VY z!DpX-it%uY|MvI40uf=U&prbb8ce2BoSY2NxPTj*w@`Nb=ycc6?Jc3S1&$8)+0B0U z0RQlhpQ3`syB~arZdsz!H`qTuLTGBdb^8|7phR~x#Hs;oaA=fAqX-Q&#twM;^nKiZ z@DRa`QH^%sW9B;>L}ec=GgJy!-Bl*xtGYV+w?1sH#Lp#FSty@(m3G0}V$WnmiC1 zkgp{^&PI|2uOp>U3KL{9nc(E)h9~1QV^2>`Za)ECUF_GHW+$?S?BiTG@y#f>BB#%Nkmyk~;ae zV9qR%gp!|FE#zT{aO37O)>c+ww83~X!Qs&f>c%nH9T=ob+2}EPu4NFLOlQTL29jXF zCWM4Q4&BnCFa!<$uH8<7qF|HJhS;Zr zQ^s-em-7ry_MjzU1&Tl=X1veUW8&7Y(b@z3TpiSQ=x@jOM(G^2>W#T3x7B!`HZ)9i zL5wvdiAW`R-bJ87>J+AD#VmV%zFBL;C^AX}y}VC`iui5kL5kBRsu6Srtgs%!T+&Z8 z{7uP9TC8`7Ee*s!vYn@!mn}GW#@X4HAi`lICBk38DPA!HH;isD=3; z5y>s741!|$38`FnF{%Nrk?I9wB-O&`6c3%#Dm0sE%5#tXH?nzVK8Hw&Fj}cpU+}T# z`s_~7d7l#8V=NVsPY&Hol{DydY|JPZoI&hdy0(y_OKAnGP5NHZ91e4nkG4jUCpemP@(W<2AWn<`IZP%MKKbM`yneNZ zqUhqq53lk1^*+Xv3X{nU z-{ZUI-vSh{vb2ni^_%E+yXbbhu*PC@a})jk0K?H32mAXtJUkF!U<6M{4G;MYvf0uK zu;Acb&UscwCCQDHsj1lfuONRgQB zHJ$r{z=fO=Bg$5KMO&*&(%@>X*{IaAPX{dfSn&Tlk&*<2pkT%DE#{qDZ9z($*1?9S zvuTapof&@l%U|K|fB9=1pB$s#8({6m4fHyFC|zP|W|&nqhQkRChZEdh*+7433C5HF z0mI=4!;>)@=W%#E#AI6YBuuf3{K;^L!dl$umr%_Z1FEqMkKjC<>cDnN9Mm46T*lK6 zKgQaPRfO3~oa}syqum2cCmzsC=nU2{SY1a|jS!>p2$W1iHDc^(UdN`epuh}>?OS*8 z;Ne^7b^CZd-NAHP!P*jc?%l;Z@4kZvj~-)X^#&9Spd^JuX_0$4dDb>?-oZEx6>5Nh zSzTc=p5XZ82(!9^F$MaAfoR>qae&I8Fa~v9;b8v&N5@A1*l@B_c3_K=>AFTkTW+=s zTc9)sbydL@1*|F1?GI2CmQ7{>6ow1^rfH<1rJNn2HLNZXhtEOi>+Q*Zdm5MlSJwEa znLMev^_%wxEmUJb1xnBVz|jYZ?hTp5LU}ALb@0K5PjP4a7L3+7Iv(Ql-+h6XFL&Vr zwW9MBdpKyyGKN!iMRbS{&NK5)0i^|IRgLjvipBw^Wbl1jRTxdjXncb}HfQCvoc3A9 z!~O)!Bnb>!7(JI5JP$BSjgY3<`pi1C4Pwjg1<~qc4*_E~^bKKdm@Ks&@(IHg*lgJ`j%M4s0EqVhYfHME$QaypSDT#)1YJOT{h^8uxk)I=q@ zo%p5%W{|N|Cf*}05E_}i0GO6%hRWxuRSz&z<;V2(#z{mX0p1ZPC^=ROD3%tnWX!P_ zl*t2#mKrOa(|Aqd^M>yQ5&%!-bwq@s;5E!qzzk${Ivs!riwbs z%6V&H(Wdsi0|;50fYVk z8yoA;T4VoU5BvMOsH!O_cy@_Skwr?JhUcXqsiEaip+uqP>lD(2F20_DFagoLgYykX zjd=%G^YuO4-NPrp`jwNXnj=&*_Mq6?TSBW2s>)$BnqvRp z82|0ppW@GK4=XDh;watV@bD0m*%Y1#MW@8_%8E?D6sC2JmpeNcj>b^K36>^D7{I}k zgCm0PbkOJ$d!rMqJ^ufBd($7wk~6*U7ZGQ>Yu?PPTx#pCuHM-kk|H&uk!F)D8?r4! z5CjWeWI=#o81e_h9}HN~cYX5TV8gOu$ScOcj650-w9Q7&h%?lX!)}t@)m_zHOYWKX z=3UP@vG_wooO`pnmds{D1vDG1&b)c^oO2`Mec$K#J#X;FJMSQsK~Ih;&(0X1l}x7K zWSh>~26?y3WPVPi>xOLJ5X142R?(Ib*FGl%8=Kd7_0_v7oH|LQVPn&jPrA^)G6|uUcX10w!Mwx78SQq5>)Y1=&7-{|&W57^?X$?J>OwZnBX98v>!EW#_*a;Q{~(0)b^y0}zKLlI zV4Daz_uO;z>OZSdf^pA}{sIy9rD#jDLA@0Bv3MO;|A|H8DgachHg#iBxzY@fD@C^m zi^r0oL9+%4{G{GDO5{qMZeRz61ePSta9HM5g*L0IoUjJkaNZGuzJuGn!CU)kURYJin|AV@z!u8mqMeth`X)`}Kja2ingyYGMKH|NZ&T%hF1-^yNqU zM`W?Ua-iTH!pj?SGjIK%`^RFJj*}T^@L`T z3@GMC9wwE-8DFrPm_Hv2WM{)7n}mb*(>cEK!qlM2rWNvn^nTTE84FG8OxWnd1lk3V zoe-cxaR?WreqN@y`rqt@tY=R^R}Dle0-a2Zt5G5pa?#to@(eU^m{l5l%&`tLO6zda zd(tA{DM}vww81wI;znsgj(gnnR+$Kqr4UsS@sC^~AFn>AQDUf4wJcVn^v-{WZ>)$V zlqXI)8c>?GXj3-@xSs?ExMLHI<0lDHE;GCd)Nzp1+A^O`I6gdNIGiw@&X~_jX7iG| zu2=H9eM6DeE%ace&!R z7ma7%dm!WIXlZka>qDd^ix3SbR;1Ib%_wUPLVC%$u|7V`>vorq@#?`pDoFgzRu|w; ztYo_TS}NQZ>w#f74-lL!%0@MEaZRRab}aXxWt3@*4%5b`k7#FcR^yDHrjJGw{`CDH z@yUZd@~q47bjaCgOr;Iu@r1he{$67ZRb6p59D05U_~N(Q^>JawG8~=p_~?*ADKgnY zj?Yjbg3vj^bfMWBm&~=|t8cu^jhokTddl$eL(cX`9PZCKpE{DF%lg(1d8b3QuPLh< zZA_SM$qUWHcoD*qPOIHv_xeq?w{}R77Aa-rV>z|89#kp(fqyifFk4h)c|m_|K)=^R;uxQgskBBaMXTMWRpg=J z>%H!=(Pi*Oq$hrxKxTK1x+@k4Q3c?kcBc8fN6E8ak43XSM2dP$t-*TGULbXbLfb#L zMUhjqGH@Cjq~ZNukGyCh#3E{5FgC2~N!%y--1%>*=<#Z|*fh6RFdUbB_|YQ{_D`|a zFq}-8%xf%(S1hfloBX{9X(&}ixtLRz6S9A`l=GM`tTx#9wI!7br`tLGsA>4HTsc-o`#z=dv@i_-cF zjFvDM2nDWley@*GcOeu;SIbn227-zQe#Ud#YD1|}mqi}YQq|$r3-+nCUpAkic&R<> z!-b;Ts~~-GUWe2d*+4RFw4{Z`glw7vG&Y6Rdl-jG4ybDFV{e7P+PX=$0ohogte^oT zdI+;?cE8vt^>EV9t1T~EM_yJzoV+OZ@2bA>mr0AS`dZH`kgxhPpZ7gikww2OmhgE6 z(#w(oR)4=2#V#b9-m<%c3&`hvKw zb&%J`Lx5K#xG>EZQX)kX2>FC)LKk9UmI(w+!hyXgjTgelBt<|TD>Bjuh7xh&zH)do z!OOZ@czVF{5_lFT>T${vSqe{k7-Lbt6hdf>)*-TJxnWD;ue&u4BmE|rhW8gYR9)*8 z3O|dH&xg#WV{}!bRKhE-yvp6z?y!Hb z&;1AYIX@p!o639TF97~*C=M^Kr>g{YYwz@8VzF3I*OiZ=vtVlN8x!F91WsZq>+|3dXt_Korb&uOQs$NB!Ka^rdyI7{SkT%N ztjn_I-beRX%uCk#1B}re9PU$_8U(b9f>xH|s+!8yoDNUfKR#r;Td=mfMLIhttu)Gl zC1EsMa4?-w?B3$-civ(!7;wJ#2|xP52R!)kKKC9>m{f}PdIyy#X4477;fV9`G~5S? zHM+?PZ`3=XS(2nF>l<6_?%rUqK0pdVf33@{TU%_buaRb{_s+%;5o@Uy^Je{u^s@MBpEVIDT;z_x6j7LCWEy#5MGY2O^vQA@*+n`pBgZkOqh<(nM}v% zxsck^wRpq|mI`m)w%2vI+)U<*xWOJ2nn47G29nJm$2=#;{yM)Ci4iXG1)p zV==GLwIyp6VLca=WzC|j{8Jv@udX!;fpkky=IZ)yjBTdaRvW)pOMnDpeW5y;Y37S_ zA4@7E$TV2z{Jyk0t@SA;n$hT-lcPgM!&4UJg7wXHZr{F1ufK*3i5tcdX#WYydxbE% z0=bN-eO@tjal#ydey%A#qlLpY`;2dd#I%QH&b@5X1Xj~qR?iKqY@O!~)U?)(vMzql z>hrLAzKR95CBTkDQ$XMWe_1LJ&PQu@S}9srRHgRQ_i&1dK)U#Q`=)q!W@6Ja6z0|# ztTd!aNPh99Y`DhD=3BG~L`x8OOI8xrOQc^reZ#~z8U&)Te+az2(&{=S9VJL9sI+gw zHBB_Pj95)XR3j#zYorSyR)#Qs+FsQ)S=#c~xYkdpIGawAZ`4N%3<{NbOJ6gT30sJe zUTtBlX+VemH6%i=be&_P>4L&9?n7eP(6{cQ;^K-m!OIfq;1UXeFX}D0%>RE`C*wtb z_dF^5Wq#&Wsq$BOo#!nsmwB%*`?;5~CtUVDUG=_v8A^w%@Bl9R9$#jS__8GHSN;93 zs=|0#A^oD~?u*>(FUq92%=^6znDV)=D??^9E_7ri<5qTGatAAiVDE55d{ zAvui@>H;CTuInZq#~6!DR6}=N9x*O6NS;HHVVnnaHlJ@A>yHc9Djr-t>^zk8&C+C_qD%)nQ3O*g5_DQTLaR2mdI zo=;INN*0R+v-#X-LN69nRTW^JNn?}IMuIg6Z)WqoiJZa7@ePz<~df^93JfP z_|YTA;}OQxp>flr+wIWpwn!7jY&!Pqxs>$Q26Vbz5E-p*kHOl2EXz1MJLB==hYZh7 zIXyX|T2x4-=yW<1c|n$D0dndvw#He%e)@XHG-|8mI=fV*`Mo3wd!qp3uc|R7{Qj92 zq6NiRk|=Clvy!?P*fahI${=Bml6nao9-MOTqfdGJ?Keph#mUK#`=5Tsd|vuuDSGPV za@}^qeXbCV&4&m|a{&s7^i5-gpfWl@cm4A%ob(N6>6THm*0XV{x?(<=adLXb{?QS` z(_^Z-q|ytDR*p6n8%g{!p=h<~_X@H!p{`1*%903)RDRF1fmk0c0dY@j z=e*(x3^G+@3FK)`nkuG?1rpQ521-_xbD^Ou;DRM;S)i^!DT!$ZvT0^46H;sgX7tz3 zHG>Z+6*{h_W*lm86*3 zL1?r`rqNP)A{%~0jIGoS<4QDxou;XD#Tw?S=lkSYMbuRe^)LFK=M@SsnlOG5$l6tj z{9nfRT-Lk(Z)y_%W&W;TBr)L2d=FQhwqNEM{<7Zpzp0;d)$8!nrc}J_dARKJ_|rlg zWoRKQ;SV%bU4@+_Ot6ItByX?Fc7bFsPFoWi{DkUf8)iA4Tn|wyYSLxUm|IokhEI`*Ls`i z+AUSlePgn|itb*)fNQPne9yl=C@tHK!^oT6w{Zo445B-r?cHNBrc&4>&&`QB?~Z zK6g1yy}}_%Y8&sV)s1|yIUt4x(6Vq97r~epvcqMFppv*CGLR^0U3=MXkRrBP9d>tb zuzP)%weLsQL`g}j)uz{5V|``L7rtEmSjVd!hL>%AD<85^90ecn2&LS!4{MxNtpEc z!XX}nEv{i%_=BmBo=jA1#KpbbH4Qba@sr8;vzqK|F9*-Eyh&NG!LF0!8AYel)DG-4_5EMKrO+C>c-^j9lPK!+~q7=AL*e5a}OF%CIL`r2yks_T$NJ|pP z)T#8a!g{`7v6y?1VOSFn_xJhz;h1(&(C>5^O^4LeInoKHZidd<*g|0>%ql^h=XAPl zYODG5{zpv5C;aG-zsKSJn1d6|+_t&(`dj?$Fa1T{dgJRH9uC=DU*qiTh_lgYNav6! z6#;SyI3MYHZEK60w_asydzZo5Ix0;_WkR=;(JBP%gD$P2;Nin3{NyJeb98*lXf$TA zDE;%4BqUPN>vsLMPg0ah$nt_#uZ@#<;9s{-ySK*L#x)WpnNG(XA0IF)XVi7Y*~u~Y zKKhX1@GRVaPx&v3jE#*oc6PUzOlCf&b5{B|%=o(P7V8_E+_-t0EX!zhx@2j>u-|8Y z?+NqyoNlMbU}KZ5?QPcAH%POL`C`s|I;PeYMtBgcC#CDA3E&%FVUKGv*8|urP{HGx z8m(h~*}ZFbiKO#n-XcgnQ)WG@bQZlYbw@6#)s6ZUI5Mb2LadNH-JdMnXCy zrKCGXcc*ko$7rOx1cWiV_T1keo_}E1u6y@Bao(?U&WQHjZ7;Te-}5@POuVbmJ8mIJ zUW{!rJ9K02Pa^t$S{UC>Y`|@3uJ9`i9u+z6>G#l*M5!BsZhyjnQ8;(@!Xlp!-j$~ zC4^)~|7h?TN&~g5{d**fxBNk|UPcR{S*%wOTr4 z0i6kF!8GPId3jt|LmQQh`|yD4d_ByOg3_6cY>Am*ebNRsnEkBtfynNO@G_y=DQFI%Avb?# z$x|vzZhhF!Qq_he6dOUxB@LJnL`rlfpRhwz{_t;0H-y<$k>_Y6M!uAwBQ@>HGp!+D zMs`ALRpzvzp_Uq;TH=mzp)S>2BV>J{TSm7<%Jd?YX%#~J_4?9Iq=wV$-Y)0L6~YkP z^+Jw2>`s!0hZxMFMz}_E_l|N;=36+BjNX8e5mh7g3WnSJdiK$yKrk~?HsO^Rf4w0s zt$<|{wF17&l}pdc3^@zZz{9`>yz;?=)awBrd1SSgcp!5ndi;>{oKwLY#s0xKVEyb~ zWOFR)`B@(;j(Ewe`hrpid@}%@k81C%*zieS^jx>AdVYfc+pt(4n-zbk|CUsO&~v)R ze!+t;;_ILIc3AX`!Ij=q^3`WWG_3^BT%GL?-i3-8Ol2SXi?HuNmVO(?%HF4`);F&in9vOei*8{+09! zgK!V-pI})@51qBN1s{`{2e}3XKUoQBM?dLg zNbjY61m7@QLyDsD(URln{S&P1RX(s`%@)nG8WwhAb5%{wwQ)%)CV!4O`~4vgG+5A? zbcsOwe(wDdq2}8qX_`ha_FSU5`*;U=(Es-Bn-?OO3bsNOkQw_=bo1~wdc2OeO9tS{2!tNTqVGg`33Sh3CLC$%)?$-2q7LZkz{#sz-^oWLN@1w+ z6Ma+v`YT}6c`I&>z56j0!5y&U^vq`I8veNX;a|W7dX!gaLc%hM`HwK=kk}LDge;)( zw|b*%0$|31uh^s$?&%Hxl|6X;TebAC3RVNwa3Aq|F7dlfITDr;VPn)Mc72n$Jrsom zpM1dt)fTmG@!a`;x!IN`lX_tA0buI^R`l$uQ!E3SFxQMN=V7ZG@tt5`5q^q2yK9nM z1P;gTYhPUbf+aix>w}ICvu3xL5=U^T@#ENLSg(8{14YIT-In!^(>Rz%mlFyFPfZ~C zE2h9Et}|UU|F7Q5A*!iKENUR@>1ikn605`bmznpy+oz~u&Q1ae!adhLzn6rVDANRC z71zJgo_@kpnpjgwN~ZGA>0$WL(o*W%`53}+OG2uRfDkSa?HnyJnPnIMes7v2du9q3 zI~N{Lk#gx5SIs{-G9`6Q)KFTPJd!t{L+k|-HI~Vtu#V2j&sHA;I;C1><$&0)8bML9 zos-Lu5$oS~=g~Vmudc5txrBt@#{5g*#Rq2MshE>QJb>G3X~id+FT)OyZR{O18&}K~ zL!nx<&*2f>O^njR&*w2j*q=%C48=sLVU zh&q3w&K{~RjQl;~{dmJn-qSk&=L;bLp@{~2vNVR1jC~8ny64VYen$s0hY9H8czYHW z6!-_LW!$6{dwp8DeQK|Ed({CK$tm)lG0Z_`bn?(pj8`lz<|CTrEk$|u4aLG@J%ZA8 znnZbQcqOXla0ATq-XPIK&Fc2$?&`_~-iFaRxqKt)Eqy9(9r_;Bg!>~#c1+p(uFpEm zucYx0ywul7{>3DseL%}cSZ-5En=zV7&AefxuIuBce@CyUrjp2spZVJ+1J&Z)7%!zY z4Xs1Nkd$`j=T=UY0;-_$_kC4T!R??c;`$dIrS#yZ_FZm@kP`51y~|;0FG`KUoTzc2 z@{QUp_<2KoPd64hIOXE?nFjoCjLP$I_cNi%u@&@5pJUV}VEU}lS2PWxc6-@NYUi}R zEi1=|sPezyLd+vzadj$(v|Y!`BQDPc0mmxO_RX6Ch@DseeBmn3%Z5(}L~dh{1A(?~ zXoNlN@2R^G6Gx{Q#{-kI#gN#Z&uyix`EktF-kzKlCsi+>W=AA0obMyOVJg1hHl>8^nEYrF+re ziBRVKBoZY9u&rvdje=8~ypje~n)@2G80P1+a-_Lj)IK7BBFd{D>M4xRIL1!-Pt;Ur zgbtY=7m56>w`63=0#(5IImP9Rs(2(O3I(JxW%=lHE+L}A3ob8a1rbg)@~n8QRoM`% z)d|gn5|Ju1cYPj^CN4a)O=Tkx;%5Dg5hC9rfBevCTxEo7=UG zJBsJa2deYk%`})f(LXO0ZS6uEMfFA;Mo3My21h{)pF#$8V>kb|P|Hd@`G%yJ2|M4t z3i1B6cBi0E@7__mG$KNF3Zy0{RRySGYjuK+`zTgUiQJ9ho3pP0sg)~J?W^an)TRq0 z^U>D%Lq?yMICPm(sWt*{x(?mcs%Bvr5nWtV?dDO)A+tJU$U|4>PkwyT@Em`~M8ZA&}`^?7jxZh;MELY5LifcySyjimb$$=GHxXxHQ|+oVQ*>IrR59 zk@CK)ZG3*{`*iZr0es*aFX#_ys;CTlSE!XVL@Y!W?3ju9T!uVgi&+R|hxwR38XO~| zD&#c&YHpoaxOR`Mlxk_0o&JX$6~e&?@8}U68M+bM0Y7cs{6dWQ(E@zP@bc+<;hW=c z871!tyw**9ZctZ*`EeAv$g-!KDgJf&rvjlc!7(wE`dbWbk^&3-50~C{SuvJ+2h{%D zBMLJ?c8lMZR{#9g;(PE3M>}G?3i4{oU7?yfyRm6mk>5LXKvMx%jzI;W5@u-U~k z%e1U8j1V4YX3EEJ;rLJdb+h)sAlgf+za&Df0l8w4OsnY+aIcvB7{u6%!hpuWDkBT^ z!$o!JnbD-p=*pX};+-`rl_j2YYL5$fbNM^we~*Y;;M(cD$g zz?aeUlO)(38g=fxMmzZK!;zl2~=H?c4D*s3>n!vxTF%*)l z62oGOGbQqsgYt?87T1G!Jm1mmI$V($WJoFjW(e~gYL%Z<*W!dce(3aI#Tc!dfrCb} z2F4Eb%a$*FRz8Txv{H@Bn!u?73#P|A*3*O&(?>_NuU7K<&kNp2o!~&F3oD5Z#W8;2 zlxs{Y>q(12vLx-&^QLt&=9H6gw9@1;>8xMaW1N*2FDw-@Mme=EBDo;dw6(~Xg>hni zut>hO*{d-)>NiQWjTfE^$Tu>0$72Mz;H0gRw={;%n;Z?-; zf@Nlm$>^oqXe(&WwO{@8&>i!iqowb~G%n(xCDv0|f2XE*Ec$Tdg;BO|hdaViAMDgfa-K+XlISSZW-l`VA8)s!!@pNw=Gl=J1FBn^gKvMbw zmKJ^K1+VcgE)M{dnD$H@OB7)N3AZ9_6L)ai(xyLvYML7D--GwvyRB#XEi#c=#JS%6 zwCVXOoB8QYS@C8I%W)ifJZlcC5>GN`+uLw)9Ap)@b7BK4d98hZ!adGnNi+o-yt9$y ziWq9LSoe%DNU+1(bv-4bN@UQx;u)HvdB>eM%Ji6{8UD5| z(YTBLtiC&6SaF(hY`Hxzi1oa5h5&GYiXAI^M9x@9xk-qmP6+Gj-b)&j8(M97-bIkl z<0{lI7%0jD^3U!%oe*3%R41km_G!2I3WNVV-xu=FV&QHnD#hmd-IK;qVi2EsyxNcO z`tx<$M%m1QQ*24#k62Q`Jc&BNJhM zc{zZ@(TYiqde`Izv<&j=_w*MQ(oVQKuC-09ICYO*9rKqlPfW){9wC%e++;ai**Tgz zQ7_CcUzgHwOc}U(diFT;nhRy-#z5YCr91Abv68oU;k;46ih*p1x%z!&5$i=mkGcWf zPZ!yL(pK4`Bv*Rw*wH5gB0e{tuy3!x2={0ndy^GYULmuGW%|x<-^++Z?koGhh!s>5 zMav$nyE?pSSbA50C9CVNf%Wp@5EAOu+GD#y(5=Uj*R=3Sn~b_VnMBlSV|wxqRVP

    EI9`iFrePq6jN*U1#Ui;CMx!WH9N1Pqc-Iq6D=G36Pp3j)jyl z^K|MJUf@cG-A)NaAT#0BSfZ(aF;fv|ihnC|?g`-=dnl`-V$RQ&IV58$ z5E_Q4C9u9Kt2IbOkIG?7(|VsJA&jjhWuet%>R&D>O!aV6$gMS9%m@+?$~a#^TwpWW zjSW$)9jtf8ra>80q)Rn0B4`r@gPYu|joW3_3EYGn462B{GJu||k$U9sX50|i^bnP+ zi)YXD2vgNM+0&Iu%_AO?u}`LS74ckg@!HY!v4`Hqp=P5-xj_M*LcGV}l~ALw!`TxE z#Axda%i4254OY2-ayK}oTvP44o_y=n@hlXfA<_{5DM;jj@Ih{y{xo6<#4OM?lzkRr z5fl>xRtMRV*@9}m2n}kNDxkYC7&xV%rQf2)PtO(8L-A+Ev5P9}#1JBS3SaO(HZn1h z%5P7Gbz_3~#cFyk7lo-65?(;D9zK1_LnFpBliV?&&o_1a)kCgMWj%~rxHu@3 zaOmZ+eCC&88DMj*VAL={7rF%t98C*s1Fl4#ZK?d?A`Vi;6`^w$T4AUQiBSH5pvo;rqq z6TZQy{d6cRV7Qv-n@9dZ&w{Z$69Ye)(Mdh>yZ8)`seNtH-Is|fg1=w(-q2_CO`YYh zFAy#AGNBCKfB6(9E0y7y`9=9D;zf^Dc3A?gO&V%MLhjQ&U1)eDM*3z}{=(bjW@`pu z*qoM%`M10;J_yI!kl!f(&#;Ys@LTCm#I$*WHc~rt1JYZ%>s2@4OrnxtU864-n*B`_qtLmIcOiRlBQT9fOUG)#KRPbUIXD&^! zb#fK1IR9XJNd`0Zpp(TdX}8XCX;8FpXsJIz9_;;Bmgyj_ybtyEh3B?frXR$qdGF7! zLoKOv$7o+q>%Fr0@!h`_X)|ih0_S}ol!d0tdfIs&wKuB%2zL@lT)HXT?HWYA<+kO8;U0^h=B}#eE8%!}&FCXVNqct49vu&_M34 z{L!t*+%rZ-z|lbX*jSedo;yQSiswLSB;Uk_m*1i+4*4-j7AhBYGAJPzc{2tUDwo<( z5c$X8Jb%nBq*EZYN#j0VHZ|T8y&0Xcwb&$RONjxung(M^q%gXrjh5Ax70@c`f%qR* zJG}7iSYs&z2J>0H4zk-SH zcGvY)jd~+Sb2I3U0kI2l@fEq~l0rfe=M^lx9H`R5BmQwySAkt|E-`UxC=C20APtgc z&_l<=f^m+BSZ=j#$aqjwualnq5jKa~-W+pN^iBMXD-KyM9z>U9U_wvvyVlXD8w&^z z2~CkPnsW<>1_^69_c*dX3w9Lz8ld;iZ((MGiA?@+Cw<~3lS>`^r{qOQRK^Si(bFRU zY`ZZOlE1c-^Vl%s)UyI*y4D5^_x8SIkbAAn@WHYHJ<4UBpmcKSMd2mh&YkaM zeijE^$af&B<7I{0mz8%WWK88aEFwsYp12T4pxHqU0{Moy0lGBKF3M zK%V{&Fyacl)1XFG>-t0=W#9rd>mo5;gy@1h_ZZ}&P)bUy#DZqMZM}_kC@VpkTsf+Y z#Pc)VK+7o20mD!Cs%h`P*xTHul%J!y9`qO^Fy4KHC|Kx_;46t+8f%Lz`ONe%6e;5{ zQ;%sb7f)1V>;73=%S%46b|8hQ2?z;DV#w(1qA{hZFsQVlA(hwXSMveq*fNv+(y>U} zx{rpCpSUHqUuoz=bF(izjaMN$DV>2i>UZ@7MMI({ z8LuN;)bGx5kx5!bbALD~2<5jTc5coB`buIcKWL9)Kkq(>Jf4^V(QkdoL_gjqGX<}s zwy(4^mJQbfQHOSy-l9N()6+BAr0rm$>-Du%5?JtcdVN=uR0?Bp1Cxbz!hV_4uTTY( zcH^mkyFeuL#H4e{p@$vmqr+?Ivn`Haiep7pm z>&`wF{ehV!JQC(M=nE<~HZRndj3-WO%g=(AGH)OovhpUvx%6`q4^U)s5*cOMXY*Vi z2thRt@w9@8N73~roY`v51QQJ$$+p{6sgSeWBn-Qt2BIC_LE9{)V8ZtxR}~)gm}BLP zVhMem0*Sp)cgcZ$3FOppdKcwxobMakR23w?XWv6B%>BjPuVVBG$#y^laZT0f(1UT} zuBj~5Vl4}qgyO8265lhm_1C#;NA)1Rl4`sCq3|T_n0~2gRWV7u5Dey!TFgy z@)_e$jVV+cRO+{j_x9KbKan3ir))(xoJ2dpwZNSo9egPQC&KA$BsSZ_h}PwOKfkF> z&5cNYV}wsrVm(qAAHU0CpH|FK^>RV4xFH?!h5=8yRjUal`FosLxhBSRscA|_umy6i z*4v{ulk8q>NYhy>`52?PERIXHVcUY1tyJMps2k@I{W*Vd@Je%S8dM7M6pHdzk4(k_bM%S3SQDKl`Mo%3H4}Hij z&xhHpt#AkhJl4OP);;BDglQwaFW_b&aAex-dFw3a;+msla-);wF8j=P@a*|>Y`NKO z)$0uK9o*vEyOCD6`;{G>W0YHaLz@=eq9oQ?T8{vAqiU7VP1p8Y5fv5d(=~#4CC#q&6 zaO1IQNQA^5cJn-{G6?wx$3~o^cc&PFu9&Da&cTlZ6yxi08{!lVrPUJEIhkw$>96;_ zz&`qTPZs}9wISJK{u@yl_+VL{W0~fJg8_b%Yck{JU=KnlLc1qZw+_qbnhg9e!!Rkb zo>$M%&MfA$km08k_u&pKC4Ygehi%%a`)stC&R<{2lH4x6jUA1;C0Z8u4mab1JEh8( zryQ+1Tn99!2kHs9f z+dF~HJVDoI3?LjylN1QD+(x%U@hox9OD6fG!sHUhx~$*#HY41ri~YMPicuwOn(EBI z{;IqI<7~EW2RVt>qkYk-OC6Z~7@F~_*cc>FqdaU7UX4|-B^dtN=j2q}(({|Lwysuk zFHNoL=Q@^;QV1VXJNX3OxF4cBz5HZ-A#xA>OMnT|100YD*gjM<2;Wga0A*nuwnbec zCzl1mPKOS$j<&`sV5A@?%SX>^xhojka@>8OG?2#MxV<#%7MhMFilY~^k$L-gxd@7P z=i++L_{r#%N+U@@rqzfbG~pcA9)tW3S##sb*(nd%TP6dF`VOTU{?86o(9czJEwe~g zOvISw1ASDgL0Z#c5nT-_(sWu{Sfz{_2NADr@QW4EMn@A@p7Iumr!Fx7GJ*d0?*!fn5ymOPEkAah zO_ORSnh?SYB}nR&LAT=){qdR_os6<<9F4p`Kx$Rjqh_SjMnF|+%IW=UUe*b|E*>el>rPC32qUKFnjj*JZN*08 z`s0?$gJ%0tcsPyiq6XO@<}t>DB1m(4NMfSv-~n*xVN%2ZfffOrYWmqKi&AtjLs0)O zWGmm=)xkCDTT2ug`bTaBK+>~QGWIz(RBt@I@jh(Z_2vE2tQWUOmRW>_=+~DjnQi^_ zNjN;#hIhFnGK80ie8wT8NuauOGBmHrn0j2ipcx(411%iw!S<0dS^k1mCQPBW`js%F zLch?zS!FGGeAw)Bp$)C)K$epWf1Qg&HX~jQ-uXf}&PoN|!oq@rBu{khklr!Fnvw-r zB=r|&tsH4mvc~4?H(WFcpOs8W7v4c}dGUOm)c@YR_Fv=W)6Z#W>Qu?_8_X}yL``yC zkQ)kP76#QvsF+FMzdj{rp{H%GoD0jlCFZ7QU=wE;T;7M*+SkeX9Q@@ReWjd@SssfM zL*hkDJd2VtIyVJ{m85=Fh&dn?-^9V%ALgmF7Axs`NwSr@E|eeA=JslnnQy|C^aV#o zlF0(bIrpd4hRD*?&h>*xgmYZA(uA8q{1?*Lr(SN&PdV8zv(0<+UMGL+C6=v`ldPlf z7G^hO-x7;i|IY%5Kiq@(7c`##b+g^+$v;o0D#)p`vtM`P z&-QYn-*X9cpY<*FU9-a7>+VOg7Su@ps=McK@%_(#f6cT1(J{XF?xPxigMfkkVpbLn zw7f>aw_EuBHzPqc>kiY9*t-d;pMM+$ySxgdIFi*U1jG?>Mxi2zj{RP3#w(65s3J=0 z&gp$mGA2){gwWKdDI*;jSO>|^gIrv9%wPE|8e7RC>8Bj?RSdlJ18WDrsJkEkMambmV|fD50eaAoN}wSHqU=3E>d%k1YW7U z)d6k%${U<)0~Nm{7CiXyl=0;i8RW}qoW-peG3^4gIx!iBy6p114_Pfr;|G|s{lLx2 z=fBIt$gYU;OfI+51`Ca<<+eF;WmQ>|-bN*0hq3^kzLC40 zl}sqqU%W6pRky zWYbNt+gEnRDF#LfpPL|AlLxMrv!o5J-8zGk@hznG_VrzL5*71(s6QuwQ#Dn=R0VeV5 zm#}essIvxd;{C6#%vyfBh!)+n<%;Pq2}&8B*RQE9RTT((3i0eZJ9~sSkk2<|Nb~>-y8j$slSa#uLk3aQG$C>6*BUgu$aXI2B!u~N`9mE*KaACNyV#> zseGQ0HqyM!rbA-c{@7=te1|UMoe!kfz1Nn^vHC8&#g;bt8#%sEA((40F2qtQL{gZX z{#fI^^vrKYv6|*zBn=}ND?jg#w`3d6ak@IMz|HLVlD=Xnn=<&F9LqMpluZK&(P1)}f!pLB zEqBm>J0Yf@cQCVm2q)}c9vT-v&*Ozx>_`_iq|PiM?KAZ^O9U6cm83#H>Pe9mzqRX( zUTY#ScC)sMtZ{5g6Q^`BE09T%&%jMCTDtTs7LqvE4cKBA?@s@M%b2XOi{9^ZP*@e6 zFCW}LPc zP7{p{F9TS*_=)@1dQ@=-NAPUt;T6~t^Nt4RcSYcNjw7uRVdHH*`n@(8xvqo2BX0mZ zysP@6-RR1%3LAJ6gx{cw0*IV{yl_qTPYou3h}_(a+nH4t_$aJ)k{ZGBDfmF(+ux_& zMXGXse*W80A1Bx2Ypf&!^CM$1PlTW44p+@;*GLt4JBjY}DbdM^XQVLZTIG|XS3TE) zXIWF79+SKVSYDAX^WCb*n4r?v`Dx>hDTcO(tpf*Hv&5+{DH6@o8H0| ze};vdd;Qz8!lrWZbPlX`ucbyt2z({WO?@qSOxC^Q^7k+`sJvOk-=&Yr_vT?$RIFfz z@CNM})sw*)zhlTV-S~tqYpa%A-7^aviCDkQ@yAhSv)JKeOkpgh-baD9=6$8k6T*kJR{Cgoo*5?soOSKEHxZ! zGDr@>&g8JH>{pO6+3k29Jnndy6jmO>6uaGuUGk|Xp2LeYX@4~%7oMUWiXJ*^?lNir zjq+8d9&53P_iFwu-~hO^ZW6lm@k2d6{^K7WBLPt@$t@TC-nw!MnAXDO7_^FBlUnLW zIhH8pziTQZjSUa{FvgugE2F4T#RAb}@1&DKH5|3||Ai@d25cIDjdD7y-srRP(ysM! z+&Qj;_-EYFJM))YnEZv^Bicv!cu9(JA5$2GvO%XhlWrP!X}_gs><9~icps;a2^Mdl zlcl4fHwOo#of42Wa{l4SEMV8LW)NDbnEl2qFLTlGscsp)qE?d%@L zB_`r8pGpBJVC$2jWW^c-E~tl5d-E4#*0k~@lxsnw5T)}vP^(FgmA7PwA+V@>U5-&9 z!=g}MR%dq(vj$C&{B62g*rDxDKE9}WS}d$8orLLQHye)!Wvhmd(TiwIrN@zpJ3LvR z2(pQ6s7EeBzEuEQmZXqUj#ZB6HnOTMW$7l@jR(0|H7SJo0cl3xu%y;DN`|P z33$2Jj`^)U+5+>L`H%*Nwm$&;U(`TaJ)W|q6^UJ1R_wGvBC*LucU|4UM5YH&o%tOn zVR->i?YcLH1c&nH-uu#;SFGi&oN6Ahp&q*q&U*cUh;*oh1i64R;}1~0{(bO1#dz~6 zq^uj`w-=|1OJLj<&&hf1eC}Wz%MFW(RMDJEi?i72paAx6%xBp;@01j=Z&O3?);&>- zxTQa|y3B>NHuwS@EC=Ja;*%OWnB}7@^Mx0j-7wF{1yc=*!ha!0zV_0CK*RfqEAfft zn0#LkI$k}KPLVyxtjAEg5XphJ4FufO;mg^^TKNEX|L){Woqb=$mCxYw_U^l5wgm1< ztMxEk5_u4_y1BIrMiI-m)H!G=V)8k&yga%M%pnkveoxl}GfOTMq%XAU1^~YrOgx=$jNQax+una5evk&0MId$^A>si5>^I$xdA zM4sU`GKeJe`Z7}tfI)T#s2!1KA76XMYL+X7N{-1(Vr{m^bNpv%=T(>qCCH2UJF4T|eVWx%X| zwyWoIbn?s87=CiQ*!Z(b2bi2-qp7X_G1#Xlh;ubc7@&JObcqOTkHx|Ht8X}O7?i_! zM*ShN`2FIKBm9q{-A_aZa)9(}~SM!p)r!B1mM4Hp+G=gcUZ z+Tsn1)brhuw1{?QdvFPkf3oX!tY@ZH@xdvkx=?HAR9PC^$A`X;NT<%fhQVaE0o}e>HtYgl@vbp7U z7bZVTOjJcOCIT0xj~Vak$kJ5}SlssHHbnL-z#G7r)+d)O_9pgrzJ~IX+rqDh1z}bq zKCs`_3qwPuA3sF*4|Tyg`~hC^S2;(8`%wRD%t=+~(Us518I_B(v$Qr!WMABX@>e8D zgg^71B)v;svMWd_37%0O_5ePEAHrTTrX>@KF*Z`Gt~~D1T$Vkw=zlg=dKXY$vCjFD zhGfV~tycYSF+qd^%_TEY(4CH|n4g`+-Quv+S-YGq>AL;!IZ&G>`vWJl-a6~p;+uRDDz-}P2*-#LS^1w z+o79Fy$G?FpSgeGS8wnNS+sJN@|RNW_tr8gmH^DKJ2@fjlC2gt$8J-!ZqeE!6y@rU zU-FZ4d%M$2DX*Vp*TeS1(nT}9dPY?Y7Lmn(CvP801eZ$FV0!{5xoP>En)helme$uy zt$Z*ON&L?Xs9?PhRP|j8JKK+0L$Op`WGbb9Gx8a4;SfYtz`YuRsyNYxg&JC))zpjX zrL*b#UWLFW1w)e>`sdFw{TOB=m)nEi-!@tme8Bs-w6tvLXZFgDjrc$+>k4p67p^b? zndQ5H7z}is-uxuz2Rf2lP>T381+eDkkqlG+c=!6MyL@v|PBB*=)XWO5uWWTcAUg9u zr}QcbR=_tpf5X8}5+i$Zb_TzNeemtfHBpwy#{y~}nwox%B=NR?265t`{1uz`hh9EjrgMRK&G!yo)41 zt4^t+;oOQ!U#yFfq|N8pZx{tVE#~TEHiJx9DKp^H@8AM1nB|2(2Ik8$Ib%UUaABKb+OM@g*Ee3Z{0r;qZQsFm0Ca<*Eu0Zw$qMOv8mJRmiBvzJk6+a^O?Fne36xU{-Dc=ypb8HgqR&k{JA z^6MY@i|tV@A!G)SB%Q`TRvv=vcL%Jqcan4AqrWfT>l+&WF$!4%&6=70*4RAZhDjCf ze6i{G!7GqfAxZY0Y#UzX%E!08PQb-GS~gFkE0O>5K?>8$ejy8HJ^u6no;{0V+uq%c z2K#wI%FAIUa;V>N7tB^Fo$y}rE)0b6sDIB5EyC9dp=!46L|d~Xh%&(Uwf^qO{DXq^ zwuczVQEsWm{^f2J%YaRFe)R;_)TNuUk?2tzf!dlCa^+ppX`5Qlp};)a+APbSjQ+`F zLW`IlGpl6^6!jdwRX#Va`goVwW7328Q@)`Mlv8NPOx5V^;+YN4govofNZ=*7Lx;at5vEg!)fyx&cxL4Mj5?qe@*n`Qbv^bb20zVdRHHMdQ++VLU|pxC#u zh+vP~*!2g^=M}`U>$AEXdv(B#2mjrZa8BYZ7`}nn5#Q;aC43M&5P$H@v_Ay}Ja(S~ zuRFHXYRCRMd3%SSUCa~on!`&X{NAH;KhaJA>C z#aywe?f4v!xY(l|V8RkyA=)2>yR-Gf(L)zRs|nk)vQc%&jCPLy2kNP`RNR+}V+u)~ zm;?esAy3<>z`C`txOlfejsNqfTB+htO@JQ+^6b{rPPJNKq~!~r5L=iDS_&cAU{yx7 zV$nB3({i8Kn&t|)lndx9kPG*u`i0oElilG$JVKt5pknQ@H<5|6nEUYh zCGy}1lV*z#3R{)iCvJVtw{$k;1>pin*^NJ8He59~Wv*+iIx3SL5sP7)nY1}kzer`h z+!6w3=0Lg54$FDQh^oautI@cSZHIN+{ciY-qDJwIzRuE za(#_VDDG3T9)6tk0iG2wGZq;esYhzWMes>Z>BfUiv;TZp#?t6VnF`CrYN|2>`|QMD z2D%c(*qBkL`qZHo(#2$!R{~{Y^c)ynclWqMB|~%W3MqTO7cjZUb2;(N-bFC{c3R4< zP?Z0|HZ%%_4^1gB#f@?*si>%0iC1zvXR`3l#oH421nII6@!Q}4$muD$FZ?`kXzOF) z)~w*9em$>*42G96JB^{FNPDwM5L-0Sl2xgL{Xde*2HFVw-(%&`jR=e2PYmc0GY-+k z^5PxCw!wdx3U9U9N^8s647~ofne$RM5kQapMLbWV>cJPg0g)cpzguz_KIKcnDmXe_0C9r7GOn0N^tUj zx_56|tNu7E!djjH8^BR{;Up+1wtKlNpQPIqNP+$K8vP{*R1I5LX*u!`t~AD1xSWP@ zSq)iflAnp@Wf`8Kq@NBf zNGz$m628P_LcJLOac0P3zq-pZ|7p=osv^SH-Vbq+H9b1S`+|+q(K<8mLgZ6w^MINY z54pPp{KPT2LUC&z&t7+d&q9CbN3V4CR=K5Ewz_r^?-ZQIMaMd-%u-S?bJerQ6MI3;QAUgNPGGEmE(F> z|MD`KqMhwAkiQ>2WG2hC?Zg9JYWo)B*h2n6MpVM)zEiAxLypP0naD256?gooZb3tv zP(Ovg{X>X%&7nKby6+BZd%NLW^L}stkjRpF??S!U@gHBOFBj%2=VNKVuYZpvR>Khd z*G$AB+Qx}!IqDfo6AkLJs>Z<3rSHSKxVFt84RI&A;=XbqEZx5*i;!XiJwHHrpc^n_Q8J2 zaFJd;1Wh8^HAbhSWMYi;MGXbYSts@e-N=)BRQY0r2z-G%W1*DQqAKzC@gi4SDM?;y zQ;zzi9kZK;c+TjBF(+3i%4kNie6VcDU9*qt^mP zl;rm^LDS!1OF`wse}+Hv=I}^0@Ev}loi?;!c{`L6)AY90fK)ywJU62|q*t<7Ic0e3z4t(_=IAtR;f((V-(ej1s(#K`>{su|o`vo^1Z9<4C z`N*Q;^c?q@K8G;e!J~u8h&)*{1UXFagpJMx>5ymeGaj{Gi9+A)7hq3|{S|-!Cx(B#==S#MRer zcm(#6_<$jron3ESPV4I3ft^w5iezQ{cT`_3O8P34d_ioG;}o7*?ZV*6?Nkm=H&RgI z;wM}rf}ODK!2m(@*xyc7%iG$Z4AiQbKc2V-J_RAAe=!VoOWzZG&4+SH2l;0d)11Xt z2K9da$WOdX8DpPy?Unf29hQwcZo-d_?Jf+=Hf1hMAW+(g7JTqdk8`3-DXn%iAo~(ce!8UJ;6leS>j^qO+IHprBdL%b?~O zow8wvzS~LJshS#drLyjIVBB^8_hku#)ye7F=UUL_p*2;(EAe|+EJ-D{fT+;^W&CqulTLE7Tl9$|XGXJ2v*;yd(2BgR#Z;Yo43B2eMn%2NE?F=-_uD z{lTxotV-}k$e=5pBKwE801_bCGHU@}rniZ&YhEZ=WYQZi9=F85V701kR&D7<9p&V( z+lMn%8#w#khCsz1cz*u8QAqkS1-7!YOI0lizxtU!yR|^>vDD?CdCc$Va=HxKnGShk zQ1iSvf4Q-W;De9gBzm^3MLTvYdDP0*h`;Abr+qtjF|O>IH!XZH9F=vNeSGP2yz4c1 zy3*bOzb3aot&A@T3oK!^6GNPcfqh|t<&`gqF*P^tqcW}RW{t+{lSDW;ZRi)Z>01BF z0AU3;%d)!w>mZa3toxqCQSBrO#nM5O7@VAqpBD5=Wzw6mDG7g%Y9?b&{)`29Yje-9 z>yqGP9a@8GaN-Y-j%o{`&gL%F5=Jze$Ppi-mA2l&dm^mbiPnUuD6_Bwt2g(ruD?0e z*0oAl*a5!^%iq!Z2G?wwW!ZX~10Y1-Xl1!@@vNZHw5~L5VlWGmtv*TYb`iuo<_vIS zs(=@H=kXD#fZ)kdLO*%D1b?sqGmF?qGlzIrKU}p$Dc<88jdOl;Bzk*77e|&zNkwbIj~wby^<7KRPm~oDyUl%Z$7^8&AFMkDCSU%Ebr3 zl@yyQ`(jr7j;=tzClMzpwmIsT7_(GDnspU-A4P^%HjXoPscVLo?-Hr5;9iaI# zS;9uP^wp-Ff*Z|?=LL6m3T|&-mXRk##*HFtk7qB>xV~}i()VO}&dr+{HyVG+cl>!? z^?ROG1ivWq@haZ;SGh*6O8$RZs{gXMyjP**zYJ;_zC$L%)5r6&^Z%^lf1O6&Rg)23 z^}3o)=9Dwbd@(7iyapGiVX|mxw2@5Y5L6_{ zj~QN!W6_%soB{*@Hk(w8h6nhd@h%~RgrHmtRU^nkD-uaX?Hxv*(^Sq%5$zRent@g_ z{nOFMrZvGUjLD@qR*=PF*Tfi_CUVI`BtiQq<(5KS#bR?Qdyn*Y6{*`nI{w5du)vL$ z3tWgkG%Y8r%^w#DV1}z}k>hulX)G9 z#-`0-Htg=+ptnq=$p~kd{ zl?F_;sHJey3S|^lIq-o$`pLiGvtRt2>151&HX}6(Y>n1|)M!y}#EqtDjA3nklO#zwKRcI1f_a6V*W@bY-rYBuUW~aoIj5S>d3b!xY&r%U z|KNZ6AE{hLsuKol>l8(otmqNclI7t{8cEg(<)S9h8SCpQ&Rg<4@nySux*^Uk|uoq~stzv1Zcn7eP> zLL1F&Hs$p6l#NBnruB6DYYh55`n`hllS7V<4mdn|LbaIUv?h3qB2aYtRJKBC#dtcQ zzkkZk{tY$;$H);c!dfFIMtLS!mbc%vRE5@TCCkKbjCv)c0 z5|fIwU1aTAj;IC&pgmPJ6NJgbu|q1!1WnIph#K4&yM;r{(EdHC=FJ}5TUH+kcY zJ6yZA!D7B3%R8~ab4;fT#*+oL4P1;ytgo$6bi3r8oNl*6uX{_5HBBfN3&x`{Ceh62 zbI#7sSu7SL8tS@aKASR`jBq}(a!_=N9!1e1OLHn);exOnj8P2w9Xh!|`wEjLT-zM5 zzTW5Td=|;@vObtZt$6=+YyEN_e52IyzJ&`Km56N%FKerdV&SNEGH}Vaz698=M#L_y zd0GX6Q7B^KSJ0@C$eI}f&Ne~<-P%k9@*g!=ZMsQ}wN*)+LhBX+EKTRof+wBx5aG#$W329dx5qq@<1dYzu!2QdP1(C^bN3TBIvIza7QR949NTc>G^IgI;^HY(RH zW$cN>HrCdXMoUn0Ph5)GREna=2|?03WLTmj1W@cBCeh@1CSb%`xIW%X173iQOE_{< z{5NW?X5#N+N={-lWmRFTl1{gaiEE`;A_KJ(b)nch>SoRYh{6>R^~Ece2~XD-FWPe_ zS1sUQR=oc<3d*Y{1iYx(&`3jgK|%DJ8#Dbz+%GDeo8R@KBJx#I0G`(rc-7Z>m7?-0=l|({f1LvPsTP#qzlEo_+Tr38i2k&aEuQ4dH#Gq7$ z(HSZMtpZgkoo(j>&Owr7s5HTaKxJz(of5Rddrj>EV9-h0%DlBn&?=EmtdH5p%D0<+ z$@opEeKR$Y?z)l$J)Emh-o&`MNX*x&^>172V&N~7JRN1@Quq-U8d-#m&ahSp!IiZr zyDSDlk)$~toe;dc%&$;kDY=fGX=h!uPRMcOiD~Tw&7znzlD{T$$$L;q1P3*l++1oj zwD6pj27&i}C8J!Cq{&JXf!L+@^81~mDl1M;&p16jqpqu#m7pSM$QUCrX*&D^zM(4XI9YQm;G|`2VpxG!5;sN8uiW!-BIVl{s^wHf z;)Yb~fiBB=EWGOoGm`TbRLmeUs*Q^b-r$@SI1~b-oXtxXbIWZ04UhK^$@7eUzmL(# zq^z4sBMQZEJZg)46C=;WX&^Qka1tXKWb^C1XI3tlmvi|nO>CMFqRK_J9%!AU(wqn` zHYFfU67nn~cq!6FaTTtZn+4p3V2@=v=S+)PEacxjH<5CCeZB`y!-w;eEPjlAx1#CKuo@HcxRc- zXUwKE%K4n}^n%%R!ui>V^Ye2?qY0zoh>Hv1X3VEEszptjXL!|&LVSc54w+7e9PEG1 z(V>o!VvgEY*x>L4YHCK~sl*#58A+B$7@DQ3$_N`xF^R!wL!PG?l~5EN-hSsp-g@^V zirxm}$qZux{eGX}ut%@kBRGpuo?a(~jRBobLAN*Hy$?U;gO5JJI?JrAc>K-ROvb{F zu(d*|6qDp+MTe{?z!+RrQ`wrzc_2p{hYvN2YJojJLY<$2PTAeN#f=+xx%uWjc6V=* zrYY5;q{s{Uy&l`wcbHE{TwI(m8eL$W!Frj_rb&my1cF+~Ju>KtdMm17dfkE|Gu*zp z!;Kp|GWid-g@>lv(8)8BRFjlYJ4t)+UQt^o_fd#RF%863E8!_<6Pv+`B+)GcB1zJ? zdWzl1hZ?0lN_j#k+d|BHFj4QNFf!ToFrP}CrVE}d%c#nV>10AVpD{c?=jiB=>0$pG5Bi6+3^97zy6A&gU8IK zQyvC*@aqBV17QW+ymgl%%NQh^PBx&t6&QQ%sUUSz%qk z29FOGh}J2PB#f0<$ELyPyalaDR7$&C8wgqob(C59{86%QtVHh-@7AY5jwVL(HO~&M zJTA)S#SY+G|GbwhLOiYo-3hT@HTiVy?`ZY`m90@G!u47On+!9A86bP15TSh%_1ZKF zViP1rAZjg5j-cRVc*c9_P4dAO%48gz9x|Lx%4Jyhv5>s)+KuvdH+n6CZwJOzakin3Jx= z6HO4gakBu2MvA}M=nE3BrigN8c^_IygTZO zatpN37J>_{cT_ySHrh872Gb@cI2U7)l9Zw-M1@iodyN*t$Ly_m`%}tUlV?JLno6V#Npfrh2AfdH2NHk)M5>o+Z z1(+z4^rqR=Bpc`zaHL3Kg3=L~CDdu}#ByVFD&@Db6p(j4y`l zKYqe=x**RB?!9}DyLaz0nL3R^ z`9U`S(qM38Sw_F#V>-1c?MYH$PL$=Gyy!p(B)P#PImRf~SVt=pZ5AG9Wnxv=f$4nC zbTVZ!9&&tq#226clArzQzvk-)52$R}P9*2$jISR4nuDV!%omfDrnJByRU#=XAu=W; z`m?5*mhCf4remO7LK-rP%%D*W25a=XeR_jUOy0u=g-R0oMJ`fYTXS)G#M#LqCQ&WD z-33Kf^ysavqtX;*G~0VOD6$SkmJ@8v#>NhvewVH5JLH`X)>=m6F?ChaU)$uZx84PB zI6XdOu^1D=TpAvApeXv>d*>s5{BQjgHm>iHrYVcXf{9XedtHg01g7ILPo8{3?FA}G z&{zv~?J)+D%t#813ZzL!zqf`liuFN{>(@8Ad-o=tPC}EV-uR-MDY;B2m(WkSwiUKX zLuner3Nm9bsex!?(F**^a;oE$wTW93dq_--Sk0b~_je3aBY1&E+Pb1HE9P~{$>|B> z(TK@-B(aa>0%vQK5jBj~AwGM$7^SIPCHJZkg-qVXd5>g}9B=2gbvmx{Oob&Tj z_8&ju;_MVVpQ3Du$1ypdGaH_gq=l#elAOI;o=&$sRCTTm_*vThhdk|gLPB}p=jbto&7;mXwwmkjL_gMK?g#dmiu^3HO=r;o2c0Galhng<959y8yFKALy2iYe=?Ye zUUemfJvvVKjiGimC`i(zg&Y#6{&KyV2#7U2c=Uwz%`UsUH#s~w;8*t_v9LDU%4E;w ztrH7jJH_{CmB!~yxWwEc#3)rGah4&*urA5@ZM2XKVZ4no@kNyG+xU6K21lIu%V{++ zCelPGAFZuM5n-%aOJh1lJIiaxv&PmX!Fz&AsT@?HmLwjnFmM&$A9ZeOxbkUst&~zRhtyuZVy8JibnI;YDQ6-^R7@taJW4Y>w9{ z{8xTLy0a>hXH9~4b=x6b65X{F@rZOQO;drf#6rw^C(}_conu)Tnu17?CMHtoJeIxr|zNW=-QGbFMAkeUy%eph#l3K7@b^w(Tl61m{XAk&MS^ z9xc?fRz}^Z4;o3m(pqH9aVgTqkR@t4ZH`@j)tp16;`CNl8lQxgM(i;Hl$6nUf?$$RrVO^ATSW>Xs>dPx#xezcp_CQDs; zY2cXn`OD=Xg?a4Jqg2Ai#x*|u^!t4D$@frNv;X9fv$Io1=R?lVPZ^HRn9V0FW-}Ix zvTbHqXIXMvR_@<;epe%gTDHr|-^cyNC8btFhIVd6$>n{_G+)N{U4CZ7xuFVev|wY0 zDDp1dZdX(!!JhTXrNUgxCqZgNYqMUjHgp{=yVIoi!T>ACy5L$ z=9PIgRVAqwO3UY)qyqU9UO`kfC?7Yft8q;7->Rx)`W1Am@X*>5yhUq)MS16 z;M(RUw{G0TThHVD17`DC>@6vBlgs<{HK}&2C6;&AbAI>6fX(Xz?w1K~{P2C=ymjz)5fACPG-!5?N+AeRt zeUICB-k|6YI6gVy`1ly-9Q}TuP}Nv#DXWS!%h}%9Wi}h5mB%{Iye!FbQ9wxo#ss5t zeDL%-9d>VA=ia;Tu)e<5W_>r1u@LXcEX&B!G&TU6nAXN891HoTsd`BYPP-0@)kdCo zP2x=mzAYrYjrSf}?lB+mL1C1M*Uc3FZ>;O-UxU!&r-51msAsz;#>_X;e0sd=fC(B+uLWq#3spP$CbEBmMp-5QRlZFz zBHALXTiO+7^P2znPkuqK_kj7lrm8)tOuYA26n8;2pk09&Yv0@hCPJQJ6%Z@uNtzU* zyi(Cdq1shc8ekzd6AV5`gIYcpNknJ{2xu_z{TeOIC4v?}V;npgty|lp^A=@@jc8g$ zM+5$AxKBX=y7}B=W={iacCKw&G(&`j;dIqBve&6$UONTgyM%^4uV{W*2K=iu6ker> zx$1j=l_}`6UiU?ogx@A8?<$?4XBDq6Qf+)!$9C1i_bT>~t4!d(%kz5GYviiO@GRTF z>lFOYYnol9VE?XS0I&LGOhVr2Vv=RC5=_!cy?l&KY8EVc=$lpw-B5mgl$HBfNLyz~ zBSBeu<0?jsxi~qI#y~TnR?WsuUCv}}pgDWx%5VEQ#zL_H2wu7ln+*8|`nOWDHXBhPUDq+X_)~5 z6&FBSSQSBJd?7Y|+N1*|=R+HfP7|*0+~7w)`d!|+_aSxVI66A!^yG;1^J7M%Gp3Uv z;S>`T>%BGZ-hLAo6#EB{nG6r`T8fX#ihO+@Jl8g_p;UqL zsibaDqfOxUojpGM;D_A0aSuhp&0WX)@4d&vhxhrTpZt`vDmgp7;9&m{r8`WgQzqjP z>`$4`=Ojr+T?+-h zQHV6x0YI=08zVfU85kF$-9?)vH5`$ar-?>s&+g6Z{O!NZ!qQE++D$jH{WO6a0oGZ>R&X|{TjL~#@ zT}HzTPLGe6&u0t<>+J5`BEOTdxv@o>W=v;uE`~EevA(&(+J=z-lT@BHolb{Nr$e{X zV?LkZXEU@(SzFs+ZEcap*D+eP z_f^AwX|C`zP07+UO0idb-OxVU+a{^MY)|#RxwhhSf8}}8LgKWRD7mO6Ym#G7Mxb?G ztYs!m=;S%wZW`s$LWaLMzu*^t_UAl$@Q`lNiT4dmr(?=`N|I<2ol+@>PExk7?=sj} z!)UR3`5NZ41tgFbUE#=7R+KSFL75j_g7=i=jH+5-l9WMzlN&d0bML*6xPAL=);2cj ztqoY;Tw`-{jm>Lo^w+xdx;aV(%F=N$9C37XDv1&OHL^4#OB1T9Vt6s){9=R(o{jZ2 z`u#56)nZjKnyqVF+`O^N&6_ub18|g4@7E&ncZ%B99G;9gJRZjLF5DpbES7~^`oigHDntyLa(hma=$R z>cdJ*V)I@V)(H@KzL*R9A_DwW^So4`6V(>O%|6F_-^Q$~*bEh)ylO3VO;flY<}4}@z1+XVd$3{bwClNRKKl?kOk#t<`BvSvvI`b~-%4Yr*^{XiHk+%f zxQ|^z3mcVT^D{0EfZEUe6~C@hpCvDwj$XxEaMeQRDpKheO?Y3|Tl~CY@nwGL=bgk? z@n1jvT30C+U)A&R^f|jqk@vh~x{6QyS)c#&&h2;QS$|#u|8%3`yI@f~>lm(52!C4w z|LZUkp7;N+VzGGL>-M*i9*`FWd0xa#vx*?U5WA?dFsdjwC#dMr7D=3o(z_%{(ArSf zrA*>|gs35taT7`RN(Xe%m*~1pGr(Ef{+_1bOA;;20M}5?6@+D>-pIj>ZWa)hu|pBs z*8usXU|nX&H#@|}^S+FU6WfB1nZFP{^I8BC!@^Xg&7L0^Lr?BTe2p@zO5~ zmk3wYY8jyuguE{c+DgPuY!)<9b!`N=r%j|FM~^=-dQd#jO@~_`eKs!giODcVii$Kz zNs@G#UEe_AqP?QYMprt%kA{vPWRWg9UGChu&8MIIkXyIzQdX9;({oOaPB=L|Vl+Hv zGQFT&OsL8d>l+}VB8a(>##+%v@~FlN;(p^ET3(xGnX=FvW3-Ail7Fe)<$SjhZ%RKE z>!+5f0*ZE1)p#(a*_BFhjW7TdU}Is{Zs>x$)TFSsj+PG{rJnL<=VDVTsx{KIgE1zO z#+}4~CCg1zRSC3C8&TH;CD(hi=~U6b*xX;B+utiw9p7>gLOb1%`KZ0LHR zw9#Z)icU0TSyEODtgFehln*|6pTGD!f0@Oi=BI!B6F&RJ1!L!VFmh-;Bfpq2?8H3FjIcZySkTvn*ya%Eg3oF{Q3bX>zRGuX67+ z4S?8iTzN+L#)lm!mh(%d) z`}S?NceWXgMjRa;&>yU`y?ve2lXLPs#|6V+u*Js49%tthOlkz)=mIBaXLQR2O2OT` zciGt3Buz3#;|oT^k+2hHQ<(P5-c#x-_!c9>2keEszt?Gm{T zb%OO3+9VX+KG(MPD2fi&daBaWuWFQmqMOI(+Xb`PjH1)!+SU#m8yi%M8K)@pbisjE5D=@_FGw{G6z?wfCMZEH*3N0D)Me#WFOL7BKd zEp0Ka;!c?e(Q7y^F|RGCOY3N(0#i}m-Y(7IDVl#Eex6aq5fe$|8Ld_rJIiQ0Z49|F zQLgUWqFcv?vx;l>#^xp;et3_q?RCkg&r%K!jyPDH$6u_MAleuSsI>qiBayiE^fyf@ z=RJ{K7aIo<7dmsC^KHhij~kKCXSSpDuu4-`duieMoZ;xR&lO(18%S zKf;|^TIiZ0dU^j`${!NjQUhv@>#aPeqs`MV*IU{8sTP_XqDs&?Puz}Pvi~)!nOfOD zHTEeVo2l*kKwRG&wM64@WqHi%+YSF;x?fMOT1-E$Abyo1{VENF)k)jSitd*cF3&o? z7x}`k;-SApm4xTMzZWqDURJbS#YXVFhQ_o0|78%v=e?h2$=F{8(|gu=e$o4R);YUs z6XbafgR5TrSGkU^3e;pt}6i@yJP_vW*{gs`5r z6XzmNVt##Ck#{jpIQkftlS_QZmBDeZR7VYO|kz)CMYA#KG(K(m`xW<#&eF3_BlB|;_U2*@${UkoKRJ>_=%bJdTCCsbloFNF&6QSGN38= zpT5^F-@hwxpw)Y!fxMcPsocsv(=-B>pKoYSP4n+2s!LYW9c&Xhu_0p1FwTpA9BPAA2f8W}Lk&j|RanM5hMhPA|^3D7CDnZ`}N zbfcEgS_{;(jR$iQ4XI58ZJM?LvREwm?DNk#I6P!{KIHiL0_P1j7>fRY?x2UaBaDY& zH4C3{P$}jY0i))uUGGsE69?HItz^178P2c^OJ*{33}99Ytn*AJV*-IR&FFNy6nQ~e zddkI|`D{#G&hS>wc`)(WK;)9dqQDp(Wwp)b)Gm1$o~WW&O1K3A8mF-?kR%zlc2s4_ zXgH$VDd_dP?Z$OBnepJO2OJ)ru(x}Qes2vIn<+__Qk4rvlL@wV>}+rI;m4ow>G!|S z{{9mPfwe)Oi?g)lMOeeVW93BVqH}HQ}`ck5*vIIR{VnIXO1$ z?C#Jl`eY{M#?Bsjn&Z6ZVmM*#Vn~0zM?dY5CWbVXV$0c*^OIw~`tnyi`sN#k7Z=pl zVygugXD3)IS>0=W@$jFXp0HR{^m~1_ws-mX(;u+5xd|$;w!T4G*F1dqP^9=p&h1;b z>2|u<+ESJ!-dUWhna-xnrxUE5qqL)2bOj`9F@rZyO__gb=KI>clU`1z8+A#u7B~BmhGVq8K45LVj|!r6TU+aMZEKUm!}D0+ zDoJxtpLAR%effSNr^l9*^K zicr3mdqdkKmbWkaCLJ5tbyc^+k`PJ!vUO=17fainjtmRu!ZJ~(X~gP=IisR2F4`f2 zYKwA7zFDgC2t2pOTUvYMlXfd$lq5;AH^0=N0Bx z1>apoW$?V8y-MN!yyE>Tli^oo8eA1{_A1c7SMmB^#ee_2hRf@M8m|H~yh<$K%Z}qJ zfB&K;$yGpq&wGEbGUuYTRKuzN$atZKw1sj{2y!ZYGeDJ}C ztgWpx9#1(xJ>%^3jKhN`j7H~7r(>#e7Q6LCpkipJ@=XCGjRjeZLz4>}p@{ADdZoE~ zIiER1o&;@EW;OOtq`IuwAi|}ML?cxcsM88eDo!5Imm30gEwcK$s-h(#wAWJO8Ft>U zOhPovNtSrq^E}7enzAYxjmAqgf)~G}){Si-K^sk;OB|wHYjr!xY@@EwEljGBCOa?D zh)p5coD;1ZiDje2Xsj)&wSE|#;9cP0;E;oZ1Dp*wD?q$TYd-({KECwK&d&Mf{zI@1 zv|;WwRqaW1f~^9F!*dpPOp+y_pjucC4jyxHcD{sHAydEEY{tRCA$4ULY!vkR18J0$ z3l{TZ%mVwbvv@CVk!s^15-YhWJ_Fn|oHKYf2lruCx->Q2ZuiG-;BeQ6v#A z<(y|ao=`0oIBV&2I(X+9564_w47t8@o!z}%w9bT7?rm(S33p+-DCx}RT;JZ{2S55D zKmExcF&-7ZQ6)B*N8pOwVIAct-$6Ve6Hutjk9vfoRqJkpta`VPbijGLU)5Ks@ z;NBPu*1GI$-(YQRll9FlcD6Q{%x08}8IQhs$YL>NcXx~HyIZVptO17kyri~{ z!C;L$Z`|e1-8X?io@b=SU~Ns77}hp7Fe-3*dd%Y|hg{#e&b@o@^48mLv3F}vny=on zm@k-2rc5RirbmZNMq{?OPssB;LNqI8lL_PD1*6fB+3W(N1N~l)BA0A>trcbIn9WMI z;zYaC>q=~wmMJd{jXV|-s!dAOl9UkBQQWHfqqR>hw-EJns^e zqpT}VPEUCJE!*3h(Y}#kk_?^JRAt3@Iu$Rr)}%$w zwe2m8w(RW)w;KQ9a?pRk{G5q3}`Gf z^541=+XzIvLbHBFcy80oSsjW=r0a4I7oy#u{ds6p1GEzOr_quK(bylBLyxP00Iyne ztp0oQs@;X}TJn39g7{el)9Vzs-__S|!}tDej`L*}f>)Jlzpmf?yLxX|@%3LtS@A0G z>)Tu--v-k0Z4(Gy^}N04cYd1&*>`$>wU1OT6<3lK?r^b?Y9KE-FU0>98J;l)8)0%v zH8OT0i9Cz`uegXSX(+7bFl(g$OKpx<=6=i;FXHNoaF{nxh7BEqLikt zT|2G!jdyTm($@fdT3>L?YIiHeZM*68LZD95G;Ts;{8>~=EPZZP92n@y)& zoSieD&*Tbdim6yMiLy0`i*8I1FbV6MTYU8Kr+oC$Cun6jI~_6{U2t}K%*oLK7Z<0@ zW)rHqiWFeqHWz$o{DMnqo{IoSmBc1P^mR7Ofz@!z^;is@XRn^ph|MF zN;FlbRiY#&otezOiRQ&?Z+}m-I}g^{`;_uSL$z1FwB1}&hF zib9o|VY&}BH^4}GhZZzw^?;NGETAM(?r}5-BGboqdK-1z-plm=ahOYK4Iy1`ol%m& z?c3yrzFx1fTrM%2&r$|6oP#wHpmMD&0({=!;amf$ayUmIQ#8VqikUKSP!MpOh#@<= zNj_`*h)LGC%VZV^DWJ4Yj1(Te(fPLyLIDr%Kg8_h7v@I0{<~iw%L07|?bCCyT+DECe2S*=81_e)jQ6NnS}jp-R;cSW z>Uxu=Q{ItZfe?agD4Iv~lrPBo78_($qCjH)g zK7+Lew{PFV!QLJqGHj|En{orN4@h3*@Xn!bYDg*Y`q#gPS6_b>Z@={xOQOV<$*1?6 zfgLBAAUbcnS6hZa=-jttIaU;X+`0V%3Y`(q7AS7;;`|u*KYbs;H5iU3nCu_o*6ll( z>|KM(DALc=8q3)f#}6Lh<}Cs=iv9qLbp>7Y@xrUGLo0=TzYiBYOjE;KgUxD*)pCjD za*6YcDHe+*HkH9*sZo|I+`fGSFYdpHAc3kXVU2|`7R$vNpMU-tHk%E~YJ=bm$;iA# zQ*Tg}ODtz+I6FJWdNn7XfWZKDU88Dh6!`#$hj%d^kD-)?buNK~YzGGcZkj^0Y!Hcx zt)zqrc6-Xl=6J*+afxBj_3wxbpy+$j14-oROp;b@HhaDZ~XLf$X1zrT;0w{8QFn9ruXep+N&VsCGZ!FY_a zDp6GxOx0kyT4Of7z|n(yn4X;=IETH-2)#UqaUM!hRODbdf=2@ZU^ctJXP{5y#ca}qyW{%V!d2py<9R-l4G-`#<4LLDpNQ-7~%G<0}KZRB#8MV zVyqq7CJ_RVnj#sMUQ9P)mi~I%HOtML+de5!Xx91 z*9j#h{8NUmQnZu!$Y@G(ggE_YQ1roqR-3q=mgNOItY7s)RGndktkTrVLYNRG*6S)9%k`&l5RCb0=W)fB-) zCXRmaTSBZUF02C`Toy)KYZEu z|0;fVy(gdk`&591Ajt7OqSO4IL=(2jDH$9Q7pb~J3JT3eSEJo-M9BnA`X|U10D$6R zq!h?>4j%-pp-kMUnM>!K+uD@x8$T1RCc2G%qhg*4hZfZpQlx$UwC z(q_gWK!i;KCmY166F_d^5kPUy!h6g9Gy!#8wG)L{h;oFWi@Pb)(P9ci2m-!yy}Ra! zf;Hx`;g29kR})D^DP_7l>tF;qZ%@xJaDIM{)pALuiqSL)R0t5rLTnA^0;I}t`_^6j z{y+Ewy!y&(@E$muony6FVmiCP`Pn0s>m}-H1JhKzG5a)mkMT!D>D8U-wI*tJ0ECjP z$&JOD-;VObwn1VvE$ljScL9Sqb%>Llc%1<-aO64WvYpfiZYJry+V_n93q+%&Y~&aZ zMTM((vYy?Yn)#T=Q|Xc~j{asjO}cu!MtV;Wdr zGRr~IgxLvXoVekYPhJxdsEI~_d7g1GX4#V?K5HuZC6F9|3M(ZAN5)a&K#_6khxe4# z4GSf6cpFf83Fj;zB^vJ_JehvxO2T@HPzU_x*B{`ck00RR`X2g&0;aLJn4RM8-5dC; zU;Yf=``#Sa4(~vT0`I^74j$fn0PjF~;Xty)kgN3y~rt?Jo zj?*2IlF;*Kor6GNh7sp!gFq+pEU~;U(DNAG|7DEPKxC{qn&ve%f^#r+4Xrgfwr4q{ z4A_(#^alkbda%ZD>V(I^{ytuQ`DJ|g-h0T43|XGhd5^4}&@u7ido-ASGbxicA2lL0vAfT3q1l6A|s5}8!*G9ZAv8juSkAfTz{kd%Q0B#y~Ad`#BxdJ<>Gt~i}{=x48(HT ztT&j?W*7{HxO3+PY}PAexx(ESU%;(9FOVbt{m*cE{0Jw<4>6vMG1?pB7Ed@coxusq z`?G^guW*-E0zPHY?R|v(uMhTw?FO{I2hxX8|2w_5HIeSoFM%kpDlM`mgdie%6m^8ko9G9q{Wr_+}N$%C&Tb{^!SWCceisEzBC`GEe)&kB27-QM+il@5}5R#Y3G@$W` z-ex>ERC3#Zj~s2OSZ)owJnOSPg0L+B5b5>eaVOnaNVL~pDWYHp-j&H`hc|yko4K<# z(RgX2)Nt@@!iFuKp%CP^5ZIIlZ15u_(fLK1ez%c?bS#u9j4$|pkUO+<4$e599FUhm zYmmqBIy}V)E}#hw=JN&a-Mfdg(^HtHff5p401mAoB5MKQJsAhS_Uh~S(I5Q;hu5xC zF*uuHIy=XFHpOB_kyBN2m+$)BfuC34~k(FAt1{#ZjPHT zNX%O5XGqSzU0rCRATsULyO506C^@3l?K;=WCQ_JDVp@0@)38xrj9qf+{K}32S@#%P zsSMr6bBE2h~a2}$z+1fdJW5FfQ_k8H`H)iTOoiPue~M7L!Jj@ znWpJUeZKyVPk zbA)7o$TW-(u!<5wGOc+Xv6KP5^03VY^YbOFw?s$HfW^fEr$_%iZrr+sYu9fJ3D_p*2%y*w`A?W{Glfj@j7=D(|D{jW8Y`VzRl8rmivC z+rwZqLXj7+)?v2Zpl)hd_Pl7y4Q8`5T%4R@y;>nJdKiuRINTq@+JH|#{tzF0@IG$c zegU^{-^F+|f-Z9OiXNOXSS}WD*1&LMJe{6lvzlYIoZDkb4~FF89w2y4A^C`s62k#ShYp4#@?i1AFj!14uv*Ni!C^C00;Mwu5U6zh z<~6+X%4@iJ>kjI=hOIYPFQ#~SbcXlddlzNh;H6ilI5@nHJkQZo1{de&I6FJS^!y0t zCl63o8&uUAwQDfi+sA6PhI1CZUQP^?EJvRA5jkFAk>v{455^b|3t~>eCq2CgGA)m-@|`3(I@2wH!VPJZQPCqF z5+g4J&vCUOnK-s}d#l}dzH1V^?WNImyN{;0Sxmv{3?UyMRzP%OU%9btWjXu@fEE&G z=L?*k&1fBSfRGwKNS-W{q%z4)M8~|2o7D(-OBs_(Sk~eLgbq+p@WQuJ%MJ~mz8edn z0@>}dp&qZ={n9i zdfr4EBT4V0zI1Q=th!w9nrYuHL@%3o?%J?Cjn02rV|kV1*ku~~`0?&yUbd^R!LE(l zRh#ZzuiLIhb(b0VU3SiP`EFNjIG-mCVHZ=o%dYoj2?U zYbwDm_xkf({)7>II?UG>PpP7IEZM+5opA1tVo&wrGB6vyKD*zEm2<7@VJ;;po9bOs5wJf%Luc z+9DXLryNZt^E}5J-*^*0`N<#S;M#SZU(7I@&vAZ!hO@JWm`~4Gt6ie08=}{_c+DkG z#~p-3ihZ<}{T0wU_@`pVxB7l-4IMXA@FTS|B<*1PUAt7m$l{=hZYK_rlepeH#Lb zqJWhB1UwkyV6EX}B&s(A(lja#s|84l9$5!14OS9Bz!8@5e82~g6JMZAX-LkR&+zig zFXNB?=tl_NaP;{CUc3t*3`EcnK7;o;a@~Vc8OpN4X0t|9R}8*bco%p&tCA@jK+__k zl!6m10<=(&T5zKu>Ddkt9@diMzZ3$B!%ea*gEkIQ0(qfv?b;#wUdb>o001BWNklI%!{9E~C1GS7*zv$6(7kwa?7}hjcua~&@`Ddsa zk2`m2jK_Oeua@}qllSrYCm-PK5D3MbNjdO4aB!lAH*c-!Be!+4^(*4Vzn8``z&MLUXb`UZ^X#53qf`p2+pPN-drJVg7Xez4ze)fxl>`KgwX_d44ZzGlD5_^X9DJa6W#JiEAxUzS+#G+^V)9_v*j@Sb$6S81j%OE7p=1G~$0dzLf( zWliB_Y=g_r^{!3%(@gLl|My)Q_a`MR?0T$MVW(ULG<(*4xl0 zy8s`W9b>IA5W+($4ezNCNYfBD9#b9aa6o|44n;1J6&W_JBsPHejC6D4oK_G*r#Kra zB$?w$n#zRe^2?5`DGDY~W1VLig3<^+BHNB5%vAic$-pee#>LF+sK@M@_9;iELP|;m zr2tF1bn5d%0xpE0q8{8x#iBiV0We)&La?NaU8vzfY;vNM(?pW5M-Yitue4%Ln&k#m z!dfcuId2bAiPZS}Uc9@-<^Day@?CggR^ z(g6?82@t6;W2#-eCT-p?n-qme#S4%;y@hO}?5KHi2`q`)|5!9pW7anAaT+27wp@!N z8zAcPl_VN$)c;3XVO#q|AficH)}V-{=)Kr-|Cf+aUQf|_oF^TDh%CzhaDgHPge57) zV!6Qd;v9LFqsVg%heHeo19Fs}j8K*p>bk*VF-KiD2m+|;8jT@iNu}ssDT*AT32YWf zlW}W3Pm>sga*mzynOeyW54?xW$it&w^lozizJ?$C@DET` zCEkAPH@J820Yq>R5U4jBYGzeHa1=MC6g6aII;HtJldwKOvko>OLkJ$$G|*WAo#mjK z(V(g-tk-L1fRLm{gn**RXgyJp;%T9EmWoKBB?2U@w`i<`R2dbVF0zOO#Y$O6tN`f% z7z9}C?~h^J0F%i8EWRa||1877!2u3N7bsUN%(EGSP>?zUfRltWYi-jCI(QYgC&hMS(h+ z5H6MrJb3Uq?%n$oRk@^y*Qo24Ky3{b^g$s63GW1i7cA~~&>7wLf@#Zf?Fb?~_ACeF zd4@d8X}=4U$^xMx@s~UmLMO@mGNgfUW2T)D60}KIP}*8_#jX> z7K_CO^Vu9OSnMAhV!U^N{ewd&sWF>QF*=w)D}}wieKb{rPfp&)Z{Ph5e)H>JVYZm! z+Kn5yes~u*Z@q+@cV5Q+-XWw=m`=~}@Zmk&zyCRcHOPx0`okWwUV%K5=w$*T%dn_{ zhBDIN>k5@4c0&L;`e%88(RhM`!)w^vKfquxMqg`$dX0{xVN#GLWI`5R0OCj13(f$&&^n-G?b?4ws$^h#HEmlEznKI zi4=OxY?^5Br=)8Ad>k`Fct0|xNqdA+F{Y3A@X$sA=S2=DEl1=TWI~V$aUcMcuwThq zefAP^Bwq;(`1#-?S0R}#gPBVLt?!ZRf)UY^M=A)J!Lfm8GCd5PbRNNyB5xDW5SEOHudxM)z@y5|R$7LXY$C3X;VlGZayIArD)$0GX> z08jOk<)juR6$2BlV?s;-i4Sp4^K2O0u7?P!;|0Psp%j3U5bWDvyiNCD2##4CWYFvx za3X&v$v#E9^@Y3iwcR>hKdrfZ+Alt-33yr_{gaxEr{%0asp))LLwQ+4@ntF2SB-^x zR^zqHv0Vi~*ya0O)d~MH@L*REWLJ-fr%jo6X?Cxosec|>z%KX3lU{q3YyYIzUUpwR z36R+3cXzoSR{;wy^TqhGz8SP=Q-Nu$MXn^WOmpV7A+2fDKL($4b3!PNO;U_lQzO#Y zX3PCG{?~hsxQo#=!cIqTGoVR?wh=QjCNe9x#%wjkh zRFVq>&aNj@HwAAkT!^3tyZke-kRlQVY3a14$rm`cT0*jRoC>JADsg&BndE2Z$0(~c zHL~np>^v0$TIG;RV=_L#8{hage)PkiAOwjA4<2DQo8e-5j_LFai^UYilrVKedg@@{ zgQ0V(NpJ3hMDRQjPg;Di&Q^4$E=*Shw#*!T5U{p}F_tIztxI#7WP{_~_&RUL1_}U< zBhuJ>(sy!;Wdx2qn=YwVdnqL}7bVV_jy}|PCLjrANRoy`6_wz|Ng(H`j@B6lgFb>M zhDTl3VT3d`k^_2mWfocQPBPp5cr|30j(k?9QIdh_e}{_lMkpWpi& zAARrveS`~e-q1CWz_8!PH{bXghJyj7^C{+wIm)u6D4G9Fv^li{&E^36G2ynq5GL!@ty|ECb<}D;Sj+PR` zK@U>r7>tIA5*qzKy$A9v$HCqKZd|{C>2!|uat4SD!^uA2$u-_ON{G+`81{M)0a(oz z`0SHUAeF?y{sB&okHPgXe46;vJw$4XZu}R4RFOGD@mR#_(TZHOZE)xh3Jk6tLJr3W zase&-&?<+8g0W3fH%T`2l#ZHSz@w=vc(;VvEK#qgI97^)7@4Q_-7+oSIY5dmfw8F9 zSg&Vj8UyPC@~nr!a0KBREaztskSOblCUqd=#j0*l*EN>wB`z+`vDqwPnu_V#)Eq?* z1Su6f6og=NFK6Lw0|*bLdBPj0!IE1tE?QG!os;J|o28Q3W@AG#x8(6_(wm142ndb} zgd~5Rc^3cEntnoU^szu606k)wW%-}kMQD4ui&LuUcqQQ zMqL~927Qe8CK&by&{E;}_!xitH~$yj`|Yo>T29d$4$v=pxOMXmUVHrw+`9V`hQkro z>lIGU9zsfmo44-ZaQ}cn(qMpKS$5_jB}uK|fwFASG!-?YN}^ZvasBWbCj0vs@9$$g z8Y9aKIOlPGafGu6pW)&0LmZzT!@7Xsa1VpgA%h1Uj#Pr1IN2{Y7!*p9E3nx z@+{MUAkfFhx;EbLf&Y&81VAR2{OFsZxW0(ZsFD)i0oFF$AhHY*?2?bIo;qpOyQ}~J z=~_nM-#G_sEXmUZn+SSC059+D&J&nOeliYP0ZuvusR($Lnui-cc_T#Kz3?2t%G7@6 z+h}141+Xcf4W8HW_`T^l@xehtq`fan2%{VT!FB3kk=6p|985#&q}FubdM7&a4VwN7 zA2?bOaMnTd8YG10@6U`4N9hGrrU+V>r6A&j5R`Vr4{dNHXVQ}C{n3{|(i#ttbW6w< zD2=Q?l73ONajYR!j6C)}r8yz^mOUvH4Y{O9!-M3d0H2Z!l#B}<8p9Kh9 z)->!wC*CD)?5lDozwCrODc}5QpvA6DxlFL3TMk4Vq&?Y29GLNH4b>IaV zX?jcXIC?wsg*TiwzrCI48yhEdBALRGo>+D$+uV!^Kn9tjUz8NEJjGX<3bt;ZZ}6;h zXO97q;`9J-X@e5n+z2TlByBv&Jywb>&3udva?Z7z#Mb@58-ySYn>QYrCQY2<$UEAz z_AUD};<5T2c+B_Zf!I;Ih18y#mY9jA*1haJjY=Wb29L2EtoJcG~@#yb8xhxK}c z+3W(-i*uZxo#N#56m@OjJ?s0koEr`YsWdX3p3Cenvo>M=T|IHN^aN@7>lh0%41VB+~mJ6)sX}W{-f2DZ&022F7UQ znZ|H9#AGr7ghx}=Sk4zP#-!uhY&Iy%l4-K-In47MLQ7&?uq?qemYn1T-ERc$wX%f} z84`$5g+zsn^irX~CWl1Xym$W|PEL+tYy)RVRv^8=M<0EJey@*{(-S;8IYwhlXMZOD zjegO`cfbAnc;%Is;GDj3HfZ zf4#(FF;6-7-pANNdY0;@fnhLcQ?k zNOs}5$q(Ephcun{q=A>Mk)3?39*y^IG^Ulj4@Ce#DV6pT@9A~hULs*@Kcq-vpUjIB ztv>h!tT+Z#Y_P1&k4Cx@n&T2Z$In_`MN<_LAO>+`8aI2`aJ#AE`5x?N&|gaW3$U^chRix zatu#u)}PiaT}G9^YEycZ^Kcah_+7Q)&+2<{7E>9rGTgXv39)sQrX`$4P+bJd+_!^&+J^qTRG9P;sA{ z(a<)}?KJ1H`$iz?b+@ib%CuFS9}RB66!-5UP4Oict5S(%B$Z66*r_;C2t(AW5sI!= z1}&)AMsUe&Dpob|{KYsOV;sBQOBidhTCZ?^evXF^KF6a+M<~mRQGW{?o#h?JFhO82 z9OA_nUcq<1^*!9aeTSO=lM|eto?yLN;o{;9o6Q1MwWh3jZ`m~+sep?zk#7872m-2G zKr^dk+qu83^rB}$fKT@w73Up*$G1jCUGOG?L(~MfatOM&TKcYY9>MrjU`0?WP7A${ z4ZG>M9s7>?;5MKTxH%JG!>0gfogs^jha+i(_YOrd!gxHw!NCEFUIEL-TdUP7J-eID zrgi^!#1>FeVY6AYAAp9|q4gyYfD(!f3ONa*jk-cA_#oo>m92J_uUDq&?~F06S49Z$ z#G1tWAAEp&_wS>sD^yj@&rJ&k3J5f{!8>oii$_O~uz#?J@nnn_@4kqaUU&%*0d>=$ zX&TgZh576PpMLT&?mzex(py|RJjCJQ0XP3OjHyvpC7Py&VFzuYWHP9vZcxH`2hSQ$ zW7#ENDwac#d7*P;2q%R=o)stxD$tDujHPE#Ma{1a5MEMq?6~n10a>nacx?|V1Byby zc>$gEAOuj?7Wptoe>lW=IKpT&!o|fD|MuVh4bIQcf#5k3&va5^9D zRPH1jZ#g#4BlAONX_7{a9*>?YV5~vYG(Z59B##B}9h#=(Jwl;IYq)AG>D*mhHv$l3 zn-L$`DS;=zD$x5`(-6HnI=07(KQ$2{VM8Hw_jo{Q#Xctl(8VSxN`bnskI#d1j?GEq zS{oA8I8Ke@^&?hV)c-h0_NLfumRPSAuuYA<$pMrqs2MRemh&mjPfuX1L06=v3deGf>o;y-FdSjME^%^vjH)syiUQ?kjk+vxcz6wWUwjeQuU*G# zF~`~285+w?u%z#i6+Ji=Fe-W&_6E3i?GQzgW4T;lxt!tj>=BmB1s3x;mdgd^^Ep<_ z1?sYb$|**0G#uh!{{Z`Y`^fSEG1P?QxZJi`?pptMs+g^HzuVZkXqp?T>E5S?PcTU1 zqPsl86Nf=kNk~Vmq-Y8kYlH~&#C@Ypc)?cWa9n?5BPbXcCZZa%1_jgY<2?qF6i5IE zlRjR1Rgdkhl8-wGmNpMUgh#3qXs_Wh0eUe`wkOWVFVsgD>u%hFo6KfwX zdzj4-BMyNspf7@8W+Rwl8T|oB+89}%iRqJke%k$A2#S2}dUL35^sSH`vtO6aPc&KV zMhkaAz~}AFp7o=5(W&oJ;6G2S+v5++^TzA#Izj%bUG<;mcb*3^ zpB;asl<4>SxOwwt$^w7Zy?0eG<#`q-s<$NTuzBj84CTlW2tjT&#IfOsi|La*Eh5c3 zYPBVs()ftXvKwst{HU!LTNF;(z++=a8&P0dDDm+HPi~{hS4-_x08l8noUZ9 zz>eV5z$l)wvnJPvR6L8o)5JK%X45#ORbn1H&V7&5Nzd^?f+zox)fcaA;3knG!5o#P z9PcG#vEm%0qJoAU!@wC}X`>(^Lpdt9QOFk^<}Wx-Qw0 z4Z7eR9M^~4Ny~OXlt=}lXIVf5Whh74v-YnojAE41-8J zJfY9B482|td7fi99K%`*W10lq#Pui3GKx}k{CsK3Iv4Qd=aG{vXT9E_VU4SlkwWVU zD2TE0@f^iCBu;LSQb4QLT+1V%YHE~qMG;xnv1CFevq>R<&3cXZ-hUUpqKBeaU@+)m zI2xkg?_+Oog28Zz$=(<@Z(PUin>P@=!^!CpOapxXd*8=*zw>Q;@Zo(lO^K@7ps7pt zf^ZO8@mPq?S8XhUCN>Yn>X8G55DHQIpp=3Xf|(-@O6M5#2Iv<9tkni}Y4Oh6??6ak z?_iAKc#NXRQ51b>L7CY~OUO(j%N3LwKx=`?cmOGLAP6+Z!q@<*HH6a8Do0hW@r(cS z=lI)S{Vj}Xkn0S+qQ{aF+e&!2P=<_5E1AI8=wc4h@upzKOp*8T%4>IVD+Jtq<#h~; z0Yu~A))jo!P^4fI834{2SWj1yV(qxx7p#EgM%K6h;R7Ta<;lb*ivB1(xf7st2L_*X zitY4dE|#7r$x}$58U`6Ceo`n!26g<5#pgDHpa>Q^(<$z(X=+q;O^FiBpn77PDX?YC zsgy#mSMX%irgf_e7RG0UXx-hUk#{9gVLCm-Cm(-^ z`D}*ea*nDbfY-Bk4r$+L?Ve2bFd9#wl;-=BXw%W47Om8u)=30B9t0SJ;nKb=kN_en zWs>-LW_h&cjLf7H+fl&VO`G6GS8jnj-Rl>RqFW1g>n@_s+pYH$LZndQ;A7(}6PwL@ z3#|hV_s1CZbA-(b!_fq{uI=OD@flq3uu{KFdp1YClDh&6O!vQ2k#?Lz$~QTkvLGD8k^E++UrBCo{&Dz`&j3+tWMJO2Obbm ztwlAYPcg2>Ssq>_LVntxgJ@Gx$ZH9mI&S;EqGRdy1|j`@Ti3UsKm0lf7zcWHQ>)`xObsKKdtF}-p2V!$ND6b zyXX12tSP;0vi(&yj=N0ycQLVh(z(2h(Qs9NhNnGmyGUT3^xjof;pad9Io^8ft!DxN zPkaBtV1Qe?-ql((!*84}id0W~~*J)G)R}uogw0KenMFWpH=h zkGr4Ooy5oYHjYg0iXvzI9Ma?)9rHReGZUQi+BLRoqswT5$MG{RY7Uvwi8lKcg3#&c zSCCw5x9+Wwn)!sH%XXvmoJow-l*^V4%I#2my>s9O&r{qQ>%HSKgAJx)gBcsz*yP9f zAHgPqLbR^d&N!&RaYiaSxhjiU$uK;Nimun9t`__&U$D zV3B|Xt#XXUW4!szZ{yqF{w{jO0MqFV7Z+zZIemn)(_?Jbb1Gz;iYW0Rz{br}ie#)8 z8+Xw$Xo`}CsJ9lKc)?_}#YSG-X@+8*gIRAD}ANSgmK+Y!+xtg~;oU+V~)V;9A2=x=b|nlF3|4 zBuc0d0(qv{XiISM=b>bVx@z#R{*RyGZ~x}6G1?zsJQ-p#o?vh90E6BL!@&rH(GdL+ z0U6`L5E6oDOvzFWZG9X4elR3#NYkxukrJr{T!#qXT<)Ho@7iC5W#aJ-^N+S zH8$R#>AFaENM|{e0FdPc-u(9O;fH_vXKW#3se;WclxcL&3(GXhcn5LeXE0G?b zXz~&4ga8~B*__S6Mt=s#lm`pI<+s9<@ z0OQF%hNCgEVt_k$ZzIqK1viLzcM+VL6IQF@huqAhv0sM3-*k9$5o%VxNFQzqQYInE`Rl z=+^RNO04+%cbyLJ+RQ%dJ+5lfch&cQT0?u)Chl2N z;>!%*o(8P!@?Ecb4z8lLzv|8Qw1#`vV8v-g8~4;Q5JC_TA;3q+uXr9ilU^AT=D>^tOAVEbF7qLobqNGE zGbD;V0T-<^GD3_`L`oNECxVn&FWEtvD99njgt_2}3M{(XMa6nsht+D0)6-KNJ$i`a z<40Jn*09DCxRQi*bj*34<6!>)U;p|y@y0j4g*@x0$f@b{92e6wEEiMMHN|H+XW*?* zg#@@ciN#nf8j?RloR}r2bFtMdQ!LNp_boYlcL4y;#&J>h5%2dWJrnWok`KUEA+tT5 z*p?4SrY^R+)9yK@=GmvT3UGl&I!KPE(;7wIN0t?=OZR;L2IPVb*kmh3vDQKeiGHsS zfTA_)x=zO*pDRjopmc*2J>@;LRLF~7YCZ_W&~5X=phoZ_=^u^ZX?h1xj`wYJigrA0 z@j*bb$rG7-(PT&niA-ln&)ZH)16u0_0*QR%;Iu>2H0g8WGnMBBybEY*gUNV;@o0={ zQ)0DPU^YF+X1#=Wrkw!S7D^a0GmFnFf4-KIQ#4}imgmAUYRa=MEwJ-6^$y=nF1i-8^gl#~(m6^#7sNh=(68n|}1Sp~4j3N01Gu12~zw;iAu_((Gs%nkZdXC|6 zgkHaoV$jEMvWHh+`xiz_L?1$+ZAD zN}+MqVzXIcwOpX@0#sg*FOLx9*6zV9qtHgEc6fc==PxibBTj~ac9I;KhQWK*ia%Bd zL8iD~t+HeU__&m#TQhF=NbQt7@D$(rRyGCa*fpNzH$J9zFmNDRAc71%3D6HgV!0|& z)ehtS7|Yt>;pqh`<6r{=4a_nTilmnm8{FQy1ff;}N{|>%)ckjuc>l_}u z_c1=vH}NNL?4^zH(R&YZj2y4OdWdnME{&$!~7TRS~O2v&SwzN}SKp^TOm5fsw#V)JVEIM}Lj_&#G!u?pZ4Qs`SamJ3=s%_|q zmaSS=L2!f;dulv%%+dv+&2dT*H$=(JQedq*;wI@y&!?1z54JOTijz1A$AzhQEQ%;@ zC|!4YqLj%rb(2CRT4UVQXrqi8azPVgL0UT@16&|VHUv4~#zH&zc4BC~!)m$2qvK;7 z9X-U!$uX8oa-k+i2HEQDML@6D!{Na-yz$1j@Wwa3gWv^@k4|uW`~c?{$5>UE7}_SEz@~P(yuHrJ?c)1!4QN+0%C7ib ztz)VmIFib<2ZPQvvvEYCA`_#5^`hV`X{jh0iRB>#hS6IWMUFhrDfeDTYIFh>OG+x_ zSx%;1O^u)csmKMp*Xuzln$VH1U!d3PLFf#{<-ToAB= z;v;F2$I+9V2_AfBqRWNfXf%Rz9!*sds{{(c1vHI;*;tg=U@7Ocrf_~WAfO;n89T5xh#~W1e-#bV)L$ zuzzrfy~ArzSq{zmdM$`$l<9yh=ZHL^Af-GZF zcH_pWX-F%t6+b^dw4Nv&Ln?yg`Uup!KeGX5R(|^Sr=tI6~el5IkkX z2c8T3lenpg2#`B5Nx&^%_~8Bg=D))^psrwuf9T zSrbsy)HUD(GAU746{@m?VFuXQ*(pv>kI^(Gf_DVMK%%N@)YS$Trw>urH5RKC%5no| z9Y>)BN{A3(?-|;sl^{9NY&wM$8hiWKFy1>rUSyO+VjMHfI;RFtugwJSk6NjuA#cGL zBp(6MsWl?wOtINtXr13W`$Tk{k6QT%SOtLT>Qa$Ek8`A(Pr!5BPb95r?T{cO9}sFx z8RUUXfE~rvDV$v_A;k$Mqao&tB_5s6VLUMaV$J0}#{mWg4kYiT-b2N7qG%q=dr?<1 zx}}3>pdiTsIv{*v8%o)k_+!g^Bu>*siem26zRXApHYBf~pk!i_wSf8;W4aUc&-Y%C zT_Cf4zN7r33)V+=sMd-TpjzgFmO4otvMft`eAmn~`5A<+EHw^gT7a>AJ)aYJD0w*m z@U&svvm(cVjs)OIO~~`O@?Z5mb~W4k;_CyJN9Xuo|HV6a%WHgZPvK|3`V?=^1OBt0 zUc(1}@&DkzeW%2K@ZB-~`sW|v-3yEV;@^J>a=pMu@7%}#^vg5+=|A4bOE-ql0(kh= zTllAcIm7qwj3CaA@!$Pxga72uzJ?#&8Ek!Svzgw?7i};UUJixfvEvewko{y{i`}0i0cfGEcO`dmspIu+O%lY~;-|u4WQGc?)U+MR@Ue~>5(c$~c_+;#Qy`BXE z2p;&*;M4O&lBk>3af84*QkF(i!)h%YH@n@~HAy*0MD^xoDjGCXgJFrDobF@C%}mzO zX9;Xa^GI$Qc#0<^;F}cH7po1=4I<@CQ}(M;gd!U&F_8T&dbnU`a~mhpWL!YnekGul zLfw!CQg|RJpUio{AV@rB1VCv`#kQkDDi$M=CdVZPqy%bqRwwf$>MtB0H*Lbya7NP` z!7VoR0>oI5T!>q1IV--#@$oV4-@k{`(=)7A3!>~h&(TVXortMudEw5>c=OF~;pLZK zgL46=r>8hQKEv7B5oYrJTZq84WVDfyMEfTfV7?k@+7!Q6EGVqC@WGNa zg_|SvsP$QGf!rJ0wF~&RTW)J zo#pV(p{^=Ukx=Z!?h>V0YfS)6Q+HAe0^h@`jZ0)DMwB4Xq${MxCxR_xHYXT_lH1Zd zM1Kcr3L0n9xs{v^&3Ot?UPCFtMuGrB3&4TfXzy)@B|^=eZ5$pQ9bvJYqp2%6XL#M9 z&m<;7 zX;6tF59_G0v<7IJny2ax)>&RJCC3zcKq%y@U~@u;VSj+@*AH-fJb-5K2f-1OC~9lj zR8dMr&m5zM>~#nw1%|^R4zFFq-oZX6rcnE#VR^U+XG$e%72-3m9F~fx?-LZX5 z02!}Sf^_0U&878@F&v`(rhIglCU zu8&ELfNn|zC+dLn&wXf{VIfmyc^t5kA4LOeDh2`-Oufd@=Y8D2xer$_VST`SzQSU@ z!t7#(`D~6&Rg%%2)~y^O2*?0b)f!c`hPTAPsHzgyQ9_FlA*GSjWrIz*LS2`rss<+M z{9Ec?3)%{Hn5XsFTZ7Gd!D|CuqrAw`)D7y&plK|;&p4AFDWg6*`#(m|*m8K6GH@!9 zPiq;O3yahs>P)j&5lgrP-BWS-k5q5xJSG1`V_!iJkzjBj2$Bt@^p@n5(P>cGuoXch zLprIz(mu!af?&W?!5RaPfOTbY@8JnGr#_%;EYbgCO+y`Tdv5q#$*7Izzwb8m-Matr zKk+_~Q%kL6^@kJ(3TW8R}yR8^uiqqwo%pK;% zyD;>h^!LxlE!eRkcpeJy(;CVzHkbwvrWg3sjqvaNyWhZ1Zx{Fnzjzz}&D)P~bo&DT z^*c-a=l|qS@Z$rAU*CQY|LoW2c;{q{yxJb0B~^UF8<(;e}b1r6kXKda>>rF zZlk~3`v`30V&Q{Irefv>&(P5h&O^i%BZ z9b&y&;nDFU93MTz>B$L}t2t5rt%2hS3d#Q6mQyZ8{7|zZ0^p@1w|_3MV{s6vpx&`$ zpaU2IZDw)0F5p;1MN{gvCYu& z>|7iR-7ec87CD+t-Fm$~Gd3a^MOtZZExa{QSqAS3Kp723*c(r<+EiGr*Jv7p&1Qq9 zu90cY@syUI_loJfj+g>Ur-CQSBCL%jOajB<2*wx;hhyyT?W3wn934GEo)wUart_|o z%z!|XeIXTeC(k_6d4aY$2MFvSJu~UP6NTInARnSz6ZaWqLrXeYZu%0$ieA&~R81exgxNo?*w;0H~#X*w;0 z#Odi7ma7$d{T}%Ss95Ss6itpnrZE|5$Y3xY4=@_-LC7AA&(Me-0&+Cgpm7$pX|O3P z)W#-{fu^o0C4rAg1RyUm+`e@SAAR&5v=$hS254#r>o#bt<29{)J`%DhS#J)SKo-3m zH*a017`A>7))`~~Tw~GL2G*6ZuBK!N$6f;=G9oD3+Xvr~W)ZbsKtc+>2iP+u@Vx~g zV412A5Ovgmjuows23{h?QWEP!LrF_ftHLAjvk6|S>0UvS#dt6X-~()MQ0!$9fsqh^ zs&24atg&3I&|Dt_A@8`0cVt8&?k^$jbCLa`w1Nu69?}?PxOv6;T!k{klx_w^5cg=8Fxj z5z7*$q4b2RsX5|OAyXOP0c#q%=H5ao4JBwwN}Bx)nUXLbFvg;(8&pk&$}}|f@0cd| z5TZ23>^e%JkmJaL<#x3Oa)`4SZNq%u@&zanS3;T=fsXoCkCK%7D6gG)v`ZB^cj)?(shyo0@AbG)|13WYMG`j zcn|@?R3|9G2EhKxb@Z+Q)=w}|U-nfacEkDP*4+8$9KmL9E=xd+hpZ@Qkwo5^^z^^tA>a$Pq zU;X{NI2w=ePk#CuzI}JtIr+5Uy!>ZB#Q*Zc8UA15-mJ&6>q-;*_H@p@H-?;;$z+mD z4kD$JD5*+P4c!77u;Ho#8r^U=48u)lT%C9NWW=_|l9>9&JjAb;^LV4QtC3eCW~pevN{E z_WEmW3yZ*eYVNJEWwX!4Y$q2pABvZWMMqDG26PVA7&vR0>P&@8j15ny$&4l@`aY#q z(cKx=<^>;MoS}%KRE@Aw6eBoW+^*^GG8davIBIZ#2y(9{Dl^5CX`72%f72Me_0~Ih z=bg84dOE`wUp&HM-cz9+!IKOwOtk3cfYoA!`E-H9!$UlI`WR22J;iKxiWrG1Dh4;! zSxQ_$K>7V{n+`Rb)zIyxwPoI5-{r%@S+<%Vg^cbtvs`v?n5O`CJwL4do z;1B}GvIU}|6SY_|0F;V>Udd)Q8qUzVIh(axiZv+26pGez=mSvc_6nkzrb!U(3)0Y& z=8$#P30k6cUB)i$d4LVQUgY#5ta*&7&3za%Mz^vE?hOQ;5K_W;cNe$EJIGq0X~%fu_8Vwi zgBQ=9;rQqPr-z5=y9HL=91q^UkMUN6Uk0T_flnIR zd-v|)&YfG>+8V>;295#Rn5KC4>=8cu?C&w3ox&=Go*R9wjHHDk2?K@!8S(%O6nhwG zDybmgr{b({)=OteY$1>gnW*^2RLZR~wy@8u?uVR%r#LV%L^n4fv7^PsCLf-iRYZQ!eNRe1Z%4)>kV}5dq$De;r^!~m_w~A<* z7JVPluX@CksBuq;Kr3xvl?75pmsUuKaJD6|BnjZrBDD@kx+??Nn#4@8j?l%z;T+aozIm1Addf9Tfo}lQ)C%Y zlekuhjpsT2Ue(F7fuT~!S`VDbyHxiW_O%HyAb{lpxk@Z+y`a|) zNDTl7rSu?nw8lV+$If+{{`2~pi+UJ)QDJ^r({uKFu0!v>>hCu_4nSk))?G|?0*?1y z;J^LfKF9y~MUQ{_@BR+P;W3h$;B7}gZxo?_^F#}!abzA*Ud#pvDP#XM;g5fG4=2x$ z@n8HezrkYF;gj8nXU9FzY~e>A-^13(VdON-U`Nnep>Y~kUw!VIQv5GNajrw7KW`Dd zD&2jPdw7{a;-+B2b=Slu*Y+y;z^h!>i~jo}{mmvnb5X;6)n|MStXZ63e{q5rAHRLGxq%0sK zz_|uWkzOr?P#O_u74F}^i+}JBevF3?-@$yggmV_Z{F_e^qJrjz+GujgMb_xL4$I{! zPL8HH*gL|Dm(Ou{xQF>-h8P1i>q?>yshQKpV)y0^y!Y^1_{mRxit%WS&p-P$o;`hz z7cZaT^z;z(*(v6WIb!JfUPo^H2W*Z=Ip0+HYNV{!T!6(TJf>7~h$TfKgit2XLkP+Y zocJX&NYV{xiWdv5oxm!lA7^PgDw{?tLuPdYW3!w{vZ54$5IF~?vTIn|@}wdmq#iLx zWW~t>C0bG@NmQha+7Tw>34vfD|45=%LPd<~m?r~__F=!vAwg3Pi07*naRPMZSmz=;?OZXHKv_`)QI6OMR zv!^dHn|08xLF@xUAIrW_qB{-CHntQO<~oz@pU0feSn9#XI1=}Gm4>~NS0JSlR|?; zdlT#GiDeUkz@A0y!9)@?2BNCVD)9%rr+Q0iWMyc-k|-`5MbtmFVWGP_F`9gkq!UMZZe%a z5AAss`tPgA13RSaP;qQO(8UDpz?%_9f3xD>{zKehF<6B6-eh!spm?dCrh`QB| z8oYOVeBMz(WxzR$fA%Loz<>1pn>haRIp+VvFY(0}FR<4n{O@0SK+W)$3CvrjrZKe(psL-6jaqChU#Zk#bzLel}rBY_d+SdpsBY?(4YsU&hQh@AIycnsA*o zg;)K0)l`jd;@V&IwX-wA`|sTcl*9992beBA>GiD?$wcub?XhIQf()7nLL1T!B}ymrhVN6&QP)=U2G~QX9yfQ#xOsCIeF!)>nj!!VLGr$K znH_*zWTvQEL%Khe$;H=uPX%F8nmpy>dciioUq6_k9mz3>-%xCe}w*su_V1 z$UTsK)%dF#MMNfE5jh3coO`C^IUrJV<*b6y8Ta43hX?oHKu#;{Y>)8%!?&r4I9VZa zq2zmt*jvt*I66MY;lUyH_V#gbaEQ~>V=|a3W`)#b8%=TyV;vqmcpJa>`#;8qAAF1$ zfJa|`j%QDw;pK}Lm`ws?_rE4Ik5s5-&SZtayiD6YSn4Is&7oM`c(XlX^eSerjJXb5X;pvXcpV$sp3l%O*;|JFL9 zs%k~<*P%n`696)a61})m2BUTYW5_(t8OJW>smMZN@?>yn4EqGc;(+csr#=LagM&TX zynPc&Y23JR6HVi=wY?3k73R}fiFcCyay)L~9D!7;6#)agySq3!IbqKZMNxFtVLo5N z+6F)T;qRbr$9VMkE6kS*q~wtSG>wB&8H+`alryY0MHgQ5p{h>k#GH%d1F<+>D>jl8 zYI-S_6Y0y1)`$$W5XD{?HoOi3smeoK0&zjj)4>s9j;u$frqLJ+ZO9}rWDg(_tAf`e z8OVkD`*nuOrqF1~h?LS5h)!=<27n?dKvsw$pzjl`rgQ6kMz0mx-7)UnzJcBC5e`ph zn9dVAwZhiT8yJlzn9n^v|NJYAClhD|Eao#D9UWjcpJBCJV0wInqoYHt`Z@OYpW>IF z{vCrWO_4AtO%1PsCcrI4VlpYql=?{P3e9>yuWODrggOftYYOewY6BR95QyH4QaH1jqsXyhD(^F4mc+z*eQltT zS-Pdm`$uVuC^9dm`jT_FLW~`uqxeUdZ%PBCqZAgPd13A&+k36YK^goM6N=z5xDrwsU*k)e?z;CUJ=J1Me8jv7%Z zsF+}EL`)j0k7p}z7;UK`Lp6r1GP+tn5CA~;#X16cdLLmkfi{xJl2U>X0SSu0Hw>Cy zYQYAbGDpOL8eGTCJ5qvWoqCJ`NF@8P#=$274wYtq7}S&i#fF&@51W{+NAaLlK9Ufr zY0Vjl{UD&}x~9nROs+mBTB#b%$4xyM!4mit&p7dy_`fVrPi9t1JmX?d`;f}KMpS=arw9H)S!K)J6X8K^ZLSPZ4vIbY0o z!9W^N(}(J{Igizu*z3bM2bJsdqqK(6wixme1A=0n6Q3_JZBX}nt;_p7N7R7>6a%Kb z4-Jh72P{HjZhpOCCl7%tN!t_vxU5FMFb43vChiX zdWrx3Uq6R?=RW?kfA}`;ZZ!yf4|ijPn|dGr>!TU|`8yV0?eF6^&fupz%>~VHgIgwJ zKJBsc0js`4Zyavle}JF;!5#c8CO|tv{$HaRx=bo@m0ROQ*KgBneia@2vg6rA>wa0B z;Z=?DMQ;BWHT#>m?O&EQa9-5n@OoZ$yq8`3%NQ2djsLsu`gt9o;4;?2b)WawY5oD= zd!Kw4cW(baLID2aFMf_+{NnG>^<+*Kl3%0i6OE0gnN4GPDowFqG1W{~F@-Tag(d(Y z5JfU;rkqK%3?t-O!H0+tGdU+aY34dKI^ou>9sKC`zK4&${Sg++4nP0-FYv{e&oN(6 zgWt4mLCJH9OsA$@PSD?CfUoP+IHz2w;6fdfNF4chLCA;lg~Zx2tt~>}L;`1_k}A&e zS^>(MqCpokL+xnerU^mhu776TCzuT&@qRIqk(5mGw6Z+iBhLnB8?y|Y_>qo8LJij8PV+x<$-MYJqQ1{Evw7tm5n_Te z^e}2>iPed9ffslU4Ybxc$E!;m{KbDqr2%kL?;$i`K-2ET?-*jHQ4Jzf@0{{LDyRnW zdDY}p@v}CJ-vvyGJT`_vWkrS*<(P#TaMpnDyt+1LO8v-ez9$JD0O%g+TDJ;Apt$&R z3Wef?8KsyJQEFXXFcc-vTVWbd5|9!-eiA8BoqCHgpX`w++WUHUVh9M#5-`dZDUCb> zu{8U_O7m-zf02R;kX9!D4DwmqltIamQR7?#tu?w8525(E5!{GmX$mo<>Q_1N9FS`| z^b{KQ2xQ=x3YbU7OKbuyfG|+yj;~N>UzQ{Xa0Wfp)(E%_QT+MUDP-n)|Dccax@kljri%&mE2< zuK0bI0SQ-Kvx|=5x=e=qZ{5QiceW9u!gqe>BmCy`FVG#%ky9uyN}}^u7xg60uMk71 zRA`UJSkgXXXu!i$znq|wAjTZ2#!Yo%-J~^48;d=?w2`1q#)G%+;*(FljosZ{#AI;# z@e)s-ykwVf()(Fv4D?-(loKpmafQ{zNxT{YL9Lt749)2Tsdml{B6Vssp-~oE1%y;% z=E!6SWs;YXVXS%;>nY*u($UT zv)L(Ds|9H}{i?_xvUFRhg+ryz$8GFK;BX&6#$+9>e#c_%j&N$)FD% zPupZiO$?xfLK!U+A84NIi7}_dq_OKZ-8m?20G$z;y`puE!2&njr6^|;Ct+yB;slPG zpdr5t(tPG3K}xA6JygySihkSh#0~O()TOE<28c;gQBre|X1LIMv$hy41_mc$idd}{h`|GiSWIMONPY{Z zafr+|GTLEx_a-_I_-HV(69TwQ1`NG>Mw1Deb_DAh80)Bz$GVO_rckE7ITN5J^!cnr z@{~DFk$X9gk*j8xnT`8+`l+gkDh6OHzx<0CTV_{vV>J+ktuct{)HT^dSZFB*1W!P6 z2p-;tK?XbjU>;_GtAPgq3g{O?K;Lx;B~CLJnsbOXPK_G>(V2~1t>wtqcO&nGEEkd_ znT7!;0(NX^;OP0L{lz#%3=G7w-b0A!JC6`E`Viqmq6sHzih#7#WUwnSs*;#co!nFQ z<=&9QpTIHUMrYPsYa_l6iaj3~j8eHoAjX)`bsaJkoN+vXuW@nmeDi3%oX^*45oUu) ztgx8xRxppHM;w=zVpvORDbhAoz5CS=VmQ-qrbO>AWeifL>#hgP#GJ{aA!kJ_Ct*09 zS4U=|>krclF7lm{0YVz2*$i2N1hCU}i#&)hsCg5}d5!7dd2(*8MP}vz&P??cCs)L> zw#6S))oYwHz4sLmaya9&!{(Oqg9>Nr@{Gv-A=U~bQlw&%z>wGEV+z$HK%_#F!sDDR z4*mqt5vV22zoa%ren;D!pp@h5pVo#pX<(u_^o=^pOsFQhwQf*_d6G8v0JyAfzv$2G zWkvsWY5&)4j?Olc*P_yAgSYO!fq(pyF-`$2qytwLN#DXh|Kktw^5^^b{N)07zw@x4cSayX%@%+3r{BiOzuv>&9n7G%ZsVW)@E(4|5rAjEj2q$i z{^&h?@L;(|GDHRYeg}5QE1UVa*PzAs}j#A)1NXq<`=NeX%P8BAc8Rp&gv4g z7Gngo#dth{bB+zHM2gUp)=;IQ9Vgl-O$1_@;3!7?2MGLNvnX`GlmA* z@bcwz93P)x!INJa&jl_QG^Yz_E)osKqb)pq_&&b--S5FQV?2MhhvzSz;b3nMCnrbf zduske?0M2VXy{}@G&BK9q-!srE}v841|owE6uJ1SF-CPlyA~D11>CUtulE65)C!uf zt6opm&06fx`ZIIZrC3q~q^u{=LN3R83VskBteavO@3v_*tqoX5OW6-#U{4jt*an>4`Otvu|Q$ylCIq}!{ zqv~$1wZ`85OB@^=VA=P`8MtxtHg4a!jc3oEuv{b-mPN|Cx;7O#4tY*M=i+4|ZptFx z&?>`fOGy?WU9dQ4i;gpM!zU@yfR{>?j37m` zCZ7_i_l?p3t0L&})>S{v?=dafe3m36m7r7RdsUyg7y}FpH|Yr#8PDY%BPj>6UPXNip_~M-KF6~#o*;#CXt;vXQHY{@k!BTUFJw&A&h9{1DeK_ zXgUFU&jOLv?OYWnbwZJJoig);UyiE0CsP8frie67vq*u~e~N5o3i8ZCruT69T!3Xo zZv_VN&oNDGV3o%$kgfKv@DP6DRhR3309sq?myQ9}ykND6~>=*1=iJi~#Wr zs8C#ncr&QFxJta`dBZ6FX^~!J)HukpHxnSCnT;UVpHhbCe232Ta!fVNhu(jNweTTE z*3dJ9VGtcVY$CN*P%)w&B?|pt_Q^FcsMKVt8mz7{26FX7l4IxNC8I|(U^K8vG2f3W zH?icgk*Fq71E7k48v-+l+D_{{vy@Zz+L{DVO&H6zpoYDN?5(P#C`fXXfazqkXbZDX zGpmXAKC?EhAErOiahicAKs_b_?&Vz}H5J9+_Gi|RE}y*)Zs@fdPX;|=IGJL;b^^e4 z>utMfb2V%PuG93rN~3z&Nt8d+4c>X@ZT#$=3qEZ7ZT!c7dK>c|a7~NG4%{lYZs8yQ z!L7B}j%N1`{>dNT!k_d#pdH%AUf6J1H^xu?(TD3zmm1**-+Op&19ja-_jUXNHt_+t zY*PCwF@>8*8m`m$UN<&z(`)@rT;JFIx{B#>S&G7@5BTtVo_+o)o_+r5wXXm0m^NXd zTqO^>&b2-`I6_W6pe!|>Co_aTFxAr%O*IClm1#z29b)t)L)Ti%jd!Ki51ngMmOSZN zYzaG1oR$|UUV?PIxIm5orTh~RxG_QgGV z=L6XG$V@#ilQ2~xkE9CCs#4u^&M;0Q&46wd@#6Ub z4i1jtL&R*hz;wF6$Q)2-bsa{dwty#n-y@}jzNbkj0dc7$aqREEBw#4(i1YfylX8}Ia$&o-{B$=WSW)vJ|syF7?^5_Ayh{G+TJKr zW-0oVCQ~q@s}u)=HG)F_Bx5ec$CgpoofMUcN2ZOn>^LsZs;QIG!1QyFd0^ul#;t-g z8jHEY)3`*R47_%LUt!X2!zhEcZQ+_0v-y(JC5(l3fOZZJ8m{vg8;8+&jHYQ}ti@=u zh5K*4jh&qv=mW*Vh0tR5W1gpgq?PP-SXo9|v@X@mosK)m84cxkQ2i<&* zXOF(X$-y%m9PA*14Uwz(M5fh8{W{a@KiHIhsz!_l{7E?Fc- zoKaqZ5tP_W0q!(=Kjh57OeT6W4ct|UaWfp1NBW0h^9*K0^bIRDf5lZIO`?#h=d`nsybwLW2?I4cXCfVORM_l-Aj@9sU^xN(Er$zz0T8pIgUbseU&8BR`4 zVA%PZ{^`oZV;E6I6v)g4n=m*H-g)>g-hA@`9)I+#9 z`N=83pg{m>-<9H6J1977IbM|Nuox3jdsQl?kj6S{9<-%I0?<@mF>{7`fANY)h|$A) zoiw~WoNa4 zr$#gu4;Q7}T5PTyb4Y2eIj?nfAw3NKT(8$05J?U_&x-F)I%f(#+}q`M5IZ9wXZ1Y48&h4tk@SApJ zzwA0~YWnu7_vlrw*>&Q?LSg^_AOJ~3K~#?Sn_g3|a=h1JEW8f5bKcjzd-w44>CwMPElpQ~doee_f_&IcX?Mg+cTlisb=oaa$nzYt4tv zWm;>DhE_y1lkZJXWty^9bjUPME7p~2gy08;I~vwCNI7CQU!m*vv3GDv(~TIBgjUB6 z)!-&#FnA|wTuiJpOFugSKs|JcUieRqZgXsa!IRh3@M^kEXG>dFwXr z+`fZ*ckf{`9v2C~V!1?8K;Ly(E|*v?m+1Q*t!s+>MX6j0HUINu6gSaOmSW9VHbh2z z#3#rRHL7apDZw;wNi@*>KxTfXC3Y|m3e*%MNdg8=)JiG%Nd5+v3rG!$1&t}d3_t~0 z(^bRF%p?tX-yyq<@wkPxK%WezizWJb1ayO~t!+%_J&uo#V8=J0jDgb*&NU@jWVEAj zLu-siBiy=u8#~)Kar4$K+`ab(wsy9Vk#S$$#rF0NG8AUV$9Vbd*KCAG@4>$B@b1HR z0Ap}?xCd(-y58f{Pd`PB5lv&EbVeTnjBYSJJi%MekAtf*qoJn7$Rv5%{tIGFB@qMZ4AY%69yym-=Qp9St#A>yK?>lB8 zv4NnlhA^OU40jE_Ud~aZFM&U40GbYH_-mScHrmY!I@S7l*!+rYC=XoV3y@#*?Xo|k zME4DuZ?cq(G04aqJDG|{1qPolpmp^tsX%|=wQksSc4&}SKA$J=Ayn2PvDZvF_aR-r zX!~@$`}5m6-s_kw ze$&VN)1UqnpMCZjj*pMey-pV;Aq>B?*7)e7kMQu}L;TzR%83!wL{8hr8s3O$L$X}3 zgcwT!ojIOq7|{Yn`gUbCazN2Li%t*)VJ0nF2mvW1jvTZcOO*zCaHcjIDsmDGA~bv; z(<&kp>S6+w6PtH2l02jcW=_UYsy2;6RhD~XIXhM;jMi2?XKhwcoNwhm7KE8IafPZ( z?(rO%2SU50xyo5+%!ZtvyA@7PPw@2VQ#^b26elOA=zDVLZkrZOW1;m3A@pRD!$>#9<#Bh&RrlO3T4 z&f5Y4gg{Y$&NYyYx1JM9B#&r?rO+Qz2hUC!YH?O0=gzwOSGIvEk#yElG+5%OISics zMO!av48^_PP%gJ<{*5tc+XhY30uWYCQ(UHHswb02k{{4?R~c1U4FV1+fc5ohO;S=R z#6%n4-rhzC0goR)F0qr##Ckq_BIK+J3v<2H;Txr}WIC>f6&`YxaunF2OJEA-LhbasjmBW~Tgh5h|K zta?x8YYOPQC1OvJrpg!?=P;kmadL11s~RNVvjH8kp~>7a!5NK7+u+9b7It=a$mEox z=~lf*PDJ@t%D}jmP3s(tb#xyCJ8mnD$U5wP)uHztyzgPGD)0Hk(?)*S2b0fgwpC?8 zxzOix29!~2THm76&$S7X#;5>81NVP={s(m2%qcjZ-{s)+6*Vwrq=~!e>t$-4awt0PG-$rXu$BmH6pcEhS_?3`oG);Ee1wzJ z6Wmzdp!XLyqPhs<&MUT1jf0T~9z8%!prIx%p;9>KT8e3-reF>>BLtuK*?nyI@8zGNDJ9nBD#dF_i;syZsTGyEQeii#HRL>E z2#7v1a7o6ftiLMKtO9TXYx21I|Ml;rrV-E}%UT(v2S@@-N}(7zlT<~QG$dne`8)#b z6<>c{SYBCGEEA*rW!dYg4^RD1j;G!|R=U>NQ@Uq`|-tV~T7+*(EzRAyC=NPW@Ggs+C zt~2@HG|uomP0DrH2%D^pt28ecMftsw0p)9a&nB^$7k&SEKYRcFef-&<{TcrJ&;K0H zo;|~KI=ysl4FB6&i`%zvPTWjMtV@u+B1rHaY{q2hTA^ z4q>R{HPqz95D=q>&6XR*Se&K3?~ny7;Hijclbv&Gly9vyjI%{MNmE->qIifdOd0IN zLWqcr{HK^HMo(+_zK3ztI7DvlG)Li))>^M!8?A_%IE?ihX4%U1lWBO}Ff$u2S>9;4 z3FOZ-#?tg9B^Yf>^D8=7YM?A)$cPc}eUIssXx@j1dwB8kdC7K<93d1_K;J7EtLT1& zh@OphlBvc|&8Wru?|%!QeDZxX#^BN8FYx5aW9;oe$8s@6*Dn!5SG3~AS)XZ<&N>9n z0k+x{r7J{E^@r@*@a)D9kpxn zg`wObg$j1jangh{hKTWKgvr(fF(w@DAFdUf)>?F32kRU>0}WbhxW*N~j9S2fngwfM zj6(<+-Ul{?qynvR4cw?f$_ahfp>10>Dl=$CW4NY4?p7SfD9-E&);d^rWlo#~A?yyy zN%sIu(a2f>T3G(UUX4(SfDojNl&H83A)#T~b%}M9_$x7$)0$1tDw{$Z1uX`O+)Vip z08O!(pq8kDheZc0##-xpQ;t-W8>UUyW;VcBDp-xm(Ai@$cDQ%2;P-pv z7+vu^(Z%pj#>YkgWNx;_g*_t=-od%*r3p zHyq4RK>+zTQVVgKm$fhhbKz93Z8eZ38DgE@0w_kAb+W6Fd|zsmV!oRZrek2C* zCk!f{^0U5qD$T<}0LrJjU#SlW^v;qy4BfVFwMPkNHP2WhI z48w7zDRPbAcn$VkBUxT|iXu@5hJ*CF)&Mbv;!R>iJa9JaA)inL8rs}#eVV5<8n@sY* zNru2CKYN{q@ar_Ot0(Z6HSe1m`@Qaz`Z^T%>s;H5;`h#5BNqV*n|L;CYQVS2d2gzV zzwY(CPJHBp2M_SGpZ)BW<3g&I{1xIjuV6h~1a@5Xm2!fz3h)upd%zkPOOB{r*ONAj zKi66yr+}Oy8~D*Q#WpQ%L?vpEDS(k*@Jb^gkzTksrmI2^?w4KJlwC83?aP_7k`+Qs zh&jTtmOJK*&<9v!U|mCnQY3nsR+=+w38^<)zyK<;lr_jC3@+D5HWFjZ0H~E=HYV;pQboMF{*29DPpuzP^@$G-lOk5mdhTeCo{Z!xsSuceHvW}H^F&{%^=FlI=6oFnx__EBT4o63;@Vxo0u*O!t*a4F9z+h- zX8-G+F;yO5Al<3Z@a1Qy=u2xxfJR#`?x^?}jV5T@rbG;h5nb{Dx^ab$9(-RW?@iNC zvCc(OA9{{lQl+Rg%D`v`l`|KhR9ri2&@>~YkP*B`kDl(OHKq7!+Y$PnixV@X3R8Z% zQ2j@v2G(j=#~u?oqVK7YbDVo0V?x7H6MBw4j!#aJGB{1cB4|zKcdX;jiD>oATLA^f zWhn7Z$fWZ(+E8|MDKrhaO3V8xXCx)w7zv1^-PMYy_?f4emc2W2PRLU9+iLDb*ImJB z!;Lz*m?t*J(k0)$npYD2KCih}=i>g&fS(;uOJomB05TP;IR#kTpfMWL!yZr6DVFI5 zZtT2)MR$OM!(+^rOFVu49N+!jKg1jN?m?Ro7K;O@2*3fc56GGTl~J>eQM--l@f-)^ zBW&+9&^o{whtc)~*0u;Ma`Ts1RAcD<)^{r$9PHuE`)}jTH}B)<=n$*UqqRg0Pf7!D zux0u*Yz zQVPmycDtu*W!Rijnn95_$={*K1*ql_7Cuh8*eK`YE$UBj@#Lx$G~MR-P;E zegKST9$FZVI6f;M)mkHg?rF%GQwVtC4pn3kvfe@rWg73Sg-^bmTa8rabROf#2ZZH= zN>%V7#l*}K4P<%;#TcQqBxY1E9Rc9P8^9=2d}9(KgN&x^sl=9(1Os;K_n~~BbEd}r zVUU!=QJqRjY+|Y=(TYINYBQJNtfT9xRFRU!7>Zn`_BpB;?@EGBy~iR&k`LZ231HKH zZ}@%ost>rzbnl`p_~C-PY%+VEG23O0#-fj)Z;&in7H&i%YU+jNS5S)+a4+PUcWTy$-&a;3j)@_+Vvo%dOT^>x)+ zzX&K9Hu0CO$BWj%Wou%SSjCI3=|yYqQUD+&^nFL}$Cet~rft!$Ji5Mzb&j*EMU$zS zhLvD>0vvpRvcv{(jYZ)6dVXg^I|t)TrTw%1KJnB+rp?rd14f*Qg`8*EV0w(RHip%*~X#%;sGw112aq+W;`o zCh+E~VN8Q>fBYT%?hk(i->vZFqepo9^fC7LUtqbMA_UUpCTVnwi*nt3Q>4j;l3Zyd zI+^ zoY4i`vwVL_qXR%2qB2J|>_V;+JmVZYbl3N6jI_p50C^QO4vVPpbic<*w}ctrfSru6 zwRID1J3-2a=(-hRO4!}m#ca_drU0vmvC;d07z4I;wyDu>9IUnQeUBI{q6+9tLhBnK z8?>Vl-gx6KZrr$maoa*G1D`0?bT&W1!NE(s`|f+VbNdz!_Ff`t4Q(x~A(#HP*~VzJ z4dWU>Tg0p=KRzbp2w1Jisofg1jYZQo7*ASkZBMYhvyIVs3(8pZeMB=EmunP4Lf=Ou zXt<^!bF*aOGWoAWPF;c0Smp&>)1YY@^c^|%i>HHVfBO*WU9W(Z@3`p&y>oIPFi+P; zUO_<_1?Y@S^GY(~~xdu`@xq zbpz3AC}T;>9RhL+2z~`*lE;KVMw~fPQ>9$>x=A@B=0V_{%1~NjU&RDfFlT*TsvgI=f36sWR4 zMMrK!lV&l079gP3I=Y(raYSTfhJzWrV`-`6fnj2z7(+f!W59a@0j?Rkc;JX` z9^!?-=!^jSD2xFHOqDJPp1GLrD&)jo6{$XBlmN+$O{=Rk&7|^qMb?v40ojVQjVWX? z1=Ku_%*hq(vqWwqAg)A2%y9rHDSl1{M#19sqbUBUUA`d zyUw|7dhIT|=9e|6n}9jz{ry=j{n^hwd(2l&-!J;_t7IV;0WF*Sj?1p|b*}Ga|GvrZ zz3kd=^1IKwCs(cUtDccfQW!MAw8Ls_)AxazR-;Q!uI55dbcC7RxFzN&afUb*CXwTU z6f|q;W2(kP&e#&&64@g_ih7w$q|6a_G-RaDjS*T|-ar!nzJRV=n={+weTWaR=fpCGqbaPtSAaw`C_G#DZDFxJ8v2akX(IyMj`wpb4&5M7cu&gf$z zn&is0BjhtT>fn1)UASd3ObuPqo{L8ey10zPYX0Vj`x~?TSC}O2hktazG z7FIj7?HDc7n5`x7N+tj)4&tRWkTSVi=NQq9T4>$W;$7msl;Vu@%%GD)N|9LsqF!UCr?`1%4(lAWb<{XITk@`<;e%(W?%H5hr~2-aSsC5pIh8g$DgeD5Lt z5IzKG8{qqZF7)uBM<4pqL_$S`Op`lK&xA&1=?Te_#JeLWpj&o0JwC?aPK%?%5w^Cr zG1<1HxkrNL20$f+oXFI0e!9T^^JjSW)t6W-<_Iys;s!!D$6|JZ<#LXYD6$g(@+>1I zkH%Sq5V2e?;eC&$86o%{wi&a&m?+!O7D$1aLL4Kw+46oN5G9vqWWJHQ4w6t$g zKckQpojYQJ%0$Ty$s;RWOz9F&RE;rEnLHU%jO86Ijn&ZjEX4?&foOqbINneCCkD}*Rc5*-nB zB39J^2q81a1Y@aI6S)Z~G6%ANs@JRjDh$S^$m}r7iAHM3X2=yt0N7*~1*{k501b*X zr*;q{3fZ!hGNF31rgB}hBB>GtwBqM6vwsUzM$DeQG7@#c7d0bSP19dBD(<>jb_Cba8| zj^nBZ_qxsGraJY@0D`OT<#l2hH(hL-eDCWR4Zf;(!6v`^s~rqE^KJHM-3X&=@|zuj^-4W#Eo~Q0ahb9#re1qF?uvj z!*t0?a};O$%o;nb6}(Ka&bY#Arf&=NJtM(b4TMx8e=2!+4VnLH5noufg7+}Z|F=dXjnxJtF9=`J-zVq$xBBhK+kH5t8=U?IE zgr<`@NA$jfQmHi0YGA4})FKYqEJa(&4K#`?vq4sR{aMum;4n-7q}C=WwQ%vpL7s}O zJkSpg5+-V;Slp_`tzSG5Dhpr`7pd1Hhpe?|n-RvN37l<^v*t-0X@!M(5@O&9ux4st zWU9E~dlC5mQ;Cz5HDBGA>F*@=5}Hh_l-3+~6glr4#Uu$i!>ELjYoH9#@k8*iD#N*P zarGz3G_Co5<q>(!>m}#Gx|5&J)n6hrn*;!I2qne~ z$nZXv>2MUs=YdJ&PzwqMleALEhMe9deW1qDiLqfV{xx4`1%=hhBYooUaZoD4Sble~nOEO0 z5n~UC%lJS8KAoN7@aPC1e((|Axc4R=J${53=$Vx1DP5;wK6dqs2uVY$1Y^mG-fGGy z&#ZA5ox5hY`jmya!?K9XU?8uRmCp^-{nvkuU;XM+9G{#N)6(?`RDn}vjIo%WSQw+QSS~PM zERbTtc(R3Cx9(uFy$jd0)Yu4!W-OGUbc_O~ay*+h@=g!@j~KC%kA=J+!ICIS*@1B9 zu@=&r)nIR=ZZT#8dUeuk(lr6ZG^!+`{%noS6b6;Jpckrpj7XXdUW-S8UX$9yNRwC&LB?+O#r7j)eog?k&R0WLxcBPC^d*It~HQ0 zy08N@`v6#Li!6&`nyW9(+0PhCFN%EXOg)-YLNZi8MK*gS`4-mF7NlOR5q-mWU~q%a z@8Myszz0TzMI&|-g8nfS~d;V`zv;VrE zd0jTdb?)zP!%_cLV){0bI=o6;-gP`Ot^)#Hbu6#qad4e`@_NYxSqrZXLhcKFjy63yCz_5?k)SyeN2rTs<1LLRN|ab$qlwe8P{dWG z1XF{;6DOer4>E-*F0Puk$>drZRB|uRZ1zSQQS_bw4^@v-q6JM1NRbVnv<4KJ-sMEi zqW2N2jvA_Qkt9}KoGRrGcDLl?P#)}rPoIg+i0-|=)CN60ZN+}qp z%XGG`k@bir`I1IY@$}vYPX=pdNEfd(Rr>x|ydY$XUyBwLEi2_O$3a|_Mv8jS_!AX* z)Q(_{*#ip!Lw&yxG4Jo_k6ToCj9HiEUv%C`*mL##DBF%Cy zS0_0}Ynnb7N&yJL58}3|k}S{H|Hs|C#7LH%cYgo#x{rv+$alTEs`^DWDN5E*8o`tR zQkGu_$V&ktnf;Z+17k zt1Bz3@*VGpd+&L8@qOpq8`)J^nbk$va1l*5D>EY_?(3ZI`~LsmKLpe@fxzmzW{yO? z7R{N?A%NLrihh}~x(6uo99z3P*xTF1v!^-Hl%=9+F&6_K1bd7GXUFikm^+R{Wasx4 zi*FH9yj6_0Dspa008K%%zSzz*G>9ZG6_U{OvDp-Joyn3C+Tt9skw=qMaN{9bi=AKJ z52WWFC>m=yNm*qbZ|DHZb-`P>jsT=B(+r%Mj1$9Fq^L+ zO^%I?O=xXU<|SF2G^H^ZBLLx$RVZ%ps*i88kAZA*Dxd0BzbLLrCxhlo~@P zC&zer|1CUx^DUg7ougjWtk6MHR|s7I+VHVr>Aj)}ypj@H#eWDQX_SId5?TuQxaN6J zzF|d8$T$^l0exJE`8Z|FkP8X#Eb5g_O;n{MU<_*8kX_63G(2U@lb;+SHa|U0fLYor zIHpYjq|^vNa30NSiShX{TwP%@I>p)9GaR2k!_&iOc=O={?C)-)EHn@-g0ryJVKSQG z(?XY}2GDQK67x_F@;lof^l&5*&3)F|ENP z8X@2>*_5NAtpzHIq@n>^+v2qqz2er}wJ6rEjUcXr6yrE{}Ccu1Vn1+#d{?V58B9F!Q6(>S=WiG-`%rCobC~>LSQ!(`-S>0I7ZAF|*D>FyzpC58Yu2CAFAfD?qdp^79IvMsIA= z6h)DeMxxE%dEbe6CWcMin_Z_Ky(z;?U$?lpX<>ZbXte7V|2OsSze;g>-D7aw&-FTs z*q8aiuTo%Kb=3~EgB~-xUsNP zI?`A<9!3Jv%QOW_oo1GeQG^#2lS-)sND{IuwQFP9x|8Y4FveJ9Fa?idn7o5UfPzZJ zi|9ZABdAC~070UzE#~t%#^Wi@&(1L#k8p8uj@fL=aI7X3lR}cTHs&{LEfaCrdCO3o zwr4CQ!Q}4VeSlm0_b{2x@Z{hzo;*3gVlhKiEopNY$f}Uk4I=vU+Cm@9Rp>6vLU3%G zBq)&Q?Cn^j(@|+BGJ=b^C<9I~sqV%l$ud=E!{*U6HZ^)^@eZBoLYx4J^uD5Mgn(gj zf+9Mb-#865MD#WWnKlqorlvxSDvI}pb&e+jDs75s6Vgsd+V|!=YyyH=#VlirWb~lR zMSH8S{C5a}vdlR# zqCu9?1hXtly!r4UK7I5do=TlIW!^Cely30Os7$o}SP{b=xz`otm!6`^LMK6kY(Wye zq5z_*CGgZfHkiOve<3<4?LJ)}o~66!z$c@J7a>4*n*vzh?8Vm0Vl6TEX(SJX5K0a=zK%L~+v!=TL2Qv~_!_4+WGM$t1E zZuXJo#JVW^CA1M3Po`L{7U-24nJJ)^fK~z_*C=xKLJPjO6v4rqa~O?AI6XVV{rhiX zcV{052M1U#D-3#6sA;32@(e!0!3-rjq(*1@4>MH)n7l6FZH>lyC~e?CsuE)iob@zi z12rQX=g~ON5pVQ6owe|;;iijNTMuGPX<(VM=WCi6DIsxMBH>;N^0*7(5myv?E*iFe z5ffv%oO3Zr_wS;qF&ocuae9Hh?M-Ouu$YZ8pG`2CjB$20!ep|54*{E-TPVvOR&|Bt zszQITfxI_BfM7W50!>AH0v`l%8@$JSK1Wqo$jcJFvIpBVSS?quj(9X>*+Z5Wkg|ra zJiKk_Ih$hD*kjFWost9xjAS`aemF|n5fajSVzGeWWMqx=i0D+`nVJV)v#4nkQo+=f zdtZKjJMZWj%!Ofm{yEqB@6$aEQldq*U|h?MG0f=*Xqp;LRlzy}($#fM%>r|2{Jyq{ zqW?0+B=BI{5R5Tkcmfff?z5y zg#^HHh+=(TgYKFrT7HcXZR}mVr)_#Ik^J**0+CG5{qDZ4`+Gv0S(l!NaeZoK{PdnJ z$3@0Q$~yC?-5WU{IRl2Cg(-q{eZMOh1{tDlPqxzklnfwgolkL*tO9V3SSvzE>iYrd zXVUSAX%-36m~@?~(eA8gMiez8wKD6^5N6rLeMn4f^4_CqnpU;PaW(C}Teau;8f@?D zs+%u=pMKsCT;=D#P7!zADg5Qa7X;CI?_#8vV7Ql*>v_R~i)f_?+Si5s z5T#Y8g)wH!Mz~N2B7tvWc6r-jZ#&O%aw5~`Z;RJ9gW9#3vul~gwv}ljKnAroVHHxa zv=J@g8SNyqS~VDtCpbPn#qr4rF3vBoTrN;I6+;0f^>vIYdET#Gc>kHa1!QE#*{b)76`KCdhpOdBtjZPGu~&`|vTe4Lua zjiC@QCPSVT1ksaJ%#-I^GAFXDau5iCh|tc`lq%zhz?4A1XDUu~=(Aj=I}1{L#ElsH zSDm#f8A0&`zhPLKl5`Dw;n~AT8)vOe$~LBrE!kii&V?7kq{^1l=0 zZ91D^I-g+&0YL;b-edpHZQQwc4pFG9O37n-Vs^ z)x+N24)T(0CbqE{jiv~`!PaIEz0zPXC>i7@VFl0EV=lKOP^sfIkmYKLyo*iLTt%$boi6N3}1))j(0w+-vIi!-X>_bP2$^-F9yoIfn1oZO+0F@qq&=4U& z%8aZc0hi*-kn+IER%JWS^0q*VQ`mrL?V^9^x^GDJ5*X|kr*@Kxe%2Zg$AB$Q%4le9 z(ChWEwYiPGy<6DW+(tGSqRa~P${bDI;Cys~!-Ge7_VfUg@d#Dppml-UckW_qX9sy+ zLM@jl`W{<5yXf_LXzGfTS(a$_^hl#r7kaNX%f&+in$}GX=YhOv5I|s4!)wIKIhIe0 zM5IsDc^5P7+xt&)Ge(NocndH=pyGz7k1~6D7^T87G84MbwQdf3vbS_5z|OlwJg4U6 z<$F)A6=mu9FC|0oD6v9oLlz|GP_I^K>I$}L+GmvSB*|Q=`@2t;*mRC-R2$(IO%I`C z2Xm>YOZ%wwx-G{@B$_1B-x1Czd?q0wsnueVK>B^Oeyu%Qq~QBVCb(mi!b|yLj@4)O ziUA#_4O_ZYNR$7|kmv8k0JW;=t4`1gLTK&R`DQjD&*zkXRwdincqYyo)L*RK=vc9Y`k zIxK?g{QPx`_nX=PURJnWXY%~AN%ZSFFE2`YxM>l8)1vt%f38Y-xX$~ysWstc>V>Nq z3a@Gbxawhi)5MFb-uHEn^UEG0H&wIT^!|DA^@`LjCAqdtay;_(htyy9ozCrAEDmo- zBFP?*NpkMIWeU4aGVGW!>|B5h9!3*w8iJ>-xhQs(cW1+ix4btbTW9(zJ?DFo@2N?5WGNLSv0o6cs#}N(J@X>&oLfPu$V7k zog?}+Ji`_>7tf9H?4y`jT{JAI(KydCekhs9b zhqL4<*E-`Oy>5Ys%(n2(w^Qg#F@({7>3x8A4a@&sr(qPJjif1a)RQKr1#jjgpo}K) zq;;&4;OkQg_&^bs#%P+3vQ#(Tb2RmFFj<+J1J+rboStAd8NmjRa?nR_V*n42{>BFG zJ$Qg}&_|FI+bKd!0AM~BZ<Qx`eKnl)!uBNqK}u>EaPi@SN7d9=RW+)L>?>7WVO6a@v-VPC zs)7=1K@u9u6c`S-aO?JM47awRjX_=%*cfhMfBz1)x3-a&JsPH4i^;_qX0sVij*oG2 za)PQ}LFo+rjU1cX+vp93&?ZAx_Mx;!e`5$^G^XPbymx5oIpai91brzO%-MnWDb)@&y6b!_uA@z`>lJU; zNG|q6XObPc2>>3=tV7Lr*FlBWNcQ-`85grfJvXNuI%?CCn|rH_dT-cz$q zF@83*3duN(@f|)wU_}&yNJ_4#=#WZ5#vuzw4z~>xtO4aCQ1WtRiynl`QFc)LH{bSx0`(L=Xw2C`3yIi48QK8`Z^x*o1CxD^L}qq%)idp zf7$n4XNvwhuZQb={@2Y;xaqO^8)a4qn)K2GkTbe<>{A9_NNtLYlToJ}yXyR~x85;? zCL~#2Q~}UGntxt)u4jh*$u{5Db&ASv9(|mUtK=t+o&J#M@4*Z9WlM+eJw3x}Rgq^qN&Hmm?5Bd6 z^VF44t&GtHSP`I9NIpgZpx+12$T z;X{&&()Uvoq2_46A}?Svos=puV>@`q{`COM(SDJl92Fp0mXoKk>5}bR5N0g0AzBF{ zz_F7;@HOk$lS|Wl=ZHApm8iy|zfCnz>GhqXxHf@SK5C31I=BRKlacq=dsypGRTXOX zB?q>M#Mh~t2F+}S>3jweJam?!X=;?c9t_9--MW1T{f!~{ytM~L0y##HtGA=qiM`R`CkP=Xyygw8j#kL4^fMj7kSwbpF ziV6lSDkZ5VVugez>^_|H5DeuEl43^V^Tc~nS|9)t9#s`kWCer-OlAP3Sr+Sw!{HsY zHrUwMLRHmREEgy@`qvTPe=Szx1IVzZwiFF3wW((_G0 zKnCFakVe1){>5ia-&ef<_?UY_{)TSv&f?E_BysKbcKoE+XiDa7*oHy^& zbe7p7?CBReKtaO!3ah%obUMRqIzwGIMDVXytbA$jk+`X+^#o8-K?@Rbw zU-?zsxqlBjqvo;o0+}hHrGf|zmh%P1qY=(dj&XK=j#XVjWf@9i&>w8z_U(JvyS0z3 z=)pOl=w;~l`zVVZs%nYlVu96iNd;wDz%^voQj)A0LU;sZ(7blcW^-tr!{j|^Mas3h zv5=NL|B+Xc8I!#7N<|ifhII}AA1{!yCWHXr#F*TSN#!2GwM7a9TkKL#kqS)b9Y^A7 zy60F?Kq@E?AMc+I@m^`2?x)CO2@K(l7N|JwPf%90;J~JCAXNjMDHvl=mL z7e!(Sd}ic-Y40LgS)ws zk)r?7#txV2LC(jOLK4@6ZCR22&*WlKp#-u}#AxCGv|vvmn4wW8wOyAZ0kjGsV(WxX zlybY~cZUa|quxLu>x+t!oT;hMv1&xnvy=#-Nh*lO*VLrcy0d3!frU~K@5FOwNpoau zY*M5+#MfAJcF&)_YU=l@GU?03!|N<;Z{kzG?iBT=#m=i7hnq}uUv#ow_3Jlja(tf8 z_Va3B{J-_*Z{qV@=h*!`*cY#(nfLQKet{>)RD4kES1T!u4^e9ydSF7O>28d#bDTpP zAyR>fz*2Xq?pP~=(^Qln%1Dy@7%djy;1a!?y1A5FjzCl3=%W-}X)iB^6b2>Gt~#We6p}mEL?|ckpu?)EFdmI@baad-PYy8}jj&p+P*tnsbM?$o z5K=%ejT)Z(im_mh6AC3YOF((EA|#Z|kedQu{>5L$TW`IG@o0j_2cP2f^bphe1)QxD zNju6BqYp8DZ0}neLF~ADAARku;)4okZk~v^aq}R+PDe2SlIUBuC{U9@rJUgQCSt#2 zmqwkWcs6a$;@9Z!k$jm6JV{%DRGe!~a6hFDv?A%g6aqd)3AxT@PQV3+rfGPZZ6SH` zrM2P7dz&hd0GLrRAr&Oc6{(41Qxm`=z}bdV1RQKb@qsN2FTmNrp7YR=bc)0gh?7I9 z6ml-~;zq}LaK^oagD3j{0Mv0q6@860=JPof=OG|3Rg$WD?=hK7007%N+nCN5*w`3i zZ~r#3ynt(}1lx;nrRXb7{`}M!k?_K&c&ca<={C=#qO5e=I6zBQ0ysbuy&bZn#0eoa z_k18vdYbz4CN*Yf$0i|*La3PMYd$tkQk-O`VH6vPRQx*#5vN=t-J2=;ECgsps-MO- zR76p3BTAjYA;2^Eb2!|_=H@nvvc&%W9(MP3u(h*+{-8hz9>ZY|E+}kl^w95-G@WSJ zG{yDak{T!oNJuOfOMLHp@8j{KPf#~Y*rsBMcGtHXV4E6GpFY9K@iRPla37C8eT1`< zXBf{$7z~FP1TGA;ffT@SxC!;f8#vPzXGayhui#vRrk1EP0R&6RCP~v>r4*FO;Oq+3 zLO>V`sdFgPgAiofQi7)XKG5f=R!atU0WK&&DfEjWLU6b^KgV))jL~R>*>plGC(d41 z+(;BbK}k+0(3<7E0$G;B6a}_-ZsUu;_)GZ8um3t8zWop;H>m0wqtP7G=?desbDSQZ z;Na0CoSvM*+7;@i!C-p_z0FM+ZLqnug%^ucS7-^CMLMVY?34|*;2`o0HC5Z%FrpAA(uAt{0l8S?@TdjIT2uW&Aw)n+; zO9F(3z!Ax$ct}<L}z08AnU3E-i0K94; zeA7blb-nplE!O`grtLRcA^VMe#-v zY$yfEKefv6-h01{ciwpq7Z+pv?Bfq{eEbyC*%_=`vAiBBr=C8WXzB6j(D)-9v7?CS z%HZP0D^7dBHUQeVbmXJF*@(7*7L+HGWy2Vg0E#}iwE`_pl47=V@?Lfp`uIIEN-IHr z(=5x$>u)mtj1kP}0T-{6*Z@#ysyc1VVprdo0!2|m2%xH~MBZ;bpg!>((nKnFfc=Uz zX^)#UhsHMCU|^VEkX#&*`apt#Zd}j_25mXtHb*jJV6u#3$Qn4`K*=aeY>?*#VuY44 zbS)_*61yW3kd;s{QUfBOu@y{4+36P-7r1rrO%!>F)nb9+#*hGU=nUopQcM^GNwVMo z03ZNKL_t*9eN}>S5xgv{TYV&Dmiyq@!%KdCtrb?Hf%B{i;X>Z?`2>Uhz{&|J6{HuP zSV;+?By@US_*QZ&yZ&juCm9G95SW`GU^vD}Mi^C$I^^k<5DJ3NrQmFDp($cA(}oHd zZ3s#V38@YIiag@M1B1aP?%aI?o7>xX`<=Iu_cFM!LQ!g(@ERb%VmK_3D-A6}D@_KV zq~SCPYFHf|9pbxx^;dXy^aQq9!C4Cl4Ji$*b)05K_sD8B!^e+4!mT@Z@zz^!;`HPY ztHm6%#T=WqfyoStUJtHXpe%YQ_x2&(4D<0Z=JOQ*+So6bOIR%sn7&VwK*PW{hu}!w zo+$;_)DQ}giX`#gTT(Ys1q$Z@=M~ES0R6!bgZ>7ZroyVSXc|&US?4GM5FSQoUQ-P6 zEJt3Hr0QX?oKzBdQ9_#@27^s(Y;0m@cL%$BJID$R+c;#VfUQq)v{>TclSlaB559+0 zRbh9351U)t$a1nM8Dp@sy@#FceMp^QS=Xd^2m!0*63h7%&@();R2;KH;#(u z{>o*QfeWs)#t}FZk*~m~gw|8C)Wrr!5TUh4g>FNJ?ma0@iXd(ke`ynlZp<%D?G=el z#Co%W_9gsW;&cTi$lLGH@)9WJK_TAqN!2C-b7MnNH_)0Ko8HvWv#c%=9RC;BRiI-b z5b<&1pfk;DcEkG&`rJwxfd8Jrk($=xW>=n&+D8NUT1p!DuwIkX$D*e`uBN?>Ca1)e^n^rP2cZz(hz=L$M@%XJ-+Vq z@$&bebyD!rd;QG4nkFjDn!d+gNCc zSYB|UPY++4I>7M(ue6464#CkPu9SjM2DTwcTRct#ACkP$5ddNoPE;=d5h6uCc*l@2 z1?P}D@Gbq^weUM1JIWzR#prVZ-Uc+b!D6w*bTY$uJjU7iDW=mgmdhpTrXeYKu(SzE zS;P*JS1+7Ql29o`in`I7JneC-Ls|CZC)Ya1FTDFD{PLIo77m{t;ge53!tu!=7K;gd zs8f7an}1B7F?ebqc&x`7(Y1$8q+tu~>Utd0YsLPFP$>$io0l9Ve!f%4rp*OBWDp4g zX>GG6{|^aTa-SH_f+t8(T8pUQ=tOo&k<>0U{kOa+Y!k$Au2RIKiTIVp?A(U_~3(|;wL}(9;TBE1Z$zCM1Y2p8bA#n9Be}#e<=kH4?o4@ zCy#OK)*bZvC8moRHkPv#JDC{+j~upILO>(Wb4VQ(BNkFnv(0LP{Y9UwV3kWTS^0+m*@|M*xkE@;pQgtB7-qBp*BW9!J}R-FgiQM)5AkJ z8?e8B8xP)mi2h&z8yZY!GqyEsATKwdO$IL)SS=Trj7M0_r>Iv8Eao#TW-|aF02oi7 zjo}6xH+C(rUA=w}!_6IR@9bg!)*bW*WU0{&sgp!-FquSf4HiD6`${q(FoEnS=z$~t zT6LD>Lc}@8z)WgF$B8re+K(}io}+L*Tw41O5@{sOxTDI4B;*=MN-m^(!TSznpZmbx zIRK8VCCuoE_a(*P$pk4S%K&Hbc_h^j+1cVkgifLW4*-;0i~9X6vnj0Yx2$#atj@^x zA{ibDgQV25oIs*3%l^^wN}`%EL2iMhc5@sLETu?suyOB4$Bgz7R8*>DX}Yv|Oay-G z9aLOTeJ2_a>oz&riPDR)x$!-bLQ{8a3X1M$R!c=yMN~+nM1eKnFV+-aqzI%$2g?d5 zQWCW`B>^OB2n~Ax=bN^X;5-1yDngNH{B*okQkTX7MLbrVQpt%K06aI0`lCO>(a{m6)9JOZ zIjuEzc6RWkFMSDL{pwe-y}kX?go78o=c}&w8(n`6)Gp@<0(mhBsS>!r4gmX_8M>Dm z1hKFosyEWJf!W>B&(B4Bl%sWt>tMM*(!x(uIw=H#Y@^sz%!3Uc5RN7N;3B)t=8aSF z1S@ooWt*Mmgp>$~9b>?Y5C^mgJmZ{2Q(LT7ON^%zoSmKH^yCzi>5Q`2Z3WxZ@O&=1 zKC+m7m;Cc+>B>q<#5@2gHBBtIaX=d(nuNV^?;+lK=L>lD>wyBVlx1ExFidw$#7;0WLbe;uViJyI;5vnK6p-4XyKIBI--obKvU78 zNM1#29U4p1Ut2q58EvR2VoIjXjzcRyPw4Sdj1v@svd|Sz zW1MTi!=R226v^fj*3N6Y>1{W2k|%cp)(4)5(tC_DV#Ne%01(l4>OGpeP7-rcbRc=n z0|czIkRX;xC4lL4fgpRx`!!5nkpI_tWLbgT-CY=yLrRUU?G5biZKK!E;A{m2pI9Ok zwHFvt*2xA(l)efaA06Q@|Ki&?c=CubR%{1Sd14&Y4FE~ecp(TZ7IS>~!4I+fn>%>p z!8`cLkG_x5c!cTn9Cfus2#%((K0^o;>8Cj^vT2x(?L2(bv<(#RIi}B{a1Dw8NNrFp z7cf~5!dcXIjsQgpmq7PVaDX-jo0~h>-rB{WKO}(UYK7T!O3Enj2+{{?@a08`qUfRD z8(`2MpkP&x(gw<8$nrk&as&O1K6du@Q1<$0tS9NW)^JUO<)XrPG{Sr~gAy9sTRXUO z=Pus3_W-?(KBn_2tfT8on;Z}tApo|jFq=;Bc`gc~tZ((pn+rc@VFI+DG}1y2A`Zd7NgfPjSami8S|AUHk- zvTdUK;Cb>Mpde8D2F_au%?u&17{IZ*jQ3TFSqP+@Y#a2F&!N;hO}1l^9qpQqn>Xa0 zSMZ(&J6@38fc6^%?_{?LSc9W|}sbE1()(}X=@+x)Di|V*;{h*&0%k?7i`BfhF7tz#jG9AB8RM>TC`p^43 zR~F{M!wd4`T|RivYcxFX^{y&_pZEE1a(u5_SY0K>zA1;`I-l)jQj^O?^;N(3a*q9r z-otfog6CaV*KL|yH|Fwr@A<0h|7Cyoyhg-TzyI*?5a0O5H!vQLul4@BUw6*o)ndG?nzu!;8R#V9sBa3R((SCSeN( z@;K)p*ek4!;e{v?T4`acYm1^NQ}Hil>qSH2?o%;bR~3M^`y0VJaY3X4$)zr_5P&wC z7w^ykx`7Gff?bgU)&sDPHwhlLX}GYIfRJb$Ed=xV3>Rl-I6gVW#pnXl`3$S&in`TG zQS_E?3zN3cX7VpjHQT8JdE7mFD!uoxfhC=3%HW|?froFsi+A373#0J}k3W5c)6=Jz z&nNJ{288E@om2$Qw?!IS%>e=&Q-K*H9oi;~a~@i^5Hyn7wVieuCsPzn%^BPx!SK3; zc=EQ3kftR{m{i2Ib^}sukbF}@N}nX`A%VnbG0!rCqUfW@OO|4LI9DgCb-do&Ty2Tq z6)9Gl6-~!1ZE~bhH2p+C)!0Pq4-S-_0X#J>q9R6XMV@&Gx<7fh=6C{F7Cm}DY%dUsB>yyF z^-wZLmX)}5>kjsB-+{>s*x=C1H3ow|H`!WShSV+0Do&u{?~LkKn*PX?5uX_ak(+ca z)23R$Hl&6j>qdaefXtA*b-8LtLah{WH(X3tpuBm_;HH*I!736-8$*Di>m2*12~fxz zV7`{U4N$^xxOe|P zwARRq3?2?uy@bhuGB?PKhgKxvM_>|(&=5f*r2CLmGxchPAAIk9y#LpKiREGnAr(xP zL1xsbX`Dk=7U&O$s49!ecnWK47$YzmJ;jrQM|kkyT^u|PjQ>X88FbgK(E}u=H?bQH-;#RlCL$5qCddK zU<;eudnkJ)jFFhl7dSs1VWUrttZG%^{Cte@c#5jFP;Al2GEx+542Q__97gAG-os=$ zYFlA7nd9X65GT)`;r#pzv&jTX0BRtS%bc$nOOk96uv#og{;VW|P#A1(;f;sy;NBZ= zVmRDJKp+*^a*3W4D6$?@W+0&9oP|;f#%LIAi1`2kAvLKcxZ#T+AwAtIRP1sSm19N` z6ct%YKsd#TIDr%;LZtXNiptbU3+}9=dxjfiN|HQYf)oSMhu&JTS|*N2i60K$dg#m~ zAZ%ce-1=UG*A1hYPoQ8uPo*zGTx0PqS`z>QCl7S@`LWOg+M?6BkeZYPfdin3f#8GV zLcOKf1EfyyTx3eE=;n?o3LqsFgn&@%l!Cy|cNJeR0M>P*=>lA^tmrZH9B~{U3rBk= zNJzF7Xu;8U-ZHqAlm`wTN&%X!VV;K|miY$o0W5q(kRjRWtgY#M$8#Y7t)o)H!Gj|~ z84lnZ9^5F=szpS4*wL}`q|71D1MM?H$Vg!#6^s(B1|h2epr9mRG^-jyOf#T!Y#XxJ zDP!OPsOb6UMJ)u$X+9C$OEyj^J&ZDm3xFU1N9QVVGC}YjLXpMACw2|Usw7zr$%BLt zXkC%~*_6=m!qLn6z|924P=(KD8GlhN9rrEzI>o|^3Xtm*P%rx5tBSv?3e9fu+$>jk z{A_|pi_Qm>3SYXviQ5C6vbSH<0g3-RJ37N(p3Jeay^Xt}!g*fcwzN1~O5DFSz#x+^ z?6T0#ug1@gr+74SYd7t?cZayYnc@8D8J=bX{42N0YZPaJb4(lPvVc+7OAxr~_&%?J z@p+>cuhT5J>Uy~9Yo9lX;JPUXFKZZG=e@q{J-pBgU_~+Z-{x)VT7ku8=v*9l8 z-r9w3F7Wv940Yq5Ya#gPqmS^#FMbhQTU#&v9M?IQ*S&@=|4~}eMx!H@ikoD`6SoLT z3qC+-1tp>lK%~4^86f2Q zMQ@*H$!L2`xlU%i>J+jOG|WWk&hepShweFu;2@H_5^F(zCO0_*&kJpwK*&q$%KG{d zH;&X4@Tt&>69JiWtx0-X6eY4OM{L`4ubmh#7n=@LxGQ+iB>cLeg(RHIjAg06FeH{ zJ6YiZ+T;u=Y`9^gVXZ~eG%!ZPxhBQtMIfh?$ry~PU3 zXp}{nWauIJY%N=GXj2)dHQ&cNF+fTQ&YwzXjW`m34V?UZnuE%E2R{i540)OZQPdRY;ortvMlSwZHcw!6vZw^ zn}^`$pyT_X#&~>=*?dC9JS(5F%;5H&eMk{d)hqOzL6#TDl!Fu=T7XkYG$gV9)A^0| zo5u%_@Mqup6FhzTn3N4VhnD1lpU+p&Cc`^lcn@#A^A0}!^bx-M-M_+ovVyn3YU%Lt z#~)#5_W|B`;~_r$;QN?PMi`CGaQp5<6upw}cTiIyFA6GTEy!OUIEpKf(#i|LAV-C& z@eqp@vcf?-4{t5JvIvq21&XXgDpaFKcQGI1=-B~2`0ywA$&bH}XHOrauIJP&6B3!p zkmV(My#agsw=vw@M6c{an+!r{D0&;%+TOu%Fod-=rn3=_pFKec4XWh~o12?hEh`*8 zImE%E$2dDa!sy~0)9DmC*T~Bpx9Zy{dL{b(J_3Ncu^3OrI6pnc)2D|Rot|G`YuX(C1{0M+bO8ejf07*?&bjbEm zbI(d8tyDUHt%Xaaf?LYSU?F9YV5zkdZPTs0zXDHEEl9l1vfg@>{Up64(~mJ^GQV!LgWKUwr8<&Nh)UF&;sg( zfK()V7ZRM(BHD%qs|W%sCq)qO5*(H1*a^`V>(S1m6*YT>BxphCD9z%O-t!Pe1oDu_ zrj6z2XUk^c&6fXNjW^Lu|=_in$z;hZR0ZXsMZv;gbT*^M*!fQh!27 zNN&^!D7fGt9P@j?QNX^nSwee=Akny*_YriQ8)jQ69XkNmQvlq={+lcSFDgu4R7k$8 zka^WVFPnZpuQ*$skMV!}(f9Gk^BnK)Wq`LhI;rvAm)^ub{5ub^n_UN@;PAu$>j(I6 zjt%~^uPM~iXZXqXJ{~O2@Xf~={)4~s3;1G|U0HyV#twj-T1SX5Gxa%JuPIN?0VUO_jG}BZ9I%hzOF8b7SaL1A@I`N zdjHyEWu3!nvBGM(#B{O1`T03nJ0=rU)vA;0&K|o!g{Mci86lDfJ3(#`l6+Ee6;6}l z=+TP>CjDG)3Ou;~5D(vc8;ivp2TvYjG&;p{HG}sADhjDd(r#$h8;$D)cx(v7t$L)p zYppubfMShMPwxvIzcu*WwFP`+NX6n`NyUEDuokP>jWvp!z!c%e5lRF-BoJbr<;e4l z(iT`U-9As-YtuQqrW&w5z%~v|W77tfAVIQ22yXL?m5Q*-Hu@^TzLJ%KH)?#HwoNFG zy975v!sX|pPt6MFSZ*!?12#ja2?5OJGt|~5*=OA7Sj&n7j=u^%psMP03@KCIacTh- zCz;71r9_@-F8()RGL5>9epQ8&(-X)bkmWfwd_pWbTG})?Lpt#9jgzu?jWmr#T~m{! z&?bQ^l~zoT4zP90WstlHm6DYWAy7nCq+@Cophq|lL1;XQ&7kPL%bQ{V9O zP_cp~K0){qm98D5O=?_%iP=g5P!z|fmEvb1;Jn3ZIY(s!#q%McX)0Wd&T;$h+t|Og zhrRtBc+rqwRwnLfy0=77bRDP2a60$n@fiQ&&;L2T`~G)OE$4jxH3Af*7AX5Ue&M}e z!aw*2{~oeD$2b0$e+2IvqO@B9Zw1Dq5uQGMgj;+2c=Blv^Z6X($r&-tY~roAA7E#97qj^SPY<7AGP1Bu!;Lu&!(d6R8q_v$W6?vhJ%EZ( zAo{2gxZv{qY~tn|6@TsXHKtq;|AymqgMiUlyN(K0fpui+jdf|=4RLDBjj6ha3WvK&wfkCXkxuND+{-W0h;yw)UAR*T8~cAYD{vsWwz7 zaekC)3;O8eCys?*Q^Yy;L?QmJzC zlJbG$WN9y_<;`lA8$keXT1Z}}VE;T#f*TbM0YFgrjW6E8fAX9Akha02AAF4e`dgpi z-}>4eOn-EYQEo6kZ!oyOg?IBBfAP^2kE?)(w>R+BcXl97p5dQrN866z*Y!2KOfU}Y4(^k5sm@?aCW{Cq|A zO(*#`J;$#bH1|CF%BvLKukw4Z+gSNL#Qm3XE-q(;#_!*``w(CM*Z)ntdv^={GRHWf zQ=b3(;xz9j_wi@JI9H#K>mFCm5z?q8v{KE@WA@9e3J|waD|3HqJ4^ z$NP3M?wXz>OiT#R6FLh(r3D8}2k#cA-9j!FBweC>mu%l{9E1dg^Dulyyz^Ktml%yM zFd2_A9ZxWu&oP_NF`i5?olJP~56RmfH#0F?8Jv|KKg;@Q5NlGh2!V?p>2QgNZ?wjp zJ8$5@gEvvv6%L*}!qL$o`*|$@%aM4#ef>_szg}p!Q8uko0G&9T_`A88BBC#!y~;|b z@1f7^*(%T~I-(UI@(r8|ZF7Ww)^!T!w)zPvXF0xKr8M%afHoNwXCm%HSc32UT6AQ5 z?dbhW|DT&pS{sfpjOWKC>p=YXwwU*qQW6+K$56SHas;{!J=D3jQAyofa2lI&|F`hRSK&~?rd53t8m zXkfQK>$CNuDkVVp{JHrx(vte#8?jMVUoQyD=M zD=7*7R}>jXW^(caUn@R1mP8vE6A9WLLMmt_;Jrdq$A)66lo=*Ql|=Lj#}QNXmI@KU zdLnINMN~HMt*WJJl{XweN5>AFJ5L*0r40kc0<_UkTEb)sTf5uvp~3m-0R#e;i#dF7 z7!C(0${f;=|G%zkn360|NVX%DI2AEr!8zdLPd>)C|NPHza{P=j=iEdS4td$b*T4Q% zeEqk68#>GI%|HDne)7{FGqF4t7ZSl)96bIRwud{oy?+Z&p8O0K=cgD?F0i||hpbe{ ziyYc-U~^*#tu!iEBS=zlftxE77Z-~T1!;0fsnFC7s?`!wYGgt|L&FIN=LKxzsY&1h zyst486HF!(93MZ$XmoB1?y`}CKHUOBV1gZ;^gcE zw{PFY?%pj@HB?IoDY3b^#o6y3tNEOp@PXp`w1GAfrPeSe!`9w59z3{@!C-*V#RL}@ zQ%EQ*7E3G^3yek===Dmx`SwG+`PO~(27PSIE6f*jOfD|qsug0llx!~wNj>DrUJ*pP zeb?5on4}W~fqHA_(z+H^bZJc#?E^_9#f;^mO(tKrXZWAz^~|R(FHdnr%iD-hv=~t* zfMipnzJhM|;!$!RNSf}LtnQ;CkU~?FVuv0Jf{kiEDTyLzw7bqnpj}iI#&uQ-Vt3H* z@a>w#09U1CQnN(`Uh?V3rUu#w(b&+JymnJODL*F^jSswYP&&%=1!M^r0kP^^Q zAqlc_+_Wya?%(Sd`FF1aZF`Z@B@_US8h`oEKENO9 z47ZCMzuwgN;K?cevw+<=GJO=PdzSyOKcU3#& z-xh0A=Tx-BTwMp6GRqFc(OMjzo#FWS7)Q^ZVKf?JxtOD_Nm5orB!F~A8vtTi(r1vE#C@m4!goN3=BQ+#CH zOxvb`R{}~$k1GEz)k;8x&?xdA^1MJ}SFpB5S>)&y1&Z<(ma{1y@w8rRgT_}$k&zNQ z;&VubPUD6d5t3!G@!`Oa3TkN9$=j+70l+Ax$#NmQn<#sI2&vFG zi{KsVYK4pQa~vNZ;pp%HPYxbqIvZm!=wWkMqF&B1xj08vH^@vuF<`3|nx;avTCz%k z?ittAs8%a@=g=!lXsM8AIpB%$g5V(;tXHj;SS=T@)}r6vKyEaOUWqr~ej8u;)vsW< zv4Qi`5q|u`pJFneVRUwmvx{>$-{9WeecamL!Nx`jWhA`UD2p6rzeH25I3iPaR8~mf zTY>eQd&J04y5o4784!Zy_&$*Ud1);OAo>4si-J0#B*~| zBnVzqBhY&fNrBUrw@8gsXC0hvP*)XfW4TGgQg9i#VVlbE&eMaQ2ayWjTFuZ=T8i|H zqNXq_(YQg`7U11_MIrcR4O)wU&h$T0<0T*of=3{}s6wDZmT}1Rc@Utbgtr8HRZ!H( z5CWc?CohzKJR?1ENpp-GaZa0tBh_Fot58 zgR7w=5)(o~0YXthE~EN|7)Uf&Q;?v>hE^U@dI)$}Z`n>ojY|nZObyXK!>Ngcj=e8H zDj?4U@r%t7 zf{lIVcLj$(`ThY8j?N&x!|3T4Z@qN~Zxq0H79NwkTlg=2=QhUAp5YIs8o&Fmy^F8z zOZ@q_eu{tcokM)}@7=|3W=B~5>bv;mTN%FjeuJ}t2Mho>9Q^ngfBdP#-~HM<`0WQ7 zzVj#F$A9;&$N2YuZ6BNKpA>)k{vi&ZTtEwt#rYV1XNX_DmElJKw#q*K{_nnv-q8tu z|IbhH;lVR}_oGu(cW&c9{`wo(_bYtkpZ+!e@%uykmtVez-*|eAcfK&hqeq8$oDK2s ze(g=XS33NkfAl^4qdz^sul`nrZ=ZVnr+@nvetTcx{YO&_d87L>8T`u%yPMMTUsT}V zq-eY@dH=dV!{@!nmvIuF_qCfOOIpAM8@Td@I3k zW9(8cD<8F(MJz5w*R%_LhvM3i2nLpzi4<){9bp+H>ZV5B%y6`D% zE7~M_j?tsVwq+Znjly#_J~5Us#uUaWi-?;o&pFQ$$y?WE9#fZmYkM0HA3lJT5(ftd zI68WY<#Gn+8VKRI`_Di-LDLIFDnHgO67BI>e||^FURSai($ttf5qTaJ1NW%dHHN&V zwy6mW$+3a)s3gfeD+Jo2+vyWR1-99 ziZOqj7wlZKM*r{ZI!zW2tu%(iA<8nx{QLq+Zlf$q0yHX# zt?exg27TmAwvYFIw?WdC;s>@NC=F;MVJ&%eRr3AwMBZ6cRY)FPDGf}X0}`-Y_!D!Y zy>49~4gx71RC-1v?{H}S%N`!EKE-@SyAb)RJvSy98VEX0GBQCtP2Z6S<8)%BNTpU{ zA~cPM&NLI?EoPG$R!fW1vongbl=L~YHn6^F3m_NJG#<{9dO$|+bqe_;$*gw*2Tu<0 z!B0OxT{U#iSqFHD-CMWt>tFp%eEsXciy!^yL;S%X{1bfq$%ok8-NSGG#@Dbh7~)%h z@_%DC8q;Rm2UL~E(a~eMY(W`RK>EuM6s)hU zv$nd%Xt=_l*P~zbX-oq?a59l%KX^}BP6aDrHE#;)STR@Rwr&6jn|wR>q<_e`{!EraxQ z%e^2qXJd**D(6!p)-?hIuB(c=Y;aBNco`x~Agxzj0zjJjTPrbiUGy7EYNYPjA*w3c zJ&Drl40kBDwS=FbqT;7glBk&TH`CPtg~Jy-n!D` ze|+zRxycx51*1Own1+Xfl+C?6m3!AZqeeshc4n?w3$g>SBD{>jb^{To*q z=7xS~_-Hcc$_rO`UT6U-*3XiSu)j z|NVIh|CgoZpZD6I^?RSyB)aJMo=5d?nTEu9q|Im956)|rJ?q#mo5FGC_qdwM)hwDa zN|r8vo|oSd96nM`=R zyUp(I4)gg;rbkV+H0{XH${@_4u*4SdXJCHfp>uQqJF!8i=tB#1MXYRO(r3^?or*c>Z{~g&Ye3S^Jx1K)7df3SA^x5p*YD7x@$uCDA|0n;9mB!FJA}g9Hs(4eLks? zvrJ&8Es$mEuA)y=e5R=(lDzbtOnzCGziioPp+Z_fU_~LtLCX70V7<;>W8-;uQHt3} zib8NSu0{uara9Dk`kx*p+wl%qik0dhlxOduZrZ&Jtdm&9rS&8=0n&z1ceH*{O8C}N zptGz6OUbn@$`>C!{N8&Uu1zHn4|HnUsJ1C#jKyey@#zq+#UNzq;KjSXva-V3`Uc0x zhq$If8wkFku1bdEAzPd4Y;JBc8jYpt6B|+KT&D9Pl2hF>Hl#Qa*{`t%t2IqkpJ{4J z#A3%)Kq+ZtXxm-`qV}n~Ya=!W6moqwO?Tbc+(<#=oix4_Sd$7G$>2_g;C2(f6knJ& zh{9`7ZS-Gv-};tO;=ITEc%Rq;Z7eoI#G06SkC*#ydOE|JjPYnh(JS!E$#l7mw@Sr- z*XUGH#=4lz`Pol?!lMU|&?-Z#0%Hur(Hd`m{Wp2x_DlTXAN=2Z|NGx(?_ihLUi%z> z<~M(f_4QSL`HP>kx4SE9t5({qn9h&c*?q*;`c;aoU~+uO?BoP|pvVe(Js6Ew7>$SI zxu$0|{r&)@3{~CGR5d0}|CRRWumEz3d4b zwFDEr;(aJL*sl}X3v9+SAWOA%iQ(w#UI5!4MAS*KFi&7xL%5-`1I5g5A%Ol{h zTFfbWIpg67=K_W={xN0pWwVS&Trqo#@D{~Mb_4~ z_~kD?L>Dt)2k;#%8cjP{t(`R!yYfbaFu`fzy3bQlZAL+l)_rai?^=w zXTJFbZr!@hZ2BUuS@4T@KD@9VIkMs;*WFCUmx+W|IQ1%x|&lR?Qv%>=eqqwX~b(U zZ1OvA-(nPrkk)8?Rb!N5G$=6bdzbhrug^x3xW)_oC(2@VDjXDN-Z$3J&wKod#(;x1DR{yMIuXBFR{rit`f{(KfI#IJ*k@jOtE zPxBf7xitDSYs+FgOI30A2i+Q$7k)KLpp1RJlZ*z8Sgq%qh_;TT; z+YDpbl*ueG_JMX`4FMH&+ucua!4w-D&4 zGb#GdWW~}FiKUM306r+y0uMi-UPzM}mq0X{5Tt3LmLl-P$Ef25K{MzNdGUpp7z~Eo zyLXodkM6Np%y7OEX=sp09D_`R5=^Y!{De*Y+8_up-Ak!+XbqhjVrc#^O)LL%1$aQU~>qXn_ zvc^WKwT=t~ja3@2yLG{bfYkzM)bV<1>WZeWgr#AuL?fjbxx{h^-PAn>-1H~Xa>o;Ji9{Vl`{|v-Ck0S!3?yRr@-^2f z9DF+o^o?XQr>UEe%jM^jxdKxtPcIRq)E^KF{^*w^+<;zVmzEVSj&{x^i6Gy1^T-e+g>}zVn^m z=iPUH#`O3^pnWzcXdzf@*Kj;JWNYmTYok^6CP(b;J))^z#;6{7ma{TiVRLhxv z8nL#qMbTejF`u*j=swevV@^+}RFxFzDvOeIG|CvptLu!$V@^*_sTK=@bCio2hkF&1 zqeE<#Gnt&QySu}5a*TJ5q9`cx0%PU*Q8zVpRRNB&oKlx_e(?Q2!YakJYuCAZ_dY-T zlb39c8EhiSjWhOvmDFjcZvkqt&L4TQ%{fi5As}?-F=yx0ei4-*Cxj=BoD+6A6 z!)-o#@Q6hvHBIocE~((Swza{_ zuf9T-8TKAOqMzq%t#8pZo_9X@m=Eu5V{L)+4JI^P-CF1Ex4y`DG-O^@Xk&TjgS#|A zwZLJq+l3`)V@#_s8hp)g(C2Gk`4TU`d;@U2{_0H@^ApOl;-wd_vb(#({{8_3#p-y> zH{Sj-uf28?rF*OlzsC0VBYySKeI%Jlp8LsCVw7TD*U`d4yN`2CE%pZG8IQ(%@e6OT zxiKOy3~znqOMLLF2i$wG7oVY``nqxBD%Y;Af}eBa`UbDR`VxHH{?Q%2erw1pi#z=1cNBl_U${n&V=*r| zDm^caM*RJsJmQBht@7=aL;kDx=X~QUZ!mxFeg5uu6@T~N`Z|B^EyG6--eWp*s9(c* z{WPD`rzt8wt?J~{yynwh_p@*iKJB&qEDpf)7SErC?eJ+Ai_0GCr+q(9R{lW+RGbi3 zW!ZUa`144KIG+G&YEsgx2wrgvUIVn&hDWqdFcS&lJ=mtKCE^^Gm=KX|~s z`*&F^rZ`{Wnu-KlNVbOHMKUPhCf7D=61{#IkhgptBpX9#vEWQ>P`lY{S8tI@Dlf%S zw@>p=C`r_rD8|%S=paa{otkT9$%=x(a3GoYoK>fE6XPyoPXKSe1-to})f>F0@kx0R zc>`Xu&6}o+rISfO@{NWw%7j-5+~>yw8_cyTsG`YE$<^THFRtmsF(mS zo1HQ_KA|WyHg{C>8FjfJx3)C8SlUMOSBeN!xz5zRbIILA|HM95kLR=&zP4}@+@O* zeUl>Z@%YgWSyr%^m&~Sf>bgQ}&2Y5JaJ-5O4abLj%%(FA5BC|bu5);L%+AhzPEYnQ z*VoByMz*@jOE11eIXwhwUVimeHny%aIhk_*?p?O;-=&;R2)@Qbl0cip*GyRTQd_rnUFDW=>hv zC<59^#OKE!eZcX-J|@dKnw-)&c=?srcMl^0*S$#9sVwa4SJ#?WZG=9iP} z%*12~iJKMPfsT7<6(azZlBh%z8=oc?_dT28e6&GD+B!-{KeJeP0-C(&wf=M32wY;} zCVYwz)lKP{E!238wRv0<-O@Vd(Iz!iU2Cyni721IZ{qhCGdsE z>u6VB0@!jEUfA9)XA*u?+oVh?A}L7ac@;PdzZFTkkKo?aV3ruWq!36kamgyEjD^tP z@r?RCzWk*(_}u4TLu>NxuDIE&&#lLXt8XK!a%K4O) z{t7p)ZE@$`BPP=dZHj0waFAu4?MVq!rHOl^^|e(tH^$WE9BUNCN}t)RrmAKPhwF?- zD`eIZP^_(Qu(7c&*NLwg40_zWd5w?n-k0We7N50|u^^45Jg(0Y2ke|fN6VU4j$+Vf zxUwQ(&&D$x4p`q<<(jFDkbmRZKDL#$Oa^#Y|v6or6Soe%VS19?tlIYoa!Kv6q~ zi`SnE4Ylj8Pk|2_GSesc1;$9^XqFdbnW#N%W?HAI^nPVS>W@&pMzpKd&{tevT@1M}MT-D31FXFZ3*doHt*( z!C(I3G5^g!{3-t(aBXYMfAlZjEa&#+5=-7|Uue-d@BX8^{GGq| zM>ycEH*WCnf9oo4XP-f@~W=4aSjc+@Fj3j#>Iy!s^AtnnzT{S4HV?!VniTccY)Jy7tW$*aYid!lCVuW3k zyr;&&>FJb5kG6UE@F9mshb+n&RaM~{AB(tdVkw{{8ztKfj!LF6t+c)KyIZ9RvCwI| z-tAYVsbO*{pd<%AdcI?00WXDUZZmG)e32VhZ*u?sJsv!~%VK^?Q_rcJMJu_N39Klh zoL4BTx){24T25OagV-NP#nV$b4rwx*3gY&>FVmHmWTIW9AWOOJ;fb%)DlbwY-%7`o zA zk?9zd!l7xpbcRkj(J26uq9DcYh2$qE#u`N!Uy_x}R6Jm<#TdC3>c(M|#w#Cv?)pqb zqf!FW_0Chy7tqV1WWkdcIYCUc5ptJg<~H6-4j&v=iSlkXn_^9lZ{T<~p%|<%81xtp z`dBRmc)wTB9}KX@wvmK&?b_!h>g;+VkVg5;M9mOo_}1dr!cU9c zsCG>(B#7`+56WW`R{&34S5&p4M=yR}4s8NT3zW@fN@Di3!vJ+v3&p=F>E|(>AX3)| z(Rj?YE1UerZ~hK%|Hil2JJ{tP{LlXrAHV-DN5@Bu#%pY@Z!kSMVt@BO=5w#nD+;n~ zoflqsk@@L9M@M_~2P<5=euJC03)a^+84vqBy!R2OCr84d=nu*ARR(KU7;oMrA8g=5 zMwre}VMoVqT_GKS)}rK5{nX;i2q=+BFM zJC7+O-jQiVSvh%jDMgkUs>b7+1{WhR6NAHMnSe%{hRh0p(|J$r>L_6Q$7x2yTf*K-*+Z3b)o0ke&@Fd=sQG>m*&ERbHhCz_cE>FwQQ`$A_*_ z+cXVLLu*gy3Vj#(B(fYj-=LjXtz`KL?YfpMTsoz{=(tY!fJws(TQ*5jBLX=FpW8<@F9KI0- z12NGl&vWt&vOGhfSy>sQm4NO}Pv&@Mz#E_ddRSXvv|>IlnVcTW;KgKT8vI(xXKk&e zu4=pz0Hum?${{$k4$K!7F2KromE6M4?mpX(w`C|4!M9b@Fgcl!7ca57waVnQo=+1rKd+$T4%Arh;pfo`%DksCAEX#z!Qi+AgXv6W*DGwez z=GwKZ1n2nGuRi47{cXz1;e)V^%Btqk_C80G8T~6;y#M|ke)xl*b2{~(s*br#t@H^C z!1EOO&nnuy_uszqjPD)tyMO1;^SkLlN2~nRf8`terN201 zQ7VSR0eL1~z`ybz{C4|$|Kjg{i@y;6|8M_>{Os$0Ws^Vq7f6s(O0^0QaB_#1!oFYxa~ zh|;&-yun|aPN^Hqcr=Wg*6aMOzkQXzb~K?j87re9x#mJY{ACK&C(r-03b?018lT*V zpZB?5#2-N}dEWcD3}EDWivBaN;Xy0g#%arhS_+xEmg%R}29HcZTMu0uU!+^NtJbRBka#cg zU&&*f7X@`)FC`7AR(6~wkUkd4LW*~Bvtrr_b}N5_2m_O2olGVi9v(88OxWGs=kV~5 z#bO~vW}*)(L|V==u+LN1jTCYb$deKXBwt;(pd* zVj(<$(8BcM)v*K(RBc10jaN*QqnNLpV(SvT?rD%tW3(tl5;5O-vRtOTS+sv7?t@5A zMY8W)6Fuy%m4u2?LL&Q;IzSi^F~>d2muS%}T|;Rq?qb@2Uh=c2rcbxgJgb%<^87+O z@lW^FvR$E#uZ*8jSoWVQO&k1Xx(GuZuc0J=O|@ zX_FF&)xsi1ICL1MHN2%+&2rYQx8iR=qc9h+8GrbYP32m$Bo z_V`eWrU?>*SA)qkE>zgeV)I^P2Snd;y3>N<(SwIPdhmdi!GPc$AAj@#@4f#Kk9T*e z>NzUZjnwp~5V^KAj zVni|Aq!_G|=PM|cv6z?a?d`Gs@GeLDd(7r@b`SPAIh~Mc&DwaxV6Z~37}DzvqlG}8 z8BJAja&*Yv<43IYGMuaV@cnmq@7-T=czA%dmf?8JU|w^ucSuuJ>^$CPXJ?1WIl4L}{^e_KSj$TS-`Ob=!=~GE3u1e7q*mmce+9EGzIBW{Z-=;)GDw z5e`^VyFgGGSFT*+>)&{r-~85Z#Nt1bWx!sD{?~!hQ>RZ#^W@x=+YkTD!J_r@w6QX^?;+2k2M~hMpqoq;pokvAA z0x2rccg@SHu3HG9b1~WvjgL)%Zd$G)&%m~fgCv7Zi7d6NXc`%SL@YpSy^%&h;tQnT zBWt`g;M5sw9`VWKeL%(a&N(MZC_%;Ev5F0W=8RfNk_80F8kU}?;$Vn&BP%ez5J~z< zo4D3Mo)?6m+RsWwo1(F*g|!-Mshc28h!zm5aiPY==Bzey4GG$0xk<%8TT^KGQ|T&h9>CRpWz}%zK2}V2s8sF=~9<+_4-TpYV8lpO;>`LE|lt zK72&c%LxJAfBz#szOzlakVJ>Qoqg`ydB|Y+3R-#IfA3d3e6WqNISC?}nyG0|qNB~b zF00mZkzlb}!{O0{U%vAzR#ry%rsPLI{8M)KClcX@C|s1Uc=+%k`};Rp+uXppIb{Sg zH;v_^JCFE||L633IS(IhvwM6>>8(67bAz#l%;Yq_p$Sa~S&pE`)6)e%`r*$xJ)WR& zeE88FjwW+y=6c%U&%*~t{NDfdUB)Xz9`77-cv4c;=E8mRc{R|pYLk`$@MJ;utSRL3 z=Kg75foDxFFZ1`O6*?Dv{i2icGj6+dOWkheAe;whof_o4$k{Po<)I|e=iuX z_MUovj7nY7jFpx3Pg2{pX0)+(ZgJXe)YXN>=hM#FlV3kCHtsT$>+`Ow%QP9zYbc#} zj8A)=^U@_Q(+GQ(a^bx5ci#KIjOyW8=lW@{^W^(^R+Da-Jbsym%Co-bqLheB*%MMF z;6>tY^GvATjgL|}R*>uj)(J^=L-DP)Ym+5TQ<*|F2Vl=V-H#!3?8wQbN8*EfJ zxZp(681H`-J>M!QLWqT(NkxD|nGB7gX_DVJdh#0SKD_3J#| zeay#q-e)>J#s~48noQ%#s4D^fWs&F={$WRlbEGc2Fdny zaRM$w9wi&d;9_>QNT{2}MGJ;ZERrI?`IwXtl0;KuOoq`JyVr`oq!5LTFoW_7gAE3dx7=Ef$o#f+oFW4`-G-{;-; zK4dnZapUGKHaFMVef*G<=_%{$W7fta=BFo2PY+OBk>WushNBTmd1i}}lj)3=)drgv zj5n@u%Xw@*WO6!1*%3|+sY*q8Fkw+0vAwgy$9F$u`{7;Y(+Q1pI4_0ga4=?db&KI} zh0GSx^tG8NbBx0IhS_Yw#~;1R(f%WxD|vA59*6rofTCBdFdB}?Y(c#!nN25nUz3}h zes2hP`u$#6GbwLG2yuwqR}Z z3Y(i(=?%wBPL5d252?xtN{JmnnLaC{4PJlaP2T>-+r0SVO$I#^W&4RA6ED1IE$I#V z()=(Arvt`nilUGytC8z3*btKSbt$~kZ`9xoV-$_Pq8gc?bOuv(#&Sbvlz z()(3}1UEEQMN`M7w(3i^I-RO5J&RiIP5^C&Ml=MaX}o0CpPo)RJUV4KypC6}zkkTy-ch8-YYc&t;~9I0 zGj3kLLghVoA8d2~(JoDlh*jDUg5}_N!rtK_SFdg{FK6sN-lncvS(9)+C%L<`$s4I!S{Z| z-3PlY7IPllzmGPOBye&vlV-hD;A&1!kND?*`~x05d`Qzc9zJ-)$#j8lOq+5@ozt?D0$Xv zT!zkmnVo2ZI6qe*d}B9xghk=QVcDS;|^}eMmlE zy2+_hGErNe8XF_iiL_~!!fE+^iX^_vQ4cKBzsL5YZ4M3(+27lfNr@9kmp03BVv)=rV(xnA3O{SDaHujP|Lv)F#nd z%SP7KEr3WVd5shs=o*Qi(J@Le9j{V~!C-~kw{Njn%(;8_Bc{_6nx@1P3BF!(la-cD zSx3ZAF*~WS?Ed(r2)8rY=}%FFJZpUy|MnBofBcd|^XzN2K6=d=+O*^XYw|p2*k6gV z-@46+_mT79mSBpB*u0!x&`sK(T#I!VU&Yz4ElXRwx7sBTq-!bp?*+uyMN9f6wn0nX zkG}NaI*4P_xHG^%W2Ct0)Dt?A>}l_*bbPd_1!85;YFVA3S}Cg4Mj&Fw(ln0wY);h( zV63jIsFn~2MxGTA0%cjsYX^^x6FO<&h_$7zYL1SMsJ+MNTr3r_I3p}Kjy%g(S^8Xz zF*H>z%>tvyGfP!f)MZIg^s$+V76P#lN#jG#f1U{l5+yJ+PfSw)aE)jQf)ntdic?Mu z*4P-&nJg~SD3Q2IX#n|Xwa_FhKx}qN1<_g+v?AJ*RGelC1geYC?DEw!V+1x>OEN)d z3l(WVS(`B!3|K5mcDDDidBNdig3(?k&zq}^R&p{UzV6htIzBq!{SV&d@#9BqZ*Oxt zJCS2cQs$s=uEO~mWu@S=CTC^1%KFBb&8-cxB4_{c112XYjC^3cw#rw(_7+=Lw$NJh z;~)MpfBgOLF`G?U9Twmk=Cf0bfnLwDC<<0qR_GNO`E*8}7c@>721U_hb$wIrRb`o1 zn$zim!;=RbP8J-W%s4naVsC$&$>f0G8v#>hIsIObwY7En{UQC{5Nk5DvC>2}8f`TN znx+YyP9~fj9|4}qIo3C~7z{^jZCzz;W0RuS$Av&ym26fe8%Kvs4iA~nrsSDiSF_oa zd26+5@QtHxDzwq`dqt~W%QEPDAm00BSy9yu^RmR36;-vM*Uwp7AER|(`_VcF`}Zjq zPS$a47!JnVxOtn`-*}T-w_c!E6s_;NYp!;=KOq*k#>ynQ#K&y(yj9QA9ak zoS|b^C{ZS9C5>$pqf3nu;9!>LSer!!lQf8%rjE)YvBHJ+X`)(%5X&n~WC|FGH|hR8 zB;cSx6>U^3CHtPBa#XvPx6guDtSTiO66ox4Vh@N@;LwE;8l%C>HUEoWyvJ-dBZR>H zdym-JJD~9aj~wIi$&8=;^j!`PCNxdW{riuZoXl`8s_B$M>zt$Gk{|r=9d6#Z#>vSM zyE~6XrmrlsSxs3%&>5kL=>{4OkLUd8C-1b+n5JTn}q*Li~ z!8Z-wr|U(<>t1(FIWOQyvD3uoe!K=#0!WA)4TY#V>bfT2xXhpP$p7bkzkOa1+4JVK zU#0+fo@lw}IT4>GTJADM*YfdwR^Z*!e)oCB`m-ju7v-*>XUn)q{c%}X+^6~4Wv-|H zH%b4Oxeh+d_kY@W!^?jEm%sdF?%uu2Y&LuDduX{BxpCtLSFc_@_dQ((>~~%R?o#&& zokUt`MNlFa42kwj2WL~tw572;$P-j3f`xn+d6lHXY0~=S@ux!Y$>Y{Bi=LQ4+)c9s zb=7cmJmK-qW45=q+27w|u_&qP3ZrdHWiU~y+8 zm2!@fZ~wd|?Q)U-WVGEfO&L^|qYP1Y%9&zcB<5WcWSKMIqq0H=9rM#Q7#(G{8NH&1 zHoAo^rs<3K9_NMJo(lQp>3tU+=$FXPu9e{@-+qYpfOH)#ljxVPv1A!YpQmnfv|SsY zn7;0OvZ^G$MBJPP70*dJkGf4NkZGOnYzVrGMM{>1GZ4n$qaWC`S;^`1XphktilWD$ z-xn)DS;}NTZH}#_X*@poC>u_j9WM$L@6pPT6)DouwM~_i;}fdJQ4|AQ<0MfaW>G)+ z3{ow}LAAUHAAGd3m@IpYYKK?=hQA zacPRzM0s{>8ioisv?hyiM@8*Q9&F#kWI0(sqUSu?Nh0#zH1%qK9ts3wHR#sOrHpgUnWOEp@JfqhiP!w}c=Q9rW zkNEiBE)RE)m@O)*x~8g1BrZ*4;Di2v;b6p|KOoOyQ%Pw|X3lA94-Jsneh{oOjaLRUuxN z(#SO?YpvJmIhmR(!Hb>C`34iubNWuLb!`5)B~_k}4H?y{xPnqFYKO-#9prbna$a$N zUiSM%%7AA{&o85TIIkh{L{Bn9001BWNkl4WH)z z__W0Sr&%(d{QfV0`O6$1AM>Lh{fNnALKXe5mw8RCHG{!`n>TOrt#5scYuBz_>Ylnt zL9zVz=LH(Z-for6Z`SZK)kwPQH_#vaUbbccN8>QldjFw=pwQqCp)1Oq#cK4Ew z+1xQ8NJ$sj#YI|@0Rr<`$-%)9kG8kje!R`;=`?otWwM_pgQ-YOeqE!}#xSZBRP^oB zP1#M7a<_Tw;`{a?V2yN;ee{OQbVa0?A$TcT8ri^y*dUPip-~$8MUQLOZjfae4<6oU zZ+{2pOT4cMs*wUEp4WET9UtaTTT9Y|wVT+dCt>K0Tj{m|ldc8t6E$A9jgzK z0v$JxrrmfipQq)fN%y+#&Vl5kH(Ga_$fZIuUHiruIbP+LR4KNdbhn~}pxXGkCaCy6 zyUDUKswHrTwgHefg|SgWXk+YjloJz~30gy52&~E&6TQVoWS31%VqFLrGajc8oJ=MR zS0;qhQ?$-#$`DgDq_LwFtwJY`qnECMAZ!6IKtip%d$?&D7K=IF%k^NarRZfMwQsyw zBk++F+HJYxM;2lB5*Nd@#A*oGB8{KGciaaydNI}^vdU5J!sLH_HG&D6RYy`uJn&xDB z!uP)a2YmS9`!sbWycG}Lb(>xJ6X9x6@~V^}&oYL?A$guL9FKVG>tAPmb4#MOzW7C6 zdgUc-X7EkT=RW^={@kDcZQlLGPnj>KtdBQD8mk<=UIu=JqR@n$5T%F&dA>kL?3$Hm5wC5Nd}jYwATsHJ{^sjWL?hcud|O&;&R- zIADHyh>cKCZ3H}8RTYaxCCrJsW;UC1GM!R3HO@CE6*xTD<%17?L0!#ob;IGoE>&Hl zWARh;SGjTf6<&DxRYt38D3ghWCxHS(QhB(z7IqCeAMIZ)Fi+{&JhKFsMH#zC8%>@U z3O=k}9LLMrj+LQSmvB zsJ7~8r82SU=AvmoK?03Y6h@O^;YvdbbwR4diS^`?et({$XFjseg;Q`8fC7NrF! zs7Q8-CB6%^QHG+R5Pf0c|9v zmO2egv^0rgL$i&gUE(c-m<&bRXz`S_V`uM>kMBO>=Ixst9!>c9JHLuiigNtMTAEtm z)XI0yeAxqOOfHOqRvi#zXrSZpsA;)P8e;{lD-oK$-8TiC@Ex>9nUq3vF$3VD8tYlg zVtd(*{6&TIXDJjeD!!gac7IWEcu`^gJg@odc%6$rtn-TD%SPy3)&}ueiuKE!gUd$L zJ@4!Ox;~@ly{4Xae_ZBgE~{v`j4h`q3cmgAZ*%kJO{UZ7g$;lwU%%h)v$eIwwQJWR zc zYu@`a?=cm*zAg4+(H=Y7E_%i1^94JP_jvH&A-lVKOy^T6mJ)4Ub7tzDCe8`?hEkZ& zO>adi?qha*l>aFe{o(M_X+S;Pu@3XVJ!|v{5 z=8IDlj-Wa}e=Dme0pr3Ma{qG7Q96HJ@ei%tAz_i*&)&pocbarAe{W}Vk_~E?i`>Sj zg(Yo3kk3QM!T=RP>b@jRh^@6tYzLYC(8|fX>o-ly8<%A7ddVUZ%O7*Lfdj-zyID#k zP-o7^vM*nXE2t_d zVmk{!7yswITZ-R{n_<-@Bg|$qTvfM{VA&9-Z195Nupd2+4bIgfRadm2Gn-jLq~n`R zQ&kmr@7zV(0juk4OlQYb3r|@t+V_^!5n3y}^Gi*-L{pEGk;b4h#e6<*C9{dGAj*3w zBCUznRG!Hu-FqxXWd0z4LuDYULK0+5MYx`CY9al%qR&JP7mq0+L@IXNxTg1>tRPzE zfXPQ3RA>w7vMk#)2j4X9<`(2W%rnUpSMmA|E}#?qFBUR&T~n0{7PC1vpE6%esjG&0 zn6tNgfH4h&m5lLlfGrGnKKhtH{nH<_Sj_N^0IQr2G>vS?#fkxtp|JG(Jw~gm^m;uu zH`ZBQU1L69pta`aja$6&`8PQ@oNzi@P*##Mae8u0zgKYU_KRG(dX*1;`4d7IVXc^W ziy}wS$C!X?3?XL8i&8|+r?nPsGHhO8Z61|Z4IwmfZ3>_@S(ei)di47%3x)l*m#6=5?tY&egc4 zZll_iRuN8WamI>d--rb(&kF|qL0p$45u>g(DtNq8Z8NW_WnD;03m=t3S(agJ7VTq- zEGydev9EF(rz2dgjy#qi3NCH%O>9_e4@SvgSjN0klv_=aS$df?8?$6ph|LUXgl6*p zt!d-f(wat_4AiL$mUb`l-|^X_V_c$+T$MJ`FeVfbd}JP|wo#&0h+4$N{YmS6v?N7a zlxnR(X|0pzj|)yd!z}p2exC2U=saB1T=^`Y|FeqY|1bU&MZueIzWJ%H-REhhT}FNLS}mdcDoV)#0{zp3AP+}tOq&U=RGKg+GAv6L1Sx8* z>A-RArX@<{PzHj+W+oOE($z1DoQ<^&Rt7^35BAyL-JvSyk|&Onfda`tug*{h)DuPe z@}xY)sdd*H=M8|T=q^j+l9+R8@ET0@@aQR14Y z*KxxYJ?$w;pk+ryU;VP*JQd~getql5?*6Xhf70>NHHw}{zgWIk5|`r1=2zQTh?~X^ zh-kX#N-ft+3oMMy5Uos0t6r8i%I}tA_K}@YH%*&qpOhALExG9}(5`*oNfnVYxFuFh zH;T*}@lz{_(CqaKiad|fe%YLR-JFRrM9Xxir!C5e8sqR_pI2TBy!7IWoSe@2@Pj*) zi&=y{E;l<>oK7!WNkrbCKC`rWl2}dET7W_m3!lmnGFekt;!-47B1lumDkVNnJXxGF zy2eL1zkrxz0x!Toi9M8Nf<%{jj6%SK@&49H4G?0AfsT_$kn`fA+_i;-BKLMII%G5M zqZC)Bf30057Ixk@%x4Sgs^<9cfF=YM)s*>S&Qw8N&6&+l8I1?rx^ay#3jFYgKjh<& z@6gl@<)ReJgvro4ixh3y)M{OjWqn?L`DNbz<~P{g-R1aTkICU7N5@B)EawN`|321a z%u3I_2aoYhATQ+l-P~AbWi;aI_3QldXFuR%dW_L>zOvkcDsaA%DP)YMNbpUYSxlCr zbcW4(tPIDDMk7{MhLp9Vtek*TvmS%th~Z$w%F38LFQfpC8}gJEQdS~iHrCS5`>d^P zaO3uitZ!~o6n*kukHK(=B5-m#VR~}HY<4P;zN2G~_aDoe*$AX?YdmJWI%f0ACYx8b z7z~F@XH!m3jwolVZL?vqs3^;t=~N2;$z;NGI;E^@7K?>kFHwCI94w}%>@Ma4hs+0z z*EYC%^#*xwfJ0+!kH!VcvSD&^%3!F-`dJ)L$EqXv7G9@~YMXH>?IX$fd;LC(vcUNo z>odIbSfeHDyw@ko48b*2^#brwRU?gqs;V&FW1OMi@5?$9qc^i$8UV?TW{oHelvd<6 z!!$Z3@HE0K(FUt5Xv4zQWNE4!kH<#%o3@rb%P8`UUM{Q~YqZGhwfr8N$>*PCS!>&o z=W_f+gI+rE<02^FM?p}J>vQuL5|h3$Gv z*XVW*w24YUEo+YJ*ad0d;A7)Q8uX@BKQxVN0i#+$6W0-?ePofuLOSSHrR1H+=}n9Z zR!R}H>Zb5vNre>~BrbS-aFA4*EF~MXd(F6mh)POr#J1%dht*M&6rsl|#`?L+b?G?x zxW<}vX1iF}<>zSnq@G~Vb!QN+JZRdpz=+TL+Ru8O%X|(O zMKYe1vOfQLIPX1Nbp4&jLwMS?@w|VYWt(`~*Dty+F7rL-B{7_LjxTecJPpA1B-rtJ z?!EKg(`E1XXZ|iEJKK4IK`CR}DRe9C*AhdfVi#75Gg|pu(=-u=rxQGV>Ai(B^7iFo zwrg%gvb&3MX>rP@-RJJTJM8ZrFkh5y!79K%Bk(7$qW83uziZJ*MyazLX`1|o zD4|nI%cd(Hf0DEj90A#w3tUOJ(Q6Q6Z@fJC+h&6jX}VF8`8*npSX*1;c0 z6MiET_$;${-!*2^|5lZ3EK?#tI-XScrp;6LUP239OOyBXo}?kv*-s>9>gmmpWEtoZ zHPk0${OSABaW+lU7Wk=A(9}*+E!yLc*~+!ZXLSSyx@aM>+P0fA@00vAS{J;dZk)*S zexwpbcl#Dc&`4(=AP) zsuqH}Q39$`v6<9vDnlep7)@dGwixhDN$?HU6e7nYpj@i4x@lh|H6$!RWGuvHTJ)rP z*F>;}HJW5LpY|lY4Xvj*>U^rrJV}tSNfa$cthnn1E^adkV zhHH$*{|{^L^(D)7oq2xyn20oGuYwvGxI35x+!U? zB~b)PkN^mGUHM8E5y#EL-sePQu_`kQQfYy@rfybdm=kC3{e8dh7<+qrP(+hbM15!CP;?h5f@LhV*%l6g@%=Xje6v5@ciLrRysmR^?eFem#Ly@0T*~&+xk&KlX#=w(jB}xKO zRpn+f02phzK!qfMQQ$p8X>ex=yGYD+o-lKPuS=>6H&IlMsZ|;&u+=9qZ&eCf3{;N% zyvRzj9H$(7eoiy9A%PofikJ_JC3q^9G^^X@W@xgoq$9lpK&5%Do99Xe9|PM2Im%0mW)q?wQ?E0Pa(3 zmFM%lGP<|K=G|5B-}MG}VFujhkN-Xr@olpCt={B&P|>$}*mrp^_mPcnvJCu39P@4G zb(iC?jc&iIHQ}~nd)MpS^?v^&6e-^a5P6?uid}6vn+pBAzW2V$h3{)&_&(nsVk|`e z7(9c%NO8xws+h)|B1_Qn1V0y6xkHb>XvaVh?n2G24+r4$|<9pH^Oo?te=#>v!*?I-iui>?Pyz63=aBV{dTS7+-$j7}Oq z9L?Buj^R-%6$L<1P$0(>hTgNMhs}Uq(%;{!kZZ!odDLr7i(Kdqtqb|*+)P46w8M>yRi2dnMKxGscaGLEqN~Ri&oU2hqLfd#)n{c>)jHCU1{OZ$R;OBq;-|^Rf z{eMC$i{Mr)wI3GI0FwCi*&1LNw#RmUKIRg`*Tp;j7KEvRmFaSbn_8_qo+qE6q4Il(fcZG(t7%FdC0>{NN#uADrRxdVxd^wwho(J;2`nF%FI%VmhA4X1j-c`XF`{ zYcZ~C$yAS=D6bL}MR?a@KD$QSvXY{08Y~xcq~I`~OfjBLG2Y+9{^1eE(*txaVYTW& zAdHLwrGReP;QIUur>{lBejRU6pavh-XERV|zpYYk$k zO4G_Hg{rQ($sS_in-ort6qiaMp_UZjJQ5N&BMZMqo=1@rs{-r@NIu* z?keK86-B!gfH%MAuDtVYlli;y#_#hQ+rH;Mv3R>qs_!~xyA=J~zJFV8{kHSA>2-H` z%}wWd)A!wVPVYJ%yPVTq&)aQM-A&(rpU<`HeQ_UU!foeymvi@h?t^VVW7~PV`CfOq zKX3mWC@g{u!2$Y?Ziu14^2qR{h-88grI^=Bi*FEI%!mvuCHBweg0s(b9{}ahcgC$T zh%sQfTH?j?7x?V6-{S1-1TpzSrjIdZ8($#|Q=qkIHlUSX8)!1nn*IDdI0@pD%#>O$LNQJ}=~jiPuVJl*>$n@fw>QP($B)r=H_wki{}hD92Va+i1jhBRzYh!fG7Haw6~}D zbLO){Odiqmq%D)2vv;!hmaDbGy)O%Md{ZoNr%ayDECr&>BZy@>KWup1%#RRXFY&m5sn;3+d-_B2QUvGYA4?(3@qJDj9(fboD@b@_ zswBcJ7R5_Ws>mOZ8yJBLmBiO+eqYWqP*7)ZmQsCuAO$W)1&EbGz-lqaFaGrxxSr4O z@WC;Tj~?K~^RKa7&UkZ|uLYTgGU$nu#fuMBln;HQrH_V!5R`jv1k3uZm_IWkqZ9dc z3;_l_iOG}o+>ENL8c0Cr9ZUJeKkU6Plk+^5(&#<4d@1Ki4rEgp5j{8TDqV3SFLJ@A zjfMg7e29pt*CZ3Q#Ps+S1ppW!O%}e+f^$g0V=hYybN z!AC#Bhd=%)p1$)8lf6Bp=bQ;fz_O!g1)@Qo)p ze)I@NS6IxKNZ|_2Vu@uF5W5zyUVe*jzWEBzzx@`A`8i?=Jn8ScA`iF9mV(bHg{Tr- z7g^yI6q2&2>nXO2tVLaq5CcC4^2D+C%V+CZpWtCN!PFLA=U{9Nl4ff5TLTI~pninj z&XNRr7NbW>T(IS-u?kA2s!HVNT>B={VmV-ijMf@f+0tY*#=uq;v|=TRu~w7~6--q@ z8zW6RUdOR!b1I0yHR(U3NafxH?>)TtW!PX`LR?I; z7W9RGj1j}!;v{PaVnTp48i^a7@&rT7+3?a>BoMT*@R1oDIeIk-cuzhROWNbWq%P}h zRvap=1RB{#l%~OCnglM3gktmXF@U0imBu~F^Ii52iIXMrS_g`#E5duvp5Tvv`Xkh% zF+TtLIsV~){t}n71_U!OXQ<-0CzUO7tZ4DxLuHEsX+#yFhtGF8u7$Nkdd(8(1M?>m zggp?zyci`mx-wL({bEX=-=m9 zY>LL*X0_PWzOkt>v8j1>p9F>fsML$?3lo)TYTLGG+qM+zVE~?CDY^%emV!a11T>gH zro5}CGF2Q-tMkI$PoTM|Q>0-k3$f?o?Booee)=n%pP#__rU%#+&!sG;TEY3Q5Sh8t ztV&}cD9@8$Cq8AxOgI#MYKq8XQ$Awr3>#B*H1@vu2?@d|%@b@<-1NppV z_**90^HfI{%R=XX!vFvv07*naR6$H!9CPmS;95q&s_7&Wh>(0NFu6SaFPmaYy@{|~ zlS5SyANyR~DWwFY$LF)>3iOSS4Au+5%WG2EkjIpeLeDUWF%=nm=2i?z&@6Ws0G!Xn zV3hw@>Z#Y{qCK-93<}}gWJ!q8twms3Yb6el6#^{NmDs=(3tc`-D|-q*$-arFnA&Qn zq#>$KR+RWYLQ*S*x~>sIf>kw;0w%_wX;%2+^WWm?;tXAI`0TS!aeaA>&p!JUF)^en z1#U{k+?0##W6f3xt+X@=6O;mM&9FlRE|8t~sH=)6%R*tc#y|-)F-4waX(9S+lb{ku zUBwuL&%wv5s;m&fnXV6HC?<*eM2UQ#5S-_=CZC7IQdtnVQ2_2=9AqBki^f7+@>tEvMKmR>Pk&Z^#-#^4(|MmZYZ@>5z{^4()<9as3a=8+Z zv>Yp=VWUL~oRpB0FpO335wNwzcwD0%)iN39#@2W|!T!Mk_79I>?5IpxS@z8hA`QS1 z(6$ZQrh(Q9^=O3GFTcat*(-Eii}TY{v~7a~!tsMg_`!Q0U^1P;)HMPK&8o%xVg|Gx zRb_B>d4b=5`8iHcPGr&-aDIA<*Qc-0#TBQ~pfBpyp2wNfA)e{VY6Jp5C!>BaBD; zAO*O%z-rlIF`wh*ix>Fj>#uP1;4z*&c~aI*2FeX(>?j3JmP&^hO3Y*aKdlYwx`wGL zsMdhI%eOj5es-O}EjdCmk;GsU6Y#ZBu(pPGUOeXn7d#Rvwliph5Lm55AXK(uwM>-f z_y8&!5vAZJ#Ax9uA{Mqxg0&h|Wx1&+v6rNjOrSMV(g2LC4@#643Z}}F|D0PdYPl4J zlc3A-%7tlf;pvlJjA74u@xd!VB?a%h0jFgMYfEd9rD=_0lh%s=+%(O}D+vq zlwd43eZ4$qRA%6aZ7UfCN}3zCNl6j`7xSz#Or@b4Ad__2J0yewS)aQjB!iQpUdv!Q zVFz$5GX%h>SYcsu8WG7g;t_p73_P(fX z_y(({6G)!CpUhAQ85qb7TB8l12u<6-IVXFSI7lv1H})+g&*MHimtqwCj5K&Gw_!u_ zqR>!lu;ZbnFIx+>;a>;u5etx+qi3}No;*6npZ>`w_~D1|Vlo*a1`p>wma7%!vn8&t z7kK{s6~6iUIW8`)QP(w&kB(5)mO+=5-Kl=Ot)|;n51acy1J<&6w-hqlipgzug8NFl zhegh|qGnUE{e2*2_br_7D(>zo;%}4E-*`_vp>97@~MnsT9$9PgB)a z3b9zAGl~dFDVDNH$D2vSoF`3+eT@mG6gXL`os|S!KxO}A02v18b*;ne*C+V$t1oeN zbZtol?Fg=KzN@i|M7-`B!i8#6xMljive6urd+9y zT+Gu62Kz~LQ`tCj{xWGASS>^ivX(3`jLZw7TIfBd`FNG-v7{h`L2h^^iW8B96ZFj* zB7(LC#;_G*I;t@mkI=R&G^++(+wjCSMl_uRU=S2>hPRGbHLvmZvv=^LpZo|HSJ$wn z#`SCt?>e6L%Yji!BZa(46~I{vAmRehI}clF>`kXIR-s+3gdiYI76M3XMDgjXoRSa; zNdek`X(`YNeHSx=)B+VRY>=8FA z5hG_jqzE5!8bod?vBHJD*lckLGP=xb6A8eP*E@shbcFe0iN(A{Ycy11c{M3Q zGXNb!R(-&1F+ZaBYW?(WtFP@GVYHU*W~`=eWMQ zfRB#V7Np>U2gt)#mQ!0aH`=;3aCB>OW%8Y^SDZqjCHYpYBC_Uauz!Cv9>ZwD>FEhB zFU~NZ&oMn1^BTA}>PhoF?-#91?~T@)L`kIuUdikcYYpmp1n*kJ=;58?A|`so$PFf~ zG-BXpdx!xsvHE6Ik2t!GxLF&5=PN~VY+uEX9X8ODafG|@`2LrTDX z96QWPyVYt{?&qF;L#5fAnI0q-!I;8&5jof+mG!*H@Bu~Ax=yUVh~6Q@An;NG$U|!j z-*M^$Vk-Afd;BCiYR|dhRV|<@tbz331>(Ab#+Sqhlb}iJm6~fz^0pIuf-PN1F zE4*>nSi((ejcpB~O~>LAJ$9v+x@C8WY^7=C?#jBOK;X@&CWcXI zt;L_8;C;gzQtw0pFT`BgL|V&nZXpD8UBkt+Ok1+tmSfnWM9Fz+WKh|ps7zFssX*Dx zh_^Fu=6K`QAq5(61*k+j=7Jr-8VQ<*3{#8d19JkLXwRf7ray&3kpiEjXplBZB__|f2Qj?*i{2X zgxc1q>rqieR8@`X!7+#wuFo#8Z07(x&Mr^!vrj(3pFDbs*{s28#5)}VpshwCC#eTw%}8v^V9BLI z2#!+$l1#5eK+BF%RT@A!x7!PgA_KRO#C~CPu_omWUrITBgo~KyJuu)cD2d`?)<6;# zheYJb^f5X3#&YFweKp78a)Fn>{|3MP{GV}t z@e&UoKEbnh-^c&*r+<#4!()8@+u!2<`+xploS$9c<4^t^AAay2RQ&)xDAY;=z7g9< zRlu910a6_Im!Yp#8;p#`q|z`H;JYOj^BL;#K1P!js=AV?b_Godu34g8EzxxyI@ciq zs750wqoA!qHL5_1l{Dit2p&oSZL`Ge>H_1@6g~j6`3mi-LD$SVs?vL`R*Mo_*{qhL zDyYPs##D4rf;Nh|6HXdXLUtzwL}|ojD~r+zN=2m9qH_yLz=^P0qtXVWQH}k*so1Il zobzZ`gx~ZT6{&%D~bG`@qa$%YhV048P0d0g~q9T-H>s?+yV$3Z|Y5r0Psgv&~vG524 zkaFB8D?1_p$TU8LuB>TFt0HeVqKK%JX2>HkbTY=s>q|^*qak57Hdp$m9z`yNS z-WLG43oB!n#@VJX&P_I4OcBf2l+N^6&&9FQ@G&s>3@kTJB3&O+@L7(=n{Dr9s-pWY zeF(i3poiT6-UqZ@iJb}m^|J*T`tE3dW?Af$M=FjIu!TX4=ZCO57 zJmwjK1g1S(Ez@yVirFE&DL?Fo@lDx3NJOC2rwyc(N^E34Ho2LRN&YGI#r{y)(8oHa zHHlz9;ThOaq|nS3mfqTtC9+DOfbkFbB>8joAVw5U!EH_6;d-1C6#8S-LmB}yh+5)5 z=S^CL@wi4+RWdzGXuF1`r$X`8rh*n z{u_Sxt6yR~nV@M__~(E5XZ+yZ7Ej-PA0L1G6P&z!j;>jtS$SwuNZ@3Q&T(Oed_FQ* zQ}G<7Ynu{{S7f*;_SX(XW-losAq2$0KLbdpH0Oo08YqF6nuO>*6eWpI2*wNGZdoWxZhw5JUZV%9$j7Bgb&&$kAc^WQ-9}nw>+tiLEL=PsYG? z9cHr&bghSX4T1xLZ&1}0>QRN+Vun{QzQf|`0;(uH41j>nIfT@*>LOABzmefMQKJp^ z_xJGj+i&6V-St|L6z-Y=J7o>k=d80piIs$(&Y+9m*Pus;~G^(l4L26PxQ^zR9xSHQ4AK;T1%X6DwYoG zD|lO>9@R)8AbJN)iepu^UTYc#i3v>L!pm4I(W~5e^f4A!9FOUf*ztJ!8V8`=Z0}*a zS2f_eL|CK}|C?dHNuG5{k`l7?oC|-Jb91bzC~UNXF&34z&}N{5%IoPs@ibH!_RkS6 z-jzxvpB=&`hyujRai2(XALjxz_E5J3C4&oTHc}FZokEhP4N-ztLyMd#Q}v;3jbsf- z5Vsx@paM56Bw2`Zv@8;Iwr!;ZYY4istm-g?lr)0C<}#cxhP)@r&uc>0g~Ehj<)i%k z%ryzTt_4rfwl0YfkOnF!p{gw2dg}?^eeWGSdUOn>`Sb1_j4|4qply~=#^Bu_Jj0VW z650-E+Jvj?8BWj7adkB-=PsY8Y>U&HhXNsVZ1FxxY7z2-uF~TJH_ksHFsufa7%mBDqEN?1??|R|e3XE-&%54Skrk}g1 zQL(AWzN?tpwc&ABW8*$5h+X{YyYdBY`&svCC~T9Z?*e(etMRZ4{r#@#@wWGL*Jt}a z$rQUbMs~UJcA3uKb=-EjUUoSbo37=%uHkLmgl&t=eIqIFY&h^X9a^&lIv4Co3c(nA zSzu)0@*oy0mAD^%K&c`HS1OjN@$j>AK~11n1}Hc>Ve%+IEGQT<eo}eF-$W4I) znHquw%f=k*>rif9+)NJX;Xk=S63X%D?}J`J&`ateg($7T_;LhQ5E-}{c+iLbQ7+O& zei%K5p3?rBR%_>PXp6`VwjOA>PWv~8y|(-N`*`;38K%<-$Cz~;v=H@k3}xFoE_xEs zHVv*XFVT7S+=t+yjmGuW3}1fn1@`w&aCLbBBA~8nXl>Cn4x`Z+Z@>LEv?3fmc!ZPF zL$=un^FdqH-`k1h?i|JB5hDWtufgghNK980uW3H_+)&AX7C{1Qih zn2^d;9I`HCKP`bjhtUSnb3sN(=-Q^JADSj$K8vX98kbj>m|tDNwGP(svCP+aj4{`1 zYwH3Zu7IiDuuJxukiOj|8JPh=lJ5w&v1V70x5QQ|GoF|mw)xY<1c>pm#D^j z_?y4|Tm0^~p8+Z0{U3ga2S*2Z`t&J&^rMea8xIng7Aa0%$QBEb5;-_qM#%B~qDY~t zM;K4{P>n_)0=jmNB8gx`5zW%5N(RZ47+ZmgvG5+0tWk6IB|k%w<7|US#|MrvVt@xF9$r zt-0YXjfoIbf%Ii)VBh%CCE6E|>s}%PV_rk0*`Rd~;#2}5%}_wn(!i5-gfNV39dzd~ zY#MWXt+fPgz{-pWk=Ju_1m7kaDF}d%tSHX7NuT!yD%-c9kwl%8;i=XFlgR|r>6qhx zk;)XAuM1yt=aHMhp^uwI5^2BIh%UkjR4zn-BC88YadYIs(LUaK`!S}|ak(!-kS01W zX7G+B>E3gE?DgdguU?&^X}nyEN6)L>-_5_a~Gr+KGJ?8Tjp1(RlKt$8Dtcojzyl{DPs)8oypb_9o z>JzI)#8Ol4yB>bXmWBl9TCssKV`ntV>>&XMnu_BW3kN|B;H{Dhqcfz3V{fBNaME~R zts2Z`b2#T=tOk;Y5?CTf1Ujsm2A5aYxVXH+V$}i&7%dtYqtRM|(h*M{?A8F-h3_`} zz1ddOZ<_GmEJ|);1l$HR+m;Hj?ayx`x!=_w*z`HJk>9r!ExXYBcLlxeq6pZQI&jz2 ze;cfCTLHTXHn**Tvnv$xE`t6h8^^B2=WRvrruVt&SZ=!3wlxNJJ#PPz|NpLH{6C_Y z-{t4r)eyO}VS$L?JI<^{DmlI(1j)oD*+8Lq{mOzKAo=LA6hk~&9gw-9%5;z$1CYX0 z%aj6GH4RSBPH=T~Ekz&=rr-G*jAhS|Vl3qHl#&!M{X;v)*3sG~yFXrBK;~~<)hrM~hlF(x8B^hD%{MnZE_u_H zj}eNTF5NMqj(zNrC<#JH5~rx-{aKE{B3(8?K6G%dD{6%GNq&Z`8C13^e*WNndEe~2 zq_skrr`&u^gphioyG+UWd-}#j!f zH!-<7=%xIzG#j#lAcOmIgQJ&?tF<(PeuC3WAoHKI^1_scLVmB=JH1*hQP+IDN24*{ zcZ#L)UDsl@Y_MuttX2)0)w0BjW>UQ7$UANPuY&EIev>bd_uJ+E=ptMs4QbDR@$V1u4BKmF$UJ? zGAXB+Y2VyXG*ykg>4fF`-l1#Tl6kGOe^uo?YL;?CWWXT=blx!}ED1LxawD>`RvJRW zpdg-Kb7L!(34crs$;w;`jxLQQp0MXFaEe8U5zYtku%>dpthEwFl@NVI>l}Q$LJST* zcr?vQB*_U^vui}>#JlU|9%X==wX7oGM3V%S_fihU_zwOrxk^($OnUSqLpFkjB# z!U}D>fRSVV^yv?gAQzK=islRv_nZ$6P&HbO-mjAdza%IYEF zWcH*K5HhnvNpzV)j;^c66O6`VXbq@t1vrmx-eKNdLD>nEoyvJ)33)ZDQB@;3Ry-MR zU4Uyj0#zHu6MEt`i}S=Cx^~5k6(~5@A@~lE0=H>bxSr3jn9b33tynxr+I#^zgT_=Y zv5cvq5s$H5UzC=TTX?rxo8bK6n^YVLF}S@MwaA!y4K!l^*~oX_@@1wd58; zT1#-r8TX`fq0CLLx~|bREtJ*>p5yLpGHX8PlsLwguWwc@C{br&&=@DBWJ=A?tB?`^ zW(p+3v6V4#fz1d9X87dXcS;H#QPxM1Wl=2mzY<6$qUX;6wsFZ~UYY^Yh85X6m3248 z9HpA!f7!azvtpFu$?bGHLf4JtoW;_R^F9KxhIdh*swnZJkOlJ`1 z;laZreDJ}0c>MS=s=699d)U?&LO}F9e29V5kAmlCpz}_WTbSR|H4e)~gX^m$F0U56 z=79GmhkFP3$xlAUd+)!4@p!ZbLN3j7`LA;wx~{`&vB1ge6A%(!yf}mR5}TU(XOt?# z0xB#aR+*&I$h2DH$>T?O_UtX}?@tjZOWG62)KCd9I-#l)QuIJ@@UFvTw15i%7uQRi zpPj>XoODCbh5a!MLQn$j&DPEgqSZ>lc`ud}$#@`%SI&2>;(cdK0rTYwDJdKt9b-A4 z;j3?+bAwe_Iog<_Mgj1m`<+ZHMK2 zj;o7HeEZFFeDmEajyO#kAu6oe6|Ci?k0(EPck7_<`_xwEE-CrVg7~gZ!(EfXZH3z= zne=Uw{cY0vO~uM>?{8BPv&%I7wxaU3Cc<3`i~GK>U32U2I(~Qk-8SgrF2`}(ak%T} zY_l?KdcC`v3A;igH-RxWo!@N{gm?YBUGK5`9`9}UUnpee9EEzHM8!Su9b zB2-nyQ)5!)Sar@zd{P)pW7Z34mUP-uGo z*O_pgsGQecQGm5#e|Qa~)JF&Y;k}oNubkucJQ8#f<`#*5p7bK06TSwM@C$mGVA9zJ-4$#@JOJX-H@eEb-r zs)p-2tePd-W?tg4loT#e=-oV>SNSNTbB%2HI4+D80R1(k931YOqwX(=!_ZmRjvp=%h%xLh@uUtco|BRPba!I~H}G>Kt$ zdEXKftTNmPa2`#%#;NO|l_^AdTN_m43A(Ps%av6rl!3JowyrUrOmT274sgo^=9*TGaZHyu(!(=6cw)9<^M`7T;>Tv-g)SS?nP z;1=P0CmVN<#d3-HVve?Lv)~JBb|BIMGSdabS5#(lY%^_MQO>E)O-nC{9|G)?HA#`e z{@y+g4-YVzRpqaaq;*Do_ zUQJ^FQh?uIpi+dze2Me3D|pueNwa!T3T$52cp}fXA-|>~iZMV{7W)T#m`o>yz0-4V zr~qCG%yb|mm>}#6qcIYoCZGS_3X-E$A2j^LbAZ5_3ppU5y}| zUC!{!-+X}=NBcNGImOGfOXg82Np8wbsBAl<)T=%PvX~pE1O?|DzWVAr#1!%9@dIdK zQFNWha@C+&tgxIfFrTk*eYHa8AOPJ9TraL+En#nOgl%8DSetLF4{lWe>{5W-RZQ zC{<$ANZ?%gK_63o*g{ZxcU&(L{TGxj9do6632ZOxisE_mxVSjS<>dvst`!eny!Bkg z*gvRQjt41_^^L|y-XKQY^o^$^@G(ULxo=hsTfc?AZ^n zm@n}ByKga@Um+xiDDbr4Q;G87_Xc@juhaR}Aew17h0n#zuz^xM^dS_Qex7XQ!rxj0 zV~k8i-GFwVq{t0_@bfcNFX!uWQR<4!o|`r9#x=gKtmv>Zq+yu!ix3C3p!aIWErSsFkoz(sHpYB*mf8pG6r;61z) zQcC>6S}SN0dr%BW@aSSfO$L>5dU0WM644l5-+J6U%wMYd{p? zx(3d*0zpgY+9h1uFvXqnvC^=%k12~mrd#=5*Tn5A0yF|t2+%q(m{Dm&QlLN>P4-Zm zF_!Zce)qf2@!>}w;iDh_7$5)W$N15YKE{LNW2}}deE$49xae_o^bn(omY!7vlm(?A zFitO7^ctktB9X6mkcQG0)9D@_J$iuC<0)!&iIE8y8A9{{^R`9s0d2R!yp4#k2#G+- zKq&()a(6Nn7Ye}v;HWYrFKeV1ux!iEh?wAlN9Q_(!083fd!EM1xz#G4e-Ys4h(5($ zYbAwfh$!bU+tV<3ezF>iRciz;j!6_#bzS4|@Bn*zdz>;rnU9c*Zn4PpD>VNnwku;y zKe3g@14to6&Ln3C8~=IIvDkyW6#qG9Hh~M27!xQ4PLv3)!1j_R_%4b>8-+y>bEZ17 z+Cd{^i;gu6vrBoJEBCa>;InN(X;#Z9zUa$($8nlm@Rw#s;hWH)030Zj*UDajPeK0~QM!R8cx)Qk+HtX|~KkEM?=|6bKGT0qxkqDht;IoSt1_wpf8E@&4e! z0jAS2OWC0XL^ojNNVARmoV-p|mBar21bfp7Gc{sJ?HbJI3oMsQcp>_esH9loXPEZyqFm$B;0~#P74sfv$agCH zn-HOlk?T3JjUq(M79L-G^BP}%^9nI|B+^jY$WP|=ASt=lGd6Vqs;2BX&>9Gwaxt5C z`0Zz3;fv3|0-`JGrq1y*gd!nCzs!>7Dps>?HPn4T!htm~1M9xBa_K66sB!b5k>BQ_;1P6nh6%!Y;Y= zn^Fii{rRT%e%I&R1i#qz^KH5=HWka;KIdH&&bzLKU6nGsa2M`-&u+Uew*C69=E^Q# z<#-85P08df(XeOCFrYlyO$ibg=b-3j;qidxO1?n9XK5IeCr6 zVqS_qvFu8dU?3R>2L9lFBM&g7EUit)u~tOqQ_vUww-mH7Pi@5F3E2n<3AwU0-g)PJ z{NSDU(6$|(KmQijvrCqx!WBOyi9I4q$a`Q~AFHQz@3+pA++OnEll6H6>x`< z%povF%S1hhhuk4VfvlAcTI!o9gJPST2DZR;GW9+eDq3SLUzvUJro&IGY-XQmdd%B~6sfx8Ezjk2_B&>P%*PBFKu;puzUn6gna+Y;(e;7u=ZF-L7-w)Le zLwWe{i>dz%?90cR6Bl|(D>q0On$&f!Y>p{UdSp_P1Zl_av%!Sk>3c$qY>)L zqG^|ikznf)9zS`4$#{a(vlE=2T_MJRCvUt7AmQrj0wHwx{g)2Q`2`d5(_sCO&7-v% zb!A!NtGU^bWw-g>gdF1%XBi^`BCJsujV-i7k<_xB)Amwni2;kz50Vgr6nI>m1!7;X z7SO1ooa5a`L_rh-8DI!#kN`rBAuJZl{+bfi5XzdN2mg+F89qcPZ3=@TD-m*ZU5Xyf zYKa7HbgotlEEh9`;L$mUL=nbX7{mAJnqnp;VVAHZx>f|E+3r-Sghvm@Y^{id)&Y$p zs6=>p{0O7Heb{jgtqBhw9O6&^_@_t!e*NjM@#(LAh1ai7@a(-G;Aj8o&#`x~2OSq6 z&5g|v0z)2?Mv$gRVPS|AIs}eqolGWpaD0Tv4-YV+Q%sD?yk!F#s7fK*{5xZqg{;MN;~O74poBNwwq7im2gL{xyF z7*0+h&l9n&X?c$2W-w>Co6`HrjZ-BMTtbwRU-hDY@y25y%Z6BhSY^UIgTeo`6vXwfAU(XvgJXq#rTyeGG%O!(ESpXWFDe`stHlE6mls$pm&mogA|q=)!yiM40w$C~n-r$gDfajFg(^=4;20wiNrK`? zj(LOtF~xc)(WW59DyG2C#nC9UGkAUSk!AJ9uwstWkW5)eBVUBb7IqYF0q?WCi|9H5 zFKfQ@199J0cbIKc#=8piT|sbn6;zvw#Jj$K+xxhW41Uw+-qoJ4DP`cU z;_)uv;>KcV$JoG4&4F!-j%_N6`&t5S7M^!CneGFh+(q8MtL*$fH2iHqyqksl%?ot9@hJTC%Ab5TcjOt4u_|6366oa&P2}UXVoNuum8= zNzYU1G|2uQPIUX}_Ryov4~?#CaCUZzi;D|}krB(C%Q1{1?;TKi6a0W4%wRW`@S`-j zvut-bUCzfLPr3VZ)fbv9*W^5R2zZ94CkAyj!F%t1h>t(|1glkxufP5sPEKB-bxWk= z)+BSoDRYs%YgMLB-g_?EmHq=|RS03A4CrO^+*#M90b;F1T}@z2g%~3`*9bHUMZ(F2 zys!e0e;#kJxp3449LS)*K58#-I=wIea&v>>*&I*acpKHI!jm`O!elzan{Pcvhz_6q`WMhT0wM5yIF$Vo zF&r}iM7AhV>Z+DaSl%QCu?QuQVUj${vw6zyz2nzZ3PuzSloFipVNq7IZNU2=Lpaah zpX0QWhZcqi$;3&kT<%M;q&U7Rr2wNW5CTTy37X|fU|p(gtV=;eyh%*Nq-!Lgs%p-m zmQ6VTT+e4fjPR~S+jZ#LmX#4EVYOOe)vmZyR0Ln7zY!@ZXv)pMSke)c;vD(9);QQ3 zV>+=|&M%;_#PQ)nI2Un#u|j1=NJinw8*kyKfBZ-ImtXu(T%5fIMURu$&+)5Ie}jMc z`+vg8={ctR2iQA2!nfZ&$HC+s98FD`xmnlN!f|V^m>; z{gFeh3@$^&!UoJ5CkYOG-Es3VN@l!9gocw1y(WUS7GA630ne*sBp^``)mVfV%6f*f z<>=2O5^^Gr{v%DW+Gf`XdLD=*j)YJ+DG7nqZh^t6`FxW2#yQ==OVcG_u~?w%xF}#( z)u4C;iq#~;|FV=lTj#PODX;&`_Rui4g7=PD5K6&20-|R{1C3C}3f{E{ilB^z(iT9^ zSs;lM4S{WYT5MYi3|1pi>=eseUVD`k-eOZIpgtl*&q^Pqfu!=pTBP-{X8~l`Zca>q zs992sCB?opvwdPUTu8$3Kq-cEW48ZNQe@|J1y21Sia_LaklGS#rJ!}{6N039MPfZt zl;9I{0!k|{Cb_^+&KJMOD6;mRFGP7*kRbH>2ul1bLIeq8HhPbySz^^J&^fmLkYc6M zajTB36;nx?~Y(V%TQL=Uu$!{zl1i&e|k zJV~#xl`tlXT24s*UC+=7Ak?uq$ie`}pB^De8Bj#P9NV+rDR)RDf--wXIm)#w^&S zkiO67-Q|4TM=rnV{q6#!+vT(EYQNa!`!+=$-sd{JZxidj*XXXVyY2qj_CB{YCGPXZ zoo>gAeuz-o7Fs&XLk%eD5(_7leDPc7$xD_cdjK)?k!Y%Hv@^)XLaB%lfy=9NynOi_ ztJR99<{o8=0;07kc`wE;Cf6 zz+aEzQ$;;6Jm3AbnSpqT!BOI|SDCUNL%BX~UgLc{pjs==hkxD|?y=b*4hj{ql5RV@{KuijUNBemA=pj;ySk7lSdHF56u!Pc4HmO{21Rs%1DpKVvHYNfh z^0kuq9#$mrN}@UmfeYcpQD)W}-qeeF!PW*ud=F6~)K&vZ!#X82bcTfSG2#hfOi_LY zdxRN4MVu@kaZ^?SJ|t-3^oig*j7A1+>tx;Idn!UCq=|uPIl7D^wKS?~B-7!9rd=T{ zmM~fu6;x&ztd#|2iE#l`tKDs5nG z4WtNLRWOr%)YB=P`LjeV9tym!w6Uabf92G(kE{V#M|5(;( zO&Wn>Z=cXWkQm6|8HQJ;%m93f&`QHVrn<(k8o_&*kbU05<4GLrnQa>x(8kJ;RI=fT zvK63L3g%xEGV?%+@!-+44Vtz=45E^VY(ZjmRkmJOSk05(&IJS)00b#j+VnK@0!*>q8YvH2jBwGbuv!0Nylc$nZrMC&|1FC(F8o09&-LmfcJtk#hsKuj5wFvvBD4X#>x$hh#)OaZSNk6--HZ*r_ z;&;ha-!u{3l`g)CFn{0I+~i^3CW+VIgSV4_T1c$4N_i?g#cTwPuA zgj4l0w*<%o1X7gAqy`KuDpT#^I}|@=nGSIg-{X=|AW+#mnI{=s^sD{>ruc#3d_qMN z93CCv!;e132OoThX0^nppZy!Y{q}1(w?c?riSB~P$Z{kfZ)m(sW|S0_JWaRO!U@bR zPjUOgo7RAC89YZs7>!0H2R_EgwCoVe8;fR9srdMO1>0X4G?<|BT(f3Y0${&$^YwJ_5A)y(MkFbuXBl!LrO9Q z*BqDSV~JDDDive6DU>&1!&oZz19M@nRcW7;&oN9Y$WzJuKF8y+K&P^O!WT71wpC=S zME*G?@==;v)*3u{@)%DZKg99z5klZ8r1u_8(-bSg`S}?`BAb?})dDiB>Izm@s49by zfJM{57z6J-&QDLVSYG3kKmIZP{AYiL$@C#+ONRMP#$)_%fA(j1^xy&h@Biz+;OzA` z0{#S2G60!Ua0JD<&!P}TjGl`)MF`%p&oiaoqpd_SB-2*_aL$XJhk=6HZ~IAJ zc>MS&-h1~wy!G}w7}pa_##1;Ka6Mn)U|*ueg6AewQ1HQ*W-H5`0W$2R4P6IN#CT+I zd^kl*BUI$jrUXg>$p;`NM9(QH37RL!k*z*R37uycXJ!lZ08&0zAtb24`Sm^|_^vDI z4BW7!wfi3w5k)OhS*DvOA3>Tw1ClB{2$te&E&>!wwS#x1A(x|5Rf&+*Fvf^_#Nq1d z0;eaZc=N3%IM|;cDh-{}Xozib<>4|YjB1iW#daE5SCu4cSi@-wKoC0_Nj#yJVu)Y_sOf?i z#!Em5U1`*iSffIWoEDH(PLx}h#Em`Y5Ua4Zj;ccCk45d31hSh%fzT)14)$x5)dU<( z8a#XMoo}&R&T)Erj#n?wFq<`qK@BWjQdo=1NWqAL3gx+XadwW+KKl){Asig+W!DBL zbOeXsSvKBv9onWt*E+biLEANG+m#gI3Lm}y9>!yX)oOw1bb_kV|37JO_9MxarTP8t zV&)!OW=3W*S0?vnZR%}$dYOSRqnRh^ZxtXwBS8;>9t22$)FX6HcUN~6$s(D>HJ8XG zR$t8SqK9+tHH%<`yGKo;2o}i*ciZirbH4BQNjxhKvOI$h4vzTSzx{h2e)B!k?N(AQ z!jj$XEk1bvJ+`;ECC<=TKL3}0;kUo}jMI5!HjDHzi~2=XT&R*OE62xsr`7^F#lnE` zM4R!hsi_*XnIy*uzr|sZVTv^+SwQp}G82iF-;{!|C%m6X;)4+eh0pSi%`t1DL__EW zZt5Fpya;CqWltz)!DvIT4Ma{cYYJ9`XG7F@4{c1(DiQwW*cM zbrAtqn;A83l2nx|)=JYLDU-=&Y53$QmV*$5J(E?1;hmR8gEs$H4$d}6=DPTEfLH)l zNwcq7&vAMq`#zEqV%= zFUG*(;SmQ12h10r2r3pTQoK(Vk{L9 zl}0gkBHJ!&IYWvDXD2+k|Co$DWe<7s(}CgKRr9Clgdfkvb(#3_YL#;oW)|v zV!k9tRTJn`-Z{(e-VV-N=F7w+XKviMLCTravr~3=clgyWf63#A4>@>s%=p5ftUSA+2PgtlZ-5|LKGis)3!pm?jp_# z%qfOI%F+N3)ezX^G_)c@3Ib+QRl#J^Ku*LEbWtzzg^mcKSfND_sYQy>O`<;C3VbEK(q;__ZF>d$YQ zhLkdk#e&&v!F<`%wqAVl1yoruM`V23ChrdXIfzA|{SdgeoAJ_wrwyjqwt z`o1hZ4oxA58ElHQej;jwjK;;vp%@fG$`4X?79#?Ft}n@w)*vd6!?%aLef^qlxg_)* zF$Vf>$=U3b)8iS3M+=sVL?4yy(6wsRDGMg><-4|c+=FJ;!+}NdUtuQ|N zp0108r9^ZVB}xdfKC6l{WM^l}ryst@>B(E+NcaicJ3C^j(d48QBlG!^7tdbv{KscX z5e7)yy>pZO8+%N=!!@36vE<;zOAg;0v5XB}6a|{BEmB=`0tFHkAx9Cv237c?|KK0&ak8ioM3_ zGqF5Fgl93TO^iJEodQ+geRzkz{;NOc@#A-R_Tqs5`G5JpI5}BJ(+UV#nxzu@;xIWA zyBun*Qr{WmS_uXDX#_2*|l`-H##%U`ls z1pfB_{X4$=^1JGZED?J(bKW4pnVhS%)p}X%8Y57qV8nM-QUl8GJLlDtZCK2gyn6MD zqoboidMaz48cQV9VcCb!qvYWNRT`v=@`@iOK4sd__o)KPFyiAYg=0>M)=x+#5>rss zf)sIN&(>s%d-opmi=Y27_wL>2_~ekUo_@i%-+jfRJH^;Y>^m*G3^~~Fx#?N4Psl_h zARc8qvL2KK0)OuQxfoSgirF#vt}aeeRIlz}0V%&%YW4HaFMG~!PtBqpEEMItrP08s zaUgI0$}KRddQ{PPNh#1ub&zU;L`($|Wve{eT2~jiUacSHd=&mdncU|*MDGzs;ZtdTe9P8zr-FMz$Z+eT@&tLQT=fCB%&wj(V-+YU)Esq|* z$A=$%%*|Uj=wjfj-~F1nJi}-PqBEAQNlOla+;`F-N}?d@Vx%)tj5`ahLJIrELM6?* zKrhE#3wCD^3U{=SdLm0&FF>u75X!$g37W#oh!8bP+*#;!@re?}trK5xPU1l}Msl4) z4D>I~h(D+>#2bF}MvIZjRr z*qpM+tc{UeY~^nlEfQNRS4E>SnWkw8uIKHd!}Nxe?|byN`%0nQp_K8#meVU~N=;ktmi@j*yaaRCMw0z$JqX4sX5Y z%Zr8DH(C0=f%B~uF zI>gOqRV>IfJkb*coJgjb6gXz0DG3uvN%AohLJ}29GpUVBd3IQuc8c?jJdbfw1SBNM zB1ihZW7&)R-fF}p`plA<_|UQ_-g7me}P;^dhcW!_t7XNwDrj3?I znwB6b53=7LV?8Nny3o<&AlFw;wJBTF61f(qc0`adwIMWL^nCaIOP+r9HS^hw5Q9kZ zW2BE_)rkR&Z6GH4&||Z~H+Fb$6wZO3S5f3Sa|9`83XwFr1z)=tEZPQ6dw_37R}1rc90&?^&^=R8h8jo4hSz_wt zI>8a5)25ptBJ2c-qKr5{KqYgMH59$7KW$belN}VBRupY9imYA|ROFc|KtBa8=7b@# zJ#~Eg(L?UunvlCgK798sAAb0dfBL7-0a0FwdO@JMl^@{^$;dh`ri677=cL(N)kVrP zO1kD~yr)|(YJ)!;Rf0yUf+r(tqU+R@7uV&h*57^=h-_6P*rxGqn_330DsHYrXunP& zv`JyLYMOgh5p>z_tU6|!oTN=Bz^g!ho7y9;+K+X=f7Sk6r6$;9`_~=gP5#@eY4ulVMhr_9ezAO*eJaEtafqke(Jpse=#`jmqeak<9eTbi$-u6eO9?egeG>vD{OnCkB4PSimJO1I<|Am8>&$zvRn}7Wm|BA=&eS~oh zAAj-*w{G3!fBjF9Z=Zh7^7I6BvFNNNJF7f`25TK%A9NoEc$T#?eGi)D?Q{&E$vDlR zc23b)IpW9y@yjr28d2{=DUzKvpo#%9Bu9<8w9a8Qzg(+mnQ9to5+tk9ehPhZUO5mc zK(-|Gxuc4Xs35$orA~^Oln3^Ovtrk=jR2;CPE2RBGnKl_LQ=qju}ZR?+I&LS*JfY2 z{z3>M>D4RNxdyDI>jHg>1RV3wlllc|w&cy>k)~;gqT$BPJG9$7;0(JrcDZ-|E>GTj z#Cz{OCg+aH1a_y5M4Oo&j3cMMUe|?^ZjHm(ApZKOr1os;1kYHpVN9IE=7#N^hRMWZ zT`vW0O!90rLq2>;D&H;ZYh^b`+@KdGL2YD?-;-GZb=3P?hLR#XCzmX6DSA@1rAZsr zSt|uv7UOw=sd{gf0-pz4Q0|yagty_nC#Xd&XIq~|eb*EEK-A`;w_+zn4S=ORSpIaYN*S#8CQ~tF0R>PVG*b#y;wYqu@do_rNFn^ z>@8e}tW$DyKP?t)LrRI$)1DuGe9Z?RJR$=>K6}ac-@jnlNpr$Fi&F+eAI>an)v)}0$z54KL@#jXUZTpB6Sa!O?QDU{i1L=pT zN%@{s0lnopouaDyjIGc70#3~1WT0#}F8(*E-N)-Pf3b+USfFiEU|&|SZt@wcqRTdE z4qWzKtBU7!UizyFpLMZ%SN-#eyeO6mmQbuatb#2y-kYBb+LGt z73}LG<~Et=UsY&ta&4}=9#<(VRyAr?HDgwN_hr}NWxv1b{#@6rxazvS?lpVykG1kb zbk4DVd!MHDBKZojO74XU8IV6Tc-}=ZFf2?O({|A>>?wU#=*(S39sKs+>G!6 zqDBstob&eN>Af7BPYz0MmEeyv+wq%SClYypbRI)G8N+JPs!ZdIW=Nh(mZt(Eo z6FzwV1NQg#SIP*te)jd?gNp*4c|R54hDt5`Rj4K-Q#$@i`QCFFpTB< z=K-s((uvhu4p&7$ZikRVh@~ByoYK)<9DD;{zmd5&#vO_I1IYC6ci^gJ1 zASa^@ho0aJeQ@>u%1JWaCvGZnW!B?eL&{4%cY&u*zvMTc|CX0;Uhw{V@AKdN`~SeZ z?|sNW{Nq1!He2vlfBjed`Jev<-+%LaUcG!tH(yA@$~i&`WaSMsO+(wZ7~822SsHED zK#m>G8I>+e<1L{@m`)qLl?lEmGEdAo@b+rV6o76--vwMd16lVUF7s^ zM%VXB`&X%MY5G}LpH<``%_F8j%G%)YhS&w>%TA`0-r=IhxJVx&i$2gtS+t6ZDuIP& zGGV&C!^21K^4=55l<`w%+%ZlT|= zQhkj#T`oFi^Cj~|$8K)12!N$SRe9T%1E3;h-%RIavlURa$B)EnK61M8*OHwAjLt2RYVjC z>s^(DD`WtSp^F_hCEAIpwv`w|^=lUh@VURFl&y`tqK+6p$DI@Fo_8g2qp*nNxP}ze z&Spgx9?ehK62p7L4%`_f)Mt|v@+i+LVaq=Bi8>a5Y0^fku*VHeFnxxj zQG%n!*|H0q&XzRo4wH75gEz-~|J`$4tC+fG)Yg$kl}h8?c?hwq?_{zW*(a?w{-VC) zb5;A)1dYtOVZ*SF+6+R!j%jxpkIY|H0In+vu45Tk^?8?VukfS0%_A6^{Wc> zP2}!Z{kKiL-&Ylzn@+GdDHb(2eUV*29mU&m6i?!0Z<&{$W{t}Eg68fNi-mK5lRC?~CeDbW* zDwR;BMAvn+qewTI{zNToA*lzl?>pYSdBf@HX@xb7Rs=O?UOKbo#U>tJW86r3uG?X< zc+YZDd9)q*$7P`-K30i~65m_Vlsa%ybl=#!#p6fs^X`-P*xTJ>zFhF#_rK@q@4w>Y z^bIjB31Oisf>fu*rcN{%P5kZ1pFa4}qEegXCF-hIuN1+PNlV*o$;(S8BsBwPIX+)Uw=M)T=0Thdc zKt9aYg~vFKQdO8F5Q6 zn|I&+h({0K=j`}Mi1}912uMNm+k1@Bh(BZj+k;gjL@~R^wsyQ9nF4xS;qkwZUk{i*{}NW=&IZc6i>z7%Q&_AC~2&6IDjc*p{)JUg2+n=P2lmh9|IN!yd3z-3FJ zS>9DerIwWZZmdidi?XNKhMae#Bua$>p7dV8lRYJtG2@NM$m=nvg|##SQc1i~8U`Stqx042_irS&gIBrj>ZDg+G%`CMB`|rPylWA1b-O*JiaO z3Q1v>$83ih)mu^l_ptVS|OwxKrO;T+DrOKjI0}f}^8Tjt|d>T~bSu=k?K&wd z)9?84$Ct!d*g?{u3EKEDy06Zfs^A+yljXfTf)bbKn64FUR*Py%HEpV>9EuWW-GK9| zn)a$XV!TH4s|w+D)9}lRuuTc}n?lhpE3!7tRo|qjyZHC3z;~;rrJEe5b%405j^ie3 zf~&TBlM83v@mkfe*mPU3+U8Z)*{XBDj(2d~?^yLatFE_Ih4f|Hw$4IvUFFHD`(d4x zVx9739V6npR)S5h$1gtnf?v-M2?@UW_8Dhqb7F*8r0r%*(Wh{Y7+&3``l@3LI*pNO zf2wkAMcJ6l+1VL~hlg~_PGSdbiA2kzX2H-=zHDMWWY3q}bE6YaJIL;I%9~8qNski# zRW50*uhPo>Teo@l-6!0C=K;GryLA1M=g*(<_19nU=FI^yb>!S59`#gTG#4}K%dsy_ zkTUfxe+sBAC5g`w61@C=DKKR516|iuI`hx~D2vQo6%Us&LB{^s;W{z(b4qmM#p|*n znT$E--!DyGON;*@O3Z*10PE~Uby`uc$V=||eEv8L zsRK?6vOrO6ByF%b-^kS84aY*@i(`dBs!gh4dy1MO)z~wXh+QUNMqzm!g{1 z@~l%tgDl|NNlVkT>gScIR*FfJ6`fw6hLn5y7-*V?$z;mu=_#|>jM;2Pw~XAnd5b^# zQwH+=T_@5n^jiKkmGX`3lO`}CK5`}J2m|KVE>4;LgvsY8~$^1ffPSSsx~ zr6HXmC%iGVUMv$fD!;%x$ex@#8doyZBi`m3n`TYM(Bner54i8_my|cw+y3Ng-x7pg>;r6W^KKk(S@Qz4% zbT23<(>Sb6SeGy<>;D&ue&btAJH>)Ck zM@P5l=vh)yNGwCTh!pb1o7!B7Ibm#%lVr)^S(}TZNZ%Jp?iqP6M1fhBhF}sBeh40C z49-e?TnLfnvg7pRjMLK@ySrO-yOFKdS6)G#b(&nSxpJOUX$G27gli0$K`aWLKDX`Q z^LI@{nm~Q?%uu2t(!M^@%%tljRJ-gRZLd@zdiRZE!TWd_+)7Uq#6aN z3@5z@bD~cB1+J z4@pnf8oF*NjpnA2p;7@fs!&)Nivw0H*z;$Y<@tWVSnl5fSy;~*u-vm~7RUx%X zwtpR8`&Ij}&R4$b^Hvq7tM+G;%A@jY?VTew=cxN@$n&thi^s3oYVLxFxKIX zA2kfjKp*}|ykD83=emfx=ueccxJ)nQ<&jB7;f1!LZMM1p;1N&WeUIC>Z!>8o7?U_S zc){0SeZk?;8@g^z&b`6{Wn-*n@FeoNEbZ}m8B_Di`6!bgX$r{xG);3(s+nS6^3%05SiZP(HNQ@ndL9c~>jp)m{S}$Zu zsl@WiP>AQYX{?ZtpDW;2}QX~ zFVy2&tPq)4EgSRsOyjO1uJzo!af_YpJx)*NJbV6o=Cc|1?%d(tJ9o)3@b>j27h=INf^r0tZnaW3nMH(~Y)@M~i73pk@ zvTu!d^nGAH?`yI{PLgHrCsP3W`3&QX#8zYRO@mWEt}s$0uFRQ+7y`$KhxA>fZMJ#! z@-5a#MB?jLZczx$Y<|Kd-%vFn*mCwdPk*FbKj`rNF4o%8$3GplJQ&`ij- zAqC+R%oiO&6I&W@FeWP0QJNpcQ=S>J;jMF(IzBY~E&~Kpl~U!N%6fy^qDRj|!!m}5 zX+-uPLZGppM9_P;6vCx}pcc03O*i$qmQuvZ@SmW{D*=24=JSrlvXjQ_mNW(#O?Ih? z0Oy;iTA7aGPnA;cgfkLGN-^g>h6a;*LXczU8nH~2*tnPqPe*>otLmojb5)KxO~5hE z)(Ne?Vbvm_5Z5d`fM|!cPgO;!O`<$#%lkisA;QyY3}041eVG;1!+{iBQY`9o{#+AZ z8i=)d;0(9#+~U(uKVo)vMvjr?V$SKwDQ^#tIXa$^k!MKG<=P#rDn%;poYS9MR<6t5 z-X0%+{1NZJ|2~ax2TOt}Sp{k}5F#9VdwVoZ!}0ME$0tV`X}Dz4I6i#;5w~ycadLdZ z4?n!%biO2qo}KMI9zA-<_RdaCBr5lrHKiwJl}Vrn$wZ9J3I+9;yv6?h4R&|8X&TRb zF_-NtiZzNoMH-9FU055|_pb~Uyz{bVvBiFoDzn06gTr96@ccwY6|1^1X%az!*cMw! zRP|YXZx1)Bs3P*9hKecTeN)#xB@)*;tHUEh2!`X6r6@3xLU)}iM|3|^9%7CKP-rm0 zk(#8N_u%%-rqap7?tN&UJ)XPq~H6_{$BqTs5ZTX!z5N-{tLZ*UHcdRgb2$n3BxHFeYvf`l1>l?bb-AguwoqR=&6U>4c+ zY&PfZ;TulRPE^*MFL&`*;E`EOP)Eh=GYLUhbIov;e4is-+DYnN} z0WK_ROXT1Askf^IPD;g-XwFUl%k-}<2-VknG1hOarnq?Q#;FBkdErl=38-Arj+!R6 zDq2LXUz2e2bz0+?OtzS`TbS%Pc=?Kh zmoKpycDJ^ec*l$9KX7_<%(tYxj)|3`Wjgg(6KH*4>M|~8S|8Zjc1*T2&9q@U z-KOy^-6AnN?KnM^Sg>xHST3Otp1y;aEpub&OcZtjhGnu4GBG=hxAe)-rzpTdC-+rw zQXqG|*l$uc#MsmIfj&fyNY%!gMn=hkG;7Ck^c<(eqm^fx{N*(nB80?j-bplFM4F6B zvkP4u6csKDE1*xruBTfpnayUL9-T7XzQOJN`|R!BWb45Lj?Rto}F_zFH-K16UH`V+tNqqdWlVpxsbNKfDV(@38WL+ zw-vR9fcIp&Toh145tv7oB5FZxYya8Q;@#C)w^*%W&Wrsdgdnf2ETsR&d14YiLrWveB+gKF`;QDH3g*H$7HdJSS94=GW{p1vOpTm!!tvq;KCPE zb%XcV*i)1kQiO^(-CD1f2Z<{*dJGHiv?{!EQI%;ks#B$o6_~71Np?yae_EQm##GCf z^%4)6wSWpCkYcWK>ud()Qlo`aOu0(vYiwgu@ZKoax5&qH`TyDglE!Nzg*-#oU}tBG zC+|L#=S55`7Bk+yeZ%y5%X0aQ(^*$74x+pnuG<2E9o9U$4;XfLce#E0wniI^`pW<* z8np!t;MkHfw6il|cW(>lGnpkRMc#Y#KL7g9evY%ycRkJ;{^hq{Ku&B;x7gX zdzYLdZJdu9&qa}8&aEGYfk#mj#T1l*Bx{-i26P1&Nvhjyl!=g2=IH2z<>HK+H(i~a zm;0b!EIEApmb25DHiqPPokj`6*y>1KcMQ?L#nLx4_y&fKURTDDv~hv1%ZB74s@*VU zX~szMg@6iUAN5@2p-ErXaY?Q}tEwAesrbr62(g!2RHLk|T2%=H+rShR(g@%=gi>Dr z&pKvWRRCOEq-+B6TGdflSCFlWDY&?J+{6dJY6`pwcQv??;+FamPX_BynXwMFFyZgUcG$AaycXBCC-~FV=FJhtYqoxkxW0G%ojQP z#Xn9nmYb%n(S9OhNArh=hD9w3)mT{y#Ig0DBqEH9=yD8lz8L5C(`&YD=lKGBXb6lU zf9D`k=REcKCvyL>EPl9t8ExaxWN zSmJ+l5+IS62!Ki_+c_rzVX5CSSC47&)}}h8939bfu*498N>PWVjJ7xMemHg^1lqR6 zxrUS?ZPPHFv^ZzfE)sR|lu030fLj6I87Ch15CYjmQ3V)TEH37AnF?yQxit7JC#Pqe zogMJ{&1+1K^vhG;ync!Io|}6&*_wRH%^MRQJbK8V{Mo-^IXmOv**C;4=yjJ#E{)Eu z$mp}lgkoJVM&t5eGMN&(IsH<$-3#Lj8^!y-y|u;e%?Xp~7HxA%>y~VJ!|wJrySJv? zd}qquJKOBuxyfX@LzpMt9=zezi&q>T9C7sKjI-mOZqYGYEbz(W zv*x8cX#xt!CKTVks<0L+<7UeHP_na9%~~vZtn4`KlxM67Bl|w*Z;ud zci-pz_dmcn&+gtXt)0{Nf$5egtgJpCv(dc8WFZ(WXl(^1W<3TLN2Z~Rjzx5YJe2~| z1>vZ8N9tk)qM9i2WzJesX^2H?p&<9as~mvgT_^og+#9vOh;_Wg z^(x0SrSpwv1tywYN?`GfgIqgpV@0_~Vtc2dZG_qJ>g5rqXUieGzJ|a@xrP}@xk%}&_a-s1kfJACm~!(zUm z?|X@Z%^9l<(u6PjmK6pq(UR8Lsu%zxu-%cpa?^TYQ&lc7FaS1L#9vilZc?bO z+TcwJr%fW(E-P9tPHWcv?5g5r)q&hZVQ^Iux2o9Nq&U2;M}1Xsx2mvP2eI4K{;FKTpRA(e!wT6{G8kS_tX#DW31ui=#Zyh zea4FyKhkwGmdi7V>C-6!aeU4-M#);Tg8eQY^PyNZqc}bRxV6m`Yc0#=QYVV3#@^%{ zt0c{6R(Fi17PDn~(x~M1VzZ^#1X8kffOR%NI<>Bx{`s1cl9CxFhKoo#k@rcB$0K6E;wzs#L&01pW z>AEHJ`JBbGXPllK(=FzJc)EADCWN@;a60AS;CuQ$@xccl^EZF_Z`qq}@xT9X|A{y8 z88-I{M|8x#mu+>>hYphyZR2oGXxp>J8GCzsJbd(!x33R4%YkWYu|!(8&Cb>~xAx!R z?mG{7_~ad$$uZm8Z`s?Ovo(oqZEvx)w?(_x;C8milN%V0|+H_VO>nV+1p zoClT*%VGwzlgz>MV-5~p^5Vry;=z)17VvRGidLqT$P_E|Q5TL@i2hNg+bN6WI%Bms zOI5-fM=TU)E%w5?$6AT4^3LNM&vMa`bE0WVgjSGdVB={f4U5G>o}n?)PA8h#9caAN zHEp9!LpR0X@y^nPCDZMetu2Rja&_-)?~$|N^!S*w<3sju?sNP0J~mGwcQtNKe8WlN z!peI>8O2H+H3~kOCu-;0ljWS%UoWm;V(}6Ayd5C4G0-+%is1@ily`UtJyGAQhIHL z^dYFf-_>`RF+#9U^q7>T5jIwz859zjlo^mlY=qHTNSh3DPSk*9axKL5KM&7DA*JGg zY1^{1y)CID$a4iOeMlsuY!z*II8~sTMV?-r^YX(au_crcEW(-U4kf6m?8x7ps_BhyoB<(#VRB*Z8RshH@O zov>LJfo|S&@cMuset5>~*Kb8lhLuKeMu#tGK`Rn>J7OPb=_^f_m^eB-<3IoBzvJ-m zHM@H^$uToKTXKAS%Inu}c=_TDi+Lbsu^%|^>xrvSype)Vt_@)*dGBbqwq&hQ);h&D zr%DiG9jz1Je@ao#r?Vq9fv)?k@-2Wq2E1$VUgMI{OS~kK==mMMx%#XzML8tz;|kDC zw*I$f+e@=7M)1Y|Z-$|c+C?_4C$FlXR@Fvp6#(midY2X0n|3Dt5VHJL)8SQMxIeUz z-gLV!7HgY&|2L7JZ{iJKrC8WxpVl4wRoix1A-##cVUy2WcMYxkolQUcsv>>UeEW40 z`gIMFP41UXI1H<-0-Ib5mnj7<+n#lwcirp!{6^~{$;qPFW{o3Ckr*V-%V_7=mdx_< z_nhlgF^^(+%0#CWe<>wqvoqeleM8qRR9c%x$F{^Km6vg0P)mk)kxSc=-#PTX7Wh`- zgYqI+E|+xyE-x7;FHzs{hCMtu9IEVhwPM=Z>>`ZVe$BvzlP+67&;98 zoIN4NSfN_OG&7w`Wf=03i)tWOFQql90xzvv5^~IhK4^-CVX;_3PBh*_HndH{-tG;y zwzk;a+hICw=;m`yPJ$FSvDjyva0X1n?fpCK?Cf%5?*_Bk7F$~rZr|BwvFMr2PUsdh zQs`-0FW|7S8HQq%g;XJ`0yF|R~Yj(#{2;0 zOo}eslC7g>LN>cN<8cIxpE2EjhpoFapw|?LDXtP~`ruo>{@v&N)BpE5U;g$4 zgM+2ohE!7RjL7$+PVI|y)Fe}B?%51+crnZQa?V#JNx7FA-wc-6oUz8^jALs{>`~>q zciv)5r0dUW;)nMZZx2w1g}+``2}~nR}qf=&QGgR~?=b^k?vlY+11Be^yngkX{ry|ClLqLes5TmjsLi(!qzQa=6w6za~5617|+S^8Nd0>Z%AFog9i_=4*D4BL(hD^V7ZjP7K=Gu*VAj! z-z|Ikpbf}w$$Y+`Pe_x(DnlY947oy&a{(_JTfx81dfJILH+60C;`s>&FaJTIcV1Kl zc~H&SrXdAGGezI8QPeJFoiVZo77jpZrkk3uV5&vNT50+fTc~dutj#R@IVL-tu{H6d zC_JN;fl(xD15uuLZR<%X;H|6gcbV!ZRmLT03K?OWI42R(jgfVqz#s)mXq}b&%Roxf z2oM*7TE9ZTXbQ`DHWeGyjO!G_)$X{?yM9rszbdEvs>T0R1=G5`^G%DcRXl)I9gyo3 zlbgu+H>IU-+F-b9I=+t3ze$0=ju?5>`MAm#zOI3>Nm9hcrqX4L_UjbbCLX&Qn z6uuRmxYHBtM%SkBa|e`hKBJh2kl+D(}>d zk?`Fs0CwlEC+D1c%3USS7Z6;Cy%z8T@!F^_Gn3Bw%r85irBE-^@rxiobecSt(qFu{ z%kK=?^JXNiFZKd?QFmQen+t`}Fm#ZvzMsy?d#y|dLg=fXu&^A4@6{%X!kCOT8tXU2 zP{;(%RJdc|5dbx>z3i`ZUM1Ng9dzDTx_eLLMvQaZ-oL}GTQ~XP*)xug-q0@=(IWWv^# z=bPVui8Y?bj~?^ny$?Bf@r)n7{aU7nO#^WWTENP!D(B64gUK+NOxW6*h*#TK+NR~v zgZu2?+Qyj7um0+9_~pO(_e^iRD{f4)MIsP07;`E`q}d{wDTW50B}R(8B-4Ot$ZktH z9S*|;W46eq$4}m^1IJ}%h}OeY+kax^=ItuK9;nBIqQ_Du5U}2&yj8q)a;&X9XNu6EG~p^E z#)|x3;x|R{7DHsYSkU*|l_H)izHU$hjGNiW6S#hEi6=u7Jp|z9nNFvq6a+S#63&73 z9+DJ(jS*WM7@CP2J?lkOZb`L3GA0vJ(D$Cv+;?dtTW4tsH${nbf|!W1-~MzcDML#f+nCWFJz-dP~zF@A)Xl@#N%$&p!K%5IgR^b6YqsF_21uOvKzNo&b{0n190DE4X* zFcz=dE=r!B#(R0^Ya&O1Fv|51)QV>?lNM2M8cjhm@{C1z56*i+2>8b80KnCE?RY(8 zt!IFTs)9Ahc_RVN(v$`+MLDWAOdY0N=g+G8^Ct{|bw$;>CctF{$5ln~btZ*ZH6kwl z%(|lOs%>2t8#nHtTvn8>vn8yPov$kYsCg&4@o&7LJjW2JlkbPPlRN4v!u_;nAaanM`-+6HK?Z@Qvl@@PMb^ ze9rgZeZ_2cBrj(YeFz9!$kb`?c!FK%|7BuT3dNz&8@%mh(k#b1>hwMkV@H|l4aEFH ztaps@L2_PGjkYR_-;0I(_?#LO6&#e$Srp3e6o^*YR`F)0>PeL2UM7!aaXdsbR!mX# z#gDH?bHUeZ1VE^h@uq33_g#L*j`qn^CPF!nUX>Fm#*x3%RHAqJPC4EUg$IzcG)kN? zw8~ttR`aN}Xf3vbl8r6-@JVBn4B7e$`EoTXE02mYQ%UXC#t}GaNIs~^XnMU`Ba^f~ zc4U)vN+PEC7$VUOK*5w{vDo#YdKy!Xc#Vv7My3{4uMx#&ioi7s{l1xQgW2Y65jgw) zd!9Z2k)y-6glA{y+Z@ zzI*yP^Z6X_5{8I(Mwtl)Lc-*PYg$@k=;t$z-n?Nkn=`S7ZJU_-%-xSa;KM)tW11T` zi8zdD$ZQeWBilO|Ges;RsJdVYEJ(+Rj*Nm3?hRv-ExB=y<_m-YcvtV*AW=+R%81!;!run+c0< zNx$syF%d)N<%@5)eP^GY-CbNWxI%kPNGVWXNh=gkKa!xD{jcf3( zVZQ9Nkd*sB8JV0rYw&j5xYX#jtSX}<&5V^wLjZNDOkWtq{eO#R3*bO{PKRl{KZ!j@l;?pREGiB*o$N>o**~Jz_bZb9Q#d z@!=7NM<;as&{QaneXHN=@p#vWN+e}vpeWGNI%4d2`QjxpUb$c-upBRAzUjBwDP_+nks}gYz>SC05b4M z3>1F3C!K=zl2{`2of_yxC8FOoSP9Lbj*1!bkTfFii9v$j(pDu+;~Qe%6H>-0*Ql;{ z)%xRAStClGVa+2$j{)#`aUJZNR;@|}JgLCJ7;u_$VX~ygZ1QK*+HJhn_g8($RmH%6 zP44=2NcmS4XIK5)b$r^J6f{>Aoa-zIS52=ke#R<~^`_B=SDoZl#rHaC`&HM$W!twY zbnvp{x$YRPnsASg;dRvtn*OCg)8Z{Ad2VJXg~@bA*Sbgzhoc=z>Tg zSJkGX*F=dgD_;LH(J%W{j-z*`#t@Z>Q%q5%xA|NHCx$ozk;&AmG+GJ-X*dQ0QMr8A zz!@l0IybUKlyh3*6oV{SlEK811uyqwl?RhFzkH-5u(_%eoU>T(s)sn{GVOC1<7p?` zJb3sR>n5C>oRD$M<|n*<^@`KeLt;P2sDwXP`EpheqR3%Wzhpi;WWMZp_q`AKi+}Ss zw2kF|`X3KCeS3gS8E1r4Zbe_ILXC`xl2_f&PB?s%=({D22^=2G+1Y! zv=af%sVXH!@dwM~&XA+Z>WK)OO3NJU>0^)Sgqz_S$$4L#Ey%`UveLnG;?1k){Ql|h z_~?_Lvw!Or$47_6&@($bBdJ_AnAy(0!;5EQORDIV(mNUB-&g9WStPlfq!hVh+;RHzPjZ8Y7b25zwjP*$RytF)G=)p)sH$xD4N<|M^8TUv z-DQoH7^h#FFok|>NuCbfx%KCM@K1-!(qRfYZjU>aY6yjPA*JW$`RYUX3*5Up-9_4kE{B=dk zRo`>nf_PJT{<`97T_*fh`?o5ieUmBsbvrqmQta3L_p7GktM>J>g8r(;!@AGCs)%1T z@m~jAT*p3G#bww8!ng@{VV&&%4{07;Rh+N87gn)6Ht`0nyWXywh_Gs3FWrAE7+(vs zLF%lObnj{0=zAE(nlS~umqn7X4cR!nYcV$Ae4=gTC9>!`W{Vkp=*t{n$Y9o}9BWLa z!g5ZMZipe(>3P}ejK%~O;9!ykfpea{y_-C^|A+?18wM1VYs&(mi^k;Gb4qj93j70+LHTIS|LavmBZHTOG3 zDR@-&FB27ej!iID3H)?lQe9}2T>H|9NQsdzaqwRk=wV?pIOl1+*C}2a>>_!%Pm%(% z#`liV$wJCWrLv~lO>FfeUUvVd3HS$^I-Pbwh5(#RRvLHfQI zIA?7ZflTFWooIv*v3Q#83GH+T-%QEIV_n1U?jFvGon|&aBX$eCRa=Ato^olR0NF;m zP82D#(__B>=4QLr-XA}NaQBsUBsjrE-i4b z$6(ms_uPN5gKrPX|37PQ)+9-CoC$tvX6_ytnOSF7AJrEL9>c+4hRfjyhsVmk?8**h zf9^ia%go5G>~dFjh9Cg~Jb*?6jc%a3x~uERJ0jf8O!q-m%`Boaj>IrUN~9_)Gs45& z+)ee<@4z)cGk|)4BOILrI0y437?%Jp!F&$pa}cfo5_33EM9B$d)u<{X11wW=;sL~S z`1u?k{QiKCfADwl+ltC7p+nkdhk9E7* zQaMW!0*SF>KlH+uQX@&{2{C1iVhs-$GdQiVKvJ0jG_TtO@QBd>r3`WzLoYdbL?n@S zok!ny=!XHT#SJ)4cy#Xsi_6zYDoE7|5 zBh=FU7#j)I)D8wr2tB^wqt1?BV%a7IDZFzCU65lYM(}RU>@-bFZRT>>qh$>Wiy~8v zWEDFLD&8jsQ~`h|VNztJzK2el_mpD+v!K7v%0d%qOI8p?m_?xz0HYfQkh0*YH1)c? z)M;I4@A_<4BReJ$FUY^C#19Gx;t(U_W;tPbBMidK4&0dz_H3*y}GSYcF29!Ow?2#rr2`Wc%S%)G7VIIa}{7B?Wvs?fdVr0kQoXWGK zL_;cTsYDV$7;|?0t;Vrt8Z2~vq#8{eQ(CJ_>V2-&Qsy!lFXxd^n3Q%NGoXG9#-hsw zBoOIA7SmIU1I%(gb1S9dD!)r9iVVfqYbCc)Dr=UZ!vbSfNcLg5-=r>MVP4fjwA4?9 zVX{%DmSmv@1w2XHLmcVLmqIb%wV6X<6YO>E?LShddywd-JwnK zKJZ}IeYo$~?&8I<>)7^rIvl#5_OXGse;9{;c3hm1O}}TqX-=!;NMeY*hdJ?>CUY2u zss#)ZadmWbij)%0U%vwLudrH)Te(c`x!HVdViFLQ%G;XgIc?HR^A3nHpDUAps8g=c z5$~Pe#|IyLg!kTkilg}{QkLTHcz%TA<2f!a&++LmKEcmE{Rz&_UcemCIVYvKp)`Q) z{jlD2Rh@kMvq3YZWn)TUj@tZ}ntLr0&t5}bw>JN>d9~}%7y8_$-t@L-*KPNUX)A@D z;LGISBJJe7YrLGgNY_*clz2SR-MO-HTSTE8gKN%}U;DiFcgv23mK0|AWSe>c44U|^ zn&MES{aiaODKujFd|jdYd)@50NJvb7T1?M$60n(6Q12y~2-^hG;s|r0cGd=vRXf?n z8QOW-ycb*JNSPeTnwj)iO7WjliAUnbq%LKEQo=Y*W#T9d1ZfIq^Ant$-pBn14>3jH z<@0ZFd~$@<>PnIWrcnyG&Z(~lqgRJ=DHxN`lY>N{#c_qJ^Orb3e}#Ybz3<`Q{pp|K zvtNFS%NJh(c@o{E7xsZ87M-rMdpLq}MDIt;x`>n04sXAAgp&sh&@&{yQ7w8ljzzBjwa)A;+>J7oZBx+M(=s4dbOP1^2;`7FO9UW8rt>OYBJbgyQw=M@$TU8LLQH18-cw`{XLKZ!tf*#otQpwC zDiJ+8YZL07L-2&;vpknTDr+IpG%r?Iu2zu8p^)~){1E6uKpz}lzx)>CG+}vt4W4>j zUtZ(&%h!lg#HpVh7=z7911G*t2Oe6YE zwC*WqxI{v`2V?RHj&$m#I^dX$t;L!I0oJR!b;d~EL z`m`gD%!HV@M3gbaUOyf$Y=(k1dw!p2K?{fhsg7-Bx zwJ}nasefgx`Ou;3qBMxm=1(+C1t4tQ&bffI8Qu#hn$(cZoY-4qUZa>x1Ef$TYiq30 ze_r2{lS!rQS>-{-hEo6oMsTbqv$?ReoOuTj!6~bZb22Va@kwwl=$@9!UMbIg z-+=SVZZp;!yS0Yg0N|_?cpaUW=Q(K_L{uiCfys67Uu0Bdu3+(#Z$KKvngNNH1w{7u!`yAT0 zHQ9G@p5OPghnn>5`#ig}5r;ObcVR3Xn%jN|=yKcVKBV#A^*Y;LZx^NH&^W|HUgwa{ zcv~}jNW|T3=XY20zwLDoVYKX93;VnY_JJDP*5p25V;2kJkniui_xCX@4h7$iPwwNb zC+{_{(@?*)sWmesZ-#R~apTXN3;NE?8mE$!b_XoS2^W`FSguxOG9AK~%iCkUaF>81BLIX=OBeuU-n2EY956MXvV zKjHH76&O(q-x`Z#?(arRMY93gj$uH6HJMd<;8E#xscGhAW0sANo9TN}FvCthgV?+P za&w*6jr;76(bL;zwq-6@(MLq37_wt%e`cKt06m6v;G<3rsBEa*oDbWabE*xj6~}do zF941?2h0Cib!_jSi-xu?@oMlxYf}=p76T{-UO`>xtFc>(u@tB&rxN{S4Znb1GVzz9 z`b}nqO<~#!Hl>K1T>~EQ8aO1{@}%AtC{*TBM7pdgUas+xV8z#RDNY0^aYgT$Qq*Z; zr%lR)taM`^dQj-_;Nc_8kB`9&+&jI8e(3SpXP@EAU;hHnzx`TF$Cwe5vMcny?0i57 zbs8*sXb+x7EUqr_#pl1o@Bhp1;rIUFyZGRv-^NeRU%^ubjSPksdjO`KK#>rWn5YqF z^dX}U2`BdkJb1f9IJyDj0-3)BW7K=xgE*+fJ|bfY=9T1U(-9bh=hIN z_iNR#d++t{YFL@L&{-|RJuatWXxjI^9-kDqnZ=YaF{7tW08RpqkLO4UxL!_h@CaQG zM~oa-h#cj!kwn%-BzOXriyM&Z5Ysovi7~B2B5`$fg|pYMuv{)No1e=1bRHaOt%og& zV`g>E&*gatIAxN|5W0+zBSKH;qC*%NK8)x)VZXSf@tC@vr!>KlN9Uo=^-&_tqMDrf zP@e&=8qejN!Co7LWY4hxW-*-fPJl0wW(WYBGccwoZt3hm@ECQHPpX->=s_w`o$`J2 z{pf;7J-qI577vc-w%}=AtiX7 zMw^cU$)zZIY-zYt>4dYo`l7R zaM&b!M$=GZU;|ybk?pXifRLU~ONxPWYkPfb_{(ZU?8xh0X8W_eNQ$}a^{#1bt>no$ z7ci*>FjNU4j1I0%zwIX$u_z!XgR)HB9lJFdooQb<@5M##S*3QlfDhEj z8PTwZOa|H3HdI&xshp>jD!XMf73nTtyBNxA0Kl%M>aLC1=J)qGito~XAJWv`hJ4)i ze~0MIZ)^Mx1vR!cjoYZN>aDoIYEw_-r0F9E zxLh92Ssn3ZVr-j;Hh@`Zu)z-q{S0qCdI!J#o!`TQ2ahl=Cyc9%VK!hspJNyTE-%jT z^Pm3=KmWx);r#3+rnp2-LRU2e*pWlJW$kR9-$K#X7{p;1N&_C_v=OV93Kh^c;7SY6 zg-)zx;~JX1`QGbtf!puL&4h(ofYg7R*;aeK>ckuc2-rLiX2w`1UfRH0dH{f1ybS7u z!)(Uvc-D$&LIFoyQ-GQGgfT3nc-8rov-xD=7(*WKjE}7^5x=2l9;2 zcvG;e6EPA2Ip*^@eDFBCc#Vs*bA0~!XZYzq{T(hZzr|{C1!j>mjMD_4NnFyS6xfu6 zlB}4NFl-!fdHxDN_?y4R(~o}(fAnwv7=QAoe}>oJevR|zUy3myi92)ONn=JCnBs`V zG9h3>=rb^6%uhQUKOm5Qjf^EgFW|7$B6jI`2;YKO?Efbs?KM+eL zFc8PPAWgGNC8AHJrJAtfJq9m1?DkA>QJziSsow$^6PwXjHC%Ic?IG*mdx^Fjx*kJ6 z6lQ?Y|BWb7)&Nz=$!=6q7{wYC0T;Y9>7+6Rb>ElQkY`rtf~H%f5;05Kv}R4dF|ams zQt&asQ(c!arUF!Y=Sp)QyqEpFu$YW4p8@B@9FWZKMAkrz2^ow&1mu+9Sjou6t{cUe@(599eb{{t&1U37Crg|_pzC|{{&c!@3XGY9Tq7ka! zk{Re`y+`C)m`{rWIh-4?pG(>WH-iLAuR#H+Y;Sj^q0b6p)KjX=4DU*Gv-n2nzT;}l zBeJfcTLy0JwJ^3LU~z-W^axby3EA(=bePs^iyZaY&;1|)1d{%!sQy8xYi=U^8o zux%p0>wN9IhYnf4yVlCSbG`3(Z~K|Mf&pWkaJ4Xvp(}a3;x;aNSZk2sDn-*aB3NV9 z(7z46UMv=P_39NaE-rNP5hdGLW7Q{a!Ls&bO_xHAHM(F zc>44s+`sn_!l3k+&yR3=G6y-vx6i-E7hn7WpMU-fT;E(ErU@xds@1N!!*$cfT7!C9 zw4F`sgRcht#$ zH6f&u-!9$`IVYX=PysILdTj~`ZJwYyL(;f3J3kcwu?aY@feCFxZB$AFluTpkTy6B7 z8WjSTvS0u}S_2%45mgj(zj_^^;1U-`ihNd!?K8coZ$7hLA6f@tTCar)1gx_s>}Rd` zUMo=Gln%}qh5=pIfm6abj%6LlG)`%}&Vz}NAtr`Xo)DZvv;rJr1~Vmlyc2fAxRhn_vH2%*3=&xPSj1ItsYHxJ2+7yt+n=OVO7P4&9uQ=@OZ* z;OH8_B(f3AKsbVPZ-a0jj3WRYKm!N@03W zi5~-)FxHOF!6`GR6LEV|rV{}eW0a`4q?Bjp zsw+J!72b)_ocA6vPSxO#tK7vqk14AZod~2wxHx|^JTW{06x0noJEi{0dW>m8ToDix zB0P>y?_)TcW4SuV)#W8#J%5h#vsZZk{kMfmZB$=v2#c2qc>v;dAd~2fl*J{T5sG=7 z+K|Kh9-*5dbW1oN;R`ql_<*%%4LJ`#t)$rZ9$jY|aWt`n%1%;UG-VbbLO})dQ3xTR z>pBEir;sU%@#ZiL8l@=OXrElsv>Q943jw6fac~08g~r9a?+5jtiRyS?<5Y7>$Q(2p zR^&3Ilw?Wl(@DGf!SsCx#H>2@9yv!$F1|NS7<-Tv=N!*jp(11{g3m-u+(_L2bGhgQV*Fwl$gZI{XxF6@7lzkT#}uj9x1sn^Kur7KMde%WQ`_? zODf+9Arz)*0lLjwz&XT*-Va*$6tZnO>$6wRy;Fv1UaOf}V_uVv-6b7vUr)AK&bPhiHc(+-GqwvDI3&()A6wzJe;;aAx9@A; zH9b_mu}cPW2&-V*&+h^Twy`g^eXecy$F}RVZ#{3D%-^Q-zbnYL@1ERsukVZY+$Ag6 zC!e{i_lDEPkGz8i5WG74t7#p`7u~hd+h9836xD=G4ePWRTdr2PzP`ZgSKs3L`U+Yr zmFcsXW+i3d+vHU!@ufmwE|Xc(2@hu}Qk@Gpz4s6we(*8gdFLs*ZidBTg%CR2yLTVQ z$8#`8eDn2}`0Vpf@zqzq!qwFU$fZVSCvMYa0$%Egby`|m3?!wvcU@Pg-_taygYJ5y z)uw5mQ7PrRq_RO3on%)1BCRJ6ROH->HowM1uyfiP{@MGtnzpL@UtdpklTBrFw!(&> zegIr)gqutRR->VutmtW7cB|X5&@!FUZoLU+;V4vTi0Sjx1gSK(Zk-Y-MS5Qy^Gl?d z#Eu!_Z~A{(e>x2?dMr^bhPWDh*|j3F;?5P1fntcX)$hbIlew&$>ZQ;=_j2)huxmH; zeJPrZn#g)SgBO-e;#BjMSvtm~S>AouVH#J6Sb=lGTaWK!wYtII|M&;^=Ibwz(-J9; zaxGz29$cKA4QNRzV#)~t0b;0@F^;0M&Q}-s@eltS`Yzyq{$KuA{D;5%-!KaS|M7o6 z$Ez2=0w`gM6RxkXaXdT0{l|}S)OlRLevV_;;obwrqjw)-b}s-FqLdqlH zCI#hYAe;g?0pSF|T;_$e0`VCVo#=gh4d4n;<2Zh|wKoyz|j_@%X(@ z@at!n@T8i5t}=}_gTtm^vZhq-q|K?sQ)V!Uv6>lwaR#V!pv*JbnCrH+@I zflxHZaf%2&U~&{a1!$hqgrw`rhadpwq~<+5=ZJ2Y!G#XQ1n(I@6u`wfIA-*Hr-p%9{WU$tILaR8ojiM3obbte z@p4d*MeYk~m~HLNWbCoV`=(-T%7}1vKTJs^Y2{q41Ff6QcZ^Z@L%?}6>!dPuuE2xJ z0dhuCxf2tBoFpc$sS&*o)%3R6)2;Cp(?4#c2m%(5(}d7<2+nImUE_7jYX@I|FRu?E zr$d)=o%Mc7pkjb4d!Xz!Al1$TdVNzF-a{Ma*6YT=c$<8~xdJ?OovbN_41m8F~tpyzb1wRjkb(Q4O`{G zD~VQIq)R@iY=yDb+*{I+88sIG$x@5%(3|Z_U)%h9*wuJ%i+kHOK|N%$d`OeEPv^bw zn71{Q`pRbvM##9Qxa(=9%V~u@k zO@vB{gGOIA29#!&W#CDSQO|4Dc((W6y2(&IwwmvZwMh+go%S&^7K+O;JG}G$TNsW#n3m$^&rYW}6Brj@Fd|2YBzpkMOgfe1V&5 z6mXI=V~i7GVkB1TY2)LOSti03+tqc=#MEfNsvDoiRRK+tGE5wMrBDOeS)tE}X+(5# zuKO-vHBOkK#1lGV&3TU)BV)=L>^sab2?aNFU@(T+5!gj6rV->AtK|)Hn(*YUM|h1D zWAiFmy1EZ_zhfIbNK?J-ly#M|e0NkRZno=ix(#(Dm?PL^t&4`yNXkE%CE) zzZYhi?>yK6J@>_Q%XqO`jdefjzGqs}iB>2FWUCMohx)3f=?g z6vzZdGy7zDE(JA24PICq*7%#hO`0a;PW=dy>btFRs=aJUQ6Oi=ZMo2wyG|OV#6cu= z${gvsPVTWJO^fqh*gV9-WPs$YkK-gB2ucAr@Yq1cVxnrv1zDaOg+{OYg*}VJ$kzcb zAS)YB_FE6nyp|O&fV|2YlocTwc8QhCEJK431Q72GG%#O+M!W4?>-8f#c18tQjqOBE zo@a9W3a(hn2IV&xSnZxC->*|)Rv_Q}g6tV=j5P7zV02wy0A4g~IU=W?HnNA0Q$*MM zCeg+f`B#-70Du?|3l5@ei&Q}eGz>vfW?5_YXHkQW&`9#s0GW6V2r*M%2cga9%m|^E z{mQ#yGU%EnzYKnqrIb@vnNKz2l?05W_od3_OlHOgG~_h{UHdF@1{`8a1vp_AKyezQ zf*M{m`_+KYKphH+qCLI(ZP>uTkt^~Xs}(rs zg8_iwq}K_DHsre+fNkI3M;||=={lr&+UD|p*RMm3@9uIDb^#~5USsp~-uC%-U6*}E zd%KM9_BE=zzPHPiZ{NiFF6Znnz7&T{ybp~%ysKH{zICe4wOska^Z3#XE%=*3<{1ii>;tBah?bW6XvbTnJdLZt&v8 zH+cTdS6JL!!KtRuCb!%e>48`ZM$P2SmdTx(CRL+!d>7F71D-s22Ooa$F-}h(V6|Fd zoHAy!Bh2SV2!ZhI*_Zg{n`e0b?K7O8J;!QXB4^Rgu0`NvbH=p|ywdp?36{S+O;Yp= zO}j^pkBf+LYMgCdL7qvYf7m8X5Vt?#Tx0^RNsZCao#u~mUf1QWJJVYM!sRoyjFy)A zzwSog{u@oAfoYqQ)lNmvE^&TdBNyL{&Ved81xc}UY98rQ+O=kOo8Bn(-zbf=Q2TwM zCLbMDp9S+Uut+4)3r;28r)4`>>VcVBnGTUCz_h()E=H!!HAw(?gI4I)?x|`tXoXjX z_dNjfACQ8@w91<-04w(7c(XR#Bc^^p=le!FLWLPYjzqKWo2W?6#rb^VD7xC1<^GK$ zKK{OZ=bzVqz zwTKMn0MIcUpMq%sJfVN^As)W-E{0)H(0~izXN^eF2Sc6_PBX@*XzPW`1V5_rU&;x{ z3Bd;h^LrpMLzAgofTy6(KPp9PikeV?D292OlbvEl7aSrdX~qDomJusnfG(~<#OPc= zPK?EP26BYuG$C}d9-lw|8uw04L7cF-zQV=DE5taVn*}X$wXw=sWBamB&(v_zv6|RP z11fR=mge7kgswxEBAoZ=`vJ3~h^&tANnf9pLQDXTj%J84qVGlOGEGq_xuV4vH~XMk zd0FR>PNV!tVi)V;4BR6gg%)H1COhRF; zviCrWPPW%x9B1Q5HE+&R_*OTcC0pCq0)=WgWhlo0hoM z5EQJb$u1UiXN`REeo@e$3JXA!T#PxvA`J|olXKTW84L^`YFdK<6~@%C<}e^=Lc*x^ z#ClyQOg_DqtkNa%ewtu zI7AD)&*1J5C;EMw?cW3-*w)-_0}pnk8SI<99%}Noi*2wAsJM#@{jLUcvw_=Zw73m) z*+ui;c5ZLe(eDC0c1`v7ox@$9YafWTj}5Y|AwFa(ziZ9hCh<7r{2pQ|c!&h$5a3|5 zq1q=C*alkMC5oi|IzM}fuYUc7Q0-I`cyu&}J2@8WW18T*ASi8=csiMwF+623F+w1i z_X`mrP7|)LE^%{ng)y$wMOKVsY_m5Fc*gh%{-ybv-yqK&Zw-euGk1r`07w$NM+d zRQofv0j`sw+H||p^i+euT;1|>jZZ3Tujpa9nC;kcnS6q2odVjLCRIs6r6<~->a!pk z+Df-nL&}(nhk!K&=7w#?LDZOZndg;E7*f&vMnDadsL2hl(tu6J>2^{Bn4_?Lrc{^# z=3UVGEL6qs#&r)yANVCtng>j#4KT<-C@ zu4LLoWzj@U>R3Tc|Gq``UU53RzGC`E$e^q#9Lj_MF_=6UJ&0$JY49mR_Xx))k8v~{ zA-GZ2Ze}=ka2ZIXau0*I9N@`|Be^!6-jR4VfN*`YEKb^488O11VZZ@H->b1!Qe!+; z^U*4gVMk5MgjcF>2PR2X386>d^#FOqEG#Tfj7SqG>oibo_Q7$2>pO5<;_4z{8n5yB z7r={epNr<0?HOzOXlP?b;_mK%TmW8srb$#CWsOTCf}cFd2ZS&ngeAIuKsRM&GKnr; zfD`dCaGo*v4wF;UM0Nisb^i-qVklFVm`l@5BLsA*Q(AO}ixJ3>$XT79d-Xq|NdW~l zEdvRYLHa~5hJ|WG7J`_V^}`I^Fo?-$=+N~&x-LNbYPrvon2E+H&vYseH#7g^vY(h_ z%X_cP5LXaqYx3CPGYVG-|*#E8tHa?7T`Gv~^PeG=zZAb(Mic^%%XH$`Tr*IAtraHvHum zl&&sG4dPwU`Cd{H96%|8JgM0}gF?&lQ2?gU#-$ne-WMAEW_|25{!gF@H9xhq1wD^B zCOC~~MPY;0W|eKK4!O4_s70h%nKQh8PGh7=sz`k;+lQ<NVOK+PNRzXz>E1^#-#3BX)>Q9mV)ixkyWaZ{>hompX84A(VTqQ|qw9`vdioIW zKm7=Azx_7)VZd@J2><-#9**ZHnBo#&fBg*4p8XmxUOdBMb&Y9S71JYY40CZX-bm`O zVh(Svo4)U1Q~KIa#}dWI?A0%Ulv-G)-Rsvmmx;7&gw?s$xd4Kk!*6#|t# z(3%Xbua9arm)D$$#dnB`_RkFTNaKgh{Ei?QUqyUn)tS5Y_3prU95=M)eLrY4%L{VCT-f8N3!nKt%9e(U}TJ zrhpL~;*`*V5S-{80V%k1mIkitI$T{};2;0tN4UIrT>vKUMDlTTG{+!+`PEyn^VD}#nI;3fc*G$hc* z)fx-O0DBO7m=2pb1JoBcd1*0&Hf#gDe+wrk@8jg?0Xlbq;Gszf4r7cmeRhPDYV?#* zReclp=7=ymnxXR^i`7`D@|v!Wl%i;_a~6P4WdkX#`%iF|`@{KK^mo344>GAvS#-Oz z*%83NYBh@NN^`>;2@Sk+U7`J^IN^G6jlMgEgTrFE#A0zHhO3sno&k0f;B>04tcEEi zq!{6p%1kc6g#dUd%qdG+0$dL`2D=sDf;5yWZ?VZA5y4S_^Gb~eFbsVG!sME16X3)d zol-`Q2_5yiXNbl*r39ZdviBP6S848D0Agg2cTEhWHgjH{Z8GeY2*Zj%5FIr- zkEl9o(?WNlmnN3wXHp!Ce}wlz*DRN4R-3w8jIeDmZ4|7upiR6jAd!v4q9gaL@rYi4 zIj3nZNJTR4sj{e;O}=Oh1BP?*>~O6qA~j%naE)oN8hk?KPI^$8BQlE#Vmba?<1)#z z9ZBOsl>%o82N|r-XQQJ>L`|P4uJ9VI*n;t!^(Z&%s-A1xf-_hgUCNLnsClcTOk`yi zhLU&za(dq6oFq<)j(fP^6s+8=+q(@4WNAQf4EZ z?=f^e`o6=}^(DUk=1V;L>Q^{BdyZ*ZNVYlhEj0KyffX~{aiuw{*|vfdQ={Wvcj~pz zXPc0)$WqCFHW_-mi4tnYEs#pgjy0)dltRa)p|+{OT0;-lqzTlu)SCSj&Av9{&NhA%2rxY84)%SY@@0` zt|{bbEjmeaE=xvv%=Lax>ago#1)j~A1EC~W$i}ili2{+f*I6gYT<0o%n7-qP zK!D>3=dYjRi`N%;{rWY)+JIux0yv2h|Mq5vS?d2~J_fZ>QS3>}8SA&#Q}CtZ&zM`X%au2#sH;mM=> zm>+kDF{`Pk6ZpUh!zwvx%tQ(xlWcMXM3k5^GoA!h12N}25UC+p=s|8-JU=WoMxrir zaoEocHShGLfsO{=K^h1#6LVlhcvy2Q;50ia&y$xaYv*N88u}iSn=0j(fN2t$OU{+{ zOir$|fXiZ98+;IdkuJdZ@*MIZzz4~;?>dpqq%1~&)0B`BqYqRk-&Lps@!bL&2ZEaJbdvwaO5y%H3;-n8Yu>?v9FxdGzZjX-!#@X@g;qzoAzJ*G24PmB!S+N z9jeK!nsn&COvSj>sl-G8=1NIVc?9RE0Li*ry*cY!lblmcdZ~K*YVg1Ny5dj{U5*KfX@?3AyE{H@cpEcSzbiVk4$grVF7+|(ru}uDrT_JJ;QZ{0-rVkT?#f-&1FGoh_P)LmcMAmHjfv7UZYV{na8;JwE!;-w zlJ2wKhbBcR>t}C!9DCQmho-9 zY&aA}*k@3-PuqOk&+TjIb~R|bK#4=Zft_xD z0p5N0U0hw=;8$OK3+E!>Gfqx={P7=t4}AcB^rIi(^Dn-_$R6;W4%rlWO$l+DG^!{A zDdF<+5-(o7z}f3FOyj7HWGW82DMg)1P9KvCIzr2 zc+*g?HC1ZYu^BnpWIWrv)6QuzF|=ZfbU-){m*`A>YUuF3f@o>}1nX z>fcS8;R-WA8paT0GGfK1BPB5s7cYcYuV3Tp>OzWQqH0d%#l-Udg9n(;drad6m?tb3 zS7kclh%lecFrUxiC}R~z%;y9C;?MsKpZ)X`{Q4I^12}?5F$B9fdyQXy_Dfuzzg9YI zhG#+`htBsP7M&-Dfd2F`!toQZe+QuV;OGRv3vhmojO(J~7chV{k;Cpwp^_s5j_xDS zBjh|H^BI_~m4+=qff#zN0Ia~6bj^t00$fHn3+U%M!G<)x>lZ@R zJ2O}(^+NX+6j826-**U|P?49b6;4i05ISwV$QRSDeq7<^<_6v1F`M;>QJOffz8hZi z&|^%R7!dSz5`5_4Jt4V-aZCuE#_c%=7dp)6$9V7QN0{}D)tHc24B*u5Pd}qM@XNaN z-XVDpo?@LOHq09?3?h%vd31e`VK!j7?CSGXI{<>j7dizIf-;YM=m7;?VoZo>GVVOQ z%OFHd+TmJMT1^RIF~T$t4Hn5n@Bx0124k&(Ynqs#&6?=yQ!!B^yN8`a=sNWM3|-%g zIbhdem<6NkV_o+9VR{A;HoUk z2bs?296=3Jtr|Cy`U5b=QGsLV)V3I$%6XKyOf$*TeK}S}1~~;?+SpR6z@-=uHdrNb zF3P{i)5nR8>xJ+dEGTeMUx7|jd^Zk z2n|htuzExW2^B=M`vGjpQ@IQr#1J%Bpt7tT=($Zz)S^8b?4+V$0{rGNfctvyuNO&F;RYXJ3Q93&6O`1o*ap@1w(Sd#_y$*loYR?-&nZT->%`_BFk` zJPNkG-nQf3wq_2A_B%v|uuogRE23~0ShLMnVc-388#u8IxVS50=Cw3Z-M9ETxjDl;oj*C-}#;QaXRn8e1r4zE4+R+B7-naE7h`b zGhJZBX+n+y09;&LV6j}Pe$=MPW~!AiCCg*o1ZmXKH4~2K_wm+~cktF*@8I#HCm;sm zH0rcAVYM7_eSLv%zkQCEFQ4P`;sQC3T8v~QBHH z=O!kv{k?X>FUbkTHMxQgW*lU(iB@=7O?n%}8T|K>HTO%}93%gAZO$~km> zFU=?CYINkNFi>QjM2r)Q2^D)xk&!WCnj##0 zU=~w6;-FF`GvCbGk_lDTvZd!I_weZ9V;l`LT-=Pv8JHp?u|#cwY6F16vasm9j7*kK zAK-!%+%`;ZqW5EncXpxB&%>z4+pQz905lc3r$6UP>`d_T*QD&DAL{s zWMYid0ym2rI42$m$WEg9JOQ5JL&PvFadL7GZ$Ej6lpVw%+gDK5)%EV!A(;oj@97uR%q z=2wiNjWe@JwbArlNjfN6X!W9T8e^DKHUCrpQ2@f)i7eg&)%a6nJhJD;GN~mW^!4Pq z>Vs1mK`Q&7dC8dnjcL$9X4dFR)2G8?iO%eNiB+_8MTSk*g$5qFu8Fj@DKxK5+KZTe z?O9E4G^-Xd$Ib7O#tU<Y$y;LL`oAr}v=6y*z z;5X!U)jub#*K}xN3-#F|EDr-+D}$hd^Cg$K?3pI@Aj%CnfY)k)ny#P#f_kg8Ki>{8 z%v=yn*8dV6001BWNklS3y|L!KBSauq>K``1TUidI5s7jg zR8ofuo{K*X!D$p>ZoDwE9=~&yp;sh|n=J4mL6OfN^?A0w_VU(#>X6=aS6@^-0PYe+ zcZf^;p%HC|==b+c;deFn`=-~oHK*H-Z6ENkt3f{`N^MsIzO9)(eN3whuYZUF+;FF?WYf?hkeR-{%u?Xmfjr$HKm7zqd>t|Q8 z!EM)S9}sXf8*u;L3Hr`qc^$!7%%wPw@IK(llZUu>a)gUlqNh)BDrPGV1lMBsos!;dixM*s-ZG?h(jxmw`z z;v6queT!GGUtk;;QmFD&bYUV$(4C_30BFzi<~o*wFlf<0YtHSp`OkGrr>YU&WEQk~ zd9QTSnm3CzAYvUwuSHS&zHM`F4PA_N<6m>*-O!@d2%t*+ug6D?CY`Xk%&mZ0pLDlt z%~h}Z7FjPELn;loWsQ69#XL&?STV6$EyWm8i>It96YT_oh>Hh8`}y{z)Yx9Nm>oFcYH~~4}!Qv4vE-wI0>gdA& zb{?VfYOw$rS`r!}p;Qm8AcyLc>)160f9j0-_x6i-Ev|5Rln1JAWaLyP< zz|VlLXM`i*!P_6=$p?Rme)dOT%#kS}=AR?;Yp}ZpAu8qGqreG7$dsD`*CE4$FaS7# z*eV6oTsBt=PVSZRE)M&dH35MG=BH2a-Uq*nd-r~dZ(e;POas$uQ$o$^7Jmg~E#aLQ zUzr?(a|FkTn36=-C3DM{wK1-y61TQmEdc=2Gy#;GW{fl`BO;}U5PEc>YrwClGI@a{ z;uztBPKJq*IKn$=#LRDkSPWaoo~OrFk>zZF!b3 zBgIr`%`yZR13ni5`q_YCHE3g+F^v-#>Z$Q;VG7hF85-v^peh%^P5r<`Glspm_c9Y0)}CR(9b}=1NjbJ zKcJt@(02-IILP&)DpgBL)A!!KX~CTtHtMflFbX<)i9VyW!SpidK%WcJ2r1B^J+lpK zrCFsCn`_SY1kqwM2%+o58v}l=86rS|3<0^w)#lRs4wW8m=?7-cC}w&E^gxX;wR>ck<=IRPLM!3#n9G4i!1!7!^ahEnM?CR8( zv{<~kxxwq#uW^2HUSea~rpP8W7J(%`0^GRl2Ryj{2=Bi00p5Q5Jba}UztPZz+Mm|+buM^}p!fEq!+Qg#*7S+k#H1|eh6`p|=ihY!T_*+oIF3TCjT2U@u^fkK|JEIOTNws7V1$}2 z(e2N*Rua(yFHE&SDjCNc#(WjT!5V$gX!-4HwlsgBWhhYbU$7(!iJnV3A=$idrJzbF zB4#IzEO{7GkhKtW#HwAbeh_Mjh@{OVgODi|qs4v}aC-j;r}vI=adCn9$tgbgt?yvD zTp~^hC-YOxh9i9Y%`<%V*(VrRHvmug$xnZR`SA(PU%kK-M_lI#!!X13}xfd4HJ6C7QEbFT({Gl0d>-y{GwEHu?Ih>-LZ z#bR;=<|UY8q1ZYzxMPRRGilzjM8*}E92he=%rKn3kN5w@ALH@+pWx@uu7Na)ktqNl zIx#bxqH0_<(E~DJHu^1rG35v*$rR7XAWUGT=z^2bwzWw!a4V%)EFdh`fm1C)IY)4I z7zU@YjjT~)H5f8@f(sowFB8)~h^I!3jIMVGJ;D1Pj~_n*G2jw-+bHt<(m_Z^6ohKC{JEY9$daq`i z9u$naoH3~!D5=3%*Y}vFNeufq0m~&aXAJ(RG$C^9cr|uYDmN1lEr!(qSOEiEkZHWr z>~tbu(pf?fU}BgZVKzI`jBqX>8+ieV>^x*~K7Eq`pwB9k=NLF;0HhBA!_Z@zB%0Qy zqmqhahM)nQ6TB0D7$SnpT$*VE3>-N)66RUf2b9sUoi~pHW#Z}ml(d2LmXqE9lWl`c z#LDETKmn^8foZhK)dU?|BS{;7TkFDTN_yX*@d3ESZ`~wKPSyyIa!woo7o=g!$$;y2 zDo%w?Zjv_xF=UzR_wgo+ORhn~I@(~`0hQI}Tw8CUX*gRadSk?Cvdfwd-6<7by+lfp zR3r3Up;bcN(Vdo0yFUd7^&+YpGfPj>>j!<8TrnV^Z zvxW^pji*3i=}^NyAqU_2wc0D?q|%ovX_Hb#W2e#5Jj|xIP>QuW)^Jg>hVAwOUB=?-((T z1-&*@zE&7gFqn~7dtQxh=)DJLLFjeQswP2ALF_H>nAZ*TDg|(z&B2AH<~C^G6%?sW zW^1%p&#jy%T5CwxeGJqyp)o8pCPB*#Sf8W^)!?`5Wj&d|H0qnL^9Ezhd*sq!>%>HL zw(=RpPa%X}r=H^IZSsZ~qfR#aGc?KLPEk630?mf zkDvS=X2(wfJ_2$Exd8zWf$?o5UVvx@??+_61b6{<(vYW|iafxZ5no;c^cs#=;Isly z;zyG5gd80>1rYV%qZ_#S1zdNIgaDvJb{)d-2&eD<9`1ec`|v;c6?pj)OcSCqPRtMu z%!qM9W41MkTfIROzc3?6;o z!Mq}Jl9(;;#B+o=^H&#GES5N)54d-K4ram-gw1t%Ibn(urfCI}N7VZ# zHwCp<&jd3GGYL;M=QNoUxu9us5|QdcLKp_jk|rkjNt#k-kQ3TJd4gAsbeROIH;ieg zi6)8o%L%l&0gxpgR`c3fL6w|X)&c^i7!i8)Y>8trTFVTOud#65(5tpQgPnu(L5@db z>-xS&-)RQD^EHA~8`BVixRZ1BmvK~^{sR3Gis7I)15lmzlSbZ&JiwLw`RY9vG>NWA@xfZ9XFszL7FOhJmyuKZ6a9%*$5`*itVUH!h)rU}G-D;Gb zof}J(ac|ap*^M|;t?`q_>W!3Nc%>O+!|9z~2ZJ%WyMg36i z_O6Nfp^o~S*LPn-zRwtM-}Sm}J#1cwUBJ_}>$yuezw7_^HN*Ri4Yz&o5Mz%+0HQ;# z+b;iuZLe{t#NiP6#34<8`}Or#U*Q*@{tT~QeT&s10+f-a9?k{azyBDI-nzljufD-* zaZ|L+E!EAUhc2(K@bcwLTwYvAmaMr-ThU|gvPusJ9Qt9vFdX6J_ykYhdK+)Q{SIcs zF~)JkxQfV}aCv!-o11Gamp8b$Ji}^rgJ~L(v*=@UP8u;)Cmc>)U^7tN-7S(16{R+` zxHNoZ6gDcGp-q2eV$ASOVaYMBO`)w|5KX&#L(;Lio;KqM+iSdTR>V8KN$l_AI5uly z9e68QzC|xvO&Kfg&sYKZjr-?Kkg`(cO-oy~?oNRfhrV~{y3l9}bMaNMjb0{2sTA6* zECez`stwIz3zQU~!_yl@UVDz)&Au&oS^ywxQ6`OuD{KQXWlN2df1Qk2aaw==&19Hb zfT|gzEAEt~nR4D2<3Be43UbJtFik7;y-X&(lk>`H!fINAW9z)EPR7XUkS+Iua}syv zoUmk0PLA+rfBq-xc}fSI3Mut2fu~m`w#Jh@Ba{s#S;B&j+4^|N_!R)%**o& za9rZ#XpreBNTb2C+=H6Y%^5UAy5y-90_wIh{HPah`byzo-Z+-CyXh<`3&b0 z!Yrd799(ZQ5orGRq?79o$PB^_kXPWF6>iQ}xVgB%v>Guj0Ztu4zd&~yaPsyuoIL&r z-E5BR=3vag?ije*24a{}PYv#|>johOAq;2fhvyGDwc?#gBNZXtt34BZ2yjy>MZ7&1oeRzV z2&z%a}adXXd)6VjZ~_cK|`%*y;) zkJTeH)MHoJ?A%QHokNk6Q33p7ndCYbN+d2709G~R+9V}N@<8=T(dThWNO6LMK{|AO zw+1p>^Cc77wAR##87z=mFsCqy1Tf4chRv7j!(e#dsaK9=y`xN6Q=7KQhqwUYsBo8$Ex?T&;iqkdqo&b#v^8k4bn9oJm z?uwt1_XI~`Xo}1wb<-&$r>*5AcDGK$ZLc+x!OeZMf`)R98BpMo8up_y2yz5F4^F%` zY4@73R0-ytlhm|2>*wb+xq<=itOkyO z{GEEKLs;$h{cu~Mze@&iNFuKb>8>=UGH-j4gI$3u&wFd{Qh0MC=N+oI0Ov1%k{f!#NjRj%R|@JzT?>S zweNiGx=#=J`t)bNz)$|+6D+PKq!nt?;*h{UhWl zDbLf2t_bb`~9Q=FdO!&{HvLKkMZ zx?0Hef3di5MO=qN30g-m{uzgXLLS@`I54CBpz)9SY7H<#;lW^@x;I|W*{U) zb~sc+Id$Rw4{PW?SSTDED0?Vjr}5WUhUik zEfgSb{;YD9ppql&GG_pBk^+&P1E&o3B!+|b4v=JO=M*t9A-Ifjy~fLNCDH(bNDoFy z43Gn{$GE;i%9F$lDm9ki0R%94jZ4&ffn~C*uG@_YdL{*46P%ZyBeJfdhYvG!U54`k zT|bwI!}WkTO~vGpR2tQH{RT@2$OxTu{X+ z>Fn%Oa=-=TbB+oCBy5qEy3JPMY39AslOZ6A?G>I#SQ29IuBitA>-Cch!boAD>wGap zm4Av+9&22htdFf6O^SW*1?VigcSq<#uSRvL(xX!~{?!RyqySYvt%i}g?n&0UxBW;w z2Ail>GS~eYC07zOMlXhUV0HGVt;T-f&2$$cLZ|cH^z&^#d||e=AUi`1iW?)o(zz#H zcP)xf-U*9QES??!a;CC}!8+l=7wJgd^K!X{)>9~!lq4!ZeacBwC4w?5X`?8w`=tkG zqw#ZLIhucsB^+fxHL@@s!u>YCsZkeD;^_n zqON|ED086k0N9r!e<-SO(=U0Gj^`nt_a?vZkbiG~|4sDeeH8nBMe{zI|2CTXHu=FJ zF8_x*{2yZQx9>W)jqRJb_}?_XyT*Ih81DmQ4)tc(H$QKp*Y7Lb-y~LW*Ze#L*m#p? zafnyOuJ?2o3+B-7KL8A?h+&zK#tAX5uw1=@^AShKJ#xyJ^+$O7oky6@zrcF9f^)0~ zedz{djs82o5c+A=BBIbnlg2o87O&LJ;a!LMY>wNv@8HhuJ8;xvv5@3|aU5`Yb%Dj= z62q{-IE@(A3*&@~>^eZ72MC*V~HOwxGXW{DvUL zPg0PZOadA+S9S2!LjW7#fayxj9hpez%Cp(L8q=xqphWqN#T2rg!=^X14cR0OE%U*2 z?(KEi{k16r?K|3)sD7z)__UE$H%kx5&ngIW~02O{2)J3&r)_ zibgR+su5+JfpHksq)*1zObuJQB`L_{oJRt~voT>9UDu)OdK}G9{Q_Tn{u!SC@C5HadLQe{3w*P@Dtc?y!yt7|BJ(7m4&!<$APNOI5_jk9 z2^Gyc@&1d-G>)&Jf(OCI3FENB)x|lcDT1>yP6z-+1p=rV4HBtY8L3x;N9aO{I<)R41=0EY z;6bhfxk=XuK<^rti6Ts{aqjAOuI4Fd}q)0qWS&K%7JG zJA_WgkxMsEeNM3%bbj|XG3_!p+0bdW`=5gWQZmA$(ydRsB^H?^fDfM7Gy zw(t8!ww44eyVhK20hW}L`svVXo=DX*DCs+8`>iivgi-7TOmfAf?)v$}WSJt%uxLD| zpw*-WFa)?`0oarIGEhy3koCx`)P}(d5SJ+7X3SDd8yfp;AZW`b&Xs*hPGmddI21{n zYnm{2KXICnwPSCw$<;+eBp*r7KhWRHToV)|HHQmGV_zwmoFnP^N6u7}f?OsYF(&09 zU)va-+ZfzoTL*QY6aJya+)V}9Ar$&;#mGK0xP7|+eSp9&m-~H%=AnjZy9&8CiB8=0 z_lE!j+d!T}qWNwb??di!o1|eM`(j(PdsnIC&Iy&Z?}VOtdUgw)@6-u6;MUn4oSof*a{=QpVi*RD(}=69 zE3B4RSPcuThb7`TAZnLUy6Vzt;|!&gX9RDZ_*fn5(Z<7Z=}6a{UKILyTTmNHZv{{A zUQO9jeKx#VfJ&}(YkuSEKdC;Clp+X0sjn#GnUqUbo)9lsWrc+JFa+x~G=F@mw5ZCW%S|i4(iF3LZ*4z~F zwU9+Imx6Xn+bm<}Jo>Ivlc~7Da%kU?mfqhUPyrNE!jf)oTGDG^Ly0+TvW=^L(>34+ zZAMm+UVDl9@;ACf2k)Be*8`6)!B2$>9Go1qbBbW!Rh=$1QV)NVeYUVM)XG=?!EOkj%PCr!+YR#1;m6j zji9`Sqe+b4SYqJFi>V&Rj2t{-e~d_Hh+Tp^TVQ^akfOsZ10WAaGj#nC+|dzEA3nmJ zN590;{hxsQ84_hl79a+79{uqVTnJz%g-OmRhH5B&B?)3Sm*LHC!a2YbI`7f-9WrN( z!w6RMIc7r2j4`g^yu`X$7It+gk0Nn^gX;hvs%lju@fu;2_<0Gq)4K(U(qW%A)aS0+O1034kmHWidr~$EBD} zX+j_;?}x4FF>6=910%wBW{RhPg^aj>J6wTQ+aG*zYWgP(4zIod)KI!fJEzqFy*Vdo z5h&eE56bN`x6U`|{fHk*U9X*jdq6-^<3XoR{KhuwRY0T>dsM*bvc4%;NL-~7q|6v&!+}WIBB|)i zVbOw)n?O854UEG^T8}ZvWG{22P`%ESvpw9_Q~>C@pz^)SP}>A$sjyBq*8Z|Kr_#L0 z=7FP^XZw5E=M^=ndrmZ%N(~)Zft*~tWNMNSS9(2?7SHW@g^HOjSfcYpKc5TBPVP+_ z3*HeJ61Hhzt+%Omg#M94oUd(=VEMk;*BCEu& zM$d|jE#;^HyX}<|oO9^sGc`!fm||43NcrI0cmfH~AZCC*^vV)lVb*uZSz>Dqz-${M z=J@Z(A*$T5l@pQ^z=3l{Xc&%%7XG{H$(tm|VOxQ;FVp)_m+*ZB-c5z=zRvo-@7q?q z?D}2%s1v(>@2-OVP)hf%_{Du-#G!_D+wS)e!@7Mm^>KA@<8{ba$}A4n&ST8LYRvfT^RMt9 z|HFU4Z~o%1uv`xKr+@gLSX^BdjlK8c58HzadvhF0%2IMFpeYEs}(MU2 zA>9w7L<=)O(cYA+?oT7=>IQ)g3VBMK^e>^0)}pliIg7uuv5qlnMslMOPn8Zz1sF*n zq>XMjITW2{(TZ-E$Gtw+N*qsdvbRFomxEPnz!c;tXh@Wo&+%Y3~?#ci1mc6-*v zwJ0t&XKVRQa4=v6Lb+~}8H&v|H;0x=9Yvc`Z@`8lVfiX}WW`AZI>h|X!6FB#q!Dby zQ>hM>EY3~S87%Q3vqr0Fw4@^^dQ@g)WQpe_rT4llD&8z$->VlF_`Co5H~9F&U*g~W z`}>$3_0lN;BLs(s5AWimk3YbdUw(=2zJ83e<6C&^ou6Q_y27{|K-5W*#u-Q>yz3<4 z!3A{AYaX~m-yh-l%Bft}o zC*(MZmx0Uh4suAIMv0X3JrZ{SoO*#UaqfkYW@|Y%&)HVaBv_Ju&nC^WLz#sfW(}Qz?w>sn)MzE zk~swJ=z8Zs>~(#c5VM%mF?oz*!jz<|ExLb))i7bbPDoL~E7xJ17*m`;w1Dd-&>C2r zpR0_^Y}t}V9-2{CjcWt5I&W(?wTTvkCfb>2fc?C80nR%uQV8BN`kBR&1*8~M{^CmK zuT4)0A%Igxc1eIMWj}By=AoJq30I^*>Nxvdf+KnuMM;hE`YrW_)gg_8g<5D?0H!OXG(k>8LvY%olq%o11C5X2V2DQ2kh`%QKso$AaD-5pSm z0$n?uN!z5j1SxAyQw|KMr~r(~yQoMSsXRODCa02PpUZxobmvfwxv@C7dVdI`Mj|;g zOVSZ(I)&Vac<=}#G09raRZ7R4HARVwWG1Ji2@nYc#yGAeA*3)FtGpoRq+Tq-l#%n9 z0?;m_M(E|reo)Xjr3{~3Ns)=gk4V=Bb=nW1S0TRnK$!%p@lIe@_UEW<081h;Fo4*A zO#mrjSgn=)7Mku&0+F&nQo=L}c#z_R5dw1M7}2d05>%$-V_MfR+EHnTKYo^?L&%(4>8EtN7dgqCi`gq`^+V` zefA+hz_v7vLw|19^El+Wy$Q&&?aO(Oqtg?F*nv92I!$B6EkC+CX6v*93o<5fV@yV$>Z$wHtyeh3-kFgVoJDLEpGEUq|L50m+Nj_fs=MbYV4g+G(+fgqgDeZ?S_rx(0Byo zYkL81h|I(5#!YB6{gBRrQw^XoJ1jm@01DGYq8w=Ko@#VqeNNWNLst2SMVzTom1Pcd zBg?P|DCsI_;iL!=qed37CJEScw)=BlihmWW==e+K^@gm0WAhxuuq%_$jMJD9lSk-0 zf@(X7oi)p);|lQ@NU8cxfIM<0tXC7h`toc1_rLwG_~7GT;obL7!PF^jGU51mj$eHI z3w-#+H+b^H3tX;79G~66$=Mmk;ZifRMT^Q&OhaY9Q*kzDkOG5I3jR4`v0h@iT3}qQ z0T-mO4!v};_*mvB+W}YT{+uF^Gn{q}a~^@T*5@Nk6M_Sh9IBz&>Ejfop!W{0pNr`p zgbJHE!znOCEQh{v9Hpq$gCVOn+X^m=i4!0oBjt#gv&x_dc}hrWsEio$Y62%(W^R=<)t0R5jiK3Re>@0p#VdUq{td$0*wsvA|J|53^zGSIzsOQJQ0RCA$VYl5y!_z znDsq|VE{N{TCZ?%agOzRt)^*77#3!@>6`#q=7;JkRUP)OP~+5ImtX-4y%%FtcIq9_ z0X;xbO2wW!fO}oT2yK?U>63}1_?BlOop&hPDmz~c-mH5k#$_JpMEeh}z$FE);4iVV zkHm0~b1LzL7F`E(+}E)nC&e^*SCUIe-Qq0@PqrdgI1x9ros@Nk5+6wRUhD5ExdBb) zea;!dSuz2Th6GN^y2_P4UgPB|FQav#H%EB$9H9oB5Q=mt0Iv_7u!_p(arq3HuaXd; z@Phy(LEF9-r!2u2u943{)*!atq%_A{1fmFy3bNcDPWC1RqhGR}+7K>MtkF11~=$r)M~eY>Dq_|}f~X1YLii#Fh( zbriOkJ7XhsoiA}hqAOLZa1x52jrpWeRQ9uWt!=`A9Z0Tkoc7G1+3M91nG1c?&XX-* zV-CwEnXto6o6BqmLPj-AVo-7am+xydiG;?TT&T*@vDK{ZLK#d5dSI!{g-Xv)O4%l^ zI>wmw&omOz03U9_1Xw0=CCZ8ec$5x}PngZ-(oONCj{TJuOB&;aTnnR|GcGSL@Q?ra zkNC@f`#Ze#;5~HnGwtk)ZuR)&6z{zI9^QTLJ$(1g_n6{@+jri=>god1dWEbKkcpzw zv@;Sjh%;PDaIOQVjA>lMJC;t(FkpFcj@8u#;CqbY08&FOF~jpx6j9BpW)5H^M2o!Q z0H&Ghp~Y_?F)78A3w2u7DX};+gS2T%7{(FZG@&C0@8o^Ex_pIaPk+FASeFD55Fy80 zV*ToSBCkzOxpb~mnv|j7)zhKV&ONIkW><;`^Sbcf@-YyC$T-CvXxkgy20A137NWXoxx~n8jwh0bteau6V_m z2Z)TZ531kKV#o+JMy&4QyuqSy%8&_uR$THUB~h8jTpi%aSE@d%+#^>%5Oc1VL;+vs z6c<;2R|?=ZOTJpaaHAckY7Ez`Zz*#DuFD3bAb|5G9n)&0B%45DkZ)v zej;S705wl+eyDtZjHx8m$a|gup3rq(iv1`Oz?`Ij1r)dsDjDKjBvVps8;IVX&Euwf ze-qzpKziMyk~RS9ycN(e=^90FPWGRiVgb}@@=b04`X;{6_Kb?}I>;goN+}_xq=3AbQ+fpz4cwMz-5Tl2o+!+n_8eMMZ@f1)1vh|;0A(rW>aC!u z0Rp&?dO$_M`yz8}(|in6Z&{7yoWr@M+o)HDH9gEDhoRsfTupZH=23xbXB}y>$o<-x zzyPR>`OM+$^b~y`@TOn;OxNuz98%bC`{6gCA@Ayp?kgzvb-uS1x;Ft6e@Yj4R}A95 z0_@NPg+tO6wiT!ng(*$y810n;Jcn}*mzS3kE7tcC`$U9cTqDPb7)K1l8tY+= zaTu^3mYAkNjJGWBIST-gn`h=oo%Ac&{o01U`AobIN{L2eW<#(2zco~ADdp|qsi`72 z3TR}f-UOBI&x*odH|jI}B3DFU636x}8Fn4mh$8VBfoCnH03;O^ar7?xLf`om*z z%owK;N>C^)gQ)uQekL7hP^A~I7Z-T)_*>k4>uvN$rRH+akJZ+Ugp)4;2?QDbC42VcmwVzju}ZKx)#KH&R)w+O0*3b0Vccu4cAf2%6B7 zbZ^OkbCOh$MZRF`q!i4ljFYX!n{je7KTD(`Q2{lpnH`FMiKU(Zl2}u`a!evcxyZ9N zSamA1A*RiNY0pte00(SfA#f^{(Yc?bV;pk?^Ms>$z|VgA9&VkTVYOW2yKle8`Na}B zF)|60#i`U_ic!WcY9wVT3^i7-VU4stF6|kh7W!sto66O<^!WO|C@TONoT=<(?f+jp z2R5v<`upqm7QzmTJ1#)|=u( zCG*)`t3z#U^EDPC>w4#Po=dXT@sY=eKYxTj`_(USdfe|V`1cu_-^BDMqG|%T%MpBE zQM1csaNC9M)8`*rTy85+_Qg{jT3GEWsBY@^?&>)2D&BYf?rjfrU!i|Uvcj(MJjC2@ zSDL{gQj2}h^H3AIT_DD`&$($%91{7r?b>&B&-cyeL#|;Tt7act=U;OThXM$PGBvh+ z{rrQU2Mz_S-GaDM($x;ah`lfjGD zf00)h$0Ss>*$go!OmWnLIbs-BSgsaWE*Ii_okmR4P>jh^PK|SL+fQ)TFj4fKRl`T6 z0IY?p6#q$My=*hTekd|}Du!Iv_S`5M5W*}}PTR5mC4HewG9 z^)B#gZnz1AwQl!TbhjD6Mt|F!tK2vk*TbHn?pAzCu6J8R*LXuY@YQI-7-Q*XRF{2h z(Cx101y|iXzXle!K*)6_09k=$f2N(p%0jk-x9B`u;KaK7#8ty@zoUW?dc96*+oj0o zLhn?za5*%Zd$inNYW`j3YtcBn%@{%(D_0J0+67IcxN*Ch1R#2IDUiXHX^^;$!OEqZ z6V(jSfE?$!_%_6trE3bP0cFM%fy=8a{PXYr0srHJ5AgQ8k8pbXfqFoAoSvNFgAYGI z@I7)OEU#8rUI6#+J;3>^R~Rk_OjAbJi7W(8wDi)6W<;HzeHW0X6^MZ4Q%5NhuIX-^=7J;%YA``A;2u28YxSG*@Ylxgk#i$udWxc;$LMZP})2b zl7cT;=hEWp0-ycy_xR!Qx0uFB{w|C5-8qj!EVV_6DKk-4pCSD z8kguuI_2IwDdvU&vssVRlM_raA~I{lV8F@IDQ?|5#cH+0`Kwo$#sN8J%z9xauohD0 z_8vK7iU~uEaOyfg#e|p`-E4*#5oWU)hGC5q6S_iUhC2Uykr-HU>guFtaKl~_y|2l! za#qtXUkeIq3hKfHate@Uk@CPfp@8eNvyLBm1i6N5&Ym?cQ`W+uk$?8(wBzWU6Pb+~AeICKTT2`j=>YMj)T|o)$$FB^eSNMqO0+#6)V-knGc!At!iYB_ za*e)jdx;g!7Jn#Hg$r;`)XE{aNR!Z}#A^jOH>6=BGxC6`aqnohNKB^ST~!F3@y6 zA7r~nT`Q;sHY_&L_D%z=lf-+fRM0f)CN+?#O`*HzT+KIa4xx;!8r7D4v?ePE5P@b6 zRHM&&&TM2qFfd%NKXU_kurjMeZY7MsfRx3w){!{y7h1hC`eK}P{qu!YVZgtvr2;03 zJTh#YVeR*lN+C=}WzS0*AY$y8Uo-U0NNJL2OA@A%vG0f(-ZAdqyM`fOLtV*ed(`k+G&{JTue-sH0m$tizR4fVF`Jf!$N0>Qrf-}m(<(v@A$>yXd8>CgA2 zMjZNl_OV~CkLNxK&>)~9792t%}(Und^p+b(6 zQ1+LLE1aLd!eVhHMToYn$OU+sA%q!DPR?+Ad< z;0b8r*o>-YMd*fMoKn#(c_4)59<0-*Q9^C!#(sZmlox_8+4DlD3+Ot@&u)v`79?mp z8*QhSlTepKsAgM$Q2T`@$OSMd@=mS=sR0UB05EUr{o7*SzHc)-n49Nf8+t-c zaya+e&9-9S4kS*^tw0u=#l@_#^?D%Z)KH1b-&MLHir&#WyrdCgEns6Ew_ND;VhF}5 zYXqF%IJDS3WdNRB=_VSbGING^s@-QfaFMrS#uexIpr(taQOz-lPM$Ji8o`|466xH? zrC3TiArBc{ki+e2y~2+_{(%4fcmD-{_M5-NU;MBC9s~~pVb*tG9AP%^(03kZXQ#M) z^&@7pBiz1y53AJzIZX;MsPqIv|Foi%6-0?jSG~Hr#E(CGkNXe4Mc2NW1OV3t@FYMS9}df^~K~IpgLcf;~FE%;s=o1C{Sgo%;!g#&1UHPzN`r$ zI7~63>jF+s#U%Co{2UymYsx9Z&m11U^$t_J(9oRb{5)#D?Z`&NVAQF60@h9Up~y2FdDT8auPqf2roJ=2$UNFJ zMO$pkyvSvrY0Z<3`p??2uO^@(6HO@rju9v*V3-B4a5{I){h={n2Aud%j3ZKt=t8K8 z0!?C*8G}mvW!qfDYjMuC*551W~snq)lu$z#SL-N`WiK_ck^zqvYxI^{h`y%LW`rLob zJseUX9?E<;gjKPxU_Ydo-exFxh|c}c7jhp^c1WtgE>D3&;urTZMGo~u_)~oV_JIJQ z3%Gsz3@67&`0?pWFbLjt@V-;CB&beTD0sGF#~3lCh?pX#JYXD0BS{KPZ{~4ybQ|;e z3^9t)UqXb>z%V3SoWI0swLnaxcFhx}DZ=}jsas5E95qhWRQALSi|$Fa0M~-Yy5Uvd zSy5)&NNkg|uM#VywE3IH);qru0c2)Wg0gc%ZzEjqZd})mw$Dgn1Z(V0>25V0@_In4 zpS^hi^I)D(qqTDRK08F!btyLmbp3Z>Ys@vnoEr^gx<+5j*P`vx2Jm3_*?KA%jW@=) zG5$9(gzCE?Mvr2g?}`bXR`TUwoz*7f)tx;L#w&9bchxVfgXwrAVOjqNDMH0aTVA1&I*jE`c<2sZDd%6<#^{}24&P} z&PiO^wM*(ry7NKJ3x{#Q7himazx~_4#!o-|7-#q15fDIA7w+CU#Vjc+~rh+6}A}Rc2sNqbO#=G)=fVKgY8l9^=mKd+^S~_j8a7Uu#nnO!|E$1ahhjNGB*mL1Y&h?bSO5UZ)O7tAl(;-MMr1E;}`gG!TGV^F3Ym3QJAbCDTu*C{b_D$?uSTqcnAjBLDy(07*naRCY-< z?GQe=VybG1CFC7OR(X(KH*-RqM&v9qgqS9P6u@#p{aB)QoonQ1D<5lti&kpZc4n>9 zdfk6PjM%Df+vb40o5ej776%8aEHLXrmp#5%0gCRU=);jqcQ>Vo`TPjC&Q1$kfuJ#N zoa@@7FRy6M>wfLMM?wNj@>V=oxB)w~%O6}}xJcLE7ZwG~cqO0r02dzdB(^vZ1DN&O!b=&Z5Gt|Zpj z{&+ny*p+pOubq9X-+-JgNCC7^eH%#FGzr4$iInQ+coHcGRl`f?Di{&tq%ngDoFcNW z`N&C9At3LbbEJs~322flZaT9|(_$FLB=0I%w-pwzdf18eD z+q2nKi0%8nLyF&BV8u=IWY@FX#mLxoJvRX~`*iyIXzw@O!#)$iefP8rnAkO+ca7a4 zpxL%4#%=G(A$0yjj1G56Z+0$TTphPLC+V1njQP~Km7={7Pd(7rNVw|vCUJ31gT9*yNHY785ae*|VFoUuyW_jKR zIIbo!xYmL8z7q|l9t5Jg@V1@iwjegQ_*%?5v{ZHLY_xjH_L<0`NQyW!mn#%O-Za{C z4b9X#9JOmiAcV3h+lIC2AF%13tyoNvIsnjr8UVn>#lIML6}AFhqvDIB{A@OZb7CkZ z=1Z>md3E~NOL1E;Q46 z&}D>{+UpdMxc+{b_EN7|o{zZpGb%V@=7Msq*FYnUA0zKUOdEy20VX0#0652zJubBH z&=~w>bwE}>h^7#$-MFYRfIx845g`QvB(6)13bg~7vILbupAESH=Xy8_c=_@i|LyPo z1|R>~Z}7kU@Bas!pMx`D-Uqz*_Cq|p{}zZD-+l8rKL7M3x~{{mv)f7~&q#ClvT>Eaaa)Tv}K5MiipD+=j#QQi%Wd@*{Aq_|DXSaufO_AWi69vY5|#VNyad< z{I}Ee6NW{GIR#=ELFuZAQ>C`5voGmFBj$u7wwOV0VPukt{=(~Uz zBNkVe@VCwimAMN6J~M_qft*9vd&FtPFpikd=9m(LqP)ukCvajM9nCPG1rTR3T3uXW ziqnSioYjElT_Ht7L)Ye-Ji@48WX>$+mw>u;i@Uw09*}l&0jF`UxpWr^4$hgZA{So( zll3qlEH8-uIU$47rk{ru&<3g%xmX6kgs$t6HB!x9+Qb&$M?fZ!uW}`ma&RNHslFPl z>zLc<@N#kg=M8OpS)5VV>6oIdQP~^U9VsPD7R{)@Qt*Vn7l(dUKqSVfYzQ^ra}IFI zJV{g0gimQIrhGM3AT?<8q{jZI(K#B&M3fiVQ95&zt9s?U9{RS%BoL zsP{o`4>Zc0;KHadP@)VS=^Cu&e*}3x>(ziCpFG6}AG{Bc!;ep%;j6E{#cDMG@DkC; zz&N$i1vxhqYY(r$aBy{Bbm}R?SzP4xyy3hno)0DNRZ--uJ{4k!Tm4&7nl|K#te}y_ z?-_eco`*7DG}caHVbxQFeR(g9eqY&X0t9!#7Z-ntSQM)LIF53wE`VVsrS3H!0%3I+ zE6@P-42ugk`I?;t1Wb~IgFq5FEGCiqb5P@1VqL4bNC$IFMZyA&0xe8OIk1_V58^a6 z0G+1WC@7Fpb@`Wh#bwS~{3HJUAO8hEfBzjUE?(mF zy^r=5{oCrEUA1o5RoowvRldz({!I#-ZSLuZ7LVJCxkHMYH@V(@h1sr7_r79l7jW>W z7J}P~!1j4=`@BOzfNh1|A!Bp>z7Od>?{n2Z1O(VseBadl+huO~Ci7+2cAYP{_bT?~F)q2E(Om$SdGH1(?cYwxksctFjUMLOvrF z)27X?mC_lVf1Pz;dS2AX#Of&^e>P3^;A9e&a`-?^QmA_93Tm)+x4_jH&^ZTB(xtbY zV(ShU3cMDxMz57QY~4sXB!jC7m7xLh`~eUnIHw&@mCU#fv-vILJmI^?-{b%OPyZ3` z{qzHT_|czBG0u$430-jb=%b(E*T4PoW#y?YnTjEnOZ7=|Tcmdx|a8F`We zxFu>PsA3njSfA|-C{lynpUR@zg zQ4Pe@CEVm2$eJjihEqAK$*D(9(g{mRoXPE=ES=%{+*6JqU3)+dF+~ic9zvZ%%8WQw z?Qz%lnyykMNr@%y&vyZofsVx_>u5HIJ3hhXK ziJ2M*-1q>9|Di({I&dP4)4IGvHW$rtdzvO>EgIvLMDMG%+qF11fXtWT#pus$Ae-}u zrfVhzk6evpODU^XT-YpCMx|>m$vjH{I9d+9u9;3vPm_QO7K0}yW2x~tsYQtB=mUH( z%D+=-j&HiWsW2p})Zu#V-)4|gad{6RAf{@1=6yiliIgL!NkE2HcU}BQG#*o(`xSF9 zW8s5W23jtFuu=TGu0u6-tB6@1r5ewga|5J6yh0oqkZfRzdMVJRxm&XQ z_-t{V06Qs`9ej;}W2zni+D#^7HYls&>T-d9_{V?7k3T*|X5i_QXL#}A0%MfIyz7On z*mcSX%G|IM^jze0T(g*llFN$=8I2MV^ZG6dA~g@HIs3c8X4j+;_TOC2!4BZ5n$EV1}L z7(?UyVuj!S=fB6_c7zm1{Gb2VM|-Apk7J3$w$?=_$@m&H#2;E>`LkPMFVTa70+ImbkjSK#T*D$_E79 zN9iI|S6$g8Ov81(unmEVffSq=4@z`X?O0oZZ->y=fhH@`xX}4GqUdgTwykE)k_bQ& zdE>|-6E}42O`!I5Jw8o<9q!tSo!~RY>5Y`c;jU4igHLrjNKx@djkvgGW zF^PTDJ{_}kWVIjyvpOep>Btxe;hmHCwg$0amhQf9bf&JDEEzy%IrNN}BaWQM+wZ)C zUw-&&48t0qfBDb&!zaJT-~9D&@%Dp9I61vrw7aify}<83`4>F-;XA}}#5jyNIy%O~ zhi~KT^aRhJ|A<$wUVxC0(gbiu7kqgaEnOjN!o_O2z;bbg=P#b({*OQ4t%q;p{)30O zfB$XVzIz}2$r-vZ(=M1VU0d(Oye+PmnAU6LB=k==&at8S7z`=hOALb?XGPzQ@a#=ZGm{wO-@Jt5=xf z0CI%Tb%;|Ev%Z+ITCMT^Pv6I#J9qHI4?kcS1~Ddcgsz(bLB@Q&9>IY@A>i`z0>iLU zIEpsbLGKC4_Mf7G&PIxXBSNq4`zc2tB_K@*Y;NYY+kw7~J8j=7=RG_K=rooz)!h5~JsliVDZE1H)TSXd#;^{aLR}lZd|rwPT{lDU z8XKr!1Str>nXA6Naq~C%l@DH`I+ZB~NcY?auX89$p^~VYsiH>2mUI&Bx~DWDHP_eDtRwPSG08vYw*L^36 z0pd7K2!VupUA#i5Bq^8>!07v-Q*&Js*3YySubY=I&hg^qIlvBS$|ChC(2Iij2IQN> zfT^&q0ug)=euAy-qHAZ(uO~J16cEiAV$Ms-M0Yxq{Z;el7zzj_!Axx73!$hF$5aX!V5|CKl6EPYUmS*U>k_0i1 zA8snPcRBSRT1*{c5Vnn0eP|K04f!}!8^5cFyI%C}DlYd8 z@~-hZWbF49&HIYYL!A2GG~<0=0>Hjve_veWw(&e^Y~4{lwDxSu1L!_ zdGB^f4tB8}_C4c2#RuXhhR{AB1pq$%hDVz}-^4}B8=dhe~luvPHxTB-JE}RA8pZG*$uJ$KGW#6G*64iss@ME5U%S2jM8fx zu^GCV#?PLIc_^?R#)}(2ggT$IQPdS&q3U96KtdURWeZsG+M4zlh*2oEOj7)7ccVlM zl1KsSb(z-Ry7f&6wRQ?+)AtoZYE=xVg6jYZr9gI}NANQcI}EE8 zet7x>-+uKazW(e}JpT48EUqr)-N{M1^J=1I8f9i+nkEF_!-ozO6I@ny4WyXKh=nf9 zsHS6qTuF}rYNk8u`zXers?8n~;v~$Ru9Jw=<$A!?a)EK0z>YAbh{bA&aaseAC_o8D zVR(&(8^=+AJUvtwqdLyYFd=w2cqahWdbN_GfTaL|0vfEQV~kwP)9QMZH&Or!SUOE` zed8@c*Y`v&hI7(!6~n)lAz_i5%r&Y^Kw%OIM;0au5vdGhGXX{3k*a65!r!C?C^9W6 zWF+sr(&TOZGfgu$Yo|k3SPKR!I&+anO(tZlBHZ& zA7%g1^mtl=nisY*ad@TTcj`FauMPL?}QFF6GQIqgeqzz{dL2W)B;yvrPuF zSi-oGN@4Risbr_0_aHco!&v-AGS_#cQ(%zuh|KNTJn4nl{b%G%h&Is={Mwa*c2ivu z4#}_I_V2q6^t(FwyNdlo4C;0v9^1fxeVxyJh4ij0`$L`bcSXk?+9}?5&3{VAdDrJ` zqthR9|GSFpeSpF~^T2ID%T3p_>-p>gx3)dcZP&2tJ`PEMIJA)8HwSk8*{*qY)BCaQ zYZo|hs5iq+UssDIUR_+lg(Do#M1Sjz9vNns^+({8KuF?F?K;c|I69utbpc)HF;7Q0 zIzGZQ4p=T%#r!L{85}vpX~Jq)VbJ2g>Z&bDhzo_eYO4*Qr-t6G2Ly)b^q3I3ej~Do z8%N%1R9EBQh;S|PF3Uy+6x~~Embdv_)Z|JJau)Lk_8WA5IrvtZeaUo!ZoZA%GO&66 zX&r|rrSTbU)zJH@t{5c+I9jdUHj|Ih$2ZbnMTEEO2KatPVIqOOqKxeQ^}d#F(Z5j~{=FufP2qzxmBy;KPr8 zh0nkE96vsNh2Q@6KjY%!3Lyl1_xM|U{nb}EfBp*7FsP=RF->bs6Cre`xc}g7j49#A zC*K0=j6e}ii(W@w)(yR`7=`s?V;ZLcSC<*nu*S<5&++W(Q#^d}91q|932xtg3;p~E zUZob}I3P|-#Nkqz2C_bN{W0eA4qZP-m>&ah7-Pn(SLb;C!?*bEn=kRrS6|}%#Zx&X z`WbRokh2Q_MKC+<{18IOSg!}HR!cDs^bR~FJusX5HA-<=fvKQ?m=v192l(KWE}zQt zjtVNqBeZ`Sq*-jH%5y+w>Lu6W z$pJCJnO6pKH7zs~Hf5?nBiGDq(TX|{;DQHvIcRel00fO+^Jr5~${IyF3v&|%*MN5@ z`+*e0!HFkCjI7aq)$60CqqqVVFbNH*WUq5ZR2GkGt!lSl%mR~oG3ffsSrG$ScO5gBCDVQ! z#Ww;jz*9gb@lD7Mnh;QBYPJ_xcb}XXqS`v$M!H&uRUGPdo;q=%=N#cnG+Y*tOxGK4 z@{cCPhc~j}NkI-v^w4#gaslA%f3wix;e-1KPMrItpmSKP7I^;rIW8`)uv`urZ|66B zD&mwC@G{do59SdukMLc_!?*9_r$2jyciw&%NAtO|l?)^XmdgbmfA=ju{lh1?IKRM8 z9zDXZfBhRgc>4jmSqJiU9*^q@_wRp?n0|-vAOC=qGj83wjbHuhSNO}n_;Z|`p1=n$ zAQek-A5%n{M)BE+B58`_gmD^>(}mZng{h(k1W%VwAE9Wj& z06RE`Bq^=R(&$8bqLvDd0=yG8#55)JT?cpr8)GBGlaCy_Kq@h;sTS!5kDy&=@@=)>P3LxHpU~b2u|o>cT^;{@h4-!^cv}&D zsB8SLLTDewd!N2~UpMm*2m5XDfBUX;AFJVCLot7ovD;VFy$Ln`5JtnU`#%(1*oKO2 zyM{yGk8RKYO$+mFpL59H@0&M=NGY~G<83BshpYvMyf4rL2y}A|YVe}{U3llw_j9B; z0Vx7z!k06Sj*kSP?>v}i7>5zdh4%V4BQC2!AeY#+Hr>EX0?jB;G=Y->3u0tu z#boRBY-7-7dt0;-gA1#InoMi?o_d&Sjq~aQtbPS$-kKp)8EoFr!qPS4!zvuL`_%YG zuJK4&DVltJeai{CWLD6%_pBOzc`tNaW-7o)(vF>THK{^e`xzmK!JC-u;k5`rB4dlF zQ#2T!s{Yhc23i(_Q$B0f`!%3Oij+3xLF*5VLo~xDGgEA{$(b`2%LP9B?Dqf?{_5ZU zFL?Cm7x?0fukiWjU*YlN$LRYY_s`;zl%jNvf_E6#6NXjB6z}5RTkqod><(hgc>d&T zxU>`p=sYP?20#`!XdgV_I!z}~c~8n1Rx9-eS>od296$W<7`N}FxW7X+n+( zX%af}I1N}_UE=cm9BI9h>(b2aDGp$QFq}GHk{gVc&AMI~EjCk)?#fww54x_yymy$? zkSlQ(Ux6Vf3(pWAZ$g%PRn+dG%fo=0F#GNyHHD zf;f$*X~MK#!$KRH+(ap|)PT~dX9ziqy|XpR!-pVLUrm}Y7k+|K!Q1u9ay;l715P{g zWvxL&-QAr35_ee*R-Lm#0PyUPkr8ujq)w@1PVYBLO^6O+9ZwhMDgiQwfj$@ zfIMxgLNPUENk6E*I0}B+>w{)~vF-p&=w}^%^5|W>^X>xy63GFav0N_j&9~p+vp;^0 zVOXhQAD4*1lFA?`Br*#ID!K@W@>Ag_$8z6kF4r&V8^4rl@BdIU9KAgrbiO%1O-yHNk+5B}4_#xA&!Z zE}0(>xOm(cYcLlEiwBX!{U&FP0EYxB;FK|zNI~_K^ctK;icx_iSLBDp8DIf?;iWm@ znc&TAHAiJb$rS2+Q1I+e``T9*ghMIxH=zgn3eH`{{{E&k55Qf0E z`#YrTzUx69G9LSq7T%QgurD6&CII8mh`4RfaaVH0AyINSP2@u*3)@Ttw_WG9dA4iZ zc7X>sUH2jPvTvU4`n+90!agwWkay`Os?nhZ|7-7o3xdXKmMnSOxRV~*L|@O=`Lsh% ziQ)p{6mhB4T0peQLahtPIf^!w)22yT$-GA?N`OkKwgXFXon~%m@}gO^&T;E%Yeju) zbXUiji>vI0mY?eZ!pvtjwfbCirCEzEq0VL1qZ^$Rg+AXF%@st*<-a$J_qGdN*$DC9h&3OPKY`T3%L*Uq_zBVe4y zjcesbH`|&o+PtxR;><}tXG5Y9ny$K6Gp?+0S(**Zyjk#5?Oe(jq%xO5KHSXL29=!D~t{z=sasCRc%Mm~vdK>S&`v^bz$@`cc zonSpoxVl>6y+`jO#fWK|uviFdAf=2rj!09)dKj==F7W;LkMYUx{t4fF{t1>>7a($& z&F4s~0aHwHc>=i(AqWLKTi3Wrb%g=RjE^u1W_q14)a3BGn-V z5KE^^I)q-=N-fk4Jh69AQ|mJ`5JdwG+Wa0f{aY_rxV*SPjuTuzvp#*%=?J?gz_|o+ z4DT4pF`TP9;*t@sy6EDV?z9_+3Q$z@ce=*XY7XfpLr^wFW_drHuX=Jb^s2rpN$W)d zr#9v_7xPkC8&fGVjm2QkD|D`~z6hHDF`6R2g2%2gM6@-#%8D9%b7QUULO|b#BB#j3 zn2a|~#4JzQ3(G?*;fQmEGD#!1d*h1 zNzy=ru{#5gAe8?UllZP^Os*BotrQJ9pIr#DpQ}_RC1Ei*)#HPz6esJm@Lh*w-aqYq zq52q1>Tw{cHXe=vE?`ELZ*rD=CTH%|nm~|QSXfLBnM7)rQbur$L;C-RH1=+)8^X5Y zWm|EyuSnlV{k>j@?JE}d6=1sxxSI;ST^jp+^zwa0=|0{5wj%4M`#Ka1ImGRL7X@Tr zHvGP5!F`UCyY6+{^WT^7ux&o>0+)6H42OUbH@R!>O3iqa=W*z`{QvPh4g~^sNiz05 zr(M9|>(}pvhRDEr95HhpLeQduxWr;HxuT6;4-;O#e1Y@xS6D0-SS*(Xl_mm$3#!vj z7=}TU05<1JiJ4MRfRu*C#U9Oyw#~x6YTSI2rEWBTx8b1Q7O3s--Y}7Jt{ldQ&^W;7 z*XO8nvVouh7#zT)lhC82gGILLUSZnRQ^VU7XmAe=fMBU+>Jehl1 z-}(mI<%2vk2ntBzpi*7Pt19h*=0tWH2e}&4bD*fiLZ?M8UX)gp6g5eC_;7ur zYtqyiujWJ)MnnnSq)*1h#RNp+PGJ44G8iP0XncAz#*z+}A7IhoQUTWQcKF3V{Udgp zk)9v3ayHv7Zfyt#!1&(Pf5u|nDm_&A=H0HAzoDXp0$ZQUxXcJ&6%pFgKy-9!vWo8?S z79(>kL-G$}82qUV=akp45GuVkvjEtmoEm$hL%-XR#$Dtss${S$r3#flX_k?ws^HL* zF;raYr~8+z%_$|Qr1HFu5!rOFtUWRhW!^==T0~!{ziP7A3Ak67UEmCKYc*mlCTQ6i zyeiEJJe0N57GqWZeh3jdM6_KM)tYn5HM7?wPEBV91Vrv2b21U&wOlT6d3k~N@7`k= zb^s{%oc3O#Mhk;SYYjv;T1_c4H6sNMtRmTRk9K`zw`k{#|aQDdoQu;37eD*Q4Zg6|M!PU(Jyi07*DBb0dfeK-D&F2fu=Syf90vj@r!4eZi zvVkP)x^$cQXP8-^87~@u=Z(i`x=us~z#~gAQpJMH^+qZt!YLv+2jwY_IXH)*cj)^O zo6QE>?T#cB-V28dh;hRFtIw2q|K{_C_KMAh%Q(oubgcGYCJV$Esx%`ml)V^v+Psg6 zsb|b)m1=S>lUP1gKWvDjKj-Zz+1(3MMQeo!!(%0~L`UTz9AzC5&yWxc`$QGCO9omK znNTW9dn6DV#Eep6I-LNeB9wA4R^!w^r__4&AA77=JywjI;sk$c?Aswzz~{K_pK_gt zZr(A9_bIylQ-Oj*_vX2s@P8@g|IocTg}#1j0>mMf!oJ@>#40&e4zjP1eU7~3(8M}+ zulN1TG4F_{#`!6cn5QHh9Q*#EPXBYB|322lfhCNQaLOQ0RpcF{8xvBdaSr2%_wV21 z+i$OBF1!gWlT@i@9TBCw;@NbBen|6hF!L zPm9JDOiwTV2BNuCiVVJf{`0@YkAL(d{NanQ@cZBW4nO(vPY`3o_4Qla+}*&(fKPw; zV|?_{8VM1bhY{nbVS<4VOnbK)>+>^QzBtF#)obkf2RPS5Tk6VC(nO2-VuADXOU&kT zE^ZCxizT{lhQ)G)<#LH`zQAI+L^qqGX<9m98x22>xVgSU(o6Vp2Wu@%V=-TyVZK;F zX@hZe6e)*eo6WG> z4G65cO(-B%mX*i!D8e(A^@R;NwP`SKJJ_a0*leilXNk%!F7Q%hW(JEQ+I}AIa=@N= zV34Vqc%%pbCSx(gz}o(VF+|LafpZSq-3~qk*gR0gSc~GdqC^Acf0s2$m_8ve3n(Ub z(bR8Nvxv_wjZ8RGN=kpI5`*!iij%3bGzaz2~m<;xd%^X4@G6G800?(S{@ zm~0%GBiX7YxtNafS_zVmT10axTxYaKfMTb7ZEXy01S*WBn{&vi2K`XT)lgXaTtII+}+;e_WBz0`GV6$qzGmii4Pct z9&Q+D48@3DKOnggVH_~_J^Eq5_3ajK-`?QiVS~|)@T{vh{7l4H^s$L!iHX%vx`9e0 z@l<()GTTRi%`(ZcU)C!y(?w!uk?O<{fSmPpHX_zCpI9y^enWYWPvu->`AidHf(`*8 zG@SIHI02v}`}h#q)KlU_d5x+XK}ggjAz-vR2k`XGG07}tG0cVmudf2UH-`3_Woxil zv?mw-`^?Jso#E}FUp~d;>#2h57}a}UVf0jS^qk*2Rt!FM9fvxm$DHj?p<5g(6rU>I zPNDvvLcu>)jP85hhl=)NK)@;Y>DX%@%d9{4GpF9)r#}BN5aHB<`xuMh(CZ%p2TnCf z+y^#1H8%Fmt$o*ZNbYdTd^@_3X#-;$1n+Y;x^p9%#%8K=hzZsx^xGcafB!wc`syou z{q;Avzq`*4!J3Wqnzp5gs}L}bBgS#yjyP{PD0$^dNhg~Poj7*LXbm63L|-m(e%4xO zW%AFar|xm3d!Wz{XGGA$ZJWV zkq^d6y6k*dK#BTGndYAI>+X{tKv)H-_yc@62aE4OdX%hCzpmUnarag^$5;-xB_dGn z*K|&$N9h2yX=BV0gSB&UOtG4S$m4S=(1mUZ_Hn%NQw1`!SyFFwIv|IOdxM}P8DjN8=UBhEhfW^W7&L8z z#cGN5*%_AWHJ|}w2_Q7qz*xW-Qon0*wdC$z${>q^#;i41E|zGT4uPqqAw(z>v0N;X zqQb5p$st=h&(M_-WSjtBxrpWY?p46UW`o&m&S@DX?V;^j^gD9>*G9wn2x|>u0)qDx zPsJJXVmb$u*P#2vK&=wJelhz@iPiwfn(6|!%+?Zfy_D(y?8g5vbVc?ZphV=-G`{Sg%)DuU9aQM)KgjRzQRT zOeXeM5nMdg=Z_Gx?5@}(5PjcrB%eZ&=Mjk9Ru1qnGb{+KX_z&a@_IzF3tm4$fJ*^@ zVN*B(cjJU*CFYkwd}r8)M8-&={ip2jQj%o~6s;;4MGQ=9lS*w2{Lo_@b~sxtn8jl7 z!%siPt8d@n>fH_RxeDGXw6@EUs^HG{&Gj|jz5O1u?uTgG4kaal5-|{fVb|lkZ@$Cp zZ@!3W&m-Q$bjeTi?seT8udK+?E=e~(}M=U-zOMl2Q! zkXD_{cD?iHcUx>8?lJZQ$5DFpF2RohZrs5;hZrMvy~D%KVK;c9yelq#(#)2=+r z6&0XWLvjo#=!Vjm=ozYP)EYt8MQMsk9w9yNs5k~uGgyEei&&cs3)|-L8Cnd0$wZQ6 z0a>b0I3PrPA#f^q52cCuq&Pk^Rr{gR3W*J6JKGhoQ7ek6PKEK4jgn*8i#Mn23m zje^k$tFFP%|MgGsvw!u|qvz&heq;OUQG1F}-@Za%9}2OrxH(k|{}gy|>@^M*8qdj8 z-}jpP`~n_R!;ev>k6rh3k^>Iin^XV$Sn++#P5;pSI3=;+&~+VRgd8(Ze6IWcsce#C z_u*7F!YQnbQ|8a9z6krq&!KyN?0%l=O>nAr1TEgB(;Q=j51xw(`rWo|5!{G=x5Ibe zzs4WF`~$xE=4;&F-}7SXxWGvhqq)fR#Nb0NY!lLiLRtzW`5UTEb)j!-?r3D)Xrc_) zJfBpRw=S-?NaW719~HZ~TUMNEX zGpI9Fw~h>yf>Hj`rdlGeYE!?*)NgBT1{Iuh3~X?=a8i{l0=a`zwEoC$*txTxO6;6y zM(gL61YCg_A{7e$-Ze8(M^bzZ>gS)w@uVogM8csI9vyhp>5 z;#kZ9Qw0*R*%xcC4HrEzx&mr&beKZvI*2cYHY(2px&}RQ7pH3sJodr_NRUV?N~b6( z0I7N(I=r##c8Ix~7@|W$U~m9@=m2$&6FWsG05RZKzxoyCiv{i@ZVs-v8X5MA@@6UhyQ(V0G0p4HTLu-Yf{Pbt|>_t zO~VxUDUI5B57R{0%=L&l60f9$J9yOW^Ln`2hF)=ZVnWXT*Z@fxF)V@V@$b#;Yb{^FOozq`iSdc_il2q-prbpf~UukrfTD?Hp@ zV;l$k_MiV5w|BQ#Uz|f*12;OjafBNk9`1Lzy1K)|eUIoBjBepZg)hGN8gJgd#bPmo z4*}l!d`@uVh;baDl0xu-=8^7@l7<_5fTbA$fQ#JqMr5NH+S{#da~HgxZ&?ax3@EIC z7?avWXseKXqPZNA_Z6L`8C=}MFs+`XPC3B+gq(~+ zd%vBWcO;rGrXn+;2*1M0kr+vB4BED(gq6rCPFm~)O4<`pypxQz2qQBL#A7NF(2znx zV}Kuj`U(E@^N+D?61FGSs)uT?r|K5__;9k%@av2Q#aDpn6MH%>_&ICPKq$w`hy-PP}R zEUDmB@aw5-IQD*ru5aJ(oFWl53=rf(s?I?)2BR zH~}lfWUemc^8q|k(b=|^qQFohoXCluz?-h4L%;XFk^*os7~%)TbJ-jP_()lTQ1tdd z>2^*{1{LbfHj%wfOqDbMRg|It3}KSUP>)RkBI^4)b>x3~ZWyDo_FsxJi3XBRUIv&H z>l%f*AO!(^Ixgbs8-wUD@U^4XzO?l@Bi zR(iBm&N)gPSW>BEPQzxsFTgqAT-XkrWI`Rh4$JuhTWp!;>Zt1;RPK1zag~v~($+MH zDPb4~k`IhDpOrT3#2qNcO;Lf~*g0lU@Gc<42shIENL;FqfKi6lRj<$@p|K5YYY;|a zI7ym7h!GZSDrpMMT=9W@*YD`yF4}r=WrsxD)kb&~xGJWwwn5v?Fgk}+(dH-4AH;u6P7uN_MEJjc`paDKQZ6Iq(0 zfs7BU;z^m5L6OJlF=T?Mvf*EyPQoP>>$+9;Pf*Yp28ZpoC#QDM^U_AM9K!ONDYWKP z8O9nK`!T|_4OAe&a6X^GT9c(ifQGgNK6+0q7V!cQrW5T!McYobe#wTXd+do_!E=?8 zC3GdjawWo46&6ZVg?%7CB=OO?yO02iK`X6d>^i}2@(Psyes_C~SKoevyPF&IgU9Fs zwhy=X0dOG#%2EOePXX@|V&Jq2-2l)CKEVY~duOFx5jg^Z0g4TW znIQn=xX2V4>_J5eVUGx-6_68jSQQ#+&+s9TcMPASjG;zV)0hmZmAzC={;jozG6tQ| z@NT5_&#<*+h_K4ylb0W1IqR^yzXRqU~ZhJ~0aVkZ5-|wB$34iK$_x<}h znec~-;6nw|Dfi`ASNB+q+##p<=M-K~z1A@l=qX_46l(XO>)-eFLv-+`DErSzDR^pZ z>~rEjcHfVEu2WJ9o)eF`?{gjNz(2>t@szZKW8?mmG>cPyf8Q8*3;-y0zNG|TJ}f7| zk0Y+G-s2B{_&vV(;Io{wVV=x~=Jb&}}-;-MrKy4LXVfhkt{d$22R zc6p9~)+rxabC!G64X$ec;*y`gUTeA~f0)ObisYKj-4P%BBsxe%GPO}C1-l%cie|kO z@&M=RLcxtAnIcsOTB{k54!?Ae zPc_O@BDM0pnHHplC4q@)mT39Pc;iDz2y_UDiVw4Ta!{!g1?vBw$_a`)zRLHAycmRD zsyOdE#t4%Odd|34x-yZfx^t-G5p_1`0v|wXMnwvdTI8&W)<&~rBWCG>Z3-(!E5&h3 zq$?C>^beyTQGMMZM$)I3&#p4Vps+zSEYonw&`l_|CEAP_CfuNYO!AUYj}J9Ny&hPrfb+VkzE@(OEtrhyN&Xu&S(+MD=}~7*gi7<#m_ttIzXo z;_ISFdO&M%f~urYF#{4d?^D@`PZuD=S_5qq181r7Gm(9(+`EJ_<|TqJc#qq=d)(je z5TZZ?j~N71&=^f?MQ|}QwvY&5ZyEzX0>K0{S~1%sAw`A3d1eWv%rq;oMUV@jh7{ky3cJ+l5aypCoA!&J=J#9WTNF(Svf>T*tyBSBKQ zyL-S_fA|`2-@eU04~+)GxWmUUFY(zAKE`&l!}Z%+q(BUXs3rCefTrhb8;audJ*62Z z#q&@hv#;oPJm#Ik4}ba@{`#+fhDF!GN5G|k|MZXl43#XRqX<01vJ(Q%44de&p=af!@x=ZNB6U%q;upqX9H@vD?;ncv4Y^q{ z3?oK2qHD+#V|_NqpZw{M@Z&%E4Bc#j=;@p`3W9YZo^#fg#_w@B#xzjc zVCX%ruJ7>n{SAUgW3FNpZ4>O2BqAV7DFd@h6{S-U44f9FGFrSMwff z_}YChw66d>M(aIPc&O4z=Q(if-X43eQ#$C!z@&X+;*{9SW6$zbW4=?a|Im0kWsW{IZw}q7 zeb4O}1LhdmaoRvmh|$6O5!N)Y#vsIm?fnM3{sF)L{qOMG-~1YH-h79C7!X3r+E4%( zy(7LT{Fs6Y zWV0$?@|uaIP@)5g`lu$I=`_(Orinwmbi$=z4Kb2yGSenA-AuA?V?<*uqN0s7#VIOX zI_tVZ^Gnev8@&9^)Y+dvmKeJ|gEIgCAOJ~3K~zKjnMpMSrtPUjk$TX4kW>?90(FaP z>MkZZ@`C6~;Z6WeD*gsl_LUqwQ}s-R!uMFV@OT_cXReH8J|qiuHnNN$#ccMK80d*$ z;3uaom2RZgDrdHn!!#c{SyxQ)bU@??%gi)k9|Dm$SZgsl^0R0fp*zM5Xw{Cx#k8`- z8bXQAHfBn0ZI~$IUOIqCDg#Y9QjMLJjUn?ta&e=voqZz|(SWs1FxJA@23lLRwuNmQ zG}dCdoa6jrjURma694_*{T=@NU;S73?QegNzxb^CYsHjE}U0Y|POrMJlRpq`D*dj)dIASEg0aGMz2N`3rCVksKV7nu2yfA5GO!|HYA0pbO#jI)3$Ar;^T!0G0 zMX{#UjqKHsi+lyclB$SAOo&8XHSatIMH+E3sbbx8OgLLD(Y6gX+a3D8&vQIRmEE_U zqWP=A)bW^L8|t?CK!6d&&yjvNX)3&S+a3CTmkkk771#t6nYpEymCiAms>ILMWwdnu8jeLHV6?=65ha~EhanaDPz);1`524I z9$gG{|6wqKsSfMGaVrW_R zzybOD=9kB5gXcH5q17Ks5E8u(&}XN}F~%qmd|g&0>pu3PGJrZooIDs-K} zpa1!v;jjMo=lJx~Phd;~oh)LYvy&eO48sO}zs0Z{(C>B_`;h=LW(hTxBoYq~J1i`) z+iY;Z>9bjF@i(#vVI-*loAiYknEgZ7D=AYkcm%HiYoJU6Z8S_$1dF8@&RdMX>@ zSfPGwfSpQV-xtI8)MwuJtPXY64~>&U+Wb>w6i;>k5B>ZxVB=IHze6UC`^Nb(1I%MU z!&9Hm05iywqF{9E@=>u6qiHXzYdc;vWa{ng@LfuSrr)$F)Ypb6# zytxLZ)`i>^7FwmQs$iky$K*@F{DcXhdNj6DiU6yv)}Vxfy~fwhKdhR8bj?00}^ zBp4V3QP7iX5Ku$RtxC+G&RwzsFr+Lo$VDYe%o~|T@u8@SnT+{!m+pbe?%Ty+Ola~# zvzJ3-Oo3vMQqdM7rwA11_34~b)i|WVGWCBzW|)+ys#3=aAfQyr)MM!%5ZFbsg}@O= z);7?}z&0(6ZP2t9^Z6XB^*L6nGn}2B0f?B?&Xzs)m;bTHlL|u05LY|$$`TuKeFp|n0 zKxGvBA4t?A6{%!msEBr}YQsuo!?j#oNVHet+-KJMgJTCpA`w%-=5C8`{`d{9uW#~o z%4-{~3Gj3t(HLk$rfSX)C~;~rYqJ4b4?{#Y%L;5bMIF*w`a*8x&W+gZHkfrY%({j& z!hYoOV({YP0=r?rX0yRKj&R;n*GQTUvnJA!ZOgUGaObdNw&Ki+aVC{JUn`%?F3|wk8k*o>TI;n(= zG4bc9oy}t)Ew^V$8WgH^f=%0aPAF#XG)i3lL)KRdNK^FsC}@y_?y4vu_@yliil?On` zo*pG`)>r}#*6U0B^iTgBpMLTKdWOtc(Z*snvp_e)V$s2m9sIaMznj6i5pEcfB7twl zXpDnLYZUz0W7cXml-11EW3dZ25n>`{phOlL-e0|sRZ;;-^K?`Q;<3VMR8hvd;V5Bf zW|jt8ACf6ixFWrbJa;(WP#I+3kFt+@*hUf`B76W+P%vhO_xC&eU;q9;LSw}L{J;L$ z(Hi^Iy088n`&2>o97D821??dNvSXR)r%=yNH5WTZ&px#%JoLKziqn19d+KL>>OLRx z4EQe*<#%e#;VDJ+ss0Yfq$8&m*oO+)=bBKSQsf^>czBK>r5Mw_zcK_R2QV2wPcZF zffPzi8d7n)RnV}uF67BjOJyT9?%0IHF~()>1e~wzQfQ+NFA?0+L;*`S3_`0*Zc;18Jsn z8&&C33*|byUMJSWDnr1FBJ&{9ADc|QhgKC(0@iw}qN4?1IdaJe+XIn0Qc5vJUuRH2 zDFelw6r}*8G@7*kox=a|jrIKQ~W>g){X=V!Qlafy#!evFHYOPrmZ z;o{;PtMw9#`3%d|9J5(V=6RaHgJQ~D*3J+EQ-(pbV3n%QE6sJ$e#RK#g2&)IVq)iO z=Q4ALV(GY}%CSvKYe1Xap*K(&#Hsx%NZC^ZhzSV>DH)b;#2opFq>zH5?h*rXDFnpm zNaM`obhjJv>tFp2|Kb1re{gei1s6CrlOw@G6=jLhbBvn7Y&K(KEKTNtY>cLr26W<% zJ|BXWn59vNHAa%8kk5&XT@4=s`ab6OHH#MWmSh9;j5`2e=W?JQdjzJ;I`629rYW;q zy0a<)!8vFm(jX~?0ARZtF!W<)XJkKy#J($fx)#c8)zD1?(=-&nhq`l4Os9}i z<$aN$j3Ksn6tM8od5Gr+Qp`oY7|T-p;nbLwilmh1h}IewVz9^HXhkcR;*-)~RAy;d zYbN`;tcD4i;u`DJ0whS_YnGenA}xb_SME0ibP^+5Dv%T`7f0n!Op;+w<2Zx>qZAru zUx{Y{gl^6tQ_|!K14Z*xYh>w=Fh#_0P1ec8%!C+HmgZ<4r)k2(6E7PL@2T@INjw>B z(SS*|S}&0SZg9dtW{_w~VDN}&P$GYoq!$3}KR|nhwiM^7l}3Q(HB!U7gzaX;+1Uyq zDr`4fJZ!eKH!22rt)^&=gWC3avUB>xi-y`R6Om;lbUtgE2H=E> znAt%ppUsMI4zi)AB#IDoDlj(0j0jD0g;J|1ElOwE5ICVk7?(5=Q<8Yt1|cXmxn%hs zG$M}~=muj9Ksvo{Iab>~KBL>G3XFZ);6qyKeTDkt;^tT+-YIcrPhHQU*tf@DKNiz= z%*^c6qWMtKwl8w;siN}Oy*QMZaEfu^DRF%J2GPC(cHek9wKKo(IUX8cdDB#l*%*F+!@JCk5s@gtr9}w(t?eR$N`)T^%+*H1y;)yR;v}( zXJ@#)yu{^;7r4B<#LG`U!uo7Y-(Rn=T&^&iwXlt0*Yiir1eRAMC2@1Acw(SBNFl*T z_M+een)e>V=qT>fIVvb(;=Jl|$dt~hRvJmm`w~b*4IXxkuDm`(F4S1d#-zxa>3m(< zkolHknFr`_8(f4R0=An647(jR+Xvj=-{Rrn4!i9JBRk>0eft)_{N=Cl%YXVOJZx_f zQb1y3&dBK*GUj4*XxkRr6px0OkPB4jJgrSJWj_SP#Xb@pm<>m+0vg^?5$0Wh4;~Q~ zfvNf?7&NUzn_779F^)dFY+KvlY<-5?hdaE#eurV$(X-OAxb4S)uCZtuOEm7_po~R? zLQn>~al|-`M6tESv`whA^ts8T%o<`5g%Gpl7qo_H3>9eN?j8ft*OBvH*vwB$HH-)i zYjs|SWbUR6deIyB;3x{LmVe|mNkCG=Kq7%uJ`}h5m;%w!m6*yEwu#D;BpFWuTH9SCuY>3EI5vgz%MBt3*$`U8jB}Mk_ZxjnJpR$J|r^DGbwBH2^bk$rd= z+vF&~5JHjmB{B&Nyf(ya{Kd`1D31u8b0{020$*@907X+uJ7;O+tDE={u|_3{^}iGesqDCFF(SIm!Duh zKZnvSB8V}ebbv7mXR9+@UR+>4n`7)fLZA-wYPrDq#W|MiHJWZl*QOFI0+b>4(PA;f zY(A&+SE5KmEq*To7Ack4b&6wT1%OgOo+kzxK@|pGi~%uuVg^N@%^L|Mm5EH<`49($ zumi>s!=}eD3>bFJUi;bT;eN z`cX8oAGEcl+bI>NRBZR_5nbT zy&3k6l~c#(vEuvCygx-{JM^*Vt?x;F;zx=0I}z zhLS@I+Z_cr1wc}vIoA2Ka*Z|BwnP=NW-F1|Q0~lE`q03R=yF2QiZqdrpJR@XOHVoa z=L)`}o#v(^AM{eDX%{DUrtm`Od4T}{QyJ6LV+18nnGZ&?(G&`t6g!+(ucqTBOCC^} z-k@~t>W@Zr{8Ys#qBwK2M!ml8)AzuHApkY)gj3P2Cz|Wpn5#S^!`?ABT?3OHVi^T3O)nPn4fqE@u)F&|RI zB#U>Sg<|2V^a*w9r)cRwzJ^;x1uQfU$H?GOY8|Mx$xxXxlluc8+eoz;e05a<#-_ zxxnSc1zvvqF+RGy!1={_?&`14)>y4p!~&QTGeDaeUI(K z1`nGJ?(ZJ(uz5g8KCcZlCrFNj6u5vXdTGtHTh9hudH)f*sjk+)P$EHPUC^2s9o`F# zn+iG24(-mlO!)^Cx^9N$a*31x=RCT0hEIR6fVBqiuijwjdn)`>q|UGbVw0eZ=A;9m zJX3t?cDuuNyQ2=SG3B~rq0)*RM(N_Hp|ogfHEh$uHjcaXsjzJX;}Q@^rQD&@`S}Je zbjn&1BWuLD6Dy1{@mrCFTFe7;`V6lvA$nMjVAY0n(uo;GDuE(gEA{|^b^;_=idtjG zF)6^s13+mti6jNoByFZbg=q{b{bGCRGb5gagf>U4=jJAkj zWJV78>C?Sw^1fY5%j&&WAd49Ib8BRuhB{qG*n26~=Vg{?Wm+B;`NXU#QYndCOqlv6 zBpzesa~3IDeLJ-w8oMzDK}UF{5%_m@qsOMd&HHIm8iA!aii@g5?@`pUL#Icl`WlS_F6JUtN5M997 zkJvF2$9o>vDrS>Q8838mOHnU$mJoSAVrG@GCWHTFu0*5|aC?1)ufO^Vi+O|f*$PTo zL{G8C1h@R&yV*co=%+f(D>4*kqAr}RSw-LcPe zYM%R{-#_Jg56KEn$%Q?tnxr}!QmGFCkHnU2XXPGLAaRk$CT zKl?u4zBzfyHJ_S(aBM7|I`)o5VxID67)HE%dxclueT#3t`37&^e2>lMA)EJIW>J9bKe zY3;&-5Q9CHbFrm^Zmh0!(J4zd64D22c|FbqsV_P0I(KNO>m9R+ofQ7MGR&HcJ2lnC zOIM>D8BQ2)noJ;(9CcMblxl6cGa>g76Gj1$ za?Bi}qaz*5Qzow8S^JGVPpr0xDUvfjA5x4Viai}>$e0gW!88W5t|P7fYK7HuiPh>H z>$3}-pI_qQ;sq{WTw;B(#%i^|<>dv=&o3~awU{ktm~}0hwqd=eW(_6-V|>`j2Y!)f zr~>??KnGKz>PPhbfN>b%oI~ID==+|&$Ii_ocdLyyuua4Bhy4dkNo-Kr0bga~J1`Ab zG}4jk!za?sh$5c#G9~h1RxMFV9#r8!{z0CHj2c zvrmIEghW`}=v%-2RyB7sg&xlv9`3`rdc zo~X~->byruF(qCAWN2BuUwlY~)vXPTH5~6Ji2%iv)o6_<61a#eUbHaMGO#U%q!RfG zc47;WB_p~px++;q0XdLCsMbQP!m|`0nI?a3x(43I`E@1! z5j?Kz^p_}~gX3N!kHruGSlSat7qII`48w?a7GW#{ya<$5;zr!v-QxQC8bdDz$w2Z6 zo9&3Jt82_!gXQv^yb2WH{fMF8;riwd-@ks3o9jCagJa;L#2ZfpK*74jf=~3Xjp_0F$^BVu!9@67{@Kf!K3eemTm=+F@j`T zAtdwz85f2u`}pvDU&jW^c%3u?CehC-vm1n+A^T}IbmX&wX5&MVn|L=?fRv0Q_TErn z)=4baq)gRVV(E}E><7ftp9C~6&lAP;SLq%`}_o+Q;Zzy_CEK zdvQp%ucE7_=c@~4adXaH+Hx7y(QE47 zPX~E1g(_NnAdv<+Ri!!?spJxG@}X>6bQZ^U&GfRE5|ZR(D>X6J)27fbtua}%Et$Yt zBmaL0kqa8n`ozSn11@}3dLnKt(BajPNgJ8qh{>JG&cP+)xO|3C8TDzFI)MK>ciZ_O zEhzwng;337B~<$=LNF5#s=kh@bhFuHOAhi($z;Qy0=}p!MFNGJT4)F*+K=_t5+|tC zkOH7Qv>u^g(Y6g2b)NsSkyXWxNhx8w+rj&oV=|o! z7{-BRRSBJK5u%5-3W%h=_1**h2yFmuNI$F-QENx%vD=MsE}-qiPeaU4`CbH~Gl!@q ztSXhe(gwEaU_(NTV+P-J)peGKNJf_AAEC3BpF4wM{FS|4n8}a|-Jc9+si>C1JqAki zAR|f!j#0c&Vvs$oTsJ^WsSxNHS(am@Nc!~bC&DraF(;+}rmkQJ9>IHr!19yF`>vY8 z0jg|Z`P!7?$XQiBZ|>qV02Vo(EDE4pG3QER0`EmeWl&NpiZ@fxxqy3Y4x7Y}Ln|5+ z0vfP9KpUNn`ot7hDNXw#KO?aGMH`NG)F$th)8<6V&r-&>e9ojeF(L0O6HD4m8IO^G zM}QM8bjmU@krR|N3CJ%(ihcp`^FC3|Cn^`I#gihqrIuqiJUFK4CVW z1C2$B9^MVOzrV*fUw?;hzkP*W-?O}pqz6}5H~6Xvc(}X6VzDNAc?#sS{rQH>~rqZ(?93hPnE%(Vz_sT*TcSNwC`)DN-XvZW3P8}eS=r8 zUg7=K6}AVSpH%<=AOJ~3K~&oZHV{hWAe|zaB*nU8uk!&aRt09A|DHDwOuKn?Y>fZ` zxmy$-&0(#W>d1!!?r3we9a4x0DV6R%rfZ7MI?i&h>U&ei(#iYT#;_qAn+m4-=Tt6O z6YGBwr&@J6xCExJs+?`DCT`NmMVsUnPlxf8HIZ~EDb#qS zNqgNG3m>UtOu6B75YyZ-YugsB?O>Z0-K;~~HdrnfSgqDrt=71>yu{hrInK^5aDH)t zvvV@)J3m`twO(SioT2L)v~2_1*-Ysy&yU83H9Y1^tFOdqBx1gJ=ir@(a~|X9FbqAm zyB^!k2K}zbuHRy}B`5fC7%`3``(-Gm^6D%Ju^c0)Ent#nsR?yg=Uu4Fmdd!00@^cG4Jyk+9oh-0dilBm^|w3_tplpF*?D zLutCErlD@z;75$XVf5V1lA?pnHJKVzNo2ZHq)l zk`O`$Skh#j)s{ibs4@tbjbeE{Qko4My%>fe?=^*?ld{pDB)ib_r1S}4WCXCs0LuWh z27yT4@!F(|=K%oA`-NwRdwC8ywW6-@t2I1To%M`>Rw#fl=CrB`V@|ZuMi>ey$Ci0d zE2a^Rk+36tpn{GW5G55S<^4kpMMH`(oViX?7Ube9?}t(5f_$y`Zv-D$`%Rt`jtv=& zQDt6(W7s3b2y1OAWrgpV00k)q@=ai%BSzM!NbSj>pW^){sVO_K$zC}s?@@}QZJ}Z| zh)hxTzGA>@E&D_yof&Ph+8l&=7FEn3xYA_87ZR}94EXk&*SNX9L)XnPTg+j)7BP5? zV~>6qaeIA-`}-}N3kXpGoJZg9MtuMMHQv9yfwe8~pGDf}1K@oECD~cRR)noL>6XXr zu3yE&z%-V^e!0juyiY_Qpb|A4ymLrKV+|`k?~wsSk7t znsG?NaB4)~zR!M2=l;+GIcA`D3=BC{zkcj~?|aWf@r2JY0o?bRPtn7Vjgv#g?o-!s z%-i75XWRGO_5m-47y$b~rBgfwPEDma^cj!MvqSNk``-7|1dM&p{yB`1`-gj6-&|w2 z+o11vRERO{PHUC5@KRI?os*9~lfpJfFiFHutr_Hlqvu1aP}h>^Gpo;;*sM)_-nFW; z<-tkIR3K|MW0GPq>pTG%Z6}8`*^p|3!6##j6m`Os(vR+c)fJ|*SxzpH+-=(I6d#&} zB55X0|3!;mQ~Qd;Zh22S2o^)D>g1J5hb1K1^o5#CuSqmXqgBGM z)=5?7c_n^t936Wd*nFJ@7!j~2Wg|b?n8~M*Df4-gCetsir9(_wy^*s(d4e!s@f$nsVZa=BSN@QB=qwDTG8Ugs!84-unP3gRbjf ztwq~XB-DI9$8x#CdVP+wvo%)hHP-7DUViiu&M(ezesPZV`8ih0C1$fZ=F0_U^A2re z&=><_CHk%u1c~*fMiI4{K$FBS&YHXW5k7hZPu=~#AJFf5jJpAS-($1cqVId`b~}ut zN8gjdlXE^tbPA21nuMB*OezMgv6TrMCgU=YixW{+r2v$@TN^|Wn4ptK@-EX+kpjFQ z5uAf}BX*ky?6x~>cN^T^-s1l54i66-BmkE$KEm0>1$ zgYRDgQLIfvT7A!jp~R+1r=Kvj(j_WV5IP)F2Msx?pk6babFkK;>pCicg4_>PI=B@R z03h?zY=mmK8yEuvt_Ic`G+l$me2y3+u5WMPMo06@QFjnZBN~I?JzCSS<{IR%uM*rq z^Hf=bMzv_;4Bk=KKZF3MJ!X1_5J*bkT;L=J?)<03|E&?38ZRc05`~&rFKui>lQ>}^ zMz|oxWqJ~0nakvuSQ;NWwzJTbr$8f(b<2^brTEtXs1q!*gcynodSs>r&1szh%9z-k zQ3FbO1_O%GpRrB$bkVUg>O^^#iM7XdphO%OhB0y`|^Hk1quR%ont#FLP4celaA{R8b`+Q4=#g7b%>w_KumxiU1qq^I9GWu*Vb^-%Cw;(bK`L>Cuv7@(?uo)oh8VC z(HKR(0!CvP1}fqW$rV(h^qjynx0rzF3B)2v3xTDP$Cg5oMCeS^3Hj_I=e}C9S(;j> z0Ra2X@P}$6d&v3x@h=}U;M-SRK37Bjob2&ay5Xl3euq2^4*fY+%By%#=zI^gf=W-ARf-Up zeFtiX_tK%y=ea70AZ6{C7$0S%n`z*>0sw^0=lqbn>Xb?AOGb7oZp~s?B_M=Wn$Ya* zv@9;(F;gx1@^Y-7dSpyRG<8MJ=iFhCA0fSM0Vs;@AI02BX!}~m1@?~pl*(qG@3$1{ zF=g{XF+-HsOadbC&r;@a@fb+4Bu`|kFeyBesyf-#qtgirhBA_w25xo3_t>!U8)nsmwZIH~Yr0zeeQr0FD)ll>6b4;5mXW29MxK_qy9W zV7Ix${p~Ft?(T7ae}|jf_qe~m!De&MfW-jsJ(jCAe)boC31fZ=D9!rjgg83HL~(vG zd2)b`z5)no{4}Z5lR$EXA(?yV>jj96{s0%LgQ*p_9&Lq+&XVNzw?-XUoO}A(S;&)+C*cNkhfZ zn7+5LF39U45-=jh0Ovh?uxMBZJ=v4%tyULy zg*66^Z3uV`isQ^^?2!Q(eXh1`$r~b(gaj;w6CaEiSSEvdypwS*`OFzkvM981rAYcf zOncfpr7ALp*N5OsBpb6|y!Y^k=w>Z!L*3B?(w-}pT#=W9W)n7X8jabsu9n0VNT_t_ zV^q)_->JlLrjl91|oylvimn$VPJ#S(_DK=ZJ&s{zmiU?*%M;Qh0 zhHOq8QxRHHu^K89#sc(cZL${;0d91zG1d|gBaywC6-Lkq>DwcW?K0C)Y0KsUVl$E2x4ae!fRejUeQa{7=WJVuH~4FN1~8hPFU zJ_IyM5?4xsgB0jZ)57~9|E$EzLUSx_j=3yN1d>`%v}%fJ!e9`~7p?V4h5xCt{rYF^ zK6K!aY1|r7Lbtu~IsnUci%hxDRj>2|<#_nS7(sat)j7E6Oz$pC7n*D_uW(xdK%nCGQ{>^@CqLkuh!T`>;| z?OiivlaiXIM~ajUVhX)aBI;x_F`|R#_#-+57@{1eVoqaCL)pWLsDTsbc@#%u#YRdY zkVE=o7KF(fa9zdMl~ZD3H*7Il5}mu&qVghH%a~jDy2&+hgoUY&SdXwp(mA8|-#HhJg&KM(+NT(W0X` zwgh+=D~66pXsGKEhLN77vJ5upOi!0*8Z%!~K_>?Nv?4Ge2FfT`z!)PRf`y7t1@dll zkNfK@++4lI+t;t~=JhMwT))Td?JdTECh! zu<4Wlk`&ozb8#)^7$HU^H^7>X;^&OY`Pl&;*Vos$+dSl2VzFGJX*+B-8w{h*%o!g% zRHDLF!85bKl)|5%;cT&hV!$HBfYFWE_B-r$TMTX_89)p?-U0>};6g$O%nD#5tpH*N zXrqyoMT#0)B48EMiM5)f9hCKsUDr9E9t>olas-!kD*{=kOH^E@D2I@JL6ok$--f*l z#89+Qg^NN)WK=|@rw%^YG|(aG$mWa4AcAyPV=7E2(I7{O-%Ak+rYii3Kg#1`kN}7r z9YO`O(iCjLYo3-EJI&6FJ|HB=dvIdY$^^&ela#ey%xrV?T_P4=4K~L}o&B6lq9t}# zO^P@verW8*46;jvtI@2xX7Iu}2W>1mOXHam8A5fhV)i0Hb)HcIiYEr@71K0OT;a9W zu#GL|tpNIAi>_1n6f^@+d}Df0ybwbg1rVPg0RTh zQci72K=d#GF3!*K;^G`y8{FPM;O*5lfnegb!1G!gL*q3Cmh8#r)M%PHhGF37y+{%z zE}lipE?Tz`iV?2d12P1Zvk%>mrfCoovA*Cvyu{0~v8>!nrPQPm69Ww?tBb@f#K4jV ziRIG>(Pb|Tna^@IF~(9y-X}OWW85+mgn+};{RAJQU9zxh39nFohD{HFjfr*zy;ef{TL$G*>YDg)q{pTq|MK=5#Wpbgg~ z*6XHRkQbyDRqi_%0Xf^%R2~1)^%Yle*$|CwiiuM!(JOLLF~%YxR!;b8qWw#cihn|U zZABARnUYA|lR86QI&_A*SDY6shYl&cg$60WMBV`TR4W~R*~|#J4#KU)CI9On0{GwLH7Pa#u&#Rrgdu#z3GxB$~x zAYe?xUIvtXu8l?0G_cm9X&ZF24$I{Vi^ZHA_?IiJmMffJP$z%2TH);M4Cj{@Sghul zFXvb-sGC2V&Cqo%n#PjG)bL?iqB0dIUP!J#VUn65x?+jK3LzmlkG>z_MvtK%vEB99 zY}5qrdKyj1EhrOckl6!|M5TIn?L*x*H>?_xxXQH0zY&DmOPXS zP#mX4bFabZdidaov0+FDF9$nvt(U^paprY`NfgDWQbJ=I7}K&dxSz0dL^lqmmRB4i zF6xk-q4RvI*3=k8#~WZFdTpktd;fvohX9oRW^_nSsbV4gf84!WuO-QK9{9y2b6?J-x~sd{ z7m6Z#G}H*T#t(iGU~^R?D8!utSgM;H??g7a(bl{^s6x_rDZ$0N>#;;b5C=l90* z+*3*zC#HLF!NFM?CmC7OVJRAFEZ~?{kYa%M7RGd?P;0H>5pe;D#{m{0u|xunGvX;1 zoKmsLv7o(hF`hP+9YYC7va@eWtTo{*Sgg+gm=*&CxECIYBC;$##6+T;IXR~;XDl7$ zsT2k*L;t7Q2FD2R=3+D=5ZRyYc772DEsETR=rozmMhvxykus4B&@|YT2;x`>Kk^Dh z(pAW@1f5kkkNV{4EqT;y%4K%;3E5}Hl#q-;x9iaL3BUfG_wd%6uVEY>;JZEU?vB{+ zclhen8HSbJi+HY?3u4yJGzPi{182M0w?*J^=<(Y9EqZSd;)G}SN4$D`z^l_ph?tlV zSYs!}rKP;@a7^;Op8xIewbPA{v<3 zH&5fpdzq5`j0z!i&d8cc^Ar}uxe&CZK20IQa{(nLg6&`X{JbySqT@bK-&oT9uz=&6 zMYAL={J2}tvkWc|8x7@7hInDGmqjqmk7i2P^1u1D zghT4?X_9hnlDJjGO*1a8^?9j)p%E_B3a~A|zm}xd{(mhg)>0^1*Kg@0XoVzN?^$}@ zwW5UP^V)T4b+xw?8>C{0X8&#}>S*pus|~OPQ6iy9B)tSlq;N|CfRt$`7GbktHeQLLP!ZFE&>s*pf6Dh7Yg;56JEfqXr#>J51mCx%(LhajoF$}1(a;M#d(V? zol?TT0xeV;3V8qon#5p!Aw+|+4X6yp3WBu8Rr8D48j;GQ9q z&dnXsd9BjdL>%+8)$IGFo=YP5DF^QPU3!M%V~(Fok;#+})yylTK*5wE1!*vNbhayN zv)difANJVo4(NA#9F8}*xxK;7?JaKa?r?i|#Ou#r$Nl{sjyFf#KfA}>%`I+k>2rs} z9{c?cyZs)%^MIu!&s$S?%xTt52T^C3i@H!t&-3H+*tsyp0>M5FBZkw6^XZJoM@sfb z7L+@mN9OGhB`JFW?FxDY5#CJ$1o*c0V*0^iA>-V(h`@a17d_LjTS6|_;{^}?A`Op3m)A<#q@ev_$ zHyH-W5Z@I6WyGYj9to_lZakdd!@3=e9ntkbbOve2{AF6ttk$2!2(6(}i`IKs?-9-? zOc9Gh;+%XYOEa}oh^*ob=DWwQ`5Q`}iKdc3o!E|p@|0%5Mg!{5hZJZ$;KbAkZ!h!& zkY@c6=Q<>l&~<(>j??1R!voUCALIG+=XmSQH}U0HFY)TtE4pR~aNaNvwv4PmLcll$ zoKB1gVht6dpb({DRuoU1{O73wX`yf*L%Qfb0<5pVD5eZm_nwQ#i{vZuea@zx5h8Kqf{sB-4ojTA zwS{Cr30N*gI#shL4nV$(M3$4!IM0Uy*<@qrLz>>%)3ltR9{c>+y zpfZ??B$kWtG2z0eC39(amx);3Z$z!IgrF%}6`}atGP%OgIq{B#=E4NuJFl zL+1=a7~s9floFDe5Yqs_F-+dV zb*{t=IoZzBFsOJJu;0&xBofivAx4AKX(VlqX#!G0=R0nGEY$Zo=9ywBlU(v%=h+N! z#=<))UXrFuET|RV`!e~Ybly{7O#q^5SRQdo0;#3aIgg~|7ejPBgDD0$NBSp7k&BNc zyqcBty(jyfX#xpML4mtyXw2spWi+634slAQX)tR4aJ_8wM}A}^_a+Z&zeSCezs_C`L#~>+Ql^8UP;(bBlx%W?^1FtiK}Tj_1eTy z(On1GUc1)XwY5c)>p!>7a%&&7bPj6&CQVq7e`da1N^|zUoYk5VtF1F^J9lUU7Yvq) z(YecP7!KQYo@Zf)i|4f563SzzNT4o5u;!$iqypHwG1fkoUV9%pnZq<2}ExP;PP zydUPn5l_$+MRjxWT=Ohv>h5R3D-sGcnO|QzFs3La&wJ6bdcP@9x*57|O0mS`y~4L< z_`5TmfI`H@Bm{4$!vU1BPdSOtUDz4fUDu)C-C%z>;&^jQng=}AF~kYubi#Q!Axsl>=Tc5KLm3+vS??kl zPaVQU1psS1c)!CA9VRp293!lYa1k^BJ{JZPiCAWch;=jv9jqM^Kwa`_3Ujq7&6*_z z4Ukpbiw%gS5Lr5gJPCzh^Aq}hpBegPo;w|jJeNF`(UHV!zl`CWb0tZ#4m?GK4%IYG zc=hrnVu&~#4zMuTbv?Yb7^i{6${5K+i1}I8|2&N(GHK`WTZYBx#`A!2I8!&2OIm>` z7*k4^B4`9)GziRdj)({`!6u+H2F4jUPe`XcDzw;BMvGYEkW2tm#>;rJLNm)F3XP#8 zjp6mg$zO~k%iZG`7lp`Nj5FnYWZOZ$B$l%gL3#j=^=O<0C5#!VR)k<}L5RenkHDkD zkm2LGmzl~Qa?2@pW*$#h(n3RiA=@t!(v2`_DkDs@FSRDZIm2R=X;D-`Niv;v=zR}h zVkkG+s5~_xrI~(}(Jnc$OF+@4iTuuOrb%Trb*?B(BWZ0o&(tz&3w1B@h)B2u&xO&s zV9BD7>=)*k$Sl^J^ag100{aFMex+j3>^pKH*d&Kx2>9fa&+*0^uVcU4;qy;E!%zR} zXLvlFnV(Lm3X@3ClNkZ(5&hG#Kk6(R-&Ia7ydOQpX z;c+hLhd3vkSt|uhck5ilJ8!;*H{W~?-%(NI*=w(3920)@qo3dxAAW)~F%pW`h9-F| z5M_nhZx&61!2XEoT7jgHv4~Z3!X6oU=pDUl1S%d=I7O70td)}sAbFxsVt<}^`&eT! za>0U2^YaK{;(Qnff;XR=V%DBcN4w+G&OwTZellEDV8JW_9 z7g~z|03ZNKL_t&sS13hOUbKuJN~RQ9O`dX)5iG2CVI7^%jFj4%__y+d3lYFp;;Tty zS3`GGpI{ii7Cuic+CT2aHDZwb29^a|G2Qo~=DlDpPk&~m_Q zYxmT`Pi+s>)~L0AwPO^o|6M!!Pcw0#wO^$|!&(tcs|B!SUuxG+Gl8M?vlMzUCc(Mx zqB07gz$y#Zi#cYw8#F%X~&G8of{(!FY*zb?r(Z9jr=78hj2Df+5aCc9m_3oeD;pXOu!(oTxk;M4+hdqtw z+j)3LU87m_E|uaELBMIHW9jnoW5=wAKtV_tDFF;2VjM<1JW>~b7zT`|0gtCMrg6kL z1)NU<#xNo9xI1w7Cx$Qw?J<^)X5JTB$(#aV&pg5oFagszl!*$~V#E;f^p7|9 zoRCEHyB;@pH|Y0!IOEax6S}^KwKQfg8iNTAh#ZJ!!AeXeZ;Fvrxg84%f))6kb(jDc z>(O-wLL*rV>pPxJPJ7c}M$tImq4PcOu>_YP=s7-51RYPM3y5MPmSffC(Wa(AtRsOZ zV2r~!Oh7slk_8E_^O(j!YUIw5QZ;wvl9`hy8gUo6$N-oS;rosUq8S>WNU94+A>#D# zi1XtKmLcHA#L{$5Q({3ez&RF=1Br?zM05aLq6r&@*JB*cG-ZINIV3*Iv8pDAB)QKT#yo@|q| z9W{1FCpjKZHceBRDnNF$M@kkUjWYz=Iam{UWEdAs7h<(A3*-?ecr>bzc-t8vz|1O= zC}F#qIoLU=1BCL$32EOo|VD5g@bN-Mv(JesXZY~LPcfV$ zj3fSkm?m`A!@zU#DaQu^odaIGyT#3Mk71bb@e2~$yuUr*JHPfV+}<2gt~%l00@#Yjuj72*>IQH5!d9obH8M||Y)G8zTE#;{O}Oq>*OF{08E$o6 zrNpfE8BHNZLUGjAS5l&HZ6@jcXvgwtmE~*SB|-07dt>c+qzMpGful95u=f1Y_i3*! z=?~Nr?=5Gqh04&3AC!{+tmHm(;v#c^u~In9o$9psd|D)|W&t-O_1+A7%v|!K%FF@M zEDB^g48=cx*YMeQ!T_vWg@WiDWy`8$@n2RU$>Idiz^ z{$}1Gb^i0nIlp+PbGJWthl#3eN)SQf02SY=cvoYp*jCwTOiU!IoddM zT~D0-u0!ANvES{n-yg8s_1GPH>~=fc-rnQ+^XE9++~9aT;^yWCw|BQV-W+kfIbeU- z;dtERczeL{c*K6!6C}NJ@ZQW_1Y;Oh>SnZQo>^HMrIx}RSA=c*s!#EW|B~nU9nPdTmHB*8W3nY5U12LGz(NerF2JwUo z%OaN3K!u3$gvf=3Qx>;mG{O1tgvSRKfIFWtPA5#`NY6En2-Ae~=>(*J!|@2`9ga75 zIIxft&A2DteM%9-`2^SPipse6T}gs0i{Rx^X_m9kJYKV~r(^Dx3U!>vkYo5U*HTo;_QXyuUUheK8{RdOD5ai5JviH3hYiZGdwQ zh=#=FD6@z6#7WMmzX{@yB_Z#Y9P5V^#{0jCci(vvec$8u*<1MdlP~b$ho6;Z0=*w9 zx*Nat_XyGFiylG#_Yh{`XMkd`OaZdVaWRl|G>m2B5sTNRkYJ62cLw7)0uJ!L z!xYYpYV(T;Ny|8kz8i@ULe}aU@3mOHHGR!*y{PneDdBG=16zgVB>I6S`E5a^Yxgb{ zMWhb>+Gr~2`&u0B7Qb9mJkh@ER-(D~{cA;o7WJT&OiHMVwcpi_9bCJY*5|e;-M8o` z(zF20=cLa5T5&^qx2=g7tu<{GD5Oab%cOo*05*t`jHg?w>f_Q_F2@6ACvyEv&bu-b z*Yb#*7-Jd5Q#kB7_%T^uV9K#9i)R5yhK)B%bp`I)$ApMP{If7|cOwV*ER1C?6X*+G zydkHZ7Lfc>9zy$}kdmxh$=!f{e(tLuE( zH+fu|bq?LG$9{i6-}mVIJ&uPP^!p=@ha247+~W534)^!Z@Y?J5xP6v8{s-LM-O+fx zBNYewU5BnG=)UhPx{eDE3y~zsi!y9I(-qmeG3AET-$RVV=V#8Q<=M*P zG}BdPb#4m0VGPD`!j8K--Z|0{DKobjBFX{a-09&N?hzNAe_LoZ5g~zu=f-*FyRjA) z3C?)Hdg3m#7~;eu+FZ)aSPFdi`vVmX%#wS*w0%JCHs<1GhA%J2f98O?xiep6O?jq!49n>Np>(K=PhvV( z3?q+>ON$Ppxv=F+G1FXRv3X?b#dDf6Ng`%Gd!9IxX=^-YY!*1BBBaT7w2XtLVqaGF zH_V$hYWVd~F3nvH#EB>uK3(|+jtLJDyFezF~!sTPh!G-F9dOCle! znAT!uUs($Jd6cL_2npjDNX_2to_4tk7_#XcE-}o+e zeUI~b#4tv@{OV^I#u3Kt0OJvPIz<+`^)})D=74X%{RW=hbZ}|J{p&Y)cHaZo;eY$y zx6ye6XA+*>-Qf0Shu&Mf@%$OWIATl*$D7yDcfN=r0tU|8ayAQ|#ait89=lzKu5;*n znmTj5y~X()@x|vf2_?nAC=NoKIp+~97@D7_k+2OmBn)W^+Gj4XEH#_5U5kqmySZUN zdl_?~>LO;eMLWnjQ_yavj4)1|wA+hL{;bQBDI%nI13L@*Su;-ySQe*>z+WkX&!T`a zO@*7kJ}NvRg$d3OdNhUr9um#EOemu(Njrq6BUwTkq(JD2Y>N$3{j$KY=BGBUy_OI9 zR^n8fd9LBqZ&lr|C8TTD(~P~-UQ6oGYR0v-5_0L8H3bFD=UTtF6-^-}w5?}ty`$Fk zwBKJ#{I$=}8a1d%@}>1_X(ea{7A0zd_IV}B$Cm4Exxdz4kbagyPM!V`tKTt?iJ9jx z=jv`zg3XHUmO362!};c!w^#%*q-vcL-0YY#oH2&L{KcHQ^51hcng)3vG_Gz0T=kJj~@9&7)#+u(eG7XWBxZfjzPFo@oX79&$k9QwRIlGc)&P# z*TFiAzUyI~!>;e)e23j`kDKEW$Kw&Z{T_##BW~|9ME{7}+gluONrnIBhPwMVcf{4d zz1x#;8H@0BU5AdxLgmhx;qgtxza)rg?!TotcO(Pzio*ni@q~%t`{&bu^ZA5f7%>G( zI!~uFb;!q&JN*O3iO1B%NP=<93(nIffP`QYzcEhwQ@li);R@BkJJ?!N5~pRcA{PK+ zoTzZYpBcviVLIXT@CpwPFR7!?2!zMSm-Ia60jI|^&Zl!pkjHT(QKUqCW)lf=x{%o< zkue91!$90vYl*JId)ac=<$OM4N;Fz-=4>V&)fQP7!ok@dKpyEdkNBcZYRfc)XqLzv z6pno=1;$X2I#`IJQ8zx8f)4S%E#GIy!RwOlvM5GeDA1>c9*4Qm=Aghe&CutxED#c` zcsT+qcPR6m>}xbZLHsZcCNfgPJ4y<(a2E+=#scZ~-k1651dq0bu0UfMY4Sm)7+B*F z5iw09yx2wJmXG6v)A@|^=~SMVYD~QIvfy7v4y8OLB9HD%ymmA4E6?CI3u;pq1zgg@ z2$GwqaJcBk<*cNXTn%-t^E`7J!4^uVocs#Wn(~Abu(m)E8~|o?M6s_t%f56;NgOYC zRkQ!ff|z+^>MZ^T9$m+Kf{QrUt~P(K$zwDP*)V4foB@y~kmL<1^pk3PEOX1roX>hY zdH-c3S{9wl(CBO{2#wSk59gQg)hJQiYJATt;stq=5x--nO}bR0`I)@2E6z9qWlJ-T65mOwPW<%Er**ddti98OH-ciS>fV8l2vtELCJ%;o7qN6>>G^MOk&Oz7p z3qf8(qcZI*Iy}cN0Wq>xf%S|KO0)Pa7c#&jiwOzF%?M)(opRnoTpVNVAm=U8IV{Ha zT_VSGY&K03Y1UYaIFX(~-q)E{7t1R}phhTd?cXJVxiu*H_3vp%^|kI>dXcT_j^?|T_gcFT z4gCH(nbg9=H8AuRm18aGuL(hFCO52Ir}p1kiLf+#vv$U$Zh4FU-+E_~x_`|uXapl$ z?@_u|YfZoQOjuNCufBJNiLdWZ=O_>iA+X?IUn<4(jQh*rI?r-mLSh+1hOX-tB21L1 z&SG44skOw)t~sdA-9k#jmX0GA0Vs%ztb9F>ugmba<(e)F8-^9jQ=$$~hOvK*LIkRI zU#Rh$us|c=0*yew8s^b^Kv4~*L?TZ&;1NQskpP>RF2VW)c19~?SU7kNy~%;{LVe$I zVn;e!hMi*W0(3COqw5bmmWogSuJZ*_XsyM5cR<%4;JO|5y94(7J?`)CvET1-JRWg4 z9&memi@Uo!+~3{daC3v*fkyBhjyvr74*SC%hvOc*eUHBP*zGzv?_n*dP;@^(rSoVI5Jij?B zR3j(T)GczpgE5Yk^{LYm5(R}Mbmfs);~6I{e}j-c`Lo&?>Pi=37- zpdIZU5(%`-mo@WrgqY{MvjARI-N;_ zh4)v8Bm_9~b4@AKhCrNc6f46?-eURzaola`qSN}t3m=e+mEJidJHI!w$t-?mh-;r< zFr8_%rnj!_%lw{V42%d10P}r2mq*s-LImAs9>1A2HSA)fD|n4(9TqMqrg?h73}H`2 z>_1O5K$`c6WhzCcQ)EF#f~;GjBsuD`JDbNqj)-w0wf7X^`97wRsct|)>sU(==U@P5 z0z!(6jte|(XQqhddx~iu?V2IfTxy0hbgdX7!x0$Gf_aX7PVlo`b*%T27&(;17K^Vn zW-)#+G4&(id>$}Oi%#_7+F0nz7;`y_5Ij+ZiX^~(zsK=-18W`neve@Yc=_^WL0siR zNCG8)Ci_TZa30PW#tE<8zlP2j{Osqy#3!GAfhhr>fB6#6?w{f1!x=yM>Cf@vlP_Ul z@xfoez&qc13*-0-|Lf2H5?_7!Kw2xM(8g$;7%?%--C2j9|Kc+|Jp4cK-eDLAnsVYi zUcEZu)x&_{420<5t%tRV3)GQ2)zk=?^>R|7&E)rYIdX4Kz?~%>l1!D!F-Nwqlqi!H zQz~eYSbSb-23?J5UKSBzOcns!je| zdHULC{959s;cj35T?2jARxH*M6iJO=%X^m+PYF(60&C@{Lg~M^60$X&0uA^6DI?r! z+>w@kf(B0B+9whsU~SE|2=-~T4Wy!tRw=)g0N37aZ7)j&14&On8YNkK-xBRXbDpJV z)fll50+LPe))(dcEL2yV>7o#|gwm6N4y8-qbv?SSM-GD`!UdGJB(lbma_a)}$z#)D zZASsnH1Rz1Il1-DF?>0~IHm+JL@{@ACY~mc#p@`@;`!)~p=u?HGqbSaV*O@uo2BES zj-=zDWy#&2)vqH)<^|`u+|ckQ-hY+v!T3V!1p%f0VsKNsjWFT=O!lR)I zl_K(_1_0oIV##ARaB#lo?vY{jWH3~(hx0pl-@!SXK_CRZ#f|L3Yaf%qH zvFy({8HCB;d>(OTakJBDV3_kGhGFCpd?UtTz%&dP&g0y*jU_?1#08m|H=If*D5D#E7T$_1AUTmDv~>@{b5H^KwZP$uQ3{kE+TIUxLeHZlg2mHt_6n@Ypii1B}24ktqce z^Kz;1QQ+Qrlv2tw=}GS)F}&Qn4ihFSNMY_k<&IU>2cV$clhSs< zH>2YWe=W8omi=vbbf|F#js>!YFv7#lFx`di2|TYlrU>gjE2Kv($A{9I(0YZ1>35yy zqK~0j*gTD3I8%XazbH0Qq0@3A#ll))V$Q8A?~2sinVM0wPdtJR7Xqi3g7~m$LajQUDd$F z3@XM29@A*8WnCMdATftnFPbf}{3# z?S5EG(lz@;BetofqSV$+8r4`^v)28Hh@OZNgfE4gW|(dKI=s=$kVpMRqXD=bqmICuU`gqG3noOQ9uSXnvQb%!3BN zqH2o-%1|-DddG^=gs!kziFY|d$&liH=Lx!RjDzn;E!{I}W4AltcyojOVUND+(Dyy= zpWWg9{to?qkGs2D+}}ULVZX<2zsJqp5jQsn9B+=;@Al|=i`{;Q&U@_lJM?`wQxI%g z&<|$)hr~+Q%RQfBLYN|rDq{G0j1h5)7|tUeA0Kf(4;Tg#;~U37f_&q^JpGZ!w2jR3 zRCXeKVh6-?bvL&gK(-~!9 z&lE6CTs&M(e4%kJNSNWt1V#67*27v)#V!`EGCW_tdT zR>J$u09|MC_P5@|JKuT>-~RSn7*1y(Iehgee~L^4^41}kh%}7|DNwN{qM*vGrQ&vA z)JEW0_E-q%W<~b=?3Cn#pUZJ!f%dldjMQN9Mk=~ZWIh%;2>Ctv&Xok8C|G%nU|@cD zwiBVC1&qzpAgG9wi;CX6Jd}Xv%_q!ipy?vMu>5S}nRwhUU!CwMcPf?u03ZNKL_t*F z|NH;K|NG;gV4TkQ{EL@3okqmuN!*roRBS2G#eDE_9!LEA!%y(x$Dh+k!Er>gJ4{2w zPk;6?OnOm9*hChDeLRnFhWB`IT&$o((b`nBa%lguElUy6kWeCReTxtQXB;&F3}8LY zj~%CT(eRk5n1E-LVoGEyV$2g?OqoKI&qn6qFV9Jib+YzKR{ytVjv=z{32-@uC?(PW znTvRV(M3FMW}4{yCoGVThGQ8L^E7M=OHn6X>Lppbq*?8FEk-W5vQR1)n6qz~kwp|k zfD74F9C4%_6UGu_ImZnWONgjUB@NSvDa>OwJ5Oh03~`>Gp)3My$;o^xk*_6a+5}JP zAlH)b*1v0#CF%QHB80WXP%1*yl2Hi_(7NYVBB-5ipcNV1Qds#_J)0)6->NO4d8b>8 z6Ove^_Ww(JUGt8%e4j+y(XP9uprb7St-U*I94sz>XYPp49IVUh$6}y&J63Xc)M*-r zsdRhh#OdO$FK7nFP&Y0+1yYn<^6ux6PD`cWm}Uc>(qdjc^R2BV2NB{_x^AY7ds}J& zICd_xz|<0kZ48Pg0VS<7_c*cm)ZAE%#rc-m+cwRx{zca@2RYO^iF2nv?-x#b3@2E| zEI72t$Yy%R4ClAjqVKwb$gnKJM>E@d^g9}dci11{e22r~h@0D6?Dq#84o5tDc8|kx zkDHqVZtrffKkRWl>~Xw3;^ufn-}UHsJM4Em?DsqP&cJmEzRT*|Sd8YvV($=~*02^r zOcCQ4=PoY8?xzqi=A?dzq+WkM;qmcAqI~C(M(v$PoQDC!X}}aF?nDtxcACcWo^k+T z?2NvkB$f8l6apn!)^cajm7w2T2qk8u3uYn9B05H$skxI(&)an!!MUdaiHkUndEO?Y z|D8dM4&FQLcEmIFJh#~xgJC#xw~keyV}x-Q&g^hF+`_sJV~7Zm#^fa!gdEJnz|Kda z@Zlq66)-Vgj98+Mi$U)@c;AO9pO8NzUzqs5a)>= zY0){I;j4rqqEVC-NDfTjuvttrW(o+y$IIxZ4DC*(sA8?bZog*{GooC~V(m5$8Y>0J zY!8aM{35Y8=5iEgL{>{Tg(sec*M?z)vlh`h#K6kzDZv>aEbVlRB>@}9iMnn)an zN^m^-lnNiQ6airptn0Ab?GVNR-h1qJJ6P@>(=-=K&=Vr2NF96wN4gdhO|F|34=z#R3WRu5Ak#wmCfe4G6h**A+2_?&R!J|`$?A+Bf(>WrZ5 zoWq4o!I=vMD2adKWSEgak@i|*e>27| zi{0nJp+7lv9SNZ3?tkJ!SFRqG_!n^&@Jj*DpWS0T4*2N9Pf1&)6g?uwfrR=z^Y=rX zcny{sGN#x~YdsfF1Ew${MgzN;wvqQ{zO7ly!WLheq2n}9ojS7CrBVo-ky3%+)reeF z%}JRno#e>AcA6%P(+KAi3_QHIrMPZ+GDJyG4Q5o{GDa{4{jSGuw=Y6*6Hld>!UMke z>LoWB3__a4aREZ)7}LSH5lHL{tp{v}m?jJp^X%P@-hBiJHnS+6A`$v38H5OQFqmSI ze4!DfZ0}~lLLQ9De3<|qpONieAUzH`2du@yBXW~<=sSy0Caui0LE|zdAYnLJIl6-~@)8Qgw zBp>WMLS>HQRCH681z*cWAqr+#M`Vh{-)7p_+_jlCeT?VPoiIdso7lFn4R9a?jNv^` zg}cCL2A-JEF->I}5h7`?^j)utoi#bxb#u>a#N1lJzeeR;;{4XW=lc56eMlqvTKBv5 zJW}U#?VdE>CGqVwNoMW)wg~h|_o!W0Dd~Iav$mdDle|jFYHb}fdr`WVEqh&aHfqy`w1#Y_$Wko8{ytk%_H)hy0*4njP4 zG^s0?#bt8hWZ6MpqY((km^(Yp+tO9fi3Qyc!I~)-PYW?EyLhfVHfn~dr7~jBmKD0J zT+gHPa*~+?pG@VAJWF@^S?BU-qF5BqbMQ+l=-hQ>D7jfyw^?O-DL7~h!NHyPthC?3 zI)}dNu-hNdcRTEN)TKWhj?BA1;^yv_N9i5W@AtU9y(JF*Zbz{Fn;RSs9d?Hvhy5PT zJ9OS*x9{PdEy144of#8gxC=rvpAC0kEQcCGSAdC|wcmw@!IE@&_z@5u8 zPLF2{=Mf=hF8>IGfb%dE73y&$-o8Pi#3#RJP?wnHuel>Xkv_K}_#$;+Bgb)eF)Mr4 zqb~Eo%{3ZnS-hXma!OMXg0fubNpsXPD|;`*iHzeJ;f7EU-dS|s6@fQWFSk5Kjx;ie zFPYHq_t+gM$qk^+Uoz%`lbjZXDO={6^F2CG=akRRI87MG2(trD=QBIJ0m}h2B)5Pa{MizBl$NQ4k5f)wFm3t`ARcql{i^DmG!{LC_!%GgtBgQG>^mroM z=;lr~C2|4dL^y)e=}ba^XBulcOcN&vS>)8SoucPY(ef7X@`KS1jJ z1l5n2;#3lElTjwQU;q^LZsUMyO7jE*piKCPF=2`cAq)jtKaL}*sauET2-TbfQ?lZ? zz+mBhEa(#|3VVk4b1}OBrT|r@`FqJ~IF>Wr(r#zX5rgIF#3D#Te%n^M@^t_HI zw%Dx3Ue0Y1N0~>|u+KjnkGQ+Ph5z^ym|-kpd4Yu}Q?y0pHZf8orhr}VVOfAQ#|uT| zFlE1fIhGKxWpYuTNRcUsDMkdQo5Uha3{IAFAZ5$g(>!j{m^_-(UK9#*?9_SMvoR!0 z!$^7zJn6+)18)gc;jDu-krHWMr*WE!x_+71!|0nFe}st=^f`Vbq*?Ztbhg}8(AAu z5)vtqYb7Mh3dVI}P)lf92}v!PkyOrWkY;IIp(Y_-8;f`SEKf<0Yxll2LDO*f*VeN& z?yt2$rDBVQuA&j`+cJ7ki>9a@OsOETOopYwucR#4bK>7O?1e z;h?ji6OjKMdD_hd%p4q8m%%;@XnW~8kFi{*x2#F#8i#>@sxxO4%hYRQ~ zKz!@$EnS%$kQPsl3&*tVcBDnoc{z$^9_e(+*`L>Y?igkmnl&U?HV34(K)$m;PJ!`q zXT-UV16oJHzV)zr%tfTf@3^gz!dP~lw({9qC!H5bFpL^Ge0#U zi~-{mSZpuie4cm)Iq~sN4=0?5fmF5`1#li{sySV99V#$5s=YzP3} z5Orr_2sjn%7PICp3n=j@vnBi(8TC_W9hpvHuDI&__kg+UTAd=8=TgQ#=Z!|AG>Q3&B!?k;j4p$^ktU zQzP3iE|O+mHY1w?2k3S|rJ~6UO!=`y!|-By-K0kc_h5Pxu_jTP@K}@`gw~STwQ*80hwXl8GY`;ALne%_5n@6v{S#*}C-1hPl zcb*R>2+-Kay?f=JCF&r%e~Ec4*B_bn+w^DNOk63SvjIxWncJj2nzy|5!9$eiExLID#QZ1v`4zcqCX|ao&Mfc$g67}#kcMz#iX0i*yxw`gIv2h@p_)fk z4F(MCyuGPgon1u5d9inO5+myc9aVN9kvwedW9-u(T~VK1-_DC*x$tWUNyf=z%?^Ds z$*-1!OBk_y=GYr~+|L3tZulwpSg;t=*42J6eBmDk^0)H@VK~tm;YYkN>#hB z;9$nk%}Ci4(J9ZXQ{ErMC9iiO(r}G;bxCfejRwh&gp-A<9198?TUv< zdqlyD(6dU0Z75|sk7D6RO*3Ik8 zTARvR_+A8M@mD@0b*S)#Sa0Ha`N}`(0;-^hPhklhaEsnDo0EnTYj->wX} z-LKwxY9=1>ommRTkpW%Rs4g0a)ZV$GZaz@`bKAO~|Na6))PZ|sFnc#u>-P5oL(TW0 zs^}cT-gqG&;6UKSSZ%6LE$9rwz|U8J;%&jMCDq*&+d&L?H5zp5BLGP^B-xJX4n&WtZUsh|sUs?BSjzb< z<5N$3V#k;t!X~5J4(l(OFSfh&)-pz?-!Zo|H_VB9a#1Hs|L~?ks5qpT4Y5zBo*cR8 z1gdhp`w_?t1Xa{HRt4{N+5Zz+4sm2gF=~l^olY=Uk5hJ^zk)N4#xw-NCH<`

    >^=R^3oEkduJel`nSL}c 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 literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png b/doc/pl/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png new file mode 100644 index 0000000000000000000000000000000000000000..45609a7bb9d409071a38a1b33865632d8d38fb95 GIT binary patch literal 324092 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

    s$<2xxM-tkj77Ba>#Xx-Vw-0`Oq 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

    nWG*-oSKrKfl-_T zfe@pnoCuqt5iOV}V`*QoK&&)y&lp1LR$N&rC+w;}Sz@+eBne<-K5_ED= zHKrv2uht5>nkm1#LO`LN7!iqsBC)9T0)+i2vo%m?IJEf(fNKyyN_&*q=S9w?T&>hp zyiCUudRgh(B^kXu%8Y_)=)Gl)sQx~b?R!}R<@Mx>Qw3|(NvM!{EL#1_%6YK|i?OQ{ z4|QUjgq@a&x#D~f$pzT z#58$ONCB9$sWLnI3Bxdg$fUmTklFr2%tU4>pg9~4ut)(`XFH5xf*&UsXEWrQ!1?JQ`j7I zGVYw8A#lW#t4sW7dH|@pm$Fem$(EVxJP2y!8WG^f03yH;5V9PEm{{xk-og8T=tCmv zwa4$$k%}5z`^USck4pLhkdJIzx=qixCnc1Pn`Q8iUFG`lSI( zJ^Xq7Bam1zlM=LK5d*`z)aM?B45!utOQ|ISj70iq(_{c+EMP2{2r&{o42DQ}`1lg$ zwKwshmtI7-JHim5KiPq!2S^g_ocL>ulzYmC>F&!s(pV|asNc}9{PY8a(n4OjoCm2KMcMc~f zdz|cDO8ne#)^8iQ-zbq!F@JYHTT(F0|0M(S^bW(FMC z&LEe@SY-8=%&&rMH;9R7QTD6z3+2p|_r5qpyk?rAst6?3Njo%D{Y@k}N@FiBtqkXU zPnr$4Om(xW2$3Qx0##KqS#ekco3h8BRFYu{7==?d>uqYZ15;CtlN1J7ArKX`;u%=U zW#LRnWJbNMntX^<;K-Uik-6LO|#p2qFJhaNU z%XiP{km9V)(*~gBr2OtiWvUGMq)%SFw@7LfpMijnS1w_t0CWH*{{^6{(i%-8A{DC6 zo3`lXI?^J~vce>8ag+R!Rg-tgWh9+{UDXxqyg*(Qv5IaMR#jQb@8@!@iPnn$2KNdn zMM$b0OP)!HeUQgQqLIqCEUO~)H3^+i2HTa6B5|M#-BBiKWvh+UZ>WexsmuahHKEi5u3mz>|{pa>M6MLensFfCHVIQa**Ot*>qza-Dqn3q zKczgN@R_j6m-2^%%31DtMm<8xC6hQ`(l$vX=(E1AMF4D#?kZo#5Ue!_lgI1d|1Q4q zufBob_>Iru)mQ%z7mqK&F;$Lj&d#~cVVoka4hN9!LB@ehO#Svb+T@V?(#aqq@dG4s zK7+7q0w*Fsmx9c|8CqTHFp~%bjWHlzE5P%$cU_+#;dwFL9fueb=fF6Q@F6qZ6CqK# zsVvuADu+JEYZfiUh{G`A{=NIS3r?hN{(2<9)4-~)**)M|whUHP66J*EXX%_xG7uwt zNMwjifX~(Z`Mry>C4xcvud^v&?eplt<2Zst$Ri3J$N(Wsu-3r2)GJTKAlHF0W|+EJ zrVYg0_p<6!1{s@qD3HngW=A;!9x*bkVPY_LjF`UpU#-#QNV_~vvyKa}BCy%Z)MO|nOA~FX+oPDW8 z);Ek3{1kFqi%)@l<~2AwIRQn+<6%eyfFZ(Ki*Xt;3qq9ON>zoktNXM{n4G8(k*v&?m8iurn157|T#G3b(4P5|OL`N$vuYsZUx%L5b=hY}B-+bB-ECvQ}ZJ3KXH7 zHc^!(>9(#(DOG7JkrcGTjzRi<8A>3;w#f6bRyCIjLn$X*e20j?NV(V$+z87)h}MY3 zYbiunRmT~Ps*3K4T$4yFU=}jEt2muVL5Syy6KyIZ#V9b>^GUhyg_LXb0kb*}RNRY1 zyp%4mKrsQjR8;Nv@{`axIs|F;s;}op!unTvrwmo)QiBzGs&uZ(D&%^9Wx1%C;0xUdr-JD^J1N9<^2=*I=|v z9*1uOiAy%9iSO%o?t_viVNNVVytZwx}1MLJ>_e(NKr>E3Z2r%Fpwp|FM43+z> zMNf=@ssCWN^kZ@u*fzV=67!~grwzksj*@z?RgH{MJnWrqpDNA&$3&KTIhh=(x|%vpzV@-U7N zi4y@DuZ-^t^3@uI5a7Lsb2haAL`Dc6>O7Y7dRXbxH=p$`2@Y5p$3dJT5p+4k5chyg_nLl9FBPB;X^p* zu-o;Sg+E@qt~0LzwoKj(MZ0#6`^MjN5L90rWYQSFnN*Rd3GgfJfADcBt#F77oHd=d z2r>qJXR+^lbjH9~!ZoSO1?FSFc>`J(ba(d zoyRykCKAZqevi|$Gf-yL?|TOx111{K!{Eg20Gde*GfE=gEAbro#WdoA6PO`HM(`2G z;fSlNBMz4b42Kck2Mos%(fhPN${2KAhtUj}#xW-)5)VQeE122_01u1-12L|y4){^O zwq~H0@>jAEmkyh#`l>Nuv$bN#zHw40Tj3EZ2Hx3ltrby%_8{xNHF4{JuI9`}tu#Dk zaK)rP4~_MMW*a6_Fyyk=kz258g>q165jpiZ5e1D^+zDb;QN0im1^BjSV4CwdTmqEVb;J`mwC22o!=k z2NHEk>Yh=py@tS-zY~6PA$yC>X4Gu{Ejd?f$RyXJc{a;uD9^{D>qt1hYTm3{=(E=`u_`97(kmqf*0by*1guFo6GmLhQmwX74Bd1R1Y5CClx;&>1gp;;i!lpsmbZswMJTjz_ZQM8? zRUSjzSja?Ft3{BNM?x(fqx3nbwqdN#6Rli54Sgu}dx?l6QRQCIdZqkQZ5OM1uV6#9 z?^emQ`kg)t`aHJwQ=w!?$xJ1K!v9hCBi3Jj=awI>ee9cFn+Sld3+vbKeCdmL<+uMi zzV*#-;>{nvh2wBU@Dq;5BZi6L$AH5yVdr}6`VM5U5dZNsVwlo20Gk7q7<^K`CIz@L zhFtyc(k%H90GkefVy&MRa;e1_5HG=2h%tQzDc}MpIJxJ5F$dx%1h|kY^JIX@PpNtu zCh%42$tDnDn6q^f{$GzrVo|{lG2-HIh3B7p4)>e`M~}?@pREx9s$Q(nvl+*E?`bZ5iI@76DUyzIbj!CilM0Ee0`>FB+ih)5u2W9n54AhY8Fhx~@lu zl)y2$C*K&LvmM;71G7Ph1E!GC7ddeQ0-`T^A&p6GAR)k5f;9#NYDZGOeN_NwsmV zJzglC1KDe~Mi8p+x)E6mtHr{p6%}i4?2oFJh^AUnlE5`;p;~{)eU;TqwT7y9kibQS zPDck^SAK!Yc$Wc5$-=!lp^d11qbdPX6|nNXWshn}j8;B(@%N=2qrpqTieXx0HAK~~ zgcBDPzZ`U}s9x4Y01Y&Nj0orIX_F^{b+!fKY^XR8GUEgJ3?w3$y6?V%zbeFwhKMsn z3lA5Ls;CwVmM~H~ulg=n^NXyA8OZ_26%D(!i@lac{GI}5#aQu4%0e7 zRS2Ql6G)*Fnv(#4X2dKs_bTgx$sUDV3V1o>`JA6}UQ|{(sYKS1s$QdU*16G3q>`_! z(GP{4S)Z(tp(U!BV@hPuVq;kaT8%XoiJ0;p*Y##)gJ?my&#-NU`y!<$SfM5=eb~^m zI@4Ur4b^QUmElu%p=#No2AYprS<6)qYkm-EDpq@d7QjRB9H@0-Wecd_uTj$tN_2!k zB{pmdv>U|r*%fD!TUj=>j=CrVE>6znZ3XUNAeb&ECQ)**4KiwmQ5#uys^s&%I)UL>1^Wyj(+XS|N z0c5hDn1gvR`hAD!<60%9{Jr_-8OSg@*(q7VaMr-N6!;TG#F(APS#jjg?Ocy3B({Gh zq;?Tw0AtYiz!)N?7!b5>2%HcIgJ<~Y;kphS4Z<^EKgI4WU5}CYAm&VG}MiANbwWKnx zpjwr-%D$zqFXHTWB~?IC=Kz4W?n$pVRwzBA(WBh@o<<9XaAY935TtXh_pwOQR3@kl z2voa(WGT!aqpEWaRV7}XN0t?4kxg!OLkB4xr-=KOBwYRu3D2bpjUx4B zs~SxWk(P)CL9VBfPpsCQ(AZEw_qhsfSIT^AU8^%vK&Z8UR;-mo`cPe!-_nC(4_T}+ zp{}S4R9d4VSe=_n$CJEH@i-OoNB4`6Jm=JSpX7j{hOI)SBWt|(cD1z}Z>aS<>4dO4 zkD}Rtq#Y*Z4={A~mMSia)|q5(_ztCBqN+(l$%53E@~AY>0)_sV2^&FFuQ|05f!LDK z@=vTQ-Gp|(L+Qgna!3^IItx;=vCoyxtn4DH%(Z6QCyl1jHf76)C~H0fRZ!}Z@=UV& zygn}t->UKrTieh^^0d%))faK={!z6Cy{|0*`gNO&562^h!x4T87^i?Kq>*k!4vDcn z0x+07<1kEc&Vs=RA@yI+L2Tdv#1)zyG7rE!+RytjDd_xnn+DXU_i%DDIVQIF!-wx+ z*S&zV(^E{r)@v$O@RohlHFO0ND&+Yj3c<*x9^-y388U>?fRTuNT`6|0}v^Z5P|?Q z3;c9Vgrq4FA*3KTgaAaF&Z#Zn-MKXcCROE^p1z{*iNQ%mh|t>(&Nvt{DR4FpFb-tX z$U%w;Nq`6#CIAMJfhj}`(}XETSl6NNy0!IS>1P6fm=o|>j@cy6fiV;NjU$HPxF|6{ z1&qU(Cl~H~zy%jlgC8qBhD->GkzGsc z3M*Zq4To4wSp_eHy}4pljyb|c&zj;5tLEua*_SVuTrfd5{C=^=E!$W)3bhYcR6VQC z=rZGvwPH~S5^;GZRWB-0)wofyu2+jw+$%S#PRem&0ln79&YIgo_*`mVWnorV##ts- zRJ#lpvfeCIK%r4pC07KoS_T_I>hgS5)wPfVRxT1XP;jJ>0LqsY{mzZiN=+H$HoRmx zpW4%H$*71&i&@UPIHYG#lh$nw3O}I_b%Lo(Ot#q0xv}>}Cwy7Osz~{YieQP%Vu=JQ zS-5N2mVNS2_fb{n#H?<;CyK$H^vvxo{+9KctsZ1KmtCW;3Ypf(h(!<82!L|To{ znD)9xdOsivx2W_4iZ(7~)2f!a;(}#ROQ^V9mhWu#I~Ou2k_l}N1{8LImAxwWpfqbT z!MJV!L7`lluz!WZAZgpHxSh2=QAs{AEkadp8x>&|Z4`1cO+6)OVa{phRdilh;DU8P zOf^zWc7t&xE7F%JpA9kzpzncYg}%yLwel{!VPFbW1{VpQ8Cg{Ebm&8&&s2rxD$kVU zG^tT4P>aKotA}N;Q)@DZ&W%gX2(EKk3sR#<{40bEy(gc#emQMSp4MSM4kHeSBVyp( zdyi!{c?f_Hsc)Xa7=1tp36gEC1<=C}M{rD))&zZzxe`r?d88jP7I?HZW`)QzK!$RE zcVcZ187?jo1VrgO$bvEhI~fOrlynFo#>Tp13Z4xG9z&=2h(dKr8xr!Q# zfIw%Q(nhDL2qT_*a1Z;F9^>TkImx;nTQ3V*wio zepWIZ!5P|5Iq9>w?aZ*YOR1V7uuWqn)1Akh93Z>yqah#!4-ltm1R0L+h%#i~WV8tt zY^;DW8Hr+TYAeW71VSq9gRBF{q}??H>nyCHC2>(g92uM>h*Ofo`-ou}F^wapalkkZ zm?jT^(ul;sh=DPLG_8U-CKOIcvSh7A$YU(6b4k8q0NDiH4c;$pGh63>Q%YLB`|taU zWJQ-z^>ns+*lLB1szRbG%c6g<>Paq-aHF5Cy3RT>sjN{a{FFmZPiY*|=vZ^KH z$&D<0xkfq*ukwnd$j7LKf>7(bBD8g;o+_XL6RFBq?V!o3n_$Kgt4CZCR+Sz(n!Tr_ zdsY?NphU0NW2mZ9OWhl+H$^x@B+(}ziBu+5_osU{NeObJ;wLI)Y6iEyC*HOrR5_8w zIxS8dFKu_E`@^~Z3|hzx(cYsN!J(_KQcm@{NL0{9)g4glK@HSN@g6k#KFa{3aN4WA zFZ!BAzrCmm)_Q8~%V)?L)ZDc1vp0gdX~at^raGZp8*M2&N+x>h2lN?k4At2DWUEL(S~eOc@i%c2oeZ95|YOp%@Cto(owfs3mveCVa;@!;eR#$mv495GG-AXf1}+vsmO zZg{`qumUdVeIi?AMKUx$HkWYDQa{ctskwS@jR6yIf*xk_h#|t64nB_#j6~>MV(fRu zVwyb0X#xzP?>aCTo&$J_OI0I5_o*puXHE%aB1HnhAYYdx>^pJ_{+T(o z0A#d8LIfnmoCqsJ3fwv7!~&&Oo9IE&<9Hm_^MG`&(srcQgAhVKr^weJ>#Ymp@v%;uit%O$nm}OD2taOs>eqXJdf}7uTw94aO2BKVy`zrn>S>Pf1 z_|}-4R03c3%9Yg_)#F<_g1|Q8HHzfA=qIMSnyhbCF9ECGdD1zO6>_^&;EI{Lwa-bi zG9aAWwIV?UDb#FDtEvT|s@5^M;Y^mgTeE*dCSR+LgR(CV(#vVg`IapwtdJq9VxwRo z(vOmrQ$djc$qZgs-dLVl<)}%y69u~f03ZNKL_t)hZz#Ct>d2!Eti&EF!~>z?Tu>h< zpK7DcgDW_Bg$z*Zy_zHvEq1CvTkm&?9O05Xpzwl=dm@y&i55H0ssNxX`(hFF{As3D zyD6si3U00<9^IbKl~+w-{aVNm!TZOua=ap@)?SF26G=?g(48p7{Ru@>It|qxlInlu zHfQnty`-w^i|dsir0GyA*<`LnvqmRCp#$nFX$y+1E2PyIDE9ibC$ab%vDYk77NPNN<~;ph0GU$A?p?&)ZJy(UI4X?2T<{K2=Q4R8GRnb8;k1o>W`p-!cm+9 zh0~ykFInwz$zieSdc=^(<~rA9lD5M#IUvSZcvbm6mL7DuX5wYm|9dzN z@Y95o`*-lt3(w(rIO6Sxk8tz>QHWALKqeo!$lDYF@1c)dS)XeJss6c2wv}T#^8Yo~ zpzAwWOW1W5Jf^mfeQ&`rLFvb70tck(evGi>mVkvhz#50$z6V)giazgMu8=S-0SFbu zCO&vD=b+o9`v8!pLo9Pk8O#AOu8u~R;rU4x?D9Cyx&@&SbArJbix@dq^OM{g>kug? zpFp|do_H@}NE{VQ@DCFHWMp1ACT4C5pJjBJ1Tmktydl;a1haBB?DucdLFv5$gwv$NK^f?BDOD+g&|rmEYemX&DepqD`!ltBMl}qxbUL-X zi03Q<8RGg3p@F2RXSA#JEsSGT-4?yXRc0V1*Qu1%+Ud!?Qz%F8H7o9|et2z;NXn5w zIaHia)ToXZ7ZL<@>-vgOQWXb68B#;GPzZ;xr2|SQq|s)gE3d8oSn=!|!K>~aR~0rY zvjMv8LE>X8u#@iDF5&PbqD$5CqAKd;xvq3LlYslyeY)!!u&$gf2}0Q$TO(coIY*Wo z?z56jRturgTLd-ZUCDE0hideebg)_&VL-NBu?#?{PU8!phVu4(Mx2l1zz`U}1Z-{w|lJ$=*+Dts44cMTo3iF{O`L=`u8qh45)u zK7$so_b|Z^0NhQm|E&wnzrVU1@XkArF@+RRg_weQLk=ON9_AFtB;voAvuB54fFWe) zw<|Qr8qLnZTZ}6-JymZrySp(UO6>+LdL#{k_vy1CAX0>dO%QXN`^a;~I0T=1{|o7~ zCiO=fm*&;a&#*rC8hq9h08m4K@@Xa{!o$ZGPw;^U=eT!%f{%af&*SX%9^ZTYO&q6) z5c4ODSw{s{#2MU#CEZ9OcpIcZBSY7E%lclKwIl%65;|wlbq2;JqPxx+OjEkY-F}w{ z={SHoi*X7Ve1iLvA?$Vzro%E7z*>SW$o}Se!(>wbKXXdj0LX-e3H33K9>!Q$>p+GQ zyB-5D1Y;bWb(v2hvHrWx0Z45Oo`AmZR<_OT=%w}*ml9jnW|B!-lm!vev;wDdV$Ke@zl7*b-b zaNfN4>AYBiAq(#(U?ZbT?*SF?e!Z5qm!hw8VKWy7qnHn^#k5SHRz6x;LCw_^<_2k% z?x`&utX4K#|4y=P&;66~5H+r$+6?OQJEKj=#UeP8?Cizq)KytPcwTaP0m*aDw4ry} z`k<^lR=vkm2NlBK&(fLlwFIce48A(? zTsBRM{cFgEPF{-sYi{c=wDb)%W~moHmm}|VPXaeE-eOdqCJRBMQeUdLc1upxsl+T= zlB#NZ(UQRpJwNNDWnZg(BAJLN5fK(2ov=^xJMzfAuM;Oj$lG^r( z8|SDXwOlxBO0qfFy zCBX%{V0Bn(j**R|varRx+88d7O2RHywz*t#od}?IVyV=1i<(r)ZQ*xNm3-BDT1=Y| zXR3t)TtC0XpBH-)Xy8A#+$Mltyoew%H}`z@iUPoI!QA znhT)zp#o?WXfnRO1>kA?c86zt4daBzPp;sB4BJPp=m$(b_160k5L4*C1hpI)Oa{BI zgCV=Hnx_Xa>A!5~j7d;*>ujDRVAI&Rkb)(EQ;(#@<4{p4u(shN-=B4O_X{8(2MKQLQ1>f2X|b zYM!vTC0WIg4XY6B?z;L;RRx8V(Wgq6w)b^4zEu!TXjEdA<0JZ+i>e06?}|^=w+EsUgMGT(ZR(2i^Sq z&B|DPAGB44($B0DbxPLPQFp4Eq+NhUWe%<0?4^RL`k1o(RTC(h?Iu7qzHeR+mN3`! zd#a0p`aHALZM95Mt;H&trbeH-%;VL86E*cy)l<#wGgjY=ZWBPGk6PLUYUrSEaxu9 z03eM&^D)3uCIvKvSP_v`jcKhA>PME)EC0)IEm>&z<2X zfAUlK)L;1t{Ng|QzwnK3eHX)&S}J@@A-(}2&PuxMk3~vmq+|*Mt>(tecfc{q?CW(% zfC!LHi2#mJ#WyO@5NqN-P1sA*87u*P=dj;**q`nYgTvM35f~Z!eUJTq59b`Lb?C`5HWVW1EB}Vz*&o<8!?g3)%}H9ls>cJ8%OB-lt}V1rYb*Y=RZSzd|)`kaG67ZIej0;wI?rf=8qtgI09V0r#!aO zntac>ZDmPPE=Y!%=rXTsZb4Ydo6?@gkdkY`dmIk~y!VMX&`*hwGbcc1@4n;c&3BG*!a3tdKM+uz>1m1VrB?(*~NRsA3kxW?c4m zR}Y06UM!%e(kLzb4h+;xwcK`WSb4^}Tvo#RifV3|bry4JmuEyH=qxJf3%puZf;D$S z1qH5*x`s=Z*~h%@*^4b1$D6adMYf(BmBGbB*Zz)xd~;d(B-P`qdj(aZYNcP$`*mHF z0jPLknowa`MC4MgTTt`j42k}I04<(~YO-XjQCL^$st4EdkM+zepK__#3Av-XZAYM5 zNK_2PnWsiCy6!pGFlmk8EPAC`JCF)?%8-4h!Z9s2ms&m73qq?n@48}D=?pZgdqA`Q zAEc`4KzrVJYait^ldjNjB#CPDKp`s3!buk``ap5csMrr~Kyszr)}#nj1vpgbN>aC*C4#VQHh$ZW97(`74t{P?u=QK=a(8 zP7LewP@>rydB;*O)}w)oHQ_q8sHb$O=@rf3pDR>Zg?bcxBD|oumI*~IeFtjGPKiKJ zenAs`$88yC`c_oi=tVzk`7F<}NNOlsSnPF$?ooczOBS%+L6}|yhT^Wh-sR@)}nJAobA$e#wi80U@*l+;Jgnh(3)qOQ)W9)GX)W__EB4# zf-FNoME;yjz2N{>BEc*~mMj3^csSx@cLD}5Ok;*pr@)Mvm4Y*%9IUldT`DMHMr2_0 z5l^lTI1Wd6Kj7Zo6a3WA{54!&Ug6ze_zZsV!^a@9K**4KvfvmoPNPulNe|BiIE$;E zg2<&kL0gyhJ(>)uPf3b|q=+$*FmjBDTqADg3;+|u62WDb`_2F-yB@o~!^ugH5CW!Y z#GX4i>r#+y2*=|A)>_=Tdk%VXnS$$Rz%gRC+o5v~hvNX_98OR6@KeNL3@NFzIA)Z) zMsfgvm>~>F4r7Q2NFuP4{Ff@Aqw|h!;_29aD)%&tm7^=Si3gXyE zUY2V>jR2ymmX%W!w9{3?jP=ZDUCt@GIjZUvHNLyLCsCm+E11RC@J8j2S_lhj_Ytcz zK!t2Iks#Q(CK^RobzijcJ5Mr9eo&zN2xKw&V2q2q+ zc9R2MAXUOsC7GAXr^&4V%FyGgl91`JDL)tf4%vFYz*@P7V)>DXC)2nhjiZeXdx~ z$OdZ&oi(^~y2tYm?&03~DR!L!cLp);(RCJwt0Tr~z^?DpXRHAe!J4!tC2YO#9j0kQ z2p+w2IN9$Ic|_!x3H)sC7g{Tl#>~m03C1{(vGBpe=3t$X*zt|E2^kO~U~|#~CZit+ zowKRJ!x6+0mI%APgK=HrgoqK;(Lyd5If7z32i97+&cQmDlPQ#W0Za<A@%-G9)9u|#v!*b#9YA-C?`%>=MwKi*I_sr(=>n(;pd43ac;X=lW8-t<)8J7 zRYI$rD=w>5wJlkz*4lYheecX|gN(wlQQyMa*lGs_4a5y(g;ugslVpBp9WZS4x$F5v zjrdp3m9F@?bZ8OtrHw z6<^&mE}W(EQ5#$Vpbf5wQvOQAublr9dXHS?1q$~0V(&FN0IlkqM4f0~g4O%h_pp*} zRUL&~^QKRrK?}NvzN~gs2{~%FtZ6!es&b_ELT`m|;#8G?Ci7BGm@F!``mtM;J#i4_ zoO)JM5m@I86}-RIgG^H1)1_GU0&gK@P@k9eY(bN;L(MB|@I~m}X|9EgxS?a`06`%V zS~988TZAfSl-^$Ksi?NKkP)pj$u--+94>VpbDg+t?31`zqRMfvK@_|J|8G#UPih14L+@kA4t#fEFt$GsXGL}g1R^D`xN(D=~8`f0-e)H2azP2;{vg?t~Ki9 zm{1I@J>=Dwp&A@OP}6}lV`~$QqtH+&5GW1zY*Vgj3yGuSv2p}AL@Od!{#Was(f%Hk zlStaWqBt*=(Seem`F^GCZ2H5`ItEZ*=(ZP&NYzI~z~q2@3LeA;ffE$oz+mz|v!Ji6 z`3uy80UuM4HItX6>T1Mr%%cGbKxSU|875+g;HN2(tr@e73?#z~3p+TG2AT{NpV|E9 zNdW7zM>y9395MM3b3gx5SznAf-bBb{1pDZzx6lq^*{b5zWe>Rz?Q%P=m@xXdV>9fyLkNM5gt9c!o_jQFnEG94$h`3 z^T^`@g+DzzL1#M*!x7$3xuQ+EB0mYZ4uioVK@I|k#HSD$r~7?UNHO)*M~)bM>N#Kf z<7jP*a27Z}+u`n=6Wl#NL5w3pWSpPuZ~!nKjvz{7_|Cc$*v{ed>I$|uaM56zrUZGn zfO7=r2w@1=xel@KF!_KfS_DrZ;}%(+#woXfB#1x903&>im=XseLGwG;!8((J;FV0! z8jH@QYQM7tASQGKCno*A-=jb6(>1d!u>pJ{!2okei4kPPLD!-0dl)P8r7RRsK1(qq z(#pt)AtfhbhWL+TLVs|K;E<32b0T7vZ|f|`Sae+nwuCSommdF^rzKdM&?GZyqM;vc z5 z>O5`>D|s!b1xbV=vRa+qiU*`1b)xbtqv7yy(}P=`>r!^PaDo(Kup$ZL>JXzE>B(!$ z2A7FB=x5b%SZYKIB=nIC_FGlrLWWtwtQYoZpaHv3K|whRjpt+t*Db46;-GAsBEg4H zC$tzX61Ga$K@nak667)=H|ysrC{u~aZF^9**r@90{ClVnP`BdLJuA@ByR=DI^xwKi zCBXpIknzTTmgzojJ-!YSSnELbfAsg2ycQ}@WVJBWM^TQ|D`Zc^Q01PN5N{UAI4*cr zN*lPg2XS>KDl$8)37zW9G1a7Uy3IzkVU-9P1=+_&n-E&bh2j|%x$3gtr1UZx?Lg}J zWo(@9ifg}TIp4@cj^+AP+&!pl9H9;hSwrP@;96(2R05NWGebg6F2zMcwMXL2RLL{d zQZe66(c;6(mQ*@VJc}+wpwQ_>yJ2~5Nwv?2Vh7OVN-A5b#Icoy8dk|K7Ko10W)^Uc zGM3~znZ~!q0o?qm5&%z|MM%(o18Y+-GzE{y0mdfcHKH_^og*U>U@R|{$CzRMC2 z3Q)&sgfX;C0tg`jkrAQ?ay8XDi{N9f?92Y*#206lQED+pSeyFJ0l!F)F=h#oWlBL>afuZ>tZo`iaSZ!CUifQrg?7R>ZK-ZQ3&LDT_Ec>VR)@zIxm96$Xte-%Ib zvwsy2fAtGE93lb$iV+k&9-Q693-?d)_M^vm^X*4?ayejPz}XI`CwtsIKf~qaB_6)} zF7~?)&)vI=ll>k~9zDX7Cr{w4!P(gXO3QYZ4Kb!DRvSEPqkJ+w~;hZq)j+v%W=|e3VN-oijjgt2i=Ii)%PSvZxOD!@p?a7E5s^)P?fL<*LrVy?NqQpReMdNHDRmWrsNW-P))U5 z)iRw z<@ag&jYY0S=CKX=Z|GcVjg?eqi0bK^)6a(I`Z@Yc#UfKp$YB)HZPcAdlNuEz&I_yOF%caC@8 zc?-dh_}It)B6j-|eDj;%!o!E}E^zVA5Keav=chY3n@H%UDIi3Ka|UO9j|cbefjD9u z2N(dSyABWToS`RR91aOBVF+jY4kx`sZwY7n9Zq*W3r)Q_Qd-oi7&iA-`*5jKlr0p@cCc<-|)M?`78L^?|crge);?G&%cZp@9mQgqDIBCbOfrF&lbr{=@4q{ zGB%6re6~001BWNklC^Ke}{ket&ieUAHP${!b;MnDj3W61pL8g{%3sU?H!(f@pE_5c0v;J1I{S7CqRr}6yBE)kLz?EtlWw<=RqJ7&D$ z0GFg<1w^|#5wMC<;cZG;!2DyyhfjF%nV=hShQBeW-cLtfGN+4u9#xPcfa`%-+ybuy?Z^( z@C0A~`a?W|!@VB(gJ1hLe*U)~CIR1h0p#TrjvWPa~km{-?>76+NEWvm_PBO`*s8N0ed~+({4f7Kd^gvV1{)L(>P=Tyfg~UbsY?u6zFzcku7H!la%Ak2{1#nIRMsmU~=$04=d!{_ihmL zs6aCLo?_7hgETr2z!EG5?^8lS_0AFzT-Rmdwj?0KG~vxReu#T#J?`G=aB=Y%Aq@B% zKld~EmtXrjUi-ltc=G4~f`RuVu8vnYJL_<=cZhM1aSZU&1xD`?!vw<~J7>^a!sI=s z@rceac4vEBT=cop9$>&Y**Wme!jegh@!lg&6D$}z>oCL#!x%75Q|fa!31)w1zr*>? zq3FIskxqA;?Z}Bf*eHG(0;L+nJ zn7oH`2FGE-#pMx~7bC#H$^HyL63~9%<8U1C)&* zKaOWu*1LJr+A_U|FMM|87$;10JLBl$W5D16{ zl&2@mz5mRV5-TP{Fd3OI!Gj|wx#zeL1^!vRN(6wYAVOBTNLOwuG8KqQ*7Wu_@rS?v zIXt=dDg4~O|5Lb27x>aY`Fr@izyHg4;XnUR@sYcyqV-u+bhve&DoDacw!geb-P2l) zeN&`#;<75s%d}BNBe?xNy!eTK7pJFp>hWw_0UiL5!v}xzKg9V5pG&+MDl5)QrR|1F zx30Kvv<%EfjKn>0bN}i!&?tfRdk&A^#6vgL%?bSf^Y-3Ra$WhI-{+;uUDY{fG=N4U z=RklU0Y)%~;gHnC9nC0NtFXtGwbokl%06dTmL-q1qmitkMiV&0oCy*DNf4=lMk6#D zK$7zZ4;w&N)qD5d`@8q|`+dXG@4E|%!;;8Zdk8sDh+AI$ zcP+~z5t$<5pvHuy2l7=911pdNf`FV^Mfv75K9>R`UvTzKm8$>nEb=Oy$pz@+zAQ2%XclGyQ__lbB|hz=*$q_WD57( z3^U=lqa!5UDOe_~h+TI^k`;4gaXd27DN#g}m0fX`cdM5Q0Sc?d3huIgR-Cm3Va4-+ z6;^kvjODUxPw~r3VJ=Kc{QY8UxgHn@1@fgrMI;z}7P!pd&&ujrJn*7aJk z<`)qK!s-HBtHq%uYdReZGdq{UFs&sbf)=9WqjbmPNSUq`=YIR&Ekh$2jiH+9MG)4? zxhH_B#hD$C+4@n!67ka&R*uUb*=qO8o!!1W&~X-~sS}wVLpQ|5ZZ{yhgJf20Krute z0?W}xOC~~Wc9Lk?SQL3)vNzq?HJ(3CFOjufdhM(Ep{_(QSs+LXx$BOiilHSr*mA_$ zav?kcDNsaVZGccHfG~ZHtH&p~=Y^wqJt4%Ut7V0d99Tq0+qrt?BE`qP%NjLFG#Wux zjXQ;CS3_bf5r$kw@mN6z6g?rbDmUPhGLaEhadKQGo=O(s$q~Fs19$!gDmE&(?s%{L z2Tx`trR#F>W_y-jw+OMw6p6WnJ*St9#+^cUE8~tyDj8)a93!O}c1&9tKUO<$Su2qn zI?-?o7fzq!Q28Gt58mc#<4wvQ`6d;GwUqe`GQ9E%|N2$N+*+~Dm&7k&wLN78A~K_* zj^L%!+&bPsWqt|%vMhvf7iSwT5G(l>Yl7k(F~nNh)LmL6{j~yvaEH+ClKo2%mPPPY z&vn)^8qZyjKGrJ8)K#{!rDy8-bIX4d7XXVzMSUCcZwsC=?>nwL!ef%SkmTFkYY9Vh z4ppMCz>PO_9m_Cn2*1Od7eu?uZi~Cw6aZb-Fb%s`FE|2qrlupvvQ0lQ%?0mwm*R5J z2|AW#A_+34X`t(l4V!5PHA6QL6uVojrqlLyJH-MM(_U|qK&P9pM1t~5pB{S$JF*`{~MJ5kFe3bU~PA*-%f|fSXG=sFN zq8mCMkDJV(A4!l&r!^wcgkyE5;q|!idEG?kG&EHu5s#DM^Wu>el48n9CP9%U6j@q; zpi80$ECa(3kVFf&B9YW3L|sQSO(fGmkp)B%T#ASyizu>0RwzJ9*KNx@5hMZJZUvv; zhagF4x()O9WrR3%-w~?UtRa<%F+M)V$mj^+**PN7Ii@D27&CNKT}Ml&aEu>O6oo** zkE+_wPIkUmFiiwYLY5?S!-2I60+OsObe&~c!7>+B{jp4N=nM?u+{zr(Jpf7 zy0IXD2{u1s=VBBYuyvkjd!j81-+y!GxSeyyG~k zr<64Zf0IK8N>Pji1Gg@6;j>SeP53C>{y6&%ZO1))jjNq;lHqGiPnEJ|E%d1cc%qFA z4|n0J`6k;c=4d$eHlnYT+9&^*y(JpqiD70##jKf2(^mfpjhDV4EtF8c>k0PUyPZH{ zgoYEZ)7jmIE^lD-V=u6CV*!z&9%e%on3kL2rZar>?$0m;7v9n*IP%h?6zY?-T{unK zjEoq*!sM(>*`BA^e`F{A=m^(7f18$;8)))cY9Dx>-P@}OxWt8S&+xgoIX99|FnXH) z(J_J>zQNj@QLdl;6eYWs&5wPL-8F6|``Wqq$-4}X^&y3}vhnCM)Dl3xEP_iic1tJsfSlqA&F5BT}tbP-JmWYv9@`=8oNfn+i>)XAme@6bOy zL7@B~yN^CVZDrkjT@XedZg zeuVd4|A2Tj#j8Im=EZOCBHD6^lOOyG2`ihNjn8rL;XM@lET;O~xP0Or`X*8+mX4Or zp=1d!T+pZa^5jR%gol|vd65ENlp75RO0x&)ygkj~-~WAtrjvZ}+54DMCfVzs;@&3@ z5t{Ag=9L=^&Lq*Nt`KvtqjGI6v4IPW4ULkw_iNmDa3?t#vhz(TF8t&Nj8?qNbBBw- zQ0b}vfX3l9JoeOD`s+X8!nu=}N&!V%pW?uSyYY~HHzCYm6?Pa)}Mya93XngPITyMFGPC!)S3|%|UFB@(V zj%QMH=o$9hQ-?b;M8nC~>F8)fr-G7uU*NvIYw$!`dH+N=nHe#9<0H&(2>{a>zU@`i!pqe64MiDT2c~^?#biPtpUcHC;7BB zj?WKGV-`<8n2ARc3AzM~krDovFA`)FXY$97=aWiAdHd}#`g}hA%_I4Qn@9LjLyCSA zwif$%@<1-zEBvHqBAlw9;-fAVRg^fqC7YuqD(_v6lM4Cy?vVn5-Xw3oIzoL?;ZMF* zMS*krGYyTwt_lA6^CfRiVZplQNo8$b&NnX93W)hJ{wrBI)E)T62r@1t$ zGM8obXfgK24XSvYsqCib!MY=it%g>k`@5S)k&m+J00_Ad=nf`9% zsx7GT813gj=0g4FSngs9V_ z40bhuu!(Ko`VRZbJtQJyoPXyvy82oWy`_}xd6Au4y!4)LB$m03z4vV)gE-BfonqK5 zVaL8Y!Z%LSc=2;$aUc2nzRI!t>+pKy|dT2pP5PJzNJ8Bzmv$!KHs77Mnw^{0`53eJ`1U$z)q2pS=4c z;%11f+UGg+*nYBOL$owD(HEXWpP8g&%Q5yHu0at%o9Uzed>i5Ee!>%NB(*BGJ^dm( zYx9|`|9}hQ1q8xxGd%ks2X-eIk;~YIhuPsa&b<2?BU4j&3wN;ff#=y&sB-gaCqtv- zBxi=msjebrlpqkHq2W_T1_yZWHH!*Y7m4*R@$|iA$f8N#g}1rTSIu)@--QR0=vXg} zpS(uz@HF8Q?_;bjLQI9}IR7R+r&@`sWo&-rS+;MjM4am8%!fZ^U}zXatfBJZuk*mp zBFwRCy!KHaML7|=Z#Cl1+{X5=ev|FR-i7qe(o|-r!o=NfLftpGb#s7lbb{E}O=3nh z+n@ak+iD7tX8Jkt#@{nMsp2atA?Y}nsnIZlgCd35GR&Zq=WXH45 zQWu<~^-vgF(M#~B9bWC z&~X7AOty2)cDL6utwrT~N7+)6Bt&d4^<|mUydwX?-`U?Qh%30UfTAe46$PK$g`x!(L`gt#xo|0N$Em@dQ;}$lWJ+_o+BTxY zExT|j%7T5M0ASb&FbK$!j3UXl5Th)ixZDfw5TYn7=uL={om9BpE@VYUmK7vXTu4GC zMYan*P8Y~Bv5_aDh|A-~>$8OoT^=_X0Uw!J8Ds^0_*@b$Nk9=KWJ$)to?}iO9}|nT z4v~18*|`+4xioW;Ig*Ju=|r4lJcgmG=$d91!4@bf7P_X9NF+(7QkbS`7bpZ43RR{F zx^B}3WJPwg5bT0Rb!8^6QQuOe)4lt3^xzp&n{!G{aqT)Tq9%KldLNZ z(BJq5-SQUJm4uKbI~*8loTm4Fz*uCO@&|sGVtJTb&5fjjbufB~FW&kbZ_R^LuMIKL z^a<1WkhMwruf5OUbclkj`^hm{>Av|XGr{}WwyB7o%dgSjm89y(iv*Lc^xYmNSXaVK z(+Q^K4Ft7zE}m;9cmFr2DM~ZYa2Y(=jCY)+V?0FN(dWoaU#IPSKlvM~89MhGv-#U8 zOE>YxtN(&;%O7&zeOnm0@N>Fb1qwFhGTHbJZGGeTDj%XWN2jN~7dco(yz2{^yA9Ud z|5fsZPP*zl2vt;(ofANEV)jJy$24F0gt>xe*jekR?ZO*Oj4M>$^C+I#Rz?QG_=>#r zfALd>wJbK@{|)@9e%jhc$jmJxHg=wYq?h92a^#6yT)udbtWCQq&kLf6_A{Tn)j;=f z3%u?xf!FqBtWJgcYr1R`Mj4K5c zd**0qc#py1EVe%M1lG`Tx~}@zc(9sq%LRG{T2LyUrM4!M-sT1pN*&qiZ7zNI8qtic z)Nb8Mvi}Sn(-r}b%*d?|>1r7wRCSm&1yMR1qpUqpi!c{qbS$5Z4<91mXy?_R{0wFN zH`%_ugrW2AFfr~YlsQN9hd*M_$f2@s7h68nKDg^V@6MN4NFa>=8tDf7_VaueON z24m4%V>{w(O^o>XP*@ZY~#x(k4CbJ2H^F2udehK$XiVs`koEp~|Nto=eb#b{R z$(ad(C-%5Feks9)F^xy>$wC_%x~kQO1OnOyFTVfh4R`_kMF8zccs6quVenQ*#mg;_pw!x7$? z7N}bjz?)9+lk;)vXLKfF7Dn2jeniFZ6>$yD@lWSwxfHWV#&oVu=yc2(?A(}%aAkx) zzmXz8*ToK5=lGDyxgm`gw+HWx|9~DFXRx`Mlo%kx6Q=9hNqT2}l$KR8dF?~GSY|BPCF0AJrpPMp6^;m&`{2|Q) zGi-R|4=4+ov|X>q@U17qYNumllFX8g1Y>>NYP^7+TZ++pnj06I2<>>9btOJ}FTYNY zvW;~mHigng$Ry~x@IF&BGvw|3HYNTTJw4YEvZ^o#S_#Jj1f+hho_w8|jP+DkR}vYx z#OQ!QdEFXP!&ew?YrwVPWj3#?qVL+znaO{UYO9rhdF7uFYre(qJyi^!f0MCcFNIYu zhA+QGN6$E};(e^!zK-0G2T=e$GQ{o1Cfo6CQ@^-77r=T{N%q7%|6PWEjf0K7ZuXUBok9{a<@K0MV8J? z$5}=bUP?DVgkSHWy;r56D3hjBKc{o1hTV_7M4miE+u23}yLJ)`w{hW%H;E)Ru=U76 z;%%QXIh@V9ofQsTAB@Bp1I;bO)DT(z33?hoU~n#n%FTz7BF%IRd8y2UlW+czf#_zo zAAN|q=HtXwjohurD2`pG>AFeHo**4(KO^qlN^QBwaQ9`JIz|X)dzl;SL-A+R-}C`j zZfR8Rd=yu-ljzhi{+feSxWn9Pn5BAmH5nd-)KC+b>r>PnD5C%54{7R~qVADDq$~vO z*DjEDufuN+GCZwPx^^r1eh1|mALZQ1cbLxF&E9(+AlCUQH`_DVP#fUH_y28prCpV8WQ0ne5P37IMr5tHhJ$H>hPn4MM0-})fIR2O4oV`NuW5bion%hl_IYVW5g z&%;E^HLNvt1j8+S@Yc^rSH8^t?FHO8^CqddMyRfetH1ac#BJYW*N$Q)uYSVxbOz;{ z>~R;E&o395Xp%n$KiUipLzr$0nodyLH+H!^zjeFmjXcst+X z!lm<69s4tOtgoiy>`xdnc2ScXqxr;-8K2Y0t9zbo2I(Ik!dJYFf(&u-%<3T6m)^s& zGwre%xA-$lC;-3e_5X?jAgt<>efNsO(x1%*NWE>nCWtmP&d{|*xR5x1khh`QrlBuE z3oOzAWJN(yWVH0Wg`X|_CrXlo4lta2-0r@cmg%UrD;Unu8J1;Vhv4V|INAV~X{)%) zlHKWbDK65QN?O+z3K6m-U?8HVQ-EN@qLvgkEYq^Z2v>6dtQE>XOO++(`KXd)tJ^z@ z^-0mft$0YQI#aV@48tTlD-)Ll@#rjOp~``K_A)U($;j|1L#YuA(?C@+UDs6%T}Ki{ zT;2d#ZXc2;Qdn3*d3iMjg{7Q3cb3l1cG4*o({kt}nu?~Wq*VjWupFyHTd2=8ZAiT! zQtY0l001BWNklDp6v4uhEM!?ilmy3K zQp7L}bltJ}Gc8*XP_ZFIhGC#Ms1j=)l_ChZ9h!&B<-+Ur;`0Y^DKc1w?P?%N2-qB? zc^bRT{kJd-N8HaaNvBlQR0=E$T~(cg-$Y;F|C@*+Ac`2KK`N0XomMeT3r*EAB^zZU zBiZy0Yk}CZfNanm0m%74aJRMpt15{riw6HS=m22_bZ}98c+nPT89Lj#lNvdXxKZ-f zaqy9^<2iGZ?w`854o4q$nz zDB1Bno;;kv&5Ls+`%>(D>`}6ZPH}d!7cDhH=g=71`lIaJxs`&@R;-BzuHNV%y}JaD z%e5%-sAQ0L&!6(}{ygI2ZqlPaWBTG{e8t_!>nhpu;5}3Z61dXSvnXQ7gog*(i zL0w%5!>29+_wm$o_fnkgV*0|TjPLnfjvWpX&K~5=lf9_A1O&jcFi4_WASgc8?0ACW z_4Z-C@1ly1g5=F&=aauf$!LmA#HL5SP05Y~fx@h1s13Vt`Y|9>&RpvSlGZlX zWruKyiw+v-Flo1UsD0pZ_O9_T?4ID_#X%y&Q&>gC zi^XTrT5`2P_WkDb>?+O0$a$H6{K-WIQ}+W9$~wj~FWrMQ(TgzD%j94?!^#9>?n<^D ze2}eW3cd8x&^*jso(I$NQ1{i}VE>j)C_`ru2_q>XcI>X?>UEXf8#C#A{qOPk?&XnZ zwvnaA$S|fjf3u!jJ^PtTmr?t`cQ~{)$ixkSbEkT3yU>MhfR{C!)^MdMi=A7l2u7z6 ztN{D}hyR&fewD_byn?^r8$9>qCM10gK~I_!7aHjuKZ->e>+A04@RM8VIWbF8aIyW+ z!>seP@!`ZtR6|=R=pzWMKln1|ZvP`~Q%|wY>|)4rv0-O6{pYTeSN;-DKDr4>E61ax zx!7@o!Rd8?&%r+lfEVyMCjg7=`~QR|@7+kIZxIP)8gsNYcagdOFFAIwn8Zv0qH%#p zDgi<^)$0!Pz*BokwVCKAZYf;B$ITx%2Kp&q=O*Rl2fy_EXmi1A4}d#8v7vKHc0 z@$UOrBMS7N7`2-mrbzXkV}$ayqvtLclal}!0{3po;om))Nynvee)wgSp*fY@w7qBT zU7yMC-JeHwR)V%OQIJ3hWb<<2EPpnradpU`v^9m-EAha#OiH8}FRu6EF9}fNGkE=r z8Kw=Bv4Iqm!)eOOg8b3Zd`iZ{{8hs&Ggg3O85+YgXYni|IW{%I9ePjW4x(wP?d-eVLD1{s=uQtsojR2@UNj3_E1=pIkda$JPMJ(kx{dxJ5AoS) zG;Nmj>?ortmAu+qe6!sk9OB8Z+)GJr2ALzD@lkUd31L5$XrU$M7;3&sPVoyo_SiPW zND)C-E7Pipj+@GTd)WWT5pu%?oJxMqL~5EUvxE$3DFPtKf#3cryK*zw5_o|hy?T`q z{V4gHzQV3`K{i(V8EFd=K*tm_$j&Z8zS+f0-xPlR7U9_(YC|DL`o}RgJjl)+TgVS? z!5F{9)us;AJ;k^cWsyoQWRbc3k9p=;DN{WPQ*XV;C%);@Zy6!_Tp) z%Ew@Enlon&MAO35!K(T#9(!mX*&e2=!|CW}{2z8o?Wj(~#{>PWe)YCNe zWnh^W$+=<1JO%9h%Cqb)l9>%@n4f&fOxpl%TvXim8221~gv{yd4BQw%lmcwnR7PvF zhiw~*$XWXm*E|1-_Ngb>R8c{0Pd|n0D#(pb(J7R%dB+1B zcwi%uYtyJ-PLrBTQ?>0`sfYpAUB(>~!PJv&Ki*2SiW53*<9HZszcy!+!H zkOC}6cwipZElBnPRAdkN8=qrWO^8iv{ET*l2nafQT4xz!zzJb`B7&)07+@x8J9~U*q8RI@$+Qtlw9Q(mKQV$P`6uOUdZC z$&hF*0Chrp9%tXtBa~%M^Y%Y{pV846zM)S@ho0l>&+a4Ol_~X1@Y+XRh}Ilwz%5AR zuiZmYNiDOgdr4D#(a*(NqEk_M@6(jE{|&7-&%pYB%l+%~NwvRA%&6nZ-+PoQ!J;br zxB1}j{x5D{ouSeSU?Dl{*R_1_5&$d3P;?L0I-|EbG^I z|Nk{F`R)htU;k$SNe~b*F^t7-rq}Nyo`~5R0H(PJb1)3BBt*$hwrm)^V=iJ@7`l#O zr<4m^DNzux9LqBsKP@4eEW)P+6CK^*a@a|fshfzBXB$U(J19D+>^5bR=&B6(00#qQEO z{QX2ybqYpq5G5p8L6QN%#IOuxK}M1#B*mU1^Ida)z`r17rt5ZqS6tG9m7Zal2!e>J zYpAM*%j0Z9*(Tz_1KV!!8i1sWjpf#isE*hG*rhK!S3={mhFIGI_puurX?)30lXW^=f6f}^j9bQcmM1= z_`s_Q%r955pO27<@GNO>0S90FZ61(K=4Ph2dFDN?Uwws(9e==}YEoLA?W}JR+2zGz z23-f2*G*<+7N7$G0zNOn47*5anf91V7Q}D-l8;*7vUN-h1H1|JJM0W4GD|bMG6h_v)h{%+0*i1+F zb*5&!m>7uQ-gqCrfNz284qysEc80T@L}XV0h}y-pi58mQ_@8K%1T53UlsAB(VzBJo zvjFjf{Z#tB$RhT=qC1*8r5|IVUGKvoilI z4atR6xe*^0ah9NoM2X4f)0}9pUtE(VHJGY-$GDdt`U+(oe@({+|B)8mLMk}Mq35fY z%_aj#dt@@QT;#eGq5(HWK7p}0gK*j&i#;2I6y>-O&BU@J*{+L> zBc0+w2C1} zJhI8RBz}ryc)aW>m$*5q@xyboqz%|uC6QaD*dmmXH2?7ND2iy$kHRbgQC~db=s;Sx z7H@o2tf`2{EfW+36j8(_f|Sw;Cv+l;OtweDE4j#1B-|o^!p`j;a>F`T2Vz|AvCu4m z=d%OshdZRmfiXtTPN-8PI=_fYcLYFp+R#HT$B!`J+h&8>+hb?a`>@$LIai0+u zhE^h{I(H$-GR!5pj)J;Z*%37^Q6?I9Z!Ge~|JmTWG7Vr?t<^%y^j4wyosQ1wcG9iyHS) zEN0p9Tau9k@eYe=u-(HJxc=cmnm+z(8YKn6)X`lP6x_w#M9!^Z&HBAWE`Q0XfA|pH zDx>`H%M_N%fJE!h{*+GV&}Arod=V9j>~L=wc2a4YmhJepbX>@yuqc~ghKyj$r-W&S z2InvfbC8_#wCoN7B5rR5JGXD;(v838-K!#^zmB^5pQ5soCFee2nWK_j_X)A@$RUQO z1=c=TjoYg*Ix+%cE%^&)Mj5wkky7;~4J~`m5-f9B>V_UCtfldmX5tRG!GbmSAEOe9 zL|-#KpZuRRe+;5vq3Mw2#3z@}P4@cyr30|AE`_CH0(^J@P-Z!I?8ebqGGQF3&qqPTctmMCBuIwmHfXv3#X%UpnQSk@81X&UBc)hsXF6O~3hH0Q_X%H-&HI8KpNRp%1fQhAprs)*q7xU<` zCooNe_Kq&bCZ?I0p26dB6P=5bNTx9?6H$`Da=O{NEpC@q)3{tRlGA0kEOWt*PdDr? zzHSMaju@U`iin7a0ya8B6diX7Tem=#?Sg-X$g45d+ebvqz&+W(SYLA4et{${ODgQsnQO^*znH-4E``GV z&r|nUh}n*7T&b_8ukR{mO)XoW`L`UBOa^Y8p|So9T{BgvmVMC9D)iDD86&CJ;1Lay zkuZkjA;WhUi5M%5>dm6|*!S4ykr=sofyVjlvb^v-4Tm4SEW6;qD&do?LR|(Pi(ofaqA1nq&Wg zhl)H5w%*|UJ3pr3{4VOAD_Mw1GT>1S=E5ptQI&~^&TI;*gEHAM=l)G+9Nr|WTX7OZ+$m^#j=)-Bk2m+HaoymxbFfhwU&2v<2 zD&WW(A6tAej<-Z;umm!yGpKTwq~(Yc2`-b8wE_OH$V9;4WP6hOz63>S3AY9LxgNfI zPZrxUOnS#s7=AAW8MdQ`Wm;&exmXM^O;pYLmFsGL-r*Zh z+-^Kay7&cheIYygNbbe6+{!wIEE32TnVOj*`4 z4ozqAcT({gT8_VmT=`o(@zt#e!`C@?>N9l9!k1S@PN|=3%_q>TGS=)bBR8bbZV3c; zeT@eX?<2<#!?#tk{Tu+kd8TUPN%I zS&IWuFacAPL6n!}QQBlXU2PZfZ-0Sfhj!wdZsfHepS&x&(Yhnu=2yf|=YA!?94C@Y zQfT?mQn5R8ImLrNuZCdk3^%^KN-!gbnhm)y*|l&6609(ZR1{S=u+*e&jlOVEGbB_4 z%TSpb9R|4yH4)~@$8RH*e~%|#+J-oCgL5Z8#khmQX@7{3O5!Qr%7foIjG36F<@66} z`Ldqy6FFGqvF)3G!p=fJYHFH}8$EUL*l zf-y!krQ`DmXsHNk1bi7XVpzva$I*11WGqZ9K1;>|P2aNjO_#!GI7TX^VYs2=%qjXj z8!*rOBQx^TJoCFpC=llO;-CLL)Q{_Fbxb%!_+iH2OVGT+kI#+AtsqMv%QhlFoL8(jO%NRvz`QM>EaP&^&iFZ^ zcaoh%2Lb{7KEE9W95)49BvK<0k73TYu2{4(nx}yXqC|FfKKXe?)Ya9oZQB+^(IS;j zp&16LblRZ+*d2Jmu@jVJ371PjmL)8~a;^m%{efjuQtX>?l4upf)SPQ{lJJFu)_$gv zWQz=1&R7YK)#H38-NbgLm|x6>Wno}DRJc7J+%C7{NU+Qr)P~mzHUx8igD_3dG=o%1 zU9hq=O%ub^9VCH)Wf{0c0ktm$r8fVXUlC^d(h4LL5xOWCS#ZO*lE?RFlL;c-M z^fqzf)Z4TVPNAENh!g}6%mkyKy+=!TC*93g>53`j@7zRoejcgtFnzZ>811;mjrx!1 z8R#Qz%=as;Rd)_y<+UvBznB`+{Z}}5{FmJB8o`(0Au}r%Su_~D{vltUI?3?VEV$`nX2ta@Ql31nWlC|`deu@ewr#N%+WBNv?$;!&W z7qlrqqOj5ndf7V{{y)FYL`gyRx)GQo(tDG()*fbNqok4%(n1auC3y%_?Ukkt^1!jd!voP&g)#d)JAsoVX8B;$<%d5Z{A>JsDsvqlU%uWjoE}9|Al$` z*;SwO;t%Gk;=BS#E;0f+_+l|eT5mEo*hX{xahh(nFqg8OI#zpPNw>AaO2d^>FMpqmsLofG0nimFX`yG$?eu#jLgR7Tl1@SorERVD@tCfH}Aph zf1QgrJLqq_&du{z$jRSHS&nqqIWDYR)AQYN3o7?Nf|9CdI+ewSJw>=YAu86cC)xWB zjki1KYHpz8S{DTcn_ASXu{>A6bVje2f%4iM27%z&1;iOsKPQOKrtO(x;f?{K@j zlg{g()70ID<@KyS{-R`4%Y-=T=^n10IZkAHgy`5Dx^Av=gZA?fR;(WokbEKhdD+A! z1{rAUWTd^3rVAg@H#~%D%txcekDO|GozwsP9^KR9WaRh=1w45D^5UFaSd%7KI%fFK zulMsx(=0tM7Zq6wA-Awl2ANNv(o5%xoW)ma?9~}?$-KDLMiD745tnH)F%jqU<}eLm z3(Evwrc6<;On+B|H%<-m{V!%YIbx8OBm{Sehf5UvvVCnY@5)~C`~?KdWFnm42j?QZ z(vf0HlqtxN@cSi-YkZWKdx*`ZIeC4WpPriJZ_h+{zh5Jgc4BZk%}0%4Qo4x`819|r zOi$uYbAp8`hk#)@B_PSonk+9h0h3>z9pgW|($A0jQcPL^IxP(m{_aYQPlgP9B?@^0 zg!~FFD^AC`Px<__UQ}?blI_t86%>(OQiPb9O(;}KSwRK?zlYq)BHS6?RW#9sB|ix$ z-XK*QYDo^h$K{)?wBI<-^{dy=1sPcoR-ikb;@};A-m8R6Q9}0mK~9ny?WFz2b%tls zXo)G3_{hu8$FGi&lKm9qSCHZMk)M@|+TG1ye>W37*ExUkE!u}>><<53!q!sb82c|h zWaZ}LpY5af$^}|()N`fz7SkyeOB7apza>F>KudutmLo_um^ zikNq_Tb5)Cwk`?AAU*wKq&1WBeGlPQFENqGq;6l)67_pwA;uVqIl==2#8hh)Qw0G8 zyOS;nb0o(*sXz5T>EtZo;V6b_tr{@RWeOBaK5E&RE}kcI)@>&?KsZ-&R=HMcDB3WF4!(M0^G%&A}NugsHLTr z)QdgtwtGB_HRB0;A|@tc9%i2AamG&*^J>R9+zxm5*s^7}T3at7rKY%vi@1U$NPq+Z zkOT-2`(4kes?2%FI(0I$>Oz#%?wEr>+|NTFndg*mOc>6hi`2D{C zQifOGl9;5Rg@Zw`n@bYVCDJpxTwi{bp^$F$=-p`=-B9A@x zGG|X7oCF1Ib9DVjD9J?SfYag;Q)QxCIUDoP!Vi~u2AD0BX9kH4=(^d(y zU;P!0FVc45Pt-;rQgk{gT2ryqmla7~awx9!DzHeoLFF+Qidc} z6qR#b6a`7FNRo)MP?f_itfMSI326xel_XXQU6d9s7D1j<_hq(`V+*U-x+E|1ng>D( zNfbqNdp$e1mP7#|BykjBO3APa|0iiYUa6|Ds+BoiT5bm^q2KGVd*@C%oepr>X8o0I znWxdj%4S02IJWKjs{5f$Z7dhML>4w!qRRq^NRouYRA>ZYkWvvvkqy!yh*gY|swS@- zXP(Ezc|uf~`l{wgYixH5QMK)p5k^R&DzK!Knne19v9(LW?{#7-6hNLARR@a#tqZg+ z(PfU-IgvETSW@J6-lZ`_Qc_5PmI^7U&>54UN?F=AmSDWLU6x~`tb#FrJFjc$6t676 z{n?A|x=PPwP{nKCHFMoveCqxcUVG_zUir&6tei)EuKVIQxplEm@;m=CAFuv%UjOdD z#E6vHo4&?Qv}9P`UL{lOIbZ}>W+;`_Y!*eeE#$M$i{T$2|t$XO2D@l`%`=T6d#_i)#xOT78Yf8ewcbap(z z-M8G!;OfsgzdS>yo7r}lvpZNaeU!4#x^4LodDosy>GT5IcNKJ#lyYGQdTxq^?KgA7 z{0UAx^=~+dAlY^|w;#Blsr6Y7zwiXF{N-yPB-!4tvwwCQa@Rgq`YB5{{w8<5{~pJl z{$n09iq6cP-0_t!un=A5;^Gd>OpGxQWdmk*E)y^8V8=|t+DAX(jYt1AZwNuU^ULgC z*g-aF0zh|enVnguQtJ`(%hwTS5>!NIW{HKR0SnugiEiJ^8%Mv-GbaXg`!g)hU*Y_v z6P#b)$`DCrT^LyC7Q*hy#f6G%QW%|&Ux##mYvZ&U$|4Wy6 z?y1Lk`hA1wALOnF9^}y8-ULNrV0v*E!m8OY((f7Q0s0 z$T(wa`yS}bvFp$x_pV;$Cx7}TH-7Ug-0|VZ9DU|bI1BU^4|2;xU*XVvN$2xl;Q1$h!b?ATp16~-{m@PH z2U#WYRS8f!#ljv)5{1mB*}iu_)3HFPn4R~2otsXd=HwH9#QUTSc72*#KX)JVkZB)|}H-S!UWrXmt$1^dvaXSnU^CR4qXd-tZu zvS81FX+C>mh4)r8qb%a~Loqsykb@pyyG^iGT;Zh^4ZWDJ+&#;~`!f2m;=1b-lDCE^ z8S}_KM}~~GQFhMG@=xy`^2aA~esX+>lrg_`%Yd)mHple(8pF{=p8lxd7%?|o-{BwL zH^Z)NhR-aob6Smf>!T5)dwP6h+3-qfc>3d<-(T!9-+UxPzU0-sS8wM<~8J!;byZR*6eVI+$l^XGAx0 z$l9Zn{`?$K(k1Q9ux&A;*Rf|wI#^5n6ZhS}#?OELG*5o_X`=3KcJ4jIwn0KP z+{V(L422=-4cK+tee793%C1`v(Gie$rr5SH&(z{>wl6-+`m;ab&7Xb?nand-I>7ww zfZo1?+}Scj=cU;o;dQ?NTpc*+*g^}et<83^>=yvr$6DbZyvH$L`vY;+-vAB%XBb>xIb$@LHG99q6 zdoP33w)IpCH}c3Mzsb*D`ZIp?jv?yJannQph&y*raqj-lbNWX=;LXR6qh!qP9Xpun zL>{_j->1L9#Vg<8omalc8KAr8D?E7X4(NT2m8X8nnPs{}2+SU!rZS`T?7Qvr@d+U?>@1iVA^Q&a?#y9wbKllS4 zfBbQ@hRxxSVV+wi`Jg=Bj2*Lz{Eu;4wQ)eP)Cd(>VzbJLu`Txs&<3FtQd$OcsciOB z8tYl>vOuM&?WbPqn#o^Rr3q=0kR_>Y^4PKMT+&CMaXE*Ryx zt!HGs(PiDTP*rm_ZZ)VYqBS8!6vvW(l{K{dz{qO$+hhKdSX$*6NDeEi<#l=fk`RMEgkQU!p z7#I$7id>_lq~DF{b~B2RWsEO$L7K)4`W^bcgkCSB%r(PNL7tbKzqrCj=U2G2p0iOH zL?lS0q!S5tFU_(vKR`%0{qY4ZURj~r>oYquVAswCe&=_-!I!@DB|5z+5OIaj(4a?b zj)s)R(CPFjwT-$;;RI1CQVd)3Hsa~0pXN{h^gEn-{|pzetaA4JRaVx96ork&7-O^W zNgPv_+IB05VlV;~NtBE+RT;-9FHlhiQEX!bku7~llZ33(!3di{%hH52Nr+-)nKC0) zXZ52v1u1K?KTBL0qv9Bq*!G80(=*J>OtZK!%buO{EKGOkCyFeRBtlNO0F0(EhRss5 zmK&~a7*2k8p7R%0IrG68E}Z+AD;LkRarFX94;ge5q|scsaFMg;F0i&SVsn_YIT}%p zaxm0Hfn&r>S>|Y?ZNLnOWYzjnm*}$KH-6*GeE++D_G>%#F8hC;=Zr=phQlGNtE(hQ z!oG3g)-_(`=q#ALcKi*-&vpiAL$4333$dv7W-%PGvbKp95#2#XR+T;2Yv-(788Q+P zvs0NqBd(bQ2;az3TyN zuB@?E2nMrV+p6Z8^9)5kWNm$jkuklh-m`Umu5~CG+pS_a%qgUu3saOB0i!GDIs5vL zdG?i@TYl@S+`NCut08sAUJQo}3qjgXYi4F!k~U&v(~x8dS*)7R!4~swj8kONvL3Z8 zXhxeOHb;fH00!EOrq?*8E%Z&M9}S}#C5%&W;7fz%mrzdPUOS16hE8x zuUcz1R@T`xior~$YE#G7EJ9oSUT<9C^an@y(ZBi=7Jl#lbBo{N%jmfBUcY^Wd(Ggo2Hg5xJ3crZZxo9If;IOHcFi$wj{Y z_iqn$!WR0PYn>YoR=oOImxj&F91%ryQg!XMa&=p9?YhsnupA+y(TEK#=yg+MsVTIn zIx=mgmkQQbopZ*8(75+*^i`j{&cAnrw~n2lyW;u`AAR^1kN)8wG4pr+4}SOFnU?)CL3k>qkXtpf^pECEBqS%Hbwg*K(4<6#ZIp*wXc30cn;HUt=vd*GH5BvUFnemBUT0jG#Zr zh>c;Gmll<5LRt9*y2)%UM-AIaB&cNZ7uwXvj~}NjOZxpjNs^ExiS<`1RC@HQ!g$Aj zSC&?(m4&9%#`Y>NwauCfIiW4A*p`vX3D%fe_-#g9SHyv)o(Rj8VDBXbL{Usx)lS#> zOd;#madx6)6)`b2YkN`TwgrN;*=SqWZ*10DMF^uYMS+TB)hbY7lqD}3*L(|U;oi0x zpr9;l|M+oDcg1#BIbIbPfr_fa;)xQ7q8LQANstuAR$;ELZP4lTx#{LxS>ITr(3-LU zUF57@y~0g59^$|M$KT|qk3Y$ikN=cnb7nNSpl!W1ZJ$rK}{7;SD+6eY2;C;&Zfxj2T!8*Ct`gyC?65E2#H zt`1sHI3r49%SbFQfn9frB$BrE;k0|q@4K`JzBDzAL*fNNiyvQkxZGQ>a zZW_9@^C}eoe|ptAP>kt8C+{|Nql1r{{N3bGR%yaanoQaWx;ofI45p(=`%%Z$3s?vo zhF0fBBBIk*o`dMcV?{)Nejk~FD9f0_=Lt13qSKAY#x-+I&d`R9foo*esRySwya1_U z2Gen^cEbAS!8zJEyJ}n61}LZFw1&1d>@G1W-!P8DVFD{q zDn(XhODwsG0#R`4t(ST6<@d-AeTCg~a}z_~;P=l3;w&4(+3ILHLK4LpQwfbsLAY-9 zG=vK&obr?!e;}Oal*DO9oVNKpF1XVrij9e*>i0sB^)k|648~N~P4LZtbw}_NNqr?jQ^1apItfz&Pr3Ts{nG0}$iPq?-vecx{Krokb=SX<@*fPGsi` z_j4@<95HkA(>3DI)k6SjEZH*`v8$(0N$fkR4KWKyC&s0QHBszjLn#%LslbM;?yKUM zUL4o!Yk*5f&-2|khwPlq_~w1H#A<@Rbajdm0+nP8QsWns+eIenDq`d8-fGGs8P($y z2q!3EYP(IibK}K(BKm2HQR_VY<|Tgenjy|2?z(N3L(>s4U_?Y`%IeASiW)6Yomp;u z1FnBvviR{L5w`&J4%y|j7OIJ(xeV?CYVcC2y7AW7165-h675F0T< zZ@>|qe$;dZ#j~06p<9< z7fqa`HS3l&$P2e-QMaI_fp_r)wS0Z6x#@4^~qTM2}M@7C!Zh+{8+2wm^r@P z81-v}?=Kl3?xf7%AGBM={#w5pP)W=ni9Noxv2O47v)bu5<8lZgh_j5D@n@Ap${K^) zxUmqB^*dyJ*AA&BMrF*-7*AHm-PA>eR+LiOz=H7`rny^mENe+eV=n!iXCA%8Y<7_g zR}42id?N`Uq@+6-&<*6xGdkRDJ1*GM)@>X+!@K++5MGYp~}p`hc5nxrwaP zM@UIo8j4&~XN@ExmIqMtij7B4j)CD^*<}ATN_yP(<-dafPmDQlzKl~J>0GmVmT`#+j+r-Zr{o${6GPj0PQE)&BA6%P z7~c&Owc>CHt0%WD-^6X*8(7%CgSqM0GwM8c2osJgbOG=jDlap@q#cjDh7SI{&aS!g zE*xub!bUuKNY~kH8&^|)@z>Ka7J@hGF*gtjEtY|37Q6=6_IE(@Sq0Jb4nFm{KVa^L z>sj)y;kWOsT`^ZqO$&nO7w8({I1GZIvyKt|yfCq>Cj2dd7ZFas<3M?lt?KK}4SV|Z z#!-%1k5A-Yr5Ve&-`!aMV3F&HTALFedfk)r#`tGO>l*v(AUp@EBIxwh!6bB88}gHJ z8{^jZj?cb!^pLmy4&kL2zBaD+X_(q`2eO6vhkl>w>khHK z?Mg1Vq1GwxnI@by^5t5D+zxdKrSUru1&bsck`rG)8^_rbex!(|ZuC@ttziT10)uB8 z)TfhZqNZH#kI7jb1~5#p(H&jbay~Xlo!j~~yYlKp&c<`o*?AA2`}%I)d*@xQt}Srz zb9eKp{evd@1OHj;eS~P}!O2<&YdSuw8?5<`-5A(AZuD5V2uwfA(MTM4V;M6o2pk)x zX_toWu-)&4qXVxM0r+KX@+~<4KItnjOGc$eRSfs_97s_y{ad#4dIFh5@njKY=!-t(RA}r+RG&kKrL@QR``27EtjcC`q9;!`z@Y z4C@;suB@(e?A?>R_4Ye#-@ZT;E21c-+Z~|d2s0`f6(#*apRa!78*Hp^^3wCq+VX`o zVcX1%b@{YG7|Cc@*sz?mM0Q$hWECta%Mw*}JjjcJ(P(4|0V9D?l44jADeC}C&K@gx zWohfwBPmf*5GhFdm$xJBqc2~itjV!{ZIGiCgKFcu@3S>DUc@Itk{1{t9S zD#So%X_`Bh9A~qsQXIJepL?mT*Ip1bX$um#HeP5Lo5=_5Wfar%13ooB@X#K{hk}8d z>313Y>%AfZ9W6X%DBJ+2nHbq9nX4RU@*7D&D)kdU1Oa2o$zvrPz!o!9bZ)n=j;-QbinRCgGQN+34=hm zx;#9q{qw1@pM6XfvcJG>pI&H0v>MY1Eu}oo(jZU4dFPpbCQjDOKl>Uf-L}m!CSML6 zR4<5SoVVOQ_r5-__d<|P77e?@nLYQJjGuI9K1Uej4GsYC1GeMwgf>RFFvef|>80)5 zzPP($!a$tx`CgnONH}MfukwA= zLVeFRQx?4IH+IV3pxqroAYi|=!CsNWnZiO%tM)>crR$j$-~a$107*naR9#upvvFHI zVQcyAOWFW{E&QusxIo41F2;t0)?h47N>u&1v@Y%2+EE7DAR|#nPmQVCuL+1FMJyvC zX(8ysXxq=bg5@X5_N9-M1SKd&!-_rLPQQ{0VNBKkQ`eAgA)>nWSyT>|l*(qiUp45ga*ooL;ZXowwi2^y~m31iP2_F}H0AnZPL5tgUad zZDEP8e*GJq{_sOSI(34XZkO5Vfz6taN=!M#L^k-LE9X)hP1ViN23dqfaA;j(bYU~j zkwBL=+nr{%Mt*#pmZh%iBBhYXs-z-PHtQ~=Aj=XuSq4?sd~C#w`&cJQS_OZq-q1!^ z*89qNwwXYiDVI``CaDctRM7u%D?Qu(#@2c!iLF;OWr;L~yeNnhi%J-chBn)+MD66% z_1fcks1&l0vg+g0d{@xfr)YR4O9P(yDYo+Ypqj4sYYI|2zNl z(TF@BRYu``-JUzr0#?4A2xM zPA&ad&r3%wjr()|=YM@tgn<{8ca6N-dKYa;GW_hYXuKEt8YZ}xKQ!SR8)NG({H^ez z`;*L!d$2nPrE4?>2X)BoF2anK5T0S(rm98Dup3s8a6{p=IKXXlU%@}OYCmI|X$H|| zjKCy27G~hQvA8aBa}B+FxYmXUy#il0{3v^vUI~H=<7{+T*Bd%REhi!#yia(~K6VmZ zgH5#6EPA(avl4B$tC@m43(Gs#4S}KBOqkYjv_=xh<(qKiGh9pWqQ1xN&8}yxw;0X@ zOXEenTJnJYuf6`zE?gS-dj6BOa8rbae1JYN!Cp5`W>19c(#$U6828>-Tm%v=l?U~l z`39nI90sxtL5<7Ua&seOqRF`uEMr6N8#=^?M2isCLi1Ygv(;#&Hl%@rL`LpjKY`oKdpw~)C;klxXSUeMKu zFp}-etMSjphT?JBkQ)CU9wDITz_jSLKp)jq=v%E@t3X1d28}Q|(NZfF>hCrfV9VNu zy0U$Lv<$UnuI&yc&+IW7T!JQB9JPOe;0ZOXvfrXF14|J3>uj7DyP*&Mk+iS`W6MI!Ofl>{VCbanw z%`?xNR}-Aa;@3*xN6@xmKKV;YMI1%8Pq8r=t?Out&HUR8uPMvQ`EVxIgFy+#%sn-9 zm8!q_m=j>!D4=S|XBz{U%DJ@!gD6q;*PUb~Vx{QBmZm1Eh`@v?5k?b9ff7&{NGc}y z(Wb389}YJe6_zdEmJ0}?ae$&)gt96lnAHCpj8I4+Y_I1kbFIftrjTR2SLK#j=J{b> zvc6I9@rA3rapV}7l3lx&NV6CrWBP+x;5T_^^7G zQEodv*y~wCSpxlDpZ;KAv)t_D~x=phEMM<8Q z6h&!UR{~iQqc=AxiX2^z(B+V_7@{K3!yJiWs@tQ}>C($0j2=nz{z7Gky~|`9X$Av?2i}&^yy=kOiOhvW}AjxUPK-A@jzS zPd5!PSqD#y90SlGnrI47j$IiREixS#dcqmY#Du6FJCBjKUa!Eoab(E^-b!7T<;k>P z*XTo!1LNB(nhu^}oN02$>t(kHvSb9At1#i@lwx?99CwT~_qy0R*yKH%Xc}hYJ!71J zLA|CTG?rbx6*#<&i%#IKel$P?hz;YRh#ImT!f+di3A~`mSZ6o)6aHS@!ud4e55fd~ zmy#EnJ~H$kap@B|=6O z$)9!jEYXChdvr=^Gu%QOFtT>Cq_mb~RPhMtazwXlTT`uXY#;0|3StA|!E=02QHP9ay0b-WY9z3d(`?X$+%MvoXvmN?ozwCq&AY zD@;vI(d%`qg)Xc9>=qqi`|fG`Rj8`|-=Lz1an|2dge_xbIp__Tnwla@GtwkMNoAiy z8{3Cfh>GLD%3%~mh*Besu;mF-RVDDEmZMlGq=FKOu7Ut6QZ-|#kfI_KZ*mJAcVn9h=;s;65g9SpeNcQ=#9i+Tbft2LIFKH)=Zq# z#$hhnBJje?Xg3{ee53&r^g^(}6FD|bv`82{5_;FG3j>H08y$eOyim;mbJU z8cv1rNz1&?1!EDd^D5f2!wp#z?GBCb9gNn@n`nhcc!sPnZnV|?wHtU4jkRqZTVswy zYZl+*qzLw$2%Llouy?3p;e9tItOU1R!VGEjHwB38F>$IQ@+;+3I{IsHI zTCN>BC&A~0GY>-0&M~nSVxdh38qq`)iQo+Q1!tCz@Nfb|Oahsq6WPd$2bgWshDsUh zEaN*f!f|kft7lA8*KVn29VgiYx{8)^eGxL#g>!9ONKvS(L~|~~nvPca3ifKKpV$In z(RL1sYn(SV2SRWGXa9?qGqe>EVA^z1po^I}>|>H>cdo`kII-pV*sfPw<+O3G1p714 zsUmcaU4>>u<32)&Yoa1V8!Aa`@fc!D-Q{Re*;NP&`q2#FC;n4+q|HZ^2lXiJ_au=V@)RvJv{ z=m}X9{h`Z=0uc6h?}wQEu7TkqDvc zKJ|9I0Ea+$zm+4Xv2g9OKndGBb~Gy3*ch?0vd+flkgOAP<;rDFfABtosX4OlG*U*y zv0{|x3})td_=~^6U#zUKe)$Sf9Mj35JF)?cQC?tBC|wcLsS4s>IlQJSYZx2paT1fJ zDXVMiNNHQt2rSY<18J6_l%~*NghUDpeHRGgC}L2xo6x$XC@m4B5Rexm1d=39h+@mg zFhN4NNdbfHjbND@(kvs66LeWt$c{-}@i=f%6eE#m@LZgN4NMI^{jPcyn`|nqLeUg5p;pao$Vj8vnG?IpsY+6eOQ@FnmG`Sn`_iC(- zV`~}Dv36@d{Zk$M0=zKtE+)p4YsiH3{w|>mG?~C#YtERU2&O;jQN+ zdm;#7rluv^=O=o?xpc>1e7=vcC4&hqQq$ZkW0Z#RJzL>qj{PYMV7Jcw^3_$&UtB{B zX4p2B+S0csp0|F+Vsn)bUwfAGy?eRqmMIz;T-U#C$T@*iL<6-kb_z^$Unkc*dd zI(^&b>*~js$h&=JyOOtm^dDKj@oU_*w_iI)M$nFY3a>3pdmXalzupRECXQRT?2OIJ4m&WFgwb znM+@82>4EdY_x0F2;+lmLIUF&edi}p8xe=bc&W)^Cq}ayxG-CuP3`OG@BN1OJE&`y zSE!*Yypj)SD(4Vo;&v-AOlcGGs2I@}R|125?s-=SguNnV{KrklldlZZI7ZMDX|-D4@ql7wz%v$y?Dmrj-u z3F(-U_J0ix8Be%#@QsZQtxF5Ru4=+{k=v|n<;YJQ8>cah?JYzcOR_AX*X!2gXjz(& zW^t9VkBL;o#>OVPEGh@gb`BWjBl6M6I=TXiGPjPGl$6Gz9>z!psm92J!b0uq7J*|! z$r9dCa}9 zA&DZ3{K)gXDj}F;*rb#wsnCV4N$+%NN%@i_s_O4e#UEg~7i3LZ7+L3hj55*XgtW$3 zz5`Q^BeJrdAB!rnXcLX8$sR4|Lsjx2Z7?LNIwVZkR;w*n>q-0f1}KcC(6&^=%7HCi zK-gA@8yiF0VL}L$h-~XhG44u16->zKWfA*!Z|A_C?aT}^B4rr{l&VTsq^#iRTNn!e znO<8VjYJD;dzb(aPLy0!@clYQX#6^^adFQ0eIdl;y~^nl4!gJ|cbr6Qg~9pkICfk8 zbFW|j7n8A!?^R`K>M_)RTYcV4Sn-?pbFMG^uXU}RJFf9FjmP0#)48@YmqHLcgOlZU zYxl?FH^O-y>S(t=X5rta(do)a^f2Sjsj$73?WzfQOo!E=q}zn_ZODai_LzHZ ze-Di7e?8g9*`L8ZF~J(L#TbmA9rxzfX`edTAFg~+BhBhHaIfpKc6;(4eAao+wGUq7 z^}qgiy!`fYR!7EP16LNSG3$JjGjG4d(NpW~d)Vb@8;`Y?KjFzf?wSkX)#`h)<;byn zehLFujy=kY&mQIKO2L&AukiZO3*@EoP+YF#?da8s zoH;14_PyioTUzv2^USe(#!TeLLD6`+TZnd<6rynt0{LszN8Z@NGe9_JUvS@W4or*8 zxnmF4*E?$o&M4uX=Me65>aV!^7P0kQ;m4PJIS6%<2-bn-c*FNh%h@7CV=f70J)8sY ze4L!MqDBb1&uS)P7NO23(91N>UYzR^o_WFZ2!HMC`X8IG8oIo|V%z-BXB$OiryQ1542WG+A%HTFo$x!G7Nmn;YfvPjRZPS;R zj1&wNtgfze;rvB<-IS@R9-G4rP8>hV^z;mK3p+ttqP?PoEKa!N-urm-@avp=|0HP? z)5#(>hcSgNDXaf(l*u9ys37ez0zpv}wg$bl4t1;)X{?AOh(<()G$C%mUf&{R$~DpEx}_Hi8^SM zBq>G+OEg%OKh(}y^?w}LslPVWr3XVs2ulK}t*n$qZUYQPSKI(aHCGV=yOt7zk}%41 zR>~Y{46zbKN-;OxLmgOVb2wyU;{)=|+#*{L6;j5wg0%bUZz`7ftG`?nl3V{aX}RJj z{#};&_Q-x)_7xAVPvxi^4^HSZw>l{V6L?r*{jgJWC+cnwKJw5s$n1hlt}v~&ieBBd zQx4IF>~GYedUf^qa}+X*2`2LqLVxQ-KtNgBh@3NlVmGp0F4qG1O!@A*5Y%AO%U*U!1!_-mV!(+IUb5e1PC4B)-kwKW14gAj$8P{ z{`k#jc=gy7dNUo?KRU)pEwFgQXSn0G1yniW!uxM?_@x(ETU$Z(53uKs&$4r{!CQx) zl+2x(%sy8*KI7#794*14TjQi<;?30H`f^4@OSvk-ODIZ z@Xpge=IxWmQN2UV%w{CBH*)*!+t@gNnjg+SL!<xE&-sX*$o@aHKFth*D9NIt2*;k(At(V{6)WuakK5BUP zjicY$>NW)9tPH+z>9C*OFN^H)|_yLu9_bSu~I*v1Ekf5N$sKZdD0 zx#_d_v1cwrhV{F`<)WZH!-)HP+OwOUE`mlM1Gm0Cus2$fNiI^~_-L&r5{Z`Ui*|&8 zb3TVm_TjL6Kvhfj+2!qM=nwaN@%ckUT~6#=r=gVvjTSffB&{A&tHG@^`5SL7Le2t& zKSjbnGaKiIFwOD_w$j%wGQ-!cF0!wcd&Iq#*dklssM{CbS%wIBYXUoFtNHO*`f0BU zBAlx>`z4fnue`y~BnV|f$Q#Pxmb^;7o#JOR0`#L(1|&TDNo*|_B1F_poRFY*UsPDbWQCHw#DeyTvo#hqXecWV0V&1=ae}fm zRYb?O0yJgmNTsyp2ikTexN>!s3l}ewmm{VI9X5w+tgT*RYI=sGlOUsnQcKp?HyKRN z@s+QAokxH0UCw-PvV!u*49BGiRj+%2K+A}-DA5L6XRb?(iHIZ=d2ZVQN(d%24S=& zFLH}=Q34xAz?PwuB?8OuFfy7*K_ms6x*$nn`n>^rcQ2773C0-SJ#`whQnHzAN{YJO zp$(w??F0aR(S1ZqEq;I|_G_p;M<&#YqP+&qtu?6*D!+?Z7^V>c1U~$&2%Nk|g{4!A z9T;y7CvmGnIa1wAH4C^S+{W zokj2r?WA2aAd9V5mk3tILpqAqE*gHl>DK$GS^w-vkOxB!Ww5&As%LKgY*crXikU z?Zg|r_U1We_a3Bp|0Q1j;U?36|Lg4DF*C`)sSf7M4|y~CEX&&r$DaQIquG5ta{VT6 zJo@i=`=gZET}xbf?>U~`Sj9YeKj+?mnO9$Y5jnMwy@Lb%{K=;|eNM1v{~pf2^%zf{ zUgbCcn=dopNu2DinUqLe>%0oBe6fYB2W)quO|Q58&6aHroU_+#afF7|GOe4gZM1p`yjqWpzm`6A#g0?ObVF`~2q5R?5*03K!r;tX4f#=K8Vh^;n znqw<{En0bDXk)u?lRpy%#c7^n4MIrYK^AQ`P2=1(PDWh#HeEfZO>!K;7WPYvozh6O zY{7jag249H^An2t7QYM$tb$S$5%y+u*U>aPu!Q!DXnodSu4F%aMO$smYrXHj;v^zg zf{`xk8h$ARMV?a>maV-kO6&ZW+Sct?jn5+~DWJ}}Qyn06tx?sAPgz|3q@AD?71>&h z(Pb?}O4w2Y5vjUFKo^E0Dk-!<`M-)A1=&%ggMYn$uDX+)aG2&Kr2 z!oujwaVdpn3>zGGF96$O5up$gA|>c`yTnQ|EG#Tv8yh#*T9cOrg)Wh?L?}hC*Jm)W z90f&DV5$tg6jl2MBuYSO^14;z1o!9!ZYq`ycryS1AOJ~3K~x@qNGQ6U9{v7+D2gy< zXfxxwL|2>!!q`p>QrfJxl9DXTh-2Ftuqeu^6G0_iWl5<)$Oxe<9A2pigrF>KOGIrn zv4~O1wvIFvRKlPs@&YyPd;pYXS!dB@B@a<#168&ipa>kpi54m=?uw$cNE2hA$h9r) zC<}`ODDv9y9TWFyT~-8xvhE&`L;@uYdeflGD+mFL^Hbb^@9o5K#F1ksU_ED)>pDAE zg+2J&eEE$3rokiNmlZlKa&T)u!^7I(_e=Ng=p52vZLy!pa22p$hurX%+EE9_uM76; z%qEUfBMXjuScC_=AL(y0^|Qr6=&%QewSI2oKRAdd^JjvDj`51<{H#-Ws1aoIC&r}- z*46}lh`kJtp%GLF>j?$;2ni=k-DoA|)q1woywh+vJ^8_B5T5KKzt-N%_O~>_uCwT# zD2kSz9By#L1n3Q#*RD$kLmmSh9AO(uCY)>2L`ArDyl#fy%La-Tqu2OM57Q|wqrdxY zE}mPbhh(aEhzGy+CDMyWdGWC)xpd+TMtr7pdXUgX7> z-e%>-X^wnwmOWqnCJ)>&!^(*%e*XBAoP7B$=A!r6C=-@$xQ|`89^~{ngIar^_uhSj z?3OQZ*8`uXSKPo~{o%jhjknHo!+f78wl>=E!U-;3zQX>UpW?PdG28c?U>L1(_Py7* zoTS|TrLVJpW}U-7{thQjo##_G?PA+JEMLE$8*iTD>gzwk9K3@AOFb@(E|C`{pef7> zb9a7&NABIurT05L_E$gWt#|gae*6O4?)*I-xNQd)k3{_Z$>ZqZDp#(aW~JzG-GO`A zd)t0KII)S!;z`SC1jrmY+RsDZ_#z8xh2-4-!^zi=ael$@*87)P{LFvH12@lc_VADR z`O8Q7=+q&!UPUb4!W|EOh1sjG@U!>UIrPX^x&7v4HurS+{&ybZ=(&fO+hftGuHF^i z*%*&*3@dp5Z2lZ5Xd)=T{B@ zd{TqG?WL3?NfVSwi1M7WD2W7=2uh(SC_#dXVi2~qT9PCvr5FxJP);(kH6+@MH$#;j z778U4T53yNSF!Hvd{jZKEet$OQp{+BqAa}mEGvRPt*aJs+8~n{Q<15Os*inXirSfs zqL@-|*gAPrwb7Fk$5#l5gw3SOs;0awOOhl;kg&0~UIheVN>ef#76@$pIa*aU<2INv zHoPqnoJMQKs4N&2B~hF*JvECIu)4Csh4W`?Sb2A9i8vh)3xz2SCW^S}jyrk(^eJBW z*;5E17>x?@aucOM8%beofJRh-i=wct@uCU|p`w^1QWQcUq#;dX;v|C6$TCJ$bE+|D zW31C1DG-uQr$g55fs81MVR$A&Cj{=BiwA1D^?*}IqmB)Io5q! zP_$(N@r~JrthC5Zcx|y&mZ*(A-uqd!zvnSmH*qumeiB<`sc3#aTvO9D4!0artAPzv z=g+oJ-NmjwL(WZ4@$SbZIv+7wT}5|hnAv?3dk@Sr{NPP8p5yYy8cW%LB#IGJ^Gx?U z#N$>tqf4B+vcmkA?qYtrgCygDzw-}SAC;W=AST;$2fG)iSlQETLr1`jvBhd}W_a#vML z9?nD8>8f+q&Xt!hzsvvs|626~S1w-SRvYMH=Wl(Jmwx4c<@#?ay3H-lc2CjWy^G}` zDgiMyrm7ILX5Cb5T@Tm3pZ7j-l?&^NlM5C8wY!|ZdIM{osB6_;25xbd3<9dF(mf zd-W>c{-ytkpZ}c`nkzrR2R`;VerUP#`d9eEKmH&2igIl3++cfp8QTiRtXQpT)<yQ%Te%O7Qw|KJWw2a^<4K-o1*m=iIveHs`A0d%x!yu3V|{4?V{5`b~s2*Pi?! zue|h2eCcQYCSR*BbNuv=@|5UEHvt$ri@~Bzg@wwVY_{cH*a+KCw-A(x42t! zTk3OLSUz7;s#tRfu~o1oh3fhw%ACZO@!gh*;2uIFE#8MHATQaSf<4OY#{v~rRI#Us zG%DV?`90)+zy zF!0c$@1?4aaRfoQ=J7Wy# zA9|G7k+&|?m9VNqdpsp7fb=6Vy!CpGSI}9<#YIk_}#JY%X6wGl+~7{&FqQtbK; zB?fa;hidxN``gV`!BGsdsw&p2HLIq@XoJ=o<3nZMj&S@i9?hz%XS9V1Nfl8Be3)CM zgD~PARS~obEN-L@pw$G)(&M;{)-ZOP&{~b%0fJ}ZT*wd`rKwDX(i&qFO>NL>OimFJ zP-@?2Ic%2EFa=(|AG7`51!{`30ZpS-*kjIGj3zjx-qUw2)>^bOqajvU3r>5Q^$}WW z&d$!*Zf~$&AMyPkevT(^p7EQX`y#Kravi74xM%5M_wz2%I^-dY?3shHRnNH4{&2-(QuU2F&~fHCs(yst({bS9m;Co=OzEAF^|Q@+ z;)&X`90-oGaV{K_c>D!b{L(FzT+lx8Boi*BXURjS#3Riv{EQQtR;>&B0~XG9!uQO% zf(wV(M^&9@x#M>&@FF>&BEIN7KcPZ0jf8kFB(TgSa-}di3*POrDiaMa>#Q)1$+J}V zFDPRBC?HAc%!PNzdQ->fg&Ap5s0#X=W0^YK35_;CKY)zhA`(TdIOyWF^~dE~v1 zV)jLp{b!HCv%|ys5<0F71G;H|-K0<}OFM_|%U-1KZnt^N&8ypS<|Xy!?GnaPjmS&A5-8_i%iLq(_bq&8XDnYdrI#{}JE! zc+K|C88>di)oWLH79)Iiv)1UM5H*Rq4{U>2fIbdsYW1J&t zV*8WZiUNu*?Qbqi9hO9UAPs02nExooPpRLj`un0|%JRaG?A;RalWHB1+KR{yE>z+Z zJ^~5nKmANHyO!T2`S>%`MeK7-XDdaJ5u-_R8|`xl+JWfJFO}nEzn}BYD3X0t@}4;o zZtfSc*dOAff=a0qL%jFOdtw4$o?lxPry0&HLT8wr$w*$YU-QLFan`wjgz2)j7kMsSX_!K7> zFJqkzE$JqKI+-9UAy};tRN$R^KegKPW3~EdU32kxO|1i5dpI$@3(1SYhM#jGDW$chs_W1W(RsSAAJ<4Y zyL-mnyLWNcO~{O0+tLpM+qUD*`5EV%GrD%mY)$% zbN4bxCHPXV+#5r{BQS7%+bS6`Hj}(#jhJS|C z%dGi9s+vu7mriQ8(HLjt*;EDE$DI$7XQpc9)3b6lU(yRCRlF{!?0P@)AA_e!i9Epu=nNy=zH z&iMQ-mDO{V<2YB4DEs@;`N+nbow0?p2&m?W_0=cPcV6VB&;31q`X_&i&;QOppv@wfTCm#^b1gQ||G z?)IGD5{|E2=JsoU#25bHi@bC0GM+DR_igUl4hxL%yLlfgP5tPT=(}(6gsAk{>S{`AN>hO*IwX-=f9T|-Jt7>=%(kbHwIRxk7G7(@#W9|3~y}P zsU02Oa`xi?%WwYt&v1U>X+HFkAK%poeR{&#-7~iBC5~(1wXgmLFTL_Lc7pusS)O+WZK%IF!d45dC%Dm&(YN@oW1!XzyHPGF<1YSM8tSqYfD??~{eveV!wX@6Ons6z|}|{j%svAlZE=NfKkW75Vc>y9GoY3>fdI z#rUFp$MP(SYV*_ijsAb%QDfnQ9KK%`iKz%t zw%kw4yD+BKEV|Uhbc(2(PfV-i(3y)nDoEiB#q&#gSKiAnf8Z_vC5ZpKX$#o39m6o7 zMANl9`gX_3=_wa4UuC;%xpC_b8jaBb!r!)CsMe1neCzd^tCucPY0a%Mkikn(trr4( zoOx6E0j%<)1_0D`McX?3U~z<2XdW9+2>^ZHbH3fMs!wT}n!eixG=SDv7kJ=%@wJKD zJ+|<3!+^IIH>&3Yn7RsT`D433--mX1M(Z(H)butaJ?greHh5hd2Jeuu`hXIY9`lbb zRGEj)(raP6X*oOFgd~P{41LdTyJ35NMzdOj>+o*J=Ik~{7b=tvGz*XB{m;I@CqDT) zw{N|J;Mr_;wCxBlC$!&Fm7xsakBz&$C>Z(TJ8C(bALn}tD*lc%L2P;!yN4kTw0}UX`(|0?xt^%^by8!Q30e0xb z(GML)G}c;BhN`a6%7F7Y3EB=y3B%B_QX!!c5-B$LTPh@V;)`#}5{}u}VMHHT>#>7l z7y`m%=m(UuqoEAdm42{z+tYO&whz>lzVFZqtTkM?aK!OZ6VL%JAWF8oj_tN%yV>#h zwa59$hdzL_mM?tiMQ+~N1PqPHyUH5Ao1e=KQ(o;))Pcz=`wJE0Lb-36(X@iO1|8ZMAC5_IH(lyg_12`sp^y?6mqnO&*wY+xm-&D z3KgHMvVRagvi}+j$%+b*0j*aEJ-RyLiDy5_CqMNHzxCU{#Y@-!0C<>dpZxPY`~4r_ z`0bARAZ zu!H&nSFSw4$*q6Lul*mtiBwObaSUJlIsWA7igODO&9_3(C(;c+{Ga~U-29*aIzRU} ze*tVo?=|Yu6`p+R34ZX;e3M`O#s8MS`zs1tKf`nX^1s8g?>kPavg^x_q3?W#U-;Q8 ze0tSo-jD%Zvp)GA{?#A-VSe_X{&)P{-%)t;7*BlsukeWr~h|;<_}lc!D81hP@O)`HG6~CfA#11 zso(nvl()D?|1Caw@geGnzpSGhBuhpX1X%@&kPK7ybr+@1H4L^kUo}G8{ zag}-F>AM`Z7e0UgT&OR<@8he099iU-_Af`lQ9zXCmtct!C415He9aCZ`xe#qY}^$5 z6)1D_7XC!MzM0*ZXih2J-TB?)m(;raT_hlCeZ02{QUa+zQMkvYT+yGABJuFhkUpV8Xdp}tlQW0@k67FLEIsWrOk^thId-tWh$Wi}m|M7pwum8#~ zF$@FS?G|eXj*pI69UXJ$Y)jW!w!02hgy z9lB6qmcUaVY^Wgb1rV!IdB0K$BXG1*TsW?{di4Sydj1(c`r!|9_3{x~LIUMIPrirM z(FHDEdJHcOraq-Qx`^|FNPxNDdi!-g^N)U#KmPI`a&~sk-MeSl!G-P%*5Sp|4?*`} zpY%AnaK!291&k8bO-)^|c27>sz{Z8>j;agSFK4YD%m~RH+cLyz$zr{L(M~GQanQ zFY?Cg@9^zc-sY_vcNnZ-t)uU{0J*O!)~kkURiOzm{@t#{0opX9AfcwJYN}d;grra1 ztWm}=xX?<{R5gx316em~Diib(yeO2ZSglrL`#{6-@iEP+!Q;7ba>~Wam$>rq6&`x{ z64xHP!b2C=TwK?zwL&APG1F*qbl%f>&)v@P=FJV)-#O!*x6gR<)i=5M=9}#9-okZv z!S3+=j-lVtcRRcdh?d=U%h0!Y*Q3O9a&pAwOQ+O280xxSakkm<@<0C;XLrvzK5BUU z@kjXJ^Ura<>-d#l{Vl%wwQusHfA%l(6F>1&_dMsNpgsSYJ=(@vOW%hiMccNVot;tF zHBUeNbTQzMzijs=>;)nZ82;&ZmpVa9eHfM~`jYluj`&){aAc_G{Id$r_65Ig`O2Yv znmpipNC6#s&v!bc^X7y2WcgklVS@*rU4D-&H&BQTDbCj@@D$Gx6cCbef{24URJjk7 z&XG@fe-E&y^0~YBy3YeE`Je}*m_zG+&pkE6Ht+pxKk-!Wc{aG$p2{dC2iJW}!j(Sj z9`E!(dup-n(f%Dp4<(^j&HKpNA>6UL3Y~>UI-yb~_*<^$e6!{D-GSz4#p%hKT8;2< z*U}9Z%!)>9)Se&hJ$C51eRBiriqrKPttE6F5*@zxE)+Ay4nW=cj!kQ+*A1)M(RPli z4t|g*H45d1=ZdcQ`fvRPZ=OEKr=Pn>d;1N3_wWC0uD|!c;4lBh$M9}ox7l#Mu{6g= z93KVL;_P3CVnW}w^tz^z;M-^|Bb}_rIfXU~?=5Y6&O5huG^dFRf6)N3vt*HlK5&LJMp&~@B;`z|}toL)KMLTymuaYM`b*^Z5^ zIJvN5U28-<&USQzqN*wsmR;AP>J`S>aqWUHp-ja{M8sOl_U;+q`07jON8iT>uO0E$ zAN>=4`}41I?UVmLpZLBLy7Mz`-q}L6;?n6cO=A+VQ}245*BCuM)eboJYdFsHxurfj z;=)K*^kdRqsi42(tff8MaI3SdPS#wgYs@IFY^_6?YA%K>Y{|HnzYAM(Fcv&??qd6K z;C}MCw%`NZv*|hfZtsxA96hKlfd%yZ-gC5v^Dm#BGnPvCtdGuJJ}LQp-QV8c=iZ1O z{I30y``okNsb6x)zsf)7@Sd9IKfl0pf1$L$9&}F?eUSt66|3_5fzEtzLRyw z-`iiD)?L-8>fthdHcAA%^wLXMYq@aY0(D(e*ELmDp>;q~-&X_RkmJAqzG=(^&sSQH zQ2G^G6t&S*y26->-VS&?t5t*23fm8KeTRaeG;cKPRYN!Q^n*i0k3}aJ7DMf4H&o^A zUUbGeoQBF&7_EaKTStI!tH3??fHFb-b+91H(5zMrL(gD+5GeE(=LoQPtpeYF2tjF6 z*NE0wwrsl|B=Ey4U120Z!jIQSbVEnmw`hWMQE7!}ML+Ce|AyXLy!U7obPO1k>q51Au(*Cel%gA;YaP^zesJh2 zv~;|B>4ckSyNP0Fec;#k?Legh+`Xx)(58_Y+Twjr-wmTEUqEhDbu$TZIOk~FEmc)V z8$N7g=X|KbYej7gUEhZ`gd)^+P1kh{qX?hYnr^TRJIAVCWBZ%4K=X@WWHm}Cs)`G)P*9{_u!8+=u0YXbeQyGpf9I-xHQ`Hs57*=(S z9<>8hco9PH2pxEaO9M*>Rfcp$$+je1Ziy)$KC%kXhJ7bO*AEzLINNTydE*@(dF&Cs=cz||^UXIf%Dt<=|GQBfm3y=U%0DOJ zPR1PU2t^@Cu>;KFSy2_^5KmGLjU&^j*HG(O@arh%G|IQKGkED3ZOl5u#_ zN=fVl5&eJ6P4=;>{X+DooTSe$@^ay9=>yxJK|C1lPdEZ2^qJJ!skZS zaUZSx^j$QrT>ode))AGoz$cs>SR?|B_=SK{T-@=I>adTzf;7pM%~!M@i`LmuwZ|t3 znUq$N7ugp4#8^2$=hpiSG?4N3_Z9eA;7^iqNp_BseH!sO_ln&olMgN>;4Ra<6+4bX9Ztk%|P89wiAt zp^Tb_(_A=abuz!3HcRfdAZSyAfPLj3@CSc*#$AaGSpPfQ4j^p_Po+n&|?-r4D0npuB}cpTc}x|p0GYWNjzRr3e{ZT;YVW5 zZUj3W*QaV$JoLmW0?K#di$~paz>CtBACi}D0(tM$X zOl_wnwu!L~ zoX+~bgMiQOXfjlwq*dFPf4}fcqJ%;5omeENQ`?tu{1d-qndG07Jkf5G!aHT+dCC9g z(n6Vb(tM}Sw9@>{#rrb$gL0AL{7m=>{w@otjM7~}Nl>~(zmJ0ERM3|B9isa`)x*gB zF7jp^pmjx6HSF4!!FsH>*sD!F0oh37P=?(6eh>YOO-cLItb!n%!>8W^;zAYm_!@Hyeh* z0)ibJPCN=vU2D3&M?~WWONXa2RR}c4?f}m9ArYYr!&nVf#$cVJ?fU7W-Wv)TVeeY& z2)*nXY~YG-wmWXTbAyMj9;2}|b;EkSMpc^LwG6IB>x!Y@VVV;HwcVpl!*d_{FmGMI z&aeF9KcR02@L@c-2(~gph4)bSUDu*?jq{pryG0083k5hg>J;Gc&IetGM$@b+PEJoy zrVfddaT6O;qjX3cIBNktwcVR(0#eN0DFHVO^j(YW`S+ux+HE)V!$4it2!vKaO7Mec zXdQJ`F<3h$g-qCwR_NNGb)b|+nJ||9CDt?z&O3T*sf&3}<}{?>vGA>=@h&&IZi^>wAX2L!84XVQUBawhdJYB@CSn z>itTvy+tu55Vkv-O0#O3u{C9|s-3gQw&V8gGp@h=HceCW)RWh^b^DAfmrf1_>m_K> zp*DUGnnb)`0)T}mj7(^r_*zIao>9A-D3u$-pnQA_6#CWg=_fvW{~1)BJ7h8?+I*4( zNR@$8aaT$B-Vs4B3JPP``u-w^yp2s9*n3EV-9%U?32oC~O4$iMx=GZhmOlk0*`6hcV4oy*d}KrOzrM@W{m;NVl?xcL@H%|v1&$AoC+ulaZ`v%7l#tV2QPyq}_=dfFc) z8<^2Cxfi@`x!(DmRAL`nqmtDuW#cx~`8L$)r{k+W3jkS!5~nwu$*${ZRyMQ^9CZoInADm$_7PMo2n+f!-(DE3W4CLADCFRAHd4wnJ;h-MeSpxN(DP z*RJuw=bqu@(&d9e`u!4t?-mVk=;xC}L!s4448M}xtB4%0`FB$TowtIM#WzfjQu1>J z^?X4V9QG6`L86?Vwo^(Y(fQ(!o|UJ;lhk#@lZ&gE**JWh_*|yd7m@(U=f)RO0qZB+ zV@@*XV0lN!=fE%L*QfI;jCe1S?l*tPCMEVHOUPvR zu)uQOrmi(}0zJQXe6j}%=OoucDESDn1xbV)OLM|OjevX}OOX5Id?c-*qdT&&cCyfn zNh|w8mi#{C-}%zsi4XwEoJr<~WGJ6fks^P;y+4U0HiCQA&)%hfZtnGf0Ea+$zX$oU z)-iNFrm68hPyy;yGjiep2CN-$ZV3D?2{3G>6h`TA=$&A#Wf*$aO~baSIXiFDY>M-E zt?(|WqH7g?XSdzr2953Q*zzri!%f*l>!R#$c(=h>yi(}OpzwgDsSQU>!*18JxqC)c z*VLxM_5&xY6%J?z3w~eax9n9`y|=7aHG3uhX0@ibA)(OJ4bEzIUCS_djL}#p*kK5P zv(ZyfJnT1%cPKAZ#?y7eZnvZB2bxvG)vK53+bw>J@)Czo$8@4bC5qd8S zPI&Bzr}%+S{SdEw`&+#A`m3XO9f%`{A4(7z3~=O8aL`(e4mIkgs=0jWl%~4Q;2l~w zcr1Ny8G0M3zxh zH7Jp>LqZsnhVYI$1o@_}1G->@n1Y%NnHoDE1b*jSOA-ZYY>DW+9XnJgyc@*>t-}ru zL1A=_5{t7#(6P`u&}<}79=gtps5>_(zLq)XQ68c>|i-s zuQ@rrh*@1s9k=_4^!9rlsJV&~2Q*1=p5MfY z_Yq;I|f3nv4(VqX=?ABUwaxvGbc&^^(eG0@IEI@Ca2R zSvKGM^nIqkPqRTuh1?(hyXAc6gxBajV)%bjZQPH?rzj1d1zd6PLR=;FMaR%*0#Xve z|MNW(#GP`Hskov$&uk2PO^_GS6ne?_*_c31C=V0*U=MrEkFU>=B$OkRnDUbc+7nV{ zK8LappCnD{#UfEfLA7+9a%xKAI4+K6oQd!yk3CI-PU{jQsYntq^O4R3tR&kfdsucn z2YGcbI`h615qe4IEsE0j4sqU&%_sAfm*xxOCZf>nA<>baINt?6wP&TfCfOJ1d`~#f zIQbASbt!YS5ITu$Xk3lYvIjm&ATHXVlD657ZElfr$5NYvF0yuO!$$et9& z?XyZp46%<;b@PEJ+%eOTGRkLBu+t}9RI4WFjc6QYo(}+4&r3qgbJj9lkjui2O*bAD=Hm0<8ExCdf=xuQ;%Rpqnz{+_Zy`L>)M(>r&(8x5Kww00PmAJwfNl@Yadv)=9Ia^T3Ns42 z*umj(tX4Iiz_+$tk6EqJMu$GTRH#vi!H$8lh)i5Blmu;op$7q73*Lq~R1$j6cU{Ne zL%X*dFHtfa{JazY}<|*&k(e0ZNLrq!37BVFyLJsgl@!BH#HYe z73+1wS-Zi9&cYy}dfg9}ngESwg3bGhx4sX8-6-^@bU-(FFQH|lnjKRWqUOZzI`76R z_<(a3@u72ps1TIzZF+#_LtWMMT{oge2q+H}O`{>`65}Pn^|cP`rp9wOc*ig}s;V9< zV`}UM;TYTykRKy;VNWkWsjxq)ifT;iXdP8M)E+(=^aLi3s1|H%X-8dyV2B)or>YD? zCsVRa`Ounjv)zDmXro|k8R%_Dswk!K4!Uk&upXuBAUugM^g-i7l%}d0`nE^wn&b8H zK|@mF?0+{DfO~z-kkk}lC|PBR3<{k3P#J70zTbW3c}WVOl6JEVyxT8RS4`h2jOD`=dF^ zz;i$?XAY9YFX5qaHC$qc!KV&*aZj*xD1jtl8CQZOt6a#wGr~QfiavsU9&*-%Wk4@E zB)Eut%y^19#B<{G#=%a+HI1D#zZV$ta|JI!(Cm`{={b@dfss^9A}4xLY4h1WmTV73 z>lyPz(~VzV+oX~$c^s4sH&wLqS%4Sk_7;bPm^_@s?@6Uq3VRtc*iUK)lK4Xw=cZI8 zOe^qtFcUlAWN7!;7VQ%*1^!DGq$JL(lu%HzL_YbF)0*#XNgeDd#?2^cX<7O}B~Z$D zK)j7eQB-9l1j{|Lc)lb-O!9AWULX(9N+jhH>MPm+`?Zo}6G-+1S(=*s5KLo_5M{}I z6`!@prsm14JPA3Sc_}BR_Vd2~952gp=Nyw__W~aUoh)bq6Llb_mrWaA()ks#z%PIQ z^b(8h(R40zzL_uFztMY1bYLV>^NZUJFZfZ5IrZiEU*;1VbI_B0F^igHpHX;TcCKgt zrf{D{`>JgJQX~vB?|JEGj&1+K{a-+ZCF70N_oVDc5$C`pyHeyH41dGR?a;H?ZAYO% z#kyWk{oI`k+;BHmgz+9F8l`mLUXPc6vqLBfOHdo{M*%@g=q9kP*SP)VqDDWr! z>w9Vw5&`VCY=@q8vt}3unx_bu`Sr8W4_`pu5PYp@$Z55O3WD1&!!`{pg~-noNPk22VSx~bWm zZ!wjjS=F3xxAg4>#4tF`>e%2hcrWyWaOv_xeEbJL#hb6c#At+8Xogkg*S9i{alq&Rdky zc&8>YK{teUlDBT%=BV#^=;8OgD?{?#Pyin2GcvC9>}SY=+ML_TRPZb|>akEz#Dt43 z|Ad>KE8E3EeZpUhGybz<;0qVff=^rY`6AJ#q_`xh0GygT5+N4$ zecTg=A@ZL6RKfFP5nU4G`mBxB_H!KXD9bKs@kS# zkEQ=H(J)*)VNs_t0IT^oq ze!iC+bub4|2@=H166(xScVaG9`2|UMF*g}3bbehw^TVUH6SC@0<~YZ^*knwZJxE2e zCU+p=V+uYhnx|9_zqrV<>eBwK#x}+KLP9I$?&h{I<>N*+AxRJ{MW0F=(Wf|tXe^Q> zrhKAfk&BOI(C0j+BcnW##q!yRK(eu<4)^@#k`%||3g(2!$;HT`StSdQrt7B=^vCFfeE!m^Z#sbqkUvWRPFf0Hip;V2Ec>jIo+gVj)C&6m zjGQGv&Oq{cE6=228l{m7qIX4+v-r*>8n;ga#eI^xB%UUDrM6^@;(apC!8Dgbwznj) zGt-&!vg{_f@DpIM4v3^c5#Kdq?3~&~aZh2%3b1Vx5QkOG}xHk*Et0M82^$$o^zB@-u!B=(DZyvj?>guKv_BcM_{ zvA?UAh$=}$g_cQLA4BruBvX8sdwHL-ZU;JyQ2;;Sk?O(z{v%?U0+}5EL ztXD@tkZ`bUHro({4Hi#m52%dh_T9T7u`zD^kXY~t1Kuml*cvgkxswq_KXxP#&HDHR z>sor-L$5>7Y7DE|(X|`SHe1$54qdO&)fy2Kk`Q&x`=5QD=U@0fuD|gn&Yht`)E^iF zT5xFG5XRGW9a?)_UE!_AThDsELaDo0911;d?NEtduUA|+K1L~n8*FmZCI;Ds-=0JO zm0H|ZK`X!^-l9d()S=DMFpS9;Kx;h(?|!5W48wpi&8R^kD5Xb35|9VhIy@bw4)lmX z9}tud9RZvR>!OW9n*ihASD{1&&53|gh>}+>pbI3rOoOu$dAONEuJfTYf%W^fS6Juh zx)!AbHwNp@b<5!0T5bs2P8EkFMwkOFvk=Na$i=+t7wmhn~ejLn9~?YaQAd z)lK!MVo2`ybw6>@G^m?zN?D-23W3ms4v>teNE8^caAYS(J1^`-%D@ssetin9i=lb3 zhnPaAnF6bY7qBQS6slO+<&!|aa-QfR{(TIs6AIPtc}}91%*%>HhK5d_8wuGgJmm#< zG8JDd_XbWKp2-o&<^Ey8lZ=^?Q>K5x158nlaTZAmNQ{Mww`9E0#lDUm!swY^mUn;T zq)Cn@@o{xBPCod^v07HmifzRf)fX1L&pBrCha$LX&1b!k^zTd0Pf!P$0~1#_kZey# zR-umf36d4i=Y&CA<%*%`#jY2=P?JseVbm6DF)wMwI6*8CJLG<`zn5{66z1@dFD5BE zrG&W25b1IV9VN?kD?K-^mgNYbg`NflJD1Gy0c1qPPD=J6nH`PMGoI3Jq9~TNM7pQQ zvRw6(^jt{J^UrKVy1r4Ci5z*J+xT>yeS)a>a{@fG!FvdL*`6m()g1UG?cCsHFa0cD^E% zUeSCOP;!U9zT++c5AsX#!>tX9{@Q4&D)7FyyLRMk2T`)s(GgWu(G7veZPY&C3RQLQ zJz4?;UyZHejMAZR@7{S3g?N%4zIcz)in^+USYICm2mPdQ?-tph{rA>doVVkl_E;=U z)zI#Cv|W$V3N1q0b@X(!F zbyd-<4B~t6HKI)5+xM2EqYHfKBOm4Em%h%|zxpD!4+4Zn8@vYB_jvEI<7&dBwmw$R{lbvXYt?rhH*UPc?OV6z z#E)~>@j3hbGyS@A;2o=Gg|ng3y>Cq!bR_izaTS4n=tuO1jPw*2)?HPIm&5?6{ozxw z@d#)X>t^bT8Z{`)n3$Oik4jZJr;4*0tM^^dH?VzA*LSpSOQnWU8^eOPxM9E!Jz6O| zb`DIO4Q;EGqPLcA=rC1Hljf5EC3dNN?&U~f?6Jnc{+p%8m*hF(K*HzT;(ShISs6()_{*DYp@KZin3KmI zi32BOJl(lIm-%{W)<6E7_@{hI?TF#slhfeyv68?yy^pGpS;j%)Drj6!^ilO;q2eo1 z1;(d-L~cVRRk@$KXe0@l6loF%Fmn~kr<}@+TbZ2M_~#DjMa29^pSWC0j%8B0E-pF? zPJP&SB@|CQ-@rXOBBYSp+_B6IP+nP*l07Soz2rY8Ya54Eo>;12K3{1idTCJevs((v zqof2`6)f6+;z{3q0dLOE`h=pHo#o|Tj@H%3_L@i^VBP>JlE|k!Dzk6?pyQgKt0h&# z6Cs&=hT;8_q0K^Xu)%PCItQv)v(Bs~F zhcThLyWMUPqc}P`2In!l!uCM`Zm>PW5ZbkggzBd;4NbkGw>@@*b~_i;=tZgdVi!BL zViT=!of{R__m_^#4Bh;_QbJSL7@#Ad7tYV`vf1wN-m_jGO>Ox00iZD^^lW#5$?dEi zx!?v|P;&3uK5)a8!r_7)a}as9?S zoS$#G_QWIHcxS_<%SSZpW3FF+2T>Yp2bA|%yF(2%+SDkjz&&^1wBo6!-^WKj_A%am z>rHOoxG}bib9fZ0@4yZ?Ja(jYv|WoD1KX<7)W*C}ow#yTkcTejO>=%iq(5crOt7n(23F8&@z;08nG?l67dNbe<`6a%}q!|b-4pPzk4!T$n!`ls|2^H1jsA?2h>;eIW*!b%BA-R@mgg97J;?h3aIo&J)BrN{~n?!jVN%f?U@i`e4Zr3aK(P zWqk;i=f6}no)I8923+p(yuw+?(JF;wm_JJ-wFk>g6iEQH#1hXzWITmZKt&aJC{b=J z(__dGO6i)*@(h>kAZccBLP(_g{{_%0BP;!)CWZM2{^6U1FP@w|MX9r04Et zL#=C^3w(Sh9%o%{J(7*k50=e#$8lY;UazQ4#df!)uIo_MwLwU5HLCkN8(`bs`w$LF z2qvwyAvsVtSleUmkeqRa8Z(-Ko?vQ&avBx>acYmJrq+dS8u8#9{oumqD$QosbLVV> zXoGc*v&}j0x%M=dE_f<@qyj9kgS`Alhac!U%krpw{K+?r!hbugKiCoQs_#90;3H5;1DtNBQoUp_?V`u zP)1`agLoB`{IAi>A^B5uvUtnpKTfYV0~tp^d^b zYAYzko~`}A(C)JB(IyBbh6I>QLW@cT z6pHuYwZhtg!S>XZVYRApen8X;L_&hi4d2nR7fHEV4`eFtAs{$c@CykcW(PUpfX2$p z`K7erfJt)U`5Aki2)FpG5A*cwTu3VBjV+0#iF1)C{3aMqmR^pRg;Sd0xudECB%F6h zGxi4(7W1U~^xP4sD?S?EA_Kli7Wl+*TRO#YAL>FB5&!+7+K_vdB%)P`sGUT;mXmdi zDha;ev?pzl<~5r?D&7wnkvN|Z$#IX8dT>6$Nk-gRAwdMl0Su@wcrt#;7mU@37x+}4 zR|qBMA+XTFm=ZIo6YrxbNrMIs(_Es!Goi^$`!3sy6gZ}f^OBvx60(F$Ya*Z22!@^5 zvf>^ePqL&jbixIWP(V4%KJPc41_K$NJ??@~NS4hGsL%GdECrBqVa8}fO}y%;Y zIzET_-=%_DwS&29ywpun6`eyF2O1?4LdEb1zFsx`oRY3Ky9$?Fe=VVkz))nSjVl~cTp$DTsXSKsu{HehJk*B zVQWHPc%?Poz^?6Z&M{a=RaaD1Mc?=MQS?tMjUGke5T-weA?OXDLQrq5XXppe0nsqg z1-uUdpc>n~457uILr|uo>n&&7j^oqIT(z>?GGRXVPjWLV zL@71uFof2S&N_~dE}+bcuJ42R`#s;T0h;M$eUbJbG#y<0s^SlCe7P z+?YTx0ZC#4dO&Lx&>R9XiapAtWIA6?4#%$TY1@vzA4V;VF{rl#-aC{y`mUw#+t8W8 zd$dxtU5j;sQl4RGsVc>By&4fDVSe`d1Z~@4t>x%w#j2?>T49V1Eigs+Zjt}*1_5v{ z0l@|THCOM>s!|K}b18WIML1ga%s7)?;?f?fC@o7hk+uMtYPn=Qv1O7YeP=1Z%akDV z6nihnmtSdo3!bnnv*HDQt1OhCSkemef6M+|77)Y(mA}QB9Y%H}{k+L|h4<1GI8Xpw zR{diSNAiN_;W;kOQT+3gI6U*`MSH)rcS}{VBD6b&Q!dMCh2>kkOI8)jCT5|Bap)W# z+T$@-KSoW&b0L%!?GGxQW$Voh+!kMW_k7=y!okyuc%j;wC8QQ8jpFu}<**m1g3^92 zyyIf6Vy9A;34=p6hC;Rd5K<&}j-}u$7GFK3)ld*1qck`9U67y(a@&~AT@rvS&($Hn zR_-~T1K9e5$-4C2<V_ZS6;K#th^WF{nM&Y|<=4?KT?3Mu#k3l^EAXs8(3 zLBTGSl9QwahSaV|d7clR>%u(lDSb#8HFv<4Jun5}eu97Zd(bcpc;~3=z;EAdHbLl5 z%*0<7GpfxK_|A6dX_|WG5lIj-8HOG^Sa#hOV+@s6w7pL|M0jSU#Hn%ugB#FBjn#WQ z{ctgXF$SBvc3`&}=&eQf1K#=2YR+2Lt5rxg_)x92E-12F7r5otS^TcW7=zIo>nv(q zO=kzHstU*m?@?M~6zsYk*6$Gz4si-mW1?WBIru1p?F9z!*|aSeY(qaNUU}^;Hm&E% zLyvRk&Ka-0_8O-bFL88q%Bj7=o!htQ+ZJmFtnKNCmP*$kH42Th4r40b|Lk)-^XvzB z>&@5cZBL~&?MQR*gBu0&Lc$`@GoWc2j*ix-+nWGcl|UZw!o+_U0Te+Y-^YeO$npCT z`4RSwr>a-r)d(L9zbq21x%2d0Pv7?_+3O^zNn~%Zfl6X@I9h$zqm^M8Jfed@pD`iW z-7mbe9&zAI5DpZrV4qxwRdsP;Tq9M%JBJq+s`nCt@qNX9-=#qC6CFXxya)GLQa55e zoQK|82J1#01EJlu41FJxr4r6oSVudZ8}SyU1nY*e8^EZCFbVdMoWyuFGKrHwFAlZdaBns#y z7hIDi=Q>9jLJ|i^J-%>O$;J~`=koi66xo%~Kw_YPFVL1q?AzQ1vp_$|?97Cs%I*%4xP@BQAtJHO z^Bzp@63B$>vv^IT+hEzjiAtCQ{#6wYaB zu45eoGBn6SBSxY<>r=by581xaMoz|PuftP7)I{{Ww3Tm+tl0Cx=g&>ZX7kQ0(FDvNMq|BcGhp#eF0Bvvc1uL-8dDi+KO0_s!I~DD$aeUu)Vk$$Vyd0{Oi* z-O(}rAh#b-(wzCz_%iR-LC?QJaAI*@;Rc5y1d&P^s=8vkZ4s;JdmCWU&IKVk8``Yx zdk!nD(Z+|0x3`FB>ZV5bAwZu3!*SDj7plj43{FE(o1IHLE%-a6b$1TyPj3E=G(7a=lWZBc;WdE@aW?`fBfY?;FVWi zeus#UJ zF=_zxeLyw@*gmXR4aO*j=&su91vt0g?0a#*Fz-raOprK40)4>Qfv)cZ9A7nwkq^2H zdu9JVAPt6rVX$+%nGyCbK8PlIrSYO@nj@6b?0Sm~p(UTu2J3qIzN2oAF16nb5t7I zT}x#&?oXG(f8VeBivh-erft_2Ka*D}$An9oE#-ia; ziL#uxd=I2*+xx&EnT)imxX2wzI@ey(A;fw41j2cE|4RPf0~#KbbO!SGE~siJHpgdW z(0ol}sA~TCQ>A(SVekDIqsnrBWtHjsuVZdQ;?GZmY2m>8->Zrj_Zk<;Gz1_?0Oeft zq~dsBV@tsvWv@`K&QUm%hd#$o)oAgO8_{`AWn^7qYlx5;T~f0}V=x9iGcNOo4tou+- z>6?>U(Voce0ikT4;>7(z>nNk9N*2f?sRddxM05Z5(53O6eSJq=0OGH@X)tv)Lgs~| zqjlh@+fWrfIzDFC_qdMGT26u}p3(-}hoEe54$+EA2bj0147xIi^VGGb?fk?m4;voeiC{c`gr!2U;BRyvF5-R>k;ELBl9L{!q2ryL$LaV9{V-_$1yInUXE?m+wYQGL@goJzR89Ik|ikmm@ z@Y)-1@xu3hgewnS6VFc&G3ZD&($ez=Q33Diz*waAB-&Y`-_yVZpg_xJf-9@5lcS z2?0@pHhQKEO!wrxZub9U@6E#`Im$c#PvlWmeNE5R({s;AGm>UBItNMU0)Y@9At4zf zu*G4p&9Q52cGq5m?X`^;FOQF9tv!rcW0uEY&{`mKN$3{nKtjjp8fotPzI&#-r@QOO z%=rD0+0~hmky)8p)e_zx`8@OVR8?kV#2fGXM#Ou3U#G#u_!wSL+R^oVU_8$Ya1o>* zc_0zg9T!hRSJ}k%MDUxS(Qq&fpFdpB$Bi&8+t1B6{2Y5J0)RgcgeefF2%fS06omk* z!IK_V*rzKcre$FUpntaQr%>3I*-TeZbKPWM3~__KQ>m0Gm3+BF7}$0RiEo(m z_f4{p{Aay%IsXx)X`%7PPtv)GC@*62JGHS#$-@qNkd%{5B$O>7gfsFI84FX6<+g@4 zobmiZso4}N-qFaSr3rrwTcVqNYWl5$*F>Wb)Vy}3L^ z&=ehIOs|U=YlK&66_hfjgCv@TRBCu6j*LHL#}4C5iTGL~bbFlW7n4=#WQdSLhwT$4 ztV+YE6?7`vMTGaCA{1?rq~^0b@vR~agnzeeJFtuzR4Nt9l`^%OLp?bBO2hQM@&f0rWiSM;CaWgXcLQe856s5PbH%ub%WU0#CZ1`rwx~ zECs-Eb=Qw-5W&GzdM-xbZJzZ0`-~E#3%G)M-N#3msMgrJbq7~o`6l{$dYCv`Co zjnnX&)bYHjk}$60VhZ7>3%G9JEjN&^KR!E{QxPE4%fLGybvGJK8~`B#kGYKUm2cMsc8 zr}==4p7bz<-v>h&2*bklBtlB8AacO>+WQLDu>85REECHzFhun1GieU=0>DJqmDC$9 z4adQCTs+rpmd^A%7vZ`-!oTZLYc!fhFF9$L@&riJj|Q*|EW@84H>hynxGrPkRXpiY zDwQdhY)Yk)pOzpDEZfGmOIU$XDyzaMS~4&(=U?}IXi<_9n@O1(X}b=3qg0* zRcWj9vWT!3DzqVpSjA)ehzR|r5Z;N8OU>mL(H&zv=T@OjEc`oKi#wj@n&O!X@uLjS zVN$Lo(K%G360{z2sq7)7&;&tDBPf)O0Aa8p}r(O89=9 zRw8mA@%KpO{So7d#(N*(>lCjyss}x!H>8I5Vz!KgNEJmV2sM{fokyYRTPsJA4s0&W z+Yw9#q4ZzG!}}rX#E9r>&GV{0RHCKg{TI=Q7OC)A@h;A-rf?idD^Yu8F;pOfUFj_FiIE@YfG+Or_~G~> z$c@f&IiAGuJUj%B2TrYlZTenT*OeHifB1JCms-7!X&TM2e%mThDVOnFk7~7w;|Ra@C1#9<>!HW9y@mK z;>6G?X3U&JrMn-DqZ~N6pSc6`nQi%?g?%&nIXP6P?lh229a){gwz~t+J({46%gy4lsp}-NMSpv}uywoMDOm|Ngm2!#k#zau-zJy&WGjDK^nf)_^1OO4y z^-{_J6cPk}>W5#=(Z^Sq3csJsgPIIMl+9EGZ}I@#%+C)h2?!Izu>2|jh@j-1kLoX_ z7Z{IRJkLLz`&a~i`ASdvh9K@v|8Go{Zwor-10sSER0FVWlTyjTvP^_!Ak4rh zB?Fv)gCJ#PYEcyU)g=6|e~IIGL4Ll(aU3Sb$8j4~A3W0o*YWUNNxj;j;nZ=R2DMs) zdc97`_Q4Yk!w0IggkM3UQEwnU!Pt0}(UCEP5Oj6FbLzn*dWcoQTxA%!JnYm&ms1{4SJ@axBc>G#zfkjdWz0}9wdN^6v*9^y z8q%W%i-=)dUFVg#h~(yl7Sf3KF%)7crD~0j5D4|aqwaO491tO|Ec)Pz=s2R@q-ZYa zO}A`RDqNUA=ffqi#~?3EF%Mo@=b_Gm0flOJ3|P4e!l9N)>P_{O4xQ&YQj}H z)QzXEs)SkrL31dSsy-kdSrPFBhxs8^`6D!@Dd~wu=O_l1NW_o^dm}F2Oy#?(9?WJq zI&p8fF0VT@rl?0=sh$y*rG&YORR>^dliD0h`U67L)n?#G_=0dxxV~7>ea09Qv;CXhim;(D0H_vNNQzu153yqw}ERc7#3) zVr#XIMOD0ms7{Wqzl5n5(QDDgWa@hnjW`Tr4aD$V0yz+2YzrbfJrV_{@|~u?Q+8Mx ztxSMs4T$KhsBR!F(nmyjLMl#|*c^nT+ElD0DdGX3p*a)k8W!T^sICf)5n}Ql!Afc3 zmkEW83LR8j7fGzmDV;3iy01f*l~$Tdw>ejT_as<$86g`?RBKpf1KXhvc<6sMe)8kbPB!(%d)f)bR-?p$PUn@N*r9!t%N9Y zhX2{~{E7fwm2S>ibuL>sZe(J79LqE)mrH(RM#E*Yn1~-zZ_wM*O?Rct(8w5*wc0&l zURTt6*9N|Sn{&hYSQMo*8?-BqDnvV3q$&mVWKR%dkVG?oDq zKr!NFnB2gt=Y`mzO2$275ckf+K8B(_6x;(5IWMWvAjA(g zO7({@y0M6%w<}(Rut!Dbi4X~vf2lZG)f0$N-lgtj;9N?8rMdW!A&dJo#sQJ6j)vA$Co%c0{)u(vs zB04}uWl!T7jYwtKvl#KFg~9`rGk{Px&`R`ogx`dQUm_jQdG?|Q5}~B0s3jhwd?uoi z2oVE?YCt1`w-EDs3MF4xYILhq!erHSs%C#fv0qX*UYht)iHa$tA7waiKEl3nPrVj{ zL1zpT@i7X$`i=&q$ON6FL}>_JUcY8Ni_k$0`Bqb`6k~WaKu8l!pv#jMioVvZ9Wi~Q zIWU8gHYPN(7fzK4q4g8WAJ=)Rwcc1|O;wCABO($aiPZH^35yWn(DyLbNs}g;$h7diYV;K$dW2IZgop*K2#tq6 zN?RF=h>ESUDu1BLgosjJ7ik(Z989kNlRU31fiXHnjbi$!yU?b^*QGvD!}A1{o*wFThl%P0)p{UYL2kVd zqGuw4+;V9K2>f_V=AHUs=Waxx8udDsZTlq#gHnU8=Vc;7t>)0EyU6Ye<=!58ySgxt zoH{v#Aq;wY`zV!dYPA|Qzr#LQU{HS0^#bH|;iLJ>0O(K{2F^sy2W)c%)$wWo5NKeR zd;mkgBwPd64GxFl`s#pTSqSM+Z#YzI4o<^kVtj&~J9cvM+DkD-iSDkM^!AQ$`t&eT zLf_0;fQf0BrWA}6G+YP6k_h~Aah{Y+)aoof^GsG>a6Tu7j^har*8|J4!0-|C{gQHi zM2BIR*tUToB(B@Qb^WmQ;gJ!>$HwXH?Qa@jCXc)#@Qh38A@DFQ;o}i76^-E6vG@6{ zR-HiFMo@YW+=ffNR;S)*;AeoC2*X2q&~O?Uh71f45-B}wyVOi2F)f2q$!vlunx={4 zN=!F+rvNEkWIz)$027=n^=AMWrq4@;iD_6(LxmrKAaEToz@G4pUZ!aT)eoo2RmvdU z1$;w@XZUyk(v!GOQ2jwjoSVvlNfPo;)qMJxM>gKis1=@w9P7RNpzpLAI;o2xR=hm1jlRaxKIt(JFCbDz*FULv zvqD>5*(zsMrGvV=jUn;M<|bQ`Mq`p`Bc?3uQ+-rAr^z>+I)Eg&?M0MJq8>P%7b#(5 zpnAr|WVD4)B2g9Zh!V{ZXBQFMIHBN+Pt9}CUzw19ta^&2!jqu^Myohz;;PldbL3E` ze6Q{?W8+rosOEAfc%VX_(?~^(7;?OF=t#`x*2t|0@thE#!yZTqHxBC#nP60qGA@Rw zxua<0MHh{s^hZSXLA)Xf2_e!+Imi(9_6iw|DwtB&3VukK1}eUV2p^P4(9z*sY}Er8 z(#2|8ilV<`kuo~(wn&m28Rr=_Rjj!m3eP)Hog#@Fo7C}!j6hRMlZ<)`!wrTHTrw%# zUBN2wqa=Cg41ijd(XR-r$YTi4mYJF00iItwMfH%c54TV;TnCC7V*Y0>VcnH*J%WCGbim zM7@q%vT+)c@zdiz`aK@P3v&FW#Bp2<+pnW841sk0oN2=hDI`x41t;4O6b!=T|hG`xl%86X4%q3N>8a1zIDFfrky^V^dp6kTu{ zE(Z_nXJUMe8ND-Tcm^~2=TNIoH1o%WWl$=Y1CTx!%t>T_2g4LWn7hAl_Vmr*!Z%#P zwryM4yL$&#!=dDv2v_1tHxgbe45*aLlx!2j5CMX|ps%l&p5C5jh>&br)r}^D`hbo8 zIBT^kUFB{{cBvWq4?f+>Um_Cur2`LDh*#B^lrWNbmq53`!*% z+qQANh7WpY_?QFT-CaHyqh$wS_kvQTt zf^xYWsBIA#0L;)nYs%{?@Y5hX&!f@sQ%YPyy^3#PyA6f6?s2l6Wdf&Sg?mq7p$Mb^I6Befm8@tU8s{(?KNdQzL7x zPPgmU&LsUIw0~P&naTjB9RijuJA+DBH%O00P!qjew!whYW2f;vs8qT!5R^NfmN+mxHVDc~;9Ll^P$J_|Y@A+Z&`Er{98ji>5 z@d=!UOP6KRGdZqCBdEFVdx#sgIxZfzZ3p!6J;i1KOgI_FU#-?@xE`ii#w=OB2Ux;H zz3Nv!FoX{RCuM*S;Cqy%=lOtphQJjPLzq6&eZ!+#Yfvc}95}F_1N-+e`@Hk134vjh znK^47<6|copBSTO#!R1{riE?VKwyyY9N)ujOe#qe*M)_Pmat^$GWPD;L8(;of2;ZV zCzGWfZQDW^mhVXy0wV~e5duux^h5K*3>gmdGYm}OA8K9K!!-QphslZnAOpZanq}*R zAt;s0lq+Sx_m)q2a{N4h!!R*T8|ek}?z+?)H7qL>b}dA+8bi5UMhM~ak!Snfc47kO&^^oY#l~?QKm_S7eiZ=AoHRPfCLV$jSPy-8MCp6< zy#N4Hdf29gCndF79qIXo9uaKf9k&sbSoClm2jLmmhJjtOkX{2sWQ>2!+%yof-b^IDu~}rtE%d`L}Srb zE#=J|L&eh(^PGjf8yW>2v!*NSWBA=VY=PziBhxqi0H;7$zbLtKLsXBqNP$MbVjAiKzBSq=k;Y8Xcf9!i8(a#{*mR(MQp|Z=Dfx>U~0o zU88#z;?W6OnTcxAs6GnwU-%sfv<|nY$V)upPmwvDu968nDl~dXXmBcG7!xF?XCale zHwD8XqQ`Vma_Dw-N(2d-^RUuqsfpB6-xG_t3-!5~451Sk4Lx)bQ0lwXXfr8eDS~mV zmbh+Iv4Wy$R|>0!4E#yw^{iK>GJt6t_YZyWLp=SnCwb+SmocgW+k{G`g2V^!GYyl5 zD#2 z=#gW*^2*DcyJ{7dY0+>R*rhJy=~GOMPte`lAEX;tIF3iHIzhQy0TW!$!88nH;GM5E zTza~Dxb%vv*tK&9M-LtV1mhD`JS3hB(gmswq_BLxH$*c9)sF%&n^6T`z|fuq&u#eg zW`J!93}NCl2#iKksM?d^@y!i{=Tfa!snu)#Jevm65V-i@gi`vnYBXFNr-o&gntA(D zN=(zQ-eB9l;b>AQYPA}O$*2-Jm6BnXFocO4bk;D;Kn5*v1qQw$3h4tET9&}FYz))z z4OoUm;#Z0g!uBf%L{i9P5NTrgMinGu)f%Itr*SOQ`N z^dya11H(2kZJ$1sa+ykZ3F$e0NzJ-Lwb}p)Jv}|xl@irzm6C1xh|EykEeW29cy5_Mi^w9P`x0$?BIyB* zLJ}gL-x;<-hjXW!&nY>cvD`Qj+VqFL?^5ppOBkd!FA>H2q8qlFXB}A+6_1EEd^Z#= zB13tugh4lTa~O^?iF?SJM)z>OuQnn@L+ixBPI^Oyc4H9pDrmeMTJNSz@_vWP1nJWE zwE3_qKkE;RLhJfTj>ZuQ{3BEz2tB9GyH)l~C^#0{u_*6u;)tj`uRfcEDj&{emeG*a zCVdro)ysc^o(hM&hw@{ECThF2=O0b3wv0y(h4WKmq)79ICiP8|PO3}yP;@yOYzBP< z4>8P!7%dVbp^|t#s%vyr3}SRuzn5umRCHw$J#@Svh|fWU+DV7v7QCVA5Rp8#h^#^a z7EU-EKD6E_ZHh>Ql9CdWHb1(^nusAjy52?d#yMG7iF!}?R~;s5WZ_M-Y$vXC0#!DSPP3m+VAJCS;PPO+b?tDO}DUM;X>?k z7sBw%j9Io#rBb0%D$&(drnje?zTR#sl`^Jf&}cZ+>%JFN2m`}3F)S0)4yvsOh|Q*H zQZAP;j49N7Kd0La0OBSG^j)!U3 ze%Lv}f6nznVPcb<>5s40@K|={O3qrf8pHGtwpPi)v`k9nGKOg*F|bWP#NG$JGkrXU zAgn#YCx&mR@o5a6<4~{Hs0Rmd&vh__A5lRNK5v?46X4NxJ;qOu(rDEDxo{jj{FD>R zDg_5@fn`~gOE#Y88w9$#x+s@?FTX!0{@he56>NLT5Kt=H&B_FpX=9nT4+toP?=81X zOv{3x?4IzTWR?FENVLzq~m zU$W2jTrAtfw)_+V%d)WTGIn6Ra2gGeJ}$;Ywd&J*vWkM~&qJ-+pgK_l1m#kha;1xM z*$3p5uEa1bEZb(*?0KAb!ByOP+i$US*_mz0e?Y@b(~`cEnjBpF%Lq*Oi&8M&|7 z_sD)kDtoE`j6S+| zMQ|2^&q7Z1T_%iC{fkuQMkbF_S@olBDD+V0SjzM{ zky0~H34gNSp(rav77=NtsFG0hQlk@*kiw3(dR<66BA#KGMmo$~PjdpJ}v~aaj&w ze>CSWRd!{%PEq=oIM<=v{fIoKj4jfJQ1tg?6%iTIy_$Yc=}0|)#LlQ9d3{NJR$X6` z+7udnEt6zJ#-5GPM@*r8G}A3*0xu-#yogg+PU$CQt!&DY(C~u7Ut0MguAd^ZBz0?K z3;jrZ9h+LSrIOi}UEZZ`eF+`ZlJ#?o^+jFRghr={6dkPL4ek45G)<7d@cbsyN7cCr zJfPcu#P%+6UX)35BQ$fLru&6Vo-b8q72O$Ij}zoEaSw{J=VK}=GHGqnuB+Pp+0!f2VjpKZ_Wd7jLQ{x8)~htU7i00gsC8b|^$$Qy#3^qj5_?e;6ryOQ3~>fSs# z*hOhuw2xWoU$oLhCupbRQ5{f565U$ycquDT5A{14R90NQO2#kBKi!Sm zMp#8Q}VV|=ObO3O7@Gk-A}wHQyF zuaq@Rqc1b0+@1>N{VEcr1 zC%m?%(hkjfnY12iWs9kGPRmQldjY*{p=}Grz^K~`MAkcv?j)q=B5SLzt(cBOs~h9@ zs=sUcov;^ZrFW)yiD-l-DLPC^?U0eMc;fel$|J_#D-!o{`u8UAb2vX$BeRipDJ*+o zFd#`}f2Gw=qJ&}3K?pNd1^{;L+J)=7^!ECI-=$Is+qN-HKVn;WlZn?U2gW=Hl_Ce! zEC;+I@6sLYvL1Ze=}(^f(hi?RX`Iw%k-iq?g)IG_jyBuntt|A*^K2_4L(%c&m8C50 z6s3C}13(&`da(i|ZHHFRou)zqo#J{o?w?^^5Bl*Z*HH6JeGy%svo) z&~4!Qw;#xI06x?{~J936g`xuJ=abygWA8e154ULaPpw5^Oy@Y&sOt%+I^j% zN4sqnxxW>vWIG^ndFLo^??_`ndPFDd)ZBLjO_NoKP3nxE;C$09UJ zi<0`+eif0$=^p=UP2W!H)=oRiit2>vq+zF>V?XbF|MNtTb{%PX^j{WdTDxOvC;Ize zs}3$o!;WA86eVh&+~BPD7HLxrd&q-|s5``|27$EpI$;>;1TC_*lh$S@=QD4(eE9$B z->ibr&H*-tYFa?>+Tnq` zY+l+Y$wEY=nghx?iIIg6~d;^9_fD56`^ z)~d8&mho zW}W9eQHM!aDc<($>BtKIs(iXQh?;&aCTtR^5|lZd=hb>mIe$THLBlT{>+$ zYjYkaYL@ZlSsPmMTOPSd;?L>WPZzyf8UWh$H0D*PMZK33-7ejwMmg*Mf6jVgKnNVOajZx6aAL=x2!sm^-$NAjt7!tAde#@kL-2ozN~AmPLH+Hk?r<5Oy{CbzjlneMdUBnZ(P`Sh z76(wBFyvhXv-G#fSYE3T_HZAwY=B?SOSgCwU5H+514ktU#A=OCEY=S~}} zk`~2I^&xMhO}k@i*C?FVyOM_voidta8RK*q@!FNec4ehq+P7;!Yz0>QT8tx)Y^(EC zG}N|JGS~@y)#-MNq!Q-knNHE9sHZfE21WPOotUdmdqt-sZLuBa*Xx~=B(5DDsNwl$U~M8 zv^?{ydRy8JUC*l{ipXT%E6d_qM0e*6G1Sdj(M@O3P{ustN#f^DwBL#Ku?Vje4Sg=s zuRJ01?Hc=a?d085>iAR_j@_!=qTl85a2A#SR_~Zj<9Lyf;ZDg#Qc6qS_FM5l*0iA_ zyq%Y?^XjRz^{*9gWsL~RlGc#KBUw_Dv!3;e@O>VAIvsnzR`ZsYI+8R$ok&H@BS%H< zYey#;Is&JKxwI2L*9k*FS~yhEHadZEP;?wgpYsYt)-cwjF=p`=buynt<*A>C@cAqP zmnHnST{?A|7DaP#Tk&YSp_Z*mF&5bnwQH2o^`}#YkXCxO)ACl-Fq&r!S$;3N_~rG& zbs{~fh#cqfNT@)w>V0|E-ZW!H(NM-b^wfndrlpPK(V=;Dje7XV;sMVpqdHyGi3qi{ zFwa)tZF!;-bfCsXWK9Q{TVy|$H}p2k81w3kqJ3@W%7W>V7J;SfZ(h8Hq6fJw`cQ}M zqP{n8sCXWEZ)J?iGq+g{6-l}>%N{Y!nORh~C$*o}|8^p}@_OCVQnm8(LYfXwOL59d z!!()6f=82uPm zRHSVVliDxJZ%K}hqU&udIn~j>6A@{;ezXf7nisT8*Vnv z(HBMN@>-sUj82C6b}CFQ57W1cHaQ(ak!5118`ZW`Ksx`gls4+rl~UWc5d`?6SKjEtc1qi}y8+HprK3~rCDFVUa91b8OWR2q zDq_gXTWMml{UVWgX@=!Ip4=>RS;UZBL}zp|mFl%HrgvHvi^z9c#LaZhRa*GF4u~_4 zvA-SQ$1Gz^GFo?nPHAB7x-(PWGij2srJZ?Bi`r|KSF*@ur!J!to3B<(*vWzBt=m2w zkpZvOh(ri+J*L@s1GXcyI0?LVnn=Co4S*`Y+ zHVS4f!PIVv)wDLUR((i2=w|7A-b0+OoL(zBW(j$1C7XG?`$?O$R(z8;M>Wg*+_ zqemx=4SDI9l@IdrMArT#c{;OtpYzIYp7M%$qbpjqT_nvcO+RLhU?~!1lZAGjIP7-% zFwv=;_^kJ*l_J&Yf+Brr$FP^C^YZ53=iPH8m1gZ!#B|acSyTt6?Md=DJvzA$&10y_ zBJ+8p0P>`R<<+g7koi1x&YS|!3B>u=6B#s1yIB{O>FQrrz>K{8cs;5GOb4^(RbcIe zX?CKPaHnOesE2Pli~z4?WJ5dUSvrkooVH0X>LpJaPb<)xR_*1%P)N!H%!0n|Dw7pjTTw^*UIRxGX}KF6KcDisMeAtJupcxH)3vR#yE` z6qhEeY~;Cb^2%%g$m-p9YNMPua)iT&4|C+iNoo{7kWCkkK%TmgY0peI;7nf7rgrD9 zlUJwn*o!EUG$AgcET%g*za1sk>K&an0uJ{awEF0D& z3w@f`P3Mix>LG4*SS%8*mnEk&>9C)5qmoARtXK}6$QvxmgVR-(Fo{2k%2=K?w$l-J zSv`|!vZewxc3K}N^*d{7QqmaGqASwmHOu>2wO3^9MUdFDKAQzArbyY)FfU~-ftbr0XelN&hM+_egY){U!(v8RYfp;P(vX&_{+JPUcouk%J1F*@ZnNE88N>_qNe zUYc}*Pm9cDT3X`01Pn1|Ez!CHEmdYDN*V{bz>H3u?@~Pd(l2(qKqWola#Ix-l(;VxPLDzW7~c6T_dk1zdCSh_+;?5i+*vga@886a?!TYop3PCpoPFt9`nyNj z@bdHA`=duVI`bMXdh1n8$5F@~+t0eEA7kBy1GuZMW$jsu=(b0A z1AEG|kmW5;n#L=wHUddw$%<^AwU252Ygb;gfGTF;=e(P^q~|*^2HkgA=C=sAS{{9v zm;aJ@N2hO+s(a);3>O7JD{6d8(_dLDiDWq>b#g4N^nFo!6b)_8I{vJBs}-MQt?p9P z7}U;TvIxJmqDc`@+9C(3tYrq1s4@}lQ4*0kH_tb4L7GErndkXJUcmIcmI z>atZzO&(p4X2{JmPgb7IUlNn-d+G<=|JY+}J2r+#H&?v(eY|mLA3GoWHg~^xlzkhY zDoWwObNJvCovqa>D7<6Z!>t_#avdeP@QoR12Zbhfn8vlWma8wKH|B@8Ly7A zdDlrU?RFVCzMoT4AcVv5QzIN6nqZ|o%KlSB3^{`N=PqUL+!>fm$K?S&JsTcKYCQXm zzvZ7F_!&nW4{O%t{MPS&gg2ctx8rY4okP$6Cp-_s^wxb}^_u`~}k`vUqa zcA*7fx)+JOO86I7`*fZT9?jypDC!}~;+e>MSWS9g9_5=QcPwc$ll734h30AZX#w;??YU7nv{yLHO zS;T0U$LN|Dps$niSwx@ap?|yd?vxRwRXS4I-%jYL=}4v3>4m&`FUb?@Zzi&oHQLAj?w?~GpTITcElh=-z^7W2-#i~;!=C&p@QdG#QT zWnG-wza1x7;Eo<2<8k~3b0tROHaBA->Jb3rLtlxVISCpB%_$;n| z``dZr*#o$ZabAAlhrDvyV9}W?G4?;pW9#-J`{r@+mG9)*E6-(SDP8GzmmT&z@KwHf z|IgSr)yA({s zH2`+Ph?o`)k;WJ5TxaoOwBp59A^cfAcWE>zVr1w9e`WC$=aJQMKBdFWBJ?X<&ZD<0~^`j#h6EG@c6C+|h)AT3|HNSJt5 zfZjaO4(+@*506W?!NkNE)jD+b_E0X_2(mdRIynbLQlOG5k>r`@wEkt~hoq4B%-(gU z%JAtiT+gO=W-qo7+H*(NNHQHCbeg}jw3l_SQbgb6iHvD=S?vfAfOB#Wn~#q&?n3X{ z_i)oSYgsa<3q!!b@^g8|2S3D9PyG!$CTbknw1?W2XZY>uCM)MIK=id&Y}c;Wm1!hOR~?&?NVhZ!2Ff>~nA#={IBeIK{I{}L)GwENk&zRb(j6C62J z!!yt2cfar{-n4oVWg!5Ukt19A&R_oxkL)?h(8vUyFeq)>%=)c+xaGaK@=KTWu;t}- z{OI1NaJst@jR}TFPt$N=)3zO~AA&FZ+U3mZImvfE_vhTbX)i~HCxQ-`Y~H$)qkFdT zYoGWHW>0pkeu#BX-ph-!#_6#d!rsK@joTRgw;$szZ&=E{=bq=8=eIC2qr{EZUPyOW ziRnHzPG|VvbS&=Ed5~^pAuURWtoOcFQ37e3@~reOvH{409-YUlSu_N#)wuF{quQOn zB6;ea%qK1?cUk4U70p`JV$OmjTqM#V?Y*tuRg~ZJ&^vDwNhdtVdA%p$?^}T_rIljr zgf7i$_{&=&uZT`)M-LR0&2~$^=H;^@Rbo0VFInH4Md#$zcX{TZ9X`verxN+gZE$4s z-Tc?DJsJP8vWV3ymNC=Y!lB;tx#5QES=n!A;;S8Z{}uo6^l9Gu@jv37%ezwf_|(2v zx%b|Cd3MtQJP%B(hl{R%4>w(PA#-|4dRj=A`p5yc?j5Cf(F&IL3r0>HVBe6(?1f9| z9eRa_?)@SAXTOnmUH^7g&a?~3L?`s2PUofRoL1#&g%C6jKg$>X?gxyHRq0xD8~^1u zF2Svh^2&o>=9`ZlW#+==yz{nCaM{9gCjLGA>LYyP`#<5pu@R&cSav^e`RFIP`TRvO z-fXt#jC1nXK@N_Z3@lv4ymFO82M%%4>toS^nQXuRpLyWf{ao?kU+3~wOXw2$_h;=! zTISKKoxojbXB{$V^Kz=EsJV4KDY@v%i%$SEc!iQ&~5 z^SW4i@eSPi&MR0{8t3?-P5j`;&$D^&Nob5Qc6ykTC#%#Q&EY^msWOv`uU?7tCa9j? z$o7NBIB=lOyk*O|;0pZY`o z{P#aVx7pyxzMVYu+yTIY`Y@xz!<-&>Sat1(`Q!)Q#UiiD$)nrZwSOB!_4J88d2k;G zhQ@I`$-HZB=IZknF?pPJYh&zQ_b=SNVK-yOOs;v~Z}T5MejDe_g+m)2XWhD=vU9Y7 z)2K2wI>NCd$C!WFb$sIEx3YYGKjXtk*#6TO7^&9S|LC{)mlw8iWVFHjH@u(E{NZPK z|CP%bKXsUApMH+J?%sggqOIj0(*~)LSvNEqr;pW zs^NG!m3oKEt>qPh>3U|m$DP*Cb`Z^r-21OBm7?8Jgsm*dS)vqlRSVST^B~n`DPvW1 z{)!^_=B(-s@-Fuj!;S-!VahxN2wz2QX5ED-J zvWmjA85xlnc&Yp<$M*8XWB2pJpKQRjX0mu;KO;kXx%Z#G#KY^iG1~C-{Nptk-u)A9 z|H{|-zw3@eW0+kp-^cA={~ix+It9X@)-b5mJjlprS@m@uo=d6>ltpjps-H~W+n6}W zjvd?Bwrv}m9(j_ZNE+2)Hb43dTeogy$DVx*)x1n{AWyF6o8SErPrr1K-hm}7onL0p zt_|FI`+w%iBaP(wtDRuOvv+g*H}B=A+ecw+ACEtDC%51AQ#Ky1Vp}j#w~&aI&dYX6 zDHqlEt>(59vY6*ND@o~Rf7z6<_01?@7^-!`q-+a>ba3iJjJlKG&*aiKzJrhd_Inr* zL(Hj^`1bc7<=EyOoH%@fE&((r@hJcDH(%kE6Qj8J9`wpt@8z=}I*(;*FUR`sc1BO{ z=lM0aYm2L1xp5~9sUD;u=6knwmixHi`NEC&E+j` zyNO@>$UB%NkJ4v+mGA%fIS#Mi!qACJkWHGu_J`|#t$F;fRlonWrXIASTM=NfcIaLd zAv{a?UMs-BcErD?lux6Ai= zy}qs5OY;cjE#H-OOw(CSA?rA^%0atP4_Rm({;fzJZ7W`DH*CD!REOzqJBu84Qr-&j zx?wZ0<`!=MyXzP|vWxHiw=eKY|5@Dpu}|~nMLkUHeVP02`Wc6}zQA|>`!>FLa)jRV zuHjd1ej8^moXLr8k8{U2f5e7^!_1t20q_0ThgiF$52LG>?(RAjv&Nx~Px7_zzR0YF zbC4&87`W;qy#Mk+0LF$6b9n!5jD>4?*ZbeYRjc~h{lr~-?YlqWz^MspuB5vCVZQdY z``B@Ef`P@C@PSW#h%?5Y=c`|TfMa`Wcz1t=uMeNYwnv}f=s|e#!I><7+Zsw;y>wSf z7~{Kn;GrkjeB7biIm(XRhhgsJeDEVTbMC@^tj1A(_|?DX{#On%aL${!c=k!Q9-YUB zf9IFzI=+b?{quKueB%Mi{R_DC+M9UCwU;v3m93<6D;{W-8ksErF5th{t3J=}6CUSy z$9Z{|6Wrr*eD4PC_})W|FTRu;-hCajMmF)|haY5zx036xdkg0*@WI?q9@xg=BgdF= z;d}YWN8ZGOeuFFTx}7iHy@9`IgJ6Z+Vg*-upC1 zk6AoZaXB%k&PzXA&ymrc{A8ey%en>K{ax6WfqUX*zIw-lOw5>1_lZ|{e&;BIYu>}Z z`NTVzCu$tt`~?5_Pv7OZv5=Lk&cqxYX70Jya>EsK*!1`V{P2ON*ne8EaMk7f(l5W0 z^Op}`6|Az6cb)3g`qJvM(jLegUcBev2#(`{9V*x-VPae&trGUYB4!8Zd$Ma5Gv=>g z{)`?flvzGFkAWV^F+<{sN#+jzP8{cFufEFWgC_#poqTNM(g9+cL0`KDDGK~n#ca>?8E z>}ActOA9~DgX^Hn(=VEzsE(ywnd)S&aF+SZ%O80$EQ;&_bYAQ%Ku_v@y7^4v*F3qg zdG1T%&33DlWR;ODa+p_VW=&UV72(q^+H@Worr|ZT;^8cMs$JeH0;rgVtCFRE)4hJ> zM_#58UCX3Syk>@H3n^Ku8(+SU zzxw^7{KwzBfZaPzgM^9E{cPDchr|2FLBjCxQ4SuQ!|1+O*jpRqjIaz=S4+a&b#n1F%lIaH6o%G1XU z7GHD;tB!AD{S%MjzF`4&SGn0nWyTCl+venpckrd!My|f%O3r=L$N1VW_fzREarC*b z^SLiQfa6w}J!h0h@B20<4({f%^G%K%o!*)sb?DBPUO=W9JU`Y&pW} z(Qzj1{k*tgJ%>&_jp&_&JavS_$G^ds7oEw!yJVQZ{V!i(W3`579%a|omk`zh-qf>( z?QG_U-~0iG=PqWjug3mozQ_M5_48ZryN)%3UAc8%R+%hPv7=o~0V`?oYXx92`L{B6 zCG*R@Y!k=W{LSyN`|am&er1NATj16?@#3A_Hw?ly5oXU+9)Hb&(W)ORgGa65QFjDF zy2Rqoy9RjMo33Kv$*TW+!=Ze}d30l7^e*6yZ|q~;lOr^|I`&{cGtOGZz`TPDES-(} z@{r%goHfj!vy>U^z1+f4}XX6Y&%Nz^mBan5AWd{U%U}RNP2rfoU&QC^df%s zqc_qUYQyXuVCkYVPrV#WQrW;T4WH%>fsin1BdJdKMiwTVfR^C8E~kgbeB%Z*QvjH# z!&t3J^J?A0af7*Vr%E@942nK4&m?U=l9W;_aICz2$@_fPer5SR551%Fb$scS1~K3i?z)B4h?OktLFI8BzqeaUhNZq=7oeQc$(v*={q0Vs)HS@lU8 z|Fv4P^YUMsPDum6EW+QdzRR%_(0)7T{I~Lf58TEXM;_)M@BASr$HrLq;4>WDeSq_C z{r7zGU8`94KmV9-zVs50ZX4xFSKxXMp67e3UCJz5^LBpcx8KJZb9$S7EX_Wft1r2d zU0V+E(ymS1yJsu+-z5;%3O@RoPf&jJ#~eF+f=fR7r+n(|i+JdBzr!87U*Z)$&Yyht zFrWU?(_HwTKj8PS?cw<|9BzMbh&SK-5#By`2Y0<7@jMStN?gxH&byl5`Q-b!sQeON z_|jdRJUxM|?c(7r!;IC>;*bB~&sbgF!{7eKAF;)AaK}g3`N}aob1^H=e-o=_UB;my zkMq{d#05+!ysyr>FKMNpDoZZoyhB@g{)NrFb>2owmE~Nts>Y@hFk{|47OcI9@7;Zz z-J5sP>khH&$WpGFyMn=fv)NA9;wyRYm9O#-$Dd;NtIx7`<2npsAW9eTr(gQ_Y`OCu zywXf={M6^TVeVn>{OiBq)zPDr&;9_n-8#fSu7h{p`cZB^;}~E6MuW$P&*uF%y$yc6 zix)RL7@kB(57+fz`K|ozpWKYS`CI(vUq8h7sS$>DJj<(%3TIyZF+TT+3)u4L_qqLB z>+!4_C&xxOGA!v^y@IQ+K8Nw+qm<{aWPZ1qD8p$6$t=1dO(&{)G;RHFr32K<(kba& zr7XHvaKjtsvU%?w4xWCV&-~Wy{Qe*R8W%3?W#_Zs;`9IG0X!j?Id2Z{`jxBcVvqlz zx1aUf9^}5~mU3y|0Um$lId;^bv}Ostb7u#Jg2{IcaKo?v7B^}JSMKg+#pRb_JozvZ zm^G`L6)Ohlozq~}vc(V>0G6GX z0@Po^q)=&OSQ5*g!AHLES)Tj1|Cw#aM;P1qzxmVeEawZ?FJ$FK%i+Lo8e$wVYbC4u zPw?11cX8K!TUm7ZwcPgMw@o&dNPFnvyh{c!_m9#z_5;55&>Q*9%NMfqrJwNKr$)h; zOJDB_1_QK0;qBy^S0Cn#^$S?dW`4YR1N-WN@|rW~>F=W&j8j6Uxlj8&?{issE-h@h z$n$9)(yZ;a+wY{`i}a-xz4Jbw^jxc&rfFkn#Xq_ONS?AjS<0jpxwq9jTa8smyDU`z zIw6C)_h$vs%JMmhCt4j&)y-uqUQN;ydFE4HK=aZoZSIoBl0_Es$WN9~?JOmk()2`D zfW)F9?McRpPV4oo`XVcTr|HBjYgBlTl@{u*%1~C_k>$HqI-p%}ti1ZQReC{I;JjAy zm!@Cy>SFbs?daD$@|Z<`W=VC*GGBS+K2IeJ-H^kyoIB9R;NVPpN6VB-1}+Yxb%%xr z>%aRY{@o7@-W%R@_c(Y4}w&Y8cCO(($Up2hryt2t}~#^;|yTQXLuM z?*H}~?iCT*OlA5%#zS z{oONIHn$(Uug=W5OXy)eW0W{+=>QAo_98h&xol$^f{l0l1%LQZH>XA$P_H3`;B;+- z27^pYzO!JIXOo2e=ktaCcnhEW^E(+DtF!HnKjZF||C1}O`z01U`u7~&y@9{}^alf) z3#?K<7Y@u|{;U#PAvqjBX#c_we~M*~eV*MXhPmg9zsEfRe;cOBqH|a9=3l*r9=WOc z*r8V*=l0J$j^{~0P^xrs%Qb6QHh(4o{Gs0$L5x|8gqvphJqz=8BHyl4D4bcxFdZe? zI!TWr^qLO3I2Ed)tAHf!J7;rX^vom798(i?gJww3AX& zgx6Xbm~F(34n}i6P+f zU;Q-if77`*2ez|+xXyy5GjU#42kC*+h>hdKrpLJBpZ<|o`>y1J@B3vgz2-*NEbror zU->SF41=<5A_QFX8~=%4xoim|J2r7(T(ES0H;nk>b@6ariSICzxYC;nq77e;i(h6S z^xcfPEHn&G9NEIIkx>@ABODtCxSl~*{m1M512PkiA|Sn`c8 z@%<-vFj{p3OO>E&#vI=Mkx%ohSFH4(v21#0&11m=lb$XU+j1E?<$$nQ^VVCq@oiT# zuS?KBdlvH-EI`ayNV#k$_d}GJF>@u?T(W?N_V%)5!D}9b@bMVGstZufBqXr(WTegX4&oA7QtFLv-|rog@1sK^vUXC_S|_aSO9Zpl$sX7{HY-Ifsj{zKLJC^=-^A4KZWJOcpFyz(8LQrNDS-ch6*CZ~;!KAKMbp zb3V6!@elZ~fBHYzRCRrefe_4Iypmgf^S8O~%w9(Kmg$>4$btoBX7m_H9EL|+5Ed8T z_yMlJ>LO-WB(vtuWx;}lbj@9eWtyps+=)#<5pbLE`|>O%Sr@`AR~B^e_JB28Z&Et7 z$A2E1yhYk-HO5voraQ5D$&$-iR9>=r%3AfeQ--4~-u1k+%(GceYp)YBU)1o~ z2?I_itP|&Zkgg!LKFGUAvO) z`*!i%!#`$jbt~)de}p5V%tyYkmL*1{xv58$e)SD5VDOCPJo)fL{L|2Go?kw|(Ty9} zGgM{er3<+1qVw21bdo3T{t@#=7x4I<_b@tpkWZ|-kY%2L@e%f{dx#fSz8%vOI4AbA z^~I;ydeO|#Sb{!_sX>a#&s~eTc)PjBFlKl^!Bn!DIO3bVT;W5*Bh%>Vj3p6Qy+ z8{c^Yix8!LATGNxZZdcIDr_FXvdgSKYXOxbRS4>w%@|zB z((^B-^!x)jJ!i6b;aSY@jV2e*IqMt-=C9}ZyZ?^A+5Zyf&5^wP#Is=capqZzxqR+< zJoN1yJn-$i7+)!Q;{Km9=hCbB;0JHUlu$pigN-k(;Z20%|GM14-9ei#2AJNu4^-A(I8!+=eq}2aKmqZ zk#_~(HEK1g)hgI!D&-1xU@5!gw*SDTAIJtSGh=WCANupJ^P$P_qy*8$nzz1}HE(@y z?74XtyqnLReJ#gFP9yDZX3yxsG>u5R=l#Xkd0%MkX3qkye)qrQ>USsir#$}(e*cfJ z(EfJuuYaDe|GM(!B{%XX7hcEdlS7QVCS6^<%$(UB{5Zh%AN&;8fACY0Iau`8kMWmp z{aB=#(!#a;(LeknCypG!kzg1W{qqM1BLC@IdI9hIz1w+T@VQ>CQmfSvr7kMv5|-hQ z`KpiqDOY{Gy#=n_D{C}C5h2NPD9akHP;~R(X7bCLu}rKzPE4N+u>H*UVGcxI@B3wQ4wTP8D)@p3}FfoAVA1;=DmM^1TciN z_g-u7eFC;!&yy#~IeV|+JFT_8x3|P&JggJ?q$U;0T3*e5z|b1XVRgG32MpYF& zIpx&UR8wA(LqSO;_kQ6zo_ld2Z9$ztO$jXr08b%f&#UIx-u*1yw2e89;86>?{@U>j zt}5)IQV^5#W_yv7J;9aABU+a)cvhR+F3RU(NwjQag%*9*ZtdQ41&_T|K_FY>o$da5 zTWDnJQ`fta-=x!NlF1~AM1pucPJ4She!rjE+FIAgl%elz;9fRCp_BEQZ5DR3xQjgJ zhFkr|wS=WzoXTYP7o}l0aGXsT+4ZDyJM_yciBh)s-3?sXQM5RPshhIQDxswtiZr_l zw6p1T)0=0pbF~_i>t~c$jE-m&B`1%N--AfkXZD*W*3n5cp2QpMD&Obne#47KX^Tej zL<$M{PTz~u=`>z%m;F@JG<03Zqy7BYe^Qm$8(@8p`QDP~`$;lz;_X@$@Hr%q*8X6i%r_)3t5&V8X ze!m}|&xgn3K~>d{ssMDKxSNMrk!*-PfhKERHOeL{b2xEY>PA+Z<|H0nHervI^-y&F zb`D?Ju$J4&Ibg@4=T^=Gr-yep_|Yt0Os3>dHkw^8hD@2N&4jYs7dkUHN2eEL8Gf|l zEzu1>6U?&VR_~O5GtEWRLqev1t8D5rv}%PnnZ3bIT)1qxAyFJ#twn@?L}4m2f1`wx zZZuJPvb*=#4eN3m9w6fxB-5|xcQUva$+_S}Hi_&TJ;yeai6Zc{Dh-y2zhvNS*UQSy z=6e6ZAmLyz<2pt6Yw!>Z=MoGXj1dZv8wzFo>g47BWjRq8vNa$g7Y4 z7A>uiGhhVgU3LT2K>!u6FGPM(NSdDA4!5|v9qNej)Xl`3Moe=Lo zaeHpj#NUetfDFx=mA`STKNxIgRFK)}PE8W%=K3i9``N8D)yMgG(bg$tW;o z5966&WJF6&6n##V;Z}WRgFoHCqf<9|vpz-3Hre5GSEHP*nv$p@!(d=hL@z7%ya{fPGyHVeZ<&bU(eRP`$@%B%7%_+bZx0) zUKf!cM&}1Bo)Y0lT~BiSa3k9`?$GwFQvhTTh;d2B2vK}hg z)SRE|F1Xpa_-8|L@1}dW$miL*h}d0&9WO<@Ffp5}o0m$rocFM=z#=^-0%H{!wWcz5ca zdNu^J(~zlbR%z(Y!`Vn8*K<8i+_8Jk(ab9#ldN*vL%>KTolRO3;Z-{!3r_mzO!$(hC!m60Mz2Hgm=kfnK% z@vIUp%HYe5=k4|*8YbZe4U3$?>{#&a%34u{zAQaw>cejJ9Z~*vYu#qDEE}F|cGe;C zoSk!;==xN$)Z7Gs8_(NCkXr)9jM;muS*=0D<<@NOGB6Th9=E~|?9if9e4h=CpolWZ zEhSX8=~47xY8O6s`9It6ax;uTWGpk7xOL$Z&DCJU_uUUgB8np?Fv{jd$7o)5ae1!t zt`iz`!hfO%TQ~D_$k2qFvP=|SR`sdfIFpE6nC-@`%goOXZHScPa}uJIO+Iovw}ln$ zSmD4b-!9PweUQW-*cHm?c257bCyFDMP=R|o;WE?AcF*;+|Rdk7-o$Q7Q z+J%cu%bEhfNeqiqfQdXWYso&FS(e?ziCtK^8INT3tXmc*Sy!Ll(9oZ4x;a})D69C| zOgQUlp%N9;BEsFOKO=!|bpSOw1j)=j(}vaadp9)BGVymF~$ZIv!$KQrZvwkTsi&Dse7~&9&*$BK^9&{ z!dUd8B$JU_v_H2qVH<6nX0D=U7BJbvpph$WChMIYPXHNLHnR`}JJwkzvMCd-$iP^H z){G7kPUNSXF1>c;jgjlSor*bj6D=BDIy2Fl2;IoaB(wgUW{9^_xx-ABnO!KYXxAz{ zuR9*Cye4G66Om<3teUd$knPuuw#~dNGtrdDg~ZI_?ndPx8QM1LPX;GuykQkuCL@Q8 z_+3=NVb_~R_CjqnM>`>{M*E$W7pC2C;7ss#qNKEvPeyYVHF(Mx2F;8cW-v68WirNB zJ5{Ju8G)JYQZd=+$IbXfnK|@!jF%JKxrxi($_pXd-1b~Bd*5kZ1T(9e(fe+cBXf(l zW$_|wO|gq#H|Qpl#X;0EXq6nwj`daapllY;ZFFe2vPy~aP^LqRRe3v6y0OZXY`2W5 z$oEd;z0D5Rb`z{x_3Ko=Wh!mu1dk$cv$|v$mEsi1DI+qzn|rvdmCZ^n80{TKw310t zVt0N$dC{z28JvqKdaPuP?D$p}Y*`tS2@ZCZ(4sQMN}-&MCL+6x_DNCNHuKIhG9rj( z<2RyXD>rc?4vkV*H#-|)Z>{@m!OP8YdwUJN>5A`G%yhQrd^YH)=fOy1og&r`k$TK_;9z#Z zF|vw@l-04D;8X^8q8mph>xGOZ&}v?yeP*H&EB+7(E0D##NUd*CcSyID!)6E1p1feR zR=e|cD-K?SMno>^X7dr1Ek^UoR+3TCi<(Hj3o9Jj@l@}f}~l9{)o zndgR+#G_6^X=Kh@Ze{9s8rGZ%ZgyoyHhIzRncj8|fO8=ua5gUEcH`vTCZue^{A`b# ztvKVe(cGSMZ^7VPqa&HPCD99lo47DKaAdLoSjG1`#fK9Y%1kc6vYVjQCYFut%XVY% zL}ENe=4?k1Wkmx{!hej)i;2R<%xaVg&vq}v4nk%<@7QT}na#1Yy|$0TJVgc5x!AJdYWt7eL=$d_!p}-~9x&K@BE$Z>%hGoSloI~_IE31_i9LyA8Zd5^$tvhcgE;-Y9 zW=S@!tZqhsJE28c7x|ua=G4O6y?@zQb`jd^`K%EwnqBl{mB*r))2-;kD2IiStGS3Q zwd++Od+{{FQTM+^_W`5uDA`aak^Rcb>Tfsyi`AG;Jr*Va7{tyWzIX9OU8X)lrClQDO(vsHiW@x$cde?MC6$)zuKLf z8=jG(2{Wx+m+g*kHioRSNd(4r>ZRLplg{*v-NbAnVQnJ#bebQ^N!|n}`>b0oP*op+fJaIzEs}&!)UsoA8MJ$NG;&3El9RAz&Bn8uuhAU3_bECTqj8-a{GH^5uu8g=$>L%sTefWMy{vahwnN&Sz}t+U?C_P9 zbzY>;Or8{W6H1DVDJlbuEY_L4KkW1;N-s`jlx(F0k;H#)%3mvmt{J?u;q_uhA69Z( zM2?EALB?t;O3#|6as2pkwr<@@DwR6zyKp#6O-&7jg@vZ@urn7sRc6d^BZGfC^k&wF zOtML*e0s9&-o2ZB`}Uo2CX7TP3?4j~a5$WCp0Z~EJC!V~c+!k6&EB)31Ce*^$R82< za_V*G`O%Ml^kZ3}lx-r*=DSYbck`lcCT#6A84Ff6)@_x9>TKpt_H{fi28^`ax!_+)sY(Fv`Q8Q_nil=!?8-SD1Hyw{7n_UVHkF%-(*S(wc!322|6; zg=YAWS#QteM$x_R^8KIumJd2>xol`3%lCC%r=$50yBqeaQ%1c88 zhhn&jvGSSU^S`g{p#SgzMBcbqOcZ~6;_@V*{q&p zg-;`#S@Dw@%{VEIYXs9we0ku&0UmwyQG&rBi9~`}EOzQ=|Ni}K+qR8RC`55_u@p^M z@s_A8vqOJ&%AeX9Gm{d?j^b2y-Lq!RV%@rRD2hTn9w!=&p8B0irHI91yzOy^al(1h= zd7Oj?KM(Z)tJYQ9Yfc3{C+M8_ zR7KuRrBbY2yOuFy#&FqXm!0u^DwSgK;>GOPv4gt0Iw_pEak1}>=Jx$3lbgQV3g8th zR`A6yevzW0qSL<9G>tub_VCzakFjUZ9#W|kW5Q0KE{}cEFr(Lg}M$ZI0kvz0kM|g;q$rn`ceb^TW;1bgvnaeH`Msd&@HH z);Mk_O6pA*{Ih+$aUf!iGm{5Snw2YO&(9Nkm-6JA!^D;TJn-O;8C|4taN7qw^rMGq zXjsUqLl;ojzKPeKeVJujj}j>zz@+KdG3BBfw$6W(Wt*D`hm&mE-aw~b!A)Pdo6AO4 z67-(9oTl5D^U&{D(q71??*AG?bB?ib@yoovs)JGEFCr(DLrC%C^FrH!O}zcmOU(VC z0dL^|rrvrRlZW`3J>yk2qz7`}om0@Z&g7A|HZ$(FZ*k3tIM4s)f7uZl!&m?17D@rM z82h%b1tkQ`NcC4Ds-=3dIQ#3;VQI~T4^;4-r2VH0X<`q2i%k^{~ zIZob~tGM&#tEsDuuxr(9o_KaP4M*B2E*r%3JMZC&;e{-D?AN?=IEU(@1gn^OI<$YoO@_Ec!x{I8!Li6tJG^>O8#LYKz#rT1ET6Z#Q#tXdj!Dc#rl}x+sPOhIg z7&x(i=%?dYOGVkg@qM2D+e@rJoS?9B7*lV&o-u{Td3Vu#)*U*?_BR$#To8gC>)CuL zL7z|yA0F(_*S~x%`OS;?$?InEfn|Cp?NTGH2N}hOh1}pb=kl%MOmrcEv zYbRB+XXX36GjA;^ze@ALy>x`@m~zQbj;>$KiXF!oc*V`!IrTzH@`9()X!E)`{Naz! zQs3^OwC@nE{M7ASGd!1VtLO3R!tI3f{2bf8l_sr*tFFI=sS}3~Y;WY9mtSJ`^7Z5m z9YfCUW@72GGw6Ny!awtu_f#&Lkjs0o&m*2YgiqdiCs&Uyhg2KeR?p+P8E>+!DM~@j zSU&mbTe*C6HNMt8%zbGFZ!X!$v1EY36F$LRpPfwmyHE4_&O;oHYy9EY&+(nF-AL!k zH+bTiH`pEXP}2WAuDkI@CXeYSp@hrKzcPmr5tmIno?~W82wAsU8TsXQ%SOL4mr_w> zmlM}%J98B|BiRiP>Md_XJ9O7`-EMiR%6h7a(udvowYRrZU0r?3WxVJ2KA(?{jt;4{ zW`pmuNgqz;>BM+omoDS+IJvpGw6wGUP+3`trfD=bHuC7BkJ8Z4z|f&Xx$e5_@Or(L zD5O%%<&* zi>mTa(a9M#nV&p5noiXZE%nTO>_KL2@llW;A$E8@&pwetOzvT=*TJDYB%dQg-P-jK7jQW3W=5W&iwr^-;&-G(DKIdJwY&^iOsz$Er7vt5Xn~4mY zaLP*oJx%M8L#$l3f}@HDbkNvEZQDq_EGb1 zH*)acc9tw#ff5L#qM*kX^Ws}Y6hu1NGUr9+ytkHcNg?e=w=v`4AD|chhG~&Zo0`V) z13P)?H-BQiTF8JwRUF&Agcn|g-9rb^e)JegAlZ0~qX&<0Z1)~kEniO@(8502*1yC< zGv>4Z5cI27*s^{W|Ml&|{QH01&f5?CibaZ#ypnQaJD2hD3vI->gW8t;tXQ^;Rz*Fr z(eCBZwF~eB6;kmujZZ&JRliE6UoeR92?Y@yYx$S|{3CHqr?US5nl>%w#m5e!-hV%l zLpxZyY#B-*2UYc;N0;;J+XdtoDnysO#!GK6=BT2;p#>=E6k4AVXQbP0-MNPKs}Hbg zt%?Gq_AlbO$6H8${ae&DE#)u&{RH)%Fkz2}W1HUN&%aBc-E%X!8)q_e_EP*KMl;}0 z16$@j!EXvGn6_^>9jP>+)3kOE2M&J7?;m=eR8A!$Mij7q**sp=+sW_u0OuEZvnK28 z^kvr_*62B>`|R01_w>eIW;bD4Z|9XT8}nQ*i<}KF*WQA^(}a3vxU^cwxsuPSH^z06 zo5^lpPT+F%=uv+5v!9Vpr}@DTen2o7)`tj!MAt9|NH_j9s_=0#rtre1itr2c^PAuqgL2-*aNA_4x({-Wz#|XA@@9DIad`b%lpp;X ze*A4%{B!u#Hu&-npy*9_=Ll%orx_%{8V^EnwSqKq4iNXZ#H>oA+Q z%zVu@K&S8(g@+qLEE7E3n!np#6;A2ij==4$1eInPO=V$dx3YjylA@Ep6YX6RHXO`B zRl0HkDjpyCMWy7S)0!%x&(NvdI<$h(qbpeX&MUmWEQ*$jqbfRR)qLT5_c8T6FMs%t zhgiBljn+Mbt)g=NwKtMpID;(<*3nuKX7!F-3dfIUMBg0V*Hv^q#hy)D*|B0H{Vtr& zXFq){+Tv$<=B-7n*$ZQ5fSd}?i=cyv^6 zDHl!sG+()~lv&R`&Z}F>`TXbaWWbSGJpRH=_8#tF^2OuHU%rKP%NppIT*A^#2@>iQ zCJe}d6EI4}I@q~n7HWP4m*4$8KG#3Wn@|0TwTU#x+v5O~j-AF`cYcPNeY1Gvnb&BI zCTL5QGiLB;hF&v~%Lc*oKl>d^4|mX(&@aFgL zJGps$f+rt;h9yVG@U44q#kcCu{N=4>>}={Fp413?PsH?f>RfZ>WyH!Z;@b1Qy!rc| zvM81!p3n*F8szoo${WAPmnV66_4y}wV|RjR(+(PrHqufxnQwjdb}la7!%u$sSJodt zMfh+M4!RdLki!M{{FnzWDPYOV|ILGQT3E4QHEQl!cH|G{+E3lh7q6*e#dA;b)bk72 zxoy zj2m7@d*Lw30%!8LsI|}Rdyxd1BJy5T9yyU)vi%vYLso{0TC<%dMHIoW3~r3h9I^>i ztzacnmQofjqO@%nE_UH;*Av4k>8q@#sZ2sxH{jwHjzrInZs6C>7_vO-WF1b+y@*XYylLD_o;dOD4g`YAkn zAG(@AX(;Ln@vI$!GHC#M<#{MAD`C?v_|ijgNq_VTQ2uj1`s|e`TU+5@??wOe9Vj`s zqA#C}l4GBLoY17Kys&Csr-C)p24VKU(dTxwyk>ELP7~5u#Z$>#lHGF2l7(-!Jp_zk zBMO(E8=4#55pKFtWoukJhdB{mu%l=Ysp~9Cn{L4DWPhF$E@bI=jFhh91(NYjns)4> z-5;PZ;z#K`#N0WvdGjql=|mjOKL}2SofVdlAI!n;)$l1QN{~}l*puV>Dlg)y;In*C zzm!F5ia1bQ$dwZ(kWcf8PBh}_G%*eKuAIk18y2CWp%JFi@1_6Pp@i4ev+BJi9O={; zJz*fLSFB{#ybgTc0F#E6e>C1n5P3YPfdGL(0DmZiFV}}J;-xs4Pi|2TX)k!ohcGI) zfSn(H$m*qWHpFA}oj!>&kEbh%oT2~&C09Q*a~N_%T_8KTNd)sE z^2_?*^&LNz2q@OpN}{8aKwcr?V2EJZP{xMy*ma05i$M>1_xn6t zHgYh&KpW-#hoHw6k=VDFL~V*-B$vFxBD_j~pg%~^7h~U1xTJq2efMl<)BKlNH# zFX5)rVNB5Th@R*-rFkhFIFTz#=dtA28Xo!m3Q~j_GBL>c=Z`VmQ)Io=dhUbWEf%un z((LXV-RB{CFqX-*ZnQ_)2|2KGrOq^W*|^V47j&zfPDZ7zWXi2&O13ClTGfnR%xKlF z@y7}VMs>nv;UY2ztDFl)@DZUkv!sD1zn7_gUK!ERl_q+W3=Raq|h7ClcQHBf|!d-XWMSXoe&CShB zm@q*ov%e`_L^Sx1Zv7;H79a+A!_c=7NCPK~40-@OZ=>A*IQ*NZ%V3d8LoAJ=#bLM~ zT~SU?!pn){LE^;OaQhdNo53V_qNF01~Xz{l-u{IZ#~-MF~B>D6#9=2;LGgm$u5 zyS0XF^1R65xZk)7$a#J}`{%yI@~Jh9DAd`vbqNpt^f7|NM>FM$i&!voEv4h9a>wnH z*uL;}W-L6~ZLt~u>^>r1Um=&@Sj(KJSMki>RQe7&pGjjXp}qN|XS^P~UX=k8uHx1k zKS^o)AdLr)lH0$Inm(nJM&9Rx6(5rFjN|LmCs4oUFU(t-BDdlO>dFjY-hD#p6F&(~ z?PXBJ#h3QyywJcdQluPo#iv}dn^>o)9 z^f)Qf=qLmNUKAB3e(nKoA74rH=JgziL0)tfKb^CazQb?eTlY?&e*WY9ZFzT#dj_~` z&=p&7<}8~(c%D}_H#2D3H~6<(YgqD!|77L?K2j2BI`k-C<-#e4)hx3F;5`!sA`!GhHn za`)v`!hC4)^Y0!<4~ryaAT)f(f-SM>*B!8F)oUAq7bf)Lx15O;_|L5Ns zJ-U=#YuD3WSj)x3uVF|@2g`ygv9?33U$l^|tJaayDoCf(XgZKoAl>z&>6w)Ps>esw zxKB{{{8n0&Jc{~V!k{8ZwsT?!@=#e@g=b_x-q^T_xo;#$HEyNhU@KF;{7q{64PkU? zgpCc*Q8R*p14c01ud*beP(JxWin7l;65pctS@6e)I9L~EiN3nx4-^#Acmp96)kF07 zepbA-iuaFplGH=Q74781T^4vw=>fV;^b~?l{6It)IJ!T)$2td4#n~-edWKE$G2I(rLYGuTCqF zGLelvXu}hX;Ma9xEsd<0zlqn^wLqUdbS=$Ct|Xj*s|pGP^D8MU>x;T}J}*Cig!f~O z)bDO0l|T3-@t;NyiOzOr|Ig1jIHrPaAACsBps|b`H08X5zmYLhr!k_el%T%>&%jCoJ|DX3L)V&l?S*%^ZR8;y`|BLMrDM5a z+8`?W7Sf!|qog!9BTx3+pUkYQqAu!YwdUPQY~-{Se9zCakwLrXx@Gn_C!T{={o4t7 zbRy&3_AYgEkIqz;A{%>Rw)a`LaG0(6pS(y`S68!b+cs)zYtMM*WI4c|+2)Pt$n4By zmUF<$gF)2OSHxh|vwtJGCnXH0!^-yqrCI_MA%2_}R~XmRPK-!cSvkBdx8i zj2}P#44C$uqbWSQUF?<9kp&**G^K#9cl*2Ye3Zb`=qu);6nDVt-@@Ni7(Sxw4R40= z6cwdC0Xx^gXUfpaBPfr}gg%#|FMJY~Bv8KgH5iZwixmUGYV z-OeN79QL`~_{0A||NU=R)EMR1(N+rUMsfbQtNHwOm*73NgUhZS!Msh)tf`L^sjOp6 zo|hcI7rm@6gNOOZ%L}1+HTu`|=SX2WA)n{;Ayf}JWh1!t;vp=LmoVY#aRdP^ltZ7| z0Srh~(09-U49nGt@eZ3B8_<;i7v1~?u0C%#MS&2bFB;9-P8CKD#_uoT;&F8xZAx+Z zMg4oMS0xlFV!+UWRQ4@G^#my{?MGdrh{A{;pSOs%;~ zB1Y6)$&RCGcJ5rmVowPpM+~9)Sc3M}6vcywFt}|1xhnVrA^O+Vq2-nn^o7VTu4V9m z7{&QMJic7YD*7|XUrIsMC~hqAlGNT|`>t*16fkVcHQasWQ1V(k7&N$!yvm%9@UI3a zsTjjuw@l>q#XDKGa50LS!{m!EWa4=P$ZbB(hzm!vX3tStjvOPmtRI7iC;XG4YOXFlCTNblm$aJ+O<_8$%SIHy&S0fM7B~sGx*_Lt~Vb zKlvUO+I9^6>$cI0_l$rs9DJ#gq*Nrxdhg`+QgB#d;a21PN{EV73p4K)$db>_u zQ4Mtib15kZ;PEPyl-DvSl}kZcEfXrI&>2g!zM+}ca25Rr6%)^`=%T$Iw6A(pBBddY zHn-4cTr?oxRIZEECeHM~ zof_(H?#Z&U&usm6WUJM9qVB;W2Su5++1+>CI4_8Vn4AmyxhSrzaO5=9)9D(sk!;xM z`9D+hcsvXrKAi2_xAWwaPoD9;&*x*Y z3!&ExLn$pnDM&-@Anf z{zWJrdwI{S_(-(6i7VA@G)>dp7Nlky!9Q}zI$43_WSnym#&$K9=Q=(=4!F!Vf9txA zrfHJnCs)52v+QjP__0Po#j5PdP<{vCb&?0^|g|mN>Uky6Jk7_KrBdV1%Go z0*8qN(L@?w(2v*a$tW|{{^e`@bU_=R`tcvRxu1u)>gzG*6tP&8XjH==3=#?jK8hkp z#cAt|k-|%EICOewNHR$ZA3h)GnnohpPBf|E_lF3D{H|ZVoXWqmxd*r{TR+bGnUnCk zkJGwEF0)RI8ZvM>7cBH{Cy{mvyKKV1$(o>dj3giD)*IyyEn6&xo=TyFLg4Yp%cx`= z;!*I0AQ0%@F|?&17zCeJN}ikz*q&?+4GpBzX(Evbe!m~T-;dAd!{hOwsw!SL2bW1m zaxMU;w*_=IFLGuHh0c}saX;u~f^+xJv$00E+%Vm8`L}(kwRqnwHZ>=&h@1?4sa_ue zk2j-s-ENI&!*_i?0$#6B|Dwr?3}LA^Gy9F%tZNO?f6@(%>XUow^53(69hG1>kAQwM z$X!73;0=)D4Rr5NNN$++>kW{T7qEo$sWDU!zF>sHV1{v26_3X}4pR>Vhy;UYSYmP_ z;nU`4*CXe|qR5T-Olc+~O#FUBMa;=L`SbhGud0}c*NZ0<%s}5>g27yZ8Q_CAKqNQw zWnS_5@SU8Cs^ZVdCD3htLi8snKSe7BxOGU9kv%e{eKWb|%E~A^dyZM(+1N|mg11p@ zwNH_WkwLH>c@0 zbSTAsIYo3f50NsLC=s~yCJxPTmaVbO)@dg^&&*rWX?Za>VBppv*RA(@b1XY>>8*=h z&++Uk_p+Iz%PpANk$YA$!A-+PwqYc?MmI_Ynw6XE3D0cc(2X;m9S?M?J=bXMc4?>k z{CeV0cJAGql?T8X3V@!II@vxh+1K6n2FQk+n;QvsvSDF4Tg}eFM5eZ_9s2!e%Pa$o zHd4DG0A_g2Mgoj@j%AjWNie~eb>DvjTI_=x+vS}BFCu!HHp0Cq2_x$Y! z4BY5T^c}0QM9b#5IWL)nWIf^5{l|?tS>ai>e;M4`NgkDHzDDqnxpWx8*US~pY<*7P zY4pBPEo)hNFdD;(_Ke_e1TQ20GV0F?7n$as?Y%40e0$Qn6)ZCK*PZvR;Oj*Gnel=Q z?Ks&>GObfo9%qs-PGn*CF^p)?XfHLA1y0U7q8Z$c-Z7IiqMtdDT~6hj5pTF<*yxET zqYzRvoM)mlqtC47VRQy}Dy>O z7g@guy%^EE8?@sFjGc}tLvJUWS2Rx6t(qS?Ql(21zFS|;PT zs4O#k#>!32ir-~Dc&uVGW$3~xXM~-SvQF#uTEWTb;m&R~7}0oNJ9WloWwaAG8sS_d zHri?}PCOZ8c+ZS)-Ar(1Mte^3LCCI8mB)0#YrWwSD^tr|gbwY> zL$^yH%hHaFrC4S!u%ag!1D_j}8tjCbiPER2x3b8^T~=0^!NX2Y38ykahX0KeEuy)n zM4IX*1NEG=tOi!5Id$O>vHTe^n#{N&hfurobhC+QHJ$WprcIWGffb==65w_Oi<>lc zHv4iqo?9-QnZ|KTyPxSZH{_0phm=*{b}Zpm+Hkk{-6-bI&N_{rGh3gL)uZRSdye6j z3=zp&V5e^*IEw5$qBJ5)XGRvbp73z$K_kO^Rvt1&3C=|3lL;?I$*9a=BVxHT;tw;p zio!@ViKS8hW?lkT7he(liYBJBf}7b~yL(E=(3*(V*GQhocqN)$UPSwG%cDg`Zp&Ix zWzN5{d%fuMvfe*-yg|CthKSs;gJ01-Rkn$G0UOCF5&0t{!@BdX-NekYGSiF?j9`?l zea~o}c3>@XPLbKeRig>IVa1fK5iC27Q`b8?!mYPM0nQa`vRws%6ZhlZfUz3_?`+YA zjNr0z8x+yTyWwsqt8}p|P|YrnGV8EgZ`(*#Wx|7%b;T__$Yi26!%Zd}%EH>nQfJqj z!s^0ihZaN+elivjBU&(8lbKb@jLt-OOcW+|td(}GfKENbtooCcccT4>T1#cDs&?e4 ztk;5!6kpxvzbPI)pDtc})XwcnVn-^x(q1SX=m5W%gC z!nP+3*~OhmvShowEqb4^3RMTif?2+LuC2gthvdPP7~dWR{F3*Pe%OW^gNcS zsb;`-+OloMJXcDt{UbLSYy7#0m)^=Takly3Tuxf!rc%YN_c+d41SxVic88>B$o97IX%V)M?`$epq zB6D&h?%68ugvdokcHLS(j;*)W@b>^KJ8N~@72S<~?OOM(5*KCb;x6(`ro?EO z<|pEQ?=()^4f)lkvj6}f07*naRQj zZerX_Yj#s)hwLJ zu1AB_vrhW8qr8!+up&~z){J*Wo0@Im?54Y_Qv|rp5WNi(H|CkGETQLO>n)o2NAetT znsmwzoMmF~?DipZi8$Gx-FaC(W0h6gP69&_dEu7T(QHm434P4mQLS7QWiPE(8HHte zpl8gtnG!r(S%PJhJR(&D&V^=m0TZ>bXG125z}L)6!40pHY{1(M*Jb zQ_&D4Ggo<8IEW|`dMX`^EdExxOk|ZovZ0=$6_K3om6?=ePUi0<%X&6KX=V7%ttvWp z_)?}%ne6;-RGzZ~N0FR$viB=186>lYOjXRR<|jiRsuLpkd$)W#g@xPhBbmm^riIDP zKHV&5Ct6nJY}3R)n>b9(4q|S&pt&6;k;&pN>QXM-w_AK`<%Z~%)iE2qCz4O#(%X7Z+|70XR`Vz+4|8~J&x;N#>OBRq-Hhg;r7qTw?t4INRaDf z&$sJcVE2Nat!78@>;^r$J#VX=09HAEoLbY}n7^pJ$kdn9q;Ym|Y6Lek4+@zv+?u~= zB_y|Kz)oUPBRGic{h7k*vf()?>d|L4ZyA}Q_LjSCwizXx!o%)-jNEeFTzhZ3@Vf2M zVJH6Ei6;1L(1vW^*&5?q3_X$2w)RYJBvad01lD%lIWy6l>;YD^dWum$B3YYz@{P>K zE1Tp~Cf3cZ_){ZSUC}z@vYD_mt=VZ3G$WpHQukiA9<^+rqO>T212cHZ;v^HiMeUTpfJCRjZ^qxsR$jBSniXcwc;l@7V1ny?EZlwU0$#O4RnZgb~i1cGO`JN1Z zGI=m$%7N|tqByNuVdjK$XKUAHPShq;T2Jykb$++XJxB;xV1OR(wo_VQFKqu#Me$L28ou* zbLw{PCVg7Dqs#EAXypg1{nt)EcKJr+EMNr}Sza-taVN=_&H8bAuCOZ`orF|mL+05{ zs3;>s_rdPE#)~{U3`x`r%FliFw1{K?4`mA1T(s7!1ujB1E z-=(oViKgo)ii#(Y&!Ev4G4aAtl;wJ}e!2Rm>v`|DvjOveq#O;9Swq`%eIf_xo>p8Z z2O6_6dd?>sN+Kt77OffXh9cD{5sj0%o6S{p9aeC$ip>{=iAeo-nZ8A{5{tsyjxw=l z!bur=wn|py20!+MuhEz?c``E5vX#Qf%?b#aXuwG#FE`~=Po;+&2YgX@$Xswl;p>JR zHj+th>@`m4!3sY{{Tsntj}iBV2zXCSCLO2qSPLuO zeU*cq@a5^l&U{r%(b?I?!DCU{;~M8&OGRng{yvY-SWH_&Bd4H@>V73ekL+jP{=KYz zubH@(;EG8XQXV?@rf*j${hEBESGB9=$N1BcJaT%+c z)6$Ag^Fp|7ovH{vR-U~Gq$tt?4)U?zH*b)%eCZHs08eeuhTttiIV1tyMcn#~`dU&i50i)ffSi~&7I^As>{ z(hZzH5j-9b=T_5cJAQ<@ue?i}9%0bMS8&U;3&>FvbUn?1&C8kh&Ro{7*-HP)YRX4e zoMZF1NA&+}|7=;~D2G~FyA}?&`WJbp`)5|xT2YIN$R$rigDty8k!NL|5y78T|JkOG zj~hH>tUt2wusUej3B7RJ!^2Jd^@jYggY&aVf7#?0qx=hQS-j5%JkI6)OVoPoL_Wzh zJMge-*^sBbA+JA9`|C`LZ@=Nx4aj5Pt~dj#@;J0}9ZfmIxq8wBYWjpw&}rGa zkQZierfA~zOdnOov90rY<*jAxJ03?-{S?;><;tr+!RVTN6m$}8huE-m0rM8GrzHvg z{BkasG==f~bUs|Pgae_WTz&aCstSWB3LIWPn;GxaQ$6htJ~6BauX+L&sTiGmma(zj zN7bP7x#`*q$vp)dFV!PPPzMJ}n>4g0QB;-Uffq3S`cG0<#!b+yel_=9l zCzB*&ZFD3QR8N3NB!tiB0l`u$q8Ervzcax`MzgJ@5~MT*pWlx{=7e)*crly*NAGtf zwb8V$&?L}Er&6Re1+UkOM-_{y)3p@wL<+_0C*W13X{D==G>K#iR4;z7nz4-Ene#vM ze=B)pg-2aWlT4;jJYIa==8@^yQ)BCTS9q7If(|ENF`@?}`Vf(;M(_}k#Ue8AblUTw zN*oZacq-HSbzMV8Ic*%-{iUayxyZX#I5E2b8NF*4Css0DM$utcsUyl`BHmJ&T(?CJ zqGqz*>VRv66FdEj@|dXiSog$!i~fx~}8%d2P{< zoA9vPzY`vC6W&hw(X6Smot`PYPj!W=BuOUXBoYbY@faN~+t}L%s6ISel342j>UVGA z-FeG681oPcq-bqFMt$QEqMDAPrr5b|3kRE;(R4shuq-fl{8-HFt)#JxgpeQH`Xz3J*c$|1D!njMX z=Yj9t%cWxn;zy(9$T9Y9S<3ABAJP(sP|!>J_P6=%<1^VE^U{Cl7>4%CqqSibFFpDf z)*nftCF4Yo?xC&Y5S>~VFtvCGt*uQowYSlkOmJ}Des*qH%ItZ|IiwXca6lztkN^1dZ1#1;(Jk;PJ14W>MrDA^nwIQjLQj(N^}ZUBuFr8#o-5 z<1I6Jn#o;K)VbW#9~HrT6C|plEX&cMxrv(tg?v}j51YcF&e{6o_5Dc z_xUlQ&KfeUC)};hS9a^68_{TYI5jjh@bJSAlS-xV`~CR+egc62 zfk1$R2M;oH=1kVDTbGeG&0Mps&lTotv4V$8U!pR?39K{mtSsHhj&0R{G#caCSKsEL zN1m~i2_pCsnV(E1e3{BMB4f!^m~gWamm7U~dkQXjH;9v;cCd2xJR0+Ycoay+jj^sA+KDC8s2(4|oG>{-FNtU;u|yhG(McwgXn2X_+f^ zgnq1}m9~x;Ix5~kkVrT}z^9N-Cg^N$Cwjsv9*#r^`c>kcAN8F`Cege1O`4A5$7zqJ zP!yeXG7h8wK|fkDMm&+m8w!(~6U6ILNX0v7ZS5eL z*710QoOMK^Q*7Y6|eQYkNO?JYDP*3c9`k=!t$fDb+0 z1+!>8iLQ7F=jIU(dhzE}Fs!12n(`d9RGil1?dV=FimsunA@cKrs3&PaPZR6xq@yEB zN>}g)LWIL1bmD+UEZIqGOEbhhc)Vc>3d4ASbi9+}t?i_A1&`NHP9#Fer;vzs(iu;o zD3DGiN#i3Ni4Y2?#5+2OB{fu4Cy_V-@BDm1J{5&DZ7s*U-c`MXBDq9@Iyx!RX&~8? z$TX6%DD54cBvTry&rdj#i(g5wcg2hR?d1&&`g|GpUS3Bi(N1St#pl(C#})F6^H7pe z+FCnEYT)&Uh(y8!d^*W^jP~{p5-APUb7EZq56R9BIuj{W6_W8Jn(8MnH%OwRooG_W zpOZ^|ZWmlX;scFTJW5-8XBWj6DQM{6tX(F7j9-2=c#(H;Wz3i{hF&~oG1W4z;G*=iHdq zbYig-@py`KD#PU%oewu`;CFw0j&Wm#OU=zHZ;TndWtFo=^lGN;Ga5@~PZ14&GlGxR z++<~!SA>|w2t=Xv@BvaS9ysCd8ZIrTqIwKBUw1yFTLAFo_n~^!B@8SIg4W$+5Tv$$ z8Rgr8?A~#RmcgCG_iUrRy_1>=qltuqR9tpDH&yK=p4!FwHLV;w(!|z=Bj7IqJxMHn zjAp%ny7D?k^zF*ZS2JuhR|HE)L`o=3svKzCPW{$>Oc-24NBw5nJLB}5IGP;4@5}?r z3D?lnNkZ3B96#R7_T9VD6iCOTbhIa+PbsyvWhcN;#3hqPQ&AE@jn}h3o<`3f!{kA^ zpeT6!KKfmF5oL>BKs$bf7<~lUHNXWI4W+0!7l4Y3u4M4yO{_Y0gig-@aw9$tx31!; zm!gasR!3FEMcn<_JaY3Q(wmZ%duC5!G@}cdgN2=orAQ`V(G0h;hXpqnP)3N!#N?V~ z)0d5%>J0@=PeItZ<6U0cs}U+1$N%@M?=vKlruo`+Jo1Z2X!q`B%b{jU8W%I;`B|*p z)k>teim_LIlIyM<%J%uM@$Q;Nf+3CFJ9p7RDbsHM5;sjALT=D|%55ppwvV@-{R=NI z*n;l$QdD~ZH{SdyCXFm$-}*(o{^CrQZaYA@d@z%*yOn7dSF`r5S9ovjenO!%yLRrP zgEFqU<4fFh`Cw??z)OF6gqfQT(Pz+DYV?jX=|bzIe)W7_eCa)6J}<|Q?x)RP%_ZZ8 z5Z(D9tLvNTJ7F4k-+Cj*%{kv+UW>vd)>_<#eQ9tMt? z$W6Ci$1r~vT#s&ehd&*7g`Im_$gi2gH@|;3BO^&x&zZrK&&{GK6{5JTKa+31mFX9h zv3c^DNrjOe81Cj{03hJr#WNb6?@cOZyYw zzm_Ne_fg*6euzM@f{Smsl}}AS9|iDu0RIUYeuB1A9Zh_=;4NO7wTwN@ZG=k(GWo{O zaBtSZ@k1(LJlMNek__tqvg|-jg+r7FjJ>iCpwJIvYzZ}8lk@3X5_qqu4aS6+J^Q^!}Z`i+-ac!I9? z?A%2=rA)j19&VakhjL^iFaPN;%-nd8qCsQn--GsaT}RP7sb4*hmu9WR-zSe_+t<_B zS;X1McvN3ug#?LhKp%l`Wmk%A;yf2u=0kR|ZnrXCphe?BLkZLG0gjm}n}GDZ@+f`#fhN$m=1UN)v5u z2ZG?qW$^IJ=+}QdcwqnfrOaQj92NB=<$*7s0>#%g{t44gu(BUs_2e@u9;JXhzd{@8 ziAQ=MN2og}esLIJX`Uv^?6LW_9{kJ zMr;w3nRVNZOQ38$WZ5;Ceed)TWYx|_az&Z!xS3)gv)N>l*#R8dvI=ya!im>1B)2Q? zMsdF}{OhlNK}_+GIJAwqZ@N4<4d^<7UErYpE_NVdtK` zy!^MhTs)?VNJT!XqM+*jB^2jIpm__kX6~l4x`e!tPW}8BSu}hE9^X3t@VB>U_4Q-? zg+aEhTFsw-+D7H0|HY`hE_tQuK0?0W|IglgN5^&D_r9M~reZLI-g^gFKoaallt_`H zie*W*WZAMU+lk{O&U<+`zA3My`X+uW>%Mh!({0CbY+pyV)kSrRqG+*5>>U6bdhd1m zIqweuBnVD9=gb+3&dOd31UO}%y?<@*{oB9a_lHHWAXz+EB^d=!171SpkdL~C3{AV0*o2Gun3Z{Cl^X^aoJ95cC@T9YcOWi%p_D&J3n4zt$o6+7;vWseI zs=w(RRYKz&+xI5VzjPF#sF3n>KfP!6@oHWvX=~?={OmaX!YV3q+qrV(9sc#5`}od% zV|@38g9x4?R+nYdapD;7y&fh#|0^)wN9&b#((;PQNiV|EdyV~vj#E{*iT=I;u3l=z zT~tn4ZWfo@+xgiK_OW%@E?)ZfUvpsGMn%&GY@HYR;ME`Dx2N&xvRjm5VdM;4Jj#K0 z-eSaB&-!&`^mTP{@V!%1-Is#RZAX*@TpkA&Sz)l_8eQ!H#wUuYC`o0o^*z4-{k>T8 zidbHrLf7R(y!1+dnJvrc`CvbN;Y{k6BM_GY~@IWtpS1&_$F&WtzbabBQ zhu^(Md0i3t?r|<1`UO94T+g@eSrC#C{nuLA_u?;^O3P(gzLnwjGwglaLsr^-3=Rx( z^-?n_1xw_5Wh!U??r(Ul#ZP`kCDuSUr>{-p%w1v|RD~Ju6j#q&Aefd#Zgw`VsR7>p z=?i#L?c|Lf;Q2RC5KJwlsaB@H{W?GU?|)0~-~1WQH~yYiPK;2!`C%%RWKswCI-B8+;?>@wCn{8Xkd`zN29|=O@l94(!epQr&LcZugDD|E;qHWx*S;v{`c~&&eT68s<{V z$6Op5LoQ!Uq05Cu9cTYrAJXf!vwGVDeD?ES;Mr%t%+7|a`LWN1(F?v={FB2sqCdT( zy)>UX%EgXeW`u02@-s=32f1+ZD9yu@h=r>uPjRqNy>Nl?lEp$!RXOVPG##f-F+A-D zK(<(Lx!qXBFr%Xrj8BK7X*Z}676byL1Nc;R?p&{i@z1o=?+0!H+fwFm4^Z)WeRya5 zOFHy1?GF%A=7dG@jWZsY178Zw4B}6#=hI*O3ZH-SG49{Go|>XGM%tS>@!q8-*(xuxECbJid~YhIy1XLO2A3<`yMODUW^i>-^!je}@$%dB}75Ik)KN?8r1WR4j;O6jZZuO(QFt z$`~2w%nZKDdMB)fJ?SUT1i;n;8W}xs)e5EMf9rl6 zHksg*4_R=qZOwA(*KB8FV>Lw?B8mdxdE+E!RI%gnZ}9E^`V3oFmq1tnK}8lpl*{?t zZ~iua@E6~tE;j>NfMH1U6b`@iuA zpIt>btkB;(amy$j*=dw+TFdekYuV6LM|P%b-g~ah$+djDT+hi~h>&F&|Mf5blJETa z|3On)9&+VOe*_&a~b7x!!-Pim)o0*TD_T# zRmJ2wrHFPQky1#B+Sz!|S(+;y&sG~9TQu7oZ=-DFKo%{ZTJPEu>tLOzgGbBv%uKzD zCm)jAeklL|AOJ~3K~#Fipw(GqbU(24U~AR|O|0mEJE4<_>`9_IJ&f)j%?|00g*On7 z--+@y(szue83CNX&`WVc5sowuYrHsz$2PTDaPKnzs*o*s`nyx5GkkcADPn z7dhM9%6Ry8I?Q(hRu6?viSFKJPF${Gb!i^r>=4Z-&M|GZQdC-ujX4k6%+v&(?LEjI zh3gluaIJeBTf^cGeO$S8mC_71g)SJre3)x9KAibEh(jm%;g60}vh{O3y1s;lwP`rr z(9wMcqzJ(TCKxY0*;Ca9Qohl7cJ<2)ANlcP*33aUMmG+98h<U97QJ0^3%OWAD0-`G7Nb`{DPQ{U)!}i^7yrK)Y z?*ss8IXT#58Nn{!n6@u8!$4ar=e+}rb=ev7%HX`&uQkO%ipPy4dlxxI=V#+i$7Qi1 z%VA_e02_ouzB%xo&>)B2*$bfnwbd0Am43jMh@M#g=Rxri32 z9#WRbwK6%zl%k;8GVsU(l9dWHqYOR`Lq|9Nw*NjwmFk_9(0{!=*AhOg1)X1u%*L9tnYWo{?AP?BBP610MoQxuO=mHK zuF>?x2!BUL#<8TjXt~0XFo40Ic+m?IrdIOquERoQ6 zJ@k!5%S1{l>XoBdQ5bsdX{^5EHCZpgBXel(pV)_gfrVX>a0@We+*x_yqxS4_inDXL z-Z6qNwVL`o4-Sg}F}lI1m;ALzDX1jB$2>aFWv1|xa6JU(1F8D7H{WM z%jfAI4lnftGjeG^M|-?9Josh4wAH~o-~C(8&ULqFyiua5l$-Qgn2~JHAVm-ex~q8f zna8jWws88|7@7Hn$aLJsZ$VI*nh4>rWYDy=hE#Q$kKaE?%gK|pKfHrVML`9o28Wpr zWX_L2L?8r$C}6QV5v{3|Hr~&Zn=K&=5!B*J3qz4_mptxwU-&Xb~~$Y zkxPIGaSB3knx5w%0SEW69q#wlD=l-01$7yMxL#w z%9dH+fLiDtuTqJT6pmQ5bvPW%%*@>Oow*WnVH8C{mSxlEkZ1|DMEPQ*dX*7bi`QqO z<3J5E?Nj*R!2A5{C;!HMyY}$J(_iFj%O&1@=WPm$3b}9BgQTVu!0d=7ok(P^M)fLQ zRUV`ENh?rhyp$p%w%&-%mbEY>c9STqsb{rohP)IzqHybAZV*?r;?AvM)v^G2DGN95 zRXk~25$Ha`4qPmR~7NpR7 zy$3l}LGt9V{GJC9T_?CcIEOY}T(gGKx@A;X>xLq;kXkY*mlbJK+b}N^X8BlAvJADkRk=F*eVt!m3I# z?GnBql+~>yueymXrEWyY!=7E+INH+9^z;w|vjVAkwbYi?vTj8Yi8QnG{>?CKcd8|O z?sv=F?nZt|x$Agp*Cw9Zf0&>B!{2kPB8~pGE`;Khtlzwcnw$}iXIkhUxXy?B$LMQq zgHR@cfS-^GC?cqHHQhys2=M6}IL`-W)~gJVzHr+*f!1&86VR<-0I9&n0Vvl#)YPMICv^-sJGR zzu>$u!|1HcnuZi?*5JZJ=kQn-`jo(#R!E9+o{{S(**7)K$$=n3rh;!ahyw|P(A-xA z5kU}db)+uPTNRMzPt(@?Ms}}jVDI6>yzmk@2F`M6B9C2Q_pkd@LRml>tL|0 z1N({{EYC|NElp&&tC<7uUZtbG7lJarU=aI!AIf482ru%v3ybItAjvpgF0$=D2D{F2 zV9HNx+bE%oAbx*v?!bS879yfLPasD=+nO3^fBzUi_?I71X6>hS7992{vKJcR!pV0T zZa;!|YzU#Ck($cYWO`Hv+V}F#-WRxjOyu&FF48L3a9>>}Lq9mjzGIgt_DR%PRqQq! z`4u&!J0#?k6ejw*IdkMNvxPDr9XWuSUQAtiIx1H3D~ia-Or3Z3Yr8FvW^0Vz)M*7y z)q1n9H;PQ_4S1x!^?>EY0;Y=eY@?A}vDN}J9pgq2?X|AuMyekeT{F#yn!A%xeR^&r z<5eeG+P5T0R8&-O?AS359XfQoc?yM?nVF%qv^1(b8>MSJdlL)L%_zOKMqZd1^_jE? zRyDw|S0%r+nzXbu4(xlIKuDpdqYWjjux8Ue6fWC9XLBbmHKa)&joh>w<#R0T2qSAu zywAkK28o6fvQ#d$+9o5iBx`*@^bTdJHrz{P4DYF`st6Vbxz(F^xO&mV#1u-a*HBh- z>-Vy%*RZpC&27(g6*clmejO8&vj~!n6t@#mRZts)1dy=HB4iY@_P$(J`g{Zw0h`^9 zZ64q+==0*88K!e|3a^mC_J$%{PHW70N>(RD4I9a?X<~L}ia-b~HU|!;9g8RcbvHg+ zzIqeotCv#1M%9Mhl&+XyVm62%%D6mf*lz6oB|KTBY;#uN3kj7@qGMG?v3!tJugI@YZ$q&*No%(76F<3_Y7th?u4JhR!PIkVaM z#m_U9n$6Hm5Xn}@vQ+^TYcXl^Vt!c3EvaYM!){7zbCDg;uzDLdZ!Y=ic2dN8w(JB~ zWgZ2!tN2Vfj@L`At;ITa+1_B|hj&vUSObx!ElYEyOckKoqv<9ilPeHOvEL*(|%TziAnORtyHlY+c z$J9JwS~vaR`I~j29#kdyB^v}dTr4n=dMig zs@3cc207E(i7%v3)VPihS;pNTbf3->>0XLQ1cO_a&m{typOq?2s{L9&rmzKO4V zA;{B{bmJlGpIu`^|g%4|216lBBw zyD5_Du!{m>Rs)YbB$Hp8epBczDHK+(<;gvhTpJH#ce}W!ycS<5lY+D~avRsPCtapE z*NrH{x^3I>%w&<~%woqgPcxO8#o%-R$yP^0V}P)wh{aFJfs4DJDCnDY%Q*5#r6lO%Sxx}%b%w|=Ln-SK4x*V`LR#2YV$U-Q)Ozl zKEwmIHr)By)YVl|U{SbmZHS-(wT)Y-Z`wp0N?q-88i z|4!rvOi$lhpRIM{Ys6tSX06Lc!kD${g&Dc-Mk7S@$lO8`MUl$NN(Ki9 z>FMdYt#3(^C@CqSrluw$uwN{l)uZoP>0s1Jq%~?HQCVN;TMvL{JT&|0&kHaf5GY!{ zfybZz63_kcdmMP@btF+_<(jpu-SIHPAsaIxWzMOuVScg3W)wtE?=8BXN)~z}jP>Aj zn1$n^8NWbLlskhqU}7_7_(HUuK23A$InH12#!|ACryt%#e!3GOfiWb1`~i-=@*)S0 zx3Kc*FR`tm3YTR5m_8}~84>jV$n95!hfBvimjkR24u=T_g9HKr{C+>v)6-b3R?5oC z49!zjRs7y*{2>*K)sE9{z42Wo93m79fhc3O%DU+{Cx0q_?+js8!fJJ5Sp)|X4u=Q? z=A3p`n`KG8_Gr%u;Pr-)9FE&kZ}co+x7dha5N{xWXivc^MbFI)D+;0{A;z0{IEc>| zK$Wc6Z1SS;|L9}7O=rVl{DA-gRlshuVv(gdeW<8v7@seMWVK_J;>&@S^dnUb5%2{G z2@)xGs|KA?2>AU30}7(uhRq@`qF0!3SVa`2$YW9!!odK6pn_zz-KZR+go6ZwVMNJ- zB|?Fu{Nye^|g~vtpGc-S#e7 zH>Qa`KarcYM8*@*E*QvFPxMfp$e5E&-^lj;&g?Jl)ViIFi-cdbeVCU0vsO9M6K#~J zO-i=R8z~j4*YWe4zx}t=ed+7i?J_RW&;FNw!mBU5h$k(LXMX(~RIS^=Y*3}|!bQr0 z{ruY39xyd>MQ>kvF%Hb4nO?jNqw|cn4z#tk5e|oOxm;MSR;*Sl7K;T*k`P5PG6sO2 zf!&GQ%4l98y^D?#4&e{mD6LyVP18!!Qysbv|FLR->Y10G91T^K$SJL4g_=T1h8v3z z0Z?p7zscZXqM=st@?VU|K{8r0LhiI~z>2R!z-WRXW3}HLNBkyYvD&fP=I3+E{6!=w#&`q~$!f=LSuzGu zz5yf~51l*G+?Uc_l4T@W_tK0Y+$wvw(@G*OJD)Y{8mKIEW3yOpMo8SEZw_n``=DcE!Rd49IQCZMp zcN1x5Id=3uC*E48<-n83e%`Eop;^E6jw6;n=)r$VWV}Xh>lgoj;X7KQd-T$8>FX&e z687*U>8?yHl7q*dewvcPTHj;MI^h=*aJ2V5`S z*z{IoNd#0?i*40pPkxmn0Q9~en3-Z~W)^HN+%5+eNlfaZU{(wHW|<9yu{j)AEi!k@ zQO}Gp@n5yW>z#H&+^u|D+MnJCfMkp@8FWh|-|&-?3B8*mv*#5lcg;+h(}LiBH|j_< zdc>lWnYTI+!aF^|=$H?uCxdjigHNi(%5RL7hpYAWZ*kvdkZkxWUc4PYIkbCptoJWeqCDx zKr)PYGH#Z&j4|5#7N?8Ml+;gbBX9J%vfYW>e)lPW83@5g>nKiDZ`e*iW%6&HW5nm(y6X4($x22eN3dfhf!OQ$X>$8ceFU3;#DZnJO5}+PGr(%5amv8s`aD} zB%2<0+6nQioM-<@9NhJOPfv)Bk$(Q8HZ52XMnNjIpyHZ^x~rFW@ld*#ekPIem~j&p zFQ+XYFOA+5MWVw}q+GrEpph2YXtHL;jfBw~vq)prBI{b|t>u;>8tt{xTu;5?L}WxO z?Uuf;7n38}Jfg{q-sl@Whkw0#qg9U00)^F@0~^Wa>9Ko8Y-Oy^8kxTyXQDQ+HB}c4 zwc4skq320Mj5o*wEo*ly`su+vFx$p!v2ls6A9}{2cWsPCCxGhe5}ZyO0|O(>%=&Ko zyd;Tu+%EF+v&qTM&}{z`jr5GS2Z@)0p_QNUWYCCBi3W7Jl=ksJFpbEUte4<=jfK&$ z7b78$cOsW7nTF5E{O?3dW^Q`2=6NSd6d9Epy&-;jzME{lG*gzAmPbiMeqxndNtRw~ z*?{S}Ns0E_()liZKiWY~?`^4;&&ArXnQ=3w7ri$go`{~Byk_ZlG#NJfJT2wAqRlJb z#v{@uLrb2y7J1Ps4_f<-rQdpZWd!t3Z(gX;)ElGvqc=Y^R)1RSRvWRA@$`8y?TqMH zy!W*@MfAvZvLgJn*eoqh?RfStkxPq2=#WU{oso35cuw|2#vE%;qxI5Ji#{e}ozmN< z-EOD6yqL1GqNubJ1Oag#Jl5!*LhE?6t|5Bum>xU`E%IUn15C>^6TQe1BMD-%l+kR! z94(ADyXi3)iS%yn6EXCOfKx@gUAdEbqqR(zmT^V%c5B&;MDrk< zq3iKHxv}P^*DmM*ol9h%(LNLDHq{8-;`P74*M*-*--{&Q@k&NTIsh+zrq(fQSv!}` zC!UUKk=1zNi}7wPV%;X_;aMbFYQ2%xDi4W_Rj*yrGlytAi8fE8U{_{*R?mA{qg2eE zgWkiW(Ued<&(cz2E|QKLu^(FSF|@8JvE(|E&g$WlUVU8rJT2?5QJb5nu500imIwl) z_TB7x>vgEblIw-Ty)4UEES88rvMk?l02rA^G?~=8Pl@!5cx#nb+D5yT*J^jPoTc^f z+Q@enH&L%3>J>b_N^Mq4q|aEwVRpXX-9G0#!8bihbth(fkURU-B)nU2qBP82QUG&)Z`jtsLycNaT3VmUjsZo*^b|3(YRi^OXq2hw;> zJ}rltL=WxpblIr$JrOkcSg*(1WEnX;7}aqtb}Z3w_C)9r?{-s*bJ@rNP><~Ek?(lA zto7M?4Wo3Pc){S(smuqG;mDkXHUhS|20XXEXSq$BA!LhxDw2dhF~%6U`d5Srfh+ z`n*%XP`?UuHu9ZB4~L($bHwNdAz5_R5-yiW=yf6>K8f%_&j!-W&2%CgNi8>>cT!d( zeJ9!>PwNI>OYT{$Lu9;7TqKn2SkH`i5Rdf#NQd}X2Z?Co*DLq2HqS=nPHTjMo>ZB5 zDHX|d1{=A3i8rQ5b|lt~dn}sj;gy!C7_I&5aqz}FWG&Tqy*5P)J!9DyJvK#)Oqm5{ zYD900=!6kHzY~>(^faxuK9;^k(>Xm(f@n9KTI4B~z9&i_E%T2AaHoZ4iONl+wNR`5 z)N1z<8NZ&$@JKi-T4)nb294@Vti6HJ@kOGK9vh)|{aV~av(W!PNe9Azw!5p{jgFFJ z%6Fnba`B$?9|;stZ|zevz@79Q*!AAP#*+;rvS1`9E}n;5kB3;xp*L1et={~(Sb3{P z`;7EntlP6l^wS!4xRi%R9LRc7dyE{2jG!Rv*(mF|T{DwDdY=)Grdk|7@$yOI$#*RI zi)Q~5&Hp#!)=sN^F=|s1<+;|+n047XpY1=} z-O}z&DQG$SS>g zugTIMGyDIf`irGwiQw_Xl8r=dn-QC{^#8FAz(#G5me=*%W*YsR7TQOmhf&;-WJDaq z;)5A`pGZ-9M#q|H#6~nZG@G9Bbigbbk2Mdia;*h3NlO#?&vw^0GjiXO_55EYTK#AH z*MPAp57aEqc;{>(hH)|U(a*& z&d!DRouBz7l5&_kWH%BcuhDM(kt-n|$ z5ATHj#N(&g{Tb1Vc)FMjr)R7*2faD#Mll$oRbhy>hQzyJHiB(nB<(7eeCu&iYr$pF z+Mm`GK_l|0RaT;vj*XR)U_`$YNh>lE?G?)rqX#HgD?Ri^{l-eWiWFg{*MS&od`q4A znj-)(vE8Y|SF)ayEHFYdK_Q|UgJjSkSFC=~#^1@aY|Qyxhs9e``h6H*2g$^feLQ>7{{QdmU*Zj`p|S&`hm2W_ozDST>{0 zI}t=~BlL*&eKS*SqHXrH+-w@TX^d9|#4P=ZCr7dRjFexib>2pFQj6nIk4|cJh$f<+ zMrB*8?TEIK*D9Ow`ZD^r-YOS~>gUoqB%+hi%AA_1U$N+>r+S7Sd5njJ6R$5V;D+(W zZ3Ig~>t00fdJ(JNc$Jupreztaz@v8^k0o1L_ENg40Q{=lm})7%qjfnVny5D4#Yf2<9&&+=BM2mH+mPjpLJ-4Ir-ZQH_TC}Cf1~vcyAOJ~3 zK~&p(qv-frqZ*ceUdx%y)vw)0zjl^#-o7|jE6+V8j0VD_7!W4(d04S z4WHS1Xru;sB4CAjBY0wMmbHw@h#n;>JMr{TOT?8{ERR^_HMQCdJ#wm*-;o@k@pu#~ zdQ2~0w1Tb1;`>rtWVD>NmhyD*_-)iK>6HO3wkXz`tVIU(lpxkq*+*|l;Y4g@BC@Gv z-qGd|>GoYO2zVlEn;G-gV}~NimLABZK(o zG#I0i@ab4`Vw6WlQWzq=7cB}R8IdnWL6G8w^_iW=9*<{c=Rxa{|3u!?OJ6;kNxhX1 z65)Z7DmO*|oR-oe5#5bNV>2;C^ro&Dl^MO?PXvI=47;SqDH(~Li5@!4h&qcUpNTf3 zPGzHb3uaZqNOX>g*af4uzz9#ZreVa2mPyw7ZdOYK5YZ@)%-B07Lxz%y0idPq(kFqS zt><84<|ZiG&6Js;_VEq|dOh@dZ@-M@awZbuXGH!Ip?56MkVJ1jV~sHuI=UJ3)sy?0 z2<^<4b0d1Kb&QDu3q^W885^lY4-c_6#Y;DnMtB%)ldT7BUoSY0-ts}wbR^axH5t)Y ziRxG^J^Q56^o%%;qRlCuyl4r(H?k&ZU8l8uSVB*v(}bq<4(rfmFV~)mA{Q; zLyXE_v@`|1(G}5n9qke`5t^HATa4JZWXP-$-IKK#zIg9N`<&j*qLF84F?i9!z#@gS zXa%4!G6y5ii-yP=?KLByHL>Pq2 z-%q+%T~$$41w{oAkR(yJE=77TmaN6Q#ffDHqUG*IlAUPtFk%;V+e1}F5d;L{hq6YC zFwhc08;c%V_@;&Ck!*+-+0<(n*BhjG)8D zD8U&9`uiCT*eT4w{4TP~d9at@Ld_7YYd^2Nowhv*+$fvZx6Eze~&&F=CJZiIl zVa9tp=pPG^U0O<-%YhU@w)NPjh$w;aM*^Rkhd#uG8nYQC3@lGTcV@ghFmf z6XRbB?bovQ55Bt_pMed1qB6^m6hRgxnkP2 zM8~2>=i;peiCnZLqVHzx-?iA%fq?<8UcJiL*w}4-r>3S-TU(3Q>m@BMjr8<%{j%xp zhhqxdTNp*xfsuX~8G*7ouuA&vpsJwuokb99A=d$ZKZuqaeZ{AZ3fE47wFDtQ6J%}Z z{>eDonxW&;pZv+6{Fz=r7qbs1W*S8^#$eW1%`{3&$EC-co=7v=M6}ZLzDpnQvw!{`KYV3BXU?DE!}ov5 zh5j(P`T68#x)9=cX5+mUjYhNmS9$*z|HP~3$0?|5q`)OdrKQ$GO1$WaXrb|%H=*hb zmyW;7KmKq(;rx156uWQhYwoi?j=u1H{{CNo!N->bHgByb)nP@@AveMCtGxX4AMxW4 z`zb1`MCv-v;g8NB=H!r;>OzV^r@82Z0Nt%e`2W8BL#~Gk*wj>f!xJ5kXVLg-3~VvL zvFHAtfBv_3NnO5%(wsD8(YQ`UqgSB+IREfhf5Qv=kCVEliHV>8HUIc_8x8kvpy#!} z=6^hYn6$>7)MQv9_Lrz*FJ4qiq}TO0KH`OYniYkiC41kxJ?r)S+Vdyf=p9?^7Y zDX(JjG@`v&(x=(Ziby)Em8Y@hzW6;od!cx|)Z}Eof)x#tLn!{q1Z<8rx3NlCf!8=$$lnHOJt5k*m`t*zCpQ#a__dl0_W0nau> zNyS#+!`I;7e}uaB5d@d4pAR8F!h7F=fkr4%QP01HFjIt(6Q$SNiq+Oi8ehb;ASoA z$+{iC6S9#^-fGRwzZ>XsH;qMWQ)asO`QQCB2m2i~Zr;W6+BEu3o#Lb8Z}ZcTO3ojA zft=7do!2`UnhYS@Q^_qVrXV|oiN0=zCVa@U!sO&MAsm!cRg;(IKoS=g;Sjx-E-@Ii zQC44vM+z`D*g@Awh!mShYEC&hzARi;2+oev)6qfi@D!pom4dP|@;o9vZJms(snk~F zqfT~lxqE`FvIYv%!n9p%WlGMVw!RbxAfPZaF-%uSKOs>j6qv!MI>^b%K=h6=I693z ztB~@dYyyK_^o;t*E~_Nl?I1kS$)&boQu1r5&P%yTqi~S1{tm9S4Ib7Y&#?c*b;f68);>^5id|x||2i$#`Ut3ylA1wrWhH5r z0Dafmn3mHiuPQ{C8KbwW7uA(bt}_gTKv9_;>gL#ycX<7y7FOF+@$BACfy;q-!wv=M zzuLmp{z(MUMrJ`VWrZFTLij@gW(PaCbjrr8Pa!kEh?1gQoPv*`zHT~thVd#QuCyG= z$_ntcVd{X zj!uRqy;xmYl$4i{<&jXrpekWtiM>#!X+7IYI5QW=bU(f0Av{?{R8|xq`X=b>>|q)i z!XacwCS|1=Ob>R_-Zj8%K*8?Gqr9?&blJ<9LmzT&dIno|69qOK_S$+1g>+J7mFa+= zIcc2Z=j3oNZEZbFheSMC1(cTL<8fNz+BrQT#YXIzQCpvg^FYrUsAV&+W&V0^w2dD8 z5?MR-I!er3r?sXZ8jWz$6MnCEZhGs&Ymqy>hb*o0ikD8Lmq%K8pylA7sNRReVXj@f z#->f1*t~gj#PRRnzn_7Dfw=rLngSTlX6pH_UYXRI->s)wi5Bp~SSfv4T1Q6*Pd)Y2 zjnoXM(}}98Oixd9@ZdrA?%jKXzlx$DilROmrc}VULa2&@(BFzWV}+>>gtlp@UX8lE z06_v2AHwBRaIyozRR$}TLxv0dlhAS;t`9+0J*=z)w+)7_!HfeYFTi*OYV~IjR3~cd zVTAAgA(W}`+mC`vftHKV(gt}YuyQ42xDbQ@T)zw#uOejRz;!P|mbUf4i0l|yi;Omz zJJifPYy|yYLJG*T1088X2^&eH&FowGcylqce>3y)%@$t0@^-h+LCZ~DqT{-o99*%+ zGTHh8hXxf=%C_?L|Lr#^c7&POxQ5K1zQ%N(osp4#2G73E^KYJ{bHtC+l}72Rojks$ zk;KfcCkNubbhaK6IoP7OX zd9yu*?Ynj%%}y{I^5UBrqxI4eUV3>ym%D}$9GTQN-N)k(R&)5J7dbJU!|(n67w{c? zp6~6yLiK09_nh#ktRE7 zZ6Cs2zM7{${{+@cZ}ZYGFH`&EH+gbn4FiW?3i<@Kw1?8$8m96CV9;4oo9VsK!Z>7iy0 zzWyq2yx)SwW5r_4X7dA&^T5Vj_W!T%bKSk3-}t@HBXzd$#*be>UABuS9$2`QQRu&T zj4N$zjD`Iie&Z;O%T|(IWh}aG-evyJVqg)i!oN_9#_=6r7;*!h8In zeLtfUehOFZ<@j>u@B5I&u)9 za~r1Bc)rUxw?$2z7S&xCeCwH=-uZJbT59-qTvCMr#xG z3bc_4-E0aoWBr`i_bwlwx`KE9)v#}vOJ`1S;c7Qyy{&wF^eo*&(hK9#T00mW8>hE@5Yb)Cwry+4k|#Oz?kPs6eK+oT1;Ivn zeL90f9UML0#>~_Rr;lDGthy=6l9?XvVt8zro+}qP_~x5jo^h~t=S~`nMJ|1?mm}B5 zu!=!uJI>HP(#`qfml+-!;G>i6ObuS+Y|l7yRtc#$34q@>LtpPW0l~xa70W4dOmg<@ z6@0D=R#fIObNL7-Te`7lr4tH{aP;JLrf0`Fb>t#LBMxfIZ>CWwfmu3FyusVYuamQ8 z3!B$e;0TTo00QHk96$IL2V2G{UbBtuYl|4Y@=M-4as^9HF zNYScoJhF2g^j+iN8}HKV4Kg**!{o#;!LUluJHvQiFH@6~gp`}hhbz07(yR(;WWI)k=zm$-PL zjn1|y7srvE;FJ$977rQ+)W^+nl-FgI|dzfdPgF$LKhD z1xM9p?%i0=pV08FH9h)>fEjUn?tbkH{cJy4&IO9!1cLP z_e>aaH^CqM4`@h%6Ca|UI|AQ(A2s9C@K^s69?FJ)`3LA6hKcL&({reezYbqn1rw)X zMnYY+2|l+O;h`^s)PwNabC9_P{^#Go11k~UIsk{85q|dX2%Q#$-~Chg>;tGJ4g?dg z&SR}Pk*eOrs}`e&zoHhyYnlNF`{}!Sl7IWbzwrE<2WXoJqN*z4nLa)`_!fuHw9t3$ zW8Qk@J+5?)-Rb}c4zcgGm-x{O`)D7W#pj)-qva?+`Ps|7*WAxgZ!>Scxt~#0JHgFk zUWm4j4)D_clXQ>!xRdRZu2&xKnaQa0{Yf-EH$6tjs;9KmotR59o~bprDIA#lZI$F( z7EL7(A{-1N+ufw+Rgh+tkWlAtQ`ImCVMGxGM-kf}{1i`r)Y5n?_FMdP+UkdDEyc+&4&n*C4V*LXfS*RwR+CGrdy3`@ zXE;9;Bt6H2|H^qzpFV>qOEhh%!+PU^Ac!E!ZYoyZ$FpDj6zi7dW6P;#%kHOnYG)J0 z88Q>zAfDP)6s2V_cCLlK&I_FE3u3F-L0y*hhI|D5)3lvFhuxjY`bVGTYhQVW`?oAZ z27KegObquDmMjRO1-mR_kpwzALzJ#)q9iK=*;T`y?aRo@EvGcYfzxHhI~$k-+98Y* zh6R#|^FQ*U|1V4`r(rcKDvL?8q_B491}gH>u`KX7Jiw(M1tE16&wTBReDT+w<#Ufe z%#MciIY*4-rnr7PU--4B*s^&APC_UsxQnt$FU-O!D1=o71pyQVM34j^rH0Rb@pC-& z>?34~0t<+c7DU_`B|P$_ukooJJE(L5VJ`y%BXslyu~-CTyA46IAdGi1HZ_J%i6yim z_L8l9_3K~bna@4OvNS)_-s^OXgpsjQSh14NJo_y7ttcfpGmJm4o_qH^#xr02JX>l? zNu6oos@FqPbuOuPiRybFW=l;GA!Uv}i(!XCzFEe)t`ZO>1j&v?6tP<*28U)D7@CQ@ z*)(D!;~mJO*^ET1D?}TwmP4DC@g@>3o(SNhmh~#yfiW32HriPAtkrttVrjX+WR_6Y z!Z*EZsMdp~9;bm35X?luC-uzrPJ(PED%V=(qobqP)S7)Z3yYv zP?iqG`QROd=5sJG0MEaO(0m=PcO#rW32j#R)E?Ne3buR!VMQU>wA+qEd8;>_ThC|j zSPB3@U}}ucmNSewGRXIKa_-Uq4VxCiNrNa#2vrS(FTkQ}CIE)dzr*vdooDsapXZ5t zn#gpjjC5Y&`Ct5;gGbvaU#FnVj&kAH0gkoxV9zaPE`_Dvs~{VLv>`Z ze9d}li_;l6_Ys2@7cu=HfMcwk&E^G*VxlK{yNnpMnxr8Sic8<6{>Yp7vqQY2e;%E6K9UfO)z3iZYD5YvKE45H?3i&W-Jjj2_%gC{WnHp*1?dRVin3F?o zbp@BtU8Q%%il;CWo5PMIar0E=aAB7%NTPxy2y-6W#g7$0POs(u1_%Fsi%{=6j4BlRxudEtgz^x&2SB!`=#l0rnc zbM9-hjO27-7eoX>L==J04Beewv|jHat=LI=h8@`=5uE1-04@(sQACiWxp7)<4pf$$ zq&g%-0jx53RTWefMUasN2|=_{P_qnAkxF@f2L9ID<#UljBG}XMSOt8t6Sr+{1aqL( zGM>~73bRv@#uZQ$B&!YCVnM`$)h;5+A^bs=P+*Sa;qV-GLPWqtMI{takVFBCBp_Km zR4iLZacUL$>2}Sb>xmq!;(;`oZHMFC;u{H3O*Znrk$?4E2Qa z>jmG{GA2D~QF>)=F%9E^9WSN18T624nccg0qpB(|yzm0yaF|CPd4$cIH*@~{c|xHO zWo2b??O9y8u&J=SQZ|!gK4X8U~L9Rsn(vkPe^z92BI%PzZ8m z)CJjRZXI9zn=lX(=28q41)Mo>Updq|pxFWz2S}i*5`t5>WrL&#(;*sv;@NI3sYph2 z*{}mZ|6&_ve5{`ftz$IqdXU_~FmPkH}6@7;ibpL_j8Udo^c|?&IClePm>%6S#7LYuy39 z@YGh?kG#u!J+nA+3djf!^43R}$teFL);N0D`?Ke;mgSM-zi z;jNDdTAbJdZM0tOA^7+XLi5BF{e!%-?{zMY*(i3yu~%QD!|URAAFje8i@J=e5fF$( z(TDZcJvT#sl6@$RM^7`$94`Hgnfx)MebP=8t;elkDvTVW_6W|w$n#> z@55H|n|4x^GeApAAFihDG%l;*!ocNQVcbH@9WoUNtG7YC0Rpnc#j4%w`M2}$aQ2Ly zvSmA2TjhqKh0ln1(p;oxIvJ2X6qHut7{12X@F=pVkdj|dx!c9H3+?#a53qUjdQQE1 zm}^}@vYNJ0>H>i!2R3DXY>WS|%r8JUe4b7kH?Ji1)D=#hY6e>^_btyx5``NFY}sO` zusR>_{&CJ9c!$(Vk&_>uCqzEB6c>`)gW7E+E5D3V*D$T4!vrJ{ECPyf(VDG6WXEDAw! zk#`}$97Dr%WV=jnN3aaYobKvlN-d@`+l{k# ziRURoldLveS=p%S04`5H6=hc1&JQq57{MaOEjN}ZC{-*Qm5jF)tZU0^9lIO z255Z&zIP4Wc94YI%N#HK4g_I%0t!+fyArBD4Zph{&b$Wi^*~-VIQPS)W*FLtAoRfH zX~@=Ri?pU9>9wUsKEJpbb^z#Ikd(j-Bc12z4rcM$9qS1m@1^Z$ul8^6T!&%e*v=3?^wb7KlmcX77)I*z6%*l}M24FyMNl|o5l zXfhFj&G25vdX|~h3KF5`oh%iYOqv=U)7{ooRYgjx=b5iQ&5wWb93Q^%BCR=2CPpVo zZP>yi5AC7K*-dGQjkE3Nc>T>Tru&DG{cgP8S;7h+$a69G2v`wraVg%AJ5eUHW-F`G z-{ySKP05-qpyuEHAi+OI`1AZ2xOq zV2T+_KKHCjCB?qjuvtU&zum$ZKPD&xvD({_QdGQqUqqGnSghu*uyyDvQd|Fier zL3Ui%o&Tr%^~>)~&cFl=204R>L?pogiWEUA%MvAO6)Z(l>KAs`uG(6!?XrKi z*FUc$%d$l=h@zM?KoSf9kwN5)K^jcL*sr2qZgbPx@&5^E1i*f+;c}Aeh!T0MEFN8_L@GT*F*VK8Tpjzr`h}AYn<@)(>ahP+1|}yA~ixr zeKa{i^W7MU=ezcQ=o%v>{qzuZvlg&+)gfO0WG^rO>KOeU1C&m`lUOv5gg%lEa`i}X zgM64KiJlX@_{>wp(jD~0s(9$`yQv6vb2TwS1ALJR7TvL&LL^mSVbS;hdOIv1<4=VI@cEvKv!8RAt% z2GzB+E1T&xCXkb?n5K!(=VQi<8NBt@Tm1azKhN4uFc@V1{P~{BvB)=G={m3b6umq< z=_fbxzjWzRHgDccW+ViTR4PR}o#w?CUnG;s5RFEuuCA7*(KS86C|gMa~X|4kp6z98C=58n7GG&~0D=fYF}4USHR zb623@ZusIf`25|N|MV*S;Z8I&4yRjT)##Bf2a!*r>+i)`K4&Qa;|Dg}*UPCL+qiVu zZMF5dc8D@L-Hb8VLx?&%^tG~$cWqLnObsN}tU@9^aL zeFOppEMA|7u4}jK@^!oBk>3ub0&|JtoQwCpFudf7Mqadc{qI3$tbd5d^C~#g+Qncp zLm-k*W!*Gp*H15*HNJX4K_gt;z+=DvAGw^4P}$Ic0fdTbSh?xDOiLFqrM8wp=@%%Ryoi=7eWZ;5 zrFAoyURy=jXE5u&FY^7FcSFfcBB6Zl``#bW(4S%Qg0gXh4^lOC8Q=XuE%B-;1R{Qx z-TfsdEe$cHCQg288IOLm5=!bR3G1N8sEGOS>pFL?n@uEO+^~P?Mu4(uYxvrC3s`!& z8{Hoy6b_^Nqg2<`QV}ZSKg1_-zNww0=_6iV$INMU6vk3K@Re_H$54#Qf*7GYKhGaT z=h5AtAQUYj9vUKH2ANV;M&!}Qh)z4r5WW#_jOnAKvYO(80@iN)3NwZxG*smiDZGzw zl+U7bz+`Gk{z#raplM;|-S>HZw`eMDT|=bx2&FX*%%3xfOs|h`|DcRW#T5K{gz1ac z^8Ld3l+{*~uT7z-Vh$ZcCb5DzdL~WES58%N5ug3$x4AQ2LQy0D#v~s5;UCc#t05jO zVf}Z0$ULo>ihzcH(sUmB?LTBVUPVpyWXeAGI28-d(%zfI=Z{e{eFjq|714Lk=ZVf8 zq`I~gzdlYrG@VezI==Chg)p2TTwKBI*|UfyJ9+T8|A1t{B#QiC>S3nLUBPdCr%q7X+1MOvMO!^&Jrdt!$lR(ebF@2#6k#WOcq9TI6z%bZhu= z>Q~hWWYw>irPka=I$mvG6x+b-eN|;HR-R_jb+R&)Owks@?_SnTSsqi?@ev! zx=vA15mi-H(lmFY`?As4%{tnxlM3(17y@O|d_?=Y^UgbIY;0tBc=)Ej8HPc5c{%ZT zTuAq1<->|Q;qTMn^JA|40h+ID?!$)X!f@?VL24 zuH*ChZfI}XnD(bFT0(AF#J@*S(0l#SmsgZz?emane9HouyN1=L)lMKyCvMt(BWmwDKs z76!{#v2IEUL7#pT-Hc$IDf3oPJv)u2=@`DT7y)5s%wI~w>=bEJ!!QhVePm2C7A|4> zwYk->YE2c1R0bmu7(w8@x(?B)tS+r1gNE;hwoRtaSa6MIX1tDtrL`l5Q*9(o;o2A@ zWh_~9H_72Nrsg9U99_SHNi1J8=~{cGljY*B zuD$lRsY};fU&s7XW-KqgHjc=o29{P%A(cv_={^i&B$6yNbsiX%Y7?OY zZ;`{kXuh>flti|*5IvB|)^}HJ&+2DU9c^X!$aaCY^OD=;W2+bzMB7l!^_R_&7Uf4L z85J!#XeWcBX#lcxmz5W%XoEl?z^qxbl-ja;CmYYojLnUQHJgFODi_}?9WBBWDzcyL zZ~6K8ELgBWc#KxM#FEEiHE8#bzCU%%^*@I4VD|FsKUYq<-p`aVgRm($wpW#GnH^aRh9D4f+p51qe@a$=X#^F<6eTF()X>0DKw01U27fmH~ zWtf4!VbYpOHUMZl4F5nZLaZ!|9){{!3z%81(b0H>p59*k0gVJO*t(zB-r7PUR>Pfl zZ{(gOMKqsoA(=5p!MD5zQF8OGY8zf77w7Wv`V#wZ@yP}(lrW-r@dkyhY4`#G{Kg2toLxCFw-+-_^HCItQNQ>ezV)3iP+Js5 z9}BK`!@P9-hX01k|F!lt9iKlyAmG2rP<=!HxbQ_D(k*)`Plkw^x=;k%)RZ`KMGfkHNZb|VjNoJHs= zpIPwL^~ZfBf2s0QXtx zDXTVR<|MKw%E*fqKiJ8-?9VD|A@Z||yjYFPPT$DvV@|q7h7a6SZ;|<%Xr8-ONkbV> zy_+7xK=b?2bhW(`-3R{Q^~?XYZw$16U+D7hRBBd4A9=ygB99?588?rn!Ej$UM?N@9 zWZvUUD~ykVHV0{_tD|(+RxTaANCrQK&%meqArJ-MjYA7nEaUgT*Udlvujl#O|NaSK zUxwlS9;V*^4Zd1V54!`=} zf5r2`Fo~Xv%z5NdVn+6G5qGq89}2D-mNJoH;a)$#iNKIkIJu&`RgR!nIlb9De=2!& zR%5X9aH@E6t}C1(R&9KkJ5mtM&m%O7{x9MIwtL44O?bRqi+H-6+7qR(EV{XhEGy+; z8kKDP!j~|O$hC{VOl^3POQ9FuOgAzp)23+tu}r?a=(>uALfY}9Xy0~-+amL~8=KYI zyOANg@mRGlI(C(ueJ^<0D_)e+xsvl%$=g=JkC0sl8F>=f*WBn;nKhCbbGCK0TVpqS zrK%nk!8)P7R1z)Ya|qeP7)T|H@{`T0a6{u?gnnZy7s z&24mcwKJ5`h~$@0UQteA#Lw_hKb_q}6qc0|)YA0#cGEX(63>f~=xd{;xr?M0ATK|P zHaI{cT0}fOgfG9Cf@lz*Zqj}60{zi)%HtWDFLzNqsfv)6VR)#Yj;?;R%1JkmWK^rrpf=SN8NT%o0@m9C)_;rs&1t0qwr3wl!0DA#%G6H!X( zRy_aKFa4_X^GfDT(Fetw5D46a4y!sIujiR7zVN!g+r>!c z2IMN2?OL@r(HIsJG0t2Y33AQXUS2S6g$%fDBUgMqkq5_Iw52-!Ps`r^@9_+hGXw3v zAsSh|2j1dfeA?vXH;y{@Yj)<$8Pe%Au~>{iATSaEIT|&q>-vZR;L}EwOgcpd4PEzL z3ypOk<0x|FNI50V%#758)HGB`J96R4V4{r>G3yx9WK0uX_g%}2{mt{6XQBjuqQ@#@ z0I;*Nf;X1u@sEthd7{_iRvo@`al!H0d*Dc8JW`GBnF!ucSwlP7&c-jfkPlfslFRkK`o5C^Ag3UJxe_kjXE=iw+{g~-`k0&! zO~=isMlSR|hcWuHj&Y)u|8L65<^IXVnoX3VxD}5KXpP(I3)wCUGU))>+M7tE?_9Q( zi%K3|uH)GDL=NyWZDs>X^Ae@pOWHf>1h=42GC9>=p|884p(x7tzo&gkCgj&mA9g7& zUX)PtGR07|dV@@L3K72Y;_qHXZFsG>?BrTTXQ}ds>YAvo#qBKLPCOw}mtI5`o!*zl zU~wy7Ds!0#`B1?*5jBvhriM8^Iyro9g>c>OAZ-&_lm62Nu=i-s+*-7=8(y+Q58gygOis+nalCX^py)<@nU>#*Hh(P8Cv9Wd~RrAg^Zso zxpk6JyQ%oow%9Q>I>efX4SDiUcgfD^~Pz(#KXCYPNri7-_6RGp#l&H}YTw zNSN(gD_|feK6PqaX1{aVysiFjB_meo$xeqPQQ38>q@mKbsG-m9u%n`{?GBJK;Ei^4 zmeuuk2-;2tGLf})qO}M;od8Yk#%ZUIth{e_#y+bx%tjBH(vK?ZCt6v?YJ5(Bw@$j! z%77xXFImw)+g@n3KZqKOoaUBoej?x4=?l9x5;024=z1sqwn|;f<_r+&Pt=GlqW@&~ zF;Rn=$Q~uDzeFDqdN|QpRK~NNvqX$vqWafLhq*aB0vJ|kilSk!b|Dn12%91skcdY} zv_09{siI*cUWeX^_8}YAA{y$G3-7e-dWrIa2+yj9&{_52RgG3R`A4#$lp^Evf{)#V z`i@^SCq*b)d)96}y{Zdr$1iTma>?+S)#1|a?^bdmn}hDux6C-*=yVyxVbL;CPDt}k z^l+k+tO3fd2DVISsEF=#gP83^8Q<4nfyf>sLj#dLTcuiv>>7#eMNYgUv!0@QPjo#+`B1iv@jB1V`Ofaqodje& zgN^^U-D71L9N)(Hfy;s>hyp!`wwG<=uxnF9`O7>qq0l0hH7C!Nj3qSN-`oJKi5NG$ z4sEh3@#J=WW$KvP^`jF0DYNm*h6P%!ftUO(GH#VVWe;d7A#1Adsd#CvWLE?jO=is5 z!a3dYo|T-a@Pq6-P97nZn#!V{RFTbJROVE4lATx0stq?G=Hnwi?CNXFAlX~-rqkGD z(@)&$v0UjYySA;OMMT=O;~6jLArf_CH)fFtE)hMbYNT?rUQTNy@;5s^mR*za_36Ew zpUm0X>E9x2FGFt`9#o~V8_&7jULY!CZt#Cp9aSPFeeI&RoceW&40FS?PBf4?C)kyQ zR^d5OM~kc;8UN@agmc=oMJ6%c$Y6IU%H<(nL`hmPp$rY&2v<|#en@$JdTM6(bq9jxll^a=>v0%zRPT{NB<|T3wc9ScbjWOd!*;YCWTOqz?8{%|r(su)&9!^aAWkCZ9#MO;v@SO@LIbUn+(WCq<{ahAQ8xVhA`zxa1lzO>|>XMa~tq9?Oi= z3%mxqv1S7fy4tqW1=+4Wr?nMDgU;r)v{L-C1{x*+MFv+IEwE;I;G`!Wh{}|j8t`%6L^;wawl_<_EOf|T--!9VG%x+ z9gmxkNm*V}rIS@VZjIz3cnYeaf_5GZH*{3>W~uV8s!>S<+{&&_vzs}3iS^=jsk2<@ z5--x!RCP$$-S?q8xIz-^)aKX45OVc%;ez=2A&`b?Fi5!;Mwk>oMI9j~j3^ zFXpbIpmKo?aH}5~z$mZRS~mYMSG9z55se`V-sLv3As4x$xvVbY6qR%t3cLAd<25flgt>@<6`{YE5jt)S>t5o5h(?Wx7>?Y?yNpcR zeXjxxFA7|!A|FouI(gi4L1&eSor&U0t4AsYAeWa~8KpHoA0tq~kzR8}whlnr_JqD{B-v&x(E0)SDbWRjb_RMiv} zr(8w5uxk;6j9p}gNScPMh2E+}ne2gGq@0=vU%Bxxc#-&uB3ZODY$izp+fK2$-BRL8HfwlYdp_ORvkrCH{{rLwtr&3|5dvPE*~ zW$MXV@q$V%dONzRDr8x&i`At~2D`y72lDE_MR{En$VT+y>XaUmYw%80{uTuNeyPZ=8}D*14^A@SpephzdWn$%wGsvDRRsl;sR{42rXrUf(P|W4&d2GJ?AH4% zg7G0!tKDwCZj60Sy2Q>HB8#=)#Jl7BbHa&mqOBdagA8Bg;@qQx^In=*ChMGod7 zHQr_QxLuufQ9bIU(^avrWa`eV%8L^p0}Kod(AL&QCX>10_klow!oor#k%%y@topLU z{ZNUbl0o8kdp>rWlT+X0qeVo@ZOb@eL{rtq<1mS|Daxx}>wQ^0Y8NHqrKetnk3{-4 zoEF*5 z&uQcGf|jN^MC+w?(ncPYWl?&Y5AgP`OO(vKlXWwSJmDj!1BvQE%d5ki)$ei%JY=`N zqHTJ8IS|=bt^V!C;3;wu5#PJ=mA*&zV@RDeCDG^%8 zI6BhlG^fs9pu4w^WsBxI_8|iF?v)J4@VDFZuGe?QT-@^vuP5$hI}>?%%Ox|YD23aF zPM=2Of+*VNMDx@{jX}j)I*~jkVsSRj1V`R@il<)K%AwXIWmS3fUG5?>^%Pw_53zCW z41$tvi$2NzPEPE8pPi{0lunz^q?jS(jkCI>%X*=l>NTr+2JGIIjbz9+)|)R&9lZ3* zr|Hrb^TQvkVW90OZ@spiS)nZ$UgYd*Pm9#DcS|3U_Pn5vTis!$ zlbj4&B72AGSlsNzUh`cxc}%C%96frJ*49>5uU?JM=ewcpfq?;z9Xkd;;%9{*^7hfI^GU4CgOcg zcOK)(U%tkX?jj!et;d*G8>ac-9$tRwBi?>1K*PcsCJ#5Uf9GD#H1`wCD`nce1t zRHfMU_PezCt68_<4)Qb&%p{#HjqKlhoP;kxVxWUwGoOZr8uYGa)DuggeTfDD03ZNKL_t)yvSZgF`m`{C!4@vG_7g0f z$36EfBH!#_+vX4G3lKMMb3d26Qxr~`#^O8XFu632 zmh9o^zC9c`d4T~lK+TMWESX=%+3j1{x_vvn>5I&{vzjG&g;W+4P@WfpOp>nVQ+&LA z7Z*Dd1oO+8wP+dh8cOLqcbp?9&XMr@=)2NE*Fc7v1RGHn_U8F1ksSS440!oaiCL3o=ntD)=34`BF6<&dw-oM^`(3 zG)^HP08BkyEVF~+th%L{Jt2(CVZ zgGo-G?V|BqH$6SWH~l?hrZ{qXKTp5#CJ*1gPDuZ`jnYz)FDIjjUFw1C{%6H^vXOOe zQ%18rhL?E?ZbKY%nctnO=Qjq9iKXGKY*U3EZV!uI&*gS9h*;%G19TjDk7L~#;`8q3 z3lHB%Q6R&>^r;k=)XuRb_W?=XY{20IS7@WoBbXxZ}-o3|asGz^kG zSLidt9B54QN56d^m4)HazMewj5-# zzmmt-&*l94FY@9WC%NknRzBRv-SAY2{TKsv0 zNzmKXgm$}20IL$4AI;U#~lMuS=LKsH*W)9IT$|Kq=R16(I+T$14@S;L)3 z6rf5ZM=sNpo%r*}(KhxRY9kmA6D^6MYoKXh0-3bQvEwIr@`YFF>mQ=LxYTm|P9-c= z*IFd9OO%eHMw47%=-FW)*v(0n2Xr?|_f|i-X7*3Zcys;aqLkiPI_I+O->l*7$xl~l zIkuF~Smo7wxfx8ztDQ-45Hw9El3&59&pgP6RVyg-W#}C+sGYfj&wt@zW>v>&Ja&qv zrd9?9`sr#*Gi}*jeB(P`U`m0`$pek_4JEkB6`CGk#ZAwNm*u4KT#naaE*kg}SUz*|L_jYr1?@m72vx5Uy z3fQpe>-^3aRzSyD_8uE#$wT*284REoF5!zCW zzRzb@&8C0Nw3^ogCk`lVgp|6x1x>{s%TP zv!Rxyz`GzyWk1LswTfSK52% zGcK@qdlK_XGySOnt_;AkIn~6Dp5egW-L!NjnN(j&9VZTO>5@tH;yEl^y^8!cjlG}j=i{Si>6~9d z2FR;l#LDH%C~R-xpI_MxnGEQlYX;$pIjmo|g092;y!7H>Oa|%gYojYMi0|BCb`FMU zY3pXFE04jJc6yQt0<}w7x_mWriWXBfV+~qi9WzSWi2HnKk!lvssi0%e2p#lfg5l0q z2BHPj&0ooyRg*a}e1(1Qeaz+d%aq5{Xhf)=J)h;PmJ>g+jeW;^&@u)UQ>S6#0~_q;nmrG=M?g*DrX{IB9#;Xue?ldBcHrVWw82NEA(`Q<_>&`i(bc3$GB$}?F0g2%RAAPikS6+FO%8CkB zuUvy}hNah6gqN(ovD0-TDF7;KE-H_r6`NF}R8;ksAv)=QFHr(+%de>jyeuN6Y(9%D zgWU?SI@NC`0-63+(8lV?m?o{=L!52vXE-&ke2!0NW>uWRXh8bXFcFW8Y?V)+0@@MU zcf8Mqugsw)n4+Wk5I_5We?g|EhQ*5)^6}O~B#Y{~^RC5QKCq3peZ!+MO+X-sU-zMF z8FWoU(-|=UnC8eOS_30i%Z62j{I8F;@#Iqh0)-_kT{ay*C$5f|jA@d=q_k!#%h#-; zINd`>PalP|rqWOtqTr3a9DaX0L;V$e^Xqf?#Xr5nEAJ#Q0t;DC8_G6OG@p*{)6soC zbX`Z+H3EJ=hVCP+ffky?@_Ci)JAa5LpEyTz&kzr7m`}u~U$tRinkK1K8coyi83tx% zknSrNIX4t1kkSa~8FZhCu50Kz=$b}45JcB~=zu@q$ERuF({CPMC`LBMBV=o*F&x&}Hr`7@UD-~$l`d^)WM_i^&_1wMTF71pl! zAvGcSO;ZLdMD$%RLvFnek+-{e$+Hf-YhpDiX!`< zNa-vmqk-&tx;3uJmV1-|>XOk1vLz0)@uP@-uFdI6;9 zlq!%dI!bnpoFbsyI>qcTRmML2H53uiU1*O?KOgSB!0Fx)cP*JjP24{rMD;=u z$@DD}#UZ1B+|F4>QQa=N`k$7*_cwO3^=K<4c|iikjX89Nt`Q3v{OtX+%&RV7&CF7Q zhJM=^?_|ain{_XD#^2!mrVse*|2n{u`6Zm%wT%Pk2BL(1e@=s(xSpy4yZ%wD%1bL%rSU5+w!{(Kfzhv4$nmwl9$7t&Xi$H(n` zbai#obLl7tPc*Wyw1N3kr!pfy%E@yrBunn*j>XH^_OsVG(v_lo{c5VRl_^M%j_n$= zjQ%gfm_hoPy>bcBkB)KrVhco;uzFe^KK(lVe1<{cizBMHxKs4qLYR+1GiH?fcG9{@Hr&YzUA7%=Z0!d~_vKN4wDd zL1LvfM7wr#o#bS5p}~KSC-KGUf=mMgl^H+4t-leAIZ3>WyD! z&4v)CkDR6Bau;d88t-}O)t1!{GR9bu%Yxg|Mqbh4R(V=;RpCUn?!6a0D0?xJMQ4}c z3$L9cDs8CN#Diu21M!Vz`Bf?D3pD<}_ZDHGoAJTN`GD*|N(S!Rre(Wf7=gs5pjSth&l7M8N zEzjEVrU;t9*ChgTRaRO>rrk#EihiSP0FWD$$#7zj#`Xbf=M-~ic>pqyL8G)XM0o5y zM)xzPG(;@Vhv8P{wKSc*1DtC&=})@Pfx49!DL0@XUW7qP zAXP^n_5k1dtp_L>KFRD^5w;xJ#xI%=qYVuZ9)#ZB9x@rg@PqCH zT_>Vx*8&5sMgW+m3A&HGx}~fue}<2S^JrMJiUPx=-v!sZtm zF%yGSExC_*^)=*&3RyU(jQ38RCp@d3Xsnurr8>tiX)Innhpcx}pAU?{^?8m)0*qD2 zIuNQ^z>?yZxZHGw_`0=}#R8078a)`LZp9;P-1B$5dEh;oPUwV+YxvBXd%0syA@QN} zT>jN&w!C@)EtMc|>M9;te+M=3QzJbXj6^{gp^-KBUt0(Wj6^Q@bRS_rGvdrzIFCm* zoad$YxAE%}J`#En%kQ7X^aV?(4)${S(u-_+{RQ;oAmM2nd1%QLBJm-nmFk>oJjGN0 z@IL?X@zIEgV1&uj@8ru5p5=*G_wdU3!(@^M^-J$#{f5P)_nse#C}1Q4A!LA00|+pC z)lA+xa*&-bJi)O5bZQ#QA9;vLK5Ng5s7$JOt-LDhCn}4gUJ}t#i8Au3qW7%wZ)M6k z%IGYwbeJ2Xd9FZPMR-CMon6#GV7I=vL!}_E*Ii^C-9!_4!QY~|8eWE-+W~mmVR?*| zcf&B4H*X$KKm9a+`lo+-Q@@5`P+MEenl)=2=VAvgI-bw1WJ*MSy}TT{F=|Y-)9hw? zC%DjSGJo|(7Vg=}{=Iwo@!$Ow1O2@e6c(}S{!Mg+Ceb!atdWb7c!B z^(Ub?N_;5A>^U{esVjo^^E~tBCEjdLQd$_}cQ(ysMt+75p4&%bL4@{G-Rw#mteRKF zch=Pr9PZ=Dfipa@y^G!eB!-hjt19{4-IEAiXyPY3uW+O_qi>iGj#H~<-qa6E#UN-#96kyj8W6o8(NP6pF{ii+~^8>3440W{9lY&@L8S%gv+M5{?!vl164dRc)$&cy`^!L)A^bwE637CWQ z^!B5L;>4q2jLa2Y_=`W~* zl7szpw71gH+mGpskzZI$NnsSfmY}n%m$VV1C?3L>8KkwN7d>1^NzA0Zr3*6gu4Qy_?~Tk4Q;ACHckVM*=yK$%(pnsOZ65V!ya)FBiIeBIc4S zy57!vmB?6fH8-zhaw7R^qG_M2_f%y^hW2&_1k*I>>FFVnNZj{^ri!}9X-Z$ zn)&v(?)6-@Rrg3y2n6u^{rE=HPmNr4d{bBqkQyB3 z^od5Q`~0NR8T{c0rKJIyx_kN8Jy$3$4fF7{7`u)R5b8}bv+n|b@k%47lR+L|TgWHx zwerIs@8`)M&g9&g9-c@K@R>Qqe0HdZ=MFYAw=R#uu8aKn<|~v}$G9_);?2W@M5`cm zsfB0uwo+PE!hbAI@K3v%`SJcj{&0C2CEZQI_^jE{IpMHHMH{b0y6Dl^EN4y!<-Kfx0poad=gPgZ_m z9>2AwjC|8%YC{E|yK5>-OZz!@st4WFxcJExPPf8ue{B}atD>wbH+lW1&FpVZlSyfm zOs(ek9;~OkrGxgTkFw)<8%yY=yuO4#`P^(u(_IAfPH~_YdOH(z_oj$V3NUj{9si@E zoerO$n2|f;+9|(W_T#i>UTh#27rX*toCsmGqyJb%5efQ;1r08B4)TwiPvSRp zTDylRhy?h(d#AIYws6GLErA4mD~(Q08=c^{O5n#G3wbeNvGjL*D!u`?p<6-z|b*#84MGKdQ&T!#DIO8UBK--~iWc5S<9@6)ngUbZbO zOKxP(Ee&M)&Sl#w?dPg(Roo9R+PYoZ9{;}E$fJqmVK1Y^Zl`_HjsCj&EM7E~PY&)N zKaythv|4;VjkIO}Cb3MC{@y{F&K$?+YoTt|%$(CeR>!z)d;HqFnb+;G-xwl_P=?{H z-n|NR9T|1n-Tcl79QN4XYNiQ#gunjoJmwXL$P9F_?{FuxXGVDOrR!C_u09zcok^2S zB^XL&@L`fNO)@~D4`wcy%0I65)8F30i?3bc#~)r|T6viI!r%==lg+PE$%B$LxVS9? zl`YInG!%2>V)tl> zwmT(~>kEgSB6Z?vr<^Lg+N*XzMIwBl>aCIG9TC!d<&pFn;8UeEnk*`^imn{L)*_%l zD$!CZ2Qj;lLKQ?{Q5ng`qfYB7gTCy>n4L`@sem=v(Li)xv?`q^su$eUtRDZ3Q;58b z{J71*S1HeBMNc~(b>eT?vxG?hGWtM-7ew~}8F_aD)F`{Ri8y4&zGoM>_M8453^O!NcHY+`4 zQ-7QunMhaJ{X*r8Dw^sodtuK-6&AxuG37Eu!8FZlmzr$76jw(nIn>Ga6IUpnQ^@(P z$N9_CI)A@>(#S=K>j&jDkjV=$X>y#VogKWg_Y!lBLG~Q#qIXh^u5;}?eXx@mD;l_a zMhP{A?UZP~8%k@5UXZiBFRGyJ+E-m*(Hfv4hX|*>tdxbwg|cg%+0c9Kbb{B_MyxJ*xd;su`9{P5=9Vr_dqOsYhZ{ZR zh8`l{dC{lU#a}c()lOgLdR|`hhh6=8C#O#?5Yc7Z@G1x1ZVhE|EZmmh6ftT{RG6`s zcqrL)kBGs>EoPQi`@ff%3r_2AwGLkER8`$tTwKUQ53b|>`|c!@$z*Nc=ksA028Lls z(yprrPJDq$Emm6c*cO7*v%+i5C^J zpr(Y+Up&T>AD!hnL#NOmWpP1}+BpR*A5QSn_LIE44RqblckeH!JZfYW@?0Y>XY=fM z5q9ZSy-+V}8N1!ka}^Sm%i6`cKwu3RIy0)`oNn#qf4qEz@%q>BX{>B0p{g)^9V`#E z+O{I^s%(s+o2nZF)%bV33e6I2+ieY3tMPe(#w|-5QJxX;3)4y0b zGxf+LCwZ2Y8P$j(6-ScjUgu@Hm0c+|yRwx|v~_AvHZbI=j7D^-A&H6ombH-Udt69PvlsnnqqVVCP}rBBAzZkEwSP9f4VMzL%^i-zsy zg735KeJZ@|G#?e6<$kdr_jy*VyCz5 zO82Vv=hUYtui2%#I`NOH?sHlbC*z|Vy&$6ta`CtY+aA9TT!GUb7BIo<}(ptk0O7wtBonkR9>&KY>uUqGLfB=Xr8baLMfU9 zB(k0&?@yFG+O3DIuCbCwJB2F)@;CnAFn*(Qn#0(?Tk)dP1>9*4+1iykkXh+4yYY$| zIjrcTk}GX>(X=`=ihAu|IW$Rx>zd7kA86$y62(8_^%ZynBQ$<8xWG)lqQ{Cq9yqC)xc_R7Yhq$c&eHJALcaceZwA?BA_)tkeC$j&Gg%mXSjdCy(8`GUqKrMR-*_&R&%jvRgDS9?_hW+c_M>D^S9* z?Rp8!BfE~d0=~&*+JqN#$VIzu`Pa*Oz9Ma^=2EN3f?EJ4tFg+0&56pKDu|tv2T&DI zC!6<0)qp1RofklAx2o>FNDi_LEmRQZRp;Rrv@BQj7S(ZH)?XJzzZV^EHUpgOTt&ik zWq^lek@2nG5s661HbxboVAVW+QQmdRJNJ^e-Rca}>VD%{3cQFF#?JC9 zE3|f@sbj_Y`k)ryCiS;RV^q zC7F5Kd48?dKxREf=HXTzojfU4p~x~GI=j-3vV7=P{$#vAB9~%WUXkHFnR&>Tm=obO zt0(|Fohc)aZqiLeqZ-DaQ)P68j68}&t~jlyN}7Yn`iZoaD|vJ?w(+!a+Si<-TCDV$ zRTPAZJh~~jYQ;+;C1OR_$f*rgPrm4$Wp~aLl}AziDJzfJA~R*N!&J^6y4NA?P6v~0 z-*|P&QL!vr{Vo?CZ>MkF=An93#lWkOR@rZ5^W|g|n^zt-83A*%p0^^x#0~J9m$E66 z>nDOyp_=Pz_xE9`=TScFXjzh&8Axa~wG0Lu= zNFSvlSVE$iWR(xXoL*oiMi zqZDLxf!(_zWyD2gL}px~@+czLDxQ9k^^|cosYD6rxw?dlEPxk4B3_JDmT0%jBLe^^ zi$ectxqwb&dn#?a&5!yt@L(<;CnJ>G@ZpKT@bFTP$r!7=07snY#|<)jF2Rc2pg(Pg+FX6BnjYfRo=RAl+j3)~ z?_@hb$wt?xgvW`Z%sT-n%8tW}6aMZ<&b-jzjJ zmyvf-Bc5oObha_O9j_a-ZBb8|7paJLYbqLMEenckrys0R7M$eAjz>lK)()skl`otw zV^+MWdWjQ>=8{=k(RXBZy$Em1d@E~EkU@o)37Z$?8IiDjFCwVj05z(PM?~*i=>s=l znKDruvh=pnwK70?s;K~?a%e|S8Ng~;oo)3v8US*MeD3DS6dYDMjT*#_Vd0JITrTkZHREkxcHi6Rolt9jpvr6bWsQR(r30;UV(nzzDWrY; zx3UP@s_6w*(HBnbWm{WOeI%+Et*XkXJffErr!}y9$Iieel2#_dGa_q}tzEZg8>a{t zH_@ar$op2j;q<!O<4>RSu6+9_GLquMRG=ObyW}% zde|LMWV}W)X=+~NoI4%3-SEeF16a17Rdka|9<2yRXJeGuDPl#IPr`K z(!A_kRQW?i2E3>)C4(7Y_pJy$M7~jx1Gl(7vTI=FWfjF5@M7N<_56B)C*u{uzbsF? zd1MXis{Ciyrb@b;o4b)p#EO@4Bip`;&N6b9m*WMh{BNGygU+9p{LG1>uP8m-9#}*z zkY1M9%(bjKm6f^4ns1tzsbPlGplJrdpdq~uvgNNt*WXRMZpL||bsJ1FWbolrkX;q4 z@%Z(!D~WY=yms%&(BG{tvhv_qc^|C~s3K*+?08!ilvRd?PV(ghP?QbO%x>)2+85dQTQGOO%&n@E%kQJx+Y*M#tK%i>&?=owrwK zDw(wt;SINYn(babjvl?ey)-s9l1`^@Xd@gBQ&m+(US6JS`Z$%h7X7yuYbU}3Zuf=p zbhnEVlj&Qu%%-T`x6^lC>}xV-6cssldk%LpPB=viWP49VzZzaD5U+$Ym+j~JGV4YA zB1&r_AJsas6GfL>L63&ZJ?ty-mt-h1uuA{uWvxUWXt!L%J8Vrf`7(b`vKtHWb&1B+*R8|z<(3WUeY_@-^ zToT=GvNx|?g2S&p!#fx9dGw2SQ&kj0bC?(AFy{{M;q|wUQN8>w?psxlKZ~x+8sQ|*If|GoU@~G2yUhtx5KeD=eJiS#6 zymq0^D)V=`WQxpD1ZiJHuZX-O`Zv)OE0H?!x!UjT_9d?z4B6z^F7=|dwUrlMc!7$F z3VgmBP1i$1LmWGHjD-sqQdd_eT@FpwurHbtAfhLo^sq=;mWoU{(OpCiMfAVOn3Aa! zyZ0ZV?Mf#P-@i^shpQOK?8fdzWTz-?Q~)Sd^h-858r#3@7{CStz>APqFG3b3vecf} z=$@*5+>X%`xw_2C<~4mejmp8L}-w8VUJ2>(22fX^r zCwb!O9Skb=CuGG=r|7!UNz>&nhSQm>dE&CQm#uy;3MzB61vpJ#&jmI=znLQ^&qGWn z+1EvPYa5Bw5G|KZv+Lu-T)NzYY18i5-)FZln{-?_&Feq;M_zsBeY&vE!<3n`6A+JE zq-2r&Zh-caN7%RXG`#~!v35z)(SDvCI}dU8LYJjHX3dlC*u#&0@*{roQHv`~2CKYu zE03fM@Y;AjAI~GQp^+k&Xpu5d6RnHAMC!J}KvAtqB7$5$9$P@B?eS?EGBwbhWItEy zEYhZz;IFds<-{K{7z&~wXIA_mvxXvc$i^>LG)bjW96EG};^JaftXRSF<;!pQ-^!IM z(KL;dCr{cs!?KNE#Lyzkd!l`b@VSiFSC&6j^|EM%5YY;5ryDQw_y7D1TR+|_L{BRo zmyy5mV^`sAQ5wspCCY$Zsv3Y)dB;!<%@iTjL|uX=GMvh-civ0-W@F6T@sey8iQ#o9 z^`|Xe!3)cOuI79zB51BYsph>rvGoXTiAj9>|NH^-%XFHL?c%3@_cZ(WZ(;GhbEqFU z#g&mkBqAT}H!Xh474DL#1XZMGl0fDxa}of|i@Y>J-` zU*F8hbPZp9cqN&$@AB;Xr|jo;`yuj%-RKX?|YXIk9M%&flVx`D`oKXW`6$q0V-E~na?k) zLen5Q(8=Ccp5~LTA^atvrH9dCG0Kb5M1wj*m}ovmOuXq{KKbAswtTRM_JJT%m#*it z_bjF~FU;7L9Betnb5A_SftEpndF3o#dp~Pt$Jq1U%WOS<61`WaXmSG&F0bMIp7(h3 z-JM+SPEt^}gwH&@fjN_7oZj*(ADkJYv^>TBU4wk-hmTX$v6m;Ge3^6oIz?r*EZ_JL z>*rLG=xgV|hp+SI`=^Ocs->zlOp-hnty)7vULPNC*~|xfj?$+UvwXv6xO-Uxd13zz zeA0Dt8&5v@3g-rNip%R*zVSiUG{iV}^kX)Ee3o!LKu^MUFkW%oPV8IIJk{^3omnic>|7;5M2?$`Op zOPguy^>N4gdsw?-9)+P4XLfGkl`T7H>KY(iGLz4In4f~{}A$?l_<&|;;`UwJRQ4(pQIillP|;7XMx9uAJk@-d!|T&ZnWWkW*V;WyiMjJhcAtYxGGc`)O-D!GM_|(BI9u(~bBm z+Sq$$nDRwKlmeOt=)>%L<#}Fw`7KT+1Na68X*_?Dmdx++{Rb9N6uo+(9^kdV{2Si5 z&`;Iune-j|ke9A>($sZ7p~kcHq%&yE9h^UPmL2`a+49ThIX>tklumHr+(k}b9OMVz zy@%$*d-!Xg#P{SQ`oqffB40#bPWt+ zTsVP|HVN0PploU_XSQzT#aG`a5%4oG*vR>F$4Er}n9nSnM$A9TCj-a$Z-4m{n%X-l zm{dd4M{jeX{W98j9w%_|5N~hUjvk6&rqU#bj&eESClc35?|YM9zw#~@2NUSWPvc7r zGMqo-T0GoUUhO)*oe#IRvVXUafxdo{nG>}3T_OFgZxRQzbPtVZ4$*!NlIaAe+k8Z$ zCDadW<>}|&VBfhUdGRE@=gxEfbQ?eTy@eb&*ov7kNp~FM@P#YXwY|mP{>w-7_9uwu z$2ooG41I|XzOZQ>7q-2~b00KPR2(O9=@`%d%N1hLZ*td)S%d`TOf=Uun{10-gsl2^ zYY-R7S9fEilyQEDT()HK1VqLlYaq_Hx5`{Hyl^InT&}I&mk9%wbzaHRR|a>(i?KM# zu!vlX&N)}-3DI$7G8uGT7y8CZPl-5>L>+fBI3_Y}$?)Aoq}i%qjErq}_ueKxIevxO z>18aMl#i~Do-=@SI>WAA``G-{I|Pg%wN=%gj?rm-MD(bgT-jk(sIHmH9wYLeSMqC+ z!zUNs?oab`yU*p*OzVFueDZGi&VDcX@PSJF#o57(3y$4RxyttR{RGP&r=M%lwAE2d4rlQPR{SaTdx0v@|d5*Wv zl<>JnH&NZWmFHf6mot~USTcVO;cbUFu=6YfYs%Squ$zJ89W1WD)*8Wh8Oy)=7+a40 ziu?r+@trTu;LwN9GBlXLOkKAor@PLw``i(Z_Lj2gv9GeUw3Q$I%X930V>ee;&7>ge zA1wvb&7qU63Z{LM$X zZ&92Ne)g}tw)0(%H_at9m>@OO&!i3C;_LS=r6JV%|FierVRBqm{`aSMT?-G_JEbJ}|EN1Zw3v0}pXahEDvlyH+j*=|didN2fG}7dp zI(Jvq?~hR!jXP9TcS|zteI7s7%v9Yv_uO;N4d+n0vx%%Uu;JUJYUVGt5*7e8fJ-U;QeOnnSp35C8ZlJtx9e;RwEo(L$=d$`5 z-1(=Dzkv`94U-sm**tET=j8PV?qPFZH+><6VkJt%Qq00DZsU$cGOJ#Ciq&0%4744k zwdDw{o*8`X?{8sVejC61-BTP6zFSt6m_l4rD8KF>_`)SVw!iv29@*T?=Iw1uDP zW-hsb+i#n}ju)Tf`L}u)?mx!HLr2-)?BzqB`vgm8*Kqj7`*>vKR@U_1!k52v3t#!s z)0AEJRX#S?!Rr5fi>S4PPk;BD%yjj#?v+P*cHars=Iz6A@(3Zt&4d|?sdvR07!)Wg z^BK}JGtmKKf1iuI^laFVWWU$DAv5Cq$Rw{gm3_|!?-OlgvyrQx=^AFVj8>xG>BI3b zciChVYa=bbhY5aXBQHOl_d4BLYlP-Zfj!OYjUKv_>46?xm2?pjMldyu$ZMt!*h~Rp z_1LD-zk6rvNvda!r=qSLyG=q6g;P<48m(>Zy#D4Y28a8ZS~s1V@&;4(L$58)bWPB! zXPE$HC!1e0_QUMjm8#|R0w5dhujw#!v5)1w%3acupFR37Zi-WkJ zVXK+SWT%g&13Nji3w8#=6kKryRrb^7T0j&eoU#jxAYie}jL3`f~{C1 z5)2S(>B8rm#gwVjsC73{T3QJGpeibHRV8%d9sc}_-AHPbU?_q!5GSsjtyQfRlu;09 z<*Ao;vGp|w2Ndk3oC)Q(dGaW$n@B~uAGgl|oe&=ABRD*SC4VXv71h*EsAggQD%$%` zy>~`FM))jSEnKr?A=PCeg41W9tXj|T@#91a07pLg zRh3ngmzEJP^CDXmcI@tA#c}~b0ISV|+ZNzJQyg1m1@)7wD2rPtugE9#Rtq72jB(>9 zVcWiebuT>5CJ}rS7BOy-hJ-o9WfFwh+&h~m}CKW;t&&{IyrvidY)xS|0NcQ(!I2v-5hNzbxMj~VNc>FU> zkItmRhhBap8ha*oB%RGT+1$gl>lYA=X@ujk5!()g!y#6$*~lAjtfszh0#{#kEzz*~ z@tD=^Y_E%YY-c7ZWvRZI>>HUx2aIhO{RP1PwTq{n5AXE*{OFrMM{H9S?4e|8(bnOE?+JFejPy1($ms_wHVU{OL81V9`4 z)tNJ$aOQs&TPe$LE@i`W8+hoq0)>a{h zF^M`)5e2Tz?0S16iZYFl-!hLANB+!9tK-O?X^n1BZyk;4@cFMwZ00JQ5gXy|ppv>!W^(YoLNwIFFBh`u)tG;HImyop7{( z>H^oO3j>Av>psI5rVk*}%bTm$aNyW(UU+;1pSjkK45${6?HWiLaV1VX9v|5N*afhN z6nbpfEFz#H3Km2JdbU2nQ#+ffSoV3oamQqKJ@_9y)+k`H+Og$(2=~P39}1v3G}M?1 zKr|2`9*R;h{VG2Bq3fBLAEK+HpNPAb!cqC}JzJjOsokwqUjBLhX+;CO9{fH}oH$1T z5mc4YDrmLYu~=o$gc0wBHb`4MMnpcv(=qz0YS1+lMJtID4fP{9?8s%M*f;@#iXg-p zJtasYvLGVG!icJZAb=7dxmPHw@*#+ArwFkk2`)-q8tqyDRT0k6t2rD{RKv8Hb$qsJ zHi6zY_HJ0mu7hh?wQVX@6(!Voq@*^+Ox^EPX#LqJx0VgunslCJGY4Kh@0jg->^IVR zn6h=zkgCsYZB`T6aHF!9h~7-(L+{*XgBQ6h>o*qAGn@N}^SLL<1uj>%)09X5JKNt% zS2gHj;)hEORu(Iq-Zi5wsTC_o%y+NdM(s0aYjB2%~IX5{A{Agbo! zExDBGr6Td>v*xj~rWB>Vh*$R>V!cNu*0h^l2b);>_uru6%IVA~aB{dwWw?3<)2Gg1 ziu4%UVo-R+Qc4olSW!;Vb`Dd<@=&1u(#!Cy+E43X7x=E`k{Son*lKh@V%&NGg^|ky zxww{!Kqub5&1~LY$l!qv)@?jMujdBtt*c<1!wQ0c=0D1Je{c_)y_Apq!za0PP7C`x z8lk|8phSsABOE_|gdN8w;wh}gwsI9OJQm={N`XWB_Ry)$W?EShVcW>1OY}6)RfV{! zp=lACcD>Ex8+#DSs&V>U6iu4Q@RqGSchA>(!)>FjxeZs{p$eb$b$kbvh zWqd(Ch4Hog`eA_s4KkZH?WQ+m;r3aT$dSDWK*#3i*fHl5%v@B?$~TYklW+Zy#SIqL zy|#t&sf(!f_VLD}|HB)7leyyR%b7TJ0w=qA@i;_etC-cwAIUa-dcL7I^wR)YgF{mkj^`j z3gE~rNQWL&<81LdTXl#>^TLQx%+^8P$eigFe!X<*$*aj^gQf?lB;5wftZ~UyCUPNv z>5Tu`aryYv&wh$_*T3<`$sTrY>p{pXW9E_%@Rg5UjkV_hi!LqWg9Bq!VY)So?BdCC6 zk#YOHqk7|%001BWNkl`=J$Bok=BM4TkHXrUhKQ_A+yUm5y<3e_naqWlSPuw5m%`I$NM*6-toPbIi?4tD67G9?4^RE_7YKsPgxWcL@VZ$Ps7=((sb&AJ;~d^|ln>o_ zJ>h{NUVeKY8&7~>spj@Cewdk4s@Sv6iQA*$ltcuec*#?#kp zp|8)*@@02$=YYb~s}B(yj!@_l2?J98G(K>X%<%9tY+e5b0EKgIXm?mRozf(g9u#^v-646^mW zcDh^zxSU1!+;${Ucvl1fXsB8@?`-NuEE&g~%UAHhSw$S#Xv6LEV)r;fvS4?(@OlEs zRwv6odMm>bKd){&!0NX&1kuV(U;0;;)a2tDn$8r@8yp)rz+*dm`Ozo-ncMq*%!`Ni zu(C_QGhr6j-f{;YnCE7f(8+-(SMv5V#{dCe?Q#}Qo<^}lOuB|;Ydz4b=SKGd={AB! zfRN1O;~MQN8{xEi>|d%i*vwubRkT4So8naKVygK~_pMYkCED|41Dr2g9$q8)_eNwU z)jTGXO}%=Ns$P1!@OV8Sd#T1ENfNVW&0_cN-F)+#-+UL1vMe)a&KwplT$pl?XEcx6 z%%zAKInj%Ok?AE&wsO{ufTn6%gcHLs@4DM)YCOW~*I(mzKf4E2Rj3&^o@F=RPGi_j zcTl0k64$*RWV%M_;gMc_)k|Nhzo)W&MsOQ4z2HmBA5~Sgbe(4_1W-{m217AA2g4li z3gDC_>Pp=dxNSIXr$ct%-PBl=-k^fTYQ^V}5;9U%6oSDxn$1d{ZB*#3rVtv~*GBp>8V#gr8mg+ICyDN z1c+N5IGlDYVlEXd#z5~0Ui#Hf`OCf`KK;Z0=Bf$BSjF`8CjVQUa3D-D4jz{St3^um zGHNtH?{EZ*%}Kt;G0F(5C~*}{l#nD4gcyE*kWfg)>2c$*%je)7oGV{ZhK52|oq0H| zBlbET=x6`t*Ld?#hzZl?F~!%%>(4#GdVf8i`1r@UVOA+xJVGcCBqrE!y6jjbF#*X@ zhK9nY`ZmDhNQ7V{j@4nqYE7I8x96cR@gHyWbNk)D;X@T7A<>H4Vbv{1fx$t-(I~Rd zhs$zy?a(xhSS*Gt%Ok8+;sl2JiE38tPA@L|**;?7Ac0^2L2}`AIk(PIFaG*-T{)GrE#(+0Nt=CmZ}W8^w4& z>{BwFlw8Zsh1Si_fALpL_~@P3?H2L{KR>(s-`KTd2X2p>n?7_qSKan^42D&@_8*{L z?cne3yf&-zaz59#T&yqIz}PWDS7T!%ilX3lyOCuXS(dR{tw@rDD2je*89Sw0{`#zp-@$&7D zOgg9hQZ^Mcmr9=P_j0jFrjoyG8F({gt>drY+rKYvxv34?vTdo8)ZFtv&=~5x1`x zcLIYcT4bCa*^t*PU5;@GL9R11(GAjmF?i`?(#sVE}JqYvORZnuofmHy^h5M;bw`JBH=RuRz} zWB>NI*}h>FaaF)-bF%1~2~4Xi7C>hwBt7D4RCqAXRAPr;kSHBmIOgS5G6eM#R=)O+MW39&NJ_iWGH0U^O#Ie#_C2Y z9o8$0dOW$g%CpuRX*D*qJCn3QJszlZ2cb+W3Z#+`Bl42Ui=`Kc(CB5fo`_H*{Lqu; zr)PdM@zf>@`Aw8oU<4%5sBD@^)ik&EB<@#l6hS6Bmrh?2MHQQsM?E~q1fbRIb4E)< zrkZ0(isQA#ak^!!QXb#<&bRpOefQzbFW>{W-$uj=1rh}0IN~WxpJcL{iR|R6rArS< zrJKp*%19J~o-t;V2Nok8oBgn=!QqZ!e)h^C_O}e-b6J^Hlh0r%#?BM{JoQd9s;Y6v zl5rGyZ09mei?D5vAG;v%&cQa?!qwEDa)W3}lRW;BQ{KH|oh80vX zNMBebtZAsDCsB*h+ZRDYV<4guRRv0Yb_!fplt_^FVGXCK(jSRaR$a^ooidRDKLc1O z^4YPV;2(|qC zs0zVgn8Bz>q0hmYJ+`J0@JHzK$A}9eE)lFYD?XRV&_EQ)3IhQJm)AvsHAZ_+lpz%) zi%32y3Q&8+p%A85&CwH!r`D84D#QEtpMyo?X{B zjN*704KLM8gC4mRZ9b+hzK!o!&Ee4DeTUgt@`@Uw8U7te^)R2ET5^5 zQ(xn^AolyQ$KX?`YNrrQ(y34Za@KX1#iEHl4z( z9XFE8Z`S_n8Jm&082fFbm-%`xWHMbBjLM@KSu|@8&Du;Of7eqk(Fi}1%}KWQAn9yF zy30=^Jkk4mGv!P(kv~21Q(cu$r2QBr`3*Q+c5J?Ce)_AQqG}p_5s1VT2D%53qx}>X zx=hJWt{jU-WhPx3l2N>xO!Y1okr6qs0-$Lc!AP7}ceS&>bqK3PV0?+2zh7R*q4r_+ zw+<4CsjS-9#ndVvS5GfJ=lxiJD=&A&xo%DYufEgA+M~lvm{WkD#%MZtoIk$a!eNVr zd=%Q_GMAw+(A&f7>yNYYNC;VmoyK3Se(|VNY6lod9!QyyQ?Ok zo;=9iuZ5Z9j?oyia_ejdyBak*J5R7BP{99pa|2~UfOobW6?xD|=>iJR1OKM&&h^dpbRb;Y@9Rrr+12pL%sBQ(P>g zDN<(E!_j}6Kfi%(2M*CKhVhjZB8dWh!bk-hO@l}{LSIVcIg|IYEvMPQ z0?WjHm;nP#*RpZ}kj_wqV+y-Z_T#ZzSWs8UQybI{&2%-+@@KKn3x+J=dj7ZB=Xi?ik|7uXnKaq@QXzz^`BJ zX1K1L?_K8O(CQ;R@>Vn7y4pt9+k+e&h%zY>;=th`(egsh;9F^7_Uvk7_0bp$7t}CG z4D!t8E_QZCcwf{)YcRsDL7Df>sbs#Vj~_hQg?nKwKbV)#kxj?={5&aYrarNB#@T6yxFc4`Wp)EC;{jh~&R$_QqSayAt=lkto; z{Fzi3&^z{Q)BwJi^RChvL?h$P)C-hqtVTR`sSsUL(P9Ltd@S#h(Vos*nQRlIXQ9#K z`PI9TOV_tqzUi5}Y}MILXJ^cUc^Z*9y$1v%z*^~KJ5$?g##3%Yud+G6=~5KT*bBW? z60%W7D;1cs*$aKWmxg98ZpqMxs#oRDGKTG#uNX z-o2pS%0aoX;YOb`vUVAzTThu*qfVQ2^p2%*{=6wjA{;n)oI|^JzUz6b)k;N0F*9b> zGk$z!T3N~z?A7dCWm@Gc6CF2VKT_#`s;W17$CQ-|fOH#+xT?`L7@@#zpH71n`Y>GUKhItU1s{esO@qVH@)siZ~6q zrA9+EhC)6W23$ICJhv_^CBAzzM?@P>-`GGYD!!!}d-m^V z_0c|Vbe^iT03){_B8Y&XL2XqLOQ%*arNW85YnbnC8DJm~LmP7ekc~1tdJNEer5V}8 z8RbQ$MkW^vS~lm%=;0-s`Eq(U8%A$+(~Zlh?j+0mJpFT~U_NG2OpJ!{>YbZRb0;&w zU(ln^W@RxQ{kgz>N%wCfplN!Mzq4r*a+OMzt$9q9x?yzlWd^N0ljqFX%Vf`+@dz7< z95D-Wo5^^xp#ZZ$OuyrqR<%ere`eOKbkCUyh0l~9sbpVoy9&}(#!kiRnpoQ;@Pduoahc92vFpaamdn{_xvY2*$|B5 zbw=5^uNg_OQZ4v-c4rS?De==I2o&d8&@>f65U`36jwpnJDzeuy0@x=Ch?0<`Dzrep z%Q8~_2`dFw;Y?j^K@hNsqn{SZFLW`!T4ZZ$7wd*a#6mAqtL(HN@8+#Ny$ss}xZN6| z7zhZ22jXa0DX<6#0*E#b(;Mvg98MNi9pyKB+o-Qs=m*vq+4gNDMV!z$Tvp zJQIXdd8i}xy`2^jL4fdZ43Nn?t$YaBMU9v?a^0aZf_)$;8k#aP6itIXmyFXsGX1hF za3=eIOdafO8_8VVaOXlHjT#iQJjix?FIALCBnM^=8b;;EXefEIZ>IC~Cj%PNJ0897 z=-Id>3p+C+LuMjH^nh9E<+YKB4YQk~Y?gyNAI}@%Yc`@PlIgDA@8rT(>Aj#ZlFp*% zy+nUIUlDHS6F68e@Lalg$9mrM=vy+|l}u){jX|V`=2V{5Z0!khjggc{7tBTmX1aD8 z35Px(P9>w4QKR3{lgg5*Ln2$xrAzG-MG>pjdJc%KnMhVM7)h!6HzEgm_abKZhGwFj zF4Ue~%yck%jFv-|SX5s~IIghnP&aE2baA+Sm^~*4czt&VhuVjzE^sow*nOtdlOROc zx!;du&EvCI)$y-4Ht@}xCi2NDE30?65X^H^5|6X_Xdlsdoc{h{jw@i1MP!#i&rpEY z{t$tIFg*iN!U+ejvGsUA{-{ErbAat}jp@Z_fh!bFZ)`^XZ*@DEP?3+)F~F6(RU@3-bCmyC*+fj1sGIJ?+CIpt zgHgtp`zRe%+gY;9D^#`yxnA8+NOhb0c)VJmII&W6#$D zktq+(Hw_m{OEph=4Sy#5$i%BT8Vf+r_eXosQoT2J;Z1e;$V4vm);~AG%T#016Hz%3eyj0Nw ziN2jo{*2CZw&caAT^c)2W^7s}vOU%w>ahbxJk!Z!-mJXnp*fYjZk1R%xtK%kL##c}Mdx6cr#7EtI2;F{vcSm=vnyyQ_ni5L>hI<4 zt`L(a)l*kdM3HkOGGOVVJRDCCa6}x(`)Ygn-!+E`cI4B0qMehP#P~cnlYAnZH}vrP z)ki5M!p^23rIXHeY-@~!#=o(-2{{_U(%sH}mz(d+D1`PCfH3lc#;Jb;l8u@oFBP6P z4rvZ1S9)=ZBIQmiVpoLKd)j$>u%AYM6ybO`*IrY~HPu0$T-Qiji<749y=b+yxMd4c zSvhlEovc%B+&Zn8(ZvZhtBbic1svJX$+K&YQlNxb(-9=Ewg8JLAOey&64j7bQ^O4v z`+0EXQ4UnO=sD3&yt;_x4FwDx?ZG}cz{77I#X3C1j!uOu8$b}Dt*xKuH#X5&ps@W| zn8`E8Q|7gCK8}uhy)|aNhGxB+MxN7)#I1+MT!yM;qqeXSqh_>Uv*2Ur!)Ru+ypEpt z&SxLl_PUPk*Gx#J89avbLI3FAUx-Q?X0QT`@GMggM><}bk>h0Lx^g88sc1-*_nwO8 zRDGo4U8)>kBQj#fyJR+X;(P+@n)R0F%I2lBec5yhWCGBtw|}EHE8EpZQuV3F7G^69 z-UuE+w)!_KgPCF|8IjdYbUoXZ3v#K)+4!c}^x$laLr;_Ly6dj*88Mh<43#JdI!HWSH!fkJc{iw6jKnLPNvirF@JmkwMEV|DEERo%$wW$sUBBI zo}eH&^SEkOB};1E2%?D1oyV*iFAfm|Ny3}&rM}dK%_`yY+L>5g#Jn0WE?LGWTaiVD zkfLGB_pxximm;T?3F9hQTxKV#s070r`L(5d=#ol`oibV!x*OX#=_%lo3oCI*qj{_$ z#zM%N2v!FcuMKS=LUBbtmrU@HZ+9@EDxY$XjAZvP)hFSPMG1sr#c4WyyWmOT^&n~6HBc~4u$wD)-88NfaWV%4; zG49Fo2eUg()ilU$>3ejj3Ns{n-y}J5Mc1e)PD4X?^=EAV* z0W&lb=BIaT>Etw5{7Lt&o+ySy^PTMS&Pdvjk&;pAHqe>akFm7o;!t8X@6||M<5cvf zx`;D+xn~qy&`fGgIz35;#-9jCO^vB^q-o?45M_lZ^jHutW69 zbE3X7xs*sZcV;X7q@ppEZ8c)EQ?2!>^f%R5&8#Kaz?3p;4^p-M{(dw~LzZPENjmeN zD2_yX3#zJ~xA+4^)ffy$Y3&QqGaSKc5vj;`Q0BGcv{?)@7fnM|qD13hwc8jCIiV_X z;_*0wWWj1l(08p@gMTa*BN~koiA3=G{m8P+xN+l5@x|yOkqNL%HX=T<30!!w%9xo;j=v_o zGwPAm>z&DT^Km}QbDa-dgNs!*j2>ijL0>lbX%>}x^th6tX=mG;sOQozlQgbuuM6)5 zxzENWO)m8Pe3pvSGtNZvoh@Exqwh@ll1iGuTH)^deXCo$T9j#GpYv&pjBGhGK;rQrz1_pqOs?eS$-V^Rv{F>&qpCH)iN$Hvk_fMmA7uD9&n;>CyF@96!1^aJ7!U~jid!7+W=-# zYSOG1R}al*@=A?_t7dZOPv=!P`VGCnP1ypQG@`eu?1fR?O=SNvP1j5n=4}+vFOj{= zR2LKRDpRnuRN%u#fL!&?bEYBqW-Fc;X-2&JMm@}WOV*}aYg6$fm0V*(5DfPhw17FA?LX$%1d$?qQ(gf2I(FM6VL=oit{LN z+s>pyWb*xRAVfqFa5!zFq6N$=+Qr!Z)}je66dy+)GL1w4~nX$Xy5C)WC~WI_s07|GxqHFW%7$; z-Q&w51z0Q&Dykf*`7T;;<>%qb&&#ra3)o%GkrIg+^m(Dem5k5x|FvB5(FppgUU0@# zo_yIHB~NjBL0}o|sQrDVC5sroW|nAW>l zPnV0B=smstCi{ljy6UNNh|L10rprrCHW%si(}WIvE7I%up6r^4Gvr-ORuI8{WI5jjufUDXRJrpG23wUuUd)5vM zqSwY4-4N@M$#eijjJ=Iu~9fHk< z9w!5;&4%ub?%%9^N_H8LOz%^bSJMlwnQWtNrmXc?9ZmJKQC=GXyfu=xk*rU>>!O|u z|A+Z-^-re_Y&>7^uqt2hyVYY-rBI4 zhUh2yo)Otfv?(9EnKV;>HdEAJBXp1DZ?anM$u_geXdIiDtY<9geoj}LJXcjS%;b9- ziF`5hT(bP?RDVmA-<^(*RJr-d<~iL#P|y6Q)1h=@GUBDuBhRU5*IUQh%-@Y1M$Om( zy*ikQeauERgkjC(<>ehgBnTp+`5&(w)hC>6I@%vX_pIRCA?gEJnVU zY1J3KcpG}>Oz#D|-iyO*;1Xq0idoP8!pK^X=<*_!&DJYhW-emQRNxr9uQ9_@gc@lWe1#&Nl14>I-3%*ScBBGpKX zp#T6N07*naRHW(82#RoOdNm+UEM~=OB>`RO$D`-lX=OlBM#d~jhUQeychk*<(H!4Y z9%?gm8KFJVyqf{0OeTkBK?=>tquEkbMu9i=0xXV}hfHl z7CYx}9*>6!6DCklP>@hI_1KzS2Jsvo^eQb-F4UZc#pJ;1)VXSfzCyFi}S(D_cF5o#mrYD ze19(^ke?PSm8AuouFR>&=qL2XC|$htzYp>7swRr7YAEyB z89eYD_x$`pTJxtcsXQN9N)05HY#fO;BCQ)9;y>?w7JI{VqU(Rbw}0{w{o^lZMv;Z% zn;+q8-}x0AwjQ8v$x;feV`$Yg9-VwnOnZ<$Z#>TZ_x+5=4o0x_?cm8re#?$%8Fi&` z9=`hr{O08r7A%^K+ct7BVzzACz{%qrZfr$xyKvZKL>)4jjHl^j+N|7}0(#RFhI+Pf z_dnmm9%}=O>I+iJ8>Y__f!t{4EaI9y!&+U$eE}Q_WW*IWe;FOjlCNXl`vLGOL&NbUFOVo=ay>_0D7FHs2U8 z^z^T1{mWIllb-Jw0Z}uGrJ$-REiElP@W2D)<>jHODzRAXO!c6)wl?^T~8ZukNRs=X9m_jM@!7>wLD>-_h@{6_oHbVvMeJ>(wYB6QA7{~a#jRBm-(8xY(_kXW`JHUmcv~(!aL8moSd&v zrA%lx69V{Ns;-btxl4Va6X3<~e2qu;`OzdFlV?}Zxn(aKpL>` z!5$)U1*^9VyJHZa3~DUSra!)jKkQ`s^hNmWX84mK{{!9ZZfs&_w}oYwmQY(6=ZLF} zLZ=n07^Z)4fWH19ijrvxO`N^2KFi~4c5~gg{*C1`CgaS&cAmrEESJzTQ?)@AHM;u- zU|2~@+nM*3VTOnM=&^)}sfnW+5{@I<&*81lbMLAc*WLbE?p$1AXai%0=Xy8O*{&x& z`kO{WHFN0{xR9kr&&T(&UGD3Al-A64iP=ov%_LGyFaPyc(TK<6?Ao=9Wy_YaY}vAR z^`ojPYu2oxv9XaUQ>GY_g>2wxm<4o8_KwkLigbs-Oy}3k`kc;A>G7Z&tum1;HYcI2w0$|2Nc|Ph!X46QT^+*`;_UA&l&u2Z)OnGlK)XmJC8dZ2RePw$N zbDbnJD$fA4B$ zeBx_-a=x3!EwAv$7mhRcw%ce>_VePZJvhs}^z7Tl@jwYT+`5A6mNsD1;7nk;rZRMN z6A%3IA>KLJM_l!A<)^>KKio14K?!qo-Lw4W_s?-MY@=%8Y;L&yBV04H3V-)8UVZ8@ z{<7vMWs~Yr{oRP3vXOrKkMQcr0c_XYLhH-F=h^lkWyJ!!)*nEqx|BO_o5QB3|HSq# znT0pq!JW4*#HkE(WZO#q@Q0_^*A~QEJ(HVOe2g0wO~j@2vE}*4dF<7V4Eq|G;_YN8 zG;%P+YDJc9$kr%Z9{q2gZjPhb6o%T4vhI<$c&FLRjVu0+B~=l&u6dbf*Y$DPjqm5W zOUEGsg3`mvr=DWt{yt>uFo%vcW3OM%?Uxnv){{@M*Y9B29be?mc`@$&!T+L+zm~85 z;|&O%&AjpGgB*}1^1)Ajl&Sd=;AhLKH`ui59TW=a>+Pg3P>9{_!ETih04pFk01=eH z3I6w<|K{agCy_l9xO&AW_~`XBv5Ti|3dDoG?0WMB{`B-4G!AN%H!S4Ccf6m$z*&qIUZkkn1 z&yFYg$$c--5`l4(ui%qk{uHxH?V}cKm4UW{{N;&1^Op^Wuy~5Nv@N# zUR+1NU?ph<*2eZN$Elcq19#kZ9TQFob?<>U`Q1-m;$+(Z?&|CK`oFGVqSt{E>EV_8@8OX( zhtRA}#?QTxJMX*+>(RCR`I(J``y_V0@+6x}?_dH)cdzdUYk8P9~G#Wb&MD z{mIrCGFi(~HA_0CCHr@#We-vfO79^kn>YYQa|lNp%4EWz_ck(9kFws2hIC=9dTC0u zu$Tds$uufL?=7_%W06TdYAXHF%b!dDQjFfzn#r%t#zjObnQz~{4pr4CTz)$Cj7D;hs}x-Jd}^tph>i7o5!_YHI1oJt}uyuk6jtsJwtaELH) zWEDUD&$n=SU8uoMHoWmD-uh}5$9Hi5fBu1HS0Tm41!!IS_|pS_L<`=^gx)ng_WYZ) zC@!p_gKTIF5{nlC5Nh7fiKcxV?^mf04I>Bw@i+|h`;jJC*th=>_DzSGb%n&SUF&Jl z8lcFBbb9WTD9tC^*|T#GI9y0Vl)f#`@zZTK@=6?N!|l9r|J_Xb={-2xo7geP@e{GN9^)^6`Z+`Lclq-2np3hBqiOp)Jom^843*b0uf|II(G5KDY6(m8!zi&B z0s^t_5TS4j4}AN#tZVDVT2fC{q=m+nzvG`xIBx>=!OV{GTA^K15VEryXc83Ei3J2c) z6OTA7d~8YH$iw|7I4)ISQ$@P=KgZ9XpUqD`I-R$E^aXymT_rECjIx3NP4B$G{hck` zbbSS(fB>RGREyDZbR#>rzR1d5J(N|J6N?0S>&ah$!@>vZ`grj1S2YGsuXLp-c5Qs8>2S_Rgaz26PBEAT}g$XVdS8pXTM?eazn4(*UMAAVa!I~ z*SqI3OLw|=jFj-wle?a39#R1~CJIMSBrkgRr+T7Z(#cDz{*CZNFAa$ftw#DXqwl$t z=dt!rk1XgZ!Fn3oCK?&oSYopou3&_CJ;Ub_vutANre*Kp%CH}k2Fe}q{L;}BypAciD@D2?Oe|MV~1^V_?a zUtft;NHRW7c}Y*XmnFb<$}mb&A&aiNllva}6`z0qm6URrmZ4VqBWLISdJAg$qAKK75_=D~;W<^3}z;5<|R z<#dw2jmtlK7w;<-$uFA7*Y5rzv!*PjCNe;%aTiBgyE%DifQHISX4U4Ol`RP@B8aY; zeCazsVs*P(k!A`})V2X>aFnGyv09@QZuz z=H7?zWvNvqe)1Le^lR7wPjNN3e&dIH=j&f$QE4$(Uvnex`|u~Yb@>cx3q%wp%JF^8 z^tKMO>?2>`-uwTDZ+~Dur7j7GvH8Wd#3C`~-|;!V`sFWkO_@SCc7$yw&r+-iF7gYf zaLv`%aOB^WX2|m*4+9m(3{U@V<6B+XqLU7=IoA{@w3$|G(cxalVV# zPzWLicy31=XZ|vN^!o?+{`dZikIu8wAMIwSXd$1x<5C=zv$*`G4>MUDrg>i%3vT!* z-~7*C@?Zb@31&Bxu<4zX9NpQ78jfPOIvGD>2_L+2Ik$cMTI3}5JKZKWoqbHVM@WXK zo~;x)J!@UMF&Opg=xt`A9?a}-jFf{jN_(!K(?h$_H8Pta%jup^b(qM6U+La8QenZU zY@5NGNF)vGj1{cxbFq(DTS&QZ^B+ur+YEiKYB7&VXMNc(Q)ieKA0mWNPeq{}Xb{C~Z z9*VrsGZ3Ztboe|9{k{FfV{uB$d`O}Qd3iX{2*eN3rY>TraVP6HZfCPoA~*m}uY!MQ znC{MD9CZ$yP6s|;J%y!JSh~UAw39dX(QWqRfyaMzVBXjKpvIA%4m|kNV+OS(AbaiwP9v&ua^Ww4Dk>yh6PS0oEF@FLc#E1Z@2H}W} znt~cGn<=oecRO!w8Kx;-!|bXV6pxB4KQnta8J> zu-gz+%h?GIg$WA+LVgYTR**yipW99-7~#Z;E{e1$XeuZX27^)h15V1_9-J--huewEn&MpA5?FH4#xLoBmXCv((QyQ~T*39U)^py9>#(W#)Z?5w2 zGm+nm>2UpCXsP6>a^3=bf7(g=nrC_YiVCI|iZmbG!2S0QkbqycDZ^h@KN2bWh4h9&RIwfaqvI-TxwMTVu?=>2rK+k(HGX{(|j-gvXml zQK^R${$U2XI%w@aOm{~YF|m?^?;N3Tuz)Mam*E?AAUbCZ>gnHvN2rxVEH)cjxSPJt zW;!}G`uu~0BnP!66=+gB9m){BeZ6#bXzV`RLm;FiWQWYina=_^eEHNbT*OoNuVi&o zGv%|EF>zMSyS%k$Xc|pq{M65t?LICpd7jkG#Su*iQGS#Zes|DyCn_hh_;x{B6Ab_9nJ(*ujF?_2g+F zY6`Jf5Y;YY6-D~Hn`rNzNYvWLfJH!x=QE+i&M`DJElxZRF@Fb#cC6uGw3ut}Siw9; zBhUZ&NrKoZ@!H9A4sr5$GfmZn^t2BUj;Vl%%Pk`au;8|TWW{VRCwA?k2PcyYY-dK- z-*TKSZ@fmNXg+s*^uySXtl^0#Hi96WIgBgH$R*9$W~XLC5z@Xs0`0AI_ZHH+V<-L; zeC+8R;P~-oY|=>v`ued~&c@}-8^NH6D=^mMU~^F@X*3U?q`9pNZ>Wp5{y0vjjoO+5 zXwuM>IN^wj)9$3u6QjSki>~%g0-ZgC0%06Am8hDH>6ctW+2R7c!$(>Dmp3@D^=Vce z|1h7N;!bKuje0rLZEDS|1=)-Y(DO~BWx4dOtwt*-=vnWwfpL=#lPS}ElbJnbwlS8> zUg8)z+-DQSE?fK5vA?rgtwf{Ig!8N@3Yw-Nieg&%$Odiccx~j6oT-D(sO)8Wab+f5 zSyffy@pwwlxvHv3z1DhZ&a|pdCe;>l?LbUKyI%X4&Gp7&l!#n0AY0$a)*(34+jc#I znkydVg4VITG5Vccd+f8tlT79$+c(&`l#PqA+~8<>tkui-@Z7aLvF#AQ{_g+JlxamY z?>|VSsGfPVuBV}Rh|O+^!GU(Rzx5`^b{#-bONhtgC>jtKKppunS@e{}SxB)Q<@lR_ z-ZW1T`dgfO=f&~CDwtRs0e^S$&`7Ft3JqvZMXB?3WF=02>jBd-_OFj|vZ)1s{8SkKsjg0cDk_}n6b;FqM@j7*rnuLzGw7nKbUafl zJc*eZ7f1Mgs)>R)Dm-AMf7y}8f*a=X{BPG|&G%8Wa4ud=8#&yL8j!%*!!Du#f^h0b zfz#I(_Ubt-n(#Jj55CS5FG#qW*RiqL!=mdeS+ckm3!te{nvd<}si&XCRXvG$Gb(U9 z-Q>B8@#K54SZoMlkaerpGvyOYm{waw*S4p)|KVOLgS%PR>tWK|>zP&v#{lir_XWv{ z&E`go_R@NAEB*dP_IF08o+45)rG~nWQr5lv3{9I~W^kYve>e`; zY-Tl&?Owx=?+Y;9-OajvA*L^`XTi99T25F{`l#&=4Cbb@~qgDe8v}^3l?P*UnbY~G+B-MRF?vojv?J4M6b8X z>}81Fdh~kVHL{m5ieZ#VONCyajeSEV6(kbTmxw>vKo&Psd)y4bu_Q^<*4DCb-#$u9 zOW*ZuBoZMM3Q?M7|4Uiz~M6t1^PcinZ@_Yw(Urhs(|L8Os-h?gilPvWMv){5pU;=J-*ah}sb4q; zxxbC5T}Dv_@~i8Zd&LcW^rnU6%OVzWh_0akLvaCbNhLMDe8x?x#bvV~I!c)_dm^O; zGJ|bBi22nlm|IVtLmoLm31Ib9P!#QC2rHs$p}eAkirNWGnmQ3zsD&+Co3Q5>Q|NW! z@|LsohU;0fU<$IohoI)7e$H%a>Za3B2>x)0;r>BHcL{ZiZsv=(FTm??)7RWZEHXea zZehaII()tgCQO>gtnp>ov>?M#1$#j;B~?{aRpjIKxw-6$OPMyV47;Q;*w#wWUdEiu z=29fbIeDy`f`+*)o?VU-=%vGNr(wo?E}2|QS&^Ooz9FKqICkH7F2CVgmM)o1eQgPv zpb`xRh)V^Gt16|WY#g&LnTuEKqbKBG%G@Q?`9y}=o1v(IISXcxXAu!10eVkt<#4o= zSxc_xvdKl~W>RQTdOQ12T@}olJCQ!zjubnJ}@d+AZ+Kmj6%P=@N4#_4~EuBZTF-iY~Nz=mBEN-r3 zC^1IyAG?doBCVgw^uNlV)ts%zU=vTP-dF^lnR9;2d>s@y0elM~Fo;{op4eiw5> zV~mar(c3>t-TZ|-@WgMjZBFvK3>aYpLOR_&!;FvQh*dT)cTOd<+7>dqE=DF}Qa^7M zOIl}PWCrP(P?@)4BP&;|WsW||VBR7#nWJ{uGMeifSh#8}D_bhAqc=Txg_DQ&a3K|; zw!W4`B0G&-=v97b?hrEE9va)#5Vmrh>F)lK(vmfqAE`^)oEl(zsVqzkX5e^fLhG%TnGo(^kEImwE*KhXX^#A}M07*naRBh8C zeAvH5YIKlezkGq0UVWL%mFxJzSH8@aSus!g+p7sfb64KWyemr&3JjAQFiX3C+NDK2P3KP&M_MBSM;ykrbw>k*JKL z+un$oWV2baIWR(D3~dVkmk+(hFW&fo!RTC;&u^q}&x^cru%CN=?~i$EQyVcu!AhkV zPp8r26-4wRv^4W%vuSc@gu-Do3B06IEI6Fn?hS%~cV?p%9v7O~pmqjTMfO4Badr zsv065D;hPAu7}X|&`mHp@uTxxHA0~{hEa?MLqsAWS6=z>J&TFKUJmWrPoJ@fE$cV4 zy2$2VcyTiGj9)&;t`E*JXTwJB`uGMCh{w&^%Y;ERVGwnKOVtTQ<5T$!3g@h81sm)z z$z;g&z!_8wBaC6p98aU7s+y`~l(Q!e^1|U1L@HQz=R@pRTzCBdNQp#9*lf_J;MFj~ zF$@7cQOMijaLiGUso@y4&GVTPX(kp4V}v!iHA_`V*m(04#_Z~$2+45NMqF+@JSdD+ z@OnEEgx(Z+*J~+TQ8#K4yF%2!bz2K$Y&*C0)r+w%l5|eg^;{NCku}1TzAHjIuNMV= zLOs05kQ@I6aX8?mq?+3X->y2CA6UI!(s|`izi#oebCjK*VHl*-X~N-fQJ$HmO+KH$ zeh}<5mS|NfKlu~rQO3PqMviWmCSz0h!M7iJ z2E{8fGV7JkUw{2|s;jG+J$p9caJXnCfYH%WE?>S(MMVWGR;-ZbrJ&Z9Aar#Q6<~ta z9Wwo#KY!lQ1HkqGU?!oaiRI)9?4}%?Hu<;05cWzqzwnoe5&ST85JsP9?3-5)hjJ_i zLD18WGM6#(%a#A3n7kKz&dULSU*+qU?m_kC<*-u*zEZn(y3scXy;+VXWAKU|fR*Av zu$+gQ<(3b>ye{&-2)_m~zf!^P2ljI6#GvM1s>7Wi-}e)a`B8E;z7;$jr2L8US&-wD z8h#nP-s%gn_V#uIe|q;`E4a~&2Pv+!A`*loL8%wo#J3EpCT6noDN4mY>yV&9AAFR;U(%(HH^ zDn@swc@<_sm7!H3V>``Xq+h3b7Ne(ADJIc*xZ%kyoWTjFPJHAvh8xUwJZLA2UKN=g zPl|?AxE(Tyh9@}XED=$_q9HGCw`X>9aau%Vb%7IqxXG@aP7>8svN&*q(XOt!6HkfC zgd1LD^2vzSDYm1J=%Jqz%x>$uOdn2exy9tyNtT^>*=>%+`u6JXF3P`7{kZ8KuO3fM zbMtx-EGjF0UG7B=v1O7Iy3JqY(n`b?S!Poyn~7XBcaRqvi>wDuy4A^h#?5ATv(>yF zu88UnksEcVd}pFO=f=k}`rB^pva@lW!k`OvuLwWN%70T+6Pl(mFfc$WmAa{4RaL31 ztfa24?t0>98C;95e@-};)v?9iaavbob*)#s!6`gO#`ba4UBx^Af_4M^Rc@ts#TCQ- zt)j)R5)a(&C-t{0zXqKI@OH!Bt#tdn-T2i{>782z*X@L-U$r&!SJeiP@fIrupZ~97 zXMGgsb}MfDWe)$!5sD(q^M3fboVv7}p)Wxtk1nTNO~?07Cwwi|rV{~9XPOTR&!yrc zKRhB*DzhAN=hXv1wIiTivpY3)JGGacWRUNO+?WQbEJ`&`r<;;eDSS8F$=O)vv=oIU$gvBv_D}yW1%KbFCS#nq-Dt?tNtPB~o^z6Ur)NcEI|zKtgw0RYmmqN| zBiACHWllJBlHYQ#7hZT>L?@SH-3bC8cC-<(RYa1K&E#_#xP@+JByu8okz0}PW#y%m zyetY&5V9i58=_T%oOn?bb{Q`Ow{^j9v-1cO^`??p7evc9201rb{EFmHD)yO70#UC? z7K7r0nYu{VbwZ&K;c&R<|LKx*e!M2_p7B#g-D~M(4 z1?9w#jL{^c2t_l)${IU?O?WJfQYfJiASCq*L@ zvorH=r??0^#S(-OE_!<;f>gKIqM(?~3HM&JA3OCgdtxgp93t_1GUabXc(m|&Cth`e z)oFa0xHC82mf>+x@0_4AHT(4t5PjE+(d1S-&rjJN(G7%`%1 zT$4F$ovAO~Vwq)_gh}F9J=s!3Q={Vbr5+VN|^{; zyu5Ph=n_N-nV)^1E~-Ghd?s4s(dnnt`#~fk3tHIAaU&$-KI3&RG6x?)&ByPUvZtn7X&54viK^tAj-HtmLirhXuTwx1w5!S zTOylv8C_ENdyvMA6Wrx0*%)+ey=aYd+08(ZReJ2aa)Q8#Z1O`9*(>(GNRl=gUJ*@x zX@|30-Ru%|$;i1A{!5kj#Lc#`!@WpcJl57!>uRK0#BPGpsG9H)h~oG_MZ15t{& zu2SK`PjaxJ6i$!=E%M&&mhkXaHjxB`UgcCIv0W*2ixZ!eJ2t+Q`pv04XprLtNxyQ% zz?Qn*ZkfG(&n7kKdCRWfLD)Ak^OxPvIN63l$($(NRlB;CPE76PZ&4w! zi-Wf7r%^NF19$j$)Q(8JM+LXh(uMz`kwh+Q0~xP zl&jb0MPUgdW3=qT6Lh`;uQ%s1@H@>R2>RcS2Y7D!-VaavF~CGTA!H17kvjK5&q0*t zqK2VY9+$`F7DG}ZaDoL}b43{Fw zs3`vjH8(G7q8IrWnTt$LDYtw+GP+sx^21HWgS2mCb%|`Kp;vDWCvQ);F@mr=9CHAO z2!1L5mW`Q~{o8JgAp4c++ijkr@t{HHUXX!NrZ2zzAS0|!&xpipJ0;nWiJNwMSH%6+ z>pVr1&B-JW4AQOEPjm8O3ZhnQscQ6kiSZL%EM#NlN|~Im9BzB1Ocds4@h@dUBN>=P z^n6eua(-grWpWw#`Q9ydU-Ww~xRT`yJN+huXW3X(rxS;UKaC*KR z;iPVJEJqxAAwHbu?{_^b#%q4&CXz43i>w5R>maIN$jskwt|Qq)npSeqjDwC*AgO{t7daT>s#rjs@x>Rn-e%z;S6|QBCnV@bZ{q!x{e^3ka?byl{D;$)o zu2b2)pl;%VyuFc4)+W2i-3~lcs!*p=@oCU5xTQXv5Otpxy-6uYnXzI9RVhMJ%2685 zud!V0fI3JXmc3mU-8hMQ{>bV{FWvxNaU!b&N|iHdrhQV195RJtc)`0Dj~hRgQ_8W< ziP#B2HxWHt&RhhyqSR+O@frj?UUa@HqJ(aj8ppRYVLvMHl{!=It#psRU2*-Z(*Lho zqENSxkYWa;OsJ3-_+-jU$%ME#(J<)R!gisr84G{&V6-CwN8h5%i&>2>%trkT-F^1cBLC!}+u!6*y3|v8tA=;OyAb5daW2`b(2ZTEK&_$cPG>nE%$NS$W~j~)Cn@RmAh zoKw847kF=V^_U>>;Y3eac??SCMBdG2vt%+Evf1nn|3$-IWW6N3dZ-o)p%l@7PJB>m zo(NKZPPcqMPbQPOfo7RZhFmUpQ}~u$>C1BB!%6SCtp}p=B9c?i3jobPGQYnS8%K8i zb!)n)fZ5e_l&N_xTOZx)b9VD7G}uLI1G~*5hXbUsM}|%^V--_|B4gQoX7{d4 zY`!19k)fMYEWIo)f{+(4w04Shbb`}~PF|aHUGY4VBg2f1jWCf_(6k82>PjjSksDl> zf?hbxT!zWGF@7n=&tBsF{l?6j*)$Uqfn`1vT-I)VTJtYBD)I#CS%fqP7x4QII9Smk@Z^MVixS0~9S%wz z*5ftYAeYP0(b2(~GiS)}gBvs;6l z*4`lE)eHNZn3&-7>C;@fa^)u6R#a55V#Nw{T_+q46NyBM>NCgrXUCz-g4Tr194xHK z2}q?-Dyl(K<@wVxVXPOF8i?zV&x4|3siHQL1w%ccB_SRKRgp?$S&Sc?_|1;LgOY94 zZ4fVvBCF)=vf|JDOeRLlDZBej!ErO(oyHcOn-fk-8Q18R1WaZ;CuJ&Qe90)PLgnX` z&t%>eaqqEn6)q;!L6*FdjrVgKL&Qk1JLoB8S-TH;(`2;gDBu5+f5Sihov-l+-}rt0 z#n->ifB2s-(%wIYDJb(^@H=t!6hHqTf5;#I_wRDBCnJ2aDjP>?=Z^0+wr=|O;fwqE z-hcjA{KxP7h*QH^M>%t&jnko*+u_gT#aH>=ulzRu`wxy6ouepE-}qdLH~#b+eC4

    UF`rnC0#qeMkzbt!e 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 KyXtn3vi}4i+S6eG literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png b/doc/pl/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png new file mode 100644 index 0000000000000000000000000000000000000000..fcaed8bef9b6cfcf1460868fa618bc71e1373786 GIT binary patch literal 134643 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¨1;~vR7FGNjlq-$fw+=GP7erf56AyCD8z{V(f-N$juesbapTBs(KN#}ooY{qT zGYHz%Uxp>A(KY76Fv>=zYpf2~Go?65fG8Q?wAh_zm}c%y6XUQj&zY2ASu)jGuz|Z_ zlnT&!hGC!rODd#VIkYW}v$*UiS;UIQ!mHCv`1B>`7iXMq??^fE*^AG)d-aHY)8TXG z)yJRl=+R@kLr1}qGej!8%cp$f+rPleA9cKTKjig`S6J6`I6tGinK`CKx2$S$@s1c1 z-WzIO1*(R5Nlf#?v&UB~rciSx)z#@Oga+?Caf#9nui`$<@N(7@yi|$ac?`m7E^)#7 z$~2zv&0azHVp^@mY%i&GB8Z*lg-)@xwpOklUD0)&uG42dP{s1%ohX>sv1!itTakXh z#~CLaqc+fn7OOH8AFPfYE450eV2$v%N=}q)NokQPE>401?t6yQt&SclyZw%v>sv5} z$B!Q|4g*fn%ER?YaYhH@Z{q=^>ulNNC|5^)GWQ9l0?gjxLDcN&yeDN*T!tWny*Mv| zR;^+}bWY-Jic0cLBg*LG-BEpEnY?7q_j@ic&PZwDlg~fnG!9a(>JZ#iHtx$hKSG1$ z&~K(3CT3GauX8E!70I?i9`f>LFyYGX;hui@X1&G6SYC(8H5anUsze+1R7v+sZ zXsw81PIPU+R7H7MD_b2+=E$|MS&k@&Yi&rW&%dPK}wl__QykrhtkXscI9!{xnoD1PN@$zQi=4N2{_%nX=!yoYI z(Ip4p(DV(*&p+Y#;yG=%lhoQ=)Op_V&IjM*eAnTCVVJo)2{SvDq$w#C8v->>WEGE= zRm8K#Dj9hF`ZZ^}meyNxju@44jPoSeQXkZm8Z|oEX*4+4Dlgk^e}=UZ%vW+HWeLa3 zDKW<*OPuw&7vyWr!isjz6SK??W0YixpfTdhEN%Ll-L>s3YN2f;PF%tX#rK7gL$+Y( z^=rf!jh*&XqwQ9;iu+h+n|c{iNsGKYi{UU_jKe@mGLWC=Y5O{< zZ>H*O|xpFwCET^VPLtJG|_mh|E5$f&1`QZ$!KAXa_TFpsjKD^f>ea^18b zvZY%y>MOMh|EKGEth1c12gY#`a91ig-w<5GTnb}4$-K)u5fU0h(|J|y8hqm@F=?x} zV1tC}Wn)<~oEG@uXRmnqFaLnM7cZeKeB-@$ISV_CuN>pZJMVtL<cK`R5}DCDg@T4Kg}Pq2<6 zCI^gjoK7R9X4<}^-|rL&Q@2a7$W1M)b4`I=SwgM%5-;6IitCz-=P*)zDh=SFY(&2A zdU*y<+qTT}Brv)yZMBF$Oo4i*;RK~fMw}5&v{-=NQYQ3jw5ug!yr(Ee!#Yb^5-Qvv zr?|S0R4gbjx7G44s&Udek+WMXsLHg0$gs?lfYzHJ;w!0s3f_q!(KxXmBw(vx6^UT1 zp{AXxePfXQh6d^@ex#B&(cuyoU8CB~reQE!rFhS8 z`0`;UMqD}Y_I)qlGhNeHBjQeqrK%UK?OM7Zj9?$UCOXK>$$Q7`?UCElz%)lj4NmNK zJG$MDMCJB4C{oqXg`lc(sU)b#ZEg`FLCIh}`@^2Dv3L@*vbIpBI+hrDb#ue{e#iMlw$zSgUg-OsS}LS63Ly}hMyg&b??5il zHm!^-Go?exIP5L4PH zfXh6~hRHRO!Id+?2bO8Vc~L?;6M({@-(j8QIGn`gymio3XGm6o_g+C}bt_k`wW=}7 z_i*~nCv>lI`djPK&4a^9SMlpCJZtzIn0wd#mp%@SGwJdqQ|2q#Op$YVT5I4GouJ5=TCrUQh0M!|F$QOa1%MnlT zcJqtXJTsgoY{>*KAg%$M(H-Ybd|N9&|%RA4Xa(ewa*Ps2Et9O0|-*?1n zw)T(|u)gKu(G#v7-HJ4#q6C=(A+FlYfto$7+&?t#)PJZ6w2L#fcD; zAWe#?nprQ|@S-Zu%Em4%F=hsB_Sw<6e2boEUZ&rPl3a98RRIf`H^V+h{x=+Px-hXX(U$xk?)Ccb3%Qa3)< zN_lHh!=-9l{D(g#Yfp{cmvbR#y6_6E;QS-3@JbPW3w~0dm3mmf}1%G(3IwjOWjv^1~Om+>H}C zE>I+2-Nd3rtl7MP;B*62Sz@AT10_l2CW{b9*Y$v9Dx-MzRDE1h61$HJoSmI9jiUnN zrNRnr!#vN7De|P-adz0zwJoP9)Azkzs*aQ;mf1Q_#R{;jT1qkOx?V0G%Nv_k>piaV zco%frWwFNKz16LyRPWwGfM$6^40_@hu%^JG_;;i%H_p+WiM@lX_T3F;g zQilS%=AV~^tnI30Wm3J3GaxLrK(X3F)bfC>Q#a4i+GgZ6V5(3$oNu=_V7Tu=K|kL75EC6**b_W6s-EG_T7Pf(-4ONL(ytS zl)k~rYPO_^Zv%ZB#JXTL1W~fRJN))<{VK0se#Z6fk#GINukdUCik>vRC!sNSatWpNGSF-A9q28@9Dm$=A=bee_LW&Jj=2Z&LW;l|hvA+vI+T(FW> zQr^-bbS2ABwyyQx`f?d{x66D2m8t`><~8>f!K$Q|q33;1T1&ns3zmYZRsVFO5jd8< z2|RiH2=6^FUc6*n()RChA>fTX1a(F8)N()fQDdpqSwboqldU2Z^iNrDl=5&kB)_L< z95mGbaCn&hSVQ2lDwNluq=L$#J% z6P;_R1{p45nCAuKBr3ZxMszr7#(9C$yJCo0@C{i@e^U$ALP-n87S8rP=Y7krZ#e8* z4xQ&0fBr*$_jmsx&z@b;^_7ph4|(TjzR7rZOCoaEpYtof{g3#;U;KNnU;T&>46i=@ z7(z#P`IyW7C8fyc<3hvka6yd&bxG`YEujJ5SnMJwlx_a@fNJTD(~YH!1m-z%e%NW2 zyF7m}CUQQJQ<9h21?EYp0ZrSGb7h($POGZrbdnsg{Z8gWDPc@uoF=;6fu?IQ<3LIg zXFdI{mrF7mLL-%vGgc4!EF?!~>2?AZTVj;Co>dl>w&g2|rfIw!2t}~POJ2Yfe6Tbc z25P?0uh&{g>NhJDVu~!&!Zb?T9=v1Mbu8lmSlSS%Ia7+E4Xum>G}$B1i;yMT=Kt3N z=s&K(({xCbc(}&on5si(DrW7uz2Cf1S}JLhgt@mxtd)~ied91l5S=Q5*QC%@tZ1#} z`tHc9n_IP7$ZuTcW#jj3-yR*Nt+RwRdz~Wc(>0WDx8I9ndOiHsFXn+pXqzKx+=?;g zr?jc^^C_h_2G{E$_{ASNrY+TU`&uiQQYkUgG?D_l7En1YOw$Q#a?wqg zJp89YveK(Hw0$ooRV(QiZ5y^Z(=?BCP0)Cj$bJ`S8hCPb;A`(Z;=T8t@GIZ>dwlTj z6CPdky!ZTyU?RhG!~PJ+L{7u4C^+qC$m;hW$3i04nP1UnJjcF2l~*eJnIKf97hX<=FxZg20f#*# z@ppv~M2F@i>Nsdx>8|gkJ;}l%cfm7_6U(wNoJO@Zj2LIx9}YB4L*MuGyM7yTJ1w=9{LpT8o;yd`I@2jegd+UJ|?z_IH= z;e^#}9`YvjFxjF>F!&~56wx6;f=25!J#Zh~Ltps`)q76x-;^w8s#3eJI7RK9a>U5+oN1RcEt@nTIG z7o1<5vD>w@!7H#->sGl% zE}4`h6wt3*;>O_{FFH6?;D;a<3sc1dXu0Q2X(kl8Ldu1hWVzA=2c{6y%o1lzMYeks z9Z07Q%~5s1VX34vi@)rxoB^%l6{8xN3dV}Xz^XgES}PU`RmI3q+NooHRYJ=!yX15) zdeTJVb$GZ%`4~Bjym9RIJzd{(eS5R5W7nawspgGR{SB-}Rr(a`kj|;IqmY)wG2Lmm zrdt5@la*YAcE=XF!+6p>o+lJk) z!KuB)IY)4weisCTYc1n6lXB+#;vA}zBnam>_Vhd_V4>86v1qkn+548KPcGTDj&FbT z5$F4ctBW&UeEtbP{_$V(3qSvD;&?^QGoOF@3GFWM^qqIPygcXS-NfzfOI%lJI>$IS zTs(QkH@@|A{M$eLjA0tNdHovq@sDV)p3v+sz_d^uxmc`kX%B|SPoMJcyU+R4Kl>qW z#g-W1iRYB`MG-Z-^U^}gDAGtA^Dt5BB6;fG5*oj;oSd^F^izCr+cx9`aTIdqG>%~G z#$7I{NdA}iQZ?tS8XU_q&lo25p+v#fKhKD@B#WGFIN+$ose%{i_*gb)F*g9qZ)g zmcvYg-n>)+u5lP!v98kZT5gZG8|q@ssDD^_$p0zY(%tvh=3a)X?BoX;pHkHha?fU# zgQ)23S+=TA5F~%i2W;(6ZPB*hY(;6jYD3n+U(Q)<92&RMcv-7AouE*i6@^tP5g&}s z%CeeR4Z|=n3%&-3P&-3+n zpJ2(n`_5BB2)w#}NlcM%eB%SUw&m=wru7`JY~Rb~GDoa$`K90b$2|MS zhujVmcXtD)+iQmF&$+w)l(bAznS=)CTb5LL^yCS@`5V8+JI@}`_YIA=IM}KondKS1 z3-o)bEGL5z4m8s0I4ASFl`=Vw(}p`)gEJ)y?f&9OabaE-Vv5QhQvP|0vNhB1ZBemm zPWk@wRE>^xMsnD+vROB)!H4Z@Sr4POZMNY!s++4+ZIc^Kd-YpZ-P+dOo32+lpF#qw zEQ*eIM^Y3+acBamWX53xth8s-v}ui;3s99)u_kl8jR#QG6=7AG%qnBg%K35H-^%1r zJWtknFmBa|${<=X1>3`9+96^&8UJA`4|x;>otJUndfBb~qM7P^V zi#FO|YzmK$agkqVjchEcBv+V%DteQk8H!;T7g8-;TwUS2mSG&ZzP)9bB&vG9Kd?XB z(X@u(3g_oNec#}W;m1GzA$P|+e*E#ryt;nPFh}lA17{bP81H%agZKI9Ti>QX?3t!0 zm0Fb?b?=0CwA9Me_dnzx{oX(0?CHClMqzK8oGEc4ms#EDUSaw(F-N}s{(F4q7rssF z!5P`oNPfA)yGFjZ7D^I%hF#~1nxebTIAYAq)3VLu45G*vv0p2!D({4gV}y#>v@N!Z z@bj=gu;1?_&@suDsj7I?g|JmlNOgS8%O z#Zt2_BfQRPWIXUdDx&|}TJa@L^UNFd5|;sAf{Gb=Tj@oA^@(h zf9-3;Mfz`1E$0VO%52}v`xk$$j_iY8qR7t_DVmz(p9z`0XBs~~g+3j|G@Qn{R z-Mr-b_9ZpTJT0e$o#jvnF3{~d*`*ozp3ZR*dO=KBXZ23Av~5dh8cI#H{f>+UbIUl- zSX=aRbQtgH`d&PZrBDs@eGgs|FbZ``ClLm@7`NAF$#9<*;}kvI>+DI6CAk;|aVp-8=afuQ%m`h<8hpnqlx4* z@nU59UMkKCfGj6T*tEX62hyjsWqFla@OXWpwIy;+g7b3L{BEbBHz{#*7FbkTBCoGs zGY%)FX}GUIFdKM^2SUO(4+S}d?mtw6DQt(&{jXJ2#}^X;)}gY_4RXwH{N690F@H_} zyo#lBW}f5$SoKh~$a=VKT3k*-+pd+?2ioB2yOt)PRv4$kxy*4m(lmj#@5se4MR|#r zB{Q5RoDUoI4lKKVM`#<4)5s&0HN1NLlHnvGqM$;HJ5cf%dal4#pj#ji3e@m`h;-a;wM7JEa@%;QAcH3TIh8ZYIpvsSi@ z^P(+Hi*;Tim5{&z*95F)-{qQVT|>-iTWG8bYww-@`$a||w90b7?Nyh&HDbRAnw+|V z{Mcrl_teLd3bly%abBV_xWJga%}R|0?=5ZLlB?K7j4|x?JBB=Png^&^tNpii2#qRH zt8TYcv#{oQ<(RaO(v-@^>83?~EmcjMc8vyhTe?NbWt+wuw~pFY(E34myNkpyXH;BB zd81#I4VT&6!4i?Y4u!V~6xBSeR_;%R@)ZKZ^+&0q!}*W79UiKHR@3R)6t7VEtl8qh ziQ2q%4!eTtV`NT+zL$1(oMuTd4FT^PvQ`NxS4q2=gm>e7%W!wcJdSj2%i*x6R>LwU zmbq|ucjWWWUvubtyg6Yk{OBj2^4W`*v`ygR;+!SH?Q!9BTzGo9nYCg?8#Gh-8s&BYQAHLkYeHNaNuXY^J~0#`GU_s{ws##EvMm@^Y%;*{i^In zO&@*wiQ>rMM7vPi6UeE`}qsw!=59BD(PgS?5ZQHUe z3w_^F^xU8#oY2VYj z`P7-y5;IK*nB9SCcqzGaCIXeV^(=GNHtelcLL>7Wd+*ONs}Rt8nOT%oE+!In=VhI` zCTdu$C_9aKg4g&QjDX52m81i`(0WQrJi54~?|VM^RF@nmBU$&HB|_TNpe)@d0~!~QX5{pxS{cd!*0)q-+Z4>Uwq1+{_!92bHDWWalVIA zn1;x-6q+`0es;lke(g8;vwtUSqiHzOv`2h*CNp{Gp)}0%iO@KnKYJn)fnnZkEk>&b zarVz!1uXHyJ>wWj=Q?vS6{Cl|=%o_#H0c4~Qr5(cRB^##y@W_o4Sgpq*cv|-<03<5 zXQ|#3OQO!RpnbjM)*GGmtW*RP3b)o1>x@P8M$N_)^6C$B==N7_7}gjp;GLmy9>=`~ zt<J+CZTE6nbd>hC@_?NDW!GT7 zqLIVvW?`MHtS4|Ol0#h|Xn?9kv&4)>>Iz}cI)mTIYBJ}fF~YRI z=nL;uTy_t3TGLij7NxXt7Uu$~#!ZO0z4+$A@ld~5qI~%P*`kTQaQOUx@k0`aL?1Jy zh^v(vXL{xP^t+be493-aH0?s1g%sKMtzt?HDZ%y4Eyh~< zLk~dTc8sTiX^c1vCpT)fk?5P2whMS;v5iF0yn1ycSj+9}&v7`OJbuKk*|SU|pZwta z^k-MprlaXDICQ zg+X)JEVfoj=f&cjVVEXfUte>6z9$6mzR{N+cDo&mqG?gxPt{<|uJ0Izk!gua#a!rG zAq%X-=9sd`8H~X;ff^-J#|61CoRO;3ZrYu&Q4qR5Z16s(RZr_%vW99d%R{>))VXebCi7Z*G4C^!pK1JSp{*0$j zAM?HM{keqjRYOvV`zB~y70>JJNo^OkN)?8A0MoBuI9#;aSvOv*Tm7e1G=I~d``iAI z6|THoA;^OtLclmf+c?g4t-cghaT|tGGfmU7q{ti#(=1w!!`UU{I5SNPR7c$a|KJE)f9aS*yeXdxwXj)FVRS)o&J;Q>@N#H!Rcv5hIkwU^OpzTZ+uS5eg}#u6H| zU@ue5IIn1dY9+8uy;nHI9ltDFEKba6%ZFbfWh;a`7ei>IWy@=+s&qwZo$~zw^cAhs zmomZrnnPv%eSaIp^Sx%^!Pcw3d62D`PV~0-dN4V^hB+E?m27jbb0Un~!cFM$Au!Gh z(^8n1MB8=DDKRe*Zw=lXxj?YYv&0+M3f{?j*gDOap9M)fqzOxo9K;H|^AfilnB z-W)mGcPy#$*=IN0-rVu=k3Z$?(HXz~TffOSKl&Db{#QRB9cHip?wn|NRS{24JeLoCU_x5NDBQZUFlMHqrV_26fu`Gnwbze zLpwBZ4K#r6a$Qwf>5tiF8C`s9?@WLoVJL(u5gpxK=rVcE*=v2~eV=!a>3oNvG<`29 z-53JS8A7XXaJ?x}Ifu#>t2LHB2H93+1aIYv8?321Jl0;a4)fnLgw4M{H{3R7zoPAaK*lmer`B-wyQ5+NrBOQLHM?lsLQsMSi; z@5&_Vx}>m%)pcaE+GHweL5zWI_6_ds?$i60{_6S$c>ksyK;tUC_h9A0>$*-nTlwI~ zc2Wr!R0>6Q@Mg_VpHUmrNi7*p0}^%gdr8WJHHy+Xc9y#+WhAB2mHDBU6{BEYLl%Ka zq=|aa?S6Gx)DC;PTin@}& zTwYQnl`?ubSLwOsi#cw5;E^k(&{mjOvSc;ciKItvkpTa1=1sEv2suFW4Q;{Ppl86N zvWIF=2y2s9huWgFY`chwXf;0i{BW7^@-LjA3PRpa4cjcOH60zLwN#~JKAX_C9X<$s z(MO-jcta$#73H&r;FI`;w8lrN46K3Z{Vj*P<~D3BWj?O(t$%*S^V5gWKlb1J+{5P| z{N&rhOu5CZvv}W$J}M>xkv?jfA0X)vK6*BrEj}5xt*7lGeGsAIps)@~(F|Lc9Mdbx zYsv9S8BGyFL=l9}7d=`fLJANZQ3cl50Uauelt#Fg%sK*1*Rfi+**-AgnVqK4k1iP%0MzWH$fpv++-4+Z^cj5D{N74|NaAxjt_9=Q!1-yLZmm4 zd>WbLAxf;Ye6KR^>b>Y(=JUB=aIM8Cg|h`I3E3d2D68}s2~pJUtM!_)FVV9JMOBD` z*lVsYuOzBDKv_=5Hs1_5nJj>mVYEn2v;vn~Kbid)tjjYgm1m?$=9S)iTv=ePK`Wh~ zGdVzXiZZfPmNZoBFot`g2JMmz;vLMAk)+AYc2*fFs*K564~xz>V;61`1a5sN{8L!epRRbue;x{` z0SNwcm_Wbiml{C#ntV{pMzLuc7Ild>g7dUGQWk~85eJVkhPLa`#?ftBiCod5CDCfg z2M@$n7)WhsGEP)7#hei%t07`hSe>v$illM5Ra7yN`VM0pp@+8ftaMw`gQHalm9GPp49UmSslxk@s@;5~i3BA1a37a#EVoInG z(1k@039BhFsS9H4+1;73yT9b+=_`8gaZc8^K?r1{5mjWdvKfg$-?lkNEZ(@~Nu%H9 zHq$5ltbO}GXwuY}tctqvgAIz@G{h7o#%LdYiNh%6%13LJW$@xnE3=F~D(It^fpgzO z3X}X_U!J>IX>RuWZlrDh(nRQR0YNu zd=6$*TI2hU?Y5!s#R}B5J#|?#nNI22hHcYQSMr)_C7!4lr1fFb2n4LGBp@LKoUPE> z(sp8FFiz4`RZbCAc`e`f(#G1-jO%yNw+Y`nWe?fl;3vuD;;h5C0<@x!`QXfd9%E&* z=L(yH7H*=YMjmSvi%v|6;8Tu8cd|uJ0qYFDRkYiVl%t(`-$_tnDH4OO>jc(cRfNz= zs>qwVhBrz;=dz{Bx{RWbTx_jJI-*8o@WQ)IlCPbWpK_3iZ$(-k`EjES)>*o?qir`V zc4z#HZ+@M^mi*nfzlAF_F&J#2M~Ar5*%6<`V`Dx&5+2AvHw4+djjQ(XGuyF$tU6I< zpgfX;xD(3dA!Npby1cboU0w4FoM}JvbeBZSj&k3_3y0)e0peiR^u2#g@4P*>&r`?J$=fH=TA9#b;`HC^=&@; z{4wjRGiH+-=M*8rY%=5g^%?ba!rez-q7NS5tqCzPohZ?SMVW0yl|TjBeuL5;gRrp2 zG}{oQEzfBrK6tD#(uON5GzM$%zNc`aKwfV*GB-lfacw3v6wa|+%xQ9bO`h~pO(dzb zZQIcWFTOKjT^VE0R*cmlgfW6A0HszabZ(_{$KVRAGdZk5;x26AvJlZxR}-``7-z5! ztdm14X+?@=)V0OoLR3QWOiC^+V`cm>D64(n=g+Wa+iZwIw0ENRkA&D0LPzjXEK+$h z{ZFEU|NlIIoCVYXl9IAp>y%GaQR`~0MwpnWJo9=t$>Cs)sH3%V7-t3Ol!wgiEre=S z820yeP)XrzUdyLQ$R(){9;+RRjufKg&}WGE;A*!yp>hmA%qbo*_ftA+nSS0^3^CVA zD(}~R(nLrSu-7U~g{$PEk%LC|8px(bbIE?hy~(`9QWaA@TC$gik;Dgn#pY{U3bt?Z0Ky zw49ut^NrvC8u#D2%jNo-t_v*oX7pa7WSVxJ!%Kusy}G_8gr1|r1CEc6`O(u0{M9O_ zr^@>)`EGHXFG^gG%zMhR&U2Q)wrv1~(USUEl@%e!i%I&f96A~>ItiIjOQ!pJ-J-M{ z5IzhB&?vLWDA7WLy1DB*Ca$I|#NpohRzUMfQVL8)*67@Nc^@eAW_WM}7%PWPSvZO; zN3lvSJ2SxlvTENWXxiR;TJN*avK6kByO9BCqjA>BOcq1(BI514UT`Kp^U9R~&3@f( z_+R+|s%n{*56KHQ8&HLxqU3Ng>PD@Qm7rpF)1(ln%OZoGEKT1ExT$NT*R>Jr9Fxj$ ze6-8n?wrpbKO^*=Y~V;Ztw}}`HbK%)m6n;2lHWh6gvMl)MmM%!Ddtp)6vZ1A1|a^= zZ;yWBpNIUe%$JE7#813oQ2$Cel?2MlhQ$>QZ7qH9U=*9a!CyBh0`u7fQ@HGEp5&h> zIaJPCy0&3`y{4`T7PBeyX^mEagr{%CXlRYbS)}c%EB1G0ynX*Zo2x6%FVFGa27(72 zIJ|p+e;&Bpu30r3lChMtJ$4T7Gh5!pR&)B0Q4mTZk{`Z%z{8Kf%KIOF!2kNc{LlR8 zd*5c;wtW8NDZla6FEicSBcNGt8p?V>QIv$fW4&1;!e&t(lM?#}2YmF=M||s(XXsZe z@qp!v%p{;NcC8IDg{&*m*>{$(*5I;Cz&bZdR3uDVe38bKhQf z)|A$cc$t`PIO<~M$=gw_DawJym{rt9bW2?he+WTj79LHPiI0%Ae1*gb`Owq%ZARL@ zi3dEX|zmBHGArt4{&mePPz3PWNxsip0j)Yw8( z<`1d}7!7?NNHGw6OJNoJJ2M%EMvsp@N+n$Bg#W9Rv>o#a5AGas|IQ)b{Khx<>%aOd zzW1H)^8SOjD4gbd-~ASM?mgtgkKW_)vnLc*ak;wYdbLIw2dbp-0p%tbQ<8wqwqd>A zP?*Gn`}g?9zxW1UeEuV>);xdyoabM>;L-c<(V=mZ8A&<1UMi=us;Ns!-jnm;A^-p& z07*naRM>8=IX^$globcZ$1IjhlzJ)Fl);RPW!-L2>SnO+>FIip>m6O=@ji}+lQD+v zMnLVe*-X-QljnN1Lgn#72mxElMe7R5iTB>4w7A_v-%}N}7>C`^^7u@%G@z158k9vV zn=z@Gq7Wi@Q6U>wh}J75rj^W=q>ZUA{FsG>}6-8kv%ZjQhI6BGCOESCyRRN;bvVRq$B?$kYD)}B)W1Jx&ZY*_>W%e2&jHk^o9MmI z`At7Hbp93JKb3QwhBa@*;tI=hRx>F@2|byXRHbG%t8vD#y1JriTZ~HdMC!U^QVwaF zStXpr?vhfVsw!sFio17?nNMq0=jSM+@i9@(Pl0WdXK97#Xp9qc zXxH~dZ7HoG>1-J?5->OpfB0X0lMmkifID~ZP!v^;?N%d4r|*P2Y?ULK+jK%jT}lg~bWY36 z*a4kHRJK~JD9Q>`SZD(=%8Od$O;JC9rj(KoPzV{DDZCF7 zMA_t;pLe^5rQXef$AcHR0up=gju+Vs&D>ZLnyfwm7RXRYBXzOycn1kPkolkn2}Z znNOz_)-jz-iMHh8?2`FTMOoE2anKe`X(a~YBMzVBPMn+qd)vZzW%$v$J-Cz9v}E-+sP(Mlfg-fM9i@#Lo%tb zmSYt9ACU2^dK}QDkOXCra%yB!RL`R%=vL;3IbqcDZwW zgfan@!~q|?#}<~Np5&tHh<<~alP&$LPj?M?#uIKuCjY^4A6lH1H^gWZs4tE}E zPETL+^6Y~1>uY}S>8BhY9`Lo_{t7?-^iwX*Pr3JC!(wlb=g%Iq*C!smx5U|iv*1j` zhjtWIqBX8Ac<;UU`23T<#aP4Dl0;+|PB0n42fWpiyn$SJD&4SzbY8;5 zjNTZ+7ko&VkR=@%YvX${-PV&5V-+T6!b|vrT#ZA__s9@Z>L$V}d(MiY$So!rrl5_+RlyfA}vci;8|LE?kwPW=9`M ze#k{YrN;D(!P}yB8e1AocHrg#qeoy`Ygi` zWQt>V|A33vC%k-lLRn6^|L_ruR^V&;7--s#X+5DJ zv28X4FS+YgExetkZF0L&;%tF(;6q36TXYg8&SujJSGlNAMogs631eBQgv|onK19$F zZDfNsH~|L2B1%!XOf=LgV_;>3;B1|l*cNM@U|8*-8Om~kD7F)cr%uwQ1)(5nV~DZK z7p&;M`mU#I+bsHZs8F!o8mvw9otJThHTYiTmQEI6}fkKi2SM=cpALk$QC2>nRr9$OV?-y|tkK!61N2;U+qVY_Lr#OMvoK?(m5tbT7sBM_!#5( z@3&jBe~vSL_&u$aAUdaodT5O1_30^_O~KKf1FE{lTFqv=!D=Jv9V#)K)pU);F6PW9 zGp;UP)Auclof&Q4(gn}9X=s{;%gb}LfyK@a^|WT&b>dIbP)=*MT|cKj+R2pxP}<7dlpkWFr8V{;2y{*XJ`u9% zc-w5~;xsQ!YH3D75HoZZ%4#ji5zTgsB2iB&j8V*{Gr9zA-%(Z-Nz3-i`dlnD#EP;A?4dlO6SdHBR7r^ z+cOU(E39K0)zj9B*i6PA5#M!Ere>eWa0rcUTb>=Jb+w@O#Rw0+LMNx=z zdOSF84xxX}R~pj}WX)U_hN3WR8%g7|h2i@8l21SVgtOCA>bmCa{FLjfbM74NQ@et_ z<&@pUjO(j&oED^mbeUpPS#LHtXQ}Fnlwh%3a`)Z?dhc0p*F1Ulgh*sMpD~}!nN6ph zpPzGebt%l8rjbO^O~a(Bh<(fR&%aN*IYoyJS7$F!Gz8ypesO}c3R@OU2j4f!oh;b7R@7&{Zz2)EjyZ^xBXHU`Av0kq;fYyA`FKh@ zIaDYEd@n{aR#rYkeb&`5ik!`mS&X8>&!SxG5>!l-ug2R!a_}qvIQ(%LE#*|_Yh?{ zN}fa9c+74cM8D)pUK}Pu1E{MKr2>Zsd(0*k?dF!f00O zYrgX3FLQNu&G-AB&~*|-*mPK9*`3WX)-qkpIKFd8ih+Z@eVV4>^!00u)$H%@^X%zU z9zA%#q;j-vOV_qMfBuZgWWvG0Euvn!=%1T+eX^$ny#{x zWyS8{F;*qc&Q58(fYXBN(XpkREKpX_Hj1*IgK>0SU@~3sHQDrxbL zkv)dlm>W~X=8sm>h^pCH%lY*sN+*2s;x4zA5VoS1>7}BW%&TmJiS)gv&Grg1t6Zsw z)`qflSYxT`l90WPDX+)N%At)zYa_T0BW7J!*Wz2$N)9Pk=C!)i1Cq8{Xduh0VOc-akQx4QCi`{P2xls zf>b|w_@|Z1w}zNtZC-o!KIB!i$kNAcTMXGNWNz#lw+25q=@`;B%Iqm{1C9oxE!Jrn zFlG;%XhZak_e-9JyixhpSMplP%~`mN1MOOT=TQ@=>ypF6BR+ipJ&q0z*fblyc=3$c zY(iB?IAQdjX<4vbPQ}lK=JDgF!sICnanN@yWMS=?PkT!azU*%d-FM^ z(GUVBuTLng;pq4Pkjmnn_uj>KE$5eKR8`5NNAJ+~4VUW%Qw0=(zHJCyL*GwOMMY81 zDGJM6S(5i$tyU!MSS%-bCIZ$~#9&A+Ve1Jy2giKy@yDE9Zu!yYFGNS9Z-pA@0WbyOy@=m=qRmpl!F5MM*u8WLaAjDD4QT!4#IlNhP9? z&rn&4ey1o5#uh}AG9I_W8b`ulwBT}0AufQz8N6a#wOcEBdd66aNj1(CWwDmBm{&5p zRFr?$8JjJYj$Hh`7dG~|WC=kSLQyJpqa;MZ_bt9}CHk32NC9Ic&Z$?CUdJ3wZD|^R z%Rl*s9YDv2cL;q#DI+k9D9U5`0GND8+k#Z zmseL@uT~j&CT*U;n#4t|v=PH)kTi*|4fqhpwn&D$I_D_eGLNQ=xm1!sFd#Vw(7wv? zCt44o%z2}ubdG^Bz#w_I6072zw4NbKOtMlVSn3}lTxIq&oh=EyWV3@*lrmHnvE6#z zV^yMQT9leHn@;)oqYvr(hH6@H{NRxF_JV0$^5{!%^PRu{7VFIwU;o{?#PbPf${yR*oii`6pRatUH8E4<0<=^72YD0F+`fnXogTlJIoCqjcrC;j~qOEoV#v)H6}f+pJ2K3pSyxm0`4V zM3vCaQI(abo3p?V#2;v^B??boe0vH=9#>RYCpx045aD4}iJhkRUObFJ=RtN3EhGv5 zIf?;A>qN@fjS#Y(!~l4Ry=?k=F`Jf!rSCc-iN?325U7d*k`n)0k|dR?D&AluYX-lo z5J*a+wasw&9F3bn^Fwrx@S_tkkReEE9HuFiM#VB2x2(;Nr)OvKqGj!ZGlmwK zWr#CAvru#pQDY1_A%HRA(d5v&$V~*aWKE6acP-~YE%<%HKKC+xrYg5BAIu50+suYHxXvvZz){)Dgn&TsMZ z)k|KToUm;=X0tgv^BK$ef*=0idpH6gzV{CAJ$j3~caFKZxZnpr_yNs!1sw43t%tO2 zgR+Lb{Uet92Q21uKJ)?a8zwt*p1(W;EUVRu)00zDk%nml~p~WAt)?<#ze@gCoRV#l`g% zv&9_a6sz@$`D{W_2+oBR@=99R;Z;#l6g6ngd^V@gB0`(FLDpvAmzJDXQ&_61CJi7r z<3{FlRn_BsM_~mdhQhfLZ7n`UjE1^2RF%b*j=CtA)e;1tRLWKNO<(~@4B-KYvCm1u zH#zT0c{Bm7Wy=+fA~{gW(kZcupd&_=bWMwKVxPg3XkCvS_pa;T%mc_;OZ3BFgPU-^ zn-$Z|&_ms{I5Nl=Gpa`C7@C*|yedz{W&A}HN*uuX#f6|oivr(??!{S)PDwtrM65G} zUiiSn%>zTuyOQ$d)&Ko#J&4>I6T^??Ka%Ie?(c9+(v^Jqn^&G7kij$%Kn|VI6HgEa_XYR_yG}2+`0-!Km12kyA%>UL1hdmO}U93Cs`M`S~e}#hmGK#@qI7KK<+& z7uQ!=M3{1#k+fnVTX=>UqqSy?NKPrS-Ly1KlYwAH-0(4wqL$TmOl-Riv)O`bBB)kd z)oAPJe9W=Q!Y5bCU<=uZDI@7HL^`-9p|TvaQop)2J!i&Ok%-Fp~E@Nd|4Cv8jGi~kysmiXlXYZQb|lb zU2TY=x}is8CG;ClL^ReAhFtbxCNpwQhQ)hMEzPqKok2}0jm^vm^U_FbHq3^G{zSMo zp3CzKxp|C3sUGJXJ`TZaW(+yBM%?s6*&9^Ecl{W}0$>V9$jqQ50cANtER8oyVJ*EA zzmHKFc$L?+Dv6*{4LRSr^-?+0N*OiE5hPUcrwn~Ra~Lh29dgSsv}e7KY_<)h(`Z-F zbS;~0$8x^Q4?la1b(%YO_PKlaE-?l+s}-&=y#LXMT%DbBu(L-{uxeXA{NQ8iAXvcR9XyM_^yk<74Fb{sX$8 z(5|BC6|Qnrvpt%ZCp>xjihK9&(|b>4oCF*uN5Fz|%$9SmRx7$bQ51C!D#!x5%&Boo zS{0QqjH^|YO{3PleD#91mmoc@G_CI#`P#QAl|vw=_dWyfKsm8Zm>?IO?>cmz$y6rW zA7Tzg&`?jORFf$fON|(=i$aK$W8eZ{GcQ`_R?HcPwUVG=gw8iIcbuyT3AWui7AViw&R^plq`JO^b1RvjA9gtFnlqAzy246SBVr68GbED8qx5AIp zxGA`)3Zx`WdKj*$d^{$|4i!`VjCjjHWxKG)>!)l$J7ifPfFdgj&)2 zJPXRzj%Y8$bQrt@DJqj;`-pQt`t0tGJy?y&pL6FN>+NRb2|HJ?SS+}>yv!}8;1n9a z{h1ZdKlznz{ubka^>j2%%lT=KPJyy=M3X2AQQbay@`~%#nomFdoO}1~u)DM5`0$Xn zZMfd7*!C^OWX{3ef>$qJa(uiG(%|v<@na5-k9hC>clpt$Kj7rmOV-_%cR&7sz5RW@ z^PTSyyyrK*@?|znLl-(+IRjTw*ot-MnN6lVeDpq-7q1D*QB3Bvt(Umv=qTzbO&{?| zQOy=o>t?Ok5F#0eHrX18J=R&K(<$4{HOvcWyw_xih%nD7ZJfSjzb{WmvVkv3b2CZdwtI_m%{;1KERS8P7+O%)388rrZ!&TII zhM~qayw0UuNW%dkkJGq1RMKvV=I>_r6j9?!oSeIEjb*br$cZQ!15@G-kDBnQuO#J8CR?Inm%?EPIGZ4+8p0C zXaZmT%Ex@|cYcf6Y%1it7}z^FK$j&tC>DE1*wWE-Jx?A#!4w65_%Hu!V(7VEUGm*; z{XLJ~eTT))lGSF-bTQ|}ix(_*cRBm~$2|MwImh?jV(;in6q5=STKX6%>lw==nkrY! zaHXcM_XHDROA0IWN{t-qF;@~Pw+~vA8Oh@CRxwhzg6ZA?^Z5?XpZ}2aiz^9dL{{m; zwo`b{5*Gys+gj_5ecut=Mud9>2P}l5L1F#2{wN?RJB6j;<5m)poO$S;MfR z|3%LqWU!j@_fTZDY)Xl0Qgd*4!0P&ftMxTU2m4ghiqq3en$;yAe)x{?WLn93>bfmm z(^A$2P17=+&w1HCiL>WaG$obY&*Tq12|%hb~yNQQ_3lUYegmJc#pBX2mv4PrC}3Ds*F zQVdL|6>Zb-@{5-|xPOmgvf$w0h_;awP;Cq<^taCJ{5i~`R0Ww>DLFR14O{6(y>4nE|Bn9@-QIshc%N&gd+2VMHCLnDbV(%3O3! zVGPm9V0n75L+pEWmWmJqF$~en0xcU+9x+gtPJ#;CEg=RWm#Tuc%ZBJT@&FohwQ?x) zIB(AE+Zb|ebLJYW8;Q&?bk_L?<2WB8Z>IFEk~(p5amnfFDckLKG#z>$^Wi0HdTaHV zp(U&Pgtk&ejX$Pj?H)5awI~YO!A5}$#f762sOuVKHNKHBJFPXlySu~?Sg+SYWDVga z#BkvFXn~3Mtw6Mzruh{P_msIk(!MrLgYP`ENx^J7!3WQ_6@Xiafv)%L%;((w(jLc0 zM=Y01CX*>4^sH7Znr6$o>6!1IF`dn+rxQN;&NHU-Irr}0!r*4Z&hCtOODrem zV?BE5Oh&QzoL_Ei&adh_+NNPTDKSb6ncMA_&@}wulOJ$-c_pbJAqeF_8;F^+oT6xf z2265}SBfZcl^e}wyJdGVW4W`#_009yv?fZhy%am7mBeOgf9sQlczHA)69(ou{g5rgI6@ z3*NK8x6AR-E?O&=%LRpVoSdABI()kY9q5`3Dt3JF#S^}G^##X=dn|T$s22;0x+Zo# zcaQIr+Q_R{FVI+a7CW4upL2ZwnDx~)wJQl*Pw0A1PhK!x?lE;WnWF#zAOJ~3K~$+q zF3(R0(~{YIMob1&M5T=SNC`cdfrk_kvPoFkaUN(;%xBAN>(P|PQWXX3)ivj*uldtI z`BOgs>@mKNq>#q;UTHn%oePaY*7s_Re~Z$?phjMIQ5MV>^Q>ytBn4$%v9r6w(eWXB zd%GkQeU$1)rASp3SYs({nE_>Tv6e+Kro4zJ(PON^Dxq^0g{<3EK4?`@+~iRz2`W@d za>s~@x-8gq0?D&RW&Y0)gDyFpF@J!E$)B%jqa-rG0y02(%1`9;Z}vr)Gro6%c_rj+vR2f<3*{*|&nOH{3T?CXot z&@@|q{G%U=U`>JVdI6dxPYP@1cK zby*Z*a*a^BLYhitXq#5@$Fp?66*m|TeaoO4WB8>o2ID|}c;SYslH8I8`LVjLMvvQa zxy)7#&*9z<)5U^^kG{mw{(=;HKKtwm)7gaCbV5jpgZ*8qT85riSC_o~@IL3~XS7|* z#~=R&A;-6zUtVy2an7sPuX+0P36r{FKAUlIa>mug6_4J23xH>jAM@5b71P;_sGx1H zX|@HE=~A|LA)t&CTT8mZWe5U7`gg6>_&RAdFq#Z?J;fO4+AY2BD5@D4#fy{IY_?lc zvKg(CZpD6wv5FoJpJAA<^H#0#Jyl`3+^jgixS%S84k%hAkF^DN@89Lly<;F!mJ^nf zDa1(Mb<8Kz@$;l}^{Xwz^dp0MI8@+gufKGD?b3}KKfgXH4)N6T z^TjCWMANd~Vk`ogFG^m#dP$5u>xcK)Zr7}@ulVY3eVNyD!Xzt8pMHP48d7@aP6NCt6Amsx*OjkGrH?7!G_WFthGkR>}edP$?BFjGRB{p zkIJ)RGh#&Rn-ND$A?xYVjeG=+werkqiHpqwMVS}LZ==T1hcb!~jkp$tY&M!+2hzi@ z`|DSq0R;(jY6ax+wK|~zUSC=a;&o4<4qK{*= z4jF1@og_vIj4IGHE!H~8^)8DnLX4DkMeq@q^RT+ihV~!_OrFg0^gYQ?v|{VB`c8SlLF7OzfDXqt}Q<&^8|3%bU#ySs}v zhVOs!1Dd9#C=AWE5jhV2M3uKrlHV>Xc(msD_?R!f{iPfW?WiY$ z@UYhA2R%xVfw9;^@GlCDHFEeEqtIH~sT6NA-hQIeg;C8 zSn>>lmJkwANf>1E5vw&;Yjnz(88Wt2E0mU*tICT2HH-|Dk_AGpyps}t-`E=78Zo?q zEm+FJL4joF+UFK!FpUqEHVUE|-;kIGj|$`ipcFpJCr9Oc>y%yPpM3H?E-o&l+UNsq z+slSbYl*7OYE5asvI#MS@kUAs>RM(c%98tAHR39VjX=!nc4Gv~ARp!ok;=)G&N=#C zHU~v9gucnbRElbm;J*7W_wF?VR-t*b0U$=dd1bn z1=G4>wO(_0XGa8)n-$j0gvAuYh?$UygbD8Y?_Y$^k;v~zy0_B zj=%exZ}al(iarSi(FbW4hQ~vO**SIPmLO3!swSt7iZPT-kyK6)9mX0C4-WZ_kH3s7 z3(2Zi0*^218jwu+(iQT)1d&}xa;dEIRkjxmvWp>~{kEETK!e0MupY?7N+Yq++7Lsa z_Z{9x3THEpCX*CLo|XJ>z>%o@3~3~^fWgPekYT5@S1j9&1SEh->L->bgR_1ZDGXKH zn^^&+L5na%FDvnMCMk`_NqyFJ+%SP|8$p2(Nm^!vw~Gd23{BVY_{kHt+ieDi%ep&; zn-q!=yc}SDh#_&g%F31r-=Sk5-5OqFB#2J_dxJ*Pc3$4VoSY$tg3KvW@btZxeC~`3 z(K?r|5w_cPK6T@Gi1G`Tufq^B_k_fOD{`yV?Xrom?|Yg?GQ3h*P}CLP_gr1CSS;pj zwhd37Kd0$sp3(N6?|kwDUZ0=x-~7=xnNJEn`|QWGZObP=_&#^<-{WC|!=odfzkJQ& z(;xBPJ8!dIuh3R=c=w2uBB!SpoL{YIL*)1G-DNVFP*hX8uIKdiDG^xg?s2txE=0eo zWZiqTm6dylIU~;KafyKMsHYQ|lY~T660xj}BL+`ZPdIt?lK=Ss{Ad2+&;Ew9i)%av zREe?RQ!C4gAk~1%0=*$~ZmfV}%I4>cjLAQ&a@AuC$E2?L?XUedAAk8bnQ_2L9zua#S}8Ry|^I5^C&BhOJ~AJCmV8i==UGG#oy|W&Z2@(*K+Th;$2w zz)j0_8`jRP;J)FnBtjR^YBcGQ)TnhKi9CIEbta8*{=0o#fUR8P0_YQYextPqa8jb9zT7~=bt~NX+5iT z!`a0(SJzu2h9^&-)BC{Aa);BCQ=BV!`t%w9_rL!S9PAzP$N%b&*=`!v&6YcN?sEVB zeSY&dzd~6}h!IxnhQIy$@ACKG{sdc9y!-yU;}Cv6pF@JK?g1XFn1S)D6rn&li0V zL~h@7^j#|p16QCkFZtkLkN4hx59dm8rW-3UQbW2$W>BR}`gG1^6f61Q2_rcn2B|!5 zqgaMYEX9-oeZzWPo`u1^??a&Jdp2z+sTA7C_cz!ohf(#g-BW4A$B4q;5Mpl9@{3^9 za4_F`4)Xz{^i6_D8X0T2O^Gd zL}?9Or|G($*<_kO90On4jz_^T-?G-S-EQR9$?9vH55vK8_6zi}G9b-*m4u=!3%vJ) zewf~?yk1VMH%*R)o{F({)6+JdvJ%ME+1Ul#y2TZiX1fIn=0(Zr*(F*(W?B_|`Qs1y z;KPrY&gQ)M;svkIKjZRZ&1^E~!;e1X{OlF46Fj{4TNq<__~0$h&#!p#`Zd?96+isZ zV}A3uev7*gAJX(4T5A@IC9h6iQI&-R0hW`?Iu0+Y*&>WoIoRCY&qA z%Go%>#nlCW@t1$a+4%)cAMimDm15g9hhVo^!rZIo6t zP0M<{=I)&X9=-jD3AVC=AsD$qWN`sY=mb{K6tjcPCZe{t# zlsDFi6g|O9+_*sVhXY$S&MN5%%y^k<286#u9q5NQArspH8M@Q&g6fATGj<0<^H%k?ixf zOKX%G*6|S)l57clAbL;GX-vh4!P7@USC(Z-7uKUHwrQI2d;UdS@V8$atz@`A0Jd%) zx9KqR;Z-t+sKt);R?-kGG{qkLQ*u_H5ccXynOi*!`r-gdCqqGx4d=# z0a{mFTy5!l`2Ht9;^oU1>>cd#_22z%w(DzNpP#c@twLq^XAN+kD zJbZx|Gr@{hs1HF3mv>tz0rj-XUgw=_u_?J=JA0>-xPuyAOO&jx3i#Q8A)y1NCb&cbL*m&^M(PEm9(k z6g`mnslpXL)&g|8AE-eNvt?{O{ljlhVOE}81%=0XrOfPehoU^phUB6{UttZsFJ`GlKw&!^v^ga9iPJ#wg64R@Z zwSH-hV)UV^jsEP6Wm&e=fqVONj?+X=<&<6c<3j0MqZPdu-{_M}b%=Psxp*!QH&-?;!yzv%a`qIDW7e4cn z`soUv`GsG=S;P0=ev9Ayt-pu2GOzNx{xpu!!^-NZAe%}VP&?zb)t8_5#l;1G^v8e9 z_rCWwx5trOR@HPPX%gsW*j@jCdRGv8g5lL7Jf~6$UFaySvEzS9xlP4D(4-@WX z%Y*Z?(dFc1lEcCb#9FB@N z0!_bJ7Q!Iv))#S{_AwZecpfVEowD%T>vuQ_||KD@aTPBdf|Cq{`t@Fz3;un zo3DSD5CS*Xmn;z;e)5-C2lK1WC#EQhU?UtTZvwO+yig!?Jo`TC5UBl(o=!qr*Z?Rghp#c?WY%6er-eHLx@5jiJ=M zUAzWXyJ=Mw-^h z4W=bhFR!@?miuQr`XE+@2lvi-5)<H9#fh7>EyT(~_>q(wsZE-s$%@cD;4|KbaL z=Z!aIh;KZp7~X#G5f|6DeBy-{dHLslk+>i(Z;YGgp z)|-6$+u!Cle&aVd9B$d4zaYQmnsl*HBwfVGbFyBsjs9+0m6_UZzvGKv_#-~|d%w?n z??2`^Elg8pNiw+2cOsISFgLc%mLPC7C55)-A+9q%=d|n94D@A*)G`2u_uhYxci#CP zzx7+ciSX*=5Uf>y7opoaF6W&-v+XIa)2TCZl3q%qX#24GuGT^JhUrAEQpY(l#mKZI zrr79*9`CGfuiPoUx9Rs=8@U?Q(!m^~B(j=D=Pb)S)AYR%OOwG=je4rW!E(s~awse* zf`w_C$t5!E_5|0-p=+MeHN0G_>ZYzV+8NwMPsl0a)bV^Gxoy6dHMSYEUFEEC|teKca-f|d6 zO3LhZi)g2+%%Yyj0@OC{u67(|9hTi0P-}q@G>hBjHny2fDY_2V)@@if^nCc_F>k!_ zU6xVs4ogbJm`@7MS_#2YsN~!@SL}f?o;XEvjPlSJ@p7H@9oAcDmj3=dj)#eAoMcqx zbc*9?P%09R*JQ}qa*_Wvk~h{lkN2=FBVmxM*Twafc6j9{{8=KyLd1r#YFYYDxI|Tl ztnIW;*^2qP>B+fpaeK=&O`Pv~?w_C0V&dlTSPYXx&&~xNe|W|Dy*>L~$BQq#$h?ev z@WBV1pP%#a;h>a1!*M(kE(13&9J#r^VVR=Lbvn!8c;Ni(6BrkG?YnQX%!!vi`DymM zbDn$tli048DN0?Hyo&3HGdZhRuSB}Or?$eEzVt=D^rb)H>tFjzUVHrwZVwB`F_N;p zwAQ*!nVxHrE<+2^8gAK6=h&T1k>EdSGYYY97}xNoX-1l1SrX=c&*jw>ul?0u@%MlG z9}t4yNS;1~Eh_n=%3x!~_Tb!V_mG*Jb8cJ2lu{`ag$!3^HaBvW&S*}RW6B)o!eLG{ zV+9>j3)X}!=1G2zPUc_QaW!Lzsgi5Mg^qcS#Bm}}@J^&CRXd?tizlms<{MiVwZ`5w#V)L(DpMQA2ZpXArUb2VwjY?LSx-recZL{edehMbw~-Fx9GT-x zr^?mcZV<4UG3b@cJ-k)jc^c z*;lQw=`=n%V_FMmo)d{ALb`e+=S1+HlrqCEk!xd|CSF_~zzYvC*6{G*iBLA@X41x&HabZ@%^{nzEM91bIY_NRZw^ABI-=YRf}k%_{I z0lvykR%LQ2MF!l);;cf|N)}hPk;0R67VVFL+N8^9tx9$sfN|U$Bky0{V!EDE#h_yG~_0mgf4W{Qu*$8 zzr*2hyItp;wIoGxlxA?=(Q*;(%{pMVmStXO#(}poyj4=1BwNb*Hl>6M9bFMMG)<_7 zp>vo7){5>U=87>+r1MnHhMlZRbH#@M*0SI4>HC3{GfN!#2%Y4|9RMk!!eiPg?s=6b zl&V~orYWsft~E5HI;pZb$!?D$w^h7wy%AIBGS197V-Zl=VLI~iOE0nCcMSa*!Al%W z@ImHJ$_dUn@%+Q*xjh`^_mN?4iTB=n#G^-#IO{xJzsI=ITIUnz0x!K!&Ds z5$k2?VU+G@?CFrrC2x|HIY)AnLv&TsS7VrCWLajWSSc9dlyJUd@PR(`bbTk>am@n5 zT2aXxDL~E0q0`jYc05kZ(8e0OWY~!oe>L30FZrX@7gs{nKd6m#x=h*Fcyz}0>eEn-*mvv#v zioY-??CRZVf}O;^1TR4*lok|HN|x$Z8fNwg2jG(C^MzQsLtIK))A}vS!^*myHF{Y5VxolCIb1GVcfBqLtQDs?ih7lWgcMZkoL&i) z)>#{_cg#z~dWcKq`)|L)`@i&vU;f2k#dL!1HO(qUqn*Bl zL^Xy~3QLT{Qsn389OE=IO_`WsE{)PG!BoyeN9fhpNR`FFmb&7IRSHC7J-Fp6R$60P zWbS8;=XkuO=7{%}oMe%MkyxxmQq5XqnkFtUZn(U>W?7bvuN~(|8W)^-qCP|Bt-(?QaXSr=e@;s+rxQ?MX3Ga+WJba0+hn z_%1N0651ezr)1f{#hkb3_%aX{s za$}D?pBpc}@I1%E%uSg{F>!Tu%W{lN$C07$xc}e*!@lQich0noeEQR$;a7h3Z-A{d z6F7{Ki<^64j&d%=XDqrrmtA&BKX1eQUPv>#DWZ5>Y(cDHb!#NkmX(r{$6f@%- ziK#IjXO45C(Mjf5*RgYsvcmW@^%WKCu8=irtjIH(Y}smSq>{;{;zP$W9T~@?aLEyJ zXf6^rUaAnwFGEEC96^_SASM=7W;RXNzAOJ~3K~$EsL=Lyd6RGr>D?nBU z$+ZchZ5uwXwhOkjjMdO~+8`(kNYf=-69L+BJn)Ub_zU7Z)1B>UCCc>PSVAXpC-V|z zTjUJR$;w{7j!K*szz|EsA_c}ePib}Y_6Y1LYi^V1iX=fpG)1fG)zr$_en*UJry(tJ zN=dCFk|Nnm{jnpL|MLpGW?S`6s(b;5!TCT*Nh~LN0-N?UZ|U?&6n14)vY-dVG#8R9 z>}tp5)dA})b1HIx;CS@tG5h_Fp+DpHFtQ7SVr#2xxSXf&cXa*0<@Gi9?wxbEyy4Ne zzQf^o|0;w6k9Kr5GDk%~wu?S!)$h(d@R^nCFCdVykd2kd&r4gaKnJrCL%pK;Y|N z`#SIbx9{+G{?6a#=ISV+1a~_7rq?WU$3wNPx~7?(sX zmYfYS&DhY1?ZJs4b5%dDUM!K5oETc5xN9saM^X}L$jWr~&e5Nr;i%l)T+@n>7}JtA zTuw}jB*7Tj7}p}#`)Qga(%G1&C=<_I0Rm3mp4AxFPSMA35+H7;!be_?+BA*PKcYwL#I00D=s zd=(U}S}GilN4mbFnJS?1t`lgv5q0vtvoq!;$}q37fw1@(V@p=QntZ!z=4`UQZADJX zE_70SV|=Q3J*7ZiMWL)4J~XOXl0tU7jt?GPayZW1zju!(7uWck1N*Kg1ds0rh9S^O z;dmIaPSPCSc>OKj``{5Te&Q2&=Xm3d?{RZ=$$KAOaGWyly!ReofAz1pzB*DW+#C|) zyhu1egPe8lrO`SmCBc$fMCa9Yc1PyA^{{>Iv*-?@}h$=ka9xwAQo4 zgtOuyD+OXMx-HWMz#7pc7OFe`M+JH*x?&Agpc);v7fEGlmE0Po7^ZpQ_I6}Wl||!; zN|tAE=tZjHl_$OHhmDbC*LA;n4?Kd_{k5IVf~#GGWnX(29AaGO>(Ue3uqKK^Mjhzh72y(>Z59IY$ItQ3f0hb_?vEKuCGU&vrN;%Y-e74_&k>v z*W~jaZ!O2e$l>-@zMkCZ=fXShJjR8dWnRd+@cyG~UieZ6C;Tt}(?8;Oe&-)(j=lbQ>P9u#?P_kVRdK643%Q=4V<67?o8t}B zvXF~(D)S=ZN@G1;*KeGxq3>YjS-F5kZW#`{IS#6hBxH_NDOr)N8iMG%fFY5iyn9{O z(S<-C94SU(PV`k`foiR!7WGh;>!k1c4YRZ2WuD0bv;_jTr*RwG$-P-I?yihaj(Pd_ z5HeVTP!w617$w0uEmmiNYN|jK7!#rcPyYNmj0~-VV zFi@IhfA$=qFMRV`-{$J-n)CbTJbH4&#nqLjVmOQjP1coptyeB_w9D|gG{pF54c2(9 zB0D5I%<7est#F=9cOU8cj9@9S!v412Z?nnOzEN9K%Zq4tR=8LQ9nU@Y9KZeBzs>V6 zyl^LpeZ6v_kvJ=dS`N6TFRJLb5OvaIF0xaWR2*+^`3yo8kwnxw`)BGGt|b} znV1omC|9~>1PePZ%jQGMt>UfH{90CXEg%0!gW&zf9G<6{d7dPfY+300{s-xMcV|L( zzec?cujD>Z!JOJlvf3k@HyoxJZykLN1PAmM>jE)W#`%_;o0$-LVr(3a3%5(sL4{&C zTGiq0sq>LPyKL8*s0^S&Q+tl+R#x3ps|{!TQz@OB`0#WZDhRI8Ou;x$${7!YZrHkW z;rp;%rPd9s_dzWpj^FyNzsoQG%C9nyBgS=Dx31jn#zNmXI#h~YyPOjn#xyR(k|_;t zjz?ljSnshufX$l(pp=3S;DVzI0dFnC&`HV$Y+cEz49az@s=skn%LgAMxmT~Kw$+mW z)XCsH#+h0rZ!CC6oHLydnEjsP&4FR)$hoHxDb=vEd#H^RKi&fLQyD!zdb*yBr)Kl6 z+%>bU3}C8E?o%x6_j}%Y>rKA?jjxfGnRz;5Orsk*`d-?{uJ72N?P)bLjyH_sfmRDa zGmlD@Em_|OoD=U+D}}TyG#a~M$JsD2&J)LJ)L*>U#0H3^(5z**+cD3JuwRT318kFo zhj~e~>NfDXsImn$`?1#^wE=_>wp^)h=;%U+RarwSk{J8cL;H~~VQWdZzuyp7GK_R` z&8t}=W~!;oF*D~(tc6%A){9`SAWr(@oOtbx@A2;YkI6VvwUlbeRl2BB#k#VjNUmZZ zh$*UxQj%U9^5T0NM0A;pZZc17;_?*M#c(IZQlgMM5u~oxo)z0c#_5VDAS-z)Rk zJBGgH&5>5*7ZJR4FwS+D=IFiL zS#wNsayLjZ;)7?m+l!Va$@+Te2T4-MNdgO7V}G`n*q)S_mq_RWwG_I(6ER#h(7fbo zo4RGbhFu4-r3s^GotZp!K%Bg_8-c)VOyIV0l2+G!Ofp+p z(?>FmA@p?Jj&X@x++L6?jPpdUO;+Pgwpi}FzMR9BcYh_7M3eIW1o0Ub!G$;1Ez~$vN7nj%E zfAC=I*4Agc)`EBIpUbB1E~Su)sLgXNq$c0v5;HMY;rtXy`Z&YTn#_mJ&dz!8;6A&Z zbUxd!N(2Abzqce!FEEF+dkQMRCgGL1ZK; z&ln3`@2MpT_)o~O%s(dI{J&TSBxY2-Z?~ssKX>Or@`8wi*sgGJ=kXzMw%_yCTW|5T zuYHZ+Jr5r|;OzX2q2FPR)9sgJGUb@)`oP)wo<4MReJA&CBM}*km_VsG;}*r zKqs+X&Fp1=Iow?w(k$&F5v z@Xb~WRuA1$3Ui#L*yPHR#k6~Kd*C?Ev}))=k1=B3Iol7M?FY`!_MD&Z*`EzK3nec& zYlP!wo2t4`WX#jm(>xsfknXqd26n?v5HgA_jymfsitTWw5$7YdN_uM-IvP^U zIvMgwcO4wNv;DK#0SVb|#XWxHWLgJiTQ!&D3|Xm475Bjrnpt_gO4)0o0)ILOhL8LlezqSeC(3Q1?>b!9ZFIga1ePrF zfA77fcO()b*jqPw>)vi{@7MX2fXQ`;TdSmRdM5@-)x3aXObgS+Ohc}%S*ej(U&O{L zoI@a4`i!ih0qYFMs!%egtcQqP{c6HUG`Qd-EZ5!EHo^#f@X-=Y}A6HW;NwPvi5A%Az)Q&@LGnX{dJTo%-yrIbH4h@pYh5oU(vO9B*lcOmM#QhjnoRE_uSi` z(RTy$G%2Rib9uaJC1UtU7C^553Udij>E`@7eDMoa;CqMp4RYhM0AZ&~*$$ zhnW*oo|xu^!+6|CcRA;$#9(0Xp{LbCt@#uV$I~Q$Eerf-cwJkskbU2)cg!;E2FyG$ z&$HNDN|Cu(7qk#BxZr5bY+_5CIQ@-ZAM{4>y$pZJ+ZtIYjGcJHv>g|fxWgN9XRjNs zT8b7c`JJ!bTD@ackf%-_c&)&7+XlBSQdz$LRYbYp?>`nLX)dzm zTY1cJiIgNU)6N)bmK2EHF!12sJz;9+f-y3Kt5w8vSOHa)EXrNy4bIf!Qj1u=A4xXC>1Og<&D=OmW7;+JOfK17x?m*zsgs>@)d%&?E3+4 z-6ji(Ic@W;!|}*rS+JqUxPZYBQzB^`^!dFVFFyYqUGK3}N*1x}{d?y)=f%KU1q>gY zR}E0zy1T8=sQ)V}7t4SULsO*aGD1wejl+X%?SzwVNRvyQ&;?hL+||_;U->uxnpgh(%UnEpg7tyx z+Z%2Vw-|H7)#VNEzWW}|IezKqf05g9;v3)iCNDhqJe}`FC{-J~vooC2m9GVF9nHdc ztkhJ##;B04ZN)>_(2%v0 zT>p|VLADu?bYsf+xdR4U^=Ng)ksA3OmnL1VvrYtps$g$TGS^pgX$WDHh8Sz~+UB?& zqjV9@@Y#Ryny+qP!utz<{4l?i5i1W;{L|%B|1rFoF#pQw9 zn~|&QiT!TR{%pT7g?2+HGWwixT}LD0ogp_xHyF#37d4*3Zs_TU9q0G&bA5FH9LM9r zah!=U3B#qyK+ia*;H(TyfauZ&w>#RO_R)JOu(q!qX z$egT`63A}XVOt|-NqKcxasRhQ%!OEr463~d(*y?LXw9mQNM=Q)WSm#gnih@2VH72` zv9vX9vx#f_Zt$J9AX|swuv^!;<-_UsQ55{O>1tGHxTb!JV9;zL=cXyEAYa3pE^1bh zU_h@XO~0Rp3yzeR?U0Z-9h5T_#A_J*7Jg}+C6|abfqQ3rF0XH?7>4sbrDfq0`5t2f zw})$P#v{f%(iAz4GrQeDGluGhw;v&J3wV~9=plW2lZT#%r7#_2l zsO46X6+x0yA}xiSMJ7^W5>B*G^~8tP3eY$nk9hA`=2^xGr4VD`csLTYIWW!QLZ{5F z#ypRB>z>U5v{vP<)i$RDp}yZya^mf`-{w27zs8$yzQOzNyu*_x7f=gM#fopf`8MDE z?wed*A6QbQ=80uq*zJ3a>v`whN8B7IFo6^kG0z;-+~=_D&juN*rpU{md5H(lJ;!bk z5uwm=tZGDhfq>VB@s8uT@aXXqQfl0eGdas#z=a-5CANrnCziFLNqQ-bnzQ_wW>u%& zai!}aCSZNfz5Nbj8W&gXP67JaNT=7CQ>~R47h;U;`avG-HS(x7hN0Jl4~usNlNQD( zMntm+pcQM66u1#_KguP z)M1;=l4DHB#E7IS(xU?&EZJSO?fI- z41Ay#3%5?zl};n1#@3oBZ8t1tJz+4m3Z$-VW7zEmvZl7e&vrYul`-W+(;DMEG0%&x zRvoTcVyvV#Z7HVC7)*hz2-!6*X}vZ#ThXgtD`Fg8eO%69i{0XlSL$KYLI_Y|&hrpnE=@Rk4L*T2a$FZ_@H!++1O|HiLzeREAp z3;nLcgS(mJvf2998Wc#>zqCwG#|M zfM_XYKF*Jyssmb+8l071V&8W>dh{Wm{p>&IJKy;>eF&7akW*%v7p8HdHN%Hbu6Xy+ zhs<-Pmi3#o?1nw9!QpV^c%0PsX9ZNXW`38ZD33;|S#!HBkDgp}eHaCaP-LhYW5nPI z{T0@tASdDCl!^rBttY*L$|al1lky^6Q&Zr1DU=k~dw~8B+;(Ds%#7AZ=fmNa;4Sy} zd!B!ApPUj)$v;*H^w$-vcK6z6PM@<l= zZXMN%i#(+yh>GAhRdDbD(;3<}@Ln_4rMu9)V_7dduQm%OSNtf?<1h?&u8b0aoO8y7 zKxqwcJQc8^XIwJfu;=wRzR%}A_xo65c<$i?C<$*Gr9o#sL+?dV>>a@x_Gdf1@uXB} z)@hDcBbACp=0&A7vNfEAKo^7X0%zFY*=(FKVVmd%S?9afQ}pf{3q8O}jY zPZyCbs@JMFY=yJ^7MgRS(24aJu z>pP5>IZcdF+0AW(Y^`^IwE(S3X;j~H*LnkNf|Q>$UOAK2}Bj^oVj&5fo&21yxJ^P+K9v8=km&@I6_ zGmzY=c~wNkICuhwnx zwkLyaJ*`Z)PDG^hT_=NbjNvd&Tdvhl`_X=&82z9~FITasB&*Dr5Y&$(Gyz*2rR9_9 zv#tIl(f2g7RUjHGR8G7|&7vs_ZFN3K5x8TUSS1dt-^@DCe(3RvvB*)b=H7Rt9C4fQ zPBv&&*ZNY>Bn`#1jA>4s^R0;)S6Rtu7i5tuU#X%^5<5rHIiBcua?Q9ZSk-m=6qf}X zM5VvsW30tk4@ef>vJ^gibO|)}`+?irBe{a{o?Ht3(34VP*zM?DAjibLv->zNMSh7{ zO{;Ra;sd72wo!5wE2ha7@nmyqk_1wdj14N{wQGi)3gDRM$l-V-PZQJeNQ$G_lTuQW zW>rKj1ZO3^HfM5-O3W-GSnPUgjd;IyLeJYCfbf&2IFvn-Lb^E1YAQB!kf*q>pXsGRdUUA7`#3V=ID<5W$X7sxShMWye0X7w#~`tMho{C(BzsJcc@Lu-k3 zaI&s=*I}%bG+F%yTuwaqP6482u5j|@!9LM=TQPs1@SjhoxZ<>f71 z=;?Y--*wDO;;P)>eaAS?+mhqr$*ow3&d>Pd%P-59=^9<%QRb{Uc}=}yP8maT1#YVU zDNRNVxz^1cUvs78DjTs}cDI8k$D9v7x*)B>9s=ZRK@ePn6W5(&-|ykTjHK6?7l zk!+FQ|IlrR@-tb0s*zcYF``XaQsI|=`B(VcfA{b3hoAp_g0Whm#V2Ep69ZjLjN^h2 z9ev*mE5$fyQp8HGG$Wl%j(KbGt+RBt)8e3M0CyC#tG*+t!q#`vCFLkaNar1{ID#s& zO*IU?oL-{FMG>6R0T^TGb~|lR4UW}ueF|KJJ8R<21Giqqq`;2z%yUJGR;iWHbu9DD zf60%J7AIk0FWY*()vB8`iRIZ11G!|PNjPJ%wc>)M3%wL;1$5OSs%!x7)qj_>uI|;B z?=$=@+G`xYf{Frd6>h7#p-%uuRLWbEFfjy;P&OuM>}|DQmox zybaHDwj05)D(h%1J|J_CR0?LU_^#nYAZIB?29I$;&>1)Y%)257N%k z7|112t4Io_C31Uvkc_)2GR={gA|%lUS?ft@W{C+OI&w_JCE|@FeiR3-7rVtgF7$oE zd&h1+U~E;tSbR1MkWp4|t+G*SxpMFRJ$~o6e}{khFMglf!x7tb^Hj?wC_6hl=XQ#^ zxiBnK#QH$dDSxe%&3>K2{ZPRS(*V+;C116>G$;SFX;o zM2sRVrnm?Sw#v39bU|WvF_e-NR@FAZ+6LO%uA{01{vqLDk1sEIF5jc3L|T^rtVP(* z+R%FU%M#~_6YRy>K~w>G<=mK#Gu6mkCFxuThXBx;p&&@y9A$lumB^fm8h2NMpAnaO zb`W&pE4f)>h@4`i)+XDqm}FpW+qU)bp(k`+AY0}%yOK?2#`is)l?B4;3zM5zIc@Fg z%88cWoy?Z1#)eyRPITRlob!ez6`YB~I3rQTXM2qE#F&^|rm7flniuxHXIvJR0=v%h z@cD;=Mxhb9j*<%17?xOQb&>oq=cvt+Oyul=$I#df1D*FWfL5a{#$a`h))a)cg79i> z(hXH9aKZ#{ifvhB2ANM%jhw_QS8HR*QPMinEFLrmn996Fym!oVV%R16-edAJiez19 zsjgY}yFLBTadUIStFL}Tu>=KlNbJ=ZSZm>U9PvJoiukUK^<-6`q9;^}a%XiKjobN- zWr?IEV*MKNY^X(Yj;axH<9g4R;6hoA_d_R6VIMY(s#!-Gt39Juf|n?guIn)k@)Bt^ zOL72EZ4tF7E0;#&g;qCwvnP-X@(W#yOl<}0;NJNer42O=7HY*1OCo4yd@EvtJwHF^ zFwUf@V4S1xREv|6+Buqhoh1u3u?jl26d@iu=c!3GS!y!HI++C-S$U&}#2Rf}a>e)znjhJkW!p8I}EMtPzP%FQ)uJd%gXupQOrW2Kl~N{;`6`9 zSHJoShnoYnNVT@w)eQTda+tZgz7fT-PXBQgO2vA&t$A0PU8$9tlhFFT-?%ceDHD#a zHI7VH?~vjP`rsVhprpU5biGpOLnmCJ5TsB6?)<)JHfoVvZ4DvBI*e_Um~hrA zSj*f&aY(qK40B}`#9g~VF3d6V@~581I7f_ynB!l2UHVZ>=b!9%#gAyY+Ef4gqlVb) zKMuMPG0Lf4lm*pcgfwd)@{^9v1rIJysEM~*Gf8$gf6h# z@6;9|tm}%COs@==HwV4ibqu>5t{P0$L>4EOmXf5~GBz*_dy0k}l#-?UVM})2e0y@+ zIK?tc*Dd13oJ3ikbCNk_slt{%JHx4-?sgp2_$#-CX`aYS#Cy*$>{#YmHf6O+CRxqY z8Ytz!cx*g(|NPl3K=+?J=XiVIPyg(zeEtvqfN#9|4IV#wL@kYJlooI3_rk4p@c7BK z5C{97afhXaS>k$G8U$X60%IrmGIcwOr{N{)Ae z09Q)idL3iqV>jS<9C>naAqL1UkaBto2=>t{S8J#1!j{VLk$=bP;I^5j0S4_y6to{v z#B^qR>f}zE#-=`t)$HjIp0a3K5_yi>HEX>NV=OHmmDcoz;oV6%0p=hV;aE)l1c%b^E~09-y`^9nW1$@<`imRxpI6$|E#1&@@BBVC zKuHznI$|}XITG6~ZZ~l6{*Jav7^=*|su3ZiQTk>zMThy~iK|UM-!x4ek0Xbhk;BbV zSXQYp9ggfePw;ljDU)AOE|5 z%PX(E!mD5Z2Je0FzFcpb{7~j7-jsO}@U@^O3tiaJ4+G_g=c2G0Nd3mZ++9r+d zl#beXTIu}Ms(($$P+H^NBK6S@>U4GdAyw$9!gr@B(m%>MOV@cyO607{buCb9=;8L2 z-O1`&XL4dx&zre4IE(d$E(PXVn4=hgeF(Vbg=*P39q5ZFZ$I?3Vwj@%m}+TQ@4x@3W1eb~?Q9>8eP}nLx&qW9EO?` z6-zZ1Z#_$f%bO$9oVFC#v-6SA4HzTQ<6Ug*&v%5qXXy758|}SVWsH$1DeG{mR7aO9 zRTE`OTVt67IdX!!iRUb5+5C>v%n}!dzQa&imc-%qiv5013W4J|u`IJ>)@OaDbHf># z?Uqz92qpBHEI|L~|M9JLshy?E(aS|r2 z1QAMpHpphibsc#Tq(8eHaOPCbFMgJ zNkwCMl&71Q!aMK3gU9jU!2`UPc$A`_cYQgFsm;clMb?OOqo|2f)WcnKyb}|pvpYhtC!#<@6CxTR7HIv+Sr1zSWmFqM)09*QwE7wGr*ge|0kP;2}~-Ylyu zLP-N`QPq&Pf@I}}p%$5CnFMHW1?*3Qv-2I^HEK=-=a`NM4RH_|LdjW!8H<`*o03Z{ z7Wc8Q;eTQv*>pURW2C0a@gQhagTuLiWfcipVy?_fVv3bHf*b;G*eolnL?>) z%b;53D6zFQ({+*;CBgc^`|!g@%*({te#dUtKlR@m zBc|T%`m%m5v+AbSSrb2m1oDymFV#r>r#{RNewkY_m%`GpRtkvIkjH-TIA>J3D{~3) zV#${&TN=T6_)d(cJ~%${;)_@d$Kx&Is9ry7p~-N$mV!f?T$&W0U_>X@sCX|hHB42H zS<>{ABvCb3Fiu{`HIGqO&htEPnwXlK$UT~JgN$sZjPn#MtQ;PFMTCvCvb3AhJ7+A7 zU>(i~vesA+*3*m^e^zd!=ENXc!B|gKuJ$<19G6HlmcAEafuOC-wz*onc}&wtAn6%O zlg}YT<-)SeTY^X_mAEX7)2Nb^%7c67y!5FTdHC>wN@C2$T9QLshSTTg=Q!&~QAnf4 zILgOs1^dYh(D67jjtg-~)c>EkH*K~hP0RDHcg)N+?0v?n>gukp9)Sjfu@MF{D;Ufm zA%&3xTY)5S2%Dc`TVMPW6ydM~Lbd}ehouh^V1a~WAwe)TL$`Xa?i$XphqYE_zLP&Z zPv+XyfGk6_eJX;eF5=Xweb&l+-)Fe*>rRz<&O!q$D6uVLjKm3_7PqdZIK~+D3vNni zlZe|TC~%?Xg&-P`TC0}Q=a;RPMGy$qcxCs9_)k1ga$`9s;;z%_sF_e=>#)wQF*j?4 zGSBM+d3$@yyd(k`vr6-qFM8Q{Ei;C@Ma9xGEp62rBLf_dCu%7SL&tmH^D;y4|9GXc zii#DFVeYuS|DO&N^Y5-)HGJ97`(5W%U8{mpDrrunlvRnWGKW%E2mLvQ`|crFblt56 z;WQJ2*UF-jlOS>T+bz*qY%SE5@xkGo7sI5&*GehOlS0Duxj@y_HLEgOPQUZdqZfx& zdg3`ET&k7DXI6^xZfs5VV+%U}}PKWCYV852e zJkF#nzB#9xJ&c%t#d9pxkZk${5i2z1N-jxc7%yTAcAAn7s^lE&V#nb)aT-UOlp3lL zk=6A$&B`wx@ZOMbZYZ3IRuQRq#8xRI%h@j<;2sI(k!=# zHx%XO&Wghb%C~JGu46o>(+Q`)rf5t{ZIy9S$@;V;t%{Wd)6^4X&kpg0j)-o4S{94I z9nTnOMQ04THf|3G9zDLtX6QMMCqDniJ7i4=UGT0=2ia}mT4?m|pQ;bi70S75`;%ur zcVl_lpISk+vxP#pFLN!5!d-s7nsAkkB!ATN&(;=4y*)>C9}d^_;U3;O%*M+|c}kLG ziO#G-kYymjv#d7kjzQkqnw7N=rHF@=f?-h$4cVjQSQ%yn=g5jc$} zx=oL9(ni%e6S@xT9H-Ms4g_nM$3#bm4T2$Q&0&lvrBiFzS_qoeCi(567qZrAAR>wo z5oYsdyOnF-TD%Wx=h2`{{dEe(1tYE5@|hNmlP+1voGFR0FoeL(bEP+^C(v5YlqcqK zVj53OrvuZZ&#sYba-M|>DIEgL^Mr9uW~AdunAE|4MGv4qdn`}0blrv!dqV7lsjTxB zlsOxGC)wN6q%pEt4lT|IPv@jxciykgW^2tkcins$_^dU&u31l~6I~}6?<+r8jf^?v zbr|ct$9F+~$5NT6S+e5mIn+*WEx$VMyVyxw^E@jZ(BFMq1>m)&HY~@F%IEJ4gqN4Q z*|sw6uMY>PmEF+u{`bDZehAXEF54U3q}65R(FEN7?m5fdLq)Nj%S+$hHA?#O66sHA z&CI{`A6wIcqn!yLVm)c+Hc^3DSR;Zvzf>K9f!*wP^nD-(ORJfokKDW1;7noL2ll&x zp_60?@2oJ2ooIVb(}|R2sCw_>f)E`cIIOqAesB8O+q)6rQaPra)xP2I(TT&{8nHeY zx3=lEX06(?%zL!z%vlb!;DU%@OI?#atQt$D5_aTL#qOdJ*>%aFZ$_*1LQ$o1tMab+ zbxdHe&4LDIHX5Z#oKCHc+N8x2ibD_?OpNk*`9My2y`Yx`fpZ@39rrHoNtI>=b~a6u z5`_)(tQs$CnWu?)o^W0yB{{#KJfP_)OVM$X5-(+$0d0nkaVn%~UNsm?nVxc{oEp=7 z7Wvs`2_cH=^fawXX8Cf>nx@)Ry-I6mMvRw|GZz_N*H*P`&TCsVYe=CBUUVSNsE!Bv zu47(xMnNP1MR+q-L+hfduWK#BQRXaoZ0~ZmzuT#~h}@Q!SzuCfh~!+jxjpdc!3CGw z4PW(<*ZJ({zQEJ#19{Q!A#;hPOkTurt>r&<1}(Krt6x^d{0V;vjGiwe!W!-xQkO$* zQFx!F2E4n%S^hJ335Le5w=lJVt2i%lz-ZgG-3l4-_9%kPi~SBTqIP$Y4$JX$#46R$ zTIkf9)J0FG(#4?9oqkyLtiEpLECXnuiwR{q6>-H^%|tJytzfe=slezVYuW8KI4^7d zS}XH7v)T5kH5*BG6n%7tR7C7(wW-cZYO@Q8Qp zg*U?` zMM`bwaa|Oqtq#$~aTEqHvPusjaypKpMAr9zP6<~VT?onu%0%Z@dZO{3sm}UV%7HhX zCQPq~T$)!hoM{SoH+S;S+TC@MCXS+LJ8i#AX*73!XRmIqIh`)K+-&&JYp?L|-k#t5 zo!{l^c4R7QiuQipa@8-_>e%y|dgb;k){weHVz)nD(X0s`Uw&Bq@v2SmBj;_^AB*DV zoJw#mm=wujWee!6#UfG9n~lWIOw)|_vf6L8DwD=ivkY=irx}MOI4>9xC+Q3~hZ{M7 z(QL8W*0hYOfBqGrq6aul;AqCmOFWJ<&K11x6eTRk59_^D^r0j8CYPddtNA$12}{L9 znHvh{Ct^atBiL8xoC-19YI>EmzQZ}usrk?`44ZX!IBYuAuVq^GR3mzOtJ^SVjD9l$ zCu=&ID5+3VCCz!Q*ix2>@p90%2J@7-DT&SF`#gI5kmpyooW@ZZ=W;1Fz2Kx;6`k5V z)pcn9LLNZ5H0D}p#^Vrm=y(zUd|u3SKh z8GT^?gvx6`LFdk3TjD+9SLWqu`AGo}?mn2anxY8QS zlxCtj#J#|#8Tx_A&NySl!JU`yuxj|=m*vx0Rv#5w**F)(X5-ES>O~E`y6PKD<4i8f zgKE-d%_$SSJcBcat_y;;m>bTA)y(XT+C7>GIM;a-;A4l6L8~QEi#scSW{VZ?S1l|v zA(>yw!)~2ysH}6C2GIwcMk6g3g&4FY-J+IxRd$Eq87GUgZGBI<6D(R=St*F;q5X^4 zf)#Pw&ZSZHi?_xqC~5K3SWeR{UPiYN?#{`LD1Opf$=#aggl+QsVXQ=!q_jTNRtI(^ z3x?7;4gRYcXDu`_sd^tZ^Q*~2cIV+T`jWL$=(d;Zs7_=nt{ z8pT?s+*Y^0vyR*frnPs|09g+0szYD1&SVrRgUr^v4pPgSIsUGGs= z16Yp75$`QH%VslBt>H9|gziFGapUpcD`y&&Dx5FJyFk0z#M5O1lq@VG@0^4Tawd$r z#X7P8-QZnOPtcTKRF!Mw)NFdbe47rn$8ltwMocSQJ-;TE%_fh)~y?Z5W?yOTZVOMo>dqbpk>DK#BQ^vHoAp{ac{rjzy9f;jY2;ECN{bX!&q_3P_v zViaytErofOXd!FbI&c;IXrk{rE-v;QPKm=wNCvgZfR(mn(^*VylseO_B;YPH#@x>4 zXRH1ybm&}jk%MR$h%w;2Y{0y+_`atLL9nV0qOR;!`A9B_z8mmCvd1=?K{iX#uR1oT zS!70SLDt!G!gM=tJFPJqPbA!}Sr5!fYNM)88k#5I|@_&qKi%Kof-d<=M2z44>(9Ie%egY=EIOctR@W*fI8trmFUb;*;+(@8zivd9hh5MC z(!Wllpj$)V({FlW5DiFCElE>-kkgi|HR(~k_wvFRNn~)|YQSFRbP^z1RIk^fHCoDX ztB05zHf2p;2*JyGbk!NDU7_9?sAw#z45yQ{MLy^p=F8}SOY5UT=UmRw#aFl2)YiCq z{*2%J&40yLf8+!F&7b&jF18(=H+YA-!VB9W@aS^SqsuMPArN;{Rq2Zij#`sjv7L23 z1}*W81lq{o8%Ehh%M#1$i{QPXiyrTdnj>}VR|?dIcLMk_cV|EKJoi}jR;@C0k;ji8 z^2*}}Z2JyV6Pr!P#l?nU=$NLHfU`#9$atrb;1yI>6|%@WU~kxgBU zY=*c#C$coK8kv;z(3Fva_f8HqZ7V@%SI%LZF5sJPKo>!|rlL;M%y>FV^v;|qsW6Tw zQkt<^ZWoyuc zi`N=VIbqk_ZozPj)3l!Si$}*aQH8D_fSLj&#iA01UJj^}_^>b%apJ5I_py~eIH{}G z2MPX@Te#soGSp+yPn@AsR<~q}_Q%*|E+d1-Rtv}RB%88YS1#{5%WBJDvg$#a*Y-uW zWJ?94ciOT#Z>$k3Rt0KvN{q*u*ln;O^2Ima;O6#Kj8oTm489!0;X9^ zwYXY&c>j`DAKl}vci!Ua=ET);1|!yh=pw{hWCV@k|L+}Nn?V!1PG&GcQzW(W*}=kj91)2B~x zE^x6KxUEM;}!MGIYY`bK17K!DuuS9Jse%vsnUK)U2I^4w6HR!KnLaOi&L?q$Rfl#GM+|h z$(yi{7BF9$6W$5MVEIl;u3|zpj&!)a1M`#C-Z`h=@A+AMArGKjHO$_KYI#a&9k_~N z)2=S`Wh)>$1WTz&GsoK+ox7~;b55L2$5p>0?NY_mN~#&GQ{kbNA79t|RS&TREoxME zu^cqDR=TbiQ)-qxtYz|_lR(OgszFcVxGJ!hHbkO~>w04~ZKKW%poN{hh-B`>_vo)_ z?cMX1S|O!IDKPX~o;`ccC;#vd_~vi>PX3F({$qUn_y2$=PjB%yl4l8&tMkbH`;U2e z`8r>E=P7T#^Nj1mOjhRfb{KeY?~>#3$d}%HlMn;zvL7gZ>19@%OH2R-;m~! zl`OY?o^C{Yp4{VJ$ZfpEX(nN~dDrKCoMwFrgCPRA+ zyUO8fngk}FgVs7h6wjduqMrFczGHU>ch)LQZUZ$=yn)1M&Wz z&3?mt=y-Z{!+5-<4~_k%r?oKL#(9%a$2@8evtRuu$E5S!l#i~>HvkW*P#*QxbYlTv(Bx^c*PD^c6So-F+sJOj;KcZBQQEtVO=JmF0 zI-Ff%e0+$ajnek00&lBoiPw?T7yiUp|x=yOIDUBSC z2XakphroW*asOgN=L|I^$=E70otFpOn#weuXf?CnbnJ$nE;_uEEFEuQyNO)vdWPue zgQE`?*9xu`1|JC4P_(39wj|SdB09^i4|E=0da&o=y*<%8oP?XI%mRi@WOr{z%Y`{t z9=-Hl{^Iw3AK&ra-^I)Cd4>D;_gq|T+3$Mp-`{b0xuNeJ)--aOh#_!svDfOuvAfvO zTIKfk3TKf)uUut{$`xbpk`Z5WQlX!A#8oi$B^OmOs}8ATWiBfjFnDd#(ao$Xk+aMo zOD^Zg@zO&}lunV!ei1|5g27l^)<(ZntYsc2YLV!bWrI*s zmXwEOo0bwKXJQD1*sG~f2iGo=^Nh7kHAq=jskvZ+WSmW>akYUsYssAX(zRCYwa@C` zrG0Gq-MR6LI1pvH$h^f8yAEsR0Y4mXdH(DfkM6(9Yp=aZ$tT|W)F1M(uls8L*5CT; z{GI>qzvp;6(E^N`>0L@;7(5T|?QteBjx*OcCrN*p6T_xsza0d-Su599*X(? z-Ii)gugyKVNDEal%CNpBm$PPPS@y&jIUbJy`9KE0y5+SzxPPCT3ZMV{8!~Dr6&Xi~ zFU)(VqT#aIie%GSa5k(|ffw!ovc^#0Jp9!c(5Uu7_`!}=gpk(^Vg$^xIdBW!bM3|3 z8h~e-m9RN$b-UzrN{?h?E5dbIBUhE)*9l_ZE0#gpqgq7`YV`)9HoO6=Szs6=o+afX z*OF;jW>;3*rKR<9&f<*I|K45Of^N06dRuOlW!1fi30sxHc8F2hMjvp#F-@W#-)si* zJaT*eoPYDlKVpCHWq$mx{b#)W)-!(gfBHF|Jbg~9f(fn2P1lFOJSK+DGmcJ7hH0YD zj-l^x!7|MvFSxn7CdSBav*G%1kO6dO$=>2>!&ym#7`hEKxVk>jS|Mk7v6 zEEuBiRuEq3dc1ckT(x?xNJVTbVkyx@hP6TX*i~HSP0gl8(J6<+kjFa`B+A*VFQ!^0Z90Lb)ia!bkx8UEb3Bcb2vaL5OQkl?vs`|QP01R(ic_ai45`BV z5jn=N=`f>61{R`$D5tB?I#XJ=z>CN7g*$+jp|3&Kk_!~6%(GTVX4Qw#s)oQ7X%QN0 zD4fXQ4P8IbYGFD`1n=Sim%+8sDg_?R;RSd0qqK)@pDaHk&($(*=rE)l6yx&7cCkloH2N zCHjF{4R1et%JuaP55NAST<$j99uM3+f5J_f|c9v$(hplN~M9JG~Bh4AJ9q<G#QIyx}=Vh5*l#q)eJcrWuweTgM+O;8`D6ji1>d<=vT z=)0cnZpUV`l`E@dLg@AVx#LCF!l;<05mb`cGEa%=bi!CDv$VwqL6XdAmJ8lCoHMj) zg~WMtvtIH^W2SuYV5%xNH2hIV6yA%E&01Cu;tO{Gc`LA_1#{X=W4GUPb9*f>T`p(u zQ<1@z(;;;!i6v39l|s`bj9M%B2u0Sy));EZl%#Er^Oyo?22?Y`5vonJz)KICniyHV zF;txkc<1oen$s%VvJtJIPxiwu3SfizK8i;Fo)C8RuJp&$y3N*?qksSIeM zfzGndQ)pFd=+8dSh2se>cK5h?e$DZ8;(hOZ70g5`nJ;|qQ^f6#mtXxLKk}D{htsS#;f!^G?NSjoDZh97!2SCdw5PYsIa6B^ zKV2W0lC(}fST@^;b(ZU!6I~4)Z%;Bq^D+l34aw;;o%qtSXkKbn&6aCeCvdTQmwUAZ z1Y&EN5hhg)Iqfdh~mKZ!s+;nh*Vtc)!Jv@h_KvtwyEHE(4Tjb@4$*&qw4T_QD4iXNc3Yb zWWeo@6KYeI3qTU4vvlL z6eO0XP+P%a?`V8w;Ab4?)&88c5|T=)YT#VSMGTQfr0a1Qm^5EJSIwK(wdUfKHX2I{JPf#!=c`WSdf2#hYboB$tJ85TYe!i(d!;*wxX!4Creql6cX1iT`y?o(0l?P4JwNzEKO*hDv3&AVpX05!-jc!e ze#hHSuQ`n(4KP*EtI;_ooqe57Ct{~+=Gth@;+#~*6>ZD)qH0xI_okaoYmGwDB>uaW zx>h;z`=NPpMq_fvtRple&aWPi)otZJ5L&K zxO(&R+`An3nVjL? zcC5Z4=ftS!qGh|^(8qvtP1{`ANKw%6KzW&SDdZxtI$a+bhDhiG zlVnb7oqT7`lG4b{?Ul^+YB>`x5ucXK6$_6azlT@f^BV7a?fv}lkNgn3ZO`@16>}*} zbK>@Jq^ZFa4fR`Sm$3_YWl)P81FgOcX&OZuVW8xhX+ANhamB$<8%dult6N^Qa`H}= zFEV0~)_M_X7Nra>+@T7jR%oU%Y_{}WCsa_WP2YuHS`60JoOL+0KuSe3-s{RjFE#0+ zqftx7n?@fa(R*yOOsA2v21=9Jf?WdEnpHE?ox!h6c2v_RTc|}*U5W_J>MSvO)=4qv zoD(lk$`Zw5Eq(0q>IGVis7-AgrOGD32VuW>XQZXCh2R5y-|OZhY7|U4Yl5h&cx+KQ zF9*!BN(~{dhow`lk^H@ALMUn^w4|vr&6QH%jW@o?;pU2`Prt+)pZ^4JeerXA>$iLp z|JBd@Z7wgijMI^nW_?j1c9DyVEt`$Um`dz}4B|}|2w3#%ptR8l!O?X>a?3!+VQp)P(lFwd{wldsZJaREcHrov;Wp%H}VHZQhqT<1ZR0*o^ zUHoiK^-?)krj#+j*M7}c^XTCtS$A8Rt6{}oSjof?0olB5w*5LZZmPX8&X7u8W0zYK zeNl{&7{$blDXUx~gs`?WG4>ei))#jT!gO~1|1ZH_au~_ao)MIccadf+#yJLku9lx| zc}J=yqqdb`VAT>L*yE~|xxmvZwPeyfQp$vBh0Zlhkub;TgjX$AkGP62&q0iWxm{!? zcS8*X#WCx+fI*eU9EW2h-Q5$7S#LZU9#v~Y5 z=lz}BEh|9pQY4|&7>TfTjj<)09XB_WOJM*kAoop1k=M|HI$?yPQrZj^l|wdSc(P z3mwPP!0pZLGD0UrM?OtT43PAaG6bRz%zh#lOKX{NnuxK(f!?g*Xz!!PDu`X$gtopg zrODub&KVaBb57(mV|`qGL>HHr+<)*$JXO`AXB7qk!Y#MHwU#-Ho=m{$cSN`rD5};~ zgv(Mz8sjK!u?~p7W!d(0F^KHJ2t_l^32Oq*I>u3C7SlWt{Gf7@qHS>_rtiRILT$ZlTM#xff2l@VriLNJ zP7_VV6DBc71zILp!~VfN$TKO;eDRI9sbyB5 zqv!(TXr_{C!XdYHHFEpK&eM{fa0;SY+{E)dVPe!AK0_CS&Uo6o9icR8N_1Udo+jn9 zSZtdKF$#Ha0or5ee57Q#No}(#5m

    g+g6tWZnh16S$-v+)M|Y7hZR1gf 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°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 z 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 LN)qK_A3yy+Yq~RK literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png b/doc/pl/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png new file mode 100644 index 0000000000000000000000000000000000000000..1cb4d2d223a602d90a392ebbeaaa6a0931cc4892 GIT binary patch literal 57185 zcmd42WmH^Eur7=Qw-DS3?(R--4-(wMKn8cW!7WH|w*bK*xVr~;XK;77fy*oBp7Wi1 zetm1*weF8uvvzmwy{oFLdso-zUq9$XMsy-5C~_z{NpTJLrQ=o5XAQTkeTdtXsF-e+E!ju&r@*l( zk&{|#{3!M=Ix{YTF8vigb}c11;Lo9GO*kuwU7gkDOO2tKKdVSJ)SAJ^lAM(E?0E#7 zYAE5d`LYy9?1YH{!Hi{SvXszv&8*G{k22mb`@arCPT^;$`X5?LKIA@~3xmOXPr`d% zV@+o*XYDN>SG!73wrj0Jqv^a4r!8kNq8Jd~>$dlw5I+XJ-&}JB``p33puL>EJe^@Y zqvjB&;iD=Mw?Cb>bb=^pvAaw^y@|ca_NssIKjK)iNqsL$SScjg97Fupge z9%KEc?mr&@{MS91 ztuPyo*Aug51LbP|M4KNzOdN5606IrM2bO|Y52OoVG#se*Z=TC{0{+&p(G7K!Ai<4G zLxyM|;yZoi8R1Q$<>S`&wl&Qc&>2SF@)%j(?;_%-eSPDN5aN2_OhT?y`*SicSNm2H zo-?07?x8!)m&PUKD#}XiUE6Q3r`#OjAO3PxBf?76jw1RI?e_5?N~&0qMoH)RX@v^? zN?RahvW=)^fPqcnLbVx+-t99&v><77pvvvu4?GV4&+Hj!wk*V~rUMm}@Ad+wPo5g) zJKjVW7r%{irU0hB28 z?k_;7UO8dxzXx0NquaK8?@mV&hco1>%c-xSm!~-lbPf&wjYY(*&Bg0l--XI@cgWUn zohn@~`>6YsIY6Ifoykd6)MK>lvTpf8x4xx4M&|86l%O}${>7_Lj19~@1937v%iUi0 zb=@)R5RFTV&P+N^3vy)FUbu+`O{Bl_DeZ@-SewD6;l~wNO5|&M>BxL>s2^e8v5zM@ zZr^Ch+rbyS98PWH3GLXc#7=C0)pZ2ZQG9_#Kib3I!I{S9Semc))MFWERX|5t^L)XV zlG=%EC6W+y<8I;~k1unuw;V^8UxpYhFfKL~#2r}OeLl~aBfF-f`P|%s&HG}ec(`$PSc;);bWVTLb&%QO4{6CpM;`Cn z0Z3sd&Bq{nokpB&KVMFE`XDe5-2O0H8;h`6R`v1x@#jZmhQjGli=0x%eZ2_!7#aP~ zqG}5b-@R?27*$)}f9wbTWq+YC+rD9yr*8t(HWTU6$VKL0#^{Ma$ zDach|I`rp~b4KQq2$H^kRTe#QmRQj*PPbEiP`jAA3p-q)w9!tni1u+dcF_dezdj)1M zi8|77pBu$XV#^_U|)LxVRsjz7BOSyTimLp*6L*3w*(7ynj~lz}9jT*TQT6 zj*Bh=v5FTh=5Ku&mU_8=>noq9dzn#w3f9!Oij(Pcx;-Rz74ASpn{fRm>JiEc)wV#w z#?cM1v1;)q2Dx6`*9*7Sj_}eSH$9Ubvj|0}d!lRBe?G5O)lKcYff(}xU6gs|6$p8{tiYg`Om3Ox{s*a>?GlZNl-`v_K6K}=NPT& z1?in%T5t^OHN?EKaCKvOd}RQS!|im-digh<`Olnhu79jSLS8c9BX%zdV>PHB&%L_d zdTx_5rzz|8=pxMJw~0$zf2(D3IDNc&%$QlB!s?Bo(((6_`Q9y1@IEU{FZ)xDLH9~d zI^xP{?$_U$TLm&jT4<~9%0EfrNtB+4*2^pUq^%Y+nm2j-17vg$4iA5pHhiyO@!DSC z?>Qca&=<&P6u~@c`M25ju5~+1=-PFhSf_~ce%yAuxo%P{%&5rmDHLgl*9c7<##464 zugk2caP@3y-mjL4246oo$>>|Bj6EMrtZ@r`0oWa(3oZP4vEY~4JPf^3Dfrn?VWIKz z_va|gYuHAGg3I6ERT8OA2zypM@*pQdnTup`o>W`OcptC;Sg4uO?$tSJe8)TiH$nqEbNwKV3Jx_i z!As78UZO)*B>z?8ISikauP9ThL>^1ydcu^?=m~>(Z2M?=yIqFZ{9)tCmo8j)l&?Cs zEskb+nknMkoknK5aAx_$4=a&@3a|g0FsG3J#29cmX*OR`h5Vy{TiQ=!SL-!=9o1%xd#po8%GQ4By+eQ2Xqz_n)!269TR?B6CL;AlveD9 zk3Jl0*fMlg)KiPu)M(O5sERJpw2d^1u=()l;j8&14eD#zJZ!7Ilg7tthKb~hXi`@o*2|`FqbFOGvJGGlJPp@d^P8p6nr*cIzS=2 zgBY_G-YX8&ZG_8YQ zxA;LSn?X*V`)g5#o}uv(H<#?lkh4Q_mQz>TVSEI%E4)XA!s;+iX7K_5BqN|({@7K} z0PMu{PbkIgjjd>x>-Dak#5|D}B5UC7sT-7i;yx^&s2N(lQ*Z_Z7d{XyH;e%9Haw5< z&}#q+)K_>k6M9A}$)cT$M2@nvP*iMsa3{7!Oe=Dbl?U^a6D}7xBi{X=#`D<=EqBRO z<`8x0yTaqOOZuyZHADeY@{ z(1e%r>F;dehNy=fj~T$8{R=w7-WX7zP2Zfb`IIv`1Fd+f`ER37Rqw#Xe%CSWy+mFO zoTB#4BF-@EJ{$12ZHc0r50zWw--tehn?uTw%uzSi_FY!>`?55 zXZDHq{WKY^n+l7BmrbSB&50wO7bSvF>v*`e0!L+ARWeS^7k?oPMeY6}qt_y^C)J+CxbD`ZL9h$0BRoLS--+{ec$%2u%|d3;X6-(g zo2d$*aB4}qWfh45XKB6hZ&ky*xtp=CdxGAeL8^atE{NAenTZ_jfkY%XVHLCb#SG+N8AEj}BFdL3$5ynmX`6QCHb;$75Uvd7zPjE{e?b8P(T+}^}gxR~0+%7d#^p-6fv?sUoWp zebqBB^vQVXNjH5xjY;s0fmEGLS-gCFjj?9-%{Ib&O+9|*r59e_9N*PDP&wnGEd+_q zh`wG+iQK+i2S>7>F0q3%9g>wPmL760^q?3lY1fQbpyY32GT>QJ8@(Nn;_hVyJYx3G zx`ni^?B_mkd{aceieeQ$)k9zYQ&DZ{DMWeqmx+ai^=ZOndZD79>1Yzj+-7dR9}7EN zR1iou`Da11t{2?)(rV~mtz{bY8XOE1kGlzD_)&BxZ#)gPfXSnhA18h>ZGf}W?~b?*)o0OE%tU&2Jubk*q{L`D&&_2xffgbNFYM`Y;Agi>(p34yR0esXb|mY<2#AAI z_X)vacHb(Kd!)l%^usCY&MH2=OplahO0Q;3oJ17f!B^7o4W8>-bydfRIAzuxdKyt+1i>{`3$&!@6$VZe`>=+a>(D_9@knhMPA)t+u0R#dFXd)^~-b&MbHo)Z~y09A!($F*g_=R!xj=zX&a zDiSDT#Wbh_)WUnB+c(H4HW6~BRNg2>uoeepjDiBWqjo$r+ zz#5I2uTc5dE=EuGE9ljR0rZ#?GjC|1^7BJZW=}`ur|h~|+9+|4ZsQ>57*%D7sHbBj zS8iAhb#M7Db-LeR^WE*`S>luH0BMztXr^zy@Ov_3d(mG$FB}Wj{HS8fEVoie%KRk_ z?&!JXM~E@lt`V12PV2iJwVGHyT=1HipFDo(2^A7C-f4-fD^pPTx#vw#3F49+Dg531nrA_Fgl`*^HXAA{Fu+Lx`}R&1+lVsI z(aFXO*Fppz%{uKNoyl1lqgJWx1Onqp>dyUIytQe?tw|76rw<9LOY>o4cX?Q?Kn3!} zHCeez|G3w?z3ZS-yR1@T-@NEvQ*K&TP!tKbUXAZqyoIO!yvVQLQ*zRAQ9n_Xk$tZy z!sli7I=)taux3t3(op|)ck@xNX7187O~g_7PJhQ(m1O8@v-sg>Antnc^%rZM;$3@L zVK5(sjZcQ4CT@{LzbRIwS*6&({&n(Nn1tJEH-anMnCw^JZG1ZqW^N@x<{EIH9>vJW zizRdSrdreJ!TjdfmmRBT`yzQd)X?Ep2nvq9Klh{U*$w-Q;=c^5NKS6fMz!X@UcM%(&B-KXex`g>{_9KW-*_)RNRFtLW*@*+Fb~Cv3b5gnFkZl zFxut5@D=;Cr19jOXz=gm@9AV1qfMg=X<)a-c#XU`xu&E|$$arZph{hYtf;*L9a83n zBy8P~>XL|zVQ>st5|h=vyYRq;S=v2G1sKwDp}dYFGRHEJs+V>}Aoz1*em(IEg3?Ni ztk`ZV2}o}WARi&OBRIZbwq59*CbNEjechFDq&r%uS7M;u3_H+J2&ayumY$}{=R|^U zY+iNhKq}pI9n}8pBJp?29%`c`draEu6ujLqQ6Vgj6*y;e=M`q^~2V~>_c zV)o0r_1*^!ft|;-J^~_vv=}iD=h~FFSeSQYJNPcVjVP6p?&d;P!P}wkjwjx=*Q!Lf zAAZG8OW`Cq_s8CK6S}6(5|;}}0Yr-u&KJ#49KKHtflP3j%WpKe`TboZ){6IP-eCo^ znpF?K3sv?G>w}Gc5fQPnEeJsv8s~`Ly-)Mm8TG@{J8MYrnMA!x`jK3Lfn1s1(;?WW zx~y?&sNHvKp^O|unmdVW7T~=42Z1-Eleg8aHj8u`2EDa5;#ix=3;f9DOfOj$-6)QC zHmmcj1K4QO#B-S5JYWJPx8Yfv0xLE<;W_7aJ?oQvcLdiBUz5giYH)fwS{h9{#3u<* zoJMG-e!*p%-A&DT!YXv&$w=^5YG_ZS?#6d$j`y8zlw0qq{LowU=NHZlxS=TA4}g zrv{(C(lh;Dfoa7ql!K8fm*1sDFn3&(<7r#|?pX!`p~a1So@>0tzxAu9c-#XOlEgdz z3@PJ<%OR;wgQu4VCYPj{IDu9CH?J^aI7b_Qsy^KE+*Wx&#s@OQ?u%05ZFkwpN3HvX zn4O!qE%`?oad5AT73fyD$PC;Nn#__nbh(>=0&GHYWBx|vF~TBI9zN_3iGOt> zTdtY2H|~MqvKehP^yRjG6t${1R#M*U{Pi%g_=k}in0LobIaO+bXk=uNG~KE;7a`(; zgy35jc@53j@=}hv{O%8}WWpuss6rxb__NZ1DZS0HPibV<58IC5?gq=^Ndh`|`uL30 zw4|7Pka$&hcGVkKi9`-ewiaaN9w9 z9AKO;?&vD(1tj0~N17LA(OuvJjc}MDTT$7}j$Y~RkZ?dWsI!)S>nkb}FGX!2pYztf zXb<6UH9G$!+Ww2#I0db zJ>ixyZT3pTK7S>Y377gy`GXyY=vbkdc7wjjQ};{5!F=NzrVFfv*o@Do>&8Fgs#WYLcKZv+Mnr1b#pr{|qig|_WhzZ(jp?}s zKUjM%u8D3cj;YQ2%c%x@G98Is3d(S&LFisqd3Iv&d9pp(nb>nB#Fyec z+80}3jMet{1hDkD?XOY5mvu?3OgVC0_>Lv@te(x33F>Sv0kO5k$hDk`BdG*uD#=-^ z>B)eUhJ<5{8~diGs~*=jR{IGaCf%O&^rR{V`nN>+_=TC<=<6OdSOm4$6qw#+RZ!)| zuq!1XCbQIvJ)+<|vFIOYODO0gZfJQDa>QKA7S5IDrho8ibE`W-PpIL}|KN(`mDaZX ze5m!psJ@lQDbh;}M^z}SxEaP7HiuIFKEC_b1%th(F(IQ&M<@g^ojbpH&IG7sGWda*WToR(&33)^Ofg2uV{~Yrx#EUHg_Ac^}S5*>b-F6 zYn%H$NujbYIN zHXELUMWP`X`EkRW*#;`kmU-cbuaoh_x|Im6c@>u-iv2%>csV*g4O^B0f;z}jEohXW z!z~op_AAsaL(5t34>vOsi3WMQ5V(_JA9z>x7$%~$m$)zQo=J34rju%h%AlgcZLG-p zS~+ki*NIhupO%WN0VD2_vszKK5I`TR3CL~LN#TapAvW9;JD*ue%Im~2$kiS|3;_nc zs1!>hm}5s2`TT?()a~%U=EC|8s=}r;B&_7mD+ELWruKb%`755C7Cl3UC-3Q+mbGHD zv)E4A)g1f1FOB|mTTjHNl+hB{!)Lmq;#JyL&sEY2pM1<3&45$ftUIPu zakaL&L=-<8n>@wU&K@)^4yi2f0W1RB-9#4w+_kRzjvHPe210va?7;UqQ)J;B_mJ07 z?R(=1=*id2srdtJY%)|iiOZXIhwbA)q4XE1raHU_mn|tVam`0Zo)~RIK|nYGi+=v( zuB6k8RZ109;DCG;9*0_pOmzvq%R(T@d&l1{u+1qcbQh0FjOB)LN;LtN;S{y~wX;?1 z9V}EBB(SQNLt9Ua^A3^tY;YnmfQzYO;u7orkgRgdpwa)}0xW3`Y73hTP531)nIA;g zzGALG8J^h_tD*Wkx^0o%@N#Oh>=o}aAV;^KF@p1TtU+Vg-=Ofzv%E(uufV8_E0#{N zxCvwe@kk6E+w$t1QTu~Rq1_>x6~=Jou>`Q15&d*`>(#SR*$=Gg0yM4Bu0^Yje(R5$ z`BiXnd&2m1L`qA#uD_sRPp-M<<9v4GH%0;2fQCxUCn@$;XBJBz3GvI?+{V6~82_bC z9^}o09?{To5VcA=A#Cn&(4VYh(ac zPc{MNcB`wj8oAwZp?2V@Q1_9F)_`FlIRK@K2n}+=~XLwWO3@-M8?XIsj>on>WBB z12jp|-9ydjNs#oA8-g(r@jGdzJe!~BJWGS>b55oS7!C7c^8BAa!$iCT z5#8-X*^b=i`*n%1Kwr1?bN3_aa}yJyyt_f!HL~s%nivtyY^r1blb}-wr5gS0WdG-AvJc}czJDx@x=(_YGld`h~w)M;e75J70 zLKFTqprZO)Rj)F_)l0KR=r1Gt`AtkfpX82e4xL0EB9}8A9$emNg3>Tv2wEc)oJXZ8 zAo3<)>idlvY(9R@?iTyB{GXnLvYD;+ZyRa`BvN%`HSWdX{9VcOSi7<1je|oGmRy-X z>b{cp`UaBjJG}ccC7xXAz~B=Pf46?_TecQ!0H}p7fT{biL_GGpu2&dJ_ln~Mf+wv{ zYJaEOI91&L{(B{7*r$TXmnN1`MaLc53?Yvs2JG#^D85xPL3+z(T4$$k6RonPk-mOz zi`b^^_l)(u0##h|PSs_xK8fYePhsJby$~<`oRq#?kYS)@CrTDkE!TCN5HGrJz~)cR z9|c8u>ynfs+G0x-6LW^!H>}39mXy8d(n_zgJmh=9Od7yHbV9mg0m4N6O&Ro`q#r;k zihev#=Z-8g(*qgSb5+_81!q&I3aKfDN?n?FEFCZVx3(~m`e1!OJfLxB1)_j`6z}US zA9Kw@n;^-Tj>M#^o8$6w+A0h5=Ax%eb740%bzK=HYh(mhCTfT3wC{Fg`F!2rWdxa+ zwJ(9Hk7;YATSb+b)(ZHO6~cknP~lY(dJIIvGGDe>&wjv`bb~bmZUuFa*4Dc!Dy^{q zfC-gA9+?Ra(s8~+jo$O0g*TefnErrCsCA=;Q&MMf>+|g%qN!JS<=blz7RL`F7qZpH z^ca(ji?B7Vs5d@9FRL!dt@H*cG@zf!>G?_!?ue^mnRB1Vx|nclI$>Ix9&a|PkxEKF z%`1<-JT9#;z%0y0Zt|k^^OrRpS;l@c@ZxkA-&0q&NLXEAGF*4+#lvP@QmmI@0A}Krj72w6369Fb|L!s?^RCiq9zPZK8`Uiom3?htuIh6p6Kce|gop_o8hAJ|#LL+5lYnSIu))V_SXXb9s&h5yYv2dJX|>=alMXNfFg8Qyr@m3-FTYF^{b z`Ll-j!lNu42<${i?g$~+ofyK7WL*7vM-~DJaaoDkv=(%V&{`|%#ubEH{`rWrv8b>VFdmM7GDw4oI6 zfG7%o&sLBbM!S72Ai&SR*hXSFT*~YBkX6we2&<0zs+@+tbjSxh2=p%{7G9H0B>_WY zaEDL-T0gW|w=Y1mE#4xvowT}j!w^yq z)$|`)g-jE*x0kSuOp9BUSFYGQo-WWXOjeN}ax~E0n62!TLzNLf7Qxw1x&KV#*_6XT zWoV=Ng%8Cj0~wC;9P=GiWqqq=c1Lcz8)emc2M*7PU0k4t&`?yog-hdhkE%*<1o7Jb zBc^UhgMB2v0B$DVcUXG^!QrFPA62HLhreCkDbI1ig6$t|z+cQ~ZAb;YmIUmTs7S$E z>>QRLx3?r}e;@lMMNsqAV#j$1i6z?8+8Y(4G8Hab^EN?adit!_%xdqNY^@M^P{%eh zYaQuVk8An^5LUk&I0V`9;<{y!<@yzuB!twOTZ&E*9jkG-1^=OtIw$ zxHS|I`Iw)X7G%5Yc&UhNIp#f>=zkH-er-D9R}#S>fFQ)jL{?K;AIP&aBFH0cTn6aE z2TZ5}BK0h@W205wVpmH-pFkjTVd1Ht{!-~Hy7!AhVF}_!u2&ei;&eUn zkELb%xp3-ERWPIb)ce4lIEqKWH-OT1YP*Tu;#0!II19d#f-L$KS3)lr=Md1ciwg{* z(HYttWgMg{p}BK=QOJrY#QIER0Rs+UK1R@fbCTK>+hByfQJ&K@ zV{dS3IhT`w3ZaR8-F-KKfC4W6>y`(H6RsIfowfBfYtYn)$?}T(hp5RrB4V&uI^mb> z(E4zILqBXnMw6`Ti)uq2-wB-5=lk(^8Kfnc-Ej~DzS5&cTnDhR;?{JUh-V<};&7l*t(~?Nz zW+|^Z=x{nwlyzTc=Cug>KFZTl3g9G~Hp05W7c_k-SQ;!Br zf!LvHfDhB%Y31 zSI$15|68J!*x zJrNwfU0vLNda`HSqG-sjx&%*$mN&c^IT=+n?pBfYw3KfHwds6O1U>JE<#HTGO$ze( zZlZZE3d$Xr6O`5el+qYoS{bfyWKeH=44adg#8u&V!0(ds`W56nbJ-T2e8=~A=x_IX zv0bXbi~NU(%RwAX{&tSNF0aFPK6{8@(p7QY6#R#{PObcI&k@Br0Rq zV3!_5#r22I0cHABzuwNCG4ybqyaM|3K)?Oos;&>A5m=DoIOpX|nT(Qhfc8@du0x~) z$_eKm_Cw`+(979H8`RG8!xa?`%?B*3K;3fba!oKwe3+Nso(%0^IfSs5M&42L9MJLU z>}hLTf2ak!zDd^06s=`mh%T6wg2>!>>rCY18E;2FvDX>Zu;a0kt4GpX!sg*77nw1W zq?u>b;X2|b?QKM?WM(aF+m~X!E>|A4Im|=qWr`y>kME!(vfHL9oUTP!p!CMAWBwu6 zD?BoH&d$w@JT=cma&!FPHB6oqQ_|GU#GyIX5=yJEIkvyMDWk<+=FRmyIwPtY{cF6b zJCG?Qol1(hckU9W4zFTr?yRrXoSwjKayaRYL|&-)pBQ;lrd+SVegD5)=HAu+()Hir zb5SJHH-tJ4?G0W(MSf#3Z1QMFw+;1A!9x+xr!_g2kKa8Qt!UJJaRpV~*CMN(gBLW%kZ&tAUW?vYVF zxq-I-U_3IRU-0M zT)aVKD+rOL=&Ne285u8-^ylfJB(jE4u;VHrkm$pw6^FldrV@!$UZZRuP`aJbtl0w` zohKvr*#!F(_7Ji1N`jUjF}hJ;D>~EX2Am-jUMl*nPOxtb>_la53?TDIK!1LbUQ>n9 z4kx+YQ)PFD#)%hG=n_`;XNOV2lJ?i%CyZRASe6(Y_3DRT&ez4zmpRA9n&#~X#0P*|@gKX{ zR0MIT3+WE7VUT&s4f~p@<%$v}ravoPAfa#v8Y`xbpN=X_LS+Jn=>?|6iE?HYcj}IT zDe*b^dwE+4YZL6ioWM99Jaf_<;{i|9s=%3~*6-97JYyl>N{Dke_?fbu&KIOah=R7? zswUu8_@3=tTRDGZ``Ul7?kgB}fy?R|HWeb@>B6HWomnHcs4MH7+(KuPq{$FPAK#gf^X2jz-$!CK5su15E%k z{|b-d^?i)u9%i_?6 zJc^B&>l~-)FKQ`SEdee0XnX8+ccc)dalmQ4y)8LujRSJUQ8K@Vn!+e~P8jW7lOirr z;r*dOqci@d#AW->eV-KqE1l#d$?*pc!&mbk8Ctw-68wWr4KWkux>7W_ZxOIr1mU70 z9on)r!mL-nb*SnJa8+d>q`uC0{Q<$j)y1}~Ruu5G?fw0*gQL0}pd!i*a!+Qwn)_{Y zU=8JYsC@odK)>BV{OI_3{-%;oLrrFsT!;tofw|M<)oo+Re^*UMmh87r6#J(qq6&$S zq1@t_g?6D6jaHwCI9t}Y40R)-5E`P$5akS zrlsvYmdfcP6E4w~%#Gl~IFUzX$^U`W8X4yQs&O)47#rJY#wi{Rebr~r@Xh2fX^UKu ziCP^%{Ma4Oi1|q}Cml7JFx>&Fe)k)Thk*u{HZ%s_IJmQ1uG8mlDA8Q0*pwD}NvA9= zd0TLLVYRDC8w>7eFMjuTb%XbHb;Q`E+oD&OwCgSdx-}cXrUGbnpoN7vE&({eL?%QS z(&>n3m2pnUEZ#gXurux)Do{p|!ppGs+|I>hWps9IE((Yn<9ov}dsu4H@)8Tpj}a0- zh_qOLv{e;&P#O7IP?uFgL#tm(bEk+9A~VH*UW#MNVE4N)pAc_-|7@#fSJTq{$1@YB zMRet&)*7mN)s3&hBHk#Q9g@evphLTRqI0^9i+N7ta zA`0L66hk%O4eL7U`C&6N9VuiLjj-wAYJse+d?l~L_&7sNd_T)Eg-~|<*uY^;dAa7$ z9?|^`qlL#z?Faw&G?cmo{Y$j_uKrveZV#fQD!C`--~zHO7*7#_{{xi6IiLD3Sfh>Q zwji@(I1sh@7Y``d>AN~a z?~2?b8+@eJPW3DW%K3!X|G_@Fic#paIlou;S3Z=r5G{)()W2s-?Hw{Ku{?yhObs=q zRa$(X4Q^+v>F^h}n^naU{N8$_Froj73xy+TjZhNnBi4J1rx6+;Wo_h>@$3Ufy=v)L zopg~uB~8>`8(o$zJpXvVULDMDHUIg%7j{O!VrN2!abk1>oVi(K!{EVMX7a>E8!Qup znhdho;zwzLOL#@jw|=0Qrrx%sVb|@aZ>D)IZ2(BNT|r|Cg|T zW3FLR{UY!qszpOJvAIDL*V8TcOH30V)aOF^oFf%3&?UR10k=dzvpW(w&_F8vwk!{` zkLby}mJoU!&0@k9i?p|1Gxy8P{b(AL-CWt(E}xe;GAnC#2-&kJsKwDVtDyGD!n{gj za*SUOyo&N~`xndkJh7;5yw30ieQ@m>^;=IM(|zCgkaEPpSEAk%=yD4JJ5WQgOt_wWnBm+*my~##h6pkYoHJ zo6}CUD;!tS^Maut@~-s+t(t_DUI7%AD5x)A1YlEHfw3JT+_gCgaw&KRP$U*t-==S+ z7|j)r_3z$?bM94{$q4AS?`BXtXEvTZP7ogAqkf+|-~DA)hU}^8ycT_vvNr}WNP=!% z)kYv^+4<;NK2AYtgR2`z>V(>e@LX`HvS(K_Z^E;JU!xBrT~?Ybkd^PpOl#%=-_KQ#xRpPbGwI50Ytz)xue`rdc z-*#=NTt*q{jNAW+HATfmuWR%h8~zL&Lnn5gUO0HVRH1zFD}A&%;r#r*RE z?u^>ESV+Ak4=FerQt(f!Nj|W9h`{hOVEy)$2Y+bLPy+t*v@yx-8EWSEI5;+#--bVZ z1bHH5;jMB#!l=#;GX|}dQ%2eFKq|q)UM8u3zPj2DI_I~N0jDZ z6j)xW?p|3P$fy)pn*-Pz!6$aKwh`<&3yePyHdu37w!)x z-Cn##7%XoatR!NEL9U)kuJKq4dk1$}AM+RJVK;Z~R^>niBMh4hv;>yvkExG-!6x=0 zJ7>LfAA1LB_Xk$L{)rmqB(_VO8V2r|VQ1i@)4Kb|vCw>LMEseca4)Fb+Q}3dFXPMe zay{CGf?QXr2y;V2ov$Akj}RA1`{&9`wxEdM^4-X^%}MDXCWnDr6Nty za~z}6DA!L)UJ_&?-KGGXTIp|4NjV)D;REhV^NmZn@%^~6S%qYi@S#Uv7V6(i+Q^#W zlxNtU(&#LPWfn8B1+fHIxh;LVQYa>7q3kzDknr(S!)$^C=Z|^ zeX#fH%n(`;?X#E>x4}b>zzDI<_HM(7lfD&fzs2@`4d>AzqsyMW6PB{P>Suons5&&e z7qQIniF|K@{YIX}RQ+&31LwtH>0eB&oe)uX>0>B58Oq}U9nSU`=QcqgUd}<|d0rJi z0V^DxBR-U47gnqm%_)Sj;8%7t{(BKS1_kamN!l|3er85$rA`+Q!+HI9paZ`-W(hF6 zpTydOR%9aWhW56_@gB}L{L?FBgIwS2_HZKu07nvB?3%}*VAt?nk6V34bMJBrObRiK z+v}gi(oUU1pvO?JR*QK`3s!J(!JhRU*(~@q$&1ejHA6)smQJ}}5(xZ3O3u!6?OZEa|1J5))p*0G6X zO9gD-rW#F$a>kr*CAkovxPFrfr}fn1>`5{3ktx%kNs0uHmhfvo%oMJF{Vhc$2)b00 zi1InsNO3wKyU`vUDxPxIg$!q63vDg*75JJM*s4{{-tQ@X(C1kUt%f?` z#ckabd`xNCfLT0x6pr%raJ5yM42!jzeSqK_=Ko$)_^)|N7pD#Zj>KJ4F~rNJL%Xu( zk8=jEuKD%|_}A5XPQ85zE-?;>q2Mdj9J`S@Bk>cqP+2uY3Fu0#dUGRT^(dcW<{cV6 z?$P~z2i{vqbNE5bfDY@qSI42)+L z;k1%?FHVID;OZ(T)-+rW=Xl|@{(tNI8Mqq<%%q)GJ(jRNLL{|wj$=~@eEe?5SjYR) znIyLVt^6(>Q*&0#>&HTRvdw4x#+-Ey7!$-#Q`urlzCa!Yr#R%>ZK^C1Fd7KkkbG1K z{-BQPmzeirMj;Fo-7dnLV`h)!B!Nu45YMa>bq3LV$ z3pI71I0;c`+Xle(i~e>*)IMa)UDEPuYahk7z)%{cVedJV_<2}MbYd$j`2HaFuXH$< zhfppL)*!;}A?)J`^nR;&v&Ekx8}4c6iG`8U0aD|;BCP6&iJF*~-3Iq7WR8fEAxI`@ z$lrtkEM4LNj91d)04jRma+C#+}0RT7YU_?IMLu;+iXx18+O3|Kfe5~L z-tih#n0#rv?w4 zP|PPn&VO(LT!e?3Cqdc7ETpQ-T6}p83i=PIEw;pk>-*Wz zvYJq9?#@-QN2e3QSS7i?e~r>I{)*-J7R$q|_^FV&&^R~Ipze#tEDXD490XLEO4LMh z{q6=DVT!V@19vVe3~+5<_@nJ(aN1VXTPgk>c0PS4Cd;dk-(A1`Ykp>*KX<#p^YSc7 ztD26|DBdiTP`y3e-{t5adONA@%ZaEJa<%k%sZ*4S$UH+`irHW~pU4|sgfF9pJQwdp zZzU>&8;Mr`r=vChS>3#I$3{ts8 zSfMuWXSeB#61P^`-QFjTbwK_qA+Fev7#l#q>(^o#w(`C9`jFLyr&rMJsVK{#0QmJq zB9nj^At9Iedl%WDoPHnHLtd?|_C|y9LHMm}S3#no<$U)k-g33TLV4dUT?=E2(M^lo z$)D5ireb{^j{qlXQk@vms?pLJ$)A+9(ImZOsO8#h$kXd1+Vf;Rc5no_Q=V&fylq|H zBH4G9<4>HeMpqskqE6vob9rynI=;I@B-rYd!57VAj_q*LD;y=smj=Bz4dWLCBaw}Z zOAVg2TpO1DUpKy{K-mrBrG%gptzS)rx*n-R0wxsNT3^1WRB$mD6<{V02ePk(nC;KM zrfS6O>?7QP$nuZN5_Rr+O<-2Y+WKN5LRHVNJj82{bS^;;ubb^&EW>+|P4Y&(?@3AL z?v8SXy~NJvjm8gnHXI)a<^Ub90Vj)aY#{a+X@lO`51-uK8+_N&LfE;iJI6sP^WNEO zC>6Ozw^SW1}>A3g*OnRc6U94H43`XLMWK_PZIUKLfKyaXt- z{*XQo`HDn_yYj;8w$zag{mzg6`Y_Njy|}SL_s%|g#w<6tBD@1ZZZd4~H+b)S%bq^mvlt?0?B&iU z_1AT<>OZ8NO?!25Uk|sp4TQ-iH$ZXwhlP0?>Cn(zgbs*qLoNyb7jthN6j$^058@I$ zxVyVMBoFQog1fr~cL>2D>gO*d>QveCmhfv>wf}RCuIcQG&96v-&iIZS7bHHLy zP+YX*ytuow-JYH_H3T_i13_D-o0p$ZqFN70Tv0LhRF%)VJ$wH_jk?yf7$ycr*$QU;!uPy9h3Xb74{b%Hku| zy9nRP{|lAgfTA6{qD3S_3a*)gIqdhY-J=rZ3SwB$>(^!$B++_ohQEKXaH?3gY!B6? zjA&$JWNe+d{1371-LMjplEfd9^Pd&Md$wh$sF`>78daE2Rg%$^g&PWJJIRS+U2?x51idFb-7gy> zjtx6jvCfYaUa~|td-R&Fm(uT|f5=^%PHUr;r7wXDGoMW+D$)uxqaBj>OqQKTjZhLA z2hRDTbpTKY!@m*PBdL-ajE^K)1*GKrk6Y-y=<5auTYsP*P3EMXlRaLIE@!Ny=3$9g zdiHi|VwRWDR@_OjQf^I|J&XYK4H%WKO!$QoE+-9YrKSCogqUuFmQZU>8Jfuwwc*61 z)sb0XmG4z5!|Bays;cW?VqKoGNx@rYFk$`ymB+lwNTU!bV6V@GBgZ#YC7@8}Lp^+B zwYeUR*l&$>?J|05uc&xC9qc z+XLHUys8&c6B9-@#WDFAdA~Sh^&ZU9YX$~+mMwlcp*GvL-Vvv_exD-E7}t-A;&%7? z5Iv;YL%rO7N%!ISWt3 zL;AOG>g59)u^MZ4C}f3W{oy^76#)O8VuPZL&2n5XgG+0ffJbxKir2 z`%_l@EkzOrYmO)~MUW;ZaWc6JO$#e_el$M%y-8kfY*N;m0S#dC_9nn{)|`oDR|7F%`TYy%?u>tQ*wYPPD!p6puxr2ERH_@*`fTI+ z!SRT-xafi|T9chyptO`JuMH0h4Wk$7wG8D*+YUw~r ztI2eytLV0E5r2x%{pGNrs4Z8xeRJ+A&+Y@+`!u)z`ix59Q&AhlG*B7zk7~(J6?Mj6 zS^AN3E1y2wvy_q4K>yjh*`!GhJ!y&TFRK~W?MS7Ugm8F-vI{6(iMezmNF@YM(K8L1 zjsBLhT=p>5fMg*PVh?iV=P%bHg734GFiaR)o*G*(f&Z-*~;v;9x@bIva6W1qd@74jOBJpJDbuOTqi6G+es zT3;=hXOdM>@lL%mH4{_zwnCd2*?%5!r!gs}Pw6+AOXX&T=>wC$L+Kk_BS_|U>@X&f z#KIXm*m(U6U}q0Mk0AdmDb0{7#*LjN?Sppxaux8hL1c72B)auJ-sczshkQUork++P z-JXljF1z^^c8rZlBylX_nVTO$5# zJbM7z5Gj!tnD(~EgC174D7Lcmtobg!Qr0WAZC<{1;!md`L=B)z=^Gt$^$WChKtV+nyc;?ag`;r%uJS4and#fFH%Lp^6O1|^C@a%|J_E**FKA1 z0ZWy?200HB68ZXkQ2ht8D(L5^x-vA=nx_2M!;V!(Ak9)nVm~=8RZ*46V(*5nR^~vA z{iRD=``AA%J(9PJU3TC1w$#dHV)~DN|7w^+X`nm%X;3J+`YC~CN$SSly|@(-r^}4W zE2+>f+zofQ>_R%Ge*L!-`Va@#-os|$GQpK{UViVdfnb1LO1iABu9bp#hW0p**jGBP zIk=NgeFM?o(;LiNnGzvvi0CKd4APX;sk`)m;V8jN?WWj7-_OM7wwWlO#6_&MTD7M? z)HSvO>a(oTYRLU@=lZ@T13MxM9O(|S-v=B9s(v6APc=^TplS;vu9Q_5iC5ed1MuA> zZ^Bfw?o`r2i5kQ=sv`dZPHy(hLDrWVpnZ$T;)Hj@QdZUNt1N-BMslWi{m111Zmv)N z`L2N?SW>Bf95u7GM$=B7y5(g8iysn9WG?yH=@H`>6)?Q0BsXO9J4IfCE!Ga!I?NYd z9FC4>fRt~U!!k=&P*O=LK-nvdSc}o{T%G|bqVfw8trp{4oDg<|JIr_&@Lc8iv$%y` z&@bf^*^bDk>rjYl(FfInPf2pXl)j(@l@et-EudilIkkiU5 zAQbTKo|j^6!+mc&3nj5eV~}{8-dh7)5V0Qh3CW%DQhCt^Y zFz7dZ+vPF@{=q#i76%Jh0?|j@k%;gk?pvxZLx=->9K1!wuu!#SP~NdhT4G*##0Fz5 z-?X8_`nCzB4=!NxRu2yC6@F8`j>qZ}b9?iTVjc%162nT&EFEir+mAcCa!NXj=OgYev_kAPswLf=WP^*zpKAB~=v-yUMG1&~vMU$X$#gy-|68=6>*(%{^T zTuWTBe$CnN{lR*;_L)qh$2u$t#1jtX_+7RCBjkpo>(t*@?D0=mw0(eNI-(G@4Os@y zjP-H-Nq)<0`@JQJQaQ3vGXo2^1mutR#qS>QS>a3%bL42oMY7pW7ws@b%uZG7DGYJ? zu9Rwg(i-7iQm0U`Z(9qXmXzkkiyl~FRZyVNsxSN3ri3=EPXF}2Yl?sWMfT6XmAwB4 z6%Mjkk87{?On&DO){Z-22nylA-ef*|+QY4D-<#TM(`P01e`2SU zig~l?zmtoF>>ZZ}7w}7#u5VK2;#|{DJCieZRE~moX;k;lT$N z6!c?8%;j;fxGGFDdEZ+>$^*7AOv;LqE znUVzomt`E(yY$|~hbX+M_WxWo-?Csa^g%4REGaq`lJB=|379qMf7tx(k%7Hf<=pZ7 z6GJE+kRI&5R7KzZyDiw%Q{${kssFYq_VG?V+o$xqL3=|CqVLO`1Fu7sN5Z_4t1tJ( z4egNby_oHa`>lGlzW!yIV*V z2f`wIGv)zK&(5HmV*l;&v-L!x+pZ5B?cj&%;z(AXfYMW|R=uucIn7os5+4!Jwc1w2 zT94Aa#6=b3$x%zK6%k`{l_7|G0Af6WsiwW`ZoZhNtnvLx47qN!q>gV1d!`Dk2YR}H zvu|b6V;jExQhiPZ^Hif09dti=ePB7yI->L|Bcnn@=o~_e$`C#mH15TF~ z?Q&H{!!S1Sv|50<+V`agyG>7JjoKf~o#ffqw2Wub$Y~GaqgmsRwIC&i3>ED;79Kv; zC^xwk)RD;$%^4&09oTS31z!j(woyd4-DVzJ&G^SjEgdvELDQ}+f>b&!=2cYC#@+oU z^ZF@uvl)W*LGN>8h!@;~Kp~HLV#E}82@WnF_0B+Jh*3RlxSR=@ z1zGTJh}`o`)UTF$+;7XDxE*g4()ue2J3bxHman~F#F{@vsEzJkILV-9FzPlbcJvx3 zHbc;s87vG9f|ILnwo|lTAlkCqW5CakMGhTzn@A9EE8*mUVRgxm#2gd@%bSxaApbIO zET7u?qm`2NVqEHU{bI41`ANu|hm?lx#QoB5m1I0Ns&5lCj6^7h*GQF^VxZp-J8 zO&fcp-35CcV#UY4L}sUVxc3(5BpAM+-3(NMXyUz862c}$U1bPiM-I3n9S<&V zyz6@w+r0nLINqB;Iw0mjJeq9A0q*c%(&tU2iOSs~#tpK?Y_b5c$u?zpv<8E93dmNI#<){A5WSj?JIkskgZNC&aH1N+tX$3bO6O&Tztj+;Co$x3FopW+_ph-cz`6e*Loi5bp zpJsPrR@%qiJ?u>si;*e4vwB>z& zwQVWcdQqI!PJY|&z7LD11OzXWl}N0)?Fh4dKWbd10NrB5E0t3d@pV`bFN@YB-d_l8 z9&gNaHiqQbAGwqjaFd+h>l$W`<}|SM@7)-05n*HRrm|`MyOqM!!J-;yKtRq9r-vb; zF+slc9JIMRdUhYWIzP3KwfT{pWS_f(+}4iIQe4}dr%;+aEx-akpz$at|3T=+-i>R| zOqZa?EqnbD)(uS6!Q7=?6nVLtSfcQLorz^aUO4?zF3CoC2Tp?7MoTz4=xjKJe`L!1M}?YzumR#5IhKg$`}yz5DXX^0`a z)|fDcKbm-nxb=Vf$STB73IRTrla53y?x2VZF$4L61dRm=b9DM7$u4e|!?!4Fa+ZLn z8u*Y%z2AL=5@Ef33ld@3Zt7P2XwjmEER^mr=l|8CL2&hTbw1m-kLOz^KL4Sop#PgzHeIy{;#+Gv6GfZ{#I@F2NTU__|ZQ?m#bY`QP$mN!QaH1RwQo` zh3r$1qI#<}D}7G8w!azKE}yu92fp|Bx%Neut%kA-2`RHQ5;`nrp}!eh!!v#weTQxv z7lG75L<*)K-**{5YkPaR^{GNRUy&W&&U+LHdV2cL(YI1DL^9IS2sDX^iNh|>J|^4{ zG)N8lI0!mDcA7ojOLLE#KhDON6_O7f&+N$CF6Z^!vt?)L0}!x8pDr8*-uEwz`w(4R z8;ZXgZfoFwWTpJal9@UsGaiZ~_qpFrv6gvnGoG;PY@_$xLa7*ieyM4$u4WT?JmRFF zq{M$y{NsOZjUnEGyu9yOg6?pxz^&m#d>&iP&Wq#Qtgy*^Dd!UqzsU2IYMXx5c)`D# zglqxA`0i{2n9d!^ZZg2;b+zZWy>cpuL6aCRlSt#V1H>mn4TVDd`|l0`i?%e>)P)m| z8UHbtI-mFD?O-Fq!za_Q-hXsY@@G2j@2IKhKKwiU|6v6hPyDXw&!10Xy|DGa|8~-S zApiygg%s!F%fQ5)gd5M|Vka3Tn0i%cz3sqha1}^FS%yBrz3mk^()-hgn0yp4ufN%^ z@N?}T{G7-;F)E6i=u*%51D3g2oSKKN;iy`3cvO^vE(A;F@2y@{TV#zJ}QW$e}XW#G8IvNJXqMqX z6Z6DOp^S}Bdi&-LCn76_8Y!!pBB-2S&LXY93!T5)VQEez9U&oq0tnXHgV z8GbH;!J_Hn8?iL!gM!RY%kbQ7=jWe%%MIZ~eNJ942KX04Alm>>`-pxu$9)hmW(J$r zZx;62=Vy}3``?U~P$&M5I2h(#wzTYa^s`zL9_c>lMqB?}w{AHw6jj28NDkD}xnf|3 zx?^=Cte5W8gA~5PxEY`1ef_B8{*A;V5tPTFjX?BjY7JFr!wX$~zgrd8a)3|ch7X~i z>!K<`t>y~xqn|1+`-QGyRQ7bEE5j4(CoCLS{JBg4OL{aU<;w$yzV|jagJR>S1=A@5 zj|4nU-4YgRe^o?R=78=IAgomZ$f(!dn${-rAUx96$X|;aec*Y2f}Pczuh?zp%U98a zp=5@U-x*{~$uqc9P-Z8EtDkc11R8Hkv&vUi#eGbLA5nQ~u2RaX)o~J9kI4cl6wLRh zl^Ply9uYfaMIcB!?sa6J5X*JBpbyZhcN$y6mAnHz+07M?fo9Gtrs_g_yN=YLEqdzC z4~Cpowo25@IJtqxRqZ|95z_%boA;Fx@i^N?Jr`e=>u36lwzTBfF%9 z8)rWcHjH)|JNrdXJxQY3p|ku*Ri##!-aoz5^) za@m`@k0kAH3nyvdIuCxSdL=ZFpvGYL`)0sQy|Is*YKK<$6sTashkiphQ5?13taPt< zZf;LvR;&~7tB+P#=1X5_xo>TJotjk?H&iACs}1KIENk3UX>ImW+ThKAv@OabeOc^o zN~c#;i@Sk|suL{pr>(8#0+F<#vj!jivHbGN;9v3V3&PiU=FHU0-4l$9f}U)b_%sBN z2Ck2%JE}jwdQhaYvqw#VG)f6E<)&YJX9k(gX7kwF9<@dKv0b~AX(sgg62mdOH55*k zvcw0Z96bzRnc)}_htW3qtFvmRneix!FP|=Bjeg$Osh@ zrQ)$ga133&DVUvaIPt5e#NBo#H_Qy;$lpwkKtu&%eBg;F9y08G+K)ZMF}Wc+yG3A&ui<5D6=!cw#4y$*DNuGm}lWz-wp9>{oM z{%nCm_BmuZOZNAo)?zI7OLAV#w7im{nbj8|SL}XUK@bES z^o*LaU3ULeurq*1Ened*V&>*7=;MJcVu9!_myDC6qYcTR&-yLbq^3syi!Ago5-uBm zdAP4 z3;VnMq?TQ(p!w2;7VPu{%Zf{5rm-LCY>4D~+VHuEhbSAHz5{Mq$y|+~P}HbRcZuPI zYz-b6%v>?3nDs`OoVjPC6=r6+VGpLi&hJ;M4W25vq7q%>LLI9ZNcDI4&csIVcJId% z4UHBx<%K`u7S)h-E2_zec!m-}pj}57FLs_{)#6ZbE`o+$?3PQo25QOpA)WQKa!=ZI zmxZtIhwPtsx*B|bKVi!Fo>(OmXYe;2o1q%)jV>q0PWa+B?^*5S?LyI_J@dYz0$Z4& z2+E}IacOC#mKPrK0e#KmwT{o9(*s&w?*gJay|jJ`g>MGC^;nBgnmk&qLuL41Vst() z8_rQlCEA`j60zysut&yDOn5F{yjXy^yqOOD4cDXHC(eKd@Rza|mdVK17l}`3&C;BL zJU&BJ6UaNUqAghpwam7QzEQ8fdqj12{EkI|KS}TI_E#D|E>1anw({voj+|V|H+eJl zi>7sf;dqsH{1==WbNeHCm&WH{dE_k!q#wlY)kZe*FC0YLjtAlWNL|XZNR`+jY5aVu z+EpPiO8i&&Sv$QOv%&dNXIC?E+0&<6wPKGl^!yWbizbUL>*k6t*A4}?FK=-iCL1R- zMPpgg=N|=mv+kn`nEhuB%-@Ya2%t##Mldc;&GFbrhTo`P^jz8E9Jl24Jw$>ZR$9+7 zM=z}|t0CFQT*BcC#^t~2Z=MT zBR6IYJ0&blm{{zbeG~J<(4+CA7OjZ%7gMU*(`xV~9-bgpOub9anO|T{jbu+z@x?-U zc$YX%rhRT+X?WLGPMaxc4TKmt@!doPThj~*`o zEr^2l_1%60Tky(3%)`xGN9{*Jk!xZ>N|KwO%E#w{lxN}IiTMO=KTT1$Pl%5 z6r8qj45{P9CZS;dxzZQ&R3kU#c)}8Y-C`$apH2A&e$+3s)nQs8vJBdWJ3(*uq5GrS z;bh_hY+AusSkoqt%|8OMV_}fSn##`<%d)p%nXp5z%&L#ja9xT$SHEmo1iOLGhfU1Ex*Z9Vvl651!_+u$vsE{_GhCHzY=Tb7II@ ze%8;L^Y9@Hu;sEDkR7r$7teiE#hj<8gdhwt)$0j5er3q>KySB1T#>Oh!4NQ~#%1kT zv9z3$5tE4GF-S=(GSoz)y@B=g@sf z6_!X0Ar5jZsf}WvnBWSz;%}U1N~I(($L`le_g5dM?Q1VbDlkCLx4h1iCZDK65Fp5h8V<)0B&hgXKU69;5JVqr(CzmDn&Ky?-4)Y~gxu>&Dg*ka>UQ`x?YU8Lh1!Q=B<+rql z=Ma9zsn}o>fBlJTHvM1I4@(m$sbd->E_cstJVp8By*)rX+M+@5=123-iz2^S?$!gK zjd9SSJ-qf*vkw@w5hz89n3)MRiIBBeSQYNO(0=q$em26P6 z5~ikDuKOkyuLMID#@?>LA9}sBHhW(!pq2INk}I`l!QCNf&`uSqlTUD6Yz?jgxupJ& zgi;gp4HcmxYxQfXX^ne+zrWqacQ!yF$ggR8Nf}rh|6&8X+4rF7Zf-pedR#nT9*IoK zlZm@r{u$BJi{V?`Gg9A6Ia+-opRhf284rxK5CQYSZA!ZPoY)_f`aYi-rgUE$($t~e zus(Fagq*16!osuG&smhJF3gqd60p)k2+UtRD;4oTNc zB$`M%-5@o2+u0R5gThQCY=*1C$en!&Far2{#>x{xL*I6T3Ev&o09dDyh%&@q)Lb}8g1OZ#COqHj6d7bevKAGghYlk`xx^+mJ^*zhOAcu^?r*<4< z1@0>$W$#Slo3PKPBmf$&(w8fDy#}XN`Pw;5YCp@Vs_u%PLl~KhJ@Vzw`?OTE`(7wF z;9x_Vc-qg|5=73|9M=mVv&$@OTokk7x4wM4E(P*@+zhSpTytw6ROICHqrVZE>7CAY z!i@IATe=3;<@BCpwGPjF>f9PlW5?9eqB|@|Sxxfrp>R%vy^mGR%ea+`Xvm<}p#*uc zG0xX1%*RrP|7=#+`a28GBAaa>>ySRc;BDewWJox9_^g+?D?2R#XH*6~h?P=u7uU>k zcL&$hvx?xfE7MihbrtpRpp*uJH+ny{=SK;MF_|AgK*O2LKeNj9tXHl3*rDpRZg<|ROexvIJa+ z+~P^-Hvm&KhmQAnO`UUd$!}u3UNWS4BuNM`fjY*=Bz52BDXl7M40Y5ieR8^;_)Y__ z7R`3}(j+q53-IPe`Lvzk2}7f)C#=h!+6}N{oFzHS^h&WaW7f17%e@``*efHACuX7s z8!b=6KCs}OQ!~g3x6o0Mg!IXEU;Rc+EpQQGM^KswI)(#2N@gpDgwvkzS4Ma^`+C)a zl35T2=QY-@eUZm*=-rW%_@>3-&KIG8%N5?Y1phJ1Pl2y)rjB&0)tH2Ux;Q5A`dxpE{en#zDGs_JUFT#!Q?ai%skfdB>r*wmXJP zJ4AfPUd;|cFWusbY(cL=r$nMkVfYMhTt`Z>nLenxSI~3l_8*Y8YhNGYEXKPOULt=) zHD1Pk+G+Tf9xyQ?x;f9BRrCOJIM;9mg_hmq(egd2vqyAQxJ8)HN+d+c@y1;=s0KVVe{EA`Bq*__2U8*d#? zk_|aHOiL)sB`PJ7H*vB>bqiQn(1%BEPJgRWQAl-*8`z2%!p@|}2MsK)CN%Va(H?lZ z;LU=wG&dKj?`dl69Ts;ZYlKyZ_c@IWrV^@D#bXOlf04qnN|7sW`<(j~zfSBQ? z)@>S3ee9t5B?T~HeDTNkE5-!V~XP(J&5+0k_q0I?RY<&+Bpu@;&a*XvmIRbKnyxqO&;0~bFqAy!6nqeV4<8vjhi!~=mg!q7YopdN-5U# zuzL(9eaNvNsjXcU!q8;jS;n+eSKdvkn2eLU$oIFQ(kYhR7!G@WqfP6ZmabS6$|6!y zo8;kO(B8!j?yu#t=X)`k<@+7WzM^zET_Hf|<7vPd%033s>3!R&^&on>^)vSN5}1qz z<&Gba!<;$J_YXU@_T8~P?QOXW6x>U!4&0@Kzi@vU>GFMXFt79LoY#p#GZG$<37Si9 z15nzI;wTnnXGYjB%G{QgRN-%0Ku9s@pUVBgqVleShk zCCyh*cFs=XRXUTk(Pn(z_Em4VS$wm8p{_Jz(BUq9?lAn?uc7@=S^KPaXx?5% zeeoaXK-1fmpAZ~vyj!m-vQ=?b#}lqe0glhvH|n6PO_z|+tnFe!(Jfj+fw@K|8G<#i z9@!h(&=1+#%IbdP^cH;W_2%=?ZS#nC-W_MRTdG_Ca-o;o(SevVDg9$MWO2dQ89Lez zAu??5KGARu_JHsi871=V%`8g@m*C8hCT|%o2Q5m20LhC*`4rNo&oL@s5WMen@)R5b z#}>*C0yXY_;Njvjv|L`>?GD0s_9u~9kZXS&nO0T`f~PoYu(4jVVQodr0kBS|3Y5|E znlNWS=Iq>inmnqbO~4ZPptJjU80h?%*MH(?dZvyX@G7}Y1xQ@gPPO0AqoJUX0F5y8 z9{%YK)UAp15o&+I|9;;Pf`oE?hc7GMcQ$%3`)8e;qDS6nZh}5iYs3Mkzuv%v1c;1w zu=QYB;_%~_Iz@ewN7@50a1=G9c(VzUJ+iffL=Bh{N#O)>;Vu2fF#OS9ZpD7Shb~TPnN5 z_BX(T*SD=949WkU=Z7m`4aJ-&W=y0lWej8CAwd#NFfG);Gr;(0A1%g{FDs{LQ56D` zO^AY`YC+%5W1bkp~1%;1i~8!vK+>&0K=D^$KUP=S*@`&6f!xy4X4*^XtWD> zUAyp|gYY{Dw$K<{*Gt7faTogB&?!)T(pO$11!>xaDsMuP$?0(G(Lpge%sbx>mU+!H zFe@d-^AVPBOM~|zuZHJolRCMPF!I1yZ*%i>sWlpz_UO0Ep|?;lI^J01V*}6DLfpA# zpDgIGxt8FxAo@Y{o^s*#*I*c^pOEDisn;XXggoC0=03gQeGKh~Sn-kxQ`ngj7Vgse zRz+h|tGH=7YZG=h8~t@+Be@I-F-L*y0AL30<@F4!CkuN6-n)mV!wQ-=OXjbyr^C6D zE6b`n{T=J|KLzFd$KCb+W#!Ga*5jR*T2MfhkTAu+uyA9|89bUOEvr2~xpV4`$@^_< z#hu@yfaecK4D%Z;B!KU94`SCD8BVx>g!$diZP5AxkI~UE)Gc$<(w@Zw^K$8Tn$eV< zd3`uM{=%u>Wg1Q~Zf{|oWVT+ja7}^y0C`4=E{ecIsygxR9E`7uHu|Jm2K@EM36~zQ zZtpt`)1~#&#vb~l_tOxW)>;;-baXn^n7?~qmVYKa4}fp8V4yGewddm(%&4~b#8_xT z=VYPL8h!x83<;Oc$$2#_fzhEt$r`C|PU5x@g1mW&Z+lgQ}=j-P+K8fBJz3nDuo`mEo z)8V?3O6-nP|DOC;qy}ixX9ALplI(w_ngOYUi9tdfN=!H86J##$@{;*H6k@h@^1Bb0 zM8OtoCh64B%$$5opI3^}ri6*L@Jg9kBqug~%17ONdlSNkg|_t@hvzL57wNExmK%m* zPVk;3(s=rpnkjYXyvK@|rFJ0zMW}2_?Ae}WR1@8pfsFY%;#rH+3|}eJ%4ZcT6fPb& z(Nu1wazl+mOs3>dFZWtoq*ev@Lz3z{Cq3J>=(vOuz6$*OjOyUC@2zuzwM9vwOepJ> z^-KQ6_)8{2G+#+@_(RN0mOUt%J86E#@l4#L_(>O?BzgsbyRf-{nROsCrJ%vTcQ z!5A@3+rS&T5$)c|6IT*hvVfsy?lYRelD}(c>yX{>^AFeYkJ$>*&}*m{Xaa0n%MBjn zJmGz6m6u34cO&%?b zk_YVd+tSmmU#rC$!W`HfIAM;yku>ygsx6wb7yz+Ma_z_TEnC+ z2ccgtB`nJWbY=j5(V~Z(hHudk7UVp3_^OvFD(UU%&&N9QQH@$dtgLxge=1|31=fC7 zYqCMn*pOXR*Hz-;iE@8nu<6>$2e_{5w)o)}9txsfyE4Ppa|gl#C&6}sDdp-+0i*75 zm}7{68y&u=XbSiex8cfmw@OE<#W3F^t*o%Hi(z?qc&0UV#w*Lkuw3|y#HN7sf!~yx zk?00@`DC3hfr^EPH0XhbktA#BihSxw>)%xTdK7Zuc=Gb)0~%ckQ!8DdLQo62|84 zBQ>VD9se|S1L>CX+1Z)7^}{7A8W~7KZuXy^Ov{K5)^sd%6b!?XMv9P%WUeOU;0j{O zqrFm9qtHY>Ek?E?5&7qw#&wvea5N0ppHKhf7a5wuS5DdTh%L%uURgId)Roz)~p{w$ZU&TaN(G*X@w&0-ag=;fpWg>Q((FRROioyOm7pgsS0{ zubdK!U3{TwDt~Uu866BV{%V^o!at|n7&In_Z3Q>oE_8D0#SM1-;#jdlA5r**$Fybq zDiB*S90eR3qGOo#NZprSwkQM=NOEdIuEYg9()G6L;LyWIdE>BVUDy6tS-mA8$9Alt z6n*O{=|Gd|x9qGrKw@F&V41c>LhTcImz33KvVdw@^Eh_e^t9n&h@>6!_@4%Hbt?!n z>m|oNqrJm1dBl8yXRTAishF_8c#4*wmp|0FZxpF|2P;x~j~Vv_UJ&175r6y69s`Un z)m&blnOUtv%Y)|x`5WlGxHP{db24~eh2$UExF+j)-IUPd1n>I9t4@rJyQYigZ zggf-o{1>jq2hRT>%1~W%y1u@?+amzma#pZTAVu>R|*c{0x z7|)`<>&%O1HcbVx_ZmgF^8X}04nIz+&8uC1Jd?i{*T4tk&fNUH^BB#Q{|mKSbs;gN zG5@C253euI2T3`UfBF!|Gy?kc;IaHe7J`ib7D#z; zE3nfItwsim{#O+9jc+(%b`Qr_F^K;WVE5t}24j^$9hfum#PXVLb_hRiBRl?f;yX=z zcYn9Tg|nlkcZ@JMmZP+^6EUi9!09hCVPA1zGH$=>=O$vM6I(|6j=~zc9cXl;?SYrq zP8c3#tui}aGKhZ&h(A8eF&R5CghpibuBr8WENB$giy9~+GT9A;mvrnfMayz_)@bjQ z>Vm#qnHy|lUJqgQ5xJ&%e<=5>Y(6^pt$}yT_PzFv5Ns@V#5_|&;}gC2>()n2p0p0c zgttD(pSGf?O)FDF$Gj8Ps(d1scO)+629Bem+k;=BhP)!2I+wcaG|#epa>i`tR4yhx z!+ZkjZKm)n_S0VrnniyI>+tzZMYp?}%nDL>L4!Bg+c|L-TJ7VKvFe++8$-0a6zX`J zE_8FuxYH_$kok&I|Gc)b+C@L!kuf-YaEwQN^OrfUPh%$KQNAw;>CVRQj*_fv%m^XV zKLoSN06Yn;MkLrqSa^x`v(pauD)F&B;>E@y1a-mMkjK`sZhE z5tyhCY)`7GJKd2hnKWQZEHU7>Hhq}SF-=2*1MCPW-c6w z+QIq|cd>GOBvSp|-*GVvnb8!4;(&@8%lz02{W>tAOaJM|t5RU+%k!EEXV0=_R}j(t zB284+1kY>C^XrLG6Q9Y*u=j`i<*B<~#xWRKy>gGowPv`a*FF6&aG2%Z9;v*dKkU?` z7F?=GbYBO?js-ncgBmjoK7&Kw8)E7@v5;K=6vHXyVlhIXT{y5NB~Y-_{*`9OX7bmM zpPv@LFF2!Mygc)I^Sx}`EzjL`_69f|HN!JEv=u>m{R!C!O*26h`(bo<2rO&8l@blq zhyf!an>>mkf!d>^unawRT+!f#e8PU7YF?XEF^&$tpxr^gUYwEARDf5yjmnXOYKY8a zxEucECCnL1$q<(pD2qAUDP!(JYo6x=9x4%SS0vdHd2f8Sm85ha@l3^Zruzbo^-QER zuc~X?N~m92(f^PnV^VAh?o8mEAkMQ!Rt_CztX~w z?RbA-)^Xc@`im~7H|ll6=sQ6{0p28ZZ*MPNG$$=gyfjR^{%e1^Acwr8a<8RK+Kqx- z{KjWEZnmO=p+>fU$4f0W&Gm9OC^~-V|3e~) zEA!u+pO+N>A(_;t`fp}WU?kOllTdnUIerA#E^>(6Z(&-={40wNsJzL&@BSs8-7-Ih zO*dKn?~!u+9!jsm{++UN3&lBpBVAn(qbaNg%KS)*6erEQB=)Oq!;hz(N>m@?v;S?} z7%@VeqV4tN5!B|H=zY>`@!4!2M;pIgeiC#^1ie z5z3Nj)Woh?KAz(Imn!oKmuzjE>hB``k@`OvTl{}mO<4u3pve2a9&ijZTsUvB$IX$f$(60{J zgbY;bpcI8?=N`9|UBp&I~VwNqbx`*YbFh4cc zCrj8&r)_?^2mb&NcU6qpyyOCYshd(lWSiD>+&9!_6_zy{KP1 z*ZfX+cwG^h!>!2rtZw0lc8QCwBkUS_H@2+a;d;zV)PBVq$>;X=uzYY%J6}a4^D(j% z2W!kmH5+UfH$mZHP;)53Tl@;*`RBOY()G0dG8qIC(0M8-Y(6a8m}`ozWD(=pVp@Sn zc`7rxp$`vk`oC*053_6>bP~GRPPy}AxGyxsk`|a*6?8ym8g@(t(sDY+goIg68Ok`f zMQid-=(Bl%z(y=DA%Ryj@9`$9Q%=>UveavJ=+6d>-1T-uWint(tvL-|H)uVVV919i zM^}hP?MsS2SJL|HdaTx%&9BI&*w}f6Z=-EU!Od}-F4mDST2$Aaqk{7io|)&`5Xl4Y zc7jHB+bv?Dw7D2=M}pCf5p|OE>fkiz&ExHJUKGn(6Wqr7vj=$-f#?|l)nxn z%M+sKp4@wt2b*mbDe#TPTBFZ?eloSY(*2xbO*@8TV53cNIMFzbgF2W&_9>_}B+}RD zla!=ByP)$lq%z*G{%4B%7m++FKu2{_g_f1`NgcUABR8$i9x0?tsVyCY*{C*>wgabH zGX}*oz#5pLzaS6OV?4tuQiyC8< z-rVW2KL#Hr4RKvr=Qj2UAywhb9^H+3A%5ow+{y?6)~Ot%5S#ah0oU0m;2JoqR=m7B z+)yV)89rClIkVJ+5*PtO$9aRO=&Bjy2=`+uVSKNQGJe7uV|>eE#=T8kZ@tVkCnBnt z*tDf(q24>`RLY5JTQ)qnN1B=`W76?kXJmG1Ptv&U9v7Z)zuTTI<%FE)a-| z#<0={!Rfz94y+H1uf;=s#W2itfL}>}!{*-X_|j4ibu)+M%-Hf)$x6Mz7T?Ia3=(JcbDJ}!8N$My9W>M?gTq{aCdii_k%lg zlHdP7HMizY-COhCt49?@AG&Mr?$x{ZUT3XOuWu>u5ZI)mo`@@JW*lD&rMB(n_g5zF zP%yg4j*jfN%iX}_uH){l>hE$|@?v7kiz-pEKF9=_1Wry)b`9rWmxX`E?tN4lS0&i_ zo*mX*qhmE8ncq?vavZ&>p8EPm>E743%Zc8MtC#oNwGw(%SJ$C&(sroGYJwgv!w%?F zu9IhxqRJb)fH#P&;^KXozvk^4Ct8#b-kiDAoAjdJP=) zc++%vrfg&4)r%f1`~ZI>3(aOp8cG9sN$`;N2>f418TC>73rTBrp3dkt3}1TCiz=F7 zF)ru7O)t)Y9_CN!Iw9)aY|4qw+=us@97c+*d@-|j9CJ~+pCxW*Y{3a5$)U8h_qy`9ol(g%bx9*z-0s7eY@h4BLHucX{|qJ^U7UZ8P_@-mm&&SqXI(X(4g#!Foh%5i^W@ z{9~_;VU6I<<>kPRZ%-oLPR_wpv@2h;An50b^4Y*t7d-GW(NxvQagrELqCu|vkEKJ* zUq2Pp;EP+x+b!}I-LXxdFdJH$xz?N_4gJ_!f?il5Lo#;vD!$OT(m`3nw6MX(*aiVb zWT8A=_TwYN-(O}PYQvXmm=LXemYds36d6U?B*qNh=Vj3KK@w`iPpYlQ^8h7}@ob9l zz_!9ibudqjpT*JjTd*YvA9oVfXpOAbq|5T5(fs1ZxAMh{ZA;wg3V96QTO3WfbMln^ z-ss2KJ-~kS7pDY0KMTzr!gPhy=ol?wR3{5vO3Gz-_%-koAP%l{Bu8O({tlmvpO~IH zClMIq3RRUiR@McdFOOP8z?DRzaeFD50_rZc`%+jU>R&o5oJRda};P>Cv5YH`>ex7M=HMH7*lE3qi2Q_TcfY z!6u9&&6?tF#cFQ3bi|@oJPQeu4qf0=L;#mJiRZo6Ar2#WQLlBuXcb+=U2{J zRvB1aJfYD#x#$?dqxgc)s?^tB`uLc7bVE&~MLCIlQI1KG@ngv4pB zH`L55FnUX?wqOAP8Pz<;l1~BzXKg!{VPeFXT{qf?AC%cW8~cmE6VGF=c5837FMo0F z?3{FNWu_>aa|+CGDxmd?+YWL&dZt?|_Ycq(MUhq8E={lPiVtSF%QsjJ%Sw=xpd$Zg{FD$t^Z*6>^;X$=u6c4``?qkm{Y^O{2G zLT30G4Q;K?^`m;aC5fjuYP}8tg0(EPJhXw*&=_<6lc7E0&vq*0Uu+Te><}W7ucTWB zqI0qB_I%AngxX7%l41la@e_p`_sQ1LeYqWhxK&sf2SGeyA~(0fah5NsoEJkBrDueo zH$AD}xPqI9fbO@u@vsZ&;}3T-_>K8JJe~{m%rofK7u|Zgl9uVos{~p<>P>JP;mJV0 zuwL|6Px9_>FODvpru-`!S}GFp#Yv1V;oFUMicTNfqIlOFJiNLJ9&*Xb{Cn8U*DK}- z(*yGQ<*5@NJeIFUq^Ee#3G%6}%NP~eK0`#iPg9gi= zyVP6BJpD0Fe5TpOMQyP(<}P_D5_)VtU~Je3Inm_OlIlw08;X-hCMi;tNQ{0swFVBJ zfx@hZTZ=QYXqfDMD_`I^zt0$N)8*6-$XnLI#zUZYZb-Ph?-Vc#mt~HD-lMRVRdG-A zBV~4Ih^us(Xy(I}EGLQrr&Ar7xcHr5AMTCjjzmO9$Hu$%fmCB?Npo~rW5rAfw$WUg zB0n92Ac}D;h5-)g;9)39jzjt=wcjy zAt)c)08f+ZyvQwWkBulkdC&!L8JwR3A=n@?^*cz$xx|4vvI0cFm6$68#>rsnjL4Iux` zX4xU0kJ}tMIyAu|v$92MSRYWlf!xc0fPQW~L9QUiUFy&%yWH5neeD8dUlF2!ZE?0j zma{;8=wJ_3BMy4-(5f^2GD*gN>VY@WUuE@dZgsu~d|~xSvphOxQLZaakx5V848|(8 z2+MZ+z`gb`)V&zCk|5H8^h1tQ0;FQsdtGU!0+|^B(Xs9?G&gB3)Xe+JnE}=P=H&89 zO(fEUWh>5eYfYDNTWMPCXwWz@lc{QU?;!3#os(C#lc@9!13}V|qGX2xycvh5*Rv>Y zIrd9*l5upKrNngZV>-y^13Ap}?50HqFbzt&Z1&X2%=1W70J${UdDfN3TO^7yD9y>x z;t9VQ#vlQ2w2ncBuV-hu`E9`s4J8QFqf_v$&3*sFumX0itKy6F5UT@B~s_A8{zAWWl z@)lS`$T{Dv8EYLUsK%P9q$ueHF-t?fo30S%g#`Aa+y(%A&(oJXoAF*Nn9J{v07=iL zp`9=0y02M3_~x^bG^xplZb{#L0Q^?HI_X4Ym}dIq;ex%w3tqVlx73gFrx0Tgsvu;fEl zDJ{%GbCb)Mra@$WX!l5ar8aAuopbi5LK_IWX8T2gn5Vn!3B`!rIkQ^?C=EstVQpDc znRETlSR9+$k_AZr@X@TKa=#ltTOJ$da%$%yx40PE)|6$UrNxicYQqH(P8n6Kh4W!{ zUG=ynzkGPS8;nwvOJ{8qWpYJPd;!L2kCWUsj~Mpl%q>*Eb47Rord&!s!WRu$y<8PR z^Jhpirr)CEdr%$ay?5a&3@_nFs6T&AZG_D|44D`m83KmKEfQa!M^)!$}@qA<*tI9S`qU zq*oF`!x)QcR-K?iCRr2Le~qa$trT+%;BV7`Dp^Nd^o&m~a`=o%5=$9cvrtcZ5;q__ z8FTFp(t_3$@Q6DZQC~GQHl27qc?avRbL-Gq#M42k9zmw)N<-G>iL29S?KoaK{0Mm# zP2(wH9@o;CXClo1%@*6EAeqvvX}Qp|s?dZg~m?F}WZ&76egFKlgR0l0e;W zd)tcIQp>G@*X4Vf(L^ri0+i-UWMNg5>4;&yUZRdnyY0{L{jaQLQ^T`@TAR-s z=AAjlTN1~4dyC3-U`5}4F;0nle(Xq~y^niWpXe+&KU3~btu>kv`wtlwvxj&&S!h2`Z z8afp<{n=>zyP6R4K$-mm$wE!H_bOLdTeD)(I-k?wrh zEfYL5F+fL)$xwnfsai25Xe|ZmRWa78@K$#Xljf9{Q3i+%f>laPcb#^6nRD7SqJwEw)rIcpsW@> z9ckIJO#L>Z$MAV@>4`6c5~&z+Uh^(F*j|l8(f4!-z~5jyX!y-_Bz zb>irOUq&1?M`my)?~Oex`T{~(=c^UK7goRl6cGKsevXZU^T>)Dg&HRML-dQ+&6N0` z*rfBxyf^qSH5`~SY^5=5bir>^2q9eZQNVeEZ3Lc&y=c||p+uDkt}WC0TySAU#?-NR zd6&A}MKx($8PNMW*()wkfe<+?hD`DTbGW$JpUYSb{l%Bdg6dwO39+W_iy^npF!nTP123;TE5ms28se> zOWG(fRy>o6b>Xff@_F{X8mU!H5&IaGy~a>Ik5M3~Q$~m4?;*l;-(}9;9(&JE&zStm zSoG!C!EnpqLfrH%a4CmBJb5EMhs2g3%^dPSu?(aSclw2NW$?Z=@9#}2M_Ikj8Juo` z&uZNJgTk}zGN351$$toFC-c3|`YkbUDX_$R`~YSh6l-SHU)#t0oU0_sZkYOrNZYVG z;mt#bsnzWoKi2q+s0CST3=*|vlYc3{S|WszW!FNj)9|9d;cYy)d)=on8#6fhk{v{* zMawcilx>OU-OwPj%HdclxcyX)Ouirbb*>J3C#lc|`6C$TQnyo@8!t17Ob_G1rU$KyE2yn#07jDoF?OjAIO1Nl zpTSX&ar~eNiP{`T!N1a8DA&aQMFjqTiBkW+7uNrO+Ne{6rsghY;}lI8w_acAf?TaT|Bn1V9PO6QHDjkURE4Du$&XwE0 zQeE`#MQArYQ0%WLwJRH=qoXUl7B2~KEn^`{w=;NbMu!>&!GUZmOe+-eQ*<@Yz?F(E zxe|hEHTxODs&g|jnaaB$4W;wa&TFY^XDw{8;VWigIgBlS)vno|qjvTIMHJ0NkBMW= zv|Gz@|1n;8wNs`i>iL6!|2twOPfmllSlOSnMK5a2=8;UStET%Scc%qXHure5$|k^- zvw9De|3;RhXRr&F=7^+B6WbgfQDI-Le6#C0*lTV~ z?C+O0`-pw|4o0WDn!_-7Ss*3a^hUw3(3b3WRxgcBmxBmpR?gX-{e{u%6>gzQZz~f8 zZ5|IS|C2Ri=kGK)3;IxUtN55>?`N}Hk1$SncYU(jB;Uv20lVz$yu$K+0BWV4dsHAa zZWCJrff}dlIb2U#|K_bKHIk~`IF{%P6flct90*S|+NKxxgAC(avY@)OZ-((dC1o-Ej^-rWZVA^|x=XD%wg z`&llVhxJX=oK-!so{<52j;zmW;FTP9WUPa?LSQ891IU!CI{h*5(hsFQgFFYiCMXg^ zbO*n82Dq+%p!sdQ`wTn6_b6N{&?ECXq>w-p=69BYp`@l+eyr>rH%wH)zkerb8G)ms zU5e`AG~Y3ETN*3v5r|Iwgu6dqej7R!^PaN{Q^oos@S+zQbNvIcvp;r&u$RgBPR+_a zI1UTfu0a{g>Tl4fuuI+`n3jd7>4yBb4U#keP{kaNK@KK2CeA>B@O5j8E z2M6Cvlu(+O>gU)G=-BDF7|+^p&~j{3ZpUC$U{dtOxOiNO4gz5OdUofp-EBE#mjYQq zKcU;nAin)cOMa)C^45jiXtod3Clx*(wvB1qw^Ije8UaPN@V5GI@xaR8Tu%9vKGv7zmPOFoW4D$KMmmP z!7>Awq-1Zp%-<9(EfXlwt7_XsgjVI`OeGj2%H~$EQq3WwVF$^uWc!u3;hQA->*l`ed&wWl3g+ClE zyP~1vmO>JY6aro4xYN(5t}3V51C3?j_9z9Wb#6nQJ-DBV)>6uemC_#Dh+gBGT!p>So^hi{4# zB|nV&rf>85PeMJZ0aD&{ng?!sMzi)8)`QTKQdUY*?dTy%(C5qIn$zP&Vt+aOojg(M^d5 zveltoEAp=fNeaN!bbsXnmB7#`pyd*NdMt1wfevLH9KnDtwabREO5jTy)7e<>b~OH- z_0ls*r(=-}#Du(=X%@iz8M_?->K%-OLzFGR)kR0DA%J0L!(<)mGh@V5XY6ocY# zTcUHvg|4KL{3V)V>kOamjoLZia;Mjzh&R`*QC&ncZI4H;qSu5#pR213i5_JnpwsDW`8|2Z^F>!>XQ@`Tcxl+Vk~oFJHMpOA&kA%IG- zQ~Wct0T21y0B6Pd6W3kDUnD|(`TzLEVyvZFD;F6Xe_kPy%8TW;^3f*+IfNvKWBhVS z%j>d>F^A$dy)@o*S=0t7WahR%@zv%N9AY3-;%rby4goPbt{791LkrPT^eWsZ+~}MI zJju+3yD_DA95r-e=G%go+9u}+E_kW+UV6uk#{6ki(`tAcr|px61VKYH!tXg75J52{N&Mlk^K}nBCbjn`*hb|B{u-QjPJn$Uo2rEz_UM zs#|s`mJ5{tld&{NGE~qEwC;JqM~ev$s=#*W#C_hhgLFjv$9IGwPD+vIe+=TeXpQGN zZwkC$_e5@4drKYBv_t)b6#6*d*d7e(8`S*2U2MQd@28_;uNUAzK|#UgdCLWTNjao| z`YQvz?T@lcv_Y>2T_fvN7c7{bj(Ko4(;laj_G&lf@0GoR=z?+9ojp3ZaVDD4?A62YGv zr>pYPoqhggdRK?85E&pzte1h$W<4B7-Y2wdRjZ^IQ`U=-(_8<#*R#pYnM1enybqV( z-gprZ-c!{Cg2a8d0}>DjJx{^pcU!6}nv&Tz+VE_U@|YqIZhgvE$|zrBBRWPl2DVyT zw#Z*@&lVmbs-FiZ?AD%juI~AI?x)<=SUieFa$k1g(GT7UsHQjm)mh5`Bw}no#uzT5+3y;aC7SC%thC>sM{Vsqj0@dFyWlV747^_@)~*_M3~2O;%JN zH+Z`{GJcF{DfxB5A}gKjl=`#t!mN(@`#vLDq9dX|)D8q*tz8IClJJ27W}q|e{qj8B zo;j3wFF*OrU3E`m^*q%EW)|4v7mLw={zV9xBDw=|L}+G1`VIF%#F)(%S%ma(i^KHU zfQz=VLTF1QZR3T-BR@8MLAP-G(7qBex=OmeNAmAl{-ZDdd3xUJnTN2oC1gRlA@-B6 z`W6qe&B1vR+Nt}40a$zXZzyi92MufT;(LPqu}lp7WgO3mv?4!~poETmi~GP+F5Rx4 z;_rLqOD-wdtG`Sitig5`lm8+6V2Cl#qhn)Z<@2W~K_DGyDi9~~?j1|#&}g(-%YbY0 zdSu>sUcXmJ=;Kxq({w$~Gj(zcnn)Oca-zawO0;P2__CkDZVJ?CS$t(|NvE{_ zx#2(huIJwR{w*PmCHMagF-Pgq<|AZG%NfR)D)X|(;JY;=FOW$1ZxrtNW=0+d8(SYV z`@vJ2c7as0?^k<3HgSJ{y$=)p@^8|ORtRLV`wic05PIk^!FNwvLc1nRlfQ7HQEP$- zLgonhv*l6$@`Run?=uLcyV@H8?HUUxW;w$ACG66o<01CXEq?#7yOR2MAO)fPmk{88 zKBZI0eg-w*r2|Si_lSb)C{gbleN7XE0saP2*FWa5MyMEkKXtGJ=ZJBm6O?^QqWu{x zr0ah1YP^xE&Gkmy%o1!5#jjUcnYzpKOS<2F6D-Wl%Lor4ob)K6WH^wS*hN(HJf`%m zL2?eWiP*QzX>I**Q3r>#b#}vCmq5)kD}6Ax{*KBMl&j02=9#Q=;!Cb)^uiGQ8oulp za&<*=W0u{9;41>T7dkFuTl?`jrHW+EGw$jtzV_TV>D=DPZ$4g}lEF7^7;CL*jX~-0 zR5^jjVFqUsQ{^h}6pQ>+{9t}z1P=d6g>>kI^z%#A(0mo z@2obU3$M#L)`w!XsQBYCVi}bzsyje<8X*iT%%_jXa;{%Eyk_S6N}fMADrBCSAZyuJ zHK3Wy^B0wiwT$6YZbi)Uljc($naa|e>al!dO+wktqqPNH@x;CNEypf=cX@s@4V7b|gcMCl_SJSg!752jbfJoE`~!XB&N$uN}LGQ+f(D zL!z&MVly4VF96EtVA$uW-*wlk<~h+h2A_YG{5-8Q0!7^;gNYvFSg1x$Hq}SW(;zH| z8gDmkuJRqxYsl6Fb85j|U%!fh=~zJZwYbD(l~2EHUyEMf*DTq9k-xN+WgnMatJf+W znH_y;dpJ0?BablSMXg9?Ik#wj67wU~hU8fS*ke?jCm-tVeO_G`o75QHBKUCcd_uXDPGsJ8e6h~d}q>V56_l~A*)j*8o)5Y;l$-PM+kqhoDr$p(eB1_V5Bjx>^_qA|6sA4Tp2>`ce|P>E$RBU#MU5Z;?aUq`QZy&^T6>8&1TyN}C2 z+H}3@P~ituONl1{Nqz$+g_&}t1FZ!-hRX9Y=}>mxWCm$Bzy zBgF(EQR7nbD62i0B7T6_01ihKs3#d!S_{s38$Zm$&NG_=ThUPG#IVanM$4jOE9_)8 ziIqN-z7EdOvbT>r205Ye=iJRA0H)u$C6RQg4ZT(JOsoU;n1`GqvW8d&nPCXUi3*c~ zQ|knasAqU=|2v*ICEVuZ(UoXC(78<@ZW0s7)q8EdoL~Dy_Hy?pAMKF)gd)o?!S)q4 zIA8txuDV0t??9_{H;LQaMQ!?1WMBBWQ9yOL<$&(hSu@Unr`xg*vA2?z9G@;0Ht)=_ zIkN0}%sB(=T0^GoxWh~8k&2iQ$tDn`p-F-RZ}(L02SaBbue$XJoryPU-CV|QWJ@%o zs+4rC!Yd;FuZ|z?-o&0R)&rF;%GXwGLZ4@ez6%m`Ff+e3O8E}TYe{3VtFfO{pvB-S zc6XtyotvWmK@K2Ucl z5S>|r)K4(t3}B{o^%*TNsUY0d12)zV9*%*R)2q4!I(smdfm^fx}B>hT5kris}s!XI$oh zEA9YgODT~(X{Xy%Dq5QSPUFrQ71;xY1pR6vc`dvyR;=`SEwuTV_1Y#aUiF%Y#oAxk z#p4s^t`O>(yG`YOiL3ZnA^u3zYqAIhdkRXbLDrojvU@{EGk2&7#a-n<_9?5^1WI~n z?ql;KRVvD*uadbD?Gd-LP62bQ0q5)f6IeHeAw|L?5O3G*Ar1@ud}L!gkf0^18v?7RMIx&k9FQl>jPN?! zGLbiiDz3;TQ?en_G9jv{h*YG&0m`Z?XhWj!a~@ul6&qOD?0N0@dbG+U*mdO12z5Yr z5JzmExfg`Al-k^UXlvcI$=!&PUCPoy=iJ&pvhZNtUYU|@Q4`;~`@$?^uw0g|U>X(k z`%HQtH*~#O3b*A6G!uTW9YJaNoC7AJR?0aqk=^xm>TV4CNd(|c0ra?co^oLdqVYsi zWdph$mQ>~Pq{$6|S_g$60dLruB4K*jM$tPmXXcyghFHzFkm$DKIV(H)9UJm?^Qmgo zU3NrRE1q^3HWU;+K~)vezo6$zKSRW99eH#}s4e6v_;WUa(~B7MHA)^MdU-Qw zpJ`lQG&MAf;FmQof8joSSBvf87tqh~{K#B;I$0?)piLAP@!{8Ett$k{a76@3v5@;s&)3`-WvIOzx?qx`q63mux(~^nEudu|C@4x zQ~5Fd&W|qFP{-a_M}&()N#hZwAK9%OWG%e=;^d0HhKAmj%La10!YI4oXw{wyaz8gh zyWcs{@M&Tm&2%#cLWH`07c1OS$n)Sae2oQUX8yJmVwrqWp-U|^wvvI+x^Qo9=`N}5 z{gnRQzRCMtZXUOD^CV|JTXHEW$}jlZnqN!>!zr8WEi-<{IIj0OaZ!ClU*6oOT)_LR zsZCeqYB530kIj;VJy0yJ2afPPh)SG0{68R*;;zFpJBB%-LC(;e zJdS6A=x;BK8bg4`LzWomME@xTmH)|` zQWLPW^J`2zUOVENzD3hl?}Li&fJE?-)%5$2Q}E0 z5~jM%v*WvESQvvQu*in?u=V=&yTO9y4(oLMk^1*DEd9EEZn_wu<7-3%1;}3@{FcS# z(K9OR0Ljd*ymI7|j$+UxuR&nl0NW~sA7i(3#zt~k<7f=ZScubZr{;1K3K)n4a-OHk ziUc{*5wdz;aGy;O1hKMd)>OX9%>+%5--haMQ?>Mk1!A@mB2VcqDpdPdk`t-5Q5&cN z_+^P_`8U?tV&wUzsDNm*W>)#HQ3=T$a_Wns5|HTz^j+Ug9it&!wa~t0k%OGfjEZvS z{v;rWD%0;npXNXkQZ9<#0D7TA^C^I@iZ6$vOhFZH3}#>#n8m4)*Uh)NjWHN-je5OBp{L0yEX;xO67q;jWP|;_pXoUxGj773V37r-~_oUrQ6DF{HdEj)2 z%+90^S)3JN8%}U%!97ISft{qiC5LlK_THB0v>`b2K-?~dg?$dA+|;i-<`y(&UYSvF~PgvRAPnUUkOksp0^w zKswGks?bLTTz8|3RJ9a2U|+R`SVtu&z?hY;WV@HP6EqItG<;ATb@h`fqa*`Q&-uvE z5jOZ?DP?U{)+PD!)sSPzCJvFdKxy|j#lWxDRN%mI{otDG;F|y7luMK;m*%0}J9=Q} zd}#>r*nZdHY*T9aS`heyqH6)fhm$Op*G-T1t66q3V;qF>CCn|Ryp(TLxX-WA{#pzr zCdm$-iSJrs)c3uA=qt6QeT`Y@Iyqvxsr`lbc^vWNT{jTp6Ao?QGQ*e&gi|&RWBgCB zGZ)VZ1j1rhaZ~n9@Qk%$62JrPH;3Ib)}MV2 zFp?S9Pr(Dz`@NwVjf`&6So~pK#Q?cAsMviB6!JZ)^#M^Q9sP{#F-Dh!b;6%6MI-_* z{ERwxKK493w!Vmx%W*VSMB#Iq-(|HO&vCx^%9vZ)40sM#WAu-03YZ84U-uH<%~}~Q zRNgNNJQj2M^BlaVQLxZ8G3i^c4lINKyxM?*f?AB)`$2J2VEav+ok!Lb?T?vq6e;;1 zpxD+QPZv)&3D_EHoUO@#ELYF0S#KxFU11gLE4llxHGZCPJAiYaD2x?eZ;$W+Jl=3U zpAWS&QC-%?8~#;8hZwCQS~O7f7gFqc)n`VWy)~cDrkAXY`fC}02}|R-A$(RVO%b<5 zkq3JeEUDc5;o&+&m;PI%iaYQD8!R@bN8&CmdIC-!&k0L*iMQ-M{yq(DEv`z;oi5C^ zh=(|{9?dQofwOOTmESv=99p)qy z;EmVAM9yY%xDoy?ceAYDSc<`iM2slZ4A%TC9fkPs6RlX8{BZwmF!zS)M!&^h*4h!vBomxPHF zUHVWNQ3;7{ggpJMuC%@zZx?D}xA>7LG&0XRXnBaI3XYnoitwJEa8LOyT zpTut>s;?*3XKb#R`?A^CG_1Z+CB-NK5+}hlOQdR(~Tzo{H`X9YGPi1)M}5 z#-VKay`i}BJsmN`FLSW27>=u{Jfr4)r>($3B6GOaa~r^Z=k=IHk(IO0v1e7jDB@q( zam(n(6?kNrzo>dk{q>t4St2Ps{^|qto#~5Hr_h{F3O7>cHqLm3U(j%cK@7cYRs9O1VM9RL&`gfT2OwKxr>g?NNzx{K*!MQr$V!e)I z%g$FRft4BFJ3{8XJHXl8Mm1t}LDBauQarVCQ!61~PdySb5nmo-y=QEFy=~sz%&Plu zdH%~=Bf*fYt?ELL5$hAQ_D~nzsYA6?DNaG*m5X0Be!wjb+|W|IW$C{fz$iZMaH;=} z&4bY42?L@VkqdRqKwQ)#>(Xr{}|(EnT^HeZ~g5HR@z zae?ilh8rQwcaQBp2QM2}yI`+tz8wn8OAM7EojbRFw~;4HF>lS2ZcCg4F^CQ?;HMP0 zoYR|KL%V*j6N1lJpK!bk&d$z~c?pr}li`y`zKV-OAB<;`P*9joVs2YCOrHil>~{&PT;Wz}@x?1W_PTo~8*y>~HMPnpGO`F88B?oNdqFCx z4DX)1;R*{X*E4s_5H<;cENb&XOd1tuhawiZX+?%|)y716E$O4v6q@OY%W1&I?7Yt4 zev@ScDJHthlSA|AZ=oSn6<@V4-57tx$v(jb$NiNF{RA8K|L=wYBU~wui@#pgD?BLP zJ<%7jF(LR>6vdROc6*2@K9gOAPW(?rCL7I#4AEJFmQI1Hr=NB+$S^F(UD$W8txfhv zN)%XcjhVi>x5V%FkEv3me-7U*avmdj>$4OfU%i3omQ@V$mPdo}tFE^D^2Jv$g()1g zM|I>+xuV$gdA67*2CtLPtJv<>A4k!@M!fpYIsCf~$=*Wg7X>JRsKu0(%L zsU|FM`bR$QQ|wR5us?OY{?iTYN>@no4Zb+12=JD*q37q0sef$$2<`eB_v6!%6(#o9 z5VAZ^C1AcByRX7P&Fh_zrWiBXZ{X~Ci7803`)|WS_L(-OxI;zRF~mL7lGbaA;WT%O zPe6@vys^>LXA&P~vym{;^}5`@)wrNWoPVPNCEh5-@N(aF+IZW>T<5laU9-B8 z*WA6C)zs+UBs`}YoOgc07&)Yb?vs8O9uFY8mheD`^;??<3I3fM!(U3Qi~1xI#Pq>z z76EO=Q{NRyzX`}g>C1HmUar$8*@F`5vLX?m z=@i;)=v+xcQoGn|Cu>nxMaHZR(+cfl<}M3-G8{9aYs!AP!KTmP9og@w*AI^{HJ@5z z{Epwz%t0va37<$ra1ihK(|!S4ik5Dc&=Jh;#f+u?V7lbVoH`$o{_RBr?e=VI*T@vO zEXwxbuZEYHae`1NTC&>d^qw(e~@(rfAE1f z2>;O1g62oXa$&eJnuW?u8*2gicl;1H(MyWn4zcf(B5eU*KDFvCT`v|uvcwPJVh$}V zK5G~LVEu3~e)-@j8`gz8)Y5<;>!b1^JPvmpW=Z>XBQW zU*BH3e5gTHtz-226Fyz;;ne?Q85Hg0mDD?x%z(K63Ho>Hkf$CaJeSuZ7M!1U>G zUndVt8iD+G}Z|j*#LViDUZ@rj(X@Zrh4PF<*a>?5;l6s04-s$7;J!#2GoW@V=aY!wAt>dcmLKmB7NPb`IcFmYSt|QG^78V;%Z$bSD2g0osLuUTk<&4!TmGsYoWB03+L}$n}fcAi*NsP7VH3c z%s-%`W@QiAZahZLsNyBJ7l(O`dL5d-ptm{C=WQ=Y^EkMTj0_x3Zcx7L0=8$*+J0fMrH`4=3EUAov5%ga zozJ>^TlqFIapfa+_PJ7Yr#X0+Zk6@H9=61l?$P}*P}3H4jlTh){=R_93a*dhh3)a^ zUAgb85$;>w3-m)Z#c_JIJu}Lm^S);ej2X4J1CA~`aZF9Kk7S*{>1Xt5eT(?!+m-7P{gY`p*1u}~9{#Z9YD)NQtTQXRvMl)N+hEe^)KGAsg zh$UwRcEqdgf%^t{YGc&qZ2(Z+FPa6~y>uI03;%NPtkG|*FY*F9{qr ziYB`0z8uP80bz1?Ue%$-o*jFPmy3}+4|A`jVEFH5$bEC`M%}5!&rWC6a7gg1Hf2R02w!&S6 zi#8#GQ+4Ix<1<7s(haS_X)0*KD3HCupFp{vJ! z`2nSFf;0lX3$5Pp)M=^u$OtE&C6}?h@oib{5LWq&6}8UzinFX=tj0uQ4J8K%tSe5y zO!hdzN|&9Q{!$bb)@A=cO1koRsJ=IBm%S*akR?pYzH3N{kgX_8$Y3)1CS)uljV0?? z8cVipzfvSin6mGTZ43!n2F2L2%~;3S<~Qp8bw2mrbMJfa=f3ZG&hy;Qd3@PFn%WNi zUh6w7smW-V;b~mX!NWj$mprX_pUVh+%X)DkZQ%NptT0yVPQ46T{j`Ce;Oy`1l09a|H<9}<|moM9gbkBZcFdKmb^ z{wkFZ?Lu8+JHAWRPVm%p%JbP+KXy|QYYgX6eLr4FV^Ku<3Ql&(z96#LyAa38eQ3Mu zKW+`yH4aaN`tt=@sAHgCvS0;LiFrX>x58irXmQ!!W(S7X55L@M*f5v!I>w>L$YlA3 zW(pwHNHjFMofoKxbOGuqCd^k0BLXNh!JZWDE>Z}E)$40U;FeS8z2v2L?o+_w3CTO_fnk z9?bXJfPpp@8#3z3F4rO)M6gTD>+h9gCfSI+ALPiM?3!HmGRaek{aiQ{*!R6NW&Yp~ z;L~+x?0|n_Ep4h}BZLu)5%(q$TcRco=Z)lhd?PE>)i3o;BQi}p zlB=c$sf?R0yVSgQ?x&nn_n)<5aQU)zOXQ9(GXaM)vAf#_$5@SlZF+k}Z^zz=%}o8? zQu#5=_7sB!?FmP5wdP&B%2;(=oD$Ne|A)B|a$eLmC{SDHzFAKjSZ&P#U%$iatzL;3 zR9Uv#41A2gAn2Cowlk~09G|J90Tk$l-VD}I4&~6y`c+1(NS@cx1SaGZr(2OiF?nUP z)YPn=M|N#jr6ZemKCwDvU!Q7Os8q3l4LG-ceFM==`HYQ2)GNH6eem=$I0L^s5(nP- z19m#PgWR$2&#t*hG#X>#mGczKc{~AvTNlWtRibnOW813+ zD*OVOU@a7D%SyeafBNx4^N|26rVCC%qPV5Ad#qLVC;8tbfnI$Zm`hZZ3HzXY%b0z2 zO}BbTCruBfO>tA&LWw0?0Cx(R*bPLZ(HjcniGjjIRW~&_CkDYXc36!uD6oV)OADh^ zuK~TXQqEgEMN4++ay6R^Pnbc9*uDW-2 zpecn;gd!w3KR1`VoP?b5>7hF{&;^NoeE zZpo;q266KpZbw6Zn5@aNcSx7}+`iD9i3FLTs*_UzylbAM-ymZoTdWiDwW@>o+fmNS z9snHFe8r3boim}DbEH|5an=Xps$5`x37G$s;n|119F^Q&+}sz^#Y?r`=eT4ZCnoQl zetO5PwLjpAFXJ;v_Jg+flOjG`Tqssf({v?y7(d1*rS(OXCI6YM4b|8?KNHhcqawa4 zLp$}eO7REI!hpi`aw#uYKHc3t`P;P~lORp_gjelj(_9y; z+YYqnK5CWgfJ2WFE13iniN$x)Z~9a!;f_32`=TP3GHufo#4kz56{e*n=CH|^*#+-9 zoOv3%2}nt9$ynuXi3*=VE{mG0{f2bS&rVtXtET}8)vDU=V>2=uiutf)*(jEl3AX8b z25OzSbHqOp1Wz8oaA9E}ZFI);qFE@8S^LSx)K*6apoRIhwS^M5M8!dhck+8k+|bYw zEu&1`FNnQRfse&TjwywJHT61-Y!9}E?H&7{>5nHwZ(qqDy)mlULc@Nh(T!D);sd^C zrs_rY?YFC)#;anCD4hCNXxG+Q-~pP-#Z4TiV69)pHdh_Vezx)Z9XuB^GbX>eObxBV zuC<(|E6o7OBbOm!n=;UV$Jy6bWY!b*$E5{%R!B*@6ozzkTzRUrxsx7U^JT(I32<&O zXL#E-57+f20c={uKD<^_I;GgkJ-om)dEAa9B?@*a|2LVKmGphv~TSPr>xc zs0~UQuUTAQ%Cm3(z6akw5@$F5Lsho6UNSK&Yj8@x?)bka|FO7g1b-8k5G<+Ea9Gc+ zHNPQzdmT@9%!k*y)7=n#)yQDkz`)~FlgQFw5nKn=lW;7d|6DZF0QS|(yyvOp>(j8#@*yZXCqYaE8w5iNha8f*O=0_d zYxXl$Vw)R%EDk`+jUJ#8xbh$b0hs`h{#TkOf6hb4Ef#euKAQ9kxe&)0z56)i=)Hx^2K)Dc9&vYBxs6F<`;f~|vfE~t7P*z!a_0ij| zWn4$zlDl^`t6Al@oBG*aHyL}L(nLSvIXktb?_W=y7frMmE&_>~+i(v%-n{&tXcfA~ zxU%Su(bpF#SkiK@7(DV|G}84-)!ek?yZPj?C{_At_kfAS!Yc1(?!!^*PZb0D3c@GA zoElu$Nys#V&bhVsTltIlG4T4AC}7PsQtHH}R1mjN-Io#7oAB45cSNYJ;u;CM*>NV` z0?oeKaGXTh{rE+1KU-7huF_*DC7}N44CB%qxniNEO?MizhC*%F^<7-n)9My%nGT-c zL7R!R-Muz`Xd;lbKu6PJ(BKCGJQ_<{wP@;ru1*@|l7^XD`D4oB@Pxwd%klA!N!oF? z-cNN`6Hz?#_${X1Chsz8?8TKAj5U7oSYb3DdT8dl(PL^wXz^9YQ-la z!$ztA?nco^jDS*d2Eekb_V#f(o+IkFJ+NG}wvPnrLo)%~ypD-^e33m@5YYeh|fX*=y zz>UPq421zDZW!SO3q09o7#Z(c6*loeEz>%oM$@Zc+D($}DoIe$dH!wPx>mKL!Ub6{ zlvv=q!z&U>q)!g2>w9uRsO?n;2=J-D$j;8Vw8wPdh5RqWZ)P|;YWgdmeA9IFspYUD zeJ4&W6g#ceJt!d{9|l2A#@bX^2-tR=z6&wrhtuoG;uGT{7ftY**^*{~hD z5iOCu?$E`In8-K){VG+gsJ^QXI%oX2{S7+9>4=qN8^YLPS&%>sb3WrcCjPsmZrrSZ zF|Cw8Pg<9iODPSEateWpk9Vs`24iwW~fJwW`f65IXktR>R|T}lndPW4Pg z+jkTEGvxCS(QB$Q1u1$338SX{w^mDa;9inR5nFas!MO^*2KtSV&y~4au!t5iWW=CQv<1{Aw&dc$ybAeqXmCy5U(gB1DrrVKX=vAhZXS ziAsPCeZ84Gh$B?wjI&d)T^0xh>>=7F7ViGwdG{61vNHLru8}Rg1+Hfy*Nn#VAwk(1vu| zSRY1q8S$|cWWwO!k;B;-iGV@hE4E*tp3`^4GlNuJsU8O^Kh2PFOONIanK@(xKFn1% zlt)Py=K%)-#%HG^za)Z0ywR=QZfSCt7jw+555NMXk>qT{;>?kn7-_D$by)9*xt!Vz z?`^q4Cr6}0BE^h#S9sYQ1Y6PF8kY zpVap8@zKB1?F=$C749hDrh#?&7_KI7iA;v zyFU%DO`d+T3bKqYJ)hnhf#qlR{XP?642QZu@T>M|!rp@R$)^_?If?GV9lU*AP$;a+ zhJ9ImIIpXe?R^2lJq?nl>t;T9k`n^zjz}%ETgg*n?I=AL1j?9=asX4c%JbmPu?fH* zr?f({nzPS1hDY44CC_`HBXrjw1PD|uviF_2rs*`vhDX? zQH}npug){!*TWTAyRWYt~ zA)jt77={ZA2RJ1QmQ06>{4IXbR`&L|a_9D#`1lT}inB^4+oJ9n2Ic4NC@KgowtCU~ zTfi&rT>ArIZuYEcqlf@90o@&X(?crBcB@UDc-m9c-){x*iR4kex6 z&9++qL!(>~%{jBZ{4r(0ehI0tJ#xnXRz{rGW@irz-ntxGaIzFr#JlY2lf~ni^PbtC z-)3%*PZ`HIJpcT1N!_sYQZ?E5CB~SIw<=u#gjHG{- zt#lpWtUSFzR}Ac6FrZ9|thnt`6aOG6Y_F9sICSK{2g4`98hE;#2y7}U$uTjfPA&tF z3cY&LjeZDHVW$OO;D!z4e#Bs`2mjLhwJ2YIf1lk|@QD)z*5yx%K}4WVuBnjXqYo=+ z!dfRi4K@(vgf)5^(DUJ}$-fBbOLt4EsPM;OU$sJ7+|^u^07?MvlRGew_@osa>rPY) z`kqjVV4=NdZDgE~qR*cnAJ?z)@0UiLypwKB)Tv}cIfWcruJ^#cF5|GBO;CJ-rj`*P$OvM*J>BO&mm+4)^KW~f9(O(*CQe;H(M?!kS`Tx1) jki=+L`5RME(?iF4l?#wvymE^v1AQ|wv@j^shrIefVgO=7 literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png b/doc/pl/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png new file mode 100644 index 0000000000000000000000000000000000000000..22e4cb5d526d9090d075333fc4f8866bfb2781fe GIT binary patch literal 255688 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%0DTyE&-~vGvPa-PbBdjX` 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

    nR~lyi_#(V62-6A|>8DDQv>@0HS}z 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 E0q)qaI{*Lx literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png b/doc/pl/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png new file mode 100644 index 0000000000000000000000000000000000000000..e6b4a997432e606396a1ea7140d14b212a207026 GIT binary patch literal 264916 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 z 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 literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png b/doc/pl/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png new file mode 100644 index 0000000000000000000000000000000000000000..8de042ae4656ecb8c754df0600b6e921d9df0ece GIT binary patch literal 68194 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

    o|#QoS`?F-ZJmK z$-3a6F~m2a)6Ik}T!E8JM)liLA4uy06u{!7YNCVj*apVRT#8%SW5u;Jc8&G-8MqlQ zA$>3vT~!87Wex|NROWg#(m2*yJN)*2K(|uK{ScvEQ7c;)0SO~CNuj5RHy40L@FGfx zm)GZ*wZe)fzn=G4xF*)QxCa5X!j<`ojBXMLSq+V7F;}w$Jpzl>N3X}2>s`Q}9Y~b5 zs4x5TX1;qT0mJiqJZjlTuTc|N^iU~b3gAj5>-YfTJcYP?#I9ana591ei)x;(gNOLT zPdsGV7@EirD{^mW;T>dW0qk#JcCNLjk;@l1hB3!gO%BW5>GAuXwzU^=qGIa!|3=n- z1z2+7m;B#8&q?1^NmH`vcOwCmpWC5NtGnyy^2}Ew7X3*oi}%`WSqHD7+c+5TcXQlg zK46^vudke3oJ3FZsgPW-$acw@Lm^HZ0t4i}uZiACEFyGF76&|Gi#>`dgN2}1NHswp zz^(V~R#?vGH%Y`PmSWVI`Y$=Vf+uy(2E_30I)pMQ>e2BO#rNB@LJxb3lUK&iCj_;G z`|jfxY`M!(iG~Pu+^9o{gc*!NeiVo|?X3?84A6Zas|Oe|i{lBK6mtu~8eib6i{04U zFzrl56C-bY@|k@|9V%sT@tuy*ZA4rzA+}kPluXwMQ*}28FkJIgem)xtuv6h#RtGo9 zX08DcB+BQvWBAs8&K^;Gj|6QE+h?xb`9%X|Vc8+

    u!Ekk76y*(YG=a0>xrW{{nO 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%0DuKdmH$g$sk4zq8I$MZ^h4V zDB+kztWZ9?y;}(Idn#JeRrhlr$ZB7r0>FcXPUbB7>_83at3u=UN;Tj7BXW)OXt;xh zOXbMYa=+k=_eiE5uQRwWBA!G!OjH+*jq#+*e>4(l>I;o6(yQiRpl-cWa;d?;99gx? z(swiy&NZx87xw)cW*N_R&dVt5Kh?>nC%Cf@CijDn%h<*05Isg_uB)z?9N~OFcpzQ) zv~CB1|JNL2xmjis(O5IRN_=^SSXg_cQL;ZxJMs_XgtOHySxxnE|I~2AN+4|i*NfFw zfs+hayq<1Y$gGdZGl+h<;}hk&*Gmt4b7D7V6{bX6$)nrhP)*h}&9I_Va9|PnXZ6rC zo7P%kzb(sf&p(sTUUlT-h=1<;ME-912+&hHf*IOR3;CYC+V`3ZjU zwR8T^KIb$$j0G*MtXjfvY6<%qK5cUU50zLX30Ne7-pMo7!>oeg3~_Nulkvr5x(4u@ z-Y9oaX1$}|9ptqF4^0bHnoeJ@zr83h3a6-s14cevJfA$WFz(SNhl8Fn8ITqqaS@Zz zB_=28$^c&e?={h@6iY6AQpF1I9Z{gBpm&$#*8yaycdub?ooQ3CC?n!Q87~k)yS7%S z8{ujjIHfd?y~_A1mWk_@bMdxB9)IT%IK=kP!x{@6hovM8QxVveOWak7`OJTfRh^d@ zP7>ETm5(G^Y!D-I$9nI&KipeB_FqCxz@4O2aE|-(XZ(w+mC=gLr1s5*8Gj?|SSU(% zz%t(V7y9cNnw6{Q5vE$+vg)>){k9z$G^J=gRfZ4oyj8QKWkRtlJS0ba`e$~n4um|-40faL z6^Hg#>o7NuUwYkp3kR5244OHeNNwun_5Q!!z5f{a_JQng6#UMiC;|kBi0Q`%d2q0o NoV2o3m840~{{z{d_R0VN literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png b/doc/pl/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png new file mode 100644 index 0000000000000000000000000000000000000000..cec391fb4a3bd503ee2fffc560575507683a660c GIT binary patch literal 99210 zcmZsi1yq#L+wF%CMnOP9awtJSKvL-jL68QeTSU6MTcng$QfZKep}RpC>28o5y7Qj- z-}|k5zi(X^4vK@k^UgW@+57iACrnvU=HUbK2M`G4q3jzeRR{zV{1FWkiUmHwE2X)> zr~7tqv>YK2ybjcFw0IUg3J8P-A}b}X?l!&CXdXc+@o!K=BZ^9mv zyqJses4F5n<3iY+HJG)CdG23Uakl(vK4qskrEY&%iH311ddGR)Er#LabLzH_J5z$( zyj|Kn9Zs;S$|8O)M6owKcR(~litJq_=&;;@<2#~QzvrSPo_ zmZdlbc;6nS{+X*5#Asg3}CsRvh_Ffn3x2`Z@7jmDL#X73P3!w+WLXZ|`JvSRd z;)<5qU=9Mq2>&TuTFii!;BBltUN5^r4j!Hd3$9D6tT2AA5C?aN5ow#F-uVE713z|( z)9LzQjsWN3LwsgtNxD$xS2%K_g9?51lSy)lZ^ z(^(cc*^O~!LuA`|uAa_xn@O7yYRz3LiP-i6FpV@DPv?`*Tsh|ZTypwX+0g=rwqIn4 zVB=LUi0X&&n^gK$HcJcG?f2Bq<1o9KklbY^>YnK#RLF^jfGvU|Q$!fcJKjHz9;jVS;?E4v z7;M4Vo~Pw>zTF|H@$L$Ulg(Lx|kaa;H?*72-t z(0&G=^kL0=ufO>7N2q0RkRc>AwDi~xk9yv#`CWo_=GT6s4Bf78bSr$$m$-`QB9Tjy zp~^iZhM~l5$}MN!HBF(?75BUN9Tf3sF{DT(g3wcR_&iUa{}D-QlX0~h5f9XD-FW;^+3KY z`Q?89s?(x-z0WWh-{cY~&9~n%G-NzxMOnr3eMk z`0cqbMg-D|k$RNE3=Q*w4i4x@$tYiw2AvN@`+QDKeGw<;&dMe%m8t)_sxDGGGipe( zeKEzz(-Mb;g(WFHy*pLV)z0@)Wa~truk$fhpXnt0;e=zET2Y&I-C{(0d6BSRpQ|uB z@jtWDbGzHJM|lxkeN37E@58ihd8SCjf_v$sbH6F(cvWN{!sMMZH04vNOvzCE*Uzli!cEn zsaenZpJME2#{ZLq}$8a7moVg&K>vp4Igu>UvqhMBv>`mswD`)MgJs&Uf=^MU{ zblH?6M*rNaAw(cw*&FLz}2hRKNVTlca=Ti1tsQg)v%!T zH#&C;hs-CpcUgnqhOJ7NC&Xu6WzUE3>p#`)@-wlP)j!lG8mX7Xqz!_2iTV+UZ*$Ww zUQy{z1nhYlLeL+zIPihH(Ouii&6M!vd}B~=wq7(cz2StAhDg(kFS_=-c@UHqz50p7 z;@V%UQTyw2PMDwzF2bPk%SCYLd9RM`(&fo^o|Wy=4F#`q$;1*L9)qGHg!ZqK@G1@( z>!SdSQnD80I1NXL%wrzqCqgeWGJGa(w6v}Hm`r)s#2+`E-0n_HB6+D}E7$C|x^sWd zMVlm3=lUF1yto=tBK#v)ulP>yCeFY6emI_Xv2*uYtc3aLQ7jkYqVhy|ph@-IFu?t4 zjFA%d+4EF3l`ea3p5DRXtC0Lt4D7IH4LXn+QTx>^bbsoWBQLkKP!3#z5H#HhNdinU zs9O{MgzHi`!7Lk1<)NnTRL2$X-r}?;FNdHg{zuL~?0;IFDfYcd($=3syCMT??1vsm)L=)+jDp| zoNHJ|9kXd>x;;%kKM^V6rZJb#8~zbj&?PGC`7Rl~E}8m9e^urnVR)C%{Y_@1`M!^+ z_>feSy0>C7wE$N}=E#jEQx1QWEYH7~%FIMwb1U@I{(ZHB6l02*Elg8fCr09{S`~|e zZrL>xQPbD1xF0;e{c}6UKqyQnV@40BQ148LxB3j23^TDK6*^z;q=!YFnamfp5ynRP zy)^AnH!!tqereZHiA&h@{deOqc`{Sev()t;`$HYOQv&$B$zY*`?p6Ennbn8yo`ygI zN!$pGJ|it2+O#YY;VX>-?sK{nA#C-dMXxBjo4_e-}FAO|-&m)4x z;P*4m24l*cgqsMo&6uHtzIKld={%QyMH@L0f60{ECn-W*d0}O$g061$@Yljw~mq zi;b+UDT9rvp6(BQ;&~({7G%WYC@QfU{yGi|t4uFH<9(rtkrCcrqbnso302$Ky*2_n zGVE$ntNyNmWM2EjV>KWPK~STqK^y&mQs+x*bfh&TwRL_^^YN5-41=jRxv`JJ){d*^ zaG&VD?AO3b8&0>!rm->WCZZg#&wN%QhACqi@8MIq*18R^o!Z9)T3O-4OUyS9SLkt+ zwva+(3|TC1qqiepMHh9 zZ=SQVz4*0RYq$vEyKV{Gn;|gr8;Eq4S6b-gCSk8GCaXLoXv1D9vV@Rf@Kv<59lKDD zc;yu`|Ok6fY0o|^nvzHd&| z-kn{P-ch@p`)Hkt6l>nK$c;7e=1-=riSI z<>e8bo$kL`*=hEZA((JD4LZPqM zbH@@0j3%eQY9=KI@4fowcu4ST?U~;=VG)mre}EBry)VK20xCv=&yEv5s*I#p1Kojr zrjInb#Lo;E2VYs=j1-Al^Cyn^{^fK0yZh(r$@D?Z;)T!tX@;qpC=W*Z>cgb0hTBRT zArVEPNrZBs(gPRD%D2t3nkv%`BwZkwNm($Er1csi40oqkj9IMa(0=OwCLW8M- zp@fVKK$6QU)LIXhpEAckka+YI6N3Pq04jNEpDSr-mJ7b+i?Kba!o+K~i7yt=8C$TD z|1A3XnKkpEsqdL4L#7z~b{*6IDL_VeU{15X&5wPAZTMoX(LaD4SiM4H`^`EmkLJV=A5*QjT&Tcs|6QD_vwm4IK;z{n|=dtqSr4}csG`=Gf2*3Mt^6I}C1K<;s zxRJH@XqdIs&lV!kpgNpaaAbxiQ-C8D;^?cR6<;9OzER7aBqaeyLbuI(H;}udD_bK= z$9n`+NdrsnY=^;*`Bv;;6mV;k4E46vRd?Kn4~;&2z+6)$3zm2^BPa-!+WrU$f~><* zswEytElPeioSjvG=a57JR-erMVp zDKpC;tvi!BJ)vWxuCx3hqxyCpp)RC;LRX+vF7O-~PLW5w(933x$OnbrfYd=k(Z*yCF5fpF8(*aN^~vpBuNa6j1eXs7#1#?uQ0cF_XQUdiC8qwwG-zjdASt z_ZL48UuTCiPv!O{Tfmq+#N0)mN9A>iXD60lK;qMh1lcRX1dfQ}MU<^{Q|7+)@@L=W zSm*xn{BT)fAvt`4{w{6#IHHdDTW`d!hx9vCuWomploYqI34pSc76sN?9rVJ6mfSL1>`VxSv`m%rqgc zJX@$x%=5FRNx3-mjmI-+FuQr(EV6ocv4_l&X0iI;-gIu!3*-iN=Om4@ z>+NXVIdjV8BI`7Azw1^d5XoHHKh$pKXf~M8`Y|Z3uwIcv`^a4Heo_bgM_(>mT6T6g zgDHJ{Eq#sn{Uv1gD^C>!aro==rs&)>j|T=<(-R#0{P(-<_hp|J5kO|(hBL&ZpbAY3 zhv6^sCPOKsa7Y;Jk9&+7T#x9T277;gb+x-XwN4Rmez4|1X2fK7wku=jz)y6@|C0Pf#>GpU0)l2WWAp4zvL-p} z@4XeC06)6@do^QyPfDq2ArWPI?7{DCI^V0d+3`yK8at(d3LvU_&u&^kkyBMqUv5MnB4wTv!? zIeGpk2Z%h6`*+fz5~uh42S{_?s=aV)uO%FVmWk$D=M+I#yq4HdcV-GhSJBD2)*g~z zzx6s0VMtd>ttnV>m5XeaZjXhp#|-Y8Cuem#w+^|+CwL!WiCnj|=bJEc*e{dbE>Yj2 zQ8)Nf6tb|8k~15Ba)WlNl3{dmjgP-SaP>W_CZ!MzC_+BqsfMc*AzO|_^*O3ZIOoDi z!nyh2_mUm$#xGg-y@PttaG?_ZG(?`4Sq=l=YLj|q=N<&3>w6+!p{`K^I$Q6G&&|zU z<8i_q1>+B(f$m>!m$(v#21}qd?X8sDU6zzJH8thl&YyNwy%;RgTT7VGi89sdS#tnF zDNcZj&bX2_#WTG>#q3pbf@peHf8R8(@M+guOF&+GU%D^6sMZnb z-Hr(1P%n|_%}w*!8hZ>K9i0y}n?;gqk4YI_tuMc)Uy$k6*r6quE+MNIx~eQE7O$FK z>PoIHGgvA;PINDTCD(+jxxIE~&*`zB)y&_G9dlNTi2cb2Q(H>^6R#_CE5Al7cc_p-)SdHj^waK90`?iW3M;XZ7I6R#h}?>1bhYZt zXb|0rPVkrCK2^4+HPOz+Z?gZq{%})Wr5Ei=58rgm>LRHvjeRWK;<40T{pD~nx`6qEC_A)Txonx((r zn*kH(BymuD^UoG!}VSGvgA+YmW!ix`_18JtZZz{t%2BX7i)k?JZW*9*cVhxrv1!B3(2( z(ZGi+TlN0g?p&a$*7=r3^Yn#}sp&mSOG`fYL;5tIOLN_3AIgamgFP#BWp`8NcY?zm*Smuxv4JL7-#{Qt-9o9q^e2gzUyoH9k&6OWLP5sg9Fat9DG zJP5AeNtvgx2@HZ!ZPntS%oK051}hE0w$Xy3xuuCQc|ozElH$aqge1{C_`-uayj z*8cu}O&y)~wl;JCf52Y8ycBS8aS;$iHtl7q=F{B&UUTWZcWzMUbboy?wS9Q_v9z?b z-D=MxqVU&1)K+*l4l6wqzc@yVYC*sdZom@ivhK5vD9r!uA z><(9Zg_A{*q`xv{qMs)ASHE4kXW3|*$9?0;R~&b4OgPP4pf4%MSbladF(ySI>xHGPyZLli)`_yv zu)H1nb3~?{>N^cps=hu^rwxL^6#l>pGsG`-=2m+cloniyY>J3Cc?9S0q9R%-x@P@S zqP=O=6=RU!-c@RtdFIg9H2I6B=#vv?R#sL&$Ed2RDq+NV)57;fct3ssje}R_mTX|C z`Lda)m9)0z@0n1aBaU7ecVtuUKzo+sZ6JN>i2WB=@_1|ks)`$`Zl5Fd6RXUjmiAD5 zPC>zN?V=EWf3%3m$fb@j!qlp_uwC%8K!kspJfP@atBWToDG7vtKH6{o&a<)7^l<3K zor~=~u5u(nb^t~Y>_i)*c%tLF4R@S3!Dz;BooA_@t&Ik<(%>9SjhSS~wE6%#%P{_a ze36G7f^n$Wv;zNkC9$RKZpO18v_IcB(rxs3LPtlJl$_jte$L0k1Js|x&!KjfEcqqjnaaE^PjZd# zod{S+96~~{&8Ep0J(1EFuDi3F6x61s#YIJ}&Uz@=ML|I^IXx{=t1F$Y>Tf+mN>1K( zc*rG}t!m~dQ5{)#pU5-)2|$cOnBpvE(#fuo(vo%iyS!D~HcD*Ixjw{HT8bW(|LU%JBoF)4(|8f>zSjpqZr|Co&Jfe)?aB%_@5iYJ@ z{|?@)m9}6U(3W`n_U+{4WXtAAF6YaaL8+;fL=S?6orTV39r=8&`B?kguJ)Rv>s|Ly z>c!`EzE4NkFP9ylQ*Gl+d}-Ts!60&0i$LZ#SKpYJn7D1_=L!%`aNrJE@o)+YM}l9% z6i>_#I244pLkHgAgvV};i!ZB_yHy!D?9>0FYAN{0Yq4EVq#93$wr^D{#x zg0?NvUKbb~iYf7^WtqpVXX!#j;^1Jp*_F}C&=4XMP37GYUrfncT~_w9bH^p+1SQZT zxk{2y|NQ*te+CDax5f&=OA01Hw{1AUlFNR~rdJmv@zW28xQ6eEhNhn0T)X9*CV6TS zYk#@ja>sq$CNDCug8J5fS8@=6rh!3sAU1w!UELSe{LzCPWxeXmSQ&BnipNUV!`WtE zYK>yuR+O{i!$VcfhP&G`XpYij835rek3kKDuWrYvqhkY#4 z{F%Hnb#ItsslVIw@4$=M`i?b2NSNiV)z}i-QFaqJ%Y%c1K}TR*swVW?ZGlVpHD$HT zes{=zfO< zA5LtlWPJW&9R`|bw4^3{j{k7MqD!`IA|v}Tb~^*NZaAH`Jg+jidWBMVyq7$@ya$bY z-uS+kxxQb<#>O;BG%aok`ZfjLQ9Fx_ghlUmo9FC?HOpQ(A#3rXl8)apHsd`@#2BMe zUdJwgcP)MUv#WL(EoJnD*&xVVgqG5ie8Trj6N9(nnYYE2=?ZBG?ME}S1JpH6mYLK5 zU(waoRod7Xi7$FhaCCH3<9)>=ay5l;8E2iNQUjXP+Sm6W&G*(FGzcr(rUJ*EPXRln z_C9{3@3wSrblVveIgslts=oaENgELn(E_&yUj$IP{itE^@;hgUb`hK+Z9$3v6UdVU z(D=bYJUmK)AjwcXf5#~4%pv!M@#%~E{xksoL^;$3X%_`ljm6Kse%L~4tJh3|30Z+u zwD2$T@%!1k`TId6p?Fwmh$F%90}kA>+S>aI_{xQ296TDU_xy<4JfcCIs&3F<@fy3@9_3ZjB!(cP<+NkN$}{m7K2AxPDWio8u86c);9|u<353;0i_shK1b+ zMe?V1(elPnCXnN{o2xUmNR60A16E@DgXPy&wzeh~77suUiQb8LMgH&)0s$Z_8dzOp z8U~%wKF4(687%$0VKb2yo}?k9Fc@kZD6=JUiiph1w!H)@;!qp0v}65I}Ci??4@19>|0%BmetM2!}^|<@htKlPv;N%gEWB~dAi+Usr7s>xq@a{YyYU* z?-7zQuERCN@){rO??ix6@Hx@&eUi3rWN4V-c#mrx2C_B=28JCB8;DBOis7eEP+*^f zC5#YWxtgrTHa2(=4iMkW(%i9{4_TT6rlzK%=7d~!CaFsNRr7KAAO*a0*D=g%LSbi_(uJWEYO=*gr1ngsv_889GF z^z8TMg;$TvB83Xh&aP-#iQwr&l_z_?l(Ye}ylP*Ftka)3)ful~@H8 zv<*%f=Rz3$uJD~EJlMDlif~=>P;e`ruzzCNZKqNA4$x(wP)I+wrf67oD_`KgPO*a! zF2QHWn8iKNMkXbr2<+rXHEwAoXj_snlB*;kW`5Y1k8GY{Um4(vo?=ML< z91RKrSEBZj82L}(ifqE!{^;L;BD4jBC7?@ahG!n_1b|F~XbPI7j=@W(r|?6m#JZIy z6XQ0ALii|IP)rjFTTk;WjLrJ#@myB^$ID)aQgT^(EM4}D`VEIW-Kbw^Wo z1G|h;qoq)4V`F1DN7L_{JXM{wDL2(hCG9`mJ6)Jd zKZ7eJoV<52rpG9lKZA9*0`qauhQr=s4+DY(YVK1gIPz~VZRLo$O`hO z22InSJh->&P%C^tV8$o}**x=8ZH}UP&eYo4dI|q-A0K4{y{={!Lab+iCE~bURl3ET zDAsGYENKj(lZm3il?3Z>F;w)LR^;eAV)6Ro2$F$|f8y(S?>~n}1>mcAj5Xb4sWStJ`~krYHZ(9IowKvL zj0-&%2eD*-Mepn2@VLFb-EBS9wX~@z%DC(^ zkS6dnQ1t)v0%fSZgI2nuGl9?0FIlNwPiqIBb$6jT8YL3o8*5yUTa7^II$rE)K_@XAvaKjBft`CC=KW^!=sAk3AfowpU(tkaG z8*2vM;)WN2Ry^~?@#_2mj9SdnfBs|2Hjg$HWEP9yDS-%ZTUS(DC(Qr;eY9Kp9^OOZ z09q8qBs2uHG!hV8+F!1_@Ra9D9Msu`EO+&;6vk zsw%l)j2V0|Ffs~S&jA%d&Qzl;1h6@-#O1(eMbDxe4ii66@@%&Cq(kX5;1fw{X9?MF{}~tn zQexud^s+oMr#`7*4<{I1F@hs4Xz-%fkLG^EED@@!@j}tB{}d`rL2~S zf0Dxyz2>IZ6VGCIPI9#7VtdMa&(zt2vcCI`@Ttg=7g}&pnWrY@y7y(Zn~m7ZvD6E` z<{c49eYL3(1Ml!2w1uAz*xjAX;Ch+lAil)Q6j5Pq5h@Png?RKAOl-Sd zA*;XjukGtJpXih#6I}m+*8&`d9jJtHa?e0oTx7ppW(O4YI-}w|dRy%b)7{Dn7bw2l zQZNYz7uRqtPieh3QbCV0*(@Maz$1gsanxgkFJFndS(a0tghW1Vf{bGB;0^bT_v0Oo z)^9%R^RfZ;IeS_0j_pot#ukjreOsqn^Yio4jr!d!En@4Q6V7Fgjg;<=VuHVGX9C^r z>`DoLTwNa_Ou$w|JY+|$Z6F@tnw43JL3|)J0g?rxztF#b|G)yC&+oT~p?n>XE18O^ zj)RqM!J|7D)hR$9f$y1`(h~AIS5Cz++$$dJ7UYyT*VNYv+4JlX#A~xV`_a@8>`;r@ zU1q=WmqSq=CX=b({pa{)2zFm7f2bN$#;(WYR6gWWhIY}f_k~8F?ZrVQ!)UZS9~^82zKyTS)R8AuS( ztIcvz@@s}b_7mCkB-j$St>nHR20GNedG#`fu_uR1>P6u6d$sE=S1U8oZN)r22nK}_U$f*mar{Hys-$)I&LfGaKY!Ai%lFMw$+$gdAswfG1?JmA!T5D)80Dvq zga09jSG)D7OF;byBRe~SD(#1^d-I)uIz>^7qS%qlJT+(&f&B*v^6Dymv0i-$@PxpD z%r<#bpjbjm$`0()G<;5Lwz?l>LywPNqBI161<=dDu1qjRw(iZJp*i6x&CEB$2iY{4 zBtDCYK{NDAjGRr$Bru_vGJ`IQMB2TVx`<%vbGL&|l6_zAmAj52d|MEHy6?n>mPskd zT6@0Pv;HnNa^V#znzE9B`X=^L8_Y~_c{EgbK8B(V{vPBuB7I7L2It{Lp`2K=L1e9* z;%9=UZCYrM`a$OMje=5`_rk(l3qk6`&!_MBksM!K+A0*AakG1E}AHvJp9$4p7C`ZBG>&#dK_a8m2D2viv5&--BWSYd!c)I z*|@v7;c~0c?caAZyW@?aL2hJ(nHwp#d7vNk4vUbxeDvg#s*x3TDX) zz@rj{cM4N20*{Vz8S~y}db$m6k1{hend0SuivwQHPLJ1xyIKK+rZ_W6YGjRp#>8<7IF z{Hb38>|$mGMsryi+8{r0k%C%|p1d@9Wz9$gQ~k0^Yy=7df$<(}6I_tj#0d-mFJHKt zKNGmgAG4re`_(1XeNuSk3(7-fWzf*jkRp2L{Go@ar9rDqz5y>wg?v6J>*Es>DurXE za5z@CJqqZ6TMJZQmo2oa>QzKkRGWQ@%rb30rwi9bBug&PaFFysFawSyYR41UUKA#& zt$pt7{VU+NMQH6+ElQj0?aK%)p1zfM^NMD41Yd7{t5VWgFi;-Lv`+k0hJZ;%4F6o& zn;2x8hp}`kQL3x+mXfM1`I^egN9Ps2*h3mc>^yzyMvqu2yx1PJXC+d)siV5$_T>}x zoC_3+lU6+Tpbd)Ze6cqkqgXWHSvArH+r6-Sd_%izhUd?pvw_S!E3kH_XON$ zm%cJq91?c@4uI@XVZ9A*4KB{9I7HO(pFAVAj=C@ZdaC?wN%O4$sYxnEmrMBs6P5GX zIslHET3W5!CC&5NI(kiB-y2>Wo!ng;aM&NhfRG;cJ-)p%xE9sa(+RRhGwNC573Scu z3kMc!WqCwtMfA42q{TJ)Jl*$9SYBx^w38Gsnlcz+y`ygV>7@lU2>TJ%r%_8NdI?LQ z=)x-oF=z|iv1k2DDJ8ZcjK3Zd?ily>Sws|Nr{&$Pnf<|3f8JO!Fv@9rw7B=?y;fvu z?2!v!hhoJeIDugUABP_Xo%KL5-?J2C2N=&R-5WkKfBG&AWTh(YqF6}j(5IGi*4ai+ z5>x|h2=x@I6Pes)6a)8SP`_5}2)U+yQ zhL`+d1K7rH`-^C722H5w?BZZowcxBr0@ydugjC5^FOg_a9`R1cx1FK1%JT{t2KnlS zGd#cmfy63!@g55cOS$MhaM6>kQ-F+qthm2$Cdl8+952UMwgX@kyty3Bu^W7E7(FjzUfOUJq|n>j$X0AH(!S%-PxXj_a~J)Y z&++<9-duAz)62hH{C4X_=Flghm`{i}M0wd;W^CCHEaulmvgt8hBipC63Te47n$0U2 zBX?$GyA>HI)GxNoW_ezX-_V#!xm3tc3)p`xkAqvw3nruls3FsLla;4kvTxjz?^2Ei z<9$JSCHyz0|G_nJlMfFVKHUi<{kJW=gKc%A!aT*ow2d*`f)~yxf!OkpLxF|cLuS_$j65mq3cEL|EY7FduH14t`5vGcbsIC ziN3vPqAt^ty^Mb^IPwRQ;spC8V#$*XCcE+{5?!$7x>XYLuX*BYeYyg22abIDZH65# zUtpMb9H@3bA4t0J`5?5LD|C!OO+}(5H^XyEmymL(xTl*foWDK)!DcST0IgNwUu^_d$>hEohWQCQw=cYN{sC%2% zWevgZT(4YE(qTN~=6zVDNccVca_8?)Nni!qPyw^6a{ivX`uXtwJ_p!84Q7PATQt8Y zqU&e=-pJ2}V7y{|#a5YnQ(g2*1zVYkSh;Wpa4^4hPcbF}C>m|s_%e0Tsy=_Wc+q=H zq@wGyPMiP;3rl~gH8vd`3Ux|XO!-;Q*g3eYPdC5+O}59;SFTNgA^x{d{O^N!=%Wyk zAc$_Fk(n7qwT<^@$Jkh=Cph~U)Dm`@oD`7%d!_+f!9I6S#aB&n`d8E2b{$Sx@BjRp z5_)ZMIQ89mH)x-oXB%8T6FU0CP3h{xTt(O-T1@2m&~TM44EnYDg&p*zg`gOLUm1bd z#Ori>yzX8j!;I11pr$JZDFPbI7ShFFS~!?|VFJS#u!PPfJ|6Oc%iXs0)-p=X1dN$p zf5#A-eV4uXlSOQ{offopS_!+)9AX6LpLi%VHIupnH=hf+Za$Fnp-S6pUzYEWS6iQc zBFAq%T>JEQqWb;*Uum3;UqWIwN)km2wo`v?w8NE36D{C>*{+d_eFWrbZ z<@^ub)Ta~+HG3Z#a_Iek>Ti?0lD6l1V{IAdqc%-5Vy(qR{?37%8K3F?NM3IQ6EbUq z@pZb>>U7Xq+(Edfs3Nht155j-Cxbr>8(4>6RX$^r8`GgRJSwYdUA_g^%H5xtF_`(^ zO+n|jH-Bw?_DGB&jkBOIb;~Mu=DLXR2;pMSSpFt|=d`c(5#MR&scCUu8z-Sv7|vAI za_we{Sg_=1P_?~>RZI_u?6OFFW5i08d^b~XkaNtuO7Vy6jhDgL1tL-hZ%J12;UUJ! z&ix~)>FR~=K-EIkqvj*Q=0L#HyayJlsI%74S~Q{k#svQO3umqFEGx}^EgL;d;Pl8? zDy3U-c;6`x!LKSe5;VRQ!xTCq^azY76LBatU1$hU*0S2F`~4M0Yudeckd|^7pCVPU zj*KI3vmXJP*Fqro-@c4Jceb|Ds_3Cl>Y`Cs zg;mYaJM;Y(Ok4Ts)R5bp7Zc`{-}-zs`HtUpT8RmM5Miy%#*)V7n~NH=X$&! zmwrP1Zcn94vr}j4JpWSRo2M296Jq;N;Y28YPvEj}IFOGj?^rTBnM*5rJGwYR^+1+K zJgiVDQKsDWd6Lv-=5Is+kMeYp357gy4l~&=YZ$Gptem)p9}M+fr#l|@kbGHei0AvN13U3}V#EXq0=R$Q8~-P? zeiwg1;WrKDVJ%ECEd`|68t-j}j~{cs{r9t9;3!!7`*PsUt|_83K;tD> zDYdQ4MCQ>s6>v_d9xJ|R!+pe&3KJ19WG;l4wcvbOm*)C0H6$S+VgGc-*2K~h2aK;Y zh7Ap-B=xTu&A3BpTlfP_9Y-ySUi%7qzA(Y{C)jVCqkv8)L+h&_!Kf(PdwOUADPfs` z^!)dOO??|`3ge(`xH5&wlbW0_BYem}%JnBezmT8;6EU5g;fO_0ky>^iLLxt6oM=B3 z`z%3=O#|k`z|pn32Y-)*Kvu={7t2;fTPOBvj(`45r(WX}?NjOzn0)sW!~Ddv4L+dg z&0`FY&~YK8q>?N{)DqC4x|ok=BoLQax?3z z#ys2XOE0)-tjmvi_T6f0)cUaL_idg76EZATP;OWv_QUHOSrSvzZF+~;XAghT?`1Kt z4a*LW&0tw@y^~Yrvbf=bsg5ZPY3Y$=OiO>c?*HIdU=kPPrDFZFCrEB0|NOU{kL6*l z9FM&9j|Vc&WeTQ=d6zHRA22I!8s^Hg=a*-MV=zdO-SG(z#hZ}9)tp~O-Id#`49v){ ze`03M8dak7m5VX5c-mX}PqXec`HMM`u*yIg(ZFDG|Kv?zHR5mI*vPE6ox1i z*mT{6P~_@YM+b;D<9USrWE4h!dCQA=?VeC{F~}nis29FX1scK{E`mQK$2_^U#U>-c z!2n?Z6MePnUFYZaFj1Gsjz<+>#6tSNon1s7W%SnW%}I%>ytC!`@rj3=zz7n~X@~V$ znI_#8B+mcv%JiE*W+>zKeTwXNku~5`CLdjhc|{w7!68IiOmM_;yVejKxwFy~3aY3_ z1BYL|cKyo;{P&lx^tT^~(`x6Vk%fvuou(&kD#U0Y9E-}eL8xv$LiA4P@B$V<^EHh? z*(H<-(dY6(UFvz_FxyytU3krk2cM78- zd6(3@Y$`%8$w>M(fA4&Fv+ksri(fbKrgPIwcY&$l*G5&CNLOQ__@FQ7LOt5O@i-OxvxtETs!SPO7{CuS%p zuE?Gg9I2I#vsPaUh${MZC@w>#P<%hDhwBO9NYb{lb8E+Y`c9XEbwzErU!KBw#X?Au z;{H;3Y&FvwnW1nW!(aD_Wlr?Eae}re*62;xTv)wa2A55+Tb`#_Y7Na-9u<*}J{qpol~+P^*>^M?Uk?9UDkQ8GPw%S433 z_tFbWygoTS8!%z@R0;~t66+9?8xb~bSM9dn!;l1f(ktUcbjI3j(!w!wr~~j~Fq&YT1h3Pd-nxXq)R z!*uD*lQ*6D89d@wh1KTXFnh{6b<_8si5nS{mlt_HQ~kjemvtxGC3%+cgWe=#CYpXi zN2Tj6qhQ4*Y0_3Q8^e!}tGvkO`y$VVx?k=jJl}J=jLo_;pH83`;_i&0M=A(lnJ*u& zglsch^CEpkIXRybZ$~*#C#B@f8$qnY`M+~J_Xl!Ve?n&C=7-O{jILI`LB zXvCTf+sk3BFNzm^Z}vmoRw7a73&B|9-c=FnO@zM|%-;}1Muf2EBZP?eBgcvgOrpaiOm9>A9KVQXNt1B)|8Dy)$I@BCO!0S zlRI2`6|oe$6lGkQE;FaUjrCTG-P7!=A59?!?AcgnrSI4N>rUS}zNwnCmD}8&N?ANy zHLaYk@~y7t$y>2D4VL7juZ5pXRGBc?$H;cQeo|p!+$`@%sO+qU-JN;-hJ?a-CY#&! zZ!4Xi@Wxm+y<_}M3#0&VV>*le=vS7bekxq~kWtxPuJ=BjpnFb)OpF&(ou=_qLL#r> zG91}sRi4|rgQFY|`4dB~wfHEi$SEmr@ZxFH-4D1?g)M^nb7|Eg z7(votYH?29_x6__>Aa$z?KrzVwLL)GT`Os7>jxnD3=Q{P3C}sZ45x@;GZOil9VEAN z&F!G0Q&!%9Impl2Mc_td@gI;^R#Ab0IMaD(HaQ2GR6wt(-&k)rX-~S>#V6HM+E^Qm z5}e;`t!KI){>Pc?xS`y5D@FX$>i?Pr(E2UDw|?S*aT0>VxYuHD#aAn|ql*{$k?<_n z>|h9-J@oY@{|~-zzc*U=3WR&4+`S74JTRluwBA~7?T022gi1A`zL$(dj&~toF2J}6 zf^YP&=j_T^%&u~h)X}cSwb5_Pkbj^a$H$wRWFaT?jXA*} z$Fe|^ac+_(Rfp*V@>TDTx3!HD*(Px=NeSXZcYL)Yk!A1QLpHkZZFk(LmOhv3Qdp_V zpW1n@Pg+1|qt*Owue&OYygj#IAuhCFhAVG{ig7`mEMqGKmp9+#t@Db1aXrfuVADoB zn$)J1Y7hLGW9#@$oNT^k7^jBm<^D0sJ4Ixr=OpEPA{ar7fX{2OT zrn*i`n#b1j^4B-h?AO%i3r&Ydq~ugm1P_FCy*_)Yo!PGsTF=&cVgq3G=_NVfZwl4- z5zddW&}lJY-CaHV9IzSxZTGx!7wuGxz|I$%DRkAz&{7p!PQ+)qcS1WH#laA3`~Tl^IbDS)BNcDAo0~xMMiPRtE9&N#e|1*Y zR2HS3i6;t$RJNf9?FIV#>%h<_wN}lLfcCT*$f?VQj(E}TSAtXKEs#wqT%HI^Lxv; zN)Dc4d+RxSjBEHOSt^VxT-iQy7o!K+AIn6c7sKwNQND3{Mq_N(J{xAd&xZEsPqtIy zPH@s=8cGg_-E_A#jI^6)Y*m}_7Eo@IG z(l4kr9MsL2a5ZnOUvm!f{FpQ&M2Hbyk#;LlB6uJ8;`cQ%q*6OID{VI0TzRh1Ay27S zuO+g%qpz-w5f!nqvDyiL?H!<)fh0i$PcbX_u4(+Xub@(pC;}lOf~Qt`ON{72;t(-0 zOf;#*K<*Y7SdbCaMyIGU08F+DV;VsR`TxoaO+F1Ti?&5G#3iT)?S1s~?(nBpR+_pmy>4>W_$Pf-7Ueivq6+hB2MX&y7%fz}Q$L6kea}5j zXI@cH&7|++e6AtGoA33tO2aug!N!=_!c*NeKSp)yFn!u)Zd=MZ)AvpN&D)I-^z*ya`u(6&z_UAB$Ip})N|f%Sry>^a;vf`b!H(&Ns-A-J)AnC!tp-$ ze*tkoj=$X|S6ZvqIn>aBB>JI)(NW_;O^&H^bu4urr0T!P^`J?|LZ@#!_D%=abgxm3 z>$}RP#XYM#R|5dvTUgjhuD7=WN;b`Q1?|tef8rWV9Xtx)M}6M@iK?gj9cp&yIE9Sj zM-&fKlZiM1qTCNGn>_ULB#z&`&qe`}idVAdyT_yVdD-u{Hmk-%Ww?7~RwkFd^3q#Q z)VNbJoc8JrMfr6n0ljUH(s>FH%Wxv9y>YT1^?5fhWpPY0OpzJ8sCudKmfij8{;XG4 z;&|KrL)jSUZfBJKP&3;`)k)b@jKhpLoKU?VM-=>^Z0b?Um(?M|`#4;b^}iPNM^;2wE+_SRz8zs&>&bGnJ9^&k&Oy8n-rE}Agj!sf?2t?_fY%Uz9OHtU?Yco~2NU?{M&95j7iIPaMU%p>)eo8C%^ee`GwQZicAj(PRQm zc~8Yd%Jq0u`P1cHl76dXi0Z+ja}`;fOv&n2;eg7EL*+@Jb1e;Z{3&{`(qBqqoj8LT z*9Vzw%En&C2MXz2VM^g;9ClK4z@!aS&kbrB6dvmA>gyya(tVeD9g$8VJ<~Ew@tBGW zx`|;aZ8tgfHsu{P;g${_ne?A}dPSYfsFD~`+i%i#Y8i25QthYC6_K*{P1|mgRGFH{ zP)Gjauu12tI+ZL@y`WU%NI3zH({+{nn(9zoo0E9$QgBD-3OtIJp2_;h#Dk6M#h~Mr zW3v9$u@hAN*YP3-0Ipi7cK;oB`k)dR+0IU!0>z!&Q+FKW6q~vm8U;#mJcv3?Rw-B9 zu37I65XBQib*dLtM%;-|RG(z^Q%{OjBs;y3DMo#>up*d>xMhip0%t8DCJT%17)WwGTezf$%;BjP+_TR{8XMX zahO1Ho21}@%yNcHI}lnRPE_Kv8H-tQfyolzh$~f@wk)ebkrO% zuKyIQjIwL8cFW`;uB}wN9@YM+6KV?X^p2s-9`%kPrH^rQBU$}%e5Kfr-u}tF-s0LD zHIJi)#Zo*KWn&$+#*ksA?Ek1a0TqX3UVd@!QoPTiY*pO*l(x!rNaoF~(!r>)p?Y3Z z=K(4nM|qXSVZ5sTC|r#5zHXPz;|xTcQbbJ*Ok&-m>g#o9Qz?x~@!}XC1ya4=QzlNm z0u#4kBAZyrHdJKw$4y$Jgjoi*aRytqsUlNa)do^j8F7k31u4n|L$&}@xzWVAU&T!p zRQyv-I(Y{VD@43t5rz zJ_=*vjAXB&jKZWS-P4&s^nM-}-k{QfxbougKqfa)29bJF8@GU=#-gkG6=%Ct6KENB zQS4RR#3#ztShgt>x4>4NdkY zGfMm8)>m=(L+vjm_FZNlR9=#C2i$RU6xAX=PKIUU5oMR+=JcvL`6JjJl>{&j?4tlr z$4y-Jc~sdH0in35#3?StFvl4HiW`1h|0(gmx~@_xh0)=$3@j<_kCPpp_f6~9l?%#b zhq6GV7;>4xP`Rkd>W||QReqxCm+3Bb{G!^TQ@_eZOQkK_GvsAHfSA6fr(L*wG) zQAa*xa-d@aHpirX>IuK9e%^+E~2~cpuA6+BggW!y#YW0u{bcHb|UJ13cw_(Uj~3Okf+9ptBiwcVyogWwf&S0 z5S;}ab$3!V2CA5BD*sLTuWRI0@=1xkQ@NDszOM_=GGNq^KUtlo8#vT>cB;JT%CJcs zze<-V_#iXDGECFyKV{)Vl|R*(Qzl8eixk;}K(;WY8h%}4Y!YiuS>Wi(4V5Sp7%F~J zHv~)~fC_WDmZkAjK*>GF!&|2>}vK@h42Mn@4$-`AaFtAN$C44sV&oibFXE~)8xzy2zxUo*^4MQ0l>gFnSbBSUTbn1`d4fTE5 zIOy63)Av<#Y7@*bZGW7NG})|_VYhDmR3572*JJ^%bMQz#XfgFlO){30xx2}FHEtYq z>}73KjaeM##L1p4ABrr$ijK_6Vh~k*j*Cl{VYNxQ6kU?> zLWOxzcpf*7R9%hArK6H%Sq=)BO)$mWxHv`%#>sdQ7vHanyN#0XsB)4lzM^t~sAMEA z|A#6LIWErvCGSI2Y`&^~3MS~1u`6`@=rCtiqoYy-Jw`Lgi+o1D1D;r#8N?-8lyz% zC*>5FG7gkDVhYbyJfjLZHAdNFcb3`~ne0*GI8EwRwS^M@uM<9?lYc<>^h?(rFG{v$ z{a48Vb$4GUZvs`nbTL3j7G-jlB>qjsOA2qO`4wc?r}BQHoJ6Qjy-h>IRQg02x8CPX zTvd~7hEq>$skSMq44wFT)tJWNt*(1z)MqLgrGyyh=3t@lT^9%9bVbLe=$1wGV4>!A zpyG}xmQdxHa!N{-cZwWQv6&)|Cb*y*!%dMPom?F{Wl`E=YICCGR)t40`In6`Ro1Ay zN;=ooovW+t8wCfbSVGM!A{!qnKU8xF({K=z1;6b5{iy$u#DPH&ggOf!ofxnr?iUny zs5s-MYI_lB!_~DD~JwHWPp&Q?^MGTXH+Q9>GmP6O_T+^Nf-$w;gfEB zpbqKAn^Wb8%6F562~{6Wc%TzTlZGzHFj1#(N#bc$m_{ixiA$d9`7}d{OkB)$$ADsU zs4=l7uHd>@o@Bgq^nsH2QHBH5@r&Z2i9LvGlkTReE?-r#(I#?iqE{++UY$)SSzkVlkoos_qcdn;{iBug?8;nDbX}BHu8&FjuRE!b z)nfuEl>W=wOOcb_ccWae;*?RxrA_u6b*E5OzK)#fwmHtFQ0AUTkx>(1mFcAFL_^1& zPZkzK!6ZsMOm}OkE@{0yi;`~>igJOcxV7ubfzAnmDXt~KMBOry;9#80^kRdKt8DK$ z_R5lJ*pLn%lY~a4QGZ-G8r5Z#A`7N2)~b^y+1N+vXjJ)0aX?lcB?Ls}_N=o2G;yKt zbf)}>b5Z=4g+x%xF$p=1s=FJLD0Z3JPFb7cLaKB^ zM|$OkvVQ6Pj8nkZG$SUJN!{Q?iQ`LKp?mwU!-F^_OA-^A^ps2|Zn76tDfR0nUXv+6 zTwJCuFJ*CuR5^|Vaq3u70Q_)!84gG>FAVBy>b0g$z|N4-ISvAfl^-7#9n6uCTeVxEQDkm zA{1Gs=zuKu2W4SM)hXFQf(|yAOxme+$R@^ddO_Vdqu6Yf9Zagrx^t=|xU4EyrI%55 zNmpNF`bXI?j{@!!%WX6KegcvFyjehp8-6y)xo9fpzMS(?3F%CIPK9PL9$Ve_bA$wBJ9alq8HupkK*CYkRionJ@Qm*l|nam3WLF)s-o^s~HvW9okBQ$H|O zSAO>-0n|;%l14%o>NBc@Gn6_g$!~O%Q^l2G(tlOL6O-gf`}scg86BC@Z9gUXn2tQ9 z!9P{ZV!y`EBx|{;n=qvhCgZ1r4QZ6G;=hW&`!Rkhx38q*r<>rd-{ZUA_?JX}b?c{$ zagy<)JeQ{asPuC`@lR)L`d$A)jGrzx=zg!WS(T>#nBL6sIE`PwKn{>Q~sM~wr;#>B~|sx2yg(ZyFCjEW2UlG!WD z{DmUBGE9maFPZ(;$w{NaPaWH;YriS_p~|l$(*dgem5rauPEy>bO_PFBak95Ps`(Gq z{!p>r6kk>28;6f^G8TuQD)~|!T*x+bRQM^YPiA9vaFM!xQN5?qeci(!RgN6h7^rZ! z;{ia)N+{c5j{6<=9QE_K|0zHcCy-GLSDi$t;yq;9G7&Wm_8N856IKfT z=)P}yWegQ(bn28%7IhL9nOv17YpdyrfsV|{bWHcOO_pUn4G#@ndr!4*vfF;Bcw=&! zq~diFZwwV4Q|B1e>#->Kr{Z54n4n|dP5H0$KBfP0SWU$+>SCSBKgtQI%Jx(G64y6f z{iBpc!4F*k4u-&{85 z*C6_7W1oth%__x5tMh9%oAvTR!}PIvO+IHwQjWfOB!_*nrrrWP{ZKhir-J4EqI$2BXgWp?3{N&PP3v{v| zNqJN~OSON$G)|Rmv$4;n`BipGg>4f4N%ml}1v*`_@n`ZoLrd(liEgU#k`DAb`j|TP zOYl^8`zH0TBpuXEwo}5JpyO@iFF!?Cik}kx+4O*r+7=u62{K-1Tm9rw=bM;pp9xoN z*RP_5X-|HoR(^UI1d~+jk*vKCOjOCbiYL;&_~D7pzmSZ#`I!7ylP#0r>-CQtq^>mo zz^1CxRyhv&21yq|HW>^_7eo_?+t$44gickbB~3jy0j27oY^qDqDVQHGbPaxV2WZuP zO#AhdDVy<<{tY^?SJnSX96OyuY;!}R0&9u9*p%2vWZG~25`*nm_vGh*s_5r;7|1tT z68cH{M(Fses@t}~NK?J5$w2wl)$8QX&$&017OC*nwpW49PT0~>*H=JQ18Y+|?6-Gm zV8Aa}snR7s43^%^>2%QsU;P3B68R5epCo_ts~1S8b~m~CUsj%16%v%cc``T zFLZb+vG1xis4ky$7fLqeK>1j!OOclBf3p5aZKcU)GT9)Vea~N$3WrVdVzQBbaww^p zSB=lNNwyanx*)&b-)-%K=`t(dChO!;M^}@7tLvX*>I-7xhm*}_J=-)_Kj5%U)0NhV zndVphY_on9m`e5&ln%O7oFMzx85yZT3KF%F_D+z{uh0~C=^@-^tVHhozAH_+(&>S8 zzr{!wEHuSmWz>SEUHb7)T1H@VyH_XW$r}Diw+NMaWNpm<^-^mvqi6Hq!Jykayx{qqS^oGPQlB@zs$#YceQ$0)7K~&I`K&Y32@NITD}vOQEfrPCSJyt;HL+uH}zzD@j6@yXV?*U7UV9+>u~io!}$IHj3P zQaQ4bK~svpZG%TYBcWTTYE7mHyAE?raxcAQHkDvV>no+VGCF)xJxA4TS4T66{`l#+ zDfLp7fg{yPo!*#uERioM7OR5m(uSBinULIEs&2(3w>u`BmH1i`y|vW~zf48jkE!#! zpX}O}KlL-g?{9u*tseDY6-uc-m+jZy5 zpI>IYM34N+dQ@1e8V`ylfI%buK|aN7uu#Za3R#CL8e2%TyBM^!;Zq^E?uBGh6kCp@ zJiL?5LR0|tQOjX5%Mj z|55KjmsL`%=8`tHsZbd!hQCxyAEVgou|0DH%{C0G-^HM(jeRXNlf*Q)4qxuX{-xQL zcPc|Qf4@QZUnn1nAwPb&ET%^;m-F%;qDt4v|F<6lRZNv;8u&d=GN*J6y1f?T)k&)F z=!9OnKFQoRufme-%T(qNgr9!Gs-lw(Ep1<|Bb6tUPUvW-QdCp9f<)e>pep^CvK~xP z%Am4f+GCKLZ`13DR3K`@ry%?*R4#4!7Ua1$ui}yLQz!pYStumZE?I}ITo$_4Aht-C z4jzQQLG(z1bCTD91zn4Ycg3{hL0&-?1ml9puFd{zb*)gDu)!>y?AY+dWRnX01nrSk zsDI|C??JHSPROSuvq6HbHhYj}wwh!ih)tFFCbs7dTN#wl+Exc_{1B-=+4uy-cy*rb z_Y1L$(q|N74%_)nxZ}saTLJ*4bO=e^vhGGL=y*Q^A+1A^-XKWkH|^1M&@h3S$&oB{ z{iZrr6~If!n}SBt`Aum`HtVnk+EZF`$-if#w3-LugJY3iv2!)(_t33LWszm1KM%&()p&4EgKTO*Yp+Y$~5Ci>As zwKvszOg3I++k&iLhaEODA)&iXFA1CVOKg+P_(HNEOgC*38cEh4q(6~u8nT2&rnLvb zv_kqWNuFba3wNUaSh9ZU<&bm@#mKNJ1QS)dWz&DbX8k(aNo7ShUec$g(Dkcu*j5*V zWT^$Q118y1*)5x?3n4E603ZNKL_t)34AOlRa>=KgKhXI-m&nI9DB99MBE-6}`9fsFqhbKEZv9eFvH=2}LKS^Ggg+(t#Lv*pFTvVk1d?pACCBs4GM4D!7qM^z@ z>v$+#zohxHuF3ZGsxsAoQ1X&eqXVnrd!4zm%t@F62QmQ(EFC!AafEL3LgtpOWCB34d*M zIDfp&8#(f2ARohm24aHnUnh$}e9rv+OJ&KVcR^%HB|j2c=&;G=mevoeq*!XRew7^B z=(4RZq?2W-{;6nZ!lpvx-=?O%kT;72onIvnzl`~V?7tZF)8TRZ|5`+!Q9gYG}*{KXt!C@vK8j6%j2OAm%g_1>-uwJEkBOMJ*KFV#c0n{nD4va_oF7xxh z`v!+c9Kabr6nh??8=`LN5*~WwL6**GCKht@Cd)B8aG1aO+AB2P`&nLibdIP)qDcrO z%vU}C76OqYIed*hTeq;|z-dNvF0KRFYzDWag^i#1H1{uUCF+_5O`0O2>#nH_V3@k@ zOS)V8&FS~EHN}hD*Bn$p>s&2 z^{YXe21#{A1;jzdOG~T@#TQBDhy;I3hjyLOGIjU0(Q!$z#UxicyBGv#bU12iN^6?O zWS=EGD3<)$>aUG`v3Wa#RR6X1Ux+Ivx(AhE3C>C6DyZ$0@<7u3)Ni_?7PU; zH{RgABiAUcZesD=*-R;itLHD!+1bg~@Bcly7ycuU&MCWPd=Mp30fH%=Th%N|dduzi zJDV~K-7Sgq`z8gIfQZWIo6_lR)BPm}4O5ieX8o!)sh(%k_(}&TlV!_vqb*4Zwe7?$ zt>ZH}8WPY~$)Uu_QsJXcw{$!)1xh51_=*uEGtowe3(~$JDxUaZy9x_+nJRwzQ>f#s zqnFfamu728aYmw3e)QDgh)##3!C8|m*f>|FYzv8utLUtvpUKzAe}<&{vMzhb)c?db zP~)dR(u_a})~VRGpTH#lDnCdkFZpy)$-l|R(czbE zS&B|JP57wuZ*;zb%HBvak#u-&(m$0>==zBGttG4?x=LV_1_TJ<(lBi<&wk}|w1vmN zpBlKtJFmaadxy?&b#OJa(q$z3M~Re|kc|&Bnsljap3CPx+lX6Q$>=~g!zqV~>RQU9 zE}rL+OOG))I6^L3L3KqbPI`p?fngHq44yY0bf~VWr92iIUw1Y`d}NTpp*R^2+;Ei2 z>T1fuS%wEk$VMxutt=ztj_)x&+DGqjmWsM5RK_M{C}hVtb>uilkF`_Pwv;EIe27KU zr!YQCmecQikMF;Af*r5#;i2E#gpTpF>8luuM-JwpWzq-^& zlS5@ge;vlD=JDg3-*;?picA=1!blxPOP-j^x0||vqORds{+@0948QqJd$Yk|3C$#z7A6dk-dw9NN?Iam^HI&A3j#@R&uz=U zRJ@U5wa!kP@WS#s&)XE#(BA(1DEkEElc#J5!i>)rN=E&DXQKyx{*Y1xm7ndQq-`pr=RV|IPZgi} z{l_@)!*{4!azFDk`*`D&$Jz&<;DIGg01R9_!kb(7;LU%KM^;Xy`{Zu6?L0`=Xci}z zAyn1Mx_cjD!cupaN4UECC4O`y z!smYPOSDD7OAT@Uz}vicDayT1JVwRUBkcU(1a4)N-i~&9`UXfj)hxZ|e(qntlIBXd za%?wmY~I0@p)9WBQCd5L^_w=ba^XxWBl-*iNn}8bW-{(3z0@6+ zRXozkk|{vp=RDeE=a_=ax?3?*eZ0v==xn43lXN%Nx|?^M&PxuPDt(g3waI3y=9Fgc zn1To@U6AZS`aDU03Ke$yVYbeu>v*KYSe@^o@?)eI9X5RvbU_e_+(~Y3r5LZGoeuj= z{bg)>IoSFTrXZ4Te>Nqm(u_HYoSP2KHvJeT^GG+pB*3fE7s&;WB>PauKOOz00d}1q zpwl0d&fAoMtLC5l%&=(_lJu#`pG<0u-p+QyE_k^tiIGmuT)oDKTS0jwhMVkUaIA;p zJKJfVHJc?%>L@49)$V@Mqgl$EYlwFoF+&yTqkygDhDQBh&r?Tep3{ zSow5TEp4MDJHYv)$Jq7OtJKe(#Ui(pecRsTy)$vz<}GJxb(qfcXE?d@T^h?)k@9l1 zA3sFLeM_mWC?S;TWzXJoB+J^EQW3pnFQWq^4E6L=)3$=f=4K+Ehew*h-T}r^89W^B zdFWvvN(4w|)AV<=b0O7BO+zd5=g%M(zr?%y_Hb%2!klGmX)Mpuap5!vx4cBst>D@9 zvq=qgGd3C_o|~Y5Hcc|#N8eaE@pKw*aDa{r$LR{yFmv{N*3Apkb^a7bx4pz@w2m*V zFXgo#y-9ndg%#@;P@3uE{OPm2w_^vf>PGHvE7v*`s+$a*u{G7EOH%oyAgKF}B>gYn z8MUe9H8#-@IwYpXKN1?-^m35a=mn`|3ThlBH>wgR)waf2=j@nhpwbha97=E3baXHo zTS;#S-S2g@lI%ezt0sKV9ZXF(0+I|Nons_jqm)jj@2TcdIanrnPz7`(8BnTcNXx`b z!AQxih)L&cZl{9;kW}`~WN&okRw~^#VVmT}MwgKy&E7NVxX#X)^gW+vwn2J{Ju*4G zCY+N7)O9j%!W7e9Oc@w9{+Z<9VRN%CsiBtIN{N1{%Yx0*nNdzUI$g_6W20HXEtdHAVkSkhX_ z*ua7D;gK?`o8~j8@*v&)SGhcpVvc)_YrP#LYvwYesh&upo7uDHQN4T6`rs9-z zp5w~Z1fBh(G&|QgbgYl2Ijec-$tRdy7oz>hUUu&OkW6I@b6PsN)_#&Bmj{{MSOZr- zEL0L$}UMU((%LZxw_kE-TEc< z@6z-(lcOVX7!)(e%(ecpaA4>RX)5uK{c#+I6(Qg$#Ng8uW_G@d;RqHkd0(Aif z+sqQ3j;MGe4RT84SJH35L?at)k;;SVBk3h$;~(klv!AacvH6nkN;7p$<0bl|>L;L+ zVM*T$oqkG7FHQco#J|oTuksUYGK?kir&^1$382K#_>H=Skkn+fLzh-bz~mbK8<+DcvN_-?CbEM#isZrVGBNQqNbV$7N~mAbkL z0BYtgWqRdyu5^!(4%e}8W(|ifo#2&MN0{E)LS0=Qb7swE*0gG4I*?7XF25RdiP1AP zCy^Q*m8_c9u3EoJSxq34zXww-rj-8D`6abu(v)>cj{_CBO24N9Zb^xP=@4xSn3$Xq zQ^~7nUEj0+4>?TJTR3c^`Bg->YBOd(I;ptfov`Zj!PsGA>>Xp1)TV1Wo;?0>i~HRDzB!g zZ9bJB?4~I+~eG?{p{Mgo55HUZPOa5ozhAy*~5XW>6;G;xwz3V z?sX!CLX?)p@S-8gtL8Jk?tR+NALnX!8~aZW5UN_tsu>lx300&dLbNQ#NKZfU{voKV zgHSDN@4k<0E{7A&@XnPZTo`n31~Qxw;ZPYRlLb5$!;M6l{N4k6?J#<|>!HI*Tlr$~mflV7(yQm4r0$ilPXc9=1 z0_ecebgOHsDe?o0AdQ(+bW#};i9xoV*AMVaO}b3;+pbLtZn`;ij`Ky<{rDFo03$g7 zs`Ss~Y)kP(igz|8c~VTU#T1q9`}K>l#cmVtZTArL;zFepHa?Io76!>$u$|9T4yl_{ zipx@aW?F}zzS+vB1QTp~I!XN0AbKg~z0JHfe3A6r(tX^?1A-{RZ4V5Eh?PW%M5C0H zlu#0j-Z=c<^8B0!c;wIGxH0PLTbS4Ca^duc>_2{n$kbUhH#HH>_H*>)89GL*xc7mL zJod;VY}&YyX(c%v$H5In2!*1=l5xfcdWcUvv*+9ic5Z%!1Lxa`do?VZ*Gze+k8NAG za4DXqdHFi(L)=EZ()uaXw@xM7d5)tePSQP`1RxxZ5-TZT@Z2Fz_9RpijN^oex?w^? zeGHEb-UxoA`_9u5A0ty%PV@%dGo&)$c{xT$N4b2ZFYkc~dWPb}6XSt_+~6hJ$5Lb* zmvqMgb{x4v<$`;8i)rm@AMflb|-Zr(xzK&rp#oK9&LjLjY-2PCOuVjIb~ zp_jy{+GPIN)^Xb2is;6hYFbU}pZtHD=LD_8)#>46jJ3gmAedapIGrrm*p+;`1+g#r z-?wc@r@Ga&<*5n>q&j9wzctZccav{}wL#=S+G|6C-$8og*w8C~F5T~J_aD^1@bj;1 z4`{03msFp0nN&e#Ul+u%eMS&W^TTP0{M+38OK2$Vk!6x$+dc-;3{aCSnVLPS)-G9# zY5l7Cr2d6YH%)s8dfrjZXCvFn*8tiXm+^yqj)}`_Zok>LfGH~K>zOupCI{a9kO8NX zwRg49TwexGiiqptdSmntjxaiKjg#*m=7ZDy%Dn8J+e6z9$y=H2ZP+NwNG z9oWOs3rX&o?-6z#T9z)Me%D#fp1n-YtL5%>(|lLrmeez6)?Ch(G(PrbnlhyU$uVQ^g}=TNoo*v>3|ZQR0TDHW@y+% z==1j;B*Jf#1}nifiA)!BeyMI1YrM)a3g(~4`iw}Qb$z_lX;b-EL2uiNWj}(HsuU_e zD!G*GOXr^ya;t7ymt=mw@j-6pCG)HHAeC`bW}rzPO+7p4b&Ba1CsTb{2NJHy=1&fh9v%luJN;tZ75WKOyjjB`x1gn807$A*8yA{ z?cv{@_^&%LYW%w)2V8eTxTDoHHP2*P%@Hm~r!%#68dYI{DwZso!O5$g9Nhgj7Y~OR z8A#CBHl4oHSGjs@HzUiRVeLcrG4%E>KG?REV=)*V^O(AP0}E!hQsRPBIfun96g0$I4-#p-i^m>LvUS_Fn+$N7bZQUN zJZ~v$)^+jj-cxLUvx@`KEd6~$)GxZ9M^?=w7IA4={}?k*|CnEB<<)8KTX2YXPJY1V!3&hR83uWy{*~ z`YaR%2ohx|6a<4Rg02g)X^*DHJT~JCp>ZMOgY-qv8JAz?_@Fc@bbS6ZB)46XzuP+d zzs$ee?8PJlsva3qnKd1pq?iz-<}zr?rf$DB&#;-_RDKYI_l3$%A>#|p;!%A+=)pf| zDytMz?j-%CY5cZ_J{#KVYV)P3+B*AgE925K4&C=9`W8gC@6`BW+s1#-;|s<2V&GFD zB?v*w!itG8s@_C}_*b@NWkIsnP0blU3jaX$oS^nC==t5r<#L{+yP|5r*E0aJ=@fk( z9i$`W)Hl`>b^OP8sbM;L1_@U-GNm$#3uLpSTx;(qQq@3Xbqs(^Vw8dYUJ_0@wY4>r z$Hwomvxyq}HWg=}e}JCe9tMX;$$4QaYU`+}sb@-6j;`)F z4b!F)&8Fz>>>?MdqH#*q_4f&o937&kvz^YqA(CmRsI8}=xs}H1GRCVTGW1-%N=MHC zP9#dKypr;$i|0nEuB+zCp0{~p^LsSheLqWQG?5ug5-P7@N<$;f^%b~|L%hF(j-GD1 zdPi_WVPd6qw6r!-S64}x;J322DZmo>@e@>OO`_`Arp~>#3VEk)>7{fG3f_gxZ`O1B z1CWHCh0bNm!=St=Wc`KCX(N|5w7*ljP-qs0w3D$8D~hE9L3?Qg%{(Xs4|KQvw(?Uf zOp#_M1eGNz4T}-n4kBB3^2W8$`GYxLTOkmAJ_(0g3M{^6DB!>NZufIr*K&(H@0>$sLghA z6YcGTDzhrx^Uey7M>dni!yz1=NO1RZrKQ*!&)Ck3Y-Cwack+ayV|7(4?z<2k^Ws=}ZnB2iFM^3OPkLK7|0P2>?{| z3+f~m>ZI8O8cb_0ByG4Dya)mi#XdL|N&|@lQ|L{v${^YDrO<GeE9u|V)p``hmG}!aY)Tct9Q;2;pMi9b=pT)*A6Af(eB&dHf`BN-?C?ud4g#RY` z+cfSggnz#*9V%4*rRy=#*HsBt&`(f7G&P>M^>^b3@NhVEvoVbux^eg)|E_}@3K0&4 zCcUK~$^JLr;QK$=%%$E@mOZhF+S16)=KBU^aNH2#NQ7uK;(PelD!Ahk4o8SYB7{Tk zZQmbnVi>}8-AO@=@lPhpMBu^0aYGYtRmhvqalje>TQm|O6w<$2T1DGJ8+YmGVVci$ zb7h)eSEp+lFS)_>TZ`%NZJo3L05Jk5R>3Bc-7R$di z(a*-#`i(cesUrUkCPC&@rSJ#AXQ}*1N}+7Cm2LfDldRd;XTQd%L41uM{(p%_cUl7x7w~SrjX)AvQZ=KJ z7!F+o%zsRXIV)E4>FM(*t8b(-p?ep$ZDdXNUEQlSBx9sED}D{vB>eZ=i;mWX z-Z)CrvURUh(#>PbA8A7rsZ5%9EV&_<)HW6JDl$_ImMx8KBFZLS`td6W|4nihBn{B^ zX57TfJHdayf2(YT)H#=?@)wK$LGWKMz@7&q!@;q4q_`OWiYV_;2H%<;!1?^PdhEZ8P=!=CSoJ+|WNnmYd3G#XRsSdcV&+Z2A)9(C(h$&()zNcrMN<9s}l z>YvFe*Wsd0&hv3cC9@L4WV?UA2)?vjAb(C>*@td^sR1?_Yd<y+xOG*d*1RW_-^I{ek?n@Z+Pw>pw%spL*dOI68%pZ&7AsFB)H zQwC4|TKx1}S2|_FYm+T8(N8*$s+2?JlSp{x_j_H5sYxenQj>$M(S((@SwSjWV4D>q z;hBwI>2P0XTl4oKDHk^3p~;S#WM3zzCc3I@mujDWc;RQWbT-O{X3|nF(+#}JS2M|< z&ZgL8LhJ0cM32Q-lAi&f5-e%=O%tI_(LhPvwMzMPM%YH7BsJiYG;mV{Q!=l~cu8(w zB>dAgB$5O^bP;pY{5DZcm3*4`rjreu+XGE3o zUpK0*JN{k6J|*%eZMvk=QK?*-Ft-r?OXW}6Sj`syO>$*`DZoIqp0f+yXm6i7^mh@fe7QV=vTNe4zYU~8LVV`99G z!b@l?sfD!RZIHu;Bn?ZY@Dk%=I_#Si+4eB0Gju@%DLU|%Ixn^|X;b^`J2sc3>&j)W zbhOjmGeR~L!XZpWT|HBqr_tI{Pf6Gj)v4mTB zCC;AgAeR85;rThkQE!uEj;&&x5~ahYqq15~umqN%2miT4^t|-G%#$k zyC&Ogn%`togJjZ5bVG^}I{CNpqf9nbauH_24L{pt!XTABllmAY9!UK!iSKLsH%Y0W zm9(k)6N*iwMaUza39ty1W3BFhi3c~ zMlYM9zw0t5FOSgBI)hnLs|g88A12F)wC94<888_n)%Q)&WJ%yhhcUkN6W)SJ4w2V? z=cW5OvioJe^TW-Y?;c~-ulznQJiUq1ijcNk$WNCc#nCsv&$nNDkEOr%U-{LIE2)mU zMtzW$E~!eRq=7e`3@9C(bUXj@SAWjFp;o^7oxfl~%oCNvn93(?4&A1YB&e&yyvchv z&7Yr^8#KVK+P4XpRW?JK=5BHrgB&1Lb}oOdCLa2&Sw|O>{^(>tg)RBCy;4_p?rRRH^woOjGeoRbHbib&-_y zsY(c>ff9+Fsbnmlc9K3XQf!cvpGYv@q)YiWA%C5c5;I-dw#|7)qECKj1C9HsN>c}^XEi|-6xWB7Bw&J*kBQ|j8i=i4St^fsAF z4RP{=U-0MOIm1Iwe~I7z{2E+~RJkCx-=<(-5W{P8I5XXdm<*fA!Ieh$ReF)^yTs9> zM>yXbVa}q(te7>GiijiX8Q?d6E(cx?MpBT?p~Vzw@K~CjEUD8sIqJ9XElXlTx6&CP zX4ikjj~5bbQqjURRx-aW{UjFyHkSk@M>JoKrTr`X*5P*mH}%BP>97vxR5aA}ozTg- zAFWNa(;bTZ?5Iw*q-9`I+pOE8EuN|ZvO1Yo*-$B_I_VA_L4sr|otCCZO9EN8 z7^OShndqzvMC$x+9i4P|U{exf!d2Vggla9iiw=n#NO4Go$I=qUpteamUgB%$WJr>A zqQhmI@v6UtgQUNh(oan(GWpMx9KuZiWs_Q>b2x1GKiOdGh^=yHq>((8fm4l_roowR zzjX%^m1CeOox9-qmTdQST-(=#Uq}iKIjiAmb`x)swIln~jbmIrk?ct|C z-Aw0joEfV(^5iq0X5-Q}NOvzRb?UXW6-92Xp4l;I77!TjtE9$4I6; zO3F$Jx$gCeNQ{k=@f@RJnJl4jglIHMION{kGZ311zB}pJxono?*eI#2 zH$E;FBN`6*@=q7&l{hpie3qsk+oa#?#{1c4n;s(h_Dzx+Ey*skDIqlJoeKB;@Ly&7 zbo|#jn=0FqeeX?1jPPY8^VpIC)M+Z}8t4_96@*&L}GSNuK8&g(CA@lp~ zO*&phe+m6`nOP?N^t-h3qlwfXvgz?+^BifdxlPus?$S_l5VgrFHw6q-0Syzz`Py7V zubO**YLM zrN2rdizWl9JLu^G1=7f}E*-@-(ra3qN-<1zUXt{DQzTe=i)2&huH&trjG6#Sm*JrL zj>Jil)LcrzR(gvkPD#xTv*+#ITa z?Y#J=!|J&Eb>3pChtG4qKf}6@eTEsa zB$p1n#fN<^GiFbx|HyvM_Lj3`aA-rLN+%LCLeUP|uF5zcoF zkK`SGLnKy7%d|PHz4vZfszMC5pJmTG z+d17ng6D-f{J~c08e*(oFpH{~dz;MVGAXW{*u%CDPBStR9}fVORx)$`QdX{5LVfwo z@Ah9i#XCPg%|QPkiF6Vo<+Lomk0~0k6mOiks#|qI8sVw(@fT` zTSeQH@g4$wN4B!%STD0yt|D`8FDI^yj0XV170h0=igjxjQ5A*kXglxk`;g9TBXg>f zTsU{0j{Z?H*(}lWTGl@P49lC!CS<^4Y@mZe{VXrc<5na(h}at9L+Oow)rPW$Py>5yDV#$_SjGvS{E_f-5-*`ctc zIg!+mnQjM7j)jEiwsmPzLP(k|=@iM-WJi}GVya;(B>mQuv7rOyVx?A!SvLvEPz z@^X?xBSdPOIn~k6Q;%(8K~ouwb@1+%SNQoWJGeHOpsulw%xFIYqZvvY7tk?W!e{Re zb9mdU>^h$X;Nr<$3_4M!Oj|&6?i^d+e1+HEK1gSOf~uM_hKJ*1!_}O*be_+C`711} ziz#TGg*GdUBtVg^fQj`7}` zzu?6!`{?NRXlSY;Gtk38GRwZ>7wG=%3p}%Y3aQ~<_PzXl4%gj9_2Laotq6?=AV#mT zcjueDeyEDpnX{SJ6y@ZOH~8uM=P8{vAMer`dff`jbHj{eV$|(B!^qGldHj(@l=!Bj zX1TEIMP7R4Ew&%OMy8^PX=ORuuXPivZ01sLH%~qN1n$+-e6VXb=ldKSx;XIO79!IZ zGJn<#Dx-O?-O6RSy#Hms_2aGVKh;I7w1U!Dih+S7^(_Y(N`Ib5?p<zb4j(3*vI#)j z-ZrY7LBE^Y{Be?0S&0K^QwpNPcbkKxq#R9W2PM9N$&T7)653o)m;&gMEJ#VVg-IU# z4hXiX_mc7l>7h>2zsRPCh9o;z;)h7qZ~B|=63uiLG3k|`e*5*ovKg<^MQL`DPLG1f zl}a~k{6yXQO+LM_Y>AHkCRvh~!F!n_p+RY?vSc0G)!WfWYPkT4F482F<1(O2=25?@J?LlJTbWN=XpO zHWkT_mO-0aNdZg(2r6BZqzRcoP&HmBf3|g}I(beHb}*QVlckDvE2k2PgnVgHTGztL zO;6qUIoUP-_jt!yjxmLGk9?e^v!=12&SA$l{*^87ous^VEx-Eg{Y^C`O|7i_MPM9e}0Jr+up>hSILWICMGAl8w)B@7+tO3uhU)c7pGG?==qZ`~@d}{Tc454g26^hRa9y z@%F24aJnPR-4B17Rm-LmOZ4*2i!XCzFi8%VkyQ4^n8fffXU{mySoknsShI>{3#M>< z@7uh#c@JIA3?6@eBdZs-K)j3HFMo%3kM8DY-z{hP+~1>)@ieiV2kG3+b>zG(o|nbR z0@s(A8~=CLsZ-qb^cVTUqG^N^JsjP$h1cFc$kuJuOkF;cH4V3CN2L3Y^73n2*m10b zhSeYE(+{npu_VXkQy=iscVB168=EO9Y2#Cymh;e)k2AV;8|U45Y`kwB8`dwOw&d3G z2M0(Fo#)5jeVP52(=;#K#AlvfOC^IG-noNqI}h>ho)4Klcjk4<67L>j#il1&f7b$P zoH6#j@vm$?ah&(wJ;|pZoQXHk$?@H9bL47j5`BAlb={61dYx`%`B?&8W5 zD`>14-(N15KtXW!m!99cGxc{A#$2+4x0 zrUR9qz0d!??y#mi(3%c@rbC6KwqM#O#KuqY!)3|(Rd}w$RS7oRUUHaj^h`EaWdm(W z?fm3LC36x#$>eiN?4!i5mHKSbz=fau_#NmZzJ;y)`^le5w*R-cj|@l739}^s4zxWuH?0SIKOUa&(>kN&9cv;+JVJD&4gy4foS; zDK<;=@A~t@eoAcn(RFdvHIwmUj!p@sAQW^jl5VuRdTW(|GL18(IhyvbGg8uzt|rSw z1JxQ#w;86oG*x<{j$hLK+w9BsIVP}G86aILh>5n7K~VJ_sj)E8S}F@BeadFWNO@U2 zr-b^7$SpPcy7k}uxrF;Z@kyS2@_yRt%W->m^76jZL}Rsl_BX!5W6P#f7S54aI-3$F z$9I3Qjq~SEb8Tof^^r2_>snbi=U$$8{6S_ml;Jus+%(8{UO7s3<(?GlYeKinPilZ;XHIkS$^Z-R z{UjfM_7g0fR!ulN#_U>$Klz&<(H~FdaiWZwbMEKMFFeb_mO2Fj`#D8myU4mFWDfKD+LA`vLTwdW-ijj8N0Kgy+BfJP$5zBAiRnR_-v^b%{Ma zL-Y*Bsh-$C?aIe__7l&rY(_m{7g}?N*nDgk>E6@yCLgEHjZjwE$g<^gdE}{2aNqJK zA`XnTMc9AnB$vCc(La_VdtF4G5M^x-@#|mwBul1NL$Z%DXMjUTUT0vWkG`SIjR1h- z)bQvtPxFb#*3(oOBR4jeGn?P$?SUL;&UO+nOL1`XyL5%7vi|s1hMOqJqGP*qw||= z?38NHCc4MYh7tt-o)LgF^Wd}9_rK3j`EWiXpjiw|SmKc5U^^jdAo5iXXOPSGJO#~Plx<*$n zM~*mWPk+c;7x$6D!6D7%YrTwmY2v9Q@l=jkGgk7cFHfbbZ-Da$-{JkvPCEO#=)7`? z@pgbIysXDWUiA3wb{6nF#s&w7j|}7G9J($a;_WxDO}rT(41MSDyc}Mli_r{tQ6Fcg zqLl|e_B`{udKv0E$s0%BrM;_{j_xa*9UU8=ed4-3p9a~{Ui$hw8P3$PV9|VLPOT>7 zfEO-h#_9*z(DHL$KX+>YAY4_;thF0hKBIvU(AU#Ve^(c|<|V9LvV@k(7>?)R5vFnO zT2?mxBWJFqICi{?2Uoz&D}En*zwIBe^6`h6SvTHm!3jl}GIbV9<~Ff=?>dC9+`E=Ay{VRvHJ%9) zt)Q`C2Gc4sBr+++(%#M3O67c(FPuw5WfTXGP-znz?rP?(cX}D>A0w4Wa_!OpxkQ-W zQ>S?Et$uR39Jnq+r!Nv8O_GWalTKywl+>l9VLDShkAaTM{P1tT%I>DAELgml`3o2G z^z(O9Sy4`@V}50rO}Ao+e;}zZxA6s(G8&*eauB~qH+N9_NrM0;dYfn}S(nZCb+ym7 zWs;Jn&r(^DIN>H+YDyv3>4AzLQvX@fFwE9h2ui=8Db6Z?NYXdTl=5sU9WZ6WNc7TF z%46!Gp~^Ne$-K_@vXup?e6SRCGY*T+B zVTh?7#zr`U)FKBtK-<(ntG=I~GHz?|gQU-yz|l4ZUAktI;gHsH+6cPz&>B=Zq-iv^ zhi4lgP=SGsvt=?S(zV(I@oeZl`ERl67V4vAgtbDr(5|A-w| zYkByIkF&02;*X`3l*FQhCcby=*lE06j%+5*o|k^WLC2doBYI@gNs^4e<}K?%ZuA;& z{`@80KXjUrc!E?aMJk;lozCKU69>3SH{W=S2LZ^?)!k2DUmVZN@&5L$9JtX*-GS`r z#2)*}s%VoN;rRB~dF`FObd1DFCX*!7X;P{5xD1BFN__}L$|;Rh5~-L*eN_WxAqTG0 zG+ahY%*iJqZa7S|qT)tp_;CVwls7a|Rawccg%=SjqT};*4aS*#`!AD!hbfKKw+xGx zmD4nDF6=prm(Jihlh!;jXH8={;iya7>?Wcicl_^;gX2Ib8Y1d=q|+(l@tjyEy>t%3 z5n^pKsd8`9F;rSb^Q=n7FUpfQ)*X$6aVNb^z%8$$%<)KFm!k9tCl9>KcVFJgXnc&Z zM3QtmO)8xkKa5i`vF%ARUJ}Kwm;^(_|yy z4fk>O=oYS?y~(v~DnT-pfpC_a=?B*z6QXwN8h+!~pW)lzf0-+1kI{MY3`dWAKzU_3 z^>fzn%rhTj?Yu@2M%dc*Aebz5)NE=b3;o=w=SrR@X{M~x2i2{xjo+lRsXNW6001BW zNkly?2JEmQN=Z&VOB8hOUbj+4agEj#jN; z$zT?DA^_l}CvN5^_7N(H01mN|+5E=;`Xy>e-*}Gex`e}FN@^NtsU78=@4e2pw|3K= ztYG!yk8|J31vJz((%_!szy9xkJ#j$u+oMA?;f>C*+c4$&&za;fW643% zIR`hF!?}gN33~fH1ZQ->A)C#T^KL&-#{t)InATPSj9SS#ctoQU`5f1K9;A|tc3*=? z7)oP4V^R$Cjgm>{$Yk>SK!BIYkinrc5~Z#@HoicCd^=7CavtfSI4R)9%-JNPBf|`* zBUDvJZk@}UB;U^D5KxMXr}y)dfBrcaMjhG~t>MXs?_qXJ6ZO#ne)7-XVds${Kf^F- zP1niqL%*DdnsFYvOorsJM{G(P>mPfTjq@tVUXL(^!-QQImn!B=tHELLmeJvo8dg8? zIp(Z;oUW^vIDYI9d*0vAnah{y>guMlwTaf2$7rhv1;!MUZ7<}b3J6G?W$EFt+%4xQ-?|%Qby}>KgzDo}7D*I;Y0$#`gU)uCd8Vr%p&vv}2yeEi#FVsI! z(bXoy)OP-$^fT?j*1uDg?nu{fYDjLIp=%T1HOaFr{|e1wkzj&JUV`d>p*QlyxY5_W zy+bw6jSK*(QmP&n^!89CfW>eYBm!aTF<=v2Gu6OJQ^Tae2UE}^NCtzALaM$mL3YMdWDFSTMk2V82=U`b=?mzKPY6CBP;h9@_bejxMs&UAslO#uyEZXo0UwGj+ zSWp`#lVX)%1m%}$J%!$m>TGCG|G@8Wrc~`> zt=~4&;!e;{xA&m?F9!Wgubh+YEl62MA^K&)gdo`*Hv2c7Z)}@57V7^OiZA)J3yM!c z-zFE-J_XI7DMbHmuu}4Ir2;N##G#8c+cfgfHU5zNENPCXx)sP54Ar4lcdIb@|B~^x z-`DL|H{Qfg$va-9>oL(=N>9mpRL_@;H#LK?X)2R1{}TNv*3TyW_4}LcGbJ>!Yog<_ z?Ac$TdD=9bY@BcZ(eLo}E&Caak1-Y>rMKf4Kl{$#@^>#EgUEF5nze>iZKXHI=RLn- z>PqIvA|w+R`Q|sbFpx}^|eSu_llt?&BB9|fUWa;i7W-O5+lSr!P$$z;n263NHsv)`3Klc>e(Xi4+yn=TS3l2JYBCUVLviXFCQ-r_&@yF7Xe4 z@>TY=U!#4%q0$#qfHXK680Z{fY&bzClOj2MnIHZ?U*qcV==kw4=aI?X{(f|~s)<<* z)0rB|u;ryU+4kO1`iJ8TUE0T=|LJ$=9h|rx_tf;SnLd}M8FLAH7x~$1J2-f%gRw+{ z#8@w{{>@)=KAs?2vW5rel#}xynR4j8*2BIX`xzJ;qxa%Ie)`T%_FPK%-DT6a`7ikP zo+~7hNrro`vUBsddG)GCb!`RHXVmz}Lzu-6E~mP_lI-Ds=6`NG!bm(pGBHZ~sU7^o z*WZE4M(XF@!}PH9X2D_Ry&tD6l%cbGKmYiny$r?2816pDj`#QR_R&%5o64zcD94Xr zH=gBO=Ua|UCdruNF%lo6e`u6UI>k`uS$_CWZ*cN>2jJm`()n?zNzc^imcdMyRn)O) zc^k=&QyhN#CwzE$m~=YDNcSne|J_&Ew(}@glQ~j(Cf)OLRT$Qs4ijn^bWrHwZGuM{q?J~4=0Vd9t2aQet-_AZSAtEQ@Pa7@OxdK zq}#loUlYX6tLBr^+vYZ|SbmZ78v7OED+cw|gEmW4?a#(n*U={kJ%jq{g`SmyG_16x zuc>KZxX?(F--C6LM%(lvQ;o7T9o_c%s@K4&<~Mb<)CrGiJtk&L$4g!h7i2w>zv~X% zck20)@j5UpRKBJ3l>V%fM@b~zlp1R4ma4)BQ&(p#PbwDh2VZ%dzx?}OaN%+nTfhF_ z+4}V`Au{7N^o~octckVvKf*Jg+CT{&sqv?bpQt99^f>_K3;5mNypR9%&260D`v3Af z@4d*3=@GilU0}$G(7fV7R^0OdO{FEY*3?l~5@G+3zRvkQuTqyC=0e9Hv5GRvGf9R9 z&hfWj{T_exAD)UrFnW8=Z?P0Uwri-ZFLSE?VaS@5=u&|KJNWJ1%1-Rm@#f$F6->c=x;i zH}C%>O2``~MU0YYgk;QNya~f3{)Qv`{4al>_ZKc9)_t4{y*VP4Z7f;%5F2Jy-InU^ zI1aT-9%ti>!wmEvW&1b(ln-B-M{9YG(q2Q=BX>RV9Lx57ljDcB@|XYZ046o5RDs&B-zyIwkA%0~?#?`Rz|8#xega@~ldYq( zZmdm&N)^r1$$^AEHm}1eZ?O6zi%V;VTW|bMG}!JDjH|8VE!UjuU*B=DJ2XI4Ua zsi>r`Za%;I2mgglb1Rg$9hI%qs0hLEz!14yj&uepDyzBgxfghTeH9n3jZsk*W7>)b zSWq9i9kk0Em^X7KHQ5AXsT`#hl~mW(v*FRlDCs;y*H{J5e*QDG#M1P2oZxDzmIbTU zu&Am02K_5rW-+6&n$h855~&oKT!vgpIW_f-Jn>uqnJ=xGisLv$%F1Y(H=l6tIr=kE zN=jptR!(EXrj4v=(=(sq;d$jG6B%5REWP)B zs#6y@)ddUIZerEUsvGM|4D`}|@e*Y-7qEQkBB~kV+@%iUv1#1Bb|H za|F<6Gy;)G0wlyFFp5beC?<)@wq<)pJ|6GPdS};X?47mO>oezQCwR`z?96KIwPaga zqGVE(NJ$iP4j>7VAV>rv1C7o(eeu2h3;L!Lv};um;!ex(~Z< zx)LoZ8>Q)99O<2a-LwujTzw&GQ*rXPCrF>^>ui)jsnAHqkx5%9Xu3`lkA;_Cpu>tdsQ%#&BKN3-T0ly&*bJ zrrLw=V(|D8^iL(Qc54^X767k|>9KzFjsh!J)M0XH2&H5*R4WD2Qe}-j$F|~ES^SFdn;-Z4m-bVZvJw961{!>D7Z0XY8%khSckanryUpL!-JTZ z&cjM%(A?69q~icy0h6OsuoG!yvlU)0l}acS3W&$!h{a-O=P8V1a9|YEc_3MnMN4ZF z61KfSW~uO#8z05U!~}|nqoJu8HK`aZ0J+IgzG|M1#zT>qEf#8J%jvv^_g{&|?0n!w1& z7+gDnx`qbSq?52v#>~VN%7`IblZI{Eq`c>}Abu|8rZGA+h_RxJWV#m34fRMR9Hnfk z{OqBaAICu7AaW%KPRv5Ku?0=FS#2Jmj=w4SsM8}Rg+!&rg@fpUBj338fvLU3>94Xk zr23r`@fPL<03G})qd6-5u3EpuF5%iWI(`hIan;{Ubvw2HCU&9(|I)|+j(tEC3^%ne zx%8`(Ph1}2$OF~fTz=rvgQ=az>CZXmnMUZC?k6Ww##Ek3bdogEhC@eT>;r0?Y8Ydj zkX@>%i8LI{%Map#zxhvi>|h3e^3DH%t6MT~i_m2Oh%MntSli zzqkX5xsL8Mj=cR6?*HDS7)z#+&Bjrj9Ku-RW%#Y%{uEYDzm0GFB2b+5 zQk71rO1T_HqXeqz$wS@m93{>1UUK#(XpOqLICM%GwACrt8>!-1!MhVJPZ)U4Tt_H?D%yzY?Zc^>R| zEmn5ck_yjBB+=Bq@@)S_GGYEFlyW7&N~3+v8YK_v46Ss_3T$jyp~atyUjknvu^hx} zn$TJ+tJECK(-u;hI;_gp`}#Xb*Vd6TP9ncl4i6`pMoY&UG&5hisr(;Eq#DrC)nNSU z4!2;G>FYYGe0fS2=xEn(a7&z%lzpJmg(|(G3whNU-MUwnbUdpH&*kg~Cl!s-aU45= zV;@Li*TJNMgJT~^>>J$;uqynS;sq*9pMs53K#{_q)E1#=f!cRUR&&C~sqg!BiRy1E z`ZJLy)%~dXx$;@spW_Up*2R^lDw)VBl4|0Vk))bS`A7O%1Em`|G|x%@RneqwFJdYp z)P=E7N`T5WA3yXG-k7LCYuyR_`uP*sdGD6lZCh4GqZllw^pEG@)UCp{Z5t8yfSH_!nVAyGg=zGhcpt~RN8qLE(Xn;| z)~u*U4C?nbIk(fg{2N{29GxQ4DP`(bg38y@!JrD$(uK(A=u4->xO7adU&p|l19_O5 z8Y=qWgzQUh+;qZ*Qe-MaRV817aINzUO9dvySDcE*)VwMhRvGfNp+np+RociOKnca&mF@T-Q%0t5o>Yy&%AG zB5@q56u)q4Y;pERCzo{eAl0w2pb04!;OltcC(k0)R*&NN0H%}exc#$V!quA_vHO`v@#sqjkgbVfpf86bH+}(k zU)Kl=K-?>$@8mu_@Y6>yTuj5wm5^R@CGNZHdTd#l(c+m~utZh(!o=uR8KzXuRM0+i zL)kg>rNW0Q7nHhTRyinCN=ug?N#%1!x)FFeD)1?#o)qii@d^v9Yw2Rt~y*M>Ai9)%InyyQ*_M$qhy5tkM`_h$K z{7UJIQ_BKy(6N0dZfM+uP3@W4+Kl=Gh%V=la+K;0Qxrd_{?1jRR4z6}FDjX=%RS}t zuWmns_)7JC9c@Z)LQVLI1HY(z`l-lsaEH`i3K4 zOfCn4WQH`wld3nNqlGZ~MtV3^@d1^dKot*`!cXxqm!CQOsFTxDy++|nvi_(pCb&*- zNxCQ%&C9LHqJlk$9=V5T4qZ|76gB_J>>a*N34)JnlXJ(G!aoO3Op>1$WRP(eI@e0W z2k^@KdF=Sz%W!pD2KPVqeLR0+0{5&@QZis!@VpX+`f_mFHlZ$E$v>T&t99!w`1IBy zx)1fhwNq%`uoIuUq5-cx_6Xj8cOQ0auEWTTh0Rxg64z|+#Ic9}JHGYw9(?Aub(kC+ z#f}R2lv)ek~&6Jc9x`MatgER z=$DE}2^u@-rj2tOOgS_t9c&r_N7)1%8$jn&r1UyBCtIc8RR+FJuTah`9X(O|WMZF6 zoMS<0FRDFI@jo}(Ohrek&pCB2bTZGsk2(h|X$L@mdBREm(K(A%-{-7XQX`6Mlj!h4 z$sbOH8V4RuDikMDN_SbI(@*|>x`+}g62SAkvnc?&d|oOah8wzLSr)qYyo{dl5xCDk zj33v`pjev1b5FjFUBADbRMzn%;LTKg0@ZUAhEL;YkvnNEtqy&{v7_k}$D}Vav^#;~0H9V}>%kIfr!}ALs-W zC;Xm!80JPkP{M%{N~-)<-QmELj#M6INjisrOexQB(_wT*4wV|Aqq)Vo;3+gFQ%ZVP zDH3X*gJ5RWB#Fh4jOk(F$QPBtE1@CIp+(0>I%hYP*T*@$>Bi+4d^%hN*Snx2W>h?+ zyZO=mOhp`U`v*DlR5VJ3m~v%U5G`@n&q=e<$y42)s&2bExwzb%cTTu1M+b5A45v;I zh1Z~;sr~2Duz!CfhYJ<{IZjonj#RBvchRGhHC#t1wJxr1qvn*XpDUv!7Z{Qpb{#x^ zy5U?1s`>}b$8kieDD?F*pIVu3C+a8&@Hj zZ~%C4OF-x9hS?%k?);b@Y^0J&)TbT5^=8KdO64LvD~t9OtI*cA5*=$V#BI0SfptxD z4?oAzy82?=zUx!Ca$_6H!^iQ)voGQBk-@pq*@7(yr`&KR|KBBrUsN7MPSFb;qXZGL z&e&4**9kN~BbeO&`i(J(P?hG_QHn!%sN)KD=>eQm{7E&h%BfO4Hpd7vDV|c@m-38L z>*s`7s$k>R5}*_=H+)q$mLyM;+E7s)qkq5enHtyc*@{Xy4Xi$`(BvnDRx6(Q()nn=$A*v92>L!!x*ir2h7Z;Ln zYSrzje_cA72s*f{Y@8sz_1j6h{nyzbDq4`#&Y&EHlJf=^{-FKf9R5{vP&}cFe4);- zT)RzjehwNVEbmC+pKG?Cpi~AsC%2W#OP@IL1`eFDaP=*>;hs<5i+k_A2cQ1@U1%9U zfhXSUt9&1G$MCa1Rhom zAf^XSp}TtuT^C=8Ph5KmViRS!r4q^j%Jb{M{H#T&kyg{zgjh0<#`PEB##?W~=1eb6 zoEkw>eGDFee106K_P>aCyJv9OC+@%1dBr zZ-cY{92rO54sh_NJ0x-p1g>*c5;+khyC_|w+EX20OY(Qbq}onJ?9s!K+led34HbbgAbR5nM9E10 z_4?nzZ{4{C7}&jFP6t531{yjxps9Hup8MH%@aB^?Vr~(ILLdI_>7&?GoOL&N6>mry z7A)JTh8%#6IPA(;n{LFdmmS074}1f!Kb*vL-yv+e^WUHuK-#j9O=XeDByr+}hwxwC zeH~6=6n4uNbZlyeqX>uLc(SE8z+t>gl2AF7K;z_?2GI=1g#lIP_;Kzo;TBlKzs=R+TW9$mF2@5~G_^vYd6OZiaL? zR*g&L{7Q5XCtX7av$Uuj)t?h;9L4;UBT|?0K=Fj`29~>@x=?-&jhm$KnCzc_9aQv~ zRJU+wQzf5+;G${-aCktFwRG-TrPXuFz+zUvOG-o^3kW<+9s@Ay&A2xNfh#v7#NsBOUDW% ztuiLZMlg{F8X9UaHPVaTo>7#Y6dD_|D2-2`*xZ5UsUcw1TC}EZlnXfw_YT0TZ$-wM z!Q_mKrq*V}trA8C22pS_XlkfMX}lk2dipSuD^()Yv%%k_@ zX$%Zc!cC;mykZqrv^F6fx5bJfI{eE*IHQ7vTT>t^8l;NMQTQ;uozW>nF79>Vt&+8e z*~73j5GJ3G+h0OQQP8r~Fo~L%!_X4-8HW#|;7t>_CA7#XE-7(*g{_0a#Wklwa@blL zlKGlYNOw&P6eQ6tuyq zalHJ#sbUDq?Ij;L$g%8IJL zaprc*Ww@RP+i_sCyn!y_4;O<^p(K7p~{Qvh77rUd{dh*LC4p zHXPfA6qVGig|4D6CufGU-zGW8rqxy@H~*X}@liD@t%b7=4vgF?qozD%%CDSITS*Z| z)AfY$_J_rRpSFYc#xIDuIdWn4my0un3N$Eki22M5MDCon4zD?$otVgw^8sr2NyazSLq+F z?v|{4jBS<6Ws%#!BqY;h+_3$YTzv&oT)`G58XSV#;7-s$U~qSr2?Pz2 zKyVn`C3qOzf;$7j-5r9vLtt=s*X7mL+pT(4_Xpg%-F?sL?|ibs=f$!die*Ijv>S>2 zi|Ch_y$z%wPU8x|T{B#PQ94dXj-OlCYd>S01m3dGLsK9`dy{M}8_$3CjL z_QbiZs{uPVIBEI8JK6M4DSqPik^v>@o7I)`*TCs$G77ffGE=f+=kl+w)C(o`C7mfH z{e zgJ+gmk2jeACe->h_3t4y(3wvxG+7ze@T}a0W}VxbB1i-E6#KXbmyc0~h9{rUxzYLd z!$MU01Xe#g#2#VQb$*8isxn5w*q+=ZXrJ~eH`|SvOIxrbc)1)$oI|_x_joq zL+#tGc<*=EHV3HWIOJjT=bWGsJ#?{xNP!y`xg_vhQH?dT-uz@7hwTz)i)}_O7VRB% zkjy+YUEl-c#4Q6a7l4%zw+(O?K%qB8)&Y%yV&HaB{SMv(q#Xo<{*Av+-}TV;+hv`m zmKZf*Ogy`;P?Pz<+Imn@=ydt=)c-Tzl!ad`W|K{$i|i*Idh!gJGd2q0i_4YVBzFTD zhubNOh2eX{(x1(CmIyF9x=UM7AKpbsJ+hK*tj8$P z38unc$z8z3@f8X9YP)b-XU$_1>jZ%tg6U1cS=#SXu$c%l4(yx)_oSGFSb(5v@oVq| zypbDqkrB_tA~j$)Ows7hBhHDV#O@Ttn*;WDbTW1Ej64`;`Pe_}D6zSJ!~=ok0DiL? zO&tfRqBw5HE6P2HX_d**;%nFYT?;3~>sgpN06xu}vhMniiDo-c7kDIceBQ68w#bd( z2y!Ub6LUG4F~nBfOP+#fWum*Lh1+H;a<2PH>Ea4e4EaG30j_{^h_WC&cSMcU+Um~N ztQe|{(e}UzjMnmpEWw3$qiVj)?5?y=6@iL3j8~q>DB87Aydj!JtvhjwyXk-5!n82Z ze4VW)NC5=Vjyrh-tf5p*ia(pL^Bxq>C}cAox8PAIOFFJThtp*NFXpA|OLmf`Vj-Vh zs;9ImHL&6Ky8_H&9Ir8wD+F3q2e}n99l!3bLxPmbecsQ0pv3d(+$PrYvCLKL*~rRM zqsNxgdY0U`DEBU+MFt8php)#FkYGp|r*qTaq^in-?Y9N0Lx+10I>2R=(&OFg8ojy58KBP zDUHAvQn`DjQz!G>22iCGg}}mpG+rY1PS$#|H!mIRT*mLr{byv5dNTdDV0oe{mtwI| zrW?0Ehq-_Pow!gH6~CY?4}P#KKG4|WN#35j@eFKU>HJy{nshm793i$!86wgfl9~l> zoP0LSrE0oR%Uvr_{SLug7lha5RS|FndXKc_tDoO#9$1t=4;*v4(7rLx4jSG+1Z+NS zUl0YO5Iz~`1ApbIT4l+b=k=zNUB5Vf<k5sU@6+nX%Ue8Oa)a)JT{eYN+bWEc3C9zUNk!Qwo!=l0VAm z+zH$nO6%SFC*Agb=ae?Ks_dP8+T-wV^jRFo!c8LYd!DTBkdTzWRRe7v+#t(@OQntX z7~KWs6%oFTD9);a30tn|=%rVu$>?G$F-8>ZiVt8({Ghp!rl=x^a`Z>+T%m)r>_~#? zNus(AZ3-+xYyq!6tjNUtua0&{%$b-a=P=_^D@;&+S})`J9;V$wb4f@bL6P9UB$B1L zTFDH<9~(c_yObBH(!KS|+oNfxARjiJuW)&j>2H_Jaac(H11*tClzjoMNioa|cm{Qg z5VEjTVE{FlSq1YR_S}sJP6>Q8E)pNG<=UN&5jip(uIY4C_ci}G-#|GK;!FJUgr@t7 z(@DdNWPTUr;SUM!`dc{?Ogg20+G}B@VK>ANHp`go*Qi~2&yPMp@Fa0BUh=$&jy~IJ zU@|m#2?NG47nB{UZ7UvHDi4WiL$uYa@X>vTvL~LS;zJw4{NSipgUQ7_1b$C*G~=A~ zUyeTmaO_+0O5Na2DJi5`DMIzH-ZyL(+wMy$84^ufK)#N@pz)Tk{hTekb{K$|oObcZ zmo>j9u7JSy+I@g4Jnxt^g61F`Ho9x!e=-KvQ}Nwj_kJi7u=AGb24T!q^o~Gp9i589 zJ`vjwL@WUdJ#ROU%{FzbOoTWr$44r1fFcp`a@ermRE3$^dg^e57~6r6G0!W2U>I(` zhDG$|%nZ8sMhVB(gWA{A_FHZvq$wBn#;=#(|JX(3oz9@81DJEc&w91|K;Zd5_^TZ& zhsi#Q6yO84>elb75?6%KXdK#qjd=PEcCyxdu0+Xp@IFP5&5=%eQ%9UUIx}Y4$TuUP zUywq~qbII^9@bQ2zjoe_&zOCi_p~vX_J?*+0>tJbt8MA{c>+vZaScn!xM$tSeDGy> zU2OYh43Fh|ZGL4fM)R+|MMx0JftSf_R+=eY&Oa9R%W(kJY@I4=FvG?QuMGvAF?3^C1L&r_^}E|SwAG?S+Z@nPgmO#2mJGBBn^B3*FY4?L;F zT&i-jIr?AI^z=p+rTcqg@(}QqS4vR)7?8h8O#nrx1kNgFRbIv3C{vv;>XG5oGxBUlXSZ`ItVQ+8L1;w zNG*tPb!iUEMJHX&^?K>vB~;_>Lcb=vG_G1Zh}WJ5l4Hvh;0F0@TCOzd-v;zw_@n+k zSFHD0xaFNE`Gu@Ce?ti|ej#nYoX~IFa(h9)F3Re5^Sk)??|3v%G)-D%pkTpe+_16O z6)sxrPOG)@l|=SJeE9&w;c!sst-rxIqu=n=>H}Zx zXt#cPFU-xT^Z8cn7h+NW#6%T3R1+II+OUZu)`q4gd}ek;ajSlcxoLU+{b)hGQ%dX( z*J!B?2j3NaP+EkeYl}DZ@)L|<=zl@_xJW} z9V+|Bnxsz%r5V@yOSJxJBZk{)GZEGpo9b}MK=l$?VH)IuaQnLc=zg-jSy|0(PR_NTl7w#L?Ey|U#rk$n!EN}tDeA3vHTm7BeABt_1 zk(a?E#$=O;uOQ>2lWSbih;6opwECoQ<(2Scqv$2*-bfsj;6wD8(qWGN-izcR{5Mro zJ(JGM&&5|TO%}t|8~?+(QIFM=D=IrmF%!|>&``nk1Y;&jGG+puEbjqa;y2+w)fDvd zc5|FaX}$*U%#4nw#&;)|Q!ypTA#~Vbmk2T<$D6PEj%OddTS2m$6-_%ywNfR-0zYcO zQt>ipd_vLrLFZCmJD`Yn_d&OtLTk?)lExi$@)sisU*uMLZUK0T~hDJ zHlL4uP&0d#Mi&zGKq+r2#wu7redu>$PKqEQ%@SX$qNEpc+Wz&sT*i^#s4d;?8L= z`>Z&p9W5wc*jO}KX|k`Km{xlHupRPpaW8KYueGesB?^8s3mvS7H4kk2bdoNwjt3gw z`zab{BR^tMuiNWlQcsL=;cI%xFCul09gV-l>KrZfVp>kAN`46=>wneo^*-;zb5J>6 zM_UPxkrk(X*ZM+)6isg)7Z}5HuFj2I4WFpdJzNQQ%;sO{9)y}$gY6i zd1RIf;JLn$Atj`#&-BM8b^!_y(jJNgG%?0%0Z7MS3al>D4X=gGedcA17ML7{@(zIS zs;f`GPboK7&I62pSi=kCy zxzz5M&tT#L9lO=%Jrjg?J?cexO5eU`E(!CUU<38b(jkd37_+a-5spJWrFUxvh+cN+ zaPQJmXIhu*`qvG`C;CScp0nSaR$1=aj!9D}8^Yy$z^ga6 z>QC;v8miPPvM1_+@Ce^|v##q8YQV~BIu*4sOzj50-gnT(mi0m2I$KQ>FvqD zgx3Yv=X|(f_^*hSaLd0Fdx_qod|kG7oF^6wWgp`@KylsFKULZ2oHX(F?khnDx)wxd z7zKYQZ^LacI9T61X>hPY^-q)-kU3@+UXDD;J2f+B!*OSUqh!OV#E)8VAN@^45%6V>^XkMl)z5TdGkW$j)H{dIIH zIsIdCwW0RfZs85|N~96FudP|&g%m-^9~#NCh92IR+OrJmOo@bs;@E~ zm55@-hypJ}pk3=iU#k{hq zEMyBEritCC50%$z%UO1lZX~3*S1O47Y?&k3OIhR{hczd{??hO$q+GNR3Ro*#_x;V1lB^GN z+k4<`f}(YHWT7H;5|ro_z-;zQiDU@C{b};sN}KwdV^c9#vTtKlT9(>mR;_29bcf=N z`bKZ;8P#r_gksRt^Cl5k8y4YpX|+L;!{Nx>R-WtehRA)^-}UBbx{JREFBc1aaY5lb z87;|&b6b!cUfGzCa2|?16%@_hQ?n9t!s#x&+19+87mx=!D--S}Ob8FO!)CNL%0&wC z-lWjh2k;ovVm3U3*Xwu&2?9##+$thHC6e4TWCEZU250jPnN3#l!5l#w-mpP8XBzpL z04dXykZW^AaPeOel{(mlZL+D9{^}EK?t|(GmhOE+abKm~K!K(Ejcu#P9zp9BL!+G% zKERsb^i(X|sfWnfrMz=*m@@~dQ#C*K?@ZppCH6n>?YHE3p#YJVwV&X7;wncoVve?R zR(j(X_kAyy=S}PIC-{TqJR34Fh zwqO0VQtEX+73~*xw_OIjd%8@q(+hu?CC>i7<J!BX|zmt)C8mDN5?N*^!% zHy{4fA^J?n=;`*&Yyp-NKq7tU!sLpGc)$dkXl7xC49aEB`VjjVCzk-6Bb5IH28%Z>`2rn*nJgEyY*YIrS}6-;RN}$CZZeGiZkv(Dm&Uq{ysB-nG%KU%CZK< zlY~2WR4&b`24}uXcppT zEC%s=_}2hS!uXry#Jt6BPKo3IKYovpy7pa=x&D z`FYhDV@Y!kVL+*xGiLK4ry>rv01Y7_Iq^<8gS zR{zZ$QVHZGafhB2#fw~iT!yCBrnl~ct?=UI$M$C&`yLt06J<&|i+Ad}QRp8tfUN%z zI~@TFbBlX{BsMl}kI`pPtyj_x?|mBYTU!hn&fqjx!|=NOH-9CeaDE)+ubbOE4goUQ zaPj(Wl}?HAuHT2$3N`oui`}t{C8r8@)_JHt$%T9=f=ogEg_grx{UAj(lOAuC?VNHk zep5~x-4?sC;;mL*E2#@}qZj~}NUMzFCVRM~HifdXoj3zBp^MXibUhe=1OPbMW#nPc z?z9e3m!&e!{%8(kif_t)l7eaA8IsHJs8~dp9vi%M+8A2;A_SC%^Vj*3E4=do_>>HU zPR-r&=~DEBnXFj5-1n3Nf4MV^J!AO3NgMvZ1brTK4X@8+xnTt)KqlFXqZKXPGJEy%#XU(?W{9K!SvpInC zf<8cIH}Ixf;;ZeyNI9Rjz8hGJ=HX+k|29(|gGjHGkH z9QWKD05L;UeRph&CVaE|ink_e5bF2r_rmh|D_$6X?ze9k2U@cUqHoj2jLgxdF`GH_hAJD1986Kl$_>O^PFdO& z2WL?AtuOFuM%h}*4{!<0M8dipl?fx{Kh@{f)ggaE!_mSwBT04E&@ql~w#k*;mEh&R zy|rpjf6VAnYCd)BPf2q-@tW-bKcaMT21qb+5%ui6rVXY`Y$`ZF18GJc7<`@|zgD9( zw?zk1x@5_ri50!dWl#n6f86HOdWZ}}QNH8G#B4rIEARQ4+~@;z2FSkrOx!o{HA460 z&GEB(Ho4yf!v}QOC(+;Uq$#fO{Nb`QStG^XAro0&LS$hv9TxRzsQ167a)M43f`p z=b0(|VV&ryuk`6F2<__LG@!=svSgm0Nllcb;=fz~w-VWOs>RFou0UH(fHgKHPL0PU zoVs9y->r`EKmei~cg+b#W&ngD#=WxRz!CwvT z&UKz!_#>6AUB?cBn)x4Vwg)==Dn#t-Ujj}U(s}&L`CFwydJ>`)l^@qdl6) zL4KUOJ2-!)@!|X?o>(6=u5Y8aL1kjae$-FC5AXLZNKu2Jhm{fg zXIb6tI(}xrAUe(p*+ulICVR=gzTYqUZ5O!JpeD)|*b$M$mZgd_H7@ZmczL{yKsGf( z_0^nhgCUZJN`%TUSFs}~Mh&AMn%ie}U!1X4)bWSa&}QF;BFg&=^)9C}n&@m{Meph9 zeZFzv7Fu?w7%CC+i%67rP;~M$Um+xmcyJN!P9)^bva3Xy=i*u7`e@Y;QwPwu3 z*lnPqx`JU>=s(l&gxK*mLl9wJ{FM#`W#9v+rs}(Amrx!G?Cu+!z-fX|R(E<}_JbC1 zeWT|mBqsOMN?IrasP4y$wH^F>0`%Tso5_3*XM;dB0dv?_z66o^qMmiXu!&iXjIbk~BLf#SQFC(v%&wRAl;FH0_u3%ZQ?;m~nJ}rxM zk=TjkpD)B?brU#xKBxPjRXq0^F}9=X36x{xHSW)5DR(yI6(=V#4|WqNjGKFN-S=;Y zY1Sf60JqX;ESZ5v=JZ}GsXLf z3E_s9&0cpzz@;*%3Hz<%1Uoq(!28mJ75DCXIFfsY;P5^A7wHZG7j#H>v132D2Vh6x z-?*6E#DJ}^;Fxdf>yor|O`hzEr0+j-fcMs~G#(iu=Ba)$Km>-zGMu_%(+gU{-tW3R1@Jk3@^Z#py5$t9(>jJzFc%K;peOzo2x zXe&t2UGpyg>-I#F=Xg)YH#GrKpnLY6Lh~-Y9~w-35)ma7z%>2^#a|5R^-r<02pcMY zTCyz2bN@*eh3)^Y?f+Y7qV_NF9&R^JunwojhCfzvor_d|kZ&CRUP{yAB@{@P&r+1cri}K>j~ysy7z?9t zjYk`A%;_7?8G*$1a@)MY-(65G51_)=Ty<$JTaj{=-dIQB#y*6H(85Wc?QY28o=usI z)Kb6h8VMr>dEX#jh;VilU$6^1>4F_8{-zf2lY!)7s_dHfTd*R^{09?L_jd#R5h*N) zDs>8ftVg@6h;_^f2sOVJs_Z@Ji0zwbqE3p5)rD{c!v%>Jps*Z$RR^}sBlLzZG72Afg7 z@mEVT^*w4GQ>Ts(q|@e@)8~2qAC7<;T@IpYgJj(kt0=Z@RNohpVNdISh}A=tL%ZfR z|Ef-3OT!!MzD)0TfK^&F_Dv~H5QqQbJ?BGlHTJ|Q42Zy^;y}YKnbwzrY-5&}+}ukp z@9&+vi3dTKGAPH3S#OVRsp-Q~jZD??7oo-a(hon*bK6|l8KLT9_n9T5AOmOknc2DA z_WE~=y5Dfmoe}OQweCW*oO^y$X;g3S86?UKDdm|-!52X?y6HG?Hx_;Ym!8=D2R_$zjZ;YpNzo?6M zZ|?Xd35DYX1&K9+$wlXW8=x}L>3B~PefYOm<~s}uPL^>;zia1Upxg8EC23S+b-KI* z9qs~-1ZX}OJV9?p)oQdA#bbK>wQ3};DcKS`)XKgDlUqF(BEJWn4r%VgNnB=@W$S^S z?7Lu8%q`&8TlE{^#!Te-%k|GPNOvGAHReYz53+AV6r3fesSp@@SIVwcdbA{SD6vEq z4nC!*VkKwKeU}lK;G-*xxkZB4UT|+XF#^Y_aCurFgJN5^Va-5i3$fE^oMX>A&j_V- z-G9G3m~-p)+u3M42Etne+IThG00N)|4|jdRUnEV^I`84!zpt)#$D*Wq8VWX3c0q(T zXBgG8nY_~bx1DBmKIbX)T8yJ)5dZ0#wPgTgu;n;{K8X4$uzQBeIa*f!9PFZbx~QW} zSKwcFv$yOXiKTopuAuCx$Cx4^|FBsniRtIM{BA{nC#1v27j>MHthaxKRCvi2c5^sq zR>~jj=UGSW2sh32b|0zwVc^rJXV8Iu*H!wwuqMWH3U@|VMwU8bTl8x0o33Ez?-I(o z3gi0wB}YFr-;!dN;*r{2+YIWUGRo;F3Ciy9ro^ zlj&YMKEd<8%+_Mi)5@sdVusKiA_H+vM+@^~F8og4_v?7xj;(1&;Q_9YR-Gy z=$!x@U^vK3Kg=Vs$B*I0uO7+uIzFn{pmKlAOXAfS6`~UkH?ewz{7GTFqv~x@TU9#wWG+oiaWCTF)bKSe4qis9~-=kALNhG(Yfj+J!#Ng!Dfp+v$s3q))&?{a5V*` zdSb5Kno0PjKc)(js5i7pJYT|b{A`rGr5eOS&sBA?sLSTsBiGqLc<)^HdD1wDLcy@>$PAG{blXb%%7`0Sr0rH>Dy z`=L2y(Z}P3W?FL87J8)2ONw~zVgpy!-7K$5ndB?9Ts77B4VgN| z)lxVBV1n@a$DPaA8@P`Q(UKshz(o=&L0Vqy>EJiM?l}6K3wQAi$NqYYJC&2}TZ_EA zQKGiN=lB1!SLpr;e`U4bY}^0X@8oD>72Xp8(u99QPQKgj1=ssHG}pdbfFc!eh+ft} z4Lh^PHX4A&s{%iKlM%=vK{RsFf-bi zS94#vsBNgP(a(KFUw!6DDYx(Zd(M4Cap7~bLo zN9zyTexcw^RuOuqtRk&d;m046Zh3zS9A!-e#;}AF3v~Za`F!r@ zoxkMDysh-B{H0|kGs9@>JSSAM51%OMPf0Z2haDlDX+3k#-QSjz?-b(#Ixc-&g4+Pk zV()b5-?N1%lKcd1Bgr@LZ~n&Wx$A@R+~Ks*F=Iv3EdPu6-H7-a}mw+JKF?W<>!-4L4UK^+liqnbW zh*1M6zRv{$e8lYmp+l7zUqOCccwcpDFARrQ~t3p&t z9_R2q3+TT~lalx$@pw35 z%1Zknbt;yMLK_Z#gp|tdoNc2;XH?&*^70XXh!MgoW#;9hz8b)2(3^o-kGfG>Ja=Wm zCa;;HrlibCA_PN}Z>K`c#~z)(Ol3Xyh9F(B4}WqP*&wHcOiS}tl1Uf(K&T0X3Lqj2 zLy_=8{HY1HEGK(BAT9)*rY#7881lDeljAkWii?Kd71{4 zXC8oWfJl&pMr_@rA8;1nQar6(%dg>rPRo$(Z|*y)F%nu87yPP@XpBpqyw2KKR_bZO zBR}U85r}V*e8LMJ6u3)cU0}w_D-cd$zwUB|{^A=n5gq9|F%W|925Kb*X7-%8Bygoi zBZ?O2L=mqAw&`X_?^a1KWs6P2_a*V+B4n|DvGfn0UK+U zc?U8`Mx~g3N&42~XzD;>(miMMMP|U!JM?wY(UhD1JI?D%R7OuI6hZUZm?2vL7-wUn z{j3sZIGY8|tMD3Aj}RjiNu6wZ2%tgNjj}j@Ct{stPLcMfnQDRm&z|f3h^Fhr|gjt8Vvh>x_UjAH(+Y)^YO(E#St`O60 zvLlJZM8Unln{gbvKKo`j&!DY9JK@3K+I`{$k3~HlXdTc9bnuTa{2jgLl+O6QF5S{T z%Ve^?sX&G%L7pRbR)C}NI+`{A!4@V%a)IhQw9KapRpeun80D=42S^!RI5R3){3AjN zwwoXj+C8leZ-+Lz_vVg}4^iL%fw&$x89>cJOJ?E1(@`|Bw~W=?VXoR2MjO4{j)4js z7y@^@e+Oi|_eKqWXVj$#vIAiFGvaqWZkJWM6*_GgqLYR}2ZFK0Y)S2QunqC}Xb zcD`fNrM}x0OVQMMALYM0UN(S22<324Nb6>=dfN;!561gCKHI%Vb_Veq3J$<+YiA#1 z?)CFHYO5og3v6oC+H0!og8n8g8_NZ0`(>P~P<+jo`CSUzYW-)X86VaywmqUlxV^n6 z_l7m3{}z@}8I(eIYi7!UqKcQ>W$$U+n%6*dnp#Kt+IrDs7KzglmP(km=^++S;i=hw zF-vZ&_Z+ENAE+9yigM8=8N3;`JBA9elM4aUZSWOzo`zwN129B#{>Y=Fjm%#;37=_XXFWA_n^{T#ZT#e80IDE1f{5mW6wWbu-P zj3XS~tUBiq@c?}QV}D6cg98~88Y>Y9+`9H`&5b8~b_u=CUUS)J0hp-}ixSt1T~kb} zt19@Z@}ll$SMdCL4n-~J*w~WL+{c^=4j5vgZHlU(OgrF=iklWt06v5rP|@obz@X{1 zOmAW>Zq~N0#3fBufq?)y2Ao`{LPuk&+#|E{qjdv2hs^BHgNmxWWG<))do`7f8&mNS z9dA4(e$nmhn4tk`57HerhFII?Ye!D`{0GBb;O%(J%nkf5t&9by{FPAAYhV?ZHIrAO z9|lUsvl@s3F8(sK3_mcP3w71DfYrQ@YO41>)6NdtTjHKK-E9xV_1UlAgz>=5uvkU6 zRsL*X(Qo$UK9yt7E6zYLLo*(gZuJG_nDh1~$KGCMLjW^2w1;+ z&+$-(+~IY(c3UeMx3rtREUr)+5v~b?V8LxWk=X=(va6a9Z9lm95F-EWm#R^)3OAbm*?9ifT-78c*wnt8LKGrY7`8_-c85nsotMU@ zopC|ztyfh?YB4}fb}L-50hf)5XE^3Gv7@P&dGS*|Vq#yC3&g((urC?HU_8fuha0OH zrbr7{%zCq80L`v*?B)bv7JQ&BHZ{QS;voF)n?jEwry5q_XUweDuq7M%(IIfXNO(yC z;j_yJN@=?M+qr7qS%v$MEz@kJ6cWtG+UV-r;a{BxYB9HGmk z5TUZh82ODtMR9-f9|g}E*1k{$R)SEzNY*J+ZN7tIR^ry2Ygk+b)I&M5F|M!-+Fv+Dr99tCFx#7#FP5068PQScB>joM zp`>}}d*TFe*C_}QqajNgI}J#ta^2HZxXql^5I==m(2?i7uJr>=V?UQ#FpkK0>#Q$O zKq4!-$;HF;ML{4GBM}7xCeff#cZuO)M9+U^8C)#fFa))Fkj*?u3l!+xK^Z@?t|-hcpe>3Y12Z!K8#44kNr zCO%xB(Rf`?UR6E^1;P!9H@h%w6wn-r2?jqnQ?B}Kh7}!5)Hx!OX<;kgvs`5f1ZQ@k z_0~k~?H!4m&B>lZMcuiH=@98sSo$Wad_O574ovdHXjf+fR1SYnPF2I}7_{PjL2-!W zA=wj%$_&tG3>W;PHyu9LjF~>gt4bvl@vn-sQ!yJn{oSk}_YI^oQy^^ZWuD)@QUDLK zc+2c-$B?-c3XG*&0;YX7rXWA4_9fh)^9;d}diYFKDZ^Ob zf<+w!^<2)~IgarzX+&s{Azb2G4s2g$(*EF4?ZS|4G`m%Nd;wz6DuI?~(!{-{K#THL zVS;Mj(kpYuLdo!7X7lMIOo=v)>-zc|+BCtIK4%p8p_shPJaq~@dJq4Z;|j=`Gbl?S zN1CSwbtM(6aZ54RJCv7`yi;Ch0?B=#vQnKdaplshM zZ}ZiF%n#Zw5H35riir9?Y^)%FzNY2a3m8u!f9liU?-`3~0P|@+MG>#F*XQR_-Q}dN zvpb+uo{YiuqFAS)PTj_q7bmQ$$Su$958U{m>GObH_pwgHW@;#v!p#HV13!Z#AL%+=|HC3=>kDS0dUTy?Va1IFX5C$ z=75^-6Z-dR76O!(N!M+T6^B{ZvUMD5b8tlcfrHYdSHjS|nvV823&LN8@7e~V6bV96 z&`y-6(~?RQtlyJ|qVfe_a)tI=xid^^zH}%IXspg?vE-RdNrBczj3&;6wqddN5H_EV{M{#zFtGvwiVvDJ|O5KBpkc z&#hEKY(uT5kx_D9cKK~~Rs<3ww2|;O6929s`_1qv;J>ln?_$tCtlNJ9iT4Vaw}9Ry z3csIgZAEBae)l3rz6ak7=9(xfgzphTtT_9KPuh?WPlco8jC_!-KN~FnN_pciNLwj6M zYJ7ziRoP!!nHzf`oT`@fbv(7H<@ug52tO=wV-nX}&l43oi4}ERZKF=l(`h?*L2>e0 zj;95@T@JI)3a4C2cB2%sxMV&wHMA7cWEd>47&zc)6bdZPJP2@- zC|K(9htU5HMF$tnz273(BALJU8UB9Vcwedj{Yzvg!Lf{u9k}!i8>l7o4}DVUcyWY@n9N^3rE^( zOYV<>LA+jbYZwHYqgPCJh4l@LXWLg|AP%5#uL}IU{kIVG^p~p@2LB6EHc)GAHZVHB zv7w?LBX28n6wZ6{(#w}GH}+L#MM|w534_lxjE4W?&+vAmPRQn8{feH!sND7I^}92m zXuT(o6;5Vnq?$<_y~S%mtY#tDseM=^Y(Jv$x9s3vrgy@{vF1#8 z*pPtqId1Z9GV1~LFPr3iW)0j9z^<%zZJB-O*#doKjPf+; zE_M(vu8xt+sFy~8$eGJPH>&@E1sqFe@M#OTSPtlwZB!$fG6fWw1n8tEXJr|Z>%!lT zDj7qgVYsQBWp+W)JfTckmm$V`g z^SiuVkYZK>9IsI&1^*hDpYIdfm9c7clYbpilp_u^Jclrxj5~*Vy=mBdevCZhI`5x; z86m-{`ZlxyTsg2I!g&hv{5#=VS~MI=g9P~AlCN%U9}VEbrOCqG@gUQIN*wpVIoI0U znjNy0MBS(=sL53ZFf8cw3KlZwwP<}k3{O#>_qQndsP7&ddFx*;(sOy~H(VE!GU}I4 zZQN)rZt3c7c7810Cf2HZ2kani%{WrTCJ{})=RCu^Co#MJ%LUNm&>UZp?W)kYG8{6k zFF94Zr;gz5FSg|Q{Q|;;gKzz#=cgVSeE#mR{R0a@w@Ep(9S6M`n+(GQmw=AJLUOKR zO~PWX=Rc+9@?s<AwZI)M_h@}wfHR=5|jQG#+E4M zkiP&mV!Jo<(>a21O9o*U8$- zbcHTDE8o>t#_<+KoWOL1+-ChHE);xK%NtFAUGdO?fp^+gr`E^LpOh@2Y7>Ggmm@CC z1N7bCt$_lVueKzU28I9 zlX>DiU19QsOW=Nn@;A}SbQhz-@`hlF3uiWRS>)m0*nFRTBSs8;E-p44C#~3g88L>s zQTl!T^l_I@zv!#kR*)rT5A`TnHQ++{WPf>nW)JHOA~Ib9_H$WaLa8yldImupQ!YQ7 ze6U+6Poj7%Z0vAFDWrb(1rabc2l^?k(*M9$lJGLQ9lzbKK^S_E!s^`%hk5KrfrCXU z#b`GwL~7;c{jQ^>027FTT=0!yvhq7SN1GE5r4LNP`}wXWWuHQBc+PrqLbIi@zXa@x z7QWT}DPN!e>m#J>?)q|kgZy>e=<5@~M?)cvEL-uC*}lvHzn`%URwl_s>URGi7&?p- z#=&YJRXV2R==dxhb~OQKWGWkpiv;VfLre~|3@z**_(cg&v-z2QW^Pjz4=ueSf2Thh zq2_}oYJr?~kXkFwf*)8j0bR8Z9r?x!j>=Pdjjf|-=R0R1wc>Q4^$cpfPS_`S9(~~m zXi}FZ?o1K$XpLSZ!QhBoA46YJhT#Hl8>jofeJzULIb2}6;pywGoqfSktfCgb`wPGv z4tdY{*Sz`lKTD_^_bC<06BR4sK>uOga6CaUya`OE8L>kOfIv;@5vVVx;hXsqmzp?m7SskH!&46yq`UYfGUY(hmi103cS@xg0#Hm|?Q0S1Fo z<$D{uD20{QX6VFqMeZi$Mz}rCK6{5$5`(uIe@s5j@$WcpC4`RZ>vX#gr%)dDrQ#B2 zSnG6Uko524GjV?ei3@)TCA1ctTuKo?g&O6jEl=pi!#h0#-CKW+>VJkS5Pncg7jMr& zWDf^~$X-~U8XzlU896TIfT}LO5BP!^x;*dcXLt#gE z^rC)4gXKg?Ry#VvniyyQM%%6`_<{Pb`ZdI&?HdnI=2Q9aG(nOQJHFiJfTVR}&}#s#(bxw#!KIB>-b(G!Xs{hSD&eTYxsD2=_A?eF zk9EXETv8}tjp0_w=x=3pCh+%?P9D^!?!t@MF5|h&HOBU+v%i0F?NGn!{B7D>jxk(s zvdjmU4L)9~$(XjacpT8u_2}AJG`5N<%jmPP<(adyk}lfquC`eKLn42FwrQ#)?bAf7 zr04~ZTa2YomaF_Or2y$Ron({u!B~$Zy3KvM6k7ADEUp75iqq5;M7+jViQ8)f2l_IO4kK%!dP5 zbQD}jG2k$K6xVTZf||30wyWGw+Xyl+q^TIqyoHj`+1MsAf6Ipozsm9s;kQ>*qBE7Y&6kCW+&o!MS^@1m|{b& z%Esq+m;5&j`LMyZH+^BT=e3o$4mWZDH(J2v8$GOy`4=t+r{h_V$Gr@?T1uU|nbV$V z#9w%{m4q5DoA&Q9>1X4%dThMPc}7SZ8wPBMw7%!GHhEXoC1+&2Xp#qyEB}Y8vx;gf zSlck30tE^LDVE~y7Tn#fP~2MFp}1SIP^`E+6faubQfjyr4ekWjgr9S9);j-MbG0w` zo;}~peDC|bgFkfhqF8ahww!`5-@vR6JR<^nGl!CO)~Ds?6l9=Q=6`vLQO8`Q?5Ham zj1;16G>03!-3Av>bSdMBT~x;k8$JJB`a~bxF*Z2v-%2?*y~khfM!dVl2@7>oAp5xO zDe?`NA{pG4er&qq!rf5#p?@v?DwqF4srHWoivAoyM?viK?Y$X6baQObqFnD5tsz=S zTPV(VAtn!uRV|gzx zg&$5~dC z`8o~yZKMD6Eo`Khn_jh`1ae`%*)qM(i)E<#9C1+i4i^Wiz6YwVI>UxWcm^)CIns5!$yS?9P*mTOjht`vh77)V{Qdm6 zljXb7x`z(-W)WLD+au;5f|2_wWS57&RPCUhNHEv|-SpPS4eEJT`A=yq?-}0)ulyJ4 z$jQW`hfs%;VI%wv#-IEXqSG;pbbFJ1TWEVoa1K8eyLwbL)^(mPwIw+VvG=}DtDshS zQ1d9E82{#8?hvp3>?GuLb|KksDN}lQ1)TZ5arA-6dlsO)>*jsFfAzB zF&vvA;FI{>K-u!K+2F2yJ*~y#>7N&Y5AqWxVZMswOJum zx9>>C$zVIP%^Mkem^6pfNbO29zQdg@9L%tNsuI)*R-gYGsgp_oWktR}$G=8neS5_Z zHBZs6FORBW17xLI%$x%2JlM0EBBv?_p@7hGbE=p$3A8yoDqHYlJIkV%|Gq`QY#a-D3VAfv6WWP z&~HLGG=#apYss-Y;K}iAhAAb^Bx{U>#|-}5*jspuR=7MD(-lBTPe1*`Hth!kl@W`T zEeip2uB^t_C|DESs49&$Bx%$c?HRZ#-X2w5ji&hFCriJqjZk=^;iwUzeT^F32NP-5 z) zQDlD8vGxuWYh(=K>EeiD76*uB4LRrCxEXlqVkN0osjkjku`}fN&yjs?BCSN2c+qI! zeu<7(nl6d1ao8j^(LtvA++)Yi zGD#&ij`-)tK$pU4kzq5F)%?Ag&nsyDDqlGXb)6Trb7~~2&qAr>^ni8zX=99(VDiiv z>pR1A1(^5c2rPI-&)&-2(bHjYz#zRLDQnM$gj3O=dlG}|M8Q&jgj3^*%i~*2F?Kvz zXR|z%nQHeHAY@D-<%hpyAnCVVwSiUl;RkjIV1O}`y)RQmV0hOXw( zCet>zNNlpu+ibPQCf?{V`iC>Ji=%dG175!DgaV;(DaY`tBJ$H!QgX&wqf}9ei zWJ?QagT!>C4$z}WEID~CfR>B%8s-K94O=onfX>UlLyF5CT;YZ{RHIMhtAVkL9#l6a zec5S3%tvTO9CWC!P_V;PillksfTi+mO6*2oIG37_4%wN_CHC4f4pemUut)RfgA2x3># zkud?((h5plYhL4+y0LHBI8=Ooe9?cijbm2>XT;;4C+X+k)~YX}-R_?DSN3Tf4-rxs zN`oRSM_==>{zmJ-|Ljf$=Hc&WrPWyZv`AG__H$(`X}{BXiUm)l$?&Ju8-rWjkw32^ zg;JPjV4plabJyiO?K7rwvGcQ+nX=@smEp7!MZ@p%S3f2RJzAUau9PiKbjjB*Q2i|J zHMeReST0a?SPuevq<5#kV%CsPA@mrhZDM!cXa8wsMz&914(-SnonqNz;bZ)H$fa|Y zJ3QLt?>|(QTy4%X5X;(=CI5Bt=d8OF89tF-EOIR9iOAT_a{aG3ze5dCMdb@oaqJA- z-lt2Rn9+-cj&G>GuBM+9k_?m?sFs5j*jMdfDo$VE!{wW0D zc<|3A>&QRY(>y!|Jgx%fHqvUR{DPn!-R_Q5a-|~OqQD~mGqmOAZxkyCkwkq1x_lh? zU@`4W4L|bbwYcZMmBa0?<>@awo+fux0bi&B1^rTmK%Me0A?nG5J>0;Rx!b;oA~ki5>^cJn_|}Sab5hjn;%Sr(Ck4RZR2K zpT*Cep!ztf0&zU&<;EBDb9ftv1lRpN)~v{lAtyL&1pCqUP^Wt?ANnk2?%70ch4`V~ zE5?)mCE*p&A1*Kl9kzY#2d(swN3WU(c{%O=zHqUM;Om*4TKTG{T9Izqnd?@6(Ba@m zX6RzBbOBt^^I`J#cc0-b!3c$&c4m@+-~W0I5YXh+!?k=Hrhy#yL7B%S(p2e0k=y>^ zKT+P`k}fK%|E(d%@V+EUC85;#8!(nh5ZKX0q3gF(^7-@DsNOtu>k3_uo>_HT1gA4o z!x{d8a*o>PwA07^@Js*T7*8(cIFGo;Z09HAWmUm1-%jLB-4~a$6t>^%1ubqJs9shi z$w}f%3Q71a!a+(FOx>?rBYIpMYm(HPVRB17NxJXMl|oa=o}ECM^2Rz3Ro^em=NOtw z8Te$_=GC{;(nFl}Dt&^;F;E|?lhaPp>%?8eG9LpyQLg;D=JoYCSr@^YZ}#x5VB`1D z^B*L^%iXS$tG$ji#*}O+?$kjCqa=G2zpd>8rA99l5^WQzeyVTplZ~DQKv^_*&8QB3 zmk`o)1uD8*zKIp;BUr-4?{z=j?)VUb#!kTp_S|~YY=e18)?(D+NGlnHV4DHnPe_7e zT-T3;iBW;5LDv$Qu&Eu4oN0w;6WR-ID$w98SL0dghoB8eYnGHJTAc9c`ddNRNwj~^ zraK5rND#I~X=5}Y1Y$ohEfb!x(QCs31bTvn@XNYUN`r~__WoESa^81%A^2uU57ysf z@r1s^te5h{7(bPWTw0p)gJ;F&o|-4-?4!Fig`G4J-nt}p+}vk$lvRWkNhJ@IDxly8 zq0F0iz632#;rNcTgO62zX03sTJ@bJL5@~1y0Smhb*N;|S^!%cHj z<0Xp53sV)G5^7u(iWibh@zO2zBMX7uoGl+dSP+MvKC9a~(QoSJF-D%C%JyrY4Drdl_k`A=xIp2R{fz&KU1 zU|~8rrI*kf(Er#qvt{a@@-f_c6*~MWSs=9vWu3vaqh73Kp@neE()_rrg%(z(or_Vi zNkD}ESrk{!;cM4dQoL0Re44}l$V!QBr(f0#J-ppPei&N4lhN~=- zHTRf_XNAK;Hqa4!exSzRf$D(UI@FEE=I#yYZo(fcIbX_GBn1iEua$FeRyseCtt{lx z|NVeuL6qum;Z29{Cl&uOmoJx?_VE(Vt8n`a^_fUacybA~d2j_QsC9Lzdi^={04^q! z8W~ch=;++h{dC&^Gbs8W_s=zf+SNG`%M9=P+dif{_FniG^JjLmmV3o<@Rl!LFuIKc zG@o~?K&jo$4MkrM;ou9Y^sA=tV#&qMVRKzTqLXjL>qkqW(CoWDWjI55l=AD3`jW2u zZVg8N!k8)88lP*|bpg%j{m507G9!HWgbR#6p`AY}$e#0AQ?sxO*Ir5_exT{)YP&zS ztMS|DvO}x!G{Bi%tk|Tl0{vSs!p~8QfUC0v8xb72aEj{UK=yiG;bwwG^E$b-lLt~T zAl`g2Zf1jqTChAFIZL@)-2NS;M2u~^sE_?pQxW&J7@SZO&Dqh`1V}#J8(#Gm4Ds?1 z?0)nR|Hu-X)c*CEv0)IK-#|5pcnD@-Gt-|FwLb+Z%>Mw_1c-S&T?8)#O&gmwh0wh1 z33~a|RQG9Hjm$&9egf z1yy9Iv1MmHIvFa_z}5vlJ4G7#?*P9RvE(#41qM?98M2^i`Dfk#jN`{|DAK*;mJGW# zI%Y(5t=J4^0POi}@kcF-s{GkVt=6(51Ov$&J@$wYtB{9-6X)tp+sJMEE~LciO#<|z z@5ZbR!kr3Wu#a)FJQ43}Dr8bMUPwMtuu5x7Dqy`Ce`oKIcWG$q<%7OMeLTGSh!f-) zEQNerjLh0|d`6Aacw=(Cots@hufX`|dN{Bq_3>3w2o^PSb{&dVPh@FwCJO_S&<4{>_eqoVOh6-<5$*9{!w-yY?WY)%r`# zLULI*p>T9`Ow(R#n(I^1$i7gHgv<38OuDUAwW_qU-%#4erQ-U;_4{|%R$^YNP7xEm z{%W6}%w7Z8C}t+uD8~VP*GzoVR78=T9*GgQHDlHDVT>=xa?Ca8uoBSZCBt|x_MqKk zP3vm3_{oMi_y_gL(3+GGM0V{31dlnansVX#+V%059zLlkyQgc$-|(gPNKou57TRDl<#u%A7ieQH<=-Mi=SRJ03Rc!44gZa=yU(+XdMcPU z7hxTe&2L`g)!DmLW!<@aF6>7_Xt$;Xji!ww5Kxo%`{7qr z*UPGjhTmi28R-$P_czfTos83_{4L_j9xlQ3F=}nZG8kj!Ak|toL~iiZ_qveeoWJYX zSN;0#->0jKY4D_ASiLo-5Lc}dlT?fuGjw7>KlZ%_2|NZ1est#Xjnj4XpyFj-|4>|T zzF(6Yl?+>S*G~bq9yHynRwJoCBBKM>`XoN{ldpeK0mg<}{F0pP~lrn`->&<`qW`@r>MYYV-a?h5mKwKp1 z%sK3!OVrtD?vnxM>qLC~%_KPlxB%UepA|d?6yj(YPEjJTt~H4^NYIsDFKO;2^|fe1 zF(54tNNvw%{03A?>0&94fg#&$6vAoi?@C2oOE%owoOtL99xd-fQN=;&Msf04%Js4ZFc%vT2Tgl zr_yv#=dQbU{RbGtuV=rOYbk1kzJ&)}CT&d!r^@y2*_gXvakjpm(J%X(W3plDj)Dq$$@CDTU^hq*8>S4viBilrNohe1VOVNqjC8Rj4 z-zP<#>D4WAOQMQD+xs+75=}Tf>JSCVQxIB@F174Wp^?iql<8`(FvU3%N=U6F3h&nv zTjzA?&rt=9_lbllP=0|8nUI!>)PXVl{kIaN=`s}gbcoDP0^vdZ8Vo!l3i!!E4|w0W z9fqJnf8@;A!u8pzm(}QH`Mfcd?Nw$CjS*g4`7d;tV@^b*o;iyE(+p2n8WoC2jai%b zm#>&wOd>3sXNJEK_Y+i5qoO|cXLlk9DyT5if`0*!|L=W1EZSQE!Z!2F=$-hC+lFOO z@(lE9FX0UdtGirQY0H7(M|4r+5$PcXsvXaBU*1V>Tf}B>HDbOMB`i&uHccBCBPUIl)MY|z$ubFOe4j|_jV&oi-IUK1c z;g1~{+H=P@r;F}7(4LXSjs|-9Cnl17z6w7$c?t$m$*D9vc#WWA z!(o?z@Ub`+w^m4`OykMyU)6-;!Hy9b8uv)4!!f486VIcLyW4c1_aC+(-HU%zew|mj z&+5PV3U3ksXkn0cL_*jc$UJ=HW=H(x1O1zd^&$PL(6AOq%-=yG$HyFE=>NY8bFNY; zG**k*u!$9GKc#j*jS)XxR-%;TFQ(a{zxSoI_~-0)QL67GEaI&Pn|>BzoxB;A7+@M3 znCoe9q|l-5L9}+#X7+1EFCJbS-rz*n_ib@5^B@^6NoL;-iAXxT?ivW#{o3pLhq7FY zBLpw(0Zm^-6^i7EUolew!ucs*^Bf=N9SE@R{#9iK`vyf7K*ewP4XScn@igsC%@*DW z8g}%__1D~sy|Ik=ApT-!qRt{#YRqpU@eiy>X<_)kS^!iGq|XB>O~Te2RF|*?5RZWM zRF(Ufw6xT#{+(Bc1TT!ICL6Fd87_y9^V8dkUJpfmWHl05O@WKgTeLG%^>}%y+`Xm1 zp?+aYr-TcX(B`R#l* z35)^d<7V#QMp#zd_wl=sQRWp6t&NwVL@{IgYL_Ij-d8HL7olWxs_RRQi8}A30=?6| z7Dnpah#g>qDZ3ZH7J4}LJ?uB^uUNb}Ps(HO% z0x>_bI(rE|-H|J0FR7mTaYMXA8T`|DHrC8QzZ zb&>yVX@0)_F2tJwXuEE=F6>RJA| zq@JK+)ZNen-KyG)4KeQr>Hb*ws_}VIwW$G2Nic@hG;BSDXBZtOVmWA2bUHG2Cs-Iu zJ;=cMXW-E;7!<+!c9A1H)EI037IVh~8#3~^yT_&{ZV$KqCKZ)8m*m9OqOnVMQH}bf zIF&thmAk-~2T4Cl*bdd$nIAzNW?buRjkCo2W%|RKLI2W9bX24fQ0|w_nN?@3whYxL z1GkHI3W#Udf|U^((H*gUdWi1=RK~(sSFZtmILx9Q`hIC;Z>n}Ozvkvz@If@vVs0}- z8gPZ%$4)EPQzZY`rAeKFAyuQY;A3f$ce?jd#Q!p)5U~#W!hQQlRr8P9bv?k!G;kg; z*pBdN*Qjp+;^SF} zF&=skUO3H3wg4D!#q7*ikYI>s2=k-aK259@H+60Lb?2R2wZU$`#1%qhvu0;{@^NOD z{}AUQ=+o+7*cwp>m1EEEN4w)XRg3h&;!n;v;|BMySt#i3&%RzAlKfo^{W92)>ca;1 z=F@?Wmv_7Xamn$?L??S)D=?>3-Qk^i;;ZK!&HgBAd^s^jbqq66sQevTygAwERSJ}{ z$}j)NEeHNvoW@h<@z8%n`8|Y$I&&(`F=z#5QVBJ9s7qxRU3nKl=7|9QmA#OL_OS)v zO!L~cXnQKQOBO%s9?)k5mt?JB|9Tw{V(c{XEe)x(pzq?NF zJpK1k7%V&=`mvb*3Psh%X6X9ke(2Cz?Z4lzpH-5U`c?Y{h(71KSKN22xM0rGXnPk?n#B8ZLDv`x&8G?@#%w|Q58UM-2$#Ap=oaVk zQVol3!N6&KD*`)6H{_GCz8>0h-k>(3{GljPDV|<+P8lYg0uV*Q_EL=#wtVn439|M8 z)F54VHFKYAIdU5-pg)N`p6y-E{e@U$RzO zXxvS5<|lqn!4K6W8RP%MSb?8Lq^RRBKe(nAr{eig{r$bcfSYc(xnO0Tj!Y7}MAqK* zznwoSs_ts|nM4Cxyd93?V8)Wj3}g0fmK4RFy`9SR?7y${CrgK6MG+>x)1cAN{acua zH+UOJ+aB`s*5EiPD$}{NRR598ybmA1G|s8(q}@aCD~U7iUo$J*k=|=ac!4Tt8k_;o zat#@)<*5LG90c&n`&1p4H;->!t4G1GUd5m9r--l$P5 zvZh#dwdN>F=IjAngLM(=XLa>bN|aQH+WYjMikjx0_ZoH<+Sjiz`{bF_j^zHvsV@%K zl>DO_|F>|Xo11vZJ=@MknV75As>B2cRaI1>k6?ZHG)(|o>m=G#R~lZ9$)`phHV#VP zymNShXO*k7hyV|=q|rjj@ku20WebKf;$ixSnMAcei|Kh;1_O(7b0ddr>*12Bqu)9? z4JWn9pG1p)iTJZ*u~2NhRLoDEJgYe9uPl|(%k%VZ(35>Oi~wX;k}_~ef3pAlGrp3j z%_kkJHkN=V`dY@nkkKehx2#>wxix7~?uNu0NG3WCZ`*#~8b3d0i}a zsfwR2x=<}w6BVNVOylgY07&jf)A)?)z^0-sH0V3j_tS_adtxAyBvs_te!b;t-WjdhUCl=Oib*%^=9iE1=J|?< z!Yjzv3Bs2oqSbmuT|QYm5U-e4+d`HG4j=SdJ(?NhJ{4tGB)%{+W~}DBeK@-3gbr^h2g-0vg>HbDZ@C9T3$XAtNT=!kSN&ss`QWKfqi@$Ygc2i>R+$%Q`NlL zDSedcqv_|ogaB-O#%ob%;gmNG+x?#k^YoeGnhpMg3Fb+wsUHGy96NLDNd-dNfS>rE z#mP8TOeX6xJu$QaJ_pW>vmjF-8yV{dlR!x72o=KXnxL{Wqf6ouC(Pm5?l_)87my3b zc4!&PZasE0>Cg}ioiX*<@17~hiMsQ|kuLe(m#H$_p!(Ch&rYJ9B!YuKK1wk3Kbe3-dfnkaUm&FX-YW#Buzlesbh zCRk!=PQom^o`}R%artt9T=Bm;X`-1oKgD-V;A=QoRkOt6~jpXHf9(mO8OlY+jOk}AO5auIED_MeC_=@$Ds+uWQJ*7p5qYxE{Zdz)HaHozTT zDX)mk*+~=jPEKMr!EkYcf?ZhMG8I&YF6G&7Tvbye8ywujBFGY7mzf>~*M9lI(_R3t zE;VXcO)jIlCZCN?KtftY)}jmtS{Bdr4Am)5$0;w4m)L(X&X6Qc#PvZBtYe&|T{5gb zSO}(=jK0to?$SN&kpG;^qK|#*dHEyywXQe0dGgjr^+5}&I^}g1V#BiZ9m8V{M>n%jiJYOEfR#!PV_VUD6h)|YEN0^FQbvt3^ zZ|a_1oci_=iJ66o9kE@59-qn2WTC$-Dm5r0lwEl)4vslv_l)}yY{48owx7>Y6~>A3 zM;8GI1mZ;m%IxfHNsedwW_0|k)IC&H3$Js|?h{k4*rq1lGF{f0nVCj-%)G5NH*@d( zY(q!}TM@mEwECyv%twvVZU=UD5QOi2m&h=l7r&LgCTZM4Lb$g~(5J!WOg zmQkP|AH|T{04=L|fG)i0Jyc)#(Ln*#pCY$nDrA-mIKh`8C(ab>uO*hLGji zU{`AU2i%3H=?C|xp@yOl+m63$e_Ea+-YMnQVgV=CrlbF!=#;UueOB$_puXtNSAb3u z?@^ymYFmUCZ;HX|o`QgOscIhkC5~?;Jw0`v-VrJlAZbHxCp61Qxre&{#gDb`#|=tU zi2O>8@IV0CHhLdG@@}(y91b;#Q?q2OTE;&syv6$Iu8}sPhgPGfh1!U5^-y!vIW0 z_%G+RAH3A+&S-lIjp@mPosI_kGIrz zB0X+TgSxk?&-^42L)I=4?uHoBa^Ko}jUg*qv3-a_b9>T$M(_j|XjUK~Mm(GywUIS` zw^7&cm`Ja%le%y}=%-xhz4E{O08MvlN=dHp7F=y2;C5S!4>lWOx&JUetKu_gItC;b zg_P)RP5|6mkwp2{aV{e~8PjA@ULF0cSOtRBSRlh~rfW0p zSGPL9yk8|n9&sv|VEH!pAQf(pEU?|O>7eEG8I`*%t+Gqb&e16emWZbe1K z^@rX$-aiJ11fh0msq)9|&+A+;XvBI_xnl9hO_>Hwtbj9zDlO|$-aCWPC7gSvH6;g+ z>*Som4_*nN^2Sdp|1jHyg%H)jpV)U-ypb%J4JDVAdn?{j49)!n@h^D%{qPjm`p=MP zU-a?TThWPIE>M3YU#`#AC2x!!$F3W4_E-3J6VJOC<5q5xh+jX_0H;XE#r-i>Ivtnq zk-oGoHxA;>l>jyFKAM}=me=?w!b=H54dP*LA0^|9tpB8EAqI z7`-86jot{C+aF49iX)a{A&>b=pIzR4(*FnyxnNrMF~Aa|2?aJB9fs+Nfec+csfGJo zI4NpV84o!&)**%KfdoDA&UDf5*&F)BPP)+5^w9l$mRc61UcJetRP-DWbq-m=p$bN- zIIjg`EN;mzU)JBOe__vjBjJ;4{u^Tb)CRIS9K#S=L2@}eUN`M-Q~SBz@CcbUy&%bG zwO4&ho8ivud5$OkIHUysu=_@PC7$vmfZ(LNnWS2uGsm%3$0R#~AGL!xf8k+}0N$oFAf2uqyJ{(Un7m{ji*T1-BUspq0k$L4D8TZr^+g^ut{38IH^ZL1CF8QK4YbsK1i|rd~t&9mk`B z%E>oYyK|NBqXai=@}vdtUuGRw|I~DxL$THZ@5xE)oCe0~zBeH=Ln(#1YqGL~yPuwE zZU%P-}(Q(?VcX@SY%pTVHg~bAyr?Whne3{E(Hs0pRw@KsTOa-k&8gOL}RU?w{r^H11zGnT(>UU z6*bj)1dz=lZ5B&gTa3-kP5u#7wNlhkD3q6vFCr!eOW(l2fu4>fFV^ARjY&mfovdGPJ8A~4$^af_ELko+ z7-_ri9j3;5w7<6BjVllevH6NXdNSd!gh_=zZk}($H48`C^KCln&tI(m7ON`2dANZF z!0&UV2BcPR=(!V}kB36ko`s2!HX-TwH2Xy2@ z%T2+84HH@i-8N)6n{p=$X}n^|*_oyDwI&E@>?63k>ia}l-+@tG-I@sULwUxg4hGsgdlqCj-j{V zh3i_#wbRm26nlGo_q`w3mj$l}xPy^B_Npl1nMzMhdgObektj6yphKCbvH7!O5aPx6 zHF30df5~RE*on!t$nbTw+nH9}52KP^a1!xb&{GujCW$ux8kR2}e=TRGj2!*$VLeZ4 z+aiL2#4rzTp={?y)&5a(+MnRJn zfAOOfpdNJ8uJ1wLf{(qxSNVOzp_0NcpK*EjtHcYT-5}x-3@%Qp;a^%(@x<={vl%oo zia}J8|B}ls9{4B-PW!z~2xv1@XtT#Gt3svjn{Be%xA@(kGt5Jg^B^k$6rA3K(&LBE z8X+`>yJ~(m8!WxZq|lK`ewDA^JteQ5gMkRSo+`6T1!sF@3f7=FeEvFrnK8XI3QXPC z^!}1+5dgN>)YOKG_BbNB6^7XCX%!|Pb9K*T#z2=EN)31su1jlO=HMBYp&jjkxiYN% z*zM>1lt^`uJ7u6veLP3*?}nBuaJTZaEh2}e0wS^k({-%;N1BuIgLG^)XYP_G<+$J0 zs=v6HHW32(+l`}*v-XX@|3duo>Z-WB95W*$<6o<`XjF}%%o%0ojuYE%2|TScn$9~qdhQ#TG_fj?$`JsG=P%GVNqechOu%99sAIIjOaC`;dT3xE+ zgB~{fM(0Bg&3@n)$gK6s{Xh-VOJJ{mc!Rv83=P-nzMueCT8#D*i=7QI<8Q2=iLYL< z7eWn@x9#rLQsEF6sR3ACvguzX14Q}l@6#ac!jO5#JQ2TF#O7GFLgvXg%l^VAJqY99 zg%+W6Iit;2M(x&|l9#!C2^PqO6{9TBKsJ9c`JV?kj!1{#FZW$&D5aF|wzyxVuZ{It z((T>T9m(S=voLMSA+&UyD*ROA^Vs9jPZY55qkMyv089QJ>+%%V;8sIJ4aeOS))COD)hQNG={*X zlWMh^dSQApdU7xkX9V{~BCMd8%Jsf=4Qd$jFyGi&@eH{*8eBbD-ZEYhHTAh!>2UpJ zP*t<`Nh@Ui?aWPYoE}uO=y;_srtfjH0hSwj{@O2}+HW7}LY_<8{JcC!MI8r*JDuJO zAa5x{W4S|a6$LOK;LDTZuD8pTjTN1Qad)S~Pgk|VC1}#0YeqNPL(wdrrq_nJyPc>N z0RRuj8z=DjDE>BEFXR;O$L4lieVo8ZUHS` zMfKZ{?zpb--P8m1;2FC8OT3R-q?M!K`cuyC?xWIy9;Y&(ynwN8hDly%dnJ!PG>cAN^G3QwqLSKSo!frlvmW>?y;y zsW{|cv0>F(f^ZhIQ$7sOVC}AFf>XWQ2Xr3{GTW?F``GT-_8U}h(t%}fXR8~x`{4gt z7C97^lwkfewe;~LboUPr@rIx8CT=0+G$s19O#uZS{UJcE>R^4-B3>7O;RYuEWj-1Q

    C}%DHD_))Dr4TCg)>yx?JOwKw=eEA)JvGg{W+1q5)-XM zZ_lB}8?%1FQ_#385QauBbt!;6(JGAHBun825+(+`_;Ae-T``)`;Xn^JeR5i83KWDu z>iTCBgiBhvg!%1827Nl(?o{$5eO|61=GIWcV-M6$`o&z;thyp1(E9=Fvt0cVM4s# zMC15lMN`Ii+!qhF?Oh$COeSM$-XxzD=Y#VRZ@B6(B4kk)<2(|}cdb?<%8h2k39@$r z^zEpQmX`3I4n)hS0GcIev#lgQ(3C5tjlSLUaby{W=Zvzw`7wBd?kD+K;*PKPBFW4> zk`5=Dt_B)>>y!3r^|Dv2F~Ea<`L#dFv!zVF7wsZ9(`q(;JF9(zta00%AnsdoCcXrQ zB`sH{En!YBWn<$UYE0O-Tp2GHitizCV&`C_)vY;Uh$HW3oQe`G$B8z3T4R&kNwZve zHdJ*+)qW4^ugi@@7ZgyQ21)dn=pj7&31dFTBav&OQA*UHXjwv%BuSiA4gv$tm8e|G z-UR5wYQGdhDiFrN<}uc)(Q#J6z`iCT!g!bWAf}0+ny#^3kughqjzvY#Axr_0 z`?M;$KvllJVab^>Ulm|c6u!$5zY2>~b(+AvnUdbroePe8jeBX!P}R6k`w9~TgB4Ht zm^dzp>cnlx%k;hX7}&H)T=PWrHj8bTB?Xn~`nAG^&X(A`k}P1#@RRC(vk`~2v-8o{ z#}EVd=%(ilu(vm`wY8NY&toR%^HEYYwQC8#!MOmdzvHLCpCb(N=I7}o%->kC=KL2K z$9q*UYpPo!h)i{dqV%YiiGg`xZwU>IU{$id474mvw1=iIidcj9?4`+k=>E*Y?8l-2 zET}|RjDTEsj_T?7O`C)FNiFw9IKPBk6*oGS;1h>5b5D;H0+4ReizWF%nWgt`L$Q)q z?@V(jM)#*Bl(|f!YiyFyP~x+Gn-;pG^rPaSuKVd3oKSbX`21VzjTB#4(-C+yUSum} zF#g|5EOt|{QJ5BTj;!gu51uASJZ>N&a>RfJ1r(m9w2q=++i1JO6tpAEr4&*I2rLLC z6}yp)E9?!xB;|Hibn-!ipgSWf`$qr%r8{{XoOeI1v3fkrd?M=6v;1?U^r{G)5}V0g za#s_0c9*;gnezr|=2L{tdt#@aaMZI=<}}`qQo>i8lWg;hn+ zAOzBzQ8(g%zv;CoDBVGX(PvbSnHEU|LARv~%^cE(O2VV;|FnI-1%6>3HFdr}YOp-B zBqCYt@!L?+Dn|UN^Rs^tyv+rypWz$%>O~7WTYcV zqdElkQZ|jpFO9huO!=E>c4)Y&@)Fm#YJPyR*kZP0YCc;1iblzeO-x_GWEr(kb!pu* zMWllTQ22LFILTQM21={K`-_z@Bw1>ohhvj$3{V{moT_rlt+H16_Bl>-VzLC1sZPZQ z>q{7+YhL7FcT;<~?M*&A^O%{Ni>H!JZS}O{{y8=_iDKuacJ=ErNQG zWIIePE1K^GctDmmT}_SWIi*NEyK9*N;?XgfC`$Wd;Kz2Ywp9`lcg0Lf5$^czO9_<% zGR)X`R}F%N)GHP89LmfZ3F)(j8QOtKtW5N;=4p}ELgAxr20s{5-KhbTbDT2U*Vrg3 z0>7O`OEfaqTaTIHw**hP4eEKrCkUv=@pv%)yd4uk+%y2;@Y0{nLuYTeZMQeMK5hKX z{0hX?j^xC+3-uyCe@|o)q7-tkmv~G)h#)vs9C~Cw8);a6d5izq3k5nLe%>>K!y9rFI)TB^q`qWM89$53X*#SO%7M5~fQg>}L(MiQgni?cWz07ZXk% zu;6F(Ev%2Q@Q08H;qNB!xbfvUL8qO~tIXKRu5Z{Ze`$_TQ96nJ4#pnb4<>BL55V!^ zTgG2a7b2Px`3)dVMDr_cgan8ScE2OBn*oc$;T8hPgwfje^0Gozs{7D4BU#Jlq4W>ob<@dcxqHKt`=`r&= zI|F#Itwc*aKuYf`3Za3AA1u0mT#G07J?w;9mE7Y5-EYoYZ!>e zwfkB#m{`4RP=B2~yjST=kbhPdX<=8UAR?g0XXr?#Qjn7hOqimMFS|FdsrA+jFmsIh z%aU2fo=3S_nyHA)rnaHO-c9_H6q+ zQ&0)7`E|Tw8{x>U?x?!>+#Xu=C{ZID#b#%v7|Um7c(k)_&~0Po@z1&uPma>L@-5b$ zIAAug$S_kIljrIRKXg0j5K!S%d4z$GFvI6#rKYx8fu=S>Q?L+6r^1c(V5iJexI@I} zP`}PZm{hP(e!+`2y9=S0q*5mn&kV`(3D&<$H}#-)g}@i|eKe^PXYRpTy*Qw}Oo^9T zx!}1= zIrAvBUjjMkk5`B zA-4iwq+xsP5zQuHTHh!Z94~bFhB%tyobTV5s*v`hrGmc-zg` zxO4$3(T~IJ$Iw4o#Ju&l;S=}Vj3rfPaI9wnOV)3}hRfHXaqu`!_xIw^z60nhHel^F zx8mNL)}cD7mH|3>!WjjWaiQaBN;MYHs~fd9E8n5<#ibf4cD`HiZQLQvGLQ4|28>We4hP3*CXjgdaKjr}#u?UrXvi zQ1&}_c;x8Mq}Bn)zntt-)dJHwyd*TJI|ESkWFk+fbXU&y)X6|9#l-Y{B-v-`b1GeB z`t$DYZZtGB%=9f33K$z3Q_>$rL&;d z)BY;>DWgQA^ObJ(N4^S*3KQV!Vn?$;z z0!ddde^m2N{R_oH0Y$h-rIJ&3*^@1o8^^?ikLvmwq+F*o;`}W5i-jB}CdT2oRj91Y zAdyhPn#EYoLq$yuk{lm;c}$FF;UzMtuFPN>eC~!owFkxQ7)B@ZNF+0;t*s*DfQMqf zh@z7~DwRM&v-iQo1jY&lq^s+YPN?DXeILH#OubqFAUBSoi9CX21sZB9wDg$IW-&1_ zfkbsRsxle4C1VzgMIf0(63h*Cc9ThmlI9(AwH6-g}eRPiA2BJTEX&kdj<_Q$QpPEnbj?g0@9u9P>*AgRN3DZCuEu zRG>@YH#wZg4ZoBYBm#}2X%nR;r9p|oO|3x+f7Je_PnDPmT@xc&+F!?)Cf`eqQ=57d z9REq?FmVP^%F48`(p>Dn4Ub6npWADxehbTX6a8Y6kIwC(1gD&Ckr>DlUXvP%HgK89 zS{of{D?g-p*VG!N`zNv8qFnUY(2F2Mpac6=^&BT7om7V>KFomp`jtA1Hc4_64~lEBcs zwM{yKPKfA2t#$K<30ak&&xQW$=2wLbsn(^-+0ljLP$6AZAw3EgDuo=*h2qws8%MWi zT!2OHRucB#b*gKWuqv~VQY;rBbbS()x(g|B>)m>dknu#NfnxDcYccWq& zPN<_5N@1&LN0QH_QYbq9k?gr7oLRTF@cLBgOO%`r%MUL7iJ}=@$hRa^Qp!J+Y}3gy zlW=#ch!sU!k`P>ut|;BC>#s}uq3E2_y*k>_&9BlqIy#lu9;*2{nJ5X{r|4P-n=V|M zN`2(yFJ+HN_>7|;6%Hi_15QWkY!s;smhg{m4^+CD%f02o=q0IyI-MbrLE*4*om`gU zO}9QSRY9fGRkkj-KRP`rNzW{mqZBW5cB=HCOz}1~zfP8^^gkDA!lhf3jzz6Qr>jkD z3Y{L4(wc638;4@)8WM>Fs;a7xN~O-iE45dZm6fQhtR&NJb@qvlp1A$sbdgD_o>UfU z<$~|~_HOVPnn~5gxg6uIj02NupKpczj1vbY@VwROsN8;b_&E+byqM&|g}}kZ#LpK3 zmZjplj0+0E-qano~R`Z9_Ope^-iR)BdGMGO4gx`gs)ibz?_K0kBCS zP!X!l{864D;r3Med)pBHFq4|Bg$j$Zd5R@!n5bzEcX$nP>|Yp<68^BQp~3B8Tr_AS zmuz@33j8+tm2)wF6dX#!lucx695iea;uwX8OxG+4?~9U-6vrOguFWQdnxi4xn;w(- zbvzgcJ)5q@CU-s#zLKVBn$lAg8E>02E}>1SJc+`OCe`*i7))?tyZ>CIS{(Y(Hg(4) zeIRc8@b0^{T3$mMb<7K<}C?TJJJsZWA92zjMQ1u8s{30?zuZ1XJ;YE?$Z((A9vn>b z>ZG`!1Rb>pHnKn(&LvsDi7d6rrR1J3qvntr;!&Jvwuc?cP?XYO6sMXbN0-8nX}&I% zdSkl&IQnz)-h`H;gm~)0Po;-()$ii8PfYeAsxv4mAL?Y1>7JV2W=rfNibmpcI&gd; zS-Y(hh0~`J{;;*p!f;FZncE9f{UEs!mEzE*Hj63#D0|&jenydp)cBk|#o@x%A#3A^ zisPcvbzS9pT-QZ)bu}`X4D$IrJkOh%!*yMxQYoaTjbQO7Um9S)9Sj;nlVXV))=6hfs>*QM47Z zrd6g@w9oC6PU)FeMW$#_m!BmmY{TI%N)&=Lia|$T6#k_2%NedV1!zogX>yAnUaL(} zKuSK_(6Pku=knofoEbLq!N!@wIkV%uJ(D_5D4L^cw@~^)LMysF@+gNMQ`sDz-*hi@ z_%l6>+uA2#JV@nW9Iq3FVYlfYhciwGzv;^h6b*7XjS`}(lVzs*gK`{5tLRhsvyCn= zkqNqaq>eJv0>>2mw)mIYPt+br@W&mTqeOj0iN>KKex>7?RJ51yH${Isd&ky30f35% z3V5D}L?WToFR4@t$z)P{CZKc@#j~n?R^dRZ%fj>dz7N-RkxVAVvR!w6W@VD+d4WXm zO9U$=oJ^F=T=bJv-HszP??SXVp7c21`ypLR)Nr>bm3pJB)h5L1Leh{a&r20-R6L%q zHBoeUG3<%S`l5!*UI=`1bY#1Z3$=fyhUWR8iKx%kT`0be6Hg|3C608cxYjdQRq4;? ze%QR&K=IUtl*@62pr3E~6xRh$Df~8Ti9!o;yc88~al8_8zU<{VUrI7@;zUggXGEiK4oGIK(6GySI>0CQpR zMiuxMN~lGJGs-RYTo?y7>$iR0XD<3n4)$>iC)>Ib=OeVs_UWrAPO_-Dl1BE#onL3W zA92-Su#Hd%_m9d?Cf`#pw3x~?)$dL6ji>uZ%~_5r6K(S@qtJ4cD3mzXuY$pJKjXxK zZCX~G^2AnFa?u>;1BX%JH+iPa_E|NP`K9=fK3ygqcP^tO=h^`xtwl7~^biLh+CG0a z7fzR`HAbS$WjkLK8!0ZiYO~hq=KDSd2L~}SGJ1Nqamrdzh{FGMbVT9*9D4G7 zKZv6O{#&(wT!OWfAZ^0&OcX_w9AaubTW|dN_+Ek^N-3M{Z`2zT+uSN?W!wt||M}?8 zDJRn!3ljN29X4#_3+Dha!QWfCKUGwRqmR;lVS2Ewy8c$vPbT;?(MhKJZ-ak|pQDDW zo^Si$tt3C^qQ8y)w9PHHh2K`b*y^V^YPigWew^$1B|J5k_KB^2=3q5(IL4tL!@TfT z>mR3mU@G6E&M&2j^PyiZcz>=2fGGe`!%4!;#L$ua-UN|x;o_~*;>_uZ@?6oyKnHQ+ z;H}m!G!Mij4=#q=j<+%$#D#Z>owHCz1Lp@Z`+f5I)P z+6;+DO!s7*u6jB3Ssax+bwY)@MJoMX@&p@2v{WTxN#$DIjhT))xR6*bM2)JdY{ID2 zzH@8QdEYpumV^PD2#?bFsHZ)oRftXa$7IctHF9BDTy;{87Nz{dg-22_ar-Jc9O|lG z>)vvW%0Cn>NuFY&_L56eFuk$m>TO8*PXd2w^>1B8dfi$~Ze*zbIwdJ}GH_4(aJ;00 zjgrL@r-A7qnY!_aqFk}&$@`bea!yW3@JOxM6eelS3mg4nsy`(5zHW`&>nBp&o7kw-nx#>JI-WM! z2d)+fCr7A09RHZ6uSlLvRJ|Hxx^@%&!ttSWA0&J%-ACz5H>UNCxc*$U71iAE6D^YG zKT7|mn2-9KdUAnM?$Zk{?O*yoPC@Iwr-(QFd`+17DVSCLRKkx^Sh^>p!U~l;7*Nck z!oBMG9vwX4eb5O6N?_;?XW{*&`s?;lwTCKUL>b{K{*XLbq;r&Ul|jSwtYZA|e&}#j z3UBz|CWeOYDJq@wOt%Kk@fV&itQaT*f)j))M~{v^Ock1LJPNf9sD{Tr(__d{J7_PxP7E_oeqBPwu&+?IeyR?#oX`1c%<~Bjz(2RjH&U( zIeApPrZcj2@_@pDPCx4CSf^ho=Y)=@RsAXbC^62$d!mxPQb)Ls|0rJ49qd%Hz{I}M z;Ym`_T&KrXcrmrl!t}@8sM+v`&c35$4M$HZ`cugR)gDo{1*L~6{85KU746v2AZHut z^pg&L6X!U0M&T|)RkDY&A*K3AM=L5gRWe?Bi4&$Po$Qm?XDT=;nIN&xbnDgekgmT@ z7IXHQ&VJF+r_Mg3^ggw}l8fomy>YpNq-w*d!8wCnW$>sBS4s)07(r+FQV3Tm3raCj z2oDQYonlmNtO|CO;iEecQ63^ye-&X#4J(xqK`BfV1D+ESl%n9g$drd$<` z&7o2%Iz^}2Gu`+UjZwm%!Y^g4aJ31j{-(FOl!sI2giy_IaGNNqYm!vFEp+3~6=t4TF`EBxPZ1ZxY zAt{uXUiuw}OOudhF6>Gg!Xq^nO$(1v^kmbY+M_t;=jhQ?9!SECb-1Qv1t(e@=FDh3OI zA0~QUx@IoLkXnlkFG*qJA|6fh-%UbyZTm}a=1tQ;DBQ=X-)-avXJc~CArpS$`cpF5 zR0eSK>-4i!wsHDJazHjoN227kEkBs*c@w;v$k@2^(M@QP+dq@EPfm|sX#Fnb_b7We z7y88(HzNC@^c4U~@Rq}yle_ThQtgK&oFQ^Xc}$RzFED zSWNJ5s^2BFXp=T+`n?K|99?t#6{UaFL$s~kX=<=@vf_O9m(=dDncHT5+x46121)%R z+xesPH{~D69$w7w&xL;BWU7RZZRAhX^G%%iONJRh>cQrif(mn?!a7ZfND@lKg#c5b z^pe63HbRsOi{lQjlEbJ@VA|X!NW=8G6cH1=P;22*7o-JAsCAfxph^z<+)c605ny8I zQS}NWe56y1Tnz?Eh^~t62L}f+JUl$(04O^F;&0P?mrAA3(9nR|+FH1-tEF8@(H~Ae zm^vi6Xd+$el!|w_kZ`GdlZ4<>@|g=!lti|e<~!>xy-F$$li(FD3a6rbsGdpQRRM;a;~76u(QODkXa;O*^FE3F}CTUUYqJq6VnGCh|gZsO9vCPPa;B ztF7aUlV_!{N-yMeYn14Gi49BfJr}8>Tel>NQo`fhMVqQ6DdwSa_9-PvO(+%6T>h?V zEQzr|9j;76SaoZXgsYf_-AHecg0espvc0|Nu7sHi|)T^$mMgqV*xr78(YkE=`pM)*SYq>W`i!yMk+)Nm*?m$sz=lY4>mXdb4{ypwo|80!Eqea)YQz}NQc{nKD1MPrFA2y zs0!|IX_M2Y8?#U-U}R(jRaI4JX=yp{^k6EFRqHb0$uKUW@MDx)p19?ZiT6JanRLF^ zCzXe`A(S?FxX}8Q%P)><2bhKqM@=KKg^`k*Qh5?pN5?@6aqJU!pp25LA)&(yAxk6| zC^jhsrZgCrofjAVM_tSLkYRC*X;a6@6t5=xKbJZ|1(Qjw0TcM#s6sxUP$0u_zwfmX9fZF>SJdmDXZyZ*3Vmh5Ng{FL!2P4m*p8&f_CuR%JNDq=!PQ>8M1x)6}&;d7BZ z5?Zj4kJRlw2M3i}ONFCLbd;?Owb9LC+KDQ|Ro_dByqdybnw}V^tsK^YoDLeQ-r%ErSU{;-dOl6vhT^-(kZp|jPbC@4DD*wL#03ZNKL_t)f_6}u_np|$VlF&p6 z^Ql6pZ3wbdU`z6tRmhhX)R7|CM!=g?$du+~O7W*k)!^1ZIU6MKa7-wz0?*+`;`A{Q z)>6ZO8#7FIHb#cd$t4wz(%dMCKr*Qxpc+GxBWDVm$zeC)8pjXWy%~4c+$JPBX%{Sx@z!Z#8ba7ZNNNHUqPpDcTQRIt> zY_&bKL@jv5@hk-kaipIt)l;j>JxstWQGII=yIm zp{0V?c8n;$H$5CtbJ_B+h^M zlax=J^-Ir8RC84eGWCqc%&%draM#Kb#oQt(OD zKT3G__(MA$xWWAw_Ua0w$U}JJ)-gjb#P00R5zwBQp;w4OpE!catyrmcn3yKW=`T zS~sTni*oa>f{WsB>f%u)qa`v@R~JT#JJlYTMt>)5ggJ*yDpbvMQ#b;YC{R<_Ias24 zAgOgwkxgVtT$O7n1Ii{pODB}$ zD3YgwGm4Xhs{k)uYn-s!;y_iwncGM1Ff$j=HBmef<+j--qD{A68$A&h{8WD%N3jha zY~h!t^O>e(*y!mvs&+@oA&t{cGaWZ-)I-$u+uoF$I-yJtEGGI}nl51jTO4+x2_4wd zl8xSoi%unS+!THr`Al76N$H4_i#GOR95q2~qi-d=E5W->BoS2z+++`J*KgBT;w<6D zb9J{HHeP<)5H-$2E*1Q?VSe1Lh>2I!#(*#VH|6D)z!2p|P#4~2o9}3fe^XDmbWh^U zjnaK5xoM0Ge_YsAT*X~%zEk04uAcXcTJs>v`XtXx#WlAyLLlyfeUwZx;p^~trp@*M z97jzI>gg|ATwI90arC!wf<&dysI^FRvdHvF!KiY^#5S6%2)w9t5aqWLhc1QhaC)Cj zxUOn`TRJMGClma{6|rVpqb2J6T=jBWc@|Z!#8q=lLQf`9Zzl36&dWBFG?Xw+OJ!MH zDIhj`Z(C19wf-n+v(hM>xvF!ea#|SKNWSlvAKosvaw|6gb9bYxYVGaqsH&Zo&HOtcgy9ofJUb^f^d z`FuW`BNBjl7bC+-OdvpgeG!?InfKS^2Fmv4)Mn43hqT8bGnN&ZSJke-_gNuQVqViHyIO5htwgpb(+TW-)()pGL7n?jX zg(a@nQqI?tt8?)jZz-H}As5dlE!o&8QN#D=VxMfDcZ_PEC8HR+Qs$H(UdNc!V#A+v z#T%s0gGee|N{Y3agq7%?wlT$zE`?OD8UZP8e;dm{<_$IF%Y=7|7b+MLHNwGNJSCeX4hhqie>Qf{=h zMM*c|c$lLNsr;An1x2HhH-Mw8T_;zix=mWuTROikMNj%pvdJ2#0=K2#o4nI(y6+PB zxOz3Z@wx9g8dBk2MX!{;iBe3|)JBjNaWt8q(;b}bm*@hD|2RIC$^%tx6V67G&#dpqtl3sj1eZdL~d> z!CY7AQE9Iq*9F$3fqN@}#R&)d4kqyj+fsO- zGl8+G`Q&RcFNDP1R+!XO(aCom{itYALJJaIz|p3O{MIR4TSu%;cIpZ%>Wo8`&d|vO zPBv48nd8NyQ-IR#s`ab#@>Mi$BHyL2&q!s0L|>Q~)zWvnDST7T7^*;-wD6#0ZWYbzY-{dq za!SVOWGy$BZY)*3BT9a&^oh<+(Om#apCgypXDWH8;wgzeE_t1Va`LFwu3M9?U>{Zd zojcd*_*1vX1$;Y3WT8b?}wk zHgWjp=2r<{9o{+Sme8c?Ny_k=ByWjRbRaQEbe>*LK$!?L-Cmw+=m4Wx7enK~rEMN= zzB-4EO%9g6l*Zq5I7kOT=gU?2^6Lrw;=9IiORI-hpRU2b^ac3E&3OPo$C!(M-d>3Z zw*h`dfKP47;?89b9)B{8Cwm+;B^^992&`=O@S!EZ{jVp`SrOpVSLN}cwMBSNfPw>@ zI-J6boe3NW91Lx%z`8mgw=DILab)sM@??;-2#th)r3Wq(`KVJ$)R;P5VsaqV8Aej2 zse)g{^E&xX$!FE~x>r#+el?NvoZgp4KuB-6B%e#7(IihZa`K*%xs(o|A~U#%HC3db zYJWMqOs6}zO9<&+t6*0-(JA`S(V$L0Q8t9+lEWlQg5ot!c5(V&!k?uyppzLA*-EWh z`f3iPt2y~?YE$Xg}lA~}RnH!M2mgY@P@MR=+MndG)f%J>w6>l6}q%S7$JN+?KfHFeBNdBiEtG3Qa` z9A46Attdrjk}5+v7EGRG)U8P+J1B!%qA+ZltlICfFB)8;rF|fxP5_#4a=lR$_?&61|0h+3P1jzsafNX^iKN*PDB>hg( zC?4hHr_MtNx25 z*Iaj)(A{!M59Ct$&E2wd#wCYKPL@k;5!L)ETuGvNbo42WNRiry)P)1(Y~l1g^;-)6 zrWa+Vdn&yok?tAiP~x1J98S1MClee{a!m5K@V9quIt6Sr>^PACGG=DOH2 ziOMUe3$fI}rQ#`R=#B~gbo9yXqeOA*=FqK4M~{+&9~UWNqbS0ycD{%AZ!F-KmKD)Z z6X2^zp76<4Wad9-~AOXNl1o+lHV|Z|r zhqMd4qpg6yd)EZMSQj8)bTByK0uGP>uw-QspIGT(qYHfg?K#}s>LU}e1^`71QvTBM z59Ph*!u@r*k(}NL%W>7;s=cSu#Y||0qEkvQP~qUZ!?sPxxv7i@k0A-g)X8a1wo_Q#Qn53<8bP*2Ir|eQHqD8VEDzsmsvsH8;$?4~C#ocVH=BL8i zrS=(R3rlE1ddp1Vn{#C7bg(1}MAzTO0cpa|l1s9%KF~QaB+f|*|5NxjC zHQ%@t0#~OTB}A`dLY<>Pr^KmnGcK%D$G{Z)lBfn1UQ~GE!sS#sB079Zm`=BL>R`wF;F2grjwz+^Q;I=iKyh$O;HPLpr?^#g$c6TDc&EaVq)IXTUkM(h z^)RISA8sR~4tiVTDB^mZ<-7v|xHbH|2ZPK~c&-6m6KUQ%ZlFelfwfWNlI$*xZDN`|F}(rM9NZktKnj zlO2)gHq{E+WV=6qU8>b#*kY|g1DBV zyZwlJN6G+Nr|YPjrUi1^TzdvJHGh`-u60s^#@3@d(ny>dlAB^x0WH@~FLWctzeut- zt-o6T(49sr22z_Jiyt{3`9)+#}I(X#GRn$}RVC zs}EjmA~K(rtwLhFQ}bwHFX~dQEl@N(vo=Fe*Ho(w#5P+t-&^N+VQ&`iEq;3VZrONb zZRXi~FN}{}H=r)snp|0%&Pakd)UJAqZcX03a6*e04E|df>E&ke@GPaj-kKEElL!`j zvSHaT%_W-QpM?di7YG{a;)S{9;0ZGqXgC5Ie&K~Adb)<@2tqukP}hGAXT14iLY_Sj zb}i2UiqB07q!3_<#8hhUps|OZLGhG|nZT&hX~K){mU#v;<+>Jeb4A_5nT?l79H$o> zgScCw|NQ$%KKyhfcdvb3!;|x|{PNFJ`RIYjU(ZC| z`RZK0e$vUui46eNrGNC?-p1ciO6dNNpUb7=!46!GV-iI^mu8;N^Iq*pF z2;D&Q@(6hO4p3e4J~AvGBDpM(MQ;usMDwSxn8>ur<^_uAQe^Yf!sEzCeJYFvnNKu) z((+bI9n>Iv)-X8rH?IzKqs$r~v(bV)N7l;-wt1lynr?exRtP`P^@k=;OehPR1IWT+ zOSX_hU@IIG(WfR=8Ds3&qz+bW7gG-dYRtkgQYXSUPZ&`UVT~f{)#260#_Vf5-{{Ud zd+LZJeqrXGsUKO`M@}3)_iN@9J*uD4=bDiyLD7ZW@%5#A@78Gze zBmb_0?~(G}b59Pvenrc(fW<1{HkU{0E>ZsB!-sNobR0~#S^Yf7`mLi9T ztxTF%dM4-RBGaaO#r^;P)QT(?V;PP6~^);im8*1NclcSd!d%rX|Y!x#SV1NO8q^@ zzH9vR5^(|ZT+C7VXY~t7Muzl1r~GQU66KlG)F`0|tVBd) z+{yGxD@RvTAMu?`r^?5_h;*Y)n(3?M!b$qZoydgy_)m?=a@|MVCHpw$>1@j7OvAwx z7NG9no=!3DdTjfa>owwCpvCcf`rp?XFD%HzQ#2$Fi8+k4Z^Fw_!x2b>;sy$NI}LCkpnNp2ARkH#~>>QXx@er z#Kf7GAV#mz{^#}=H8O0S-XYJ;7(eMQi zFC%)UEl5j^gYi%fx_JSWztwus4P69R zG~HzQ7b&0Oi`G96Pa+||YM8iThw6kvusc(k1ZHHSeS6T}V84J8CwfUNJ7uZ91JyQs7DH0 z2U4HKtBVkTJ9q9>0o-${m{{ktQl(1!NBe*U70)(LO>PoDHZc@ZHxmzP?F2>QepZFk zE4M1dXk22y{#;%$WAj{itUj|bb2)SE$pDg^h>a0rOdBg2gR8l6SxLN7{~|H{Xq*|sAEc~@(^|jSSU0Qv zsAm)suNlc(60xhy`>2e0vErz$(E68aPguKY$x2B(<;f`$yU)l+WPOBUzQubaoCL9Z zY}~A;)2waw@PNs~5g9}7Iu9Mska(24-cH#wgs<#+H)5xlC3NDB=N7cXBFKIjF>v<^d3uBg-gnN-iUA z$~jrK(IkM?17J6(Vrr!-i?#oisvK0RvRIm$(pPh(2;E7FQmHE}qVKM={gUNN@Sc%_ zp=s#5=j&L884HrU1o3F_u1$;le{LI0-@Vf&^#4=8Q7@Zama$Fa&roC8^)cnn%{JNB z-0NJoY5b9~Y^yBhUh}(-dAO`pns1xbr(OGAvC3C@-n?FDvb3(bX;wRuBF#Op|95n- zTKy%GR$1h^1TyWjiNKKhBlkROWAm;6iMEYgKUR{ElTb!Jb52&-c^G=^mb>q!$m(lotEsz%G9sjD1ju=@m$8*ww12yWHOn+*|gWC z6W-i0*j!4_htOvP&pf>u8h6q9BW3+;%&9XG!wfQiOK5=u?NoHDPF%kdY3kug8;qPa`j#GLnt?f#N&NL zp}h93I*}{2ESXKo45A01Z^P*=#1yo;{O;g9DjP zrz)^T;_5B^*7#`s-I_l}*HUBhu3%(wF7>riEl(>Ijy^_EnKk1#CWZscg%abWA(|q0uJe41fQApfrT%r zyeG)|f{igoa-(>2;U#MI^4_5Ghs?V+kKQJ(b<>cx;e)J8(U@M(23zvv<)%W$Z(#_F z)7F)Ih}>CoTC)G>0ic&J0F9^j^4?fFZt1%w^HzJQwFQ!+!1|6sb0?s-*uo#r##{MS zw7RS-7AZGScChQ^lwaxVo(FU419643pMnV>mEDuWb zCmR2~%Qqn)b8_)~KA+2@M~`H=T*_=Vlcs65TF!Qv=JUC{c=1AJvzgqydDG=}4j!yi z*LDq;)`_iNTkE_rV^i}zgbgjtHv}tlY&cRTXH4wLn@HSatyF#(kKaSc;E=kH%;QjP zGWD0@!MeRsBRae7w2p5hmQS0SyVBpPn^-4>Jn}9!0MKlw=qVs`0+6Z;-Q7cWpmR@g zb54PfU0bakYy7Ep`)zxDX0msp-W^uIB0J0M_%)?q`Ocm&l_-m31ock%5IM+|O{;85 z53M#9i-kOX{8*kpe=du~V%u!w-q69pfgB$n%gM=!OePa|{tN$SI}usaFc8-3wr#t5UvM2q&5XMH zw2gCEqEEXln>jnn+rqnjh+VDrWxeyZE&Lw()bp~*&8EFTN_YV5o1X3~RUTHp4n2l# z$eXp%TL84qFuRleI#%E5KkHLJ7NgXCm25mcbK)P#(rxu^^;w^fUh*KuD*(x6jKl?^ zF7AwXht>x~{ycYO^zP_Xzf-b~^aYJ;%<*WkWQV;!IC8fxdiOSZ=eRdEtyEVY8R3 z0y$AeVo_OJgr4%Dvdfl5@C=pBNIoIPHX!5hY-_4M6yH%#Aq~HIrZx!3QSC5aJ0^TE7r)G7Ilf z?}KRG6K_4j)Wv#cM?4%YdmOzL>f+g`ZQFVe1SnvYDs8*G)Sc0??NA+1}YK%FM|uGJY%5Ix-Fo zm~-)o(GjhEq#x1UcnhPL`q-N%7@n~nX}ROKbTfrrjOSAcEMvyb@(#gE)ZV1tV=zT~ z7Qw5W^%5iZ(LNx$$nulHqm*3t-(ya2OW_d{SIx{3ds7R$wm>r3Gx8K&U!bSC$oO*! z^+3~Ptwc_&sLeun$J`Va)muh>S(z${dlrvUx{xDdk+rIaXVLMao;ZkSrpez@w*XWc zHbd>c^Pu)`Klrmvo&)=kJK(a){AC~iuFG%bL!HM;`zJ^Hn%je^b6Y$yF7x`PVrm&) zG;CZMy0eTBdSk$9z21&ci46IXdmy#CwDKOXAY)7QBR8fvvg6i&j_iJF@_@`0@{ExY zOBOsndhu8}CwQLTpgP3LOsR~exiN(3d|7}P*7~_MTs)UG{_p z%^dHY9-}vCAaT|VHZd}zn2ACF00OK@L_t)W>JNgo=se`y*^Jtm$Q{fqf7shpm=i#a zkJ>!2vK)!mj>;T*GLK-BH4o@GqS&I%Ije812Lziu8HrAk#ED^+=@e6Lh#I9U|g{Tv8Yrz&le994OYQ&S=a-lLqjtBdzmCz~mo zs)so-E*Zxk<{Z)Bj{}o zQ905)Dl{HzGNZ}zP%^{F6MK>$#cGr%==_wZ!>ivq)yj?QWW92{EW|8s3?X~0mrv9# z8eR@5ORQIkIsWPaus>AeYARK#vRr9@ zPTQ&uR322S@>q4EQq_Y>rKwq+jNFqs=9U19*b{#=mjD|R#b)e8<1n?crrNjumKskq z)=_H*l?N?GDiRx|@i`?AmfRrm$k83ZO`JL*bI0Dxi}07(F-CNkiL*`3CmVZ@-q{*C zF|cB?qM2N+arF6W%_Dju6OHd@vw73I)4|Nst2c5m@v?|r%PG%h8fWI0kxkFmMDKpK z@Jho354UnNEu*pDCD%74JZU0X@+~~}^eFdk`^c?4Ik`n5H$kBNLTp^b1Bz)s$|nX> zn0R8=Ly)<}3eh!WZRhE?g?W}-vo;*X%097i{5djOV*MJ)O~mRKg6o=Xi+a}N-fY2m zkXkaydPaq?rFsBVs#K{`rAn15RjO2}Ql(1!PyYo(d&}f(m7_KQ0000=^n literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/personal_channel.md b/doc/pl/tutorials/personal_channel.md new file mode 100644 index 000000000..6b96cf14a --- /dev/null +++ b/doc/pl/tutorials/personal_channel.md @@ -0,0 +1,116 @@ + +Ten poradnik trzeba wykonać w kolejności, tak jakbyś konfigurował plik kanału po raz pierwszy. Przedstawia w naturalny sposób niektóre narzędzia i funkcje związane z kanałem osobistym. + +### Tworzenie nowego kanału + +Kiedy logujesz się po raz pierwszy po rejestracji, musisz utworzyć kanał albo odwiedzić później stronę *https://your_website/new_channel*. + +![](assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png) + +Wprowadź swoje imię i nazwisko oraz pseudonim dla adresu kanału, a następnie wybierz "rolę". Zazwyczaj, jeśli reprezentuje Cię osobisty kanał, wybierz *Społeczność* z domyślnym poziomem prywatności, który Ci odpowiada. Jeśli nie masz pewności, wybierz opcję *Społecznościowe - głównie publiczne*, co umożliwia łatwą interakcję i zapewnia prywatność, gdy jej potrzebujesz. Alternatywnie, ustawienie *Społecznościowe - ograniczone* jest bardzo popularne wśród obrońców prywatności, chociaż poznanie ludzi może wymagać nieco więcej wysiłku. Niezależnie od tego, które ustawienie wybierzesz, możesz zmienić je później, jeśli zajdzie taka potrzeba. + +### Dodanie zdjęcia profilowego + +Po utworzeniu nowego kanału zostaniesz przekierowany na stronę określoną przez administratora witryny. Domyślnie jest to strona * Edytuj profil *. + +Z poziomu rozwijanego menu *Narzędzia profili* wybierz opcję *Zmień zdjęcie profilowe* (lub po prostu kliknij zdjęcie profilowe). + +![](assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png) + +Prześlij swoje zdjęcie i jeśli to konieczne, zmień rozmiar za pomocą edytora obrazów. + +![](assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png) + +Po naciśnięciu *Edycja zakończona* nastąpi przekierowanie z powrotem do edytora profili. + +> Jeśli masz problemy z wyświetleniem nowego zdjęcia, może być konieczne +> wyczyszczenie pamięci podręcznej przeglądarki. + +![](assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png) + +Po powrocie na stronę główną kanału zobaczysz, że wpis powiadamiający innych o Twoim nowym zdjęciu profilowym, który został automatycznie opublikowany. + +![](assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png) + + +### Tworzenie wpisów + +Przejdź do strony głównej swojego kanału i otwórz edytor wpisów, naciskając pole tekstowe *Udostępnij* u góry "ściany" kanału. Wprowadź wiadomość, a następnie przeciągnij i upuść plik obrazu do do obszaru tekstowego edytora postów. Ewentualnie możesz użyć narzędzie *Załącz plik*, widoczne u dołu. + +![](assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png) + +Plik obrazu zostanie automatycznie przesłany i zapisany w plikach w chmurze, a łącze pojawi się w oknie wpisu. Naciśnięcie przycisku podglądu wpisu umożliwia podgląd wpisu przed opublikowaniem. + +![](assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png) + +Naciśnij przycisk kłódki obok przycisku *Prześlij*. SPowoduje to otworzenie się *Listę kontroli dostępu*, gdzie możesz dokładnie określić, kto ma dostęp do tego wpisu. + +![](assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png) + + +### Użycie przesłanego obrazu jako zdjęcia na okładkę kanału + +Jednym ze sposobów uatrakcyjnienia wyglądu kanału jest dodanie zdjęcia na okładkę, które będą widzieć użytkownicy po załadowaniu strony kanału. Zintegrowany system plików w chmurze pozwala wybrać w tym celu istniejące zdjęcie. + +Odwiedź swoje zdjęcia w aplikacji *Photos*. + +![](assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png) + +Wybierz zdjęcie, którego chcesz użyć i wybierz *Użyj jako zdjęcia na okładkę* z rozwijanego menu *Narzędzia do zdjęć*. + +![](assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png) + +Przytnij obraz za pomocą edytora zdjęć i zapisz zmiany. + +![](assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png) + +Gdy załadujesz stronę główną swojego kanału, najpierw zobaczysz zdjęcie okładkowe a strona kanału będzie się pojawiać w miarę przewijania w dół. + +![](assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png) + + +### Wykonywanie połączeń + +Tworzenie połączeń między kanałami i udostępnianie treści, to istosta komunikacji społecznej. Nawiązanie połączenia jest proste. Jeśli jeszcze nie wiesz, jak dotrzeć do strony domowej kanału, możesz spróbować przeszukać katalog, otwierając łącze *Katalog* z menu po prawej stronie z boku górnego paska nawigacyjnego. + +![](assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png) + +Możesz połączyć się bezpośrednio z poziomu katalogu za pomocą przycisku *Połącz* lub możesz najpierw otworzyć stronę kanału i nacisnąć przycisk *Połącz* widoczny poniżej zdjęcia profilowego. + +![](assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png) + +Po nawiązaniu połączenia zostaniesz natychmiast przeniesiony do strony edytora połączeń, gdzie podejmujesz ważne decyzje dotyczące tego, co planujesz udostępniać na tym kanale. + +![](assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png) + +Dwa ważne ustawienia to + +* Indywidualne uprawnienia dla nowo podłączonego kanału +* Grupy prywatności, do których należy połączenie + +Indywidualne uprawnienia są w większości łatwe do zrozumienia, ale mogą być na początku niejasne. Na przykład *Można wyświetlać mój magazyn plików i zdjęć* nie oznacza, że na podłączonym kanale każdy będzie mógł przeglądać wszystkie Twoje zdjęcia i pliki! Oznacza to, że będziesz mieć możliwość udostępniania zdjęć i plików za pomocą tego kanału. Jest całkiem możliwe, że pozwolisz komuś czytać swoje wpisy, ale nie zezwolisz na oglądanie zdjęć w tym wpisie. + +Grupy prywatności umożliwiają wygodnie udostępniać elementy grupom osób. Można utworzyć dowolne grupy odpowiadające swoim potrzebom, otwierając link *Dodaj grupę prywatności*. + +![](assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png) + +W tym edytorze można przełączać się między istniejącymi grupami prywatności i od razu sprawdzić, jakie kanały są, a jakie nie są członkami grupy. Wybranie ikony kanału w dowolnym polu spowoduje przeniesienie kanału do tej grupy. + +![](assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png) + +Podczas edycji ustawień pojedynczego kanału można ustawić jego członkostwo w grupach prywatności za pomocą widżetu po lewej stronie: + +![](assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png) + +Połączenia to wzajemne zaangażowanie. Kanał, z którym się łączysz, może mieć ustawioną opcję zatwierdzenia połączenia z innym kanałem. Zostanie wówczas wysłane do niego powiadomienie o proonowanym połączeniu: + +![](assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png) + +w którym znajduje się link do strony edytora [*Połączenia*](https://grid.reticu.li/connections), gdzie można zdecydować, czy zezwolić na połączenie, czy nie. + +![](assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png) + +Po zatwierdzeniu połączenia dobrze jest otworzyć edytor połączeń indywidualnych, naciskając przycisk edycji obok przycisku *Usuń*. + +![](assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png) + diff --git a/include/account.php b/include/account.php index ef79d5bb1..34936c33f 100644 --- a/include/account.php +++ b/include/account.php @@ -4,6 +4,8 @@ * @brief Somme account related functions. */ +use Zotlabs\Lib\Crypto; + require_once('include/config.php'); require_once('include/network.php'); require_once('include/plugin.php'); @@ -26,8 +28,8 @@ function check_account_email($email) { $email = punify($email); $result = array('error' => false, 'message' => ''); - // Caution: empty email isn't counted as an error in this function. - // Check for empty value separately. + // Caution: empty email isn't counted as an error in this function. + // Check for empty value separately. if(! strlen($email)) return $result; @@ -36,7 +38,7 @@ function check_account_email($email) { $result['message'] .= t('Not a valid email address') . EOL; elseif(! allowed_email($email)) $result['message'] = t('Your email domain is not among those allowed on this site'); - else { + else { $r = q("select account_email from account where account_email = '%s' limit 1", dbesc($email) ); @@ -69,30 +71,17 @@ function check_account_password($password) { function check_account_invite($invite_code) { $result = array('error' => false, 'message' => ''); - // [hilmar -> - $using_invites = (get_config('system','invitation_only') - || get_config('system','invitation_also')); + $using_invites = get_config('system','invitation_only'); if($using_invites) { - if(! $invite_code) { - - $result['message'] - .= 'ZAR0510E,' . t('An invitation is required.') . EOL; - - } else { - - // check if invite code exists - $r = q("SELECT * FROM register WHERE reg_hash = '%s' AND reg_vital = 1 LIMIT 1", - dbesc($invite_code)); - if(! $r) { - $result['message'] - .= 'ZAR0511E,' . t('Invitation could not be verified.') . EOL; - } + $result['message'] .= t('An invitation is required.') . EOL; + } + $r = q("select * from register where hash = '%s' limit 1", dbesc($invite_code)); + if(! $r) { + $result['message'] .= t('Invitation could not be verified.') . EOL; } } - // <- hilmar] - if(strlen($result['message'])) $result['error'] = true; @@ -118,8 +107,8 @@ function account_total() { return false; } -// legacy -function account_store_lowlevel_IS_OBSOLETE($arr) { + +function account_store_lowlevel($arr) { $store = [ 'account_parent' => ((array_key_exists('account_parent',$arr)) ? $arr['account_parent'] : '0'), @@ -141,21 +130,12 @@ function account_store_lowlevel_IS_OBSOLETE($arr) { 'account_password_changed' => ((array_key_exists('account_password_changed',$arr)) ? $arr['account_password_changed'] : '0001-01-01 00:00:00') ]; - // never ever is this a create table but a pdo insert into account - // strange function placement in text.php (obscure by design :-) return create_table_from_array('account',$store); - // the TODO may be to adjust others using create_table_from_array(): - // channel.php - // connections.php - // event.php - // hubloc.php - // import.php + } - -// legacy -function create_account_IS_OBSOLETE($arr) { +function create_account($arr) { // Required: { email, password } @@ -197,7 +177,7 @@ function create_account_IS_OBSOLETE($arr) { // Ensure that there is a host keypair. if ((! get_config('system', 'pubkey')) && (! get_config('system', 'prvkey'))) { - $hostkey = new_keypair(4096); + $hostkey = Crypto::new_keypair(4096); set_config('system', 'pubkey', $hostkey['pubkey']); set_config('system', 'prvkey', $hostkey['prvkey']); } @@ -279,160 +259,10 @@ function create_account_IS_OBSOLETE($arr) { return $result; } -/** - * create_account_from_register - * @author hilmar runge - * @since 2020-02-20 - * - * Account creation only happens via table register. - * This function creates the account when all conditions are solved. - * - */ -function create_account_from_register($arr) { - $result = array('success' => false, 'message' => 'rid:' . $arr['reg_id']); - $now = date('Y-m-d H:i:s'); - - // reg_flags 0x0020 = REGISTER_AGREED = register request verified by user @ regate - $register = q("SELECT * FROM register WHERE reg_id = %d AND (reg_flags & 31) = 0 " - . " AND reg_startup < '%s' AND reg_expires > '%s' ", - intval($arr['reg_id']), - dbesc($now), - dbesc($now) - ); - - if ( ! $register ) return $result; - - // account - $expires = NULL_DATE; - - $default_service_class = get_config('system','default_service_class'); - if($default_service_class === false) - $default_service_class = ''; - - $roles = 0; - // prevent form hackery - if($roles & ACCOUNT_ROLE_ADMIN) { - $admin_result = check_account_admin($arr); - if(! $admin_result) { - $roles = 0; - } - } - - // any accounts available ? - $isa = q("SELECT COUNT(*) AS isa FROM account"); - if ($isa && $isa[0]['isa'] == 0) { - $roles = ACCOUNT_ROLE_ADMIN; - } - - $salt = random_string(32); - $password_encoded = hash('whirlpool', $salt . (hex2bin($register[0]['reg_pass']))); - - $ri = q( - "INSERT INTO account (" - . " account_parent, account_salt, account_password, account_email, " - . " account_language, account_created, account_flags, account_roles, account_level, " - . " account_expires, account_service_class) VALUES( " - . " %d, '%s', '%s', '%s', '%s', '%s', %d, %d, %d, '%s', '%s' ) ", - intval($parent), - dbesc($salt), - dbesc($password_encoded), - dbesc($register[0]['reg_did2']), - dbesc($register[0]['reg_lang']), - dbesc($now), - intval($register[0]['reg_flags'] & 31), // off REGISTER_AGREE at ACCOUNT - intval($roles), - intval(5), - dbesc($expires), - dbesc($default_service_class) - ); - - if(! $ri) { - logger('create_account: DB INSERT failed.'); - $result['message'] = 'ZAR ' . t('Failed to store account information.'); - return($result); - } - - $r = q("SELECT * FROM account WHERE account_email = '%s' AND account_password = '%s' LIMIT 1", - dbesc($register[0]['reg_did2']), - dbesc($password_encoded) - ); - if($r && count($r)) { - $result['account'] = $r[0]; - } - else { - logger('create_account: could not retrieve newly created account'); - } - - // Set the parent record to the current record_id if no parent was provided - - if(! $parent) { - $r = q("UPDATE account SET account_parent = %d WHERE account_id = %d", - intval($result['account']['account_id']), - intval($result['account']['account_id']) - ); - if(! $r) { - logger('create_account: failed to set parent'); - } - $result['account']['parent'] = $result['account']['account_id']; - } - - $result['success'] = true; - - //call_hooks('register_account',$result); - - return $result; -} - -/** - * @brief as far to see, email validation for register account verification - * @param array (account) - * @param array ('resend' => true, 'email' = > email) - * - */ function verify_email_address($arr) { - // $hash = random_string(24); - - // [hilmar -> - $reg = q("SELECT * FROM register WHERE reg_vital = 1 AND reg_email = 's%' ", - dbesc($arr['email']) - ); - if ( ! $reg) - return false; - - push_lang(($reg[0]['email']) ? $reg[0]['email'] : 'en'); - - $email_msg = replace_macros(get_intltext_template('register_verify_member.tpl'), - [ - '$sitename' => get_config('system','sitename'), - '$siteurl' => z_root(), - '$email' => $arr['email'], - '$uid' => 1, - '$hash' => $hash, - '$details' => '' - ] - ); - - $res = z_mail( - [ - 'toEmail' => $arr['email'], - 'messageSubject' => sprintf( t('Registration confirmation for %s'), get_config('system','sitename')), - 'textVersion' => $email_msg, - ] - ); - - pop_lang(); - - if(! $res) - logger('send_reg_approval_email: failed to account_id: ' . $arr['account']['account_id']); - - return $res; -} - -function verify_email_addressNOP($arr) { - if(array_key_exists('resend',$arr)) { $a = q("select * from account where account_email = '%s' limit 1", dbesc($arr['email']) @@ -441,14 +271,11 @@ function verify_email_addressNOP($arr) { return false; } $account = $a[0]; - // [hilmar -> - $v = q("SELECT * FROM register WHERE reg_uid = %d AND reg_vital = 1 " - . " AND reg_pass = 'verify' LIMIT 1", + $v = q("select * from register where uid = %d and password = 'verify' limit 1", intval($account['account_id']) ); - // <- hilmar] if($v) { - $hash = $v[0]['reg_hash']; + $hash = $v[0]['hash']; } else { return false; @@ -457,16 +284,13 @@ function verify_email_addressNOP($arr) { else { $hash = random_string(24); - // [hilmar -> - q("INSERT INTO register ( reg_hash, reg_created, reg_uid, reg_pass, reg_lang, reg_stuff ) " - ." VALUES ( '%s', '%s', %d, '%s', '%s', '' ) ", + q("INSERT INTO register ( hash, created, uid, password, lang ) VALUES ( '%s', '%s', %d, '%s', '%s' ) ", dbesc($hash), dbesc(datetime_convert()), intval($arr['account']['account_id']), dbesc('verify'), dbesc($arr['account']['account_language']) ); - // <- hilmar] $account = $arr['account']; } @@ -484,8 +308,8 @@ function verify_email_addressNOP($arr) { ); $res = z_mail( - [ - 'toEmail' => $arr['email'], + [ + 'toEmail' => $arr['email'], 'messageSubject' => sprintf( t('Registration confirmation for %s'), get_config('system','sitename')), 'textVersion' => $email_msg, ] @@ -523,17 +347,11 @@ function send_reg_approval_email($arr) { $hash = random_string(); - // [hilmar -> - // code before fetches the $admins as recipients for the approval request mail - // $arr has a user (self registered) account - // ... $arr['email'] ??? - // ... reg expiration ? - $r = q("INSERT INTO register ( reg_hash, reg_email, reg_created, reg_uid, reg_pass, reg_lang, reg_stuff )" - . " VALUES ( '%s', '%s', '%s', %d, '', '%s', '' ) ", + $r = q("INSERT INTO register ( hash, created, uid, password, lang ) VALUES ( '%s', '%s', %d, '%s', '%s' ) ", dbesc($hash), - dbesc($arr['account']['account_email']), dbesc(datetime_convert()), intval($arr['account']['account_id']), + dbesc(''), dbesc($arr['account']['account_language']) ); @@ -559,8 +377,8 @@ function send_reg_approval_email($arr) { )); $res = z_mail( - [ - 'toEmail' => $admin['email'], + [ + 'toEmail' => $admin['email'], 'messageSubject' => sprintf( t('Registration request at %s'), get_config('system','sitename')), 'textVersion' => $email_msg, ] @@ -587,7 +405,7 @@ function send_register_success_email($email,$password) { )); $res = z_mail( - [ + [ 'toEmail' => $email, 'messageSubject' => sprintf( t('Registration details for %s'), get_config('system','sitename')), 'textVersion' => $email_msg, @@ -607,7 +425,7 @@ function account_allow($hash) { $ret = array('success' => false); - $register = q("SELECT * FROM register WHERE reg_hash = '%s' LIMIT 1", + $register = q("SELECT * FROM register WHERE hash = '%s' LIMIT 1", dbesc($hash) ); @@ -615,89 +433,57 @@ function account_allow($hash) { return $ret; $account = q("SELECT * FROM account WHERE account_id = %d LIMIT 1", - intval($register[0]['reg_uid']) + intval($register[0]['uid']) ); - // a register entry without account assigned to if(! $account) return $ret; - // [hilmar -> - - q("START TRANSACTION"); - //q("DELETE FROM register WHERE reg_hash = '%s'", - // dbesc($register[0]['reg_hash']) - //); - $r1 = q("UPDATE register SET reg_vital = 0 WHERE reg_hash = '%s'", - dbesc($register[0]['reg_hash']) + q("DELETE FROM register WHERE hash = '%s'", + dbesc($register[0]['hash']) ); - /* instead of ... - - // unblock - q("UPDATE account SET account_flags = (account_flags & ~%d) " - . " WHERE (account_flags & %d)>0 AND account_id = %d", + q("update account set account_flags = (account_flags & ~%d) where (account_flags & %d)>0 and account_id = %d", intval(ACCOUNT_BLOCKED), intval(ACCOUNT_BLOCKED), - intval($register[0]['reg_uid']) + intval($register[0]['uid']) ); - - // unpend - q("UPDATE account SET account_flags = (account_flags & ~%d) " - . " WHERE (account_flags & %d)>0 AND account_id = %d", + + q("update account set account_flags = (account_flags & ~%d) where (account_flags & %d)>0 and account_id = %d", intval(ACCOUNT_PENDING), intval(ACCOUNT_PENDING), - intval($register[0]['reg_uid']) + intval($register[0]['uid']) ); - */ - // together unblock and unpend - $r2 = q("UPDATE account SET account_flags = %d WHERE account_id = %d", - intval($account['account_flags'] - &= $account['account_flags'] ^ (ACCOUNT_BLOCKED | ACCOUNT_PENDING)), - intval($register[0]['reg_uid']) + push_lang($register[0]['lang']); + + $email_tpl = get_intltext_template("register_open_eml.tpl"); + $email_msg = replace_macros($email_tpl, array( + '$sitename' => get_config('system','sitename'), + '$siteurl' => z_root(), + '$username' => $account[0]['account_email'], + '$email' => $account[0]['account_email'], + '$password' => '', + '$uid' => $account[0]['account_id'] + )); + + $res = z_mail( + [ + 'toEmail' => $account[0]['account_email'], + 'messageSubject' => sprintf( t('Registration details for %s'), get_config('system','sitename')), + 'textVersion' => $email_msg, + ] ); - - if($r1 && $r2) { - q("COMMIT"); - // <- hilmar] + pop_lang(); - push_lang($register[0]['reg_lang']); + if(get_config('system','auto_channel_create')) + auto_channel_create($register[0]['uid']); - $email_tpl = get_intltext_template("register_open_eml.tpl"); - $email_msg = replace_macros($email_tpl, array( - '$sitename' => get_config('system','sitename'), - '$siteurl' => z_root(), - '$username' => $account[0]['account_email'], - '$email' => $account[0]['account_email'], - '$password' => '', - '$uid' => $account[0]['account_id'] - )); - - $res = z_mail( - [ - 'toEmail' => $account[0]['account_email'], - 'messageSubject' => sprintf( t('Registration details for %s'), get_config('system','sitename')), - 'textVersion' => $email_msg, - ] - ); - - pop_lang(); - - if(get_config('system','auto_channel_create')) - auto_channel_create($register[0]['uid']); - - if ($res) { - info( t('Account approved.') . EOL ); - return true; - } - - // [hilmar -> - } else { - q("ROLLBACK"); + if ($res) { + info( t('Account approved.') . EOL ); + return true; } - // <- hilmar] } @@ -714,65 +500,42 @@ function account_allow($hash) { function account_deny($hash) { - // [hilmar-> - $register = q("SELECT * FROM register WHERE reg_hash = '%s' AND reg_vital = 1 LIMIT 1", + $register = q("SELECT * FROM register WHERE hash = '%s' LIMIT 1", dbesc($hash) ); - // <-hilmar] if(! count($register)) return false; $account = q("SELECT account_id, account_email FROM account WHERE account_id = %d LIMIT 1", - intval($register[0]['reg_uid']) + intval($register[0]['uid']) ); if(! $account) return false; - // [hilmar -> - q("START TRANSACTION"); - - $r1 = q("DELETE FROM account WHERE account_id = %d", - intval($register[0]['reg_uid']) - ); - // q("DELETE FROM register WHERE reg_id = %d", - // dbesc($register[0]['reg_id']) - //); - $r2 = q("UPDATE register SET reg_vital = 0 WHERE reg_id = %d AND reg_vital = 1", - dbesc($register[0]['reg_id']) + q("DELETE FROM account WHERE account_id = %d", + intval($register[0]['uid']) ); - if($r1 && $r2) { - q("COMMIT"); - notice( 'ZAR0512I,' . sprintf( t('Registration revoked for %s'), - $account[0]['account_email']) . EOL); - return true; + q("DELETE FROM register WHERE id = %d", + dbesc($register[0]['id']) + ); + notice( sprintf(t('Registration revoked for %s'), $account[0]['account_email']) . EOL); - } else { + return true; - q("ROLLBACK"); - notice( 'ZAR0513F,' . sprintf( t('Could not revoke registration for %s'), - $account[0]['account_email']) . EOL); - return false; - } - // <- hilmar] } -/** - * called from Regver to allow/revoke an account - * Use case is under REGISTER_OPEN with APPROVAL - * Ref Regver, Email_validation, Email_resend - * ZAR052+ - */ +// called from regver to activate an account from the email verification link + function account_approve($hash) { $ret = false; // Note: when the password in the register table is 'verify', the uid actually contains the account_id - // hmm - $register = q("SELECT * FROM register WHERE reg_hash = '%s' and reg_pass = 'verify' LIMIT 1", + $register = q("SELECT * FROM register WHERE hash = '%s' and password = 'verify' LIMIT 1", dbesc($hash) ); @@ -780,190 +543,65 @@ function account_approve($hash) { return $ret; $account = q("SELECT * FROM account WHERE account_id = %d LIMIT 1", - intval($register[0]['reg_uid']) + intval($register[0]['uid']) ); if(! $account) return $ret; - // tr ? - - q("DELETE FROM register WHERE reg_hash = '%s' and reg_pass = 'verify'", - dbesc($register[0]['reg_hash']) + q("DELETE FROM register WHERE hash = '%s' and password = 'verify'", + dbesc($register[0]['hash']) ); q("update account set account_flags = (account_flags & ~%d) where (account_flags & %d)>0 and account_id = %d", intval(ACCOUNT_BLOCKED), intval(ACCOUNT_BLOCKED), - intval($register[0]['reg_uid']) + intval($register[0]['uid']) ); - + q("update account set account_flags = (account_flags & ~%d) where (account_flags & %d)>0 and account_id = %d", intval(ACCOUNT_PENDING), intval(ACCOUNT_PENDING), - intval($register[0]['reg_uid']) + intval($register[0]['uid']) ); - + q("update account set account_flags = (account_flags & ~%d) where (account_flags & %d)>0 and account_id = %d", intval(ACCOUNT_UNVERIFIED), intval(ACCOUNT_UNVERIFIED), - intval($register[0]['reg_uid']) + intval($register[0]['uid']) ); - /* - // together unblock unpend and verified - q("UPDATE account SET account_flags = %d WHERE account_id = %d", - intval($account['account_flags'] - &= $account['account_flags'] - ^ (ACCOUNT_BLOCKED | ACCOUNT_PENDING | ACCOUNT_UNVERIFIED)), - intval($register[0]['reg_uid']) - ); - */ - - // get a fresh copy after we've modified it. $account = q("SELECT * FROM account WHERE account_id = %d LIMIT 1", - intval($register[0]['reg_uid']) + intval($register[0]['uid']) ); if(! $account) return $ret; if(get_config('system','auto_channel_create')) - auto_channel_create($register[0]['reg_uid']); + auto_channel_create($register[0]['uid']); else { $_SESSION['login_return_url'] = 'new_channel'; authenticate_success($account[0],null,true,true,false,true); - } + } return true; } -function verify_register_scheme() { - - $dbc = db_columns('register'); - if ($dbc) { - - if ($dbc[0]=='id') { - // v1 format - q("START TRANSACTION"); - - if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) { - $r1 = q("ALTER TABLE register RENAME TO register100;"); - - $r2 = q("CREATE TABLE register (" - . "reg_id serial NOT NULL," - . "reg_vital int DEFAULT 1 NOT NULL," - . "reg_flags bigint DEFAULT 0 NOT NULL," - . "reg_didx char(1) DEFAULT '' NOT NULL," - . "reg_did2 text DEFAULT '' NOT NULL," - . "reg_hash text DEFAULT '' NOT NULL," - . "reg_email text DEFAULT '' NOT NULL," - . "reg_created timestamp NOT NULL," - . "reg_startup timestamp NOT NULL," - . "reg_expires timestamp NOT NULL," - . "reg_byc bigint DEFAULT 0 NOT NULL," - . "reg_uid bigint DEFAULT 0 NOT NULL," - . "reg_atip text DEFAULT '' NOT NULL," - . "reg_pass text DEFAULT '' NOT NULL," - . "reg_lang varchar(16) DEFAULT '' NOT NULL," - . "reg_stuff text NOT NULL," - . "PRIMARY KEY (reg_id) );" - ); - $r0 = q("CREATE INDEX ix_reg_vital ON register (reg_vital);"); - $r0 = q("CREATE INDEX ix_reg_flags ON register (reg_flags);"); - $r0 = q("CREATE INDEX ix_reg_didx ON register (reg_didx);"); - $r0 = q("CREATE INDEX ix_reg_did2 ON register (reg_did2);"); - $r0 = q("CREATE INDEX ix_reg_hash ON register (reg_hash);"); - $r0 = q("CREATE INDEX ix_reg_email ON register (reg_email);"); - $r0 = q("CREATE INDEX ix_reg_created ON register (reg_created);"); - $r0 = q("CREATE INDEX ix_reg_startup ON register (reg_startup);"); - $r0 = q("CREATE INDEX ix_reg_expires ON register (reg_expires);"); - $r0 = q("CREATE INDEX ix_reg_byc ON register (reg_byc);"); - $r0 = q("CREATE INDEX ix_reg_uid ON register (reg_uid);"); - $r0 = q("CREATE INDEX ix_reg_atip ON register (reg_atip);"); - - $r3 = q("INSERT INTO register (reg_id, reg_hash, reg_created, reg_uid, reg_pass, reg_lang, reg_stuff) " - . "SELECT id, hash, created, uid, password, lang, '' FROM register100;"); - - $r4 = q("DROP TABLE register100"); - - } - else { - $r1 = q("RENAME TABLE register TO register100;"); - - $r2 = q("CREATE TABLE IF NOT EXISTS register (" - . "reg_id int(10) UNSIGNED NOT NULL AUTO_INCREMENT," - . "reg_vital int(10) UNSIGNED NOT NULL DEFAULT 1," - . "reg_flags int(10) UNSIGNED NOT NULL DEFAULT 0," - . "reg_didx char(1) NOT NULL DEFAULT ''," - . "reg_did2 char(191) NOT NULL DEFAULT ''," - . "reg_hash char(191) NOT NULL DEFAULT ''," - . "reg_email char(191) NOT NULL DEFAULT ''," - . "reg_created datetime NOT NULL DEFAULT '0001-01-01 00:00:00'," - . "reg_startup datetime NOT NULL DEFAULT '0001-01-01 00:00:00'," - . "reg_expires datetime NOT NULL DEFAULT '0001-01-01 00:00:00'," - . "reg_byc int(10) UNSIGNED NOT NULL DEFAULT 0 ," - . "reg_uid int(10) UNSIGNED NOT NULL DEFAULT 0 ," - . "reg_atip char(191) NOT NULL DEFAULT ''," - . "reg_pass char(191) NOT NULL DEFAULT ''," - . "reg_lang char(16) NOT NULL DEFAULT ''," - . "reg_stuff text NOT NULL," - . "PRIMARY KEY (reg_id)," - . "KEY ix_reg_hash (reg_hash)," - . "KEY ix_reg_vital (reg_vital)," - . "KEY ix_reg_flags (reg_flags)," - . "KEY ix_reg_didx (reg_didx)," - . "KEY ix_reg_did2 (reg_did2)," - . "KEY ix_reg_email (reg_email)," - . "KEY ix_reg_created (reg_created)," - . "KEY ix_reg_startup (reg_startup)," - . "KEY ix_reg_expires (reg_expires)," - . "KEY ix_reg_byc (reg_byc)," - . "KEY ix_reg_uid (reg_uid)," - . "KEY ix_reg_atip (reg_atip)" - . ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;" - ); - - $r3 = q("INSERT INTO register (reg_id, reg_hash, reg_created, reg_uid, reg_pass, reg_lang, reg_stuff) " - . "SELECT id, hash, created, uid, password, lang, '' FROM register100;"); - - $r4 = q("DROP TABLE register100"); - } - - // $r = ($r1 && $r2 && $r3 && $r4); - // the only important - $r = $r2; - - if($r) { - q("COMMIT"); - return UPDATE_SUCCESS; - } - - q("ROLLBACK"); - return UPDATE_FAILED; - } - elseif ( count($dbc) != 16 ) { - // ffu - // fields in v2.0.0 = 16 - } - } -} - - /** * @brief Checks for accounts that have past their expiration date. * - * If the account has a service class which is not the site default, + * If the account has a service class which is not the site default, * the service class is reset to the site default and expiration reset to never. * If the account has no service class it is expired and subsequently disabled. * called from include/poller.php as a scheduled task. * * Reclaiming resources which are no longer within the service class limits is - * not the job of this function, but this can be implemented by plugin if desired. - * Default behaviour is to stop allowing additional resources to be consumed. + * not the job of this function, but this can be implemented by plugin if desired. + * Default behaviour is to stop allowing additional resources to be consumed. */ function downgrade_accounts() { @@ -1188,66 +826,3 @@ function get_account_techlevel($account_id = 0) { return (5); } - -function zar_log($msg='') { - file_put_contents('./zar.log', - date('Y-m-d_H:i:s') . ' ' . $msg . ', ip: § ' . $_SERVER['REMOTE_ADDR'] . ' §' . "\n", FILE_APPEND); - return; -} - -function zar_reg_mail($reonar=false) { - if ($reonar) { - $zem = z_mail( - [ - 'toEmail' => $reonar['to'], - 'fromName' => ' ', - 'fromEmail' => $reonar['from'], - 'messageSubject' => $reonar['subject'], - 'textVersion' => $reonar['txttemplate'], - ] - ); - return $zem; - } -} - -/** - * ckeck current day and time against register duties - * - * @author Hilmar Runge - * @since 2020-02-25 - * @param the current date and time is taken as default - * @return ['isduty'] true/false - * ['nowfmt'] the textmsg about the current state - * ['atform'] the disabled html attribute for form input fields - * - */ -function zar_register_dutystate( $now=NULL, $day=NULL ) { - - is_null($now) ? $now = date('Hi') : ''; - is_null($day) ? $day = date('N') : ''; - - $isduty = zarIsDuty($day, $now, 'isOpen'); - - if ( $isduty === false ) { - return array( 'isduty' => $isduty, 'nowfmt' => '', 'atform' => '' ); - } - - $dutyis = $isduty ? t('open') : t('closed'); - $atform = $isduty ? '' : 'disabled'; - - $nowfmt = t('Registration is currently') - . ' ('.substr($now,0,2) . ':' . substr($now,-2) . ') ' - . ' ' . $dutyis; - - if (!$isduty) { - $pernext = zarIsDuty($day, $now, 'nextOpen'); - - if (is_array($pernext)) - $nowfmt .= '. ' . t('Next opens') . ' ' - . ucfirst( array('','mo','tu','we','th','fr','sa','so')[$pernext[0]]) . ' ' - . substr($pernext[1],0,2) . ':' . substr($pernext[1],-2); - } - return array( 'isduty' => $isduty, 'nowfmt' => $nowfmt, 'atform' => $atform); - -} - diff --git a/include/api_zot.php b/include/api_zot.php index 8f621d998..9beaaa19c 100644 --- a/include/api_zot.php +++ b/include/api_zot.php @@ -87,12 +87,13 @@ return false; } $sections = (($_REQUEST['sections']) ? explode(',',$_REQUEST['sections']) : ''); + $codebase = ((isset($_REQUEST['zap_compat']) && $_REQUEST['zap_compat']) ? true : false); if($_REQUEST['posts']) { $sections = get_default_export_sections(); $sections[] = 'items'; } - json_return_and_die(identity_basic_export(api_user(),$sections)); + json_return_and_die(identity_basic_export(api_user(),$sections,$codebase)); } function api_item_export_page($type) { @@ -111,8 +112,9 @@ $start = datetime_convert(date_default_timezone_get(),'UTC', $_REQUEST['since']); } $finish = datetime_convert(date_default_timezone_get(),'UTC', (($_REQUEST['until']) ? $_REQUEST['until'] : 'now')); + $codebase = ((isset($_REQUEST['zap_compat']) && $_REQUEST['zap_compat']) ? true : false); - json_return_and_die(channel_export_items_page(api_user(),$start,$finish,$page,$records)); + json_return_and_die(channel_export_items_page(api_user(),$start,$finish,$page,$records,$codebase)); } @@ -289,10 +291,11 @@ return false; if(! $_REQUEST['file_id']) return false; + $codebase = ((isset($_REQUEST['zap_compat']) && $_REQUEST['zap_compat']) ? true : false); $channel = channelx_by_n(api_user()); - $ret = attach_export_data($channel,$_REQUEST['file_id']); + $ret = attach_export_data($channel,$_REQUEST['file_id'],false,$codebase); if($ret) { json_return_and_die($ret); diff --git a/include/attach.php b/include/attach.php index 9ba6be109..db7046ef0 100644 --- a/include/attach.php +++ b/include/attach.php @@ -2339,7 +2339,7 @@ function filepath_macro($s) { } -function attach_export_data($channel, $resource_id, $deleted = false) { +function attach_export_data($channel, $resource_id, $deleted = false, $zap_compat = false) { $ret = array(); @@ -2429,7 +2429,7 @@ function attach_export_data($channel, $resource_id, $deleted = false) { xchan_query($items); $items = fetch_post_tags($items,true); foreach($items as $rr) - $ret['item'][] = encode_item($rr,true); + $ret['item'][] = encode_item($rr,true,$zap_compat); } } } diff --git a/include/bbcode.php b/include/bbcode.php index d79429719..a5ef6760b 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -80,7 +80,7 @@ function tryoembed($match) { return $match[0]; $html = oembed_format_object($o); - return $html; + return $html; } @@ -92,7 +92,7 @@ function nakedoembed($match) { // this function no longer performs oembed on naked links // because they author may have created naked links intentionally. // Now it just strips zids on naked links. - + return str_replace($url,$strip_url,$match[0]); } @@ -272,6 +272,26 @@ function bb_parse_crypt($match) { return $Text; } +/** + * @brief Returns raw base64 encoded crypt content. + * + * @param array $match + * @return string + */ +function bb_parse_b64_crypt($match) { + + if(empty($match[2])) + return; + + $r .= '----- ENCRYPTED CONTENT -----' . PHP_EOL; + $r .= $match[2] . PHP_EOL; + $r .= '----- END ENCRYPTED CONTENT -----'; + + return $r; + +} + + function bb_parse_app($match) { $app = Zotlabs\Lib\Apps::app_decode($match[1]); @@ -283,7 +303,7 @@ function bb_svg($match) { $params = str_replace(['
    ', '"'], [ '', '"'],$match[1]); $Text = str_replace([ '[',']' ], [ '<','>' ], $match[2]); - + $output = '' . str_replace(['
    ', '"', ' '], [ '', '"', ' '],$Text) . ''; $purify = new SvgSanitizer(); @@ -641,24 +661,24 @@ function bb_definitionList($match) { // The bbcode transformation will be: // [*=term-text] description-text =>

    @U&B?`sWpxhA*=Gh#U!AH24bm2ugjqxpR$l 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 YJ%x8w+L0xU0(>aRzm= literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png b/doc/pl/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png new file mode 100644 index 0000000000000000000000000000000000000000..d239d69650fbc5bba4813bb5496695998655840a GIT binary patch literal 466584 zcmZU51yqw^-!~#9QUcN`NDD|K$OM&cln#*)q#T_?q(qw0NSBC|bdK&ua&&h$4Bm_9 zocEmXc|Xq?%pKU+egETE_kvWFW$~-KdwAi|^SRfk6W&yVWlE+Rt8bH@e00 zal;WmG)9a7V+KF#tBiwitkh>)W8-K(uW*JA>vLAD%5DxdO0JSFU7l50oXM@Qm1$bg zey(EAijcznf4_W5Yr;qjTr>!@ElBc)9M(pMgwijT3pca`u?}RENfwwJCsJZz9pW$+ z+a!I?4tetg|9-lpC>6g+TDBB>Qlgn!!PG=WhAIVf9RJXiv8iKxNePrM0Z*R&_X?ks zC>{ZUdMTHXkWk*3^*h=kAJ2R2>FQG%x_KXvLQ*(?Cuw4BN@{9ab5lJ#%Q;ikx#Qf4 zvqoPH$`cm3Oj(Y*B1T*aQe83~SZgX5|7}g$db#!4R65rTJ(aCZwipS987}P#RoEUA zzJ?$i$YNO}R~dVMUMwJg9Z{AU6iL)C|4!m^TIy52Ci8>Tw+{!iz*2VtOh^-3`&f-n z)CWZg6cE1z9`IpHUf~Vf5v6QqCFwCLOKh-MK|5dTm*Hh3)mf05d+nFr$oTxa@)0q8 z8RoVhRi1W4X?{!khBa_<4%2{jY4xC3;6Z*Re4+203BWdBck;%o^WTv;I&PFqr4bS=ckBWS`iA_wFt}pFS z+ymaI$I)cl)^WvLN!CINLP?lux&=?lq-5{0Vc;@KE-_$=bhoShNZuiK*_&O0E6^V; zw4GH$QB)6)j{X#KmsZqtZ*Jm>=_P4vhAOhiaHqEXwYKh%zF(2ai+4Yp=JyJ5h0Q&N zY#(Ea_<*ht(C;SvDjz4wdK3r~2mWt;L^Nw*Dk8@GHG?}H){N%YkKym~1?9z_elDky zw~QX92=G}FvB-WzHHgbjsw-xZ-bKMOOoU^sKFNO6w#^mCZSc{_hH`{7KBsAh$M)dH zgCUE-#GJBog@TsWcr%FUr?^|x#)irA(S1`soig-nnlkl&*1?HpjM>bb_@q>2(pI6C ziQ=eZ(bZj8)Ae+6*wVJNZxTnqr>eW zz43sAagmqe?lU#gZ(8bBHumrLdkkWB0o`$;VMa*&%HTN#JTSL&?QptAw1+iL;z^QV-g^b>KSk=? zb|vNIk`h}1B;Z$KW?>}d>-3WJskS{j+i zE>m7b$-YM+A)&lp+iXlsnOyyl^V#t*UC*;ns4o+`F9R@kJxaEcl? z@=lg7?7j zn0;8c^cRQKtdHQ(GZ%_cO-mp)2VH*vG2{n)g}=w^K>x|pDH;Yp zWy5`vimKXpkbl3WH#pUa!&=cg-YuBZB_!2(DW$ajTh+MlsnA(s<I5RHG*k=6BcCWJsg12nf{`w}hZie7o(F9<0YC0f*YXdvZ}JUC zvu$WTW{ay}$0M*m>|%9W-6#bI&K}i{4?8_dbvWBKh>fF}y$SRNbK`K}W)i|=Vy+t2 zt|p|z8vG7R*O&1ghB{7JG{gQMjQKz;H5UH232vy7>?@uE`?Z}5FxXwET`TbNg?$OqgH45Kf?UaOqDv942m>-YG1SxACfjM_7t z>+pAo`b+vQu2m3$8hi@<&#|*j#8}9y8rxzXn?RvMi?E@?UOZ-eY&`AzqtcbyEJKW80`;9Kh%BXN7|39scv*;YOv$trB_ zqa&ferUXA%ghqD3y9m_^Ic)o9mqrGPzMNb-RVau>cO$uqxT^Pb1+9_IP;1ZyIyyS$ zUN*@mCxUqQ!<6V3CXNNdmeQh?EI$P*&>JnzxXfm2<{O(Tav_`YsM)3&t154CBGk*G ziKoR@w%*SD@{(!e3A(wSCpr7}XcaA0z;EVF+h}E+XU8)_kG?gO?Ld)jP!ADB+%$%l zP_GYyx=`-m0=5dTj|dgHVBS5Qx?o~U^;^hC<=i3>;d&KUK6Vrmg#1O&p|;?)s5CvI z>$A-?+P7q=PE+D7?RTiry_@>wT%&7>iUHWxfXG;{$XEH&__%rs(J6&<2Wt!!_gTr zq;Rqr^G3PG#>Y#ngLihGaT_)CZg1N}FR4N~@Cc})<;6TtH*#qbf0}LvQ3^PXdo#}H zqp34sRvF@=6Qu|nLX~6@NCdo zA_!%4Uip}l@U3oe4`Q^ef1)DP1j)AZVUkR%$Y>3m-GeWd@QaK0WV<}2^%^<)9Q?cy zx$4hMM1{h}*cv5$N%8Q*)k|%JDk^n!3>HcUAWJRb5~jAc1RWK{J5-~(F}elK?W-@w z3-!~>N__=33vbP_T6l?0&b>EZ4<2j&MoBPN=#^(o8@8pZ){`Z(Jg78q3|W})|V3_1uh`BP}~x4OE2 zYKnuJI-l)*8}DIsw;r2KHTR{|x8abm@PpQWq+w>II=_p{$~sS|$0sMIUs?GKqCdlk zeg72xJa6bP3=xWE>;@p1t9~e& zSvMbE&l8 zg93pHlO+p(X(kNW*B|1E*=Lr$(VGqr`GN`Q(7q)n)7nl~^|!b4S>+QxSCT7N&v`e6 zE`aVs8WobTup9)Zaa+W(&^FRr3+8F~;O0h&tWecmu*k&}KD)KI3=9lDd!!4{a5OO+ zzPyD1uAlRLG{?U`xPColBeTd#_RJd^+aUj#ewTp za7||qZZ7YqPFo~_&sp+X{EX;=H(@((Ykyr6jUm~0MK(l)n(L1hwKJ`UA7HoiCK;K$ zrMP5y96s}4?^nQ~tsy4NmGARm=`ThMN!ug%V1n9sC$IR{CmLv{7O~vx`VbB|R;)1o zTzUO1or&PAVk_Nvg_5ib&b*fzL^|PHQNQCVrQRhvQF*IdS!$~^rL{NxlAgqhm!v-D z8=I5Plm1iR8o`od`7L&$99JEejBK^!_hUs3)%;lPctlJ46bDi-36K2H+SdA`4sIC+ z2- z6hD)sZ!9`KTY;LF;+w~nPfkCxZs;X}6S>avPLA^4HCsT{s<0rs-x{)`4QHMlAz~ML zrMAGtwYOXTsL^V6=|{TP&rmez#(l(2yBP+~>!mC^qoq1Q1^G{>BRKPCrM?yz-; z4yg#Iq62F;6S^ji0S+!9p6Vg_)rGmgofPea^kUfne$Tw z1To@cp!1smQu6w>ueif0Ub%cwejH?FHW|tFvM&66zFK5rcRzvdgT}@PN<4N-da>5Q zLEdcjAb)?i-P!t<)6)u%i1D;?-^RuQvR?+|-r1nrK9`5Q&o`DG`jhl4S_(Hbwov93 z@noFFf1xP=u8a}Bljm=(c366jFsaJW3wZH-Jtb7y1)wz8EkvZjZXA!>sBe#*q@`J^ zTn{v0$HLw{i_NrLR@6bwCC{RVmya;BqD}c&C|j00hb-IM+rQ9Ye^EHIY^nwFj}u!YEL2^n!pvukBH#_X@TpOEO)eVxT+5auJmBCJh7A{Ka?8uPFrz`Cs76Mv zg3QGo^6+0rRBPH9VPbMGPCN{wvV!K^r$D+%PMI*&d=n@GJBg0=V?0XSke{X zt4+2xPD^d549L{M{*}&j6-#~5cMrOjdAQ#+3qH*Bd02I@!wp>bzDKCogPZRrG-_tg zxxMK8PoX<=zK4pW`YpZi@gtbqukvJTp`OM@v>18+(9lr#gsTqhUfx}1b$Lbp`xbmT zazgMH0p_$w;;gS58%*Ly+ZulgY!6(#uUxnw@g0RbAI7`!2+2i+yzqQXZJd$;V`MvqrJk~+KefS1^x(> zgwUoj*7}K^=yjZy{?ua&(GMHaF2F&B2IZv;yi)0Zrth`!HXX(`iZKCd~Ete)+)e@dRR@ybP=DW{fKj)!?yp4HUP zm73NQ#+I*9wT(NIU-b5croQ9X2AI~J%@dEISQDL5N0u|LIn z{CQx&)4j{O=%ri{Dq;MY8&SepA_>A>JR}fMf(&Hh=2H#WId@2%3;cj#t6&ZlpNa}i zMFpm!%ExurJ{90)+Dz<+&N zbo+v*;rxlOuWzTc&IR2It{=kR#%qno7HvHqF}Cg!eYI_MGyRt4HeyIZ-1FNb zB+JJ1>s%wT3F#ubOu^(fU${YkpFj3yiZ{eSggyIJZ8i=*`!o%jg>^?$31*^Vy?DA5 zr#B^)FLUF@>DgrICsBu0yd2AqNFlrW6S7bJKNnhqNGu9;^z@bvS9*R*cqOu?xS|&b z0%2n1XaJI{nUAT=GR!F_JE87f-w>Q1@|MWc_s}Zh4KHkc$7S2Z#AMlCl&j~Xr{~Y? z?5Dp+IYvfCwzs#xobMZhVa66C-}fbs_knr_Gu^N*Q?}{HkKaC}xCMX;Y6&E)b~|FB zrlxLK6TnGpjjqH&`H5{>fLoOCkALp>wUC(CLh}$PjjG z^qjQp*u{Ur#%{ttY#-TF+!#$*TVjD@VQW z>7&yz@n6b#E&OU@dAtsk*=4I^V`M52lz`Fg7)-cUyu*QxUAsE3jaxw5 zjeIY0yR9LCI_58nm9^y4rfC$wl%JGc2q4mqZHwWIo1C3W*XJ;KZ^MOb=j~m^M*!g` zXR;MjASZhH$W2k>$+LR|zoesHt-N}f`fBibV5nWf&!48BKmQI|8yqA8XGBp+DZQK} zsgDl=85qix5%oOh)wObVcJ4GU{r9=N5q-PkaEJVElqm4jw{C87(0d&}Dr&go@R#zb zoP#BmmzOtmFcK0H9!)z8Jb(Fer*@#N?d>e=Y9|c0r{|Df$lTk);=99IKXmgSI~f@n zsLR!j+|<>CPbre@ZD1P!9SJBDu!}hF1ogaDJ-hn0u`x{*<2`>X3U{Fo*480fhHn0# zB1|Z-G&D3oMR6O{wD$Kar&TO12X=LJ<=jit=8_IeI)07Jaux29xJ>4G!tU-z8%Y16 zHNl0EpdpAeMbMgFuGQ+42_h3O;kz$Wd5fx`by4>7lo%j{?cWE>LqS2|y6E-<5ucpA zvOQUPJ-dgZ18G?urh9LL!v7bThoPE5ajOz6s-ugl={1UaT)^bXzg@kS*(%b?w2Gg}_3vA+g z%nmQa{iV_`l2eo1Achsm1Y7k4o5n|_7H+aPoFxl2n+N38P?bh6bgbz`}Dn*aWheJ-Z9)S{gHqOFGq(K|d$+z}4+ z7|);S>5O~{iu_nPbI{Jr%uGcU6^HdfMip`-7ARqf>;0B6>`4)MJtudBD%+RsiRVAw zj^|^305i{1Vy+bm$_t>X5^Ymg*Z6}2XhlWE$LfWB1(i)c0SSrzfB)V&@W=P8xGn~< zR(YJ+@{2Qa?D_kQQRmvy5qm_Ae}t4JllEQtSP=^Z>(cSF-JpIPsXS2@vAt1@!d~Kl zJYEgpSnty(b_A;C3Ucm72$aQLfxE5I+Riof_4eY~HC(VsmMPDz|~H1d)rEg%wNxyivWP^D;#)FaA}g z2zIaVfthS(V-wocB+0_UB4WS%y@>bO7pE*U9ky)e`8K24cn6?hC zaI*y;K0MPlbZZ<@Np0)I{hcJXYiu;;d%hL;xBzpvO39D+6~($Vnbf`JFLtx}??X*E z{N51_)(~S#+?<<801&{kkUz?SIB(-|T}yUB+pNarij9rs#S^Yhw?S&hK8{aVYShAM z8gDoi>`#RZ6zEk_(9?f%c8)da2z$=QCzbb3{*BI6lb4qlka?U4XkQ$ECvq&!dG_pC zTUaT1LnzT>Mhuy7y0=y{*R=;I{sD1cq71j!Pm->G{t-lIOvgn3?ef6q#mfwWr)TJglvX{3KPYM@rU=Xg@C~`Yoxh{N7Co=?ojG+QRt!wCnpuMq%)o+z7XX*@Y@^Gk%0ES#%B{vl zoHpMbjiIK>t?qEc@w!?-V4xd-43vQaCA|hg~uR1v|WAVm+V(l~~{p z6nlQ1&(?dy-OXwncQh_;ZhL^ZD=I5>3=CF4yMYJ(*4Ot{B2YHgNabUeJnG#Fo6?$^ z?)G*pCMKr7JuOX5Z3BZDINn7;RryUybawq*LNVO7b}r$YZy9o+8$CQ&tJSbecC1n{QPMei!z4U7$NM#4cu^(TvUB=CP?i|f&^ z`r_m7k9o5|f8!%O=UKXx?g1(y9CAYe{DZaI>r@k={<5%^wN&r^t3AYkaKk~U`Gh2o ziDqSsS438(ImO2ZjFQ#2}J+f&*rvZ^4HG?*Voyq^$Qb< z08X$6dxeiun0;Y>o}s0sB_u3N2*OEqar&O<4kF#Cq*4VR#i$1%kKJ$y~qk*g6I4Yn_Bbj8X>{kHR=@CDhc2J_xqeQ6Z zeOYM61n=WK#^~bltk;`u@ z!o|ZQY?qOfn@dSUW9sPW7#BAQbgqeGiuj*DmtA0ME+X#7Z2bKE%l6d96wl*9T;B6SV4uieV=q?7{G9_gJ2_GLBYFnF6Ii>GV+QU$yL$FAH6%0sh)=q0*t?`_TD{5xS39GUtdXe zbrHUcZhQGu)? zeD8DzX;E--T8Ws^*VZGvt(P}FwinekFtA}cDdh?-D0l|e9XRK2t@^;A0Q~09pFg}J zBHz`26ciK~2#>+!lU-x_4mhff6It@}^Q~=d4}19s1ndg+QWFyHuv$>K#O1H*d;9Y5 z#tRT>j@IILN`kq$d6nY^@m}2#0hqfc_V#~u%#5MX$h)p)k_p?d-}5TkNL;TJ509(0 z-@2NC*;#jjQLMlMm&6(BJvS=QWRH=jk?@Rq?9kpa|17PQl=HiZ%{6-hV6BO2`6wK#l|O9)JYUQL$s- z#(y0hX?!kxJ|%sZe~f7;1Pq z7G8+^4Piue!Ja;D!zJ0{gZYeU{mcVV_OMjqJl#OG;VARdw?abL*s`*Xd8v+aiumM^ zSHtK^gR#D?U}8nh`u)4@2!`zqHsVMO(E^w)B^A|2z%TDW_rtc2k#`Mk=eb1vb*s;L zsU1JX>vWPu+3@i_P`&M;)Yqd%sK;7``U?QUd7jnInE^}&b}g>I6u-=?{6`G(l+|eh zXZ&X~t7G9QmUbOQhNqlbFye2RI`Ec1F_Ml(6DKU)FGho~3?J;*9m-=aG%+|Vx*)bc zC7&dw^1he~H$2h%@w~TzWBYPm_#%JKE5-)-r>IDSjTE3kOS&8C7nfE>S5)NO`X6j; zb{^e-m95SQ_?eJUJ0QNQ@&^TWUcq3%?I0^b6O#tFPlYL!>%Qg;RCNAYP=F8E8PFj$sMvO5SE#v2DJf}l-sR1U z5L|eMeN1okZF?KN#4E0!Wp0+I$*En@)_#d)vSb1V?MEb8xo!-A&Wa_`(tkKiOcI#NkRebPL)I4|B#@Ozu|P zoOdd4r0auZm?YDq|LUM;Muu2eT6PH=!k~v+HG%>Ht@%Ju3#Ar52Qt;&iC`&6N=jPF zjx+pdZjQzH#sR(%n2Q=58Sp>@kLx#hCIGPQN5sX&wZ9Bk`CDGz23X&xffO@iV;|7y z0G$4tR`q8OCc_#4vS*$~ZlbL;;0~pq1|$w|N=!Py@dt>#;L{weh5TD|r#k?|=kvaV ziH5Yst}NE?d@U!e8 z#}@R^fF_%)#nn^LasFg$d~#~)PIUpVwOcc4cU`1cM^jt9VN~N7bbA9B>xili1s0eu z*SWXHspmImh=Du!f&K+__DzfTIpN*h*)AQpv>&&lV2xIIwAZd=$$I^94!<@;}qrQr)nGk!K3-I;AY z{DNf1#NBzzSzbDzDy(MfrK_f?vK1E>H-hb)W4VjFhwcj4a(qgPxu<8{1}!hBc7Q7I zrDbFQ7-;1UF(0i0hY=jNMB@j6g!HRGSo^wF4eGAac4o0NlF8P;2CErX;CZs})mdSi zk#uV-KUyA1(H{5U9HbWpRzQwo84Ih^6fY~nBD+&IXlX)w6gR*!s>^hU3a{l2P7|o> zm(P`$d|^y<{pp(U_yjI>`Lf|Y43UcWCRSFy*o3gru^(tDG z^A6SBz+SNzeWw%V?AgN7rVUhrqMOa4yPbVCciXU5pbCCEIMkGSK>P@ggoH#NR6Kws zEUc^-{Vol!OSHGECigSs29eE%b8_rmEB1X=Jz!4#o#d+44+D2VR;yZ{09oPk)b@uw zHR4zh&-Zm8fm=H{cu}Bvfg7gG_o8jJUbtLdmc_nNeRrS7|2yAWN8g@D>`?*D(ta1K6}#zXT8XTTrvT| zGch$aRlZ=|XEWF!BooOAc`;*EkJC*e>3W&QJb)+Vo8~|c0Heqm2P?VDgO#)g7MT+C zWdgsA_BwezuplNu_OKrwJd5OWwrfAJC<2D?Vv>`Rm{JG+qtcfGiU4r?bEVRRKXs%0 zRppLe+;JuV2Vb4-m4eEhn9v@1meQ{#i_d-`f``??zf zy@HRQe*`avf`(=p0N9X_kUNI5&=Q!`^+34IFaDv=L^ z=?`WLIg3d z&=zd+1TgrZ&_@M=ck*%4!hCY$UoJozzMAP=PZgo4Dr_7s4p$7YNFeEE0LRxIc5@m9 zpt-g|$^}74j}3EF*S~!9F;^{CcXRLRbP^1Ii+anVK-A$<0C8!B=uR(rROsm*lzrhr z`d2heSt*@Qv|BLvbM_|PWel=Goj`u_t1}#1e)5>8_}RnPV+yyHs@+X$wn}Z_Nmo}_ z<2^stYy=p~-UlAMS^CuCg1cnI#Oas|)!Z{KE>$+tPE$T0Mgv3(R45yX(u#`qsVORO zALMP)qd!8SB?%9kIHfy#rp7t@b03eldjPToydij(DInQz+23ZX0|Za-h5tZ!x&+lu zQhr9lVoN)%B%kT2b~PcUvjd`WpUcff-s(dQcB-5fBX@RefZIP*w%j)`;BdGs2P8kh zGukU`fSw9g-`zS0H}yPC>MJGRb86AB3N_OKjGyoMb0B%_oa?s?S2Z-uI`SOC!!t;3 zoti7PBp!afb4~ipp){Yg5;!0im^CL0tQ~SZ*X{>;taJyju@T4L;dUNFjll$l_OmuO zwFeG^@eVwD;S2(23JBYyMb=z@a>Q|BX)*M;-Z4N+v5wrPwtPm32eV%EaFG(S;{s1* z@Eqn;u1XTe=<**9Evk3bl)sRjzP`Q|2SVwcL3UT4)QAJ>@WB$N*B6`lMTY?BAfb9r4j$re%NsHUqYNXEJ$T=6X+!exD9r zt9R5=HJG+iIvx%;vC!|PmkE}H+;OFDk46dW3u#){#GSVbDugRLD)kNOw9 zSGT{J13}GGIVl=${U#5qA3I1}%QAGI-jbH+y>?p4wnddy-YGCC9=oE2hV|Wmz$Jo& zN67?N9PDKCJ$SgI zR|XO!+%XDf{CvvoAB3_%wpnCKZE|5rb0S|w`g{>$UxK0wvA-5lqxFWol6_G16gy_A zxU{rodPWSe$Ee7m*C*dG#?$64I`H-OAE+%oD>A5U2V#@6*X=?e{UNyRUjBKR)1aZJ zwiN79K6ic#+%JIlE*?$aEb`nuA%)FcJ|O8S0~8eeR(xXOVa!WytIFPwElMnfRopz{ z)RQscv|?j*K3(Re08&2(ZLe6xoSmi5&Ckob|J_4bosI_o*XU=Z25V+U>p(E40J_lD z)?QCgVC1@WtM@)wYzrF|&d^?Ladkc4>9M*tUMz!$kXwUezH((8U8LzLc zC1)L`V>F5W`uV0wjKj-!SiDnTX2AM) zIncRce>ao{B(6e0Gf7KJ1K?##WlJ4+1N0-N?B#;W+0Ow?%F42|;cS!taf5 z{q|zAK?=F-PN%D~-N|i0psjLPBe-KKfPSp3faT(Rr|jNgTd*g^Tz2qM1ybLKWS_>35=%0EAR`0y1# zeT2@_9YAa*9)}5vi}zj}tyM#pumGhq{_=$gSy93j3??tXghW_0aW*LsjBOf_A{qj9 zjdwr=C_7*cgGxca%WVdO1)g)()Y*xXWBKGx`Aub|;<; z=NB}dXIkFDYbhR)_HKb~*k>0*;ohC~9xg=cnSvs*zM53*(_g*<)n7T;Gm1$jWxhLR z;LhdjcJ7R)JoJ72&-(1t&9W0Vyg3;o9-lPX zhyVoz#q$30Bg2bTo}=EDjcM`6 z+2L7kFD$4f7gv^Mg04!wH%@W#d?%2Kq~GBS>V9(BnQCc^GtBo%QVqv*Uo|Qh5C? zf7rx6L)|PP9S$yj+(0`^;b?N1SEdM98$dEhbQKT^OvXbKwwtwX7*F9X9%*XO>NLnj zP^Y8qR5>=k+?Xa+TYjcYr>IK?@8>Tb=iA0EDt>Qt85zi8I}^zaY2PUrB1{P~A)LCr z0K)0k))tU-1>u)Y^070vT*--vcbBYWzT*(ITSDTqg!&aEH}kxBiNwWc`n=_X(2^*! z4M?;W3dR$(MDGm=5@5EnvWo7pZHEcl&NW$T=U_UaTXe7BuGnKDD`rw_PMF|byb=;) zA!nny##Ahm)`ivk)ewPOa;dSI5w1r3mxE4cu#OV8I0Y`Q-qK>;a7(J?zm$AAk}M`q zyxKJa-!rQv2>p3=4qd>7JLcB6s*++(6eMR&1#2*3d9n5y^L0-9XDh{Lan!pqbWS^M z^7s2s^6<2Fc}qIJjX!*$Mlz0({z?Dow{Pn|)9Q%c8u>32oSrVq<56VQSFKg1c44+y zcQ5KPHTyNWy+pDok|FC7_mYdps78+`NrLyHv55sGjI2m!*o14{St(&^~ z>|GfNX)Myx{CUZ@c;l_MdHG*a@IW3K<(KK-^ND%7RoEDMB#e48%{thAM|7 zRuu`kbk#TP)Ez^z>{1=>UZbIC^%lgA({l998I4P(82c?9l7u->s(arKjffAUF>bS^ z(QX~+1mTYH&);nD>~5lggfZ+TiS%sqESaZipq@9@k=3^+U;F&hvZ0y&C%QMNpS=*&IBYA2TZmuS;jYet?2m=M6Q;**k0EG&NQ zEjY^gP6o3X@OymrXMbwp|33e#`ag{WW7!~f40S5fhnO5Id`Z+vvYB*rX_5>?Uo~wn z67BQ+#t2@wJyFNy7{%?*`zTAoWcAPF#vz^({<(abi)39yD9i-jvpN%xW9Ey7jE&|r z19?jA_|&Dzwf^TK5xJV>&TeRaK{FUnIs`F;upg2XQ7{MescfqY>-(Cz5b(FdS`Vdz z5Qnd~*q~nwDZ8#7=g(@8f3?$X6|{qfGAcJHe7jv*>_~IZb5e#6Ye>$W@N3DfKE~;G zQS11pe8#Xun7NcO_@wZY`$jEn)e-0L=iK(8&j%?>A&bvxk+Vqc->m!eOOA+T5#1o_>_AlqP3x(ma40I zZ??W?dz%ZW^t2=&=}mcCv~&H@T1Zcjj+jzR_;T60tNumxouva39RsjaGI02SF~@)* zyD)q6(8BymOWuSE3l6v4nY7PS%+vo}tNYJDFj`6$?g@)fY;XPjek=QSI^sUEknyQV zcT>g8HCh<4wx<6{`TJc@XcAmSqHDkNds1!M>pFk>_Ki~){St1d_?o{_^u!cz!qpOm z3FM<&=JeFt0xBYB?#w|JJPEZwn{us@9fAQO7u*kS!h`A05@i-$h5r!za7clla^qy? zHft(;hm%2H!pjKc z;}vPKjdC%0mg}mcZ*7usu(fMksV!%VXnMP^#uVbp3@t?JIKn+v5^+u>C+yhSw1bH) z@Icp_i=&VbJdk7pi3G6c0jko41yIt_eKa+V=l`U9gxd2?B{y`v*Hh8(2O0Lq1Gm$? z{g%d@<#maO;(rV+yw|Gv?SC+TMQPS=Y~r>3^Nfv=Dq&fVrAs=Y3SB$VMtNq{D0CWHC9*%pKxa&-}8T`B;V`B`8S< zrA(3VPkfgg6-hdGqL)MX?PmRqruD)a0e{}^G!!Wy0bPFcgURLX^d%F)Y|znPChlpt zkUa}~{*|OROJuL$#_2bT&r$6&z@t1Lmo$3eePi`g1cu%s&}ps|Z9g$J0j@>?mjSf_ z@lo5oN>KvR*x4z|f1tn}2hJdjRE$HQSTFj(g6(eB^7&FUp0? z;T6G=0#w+?xJnf7S?w5C@CPJ;eDx@{UxdX9FRw`B5R=SveimR2Jtw5+-hC*k@c&)C z1oNS6PXy2gL@X%Gx-J~nL}Awyz+GOMdAMhP(k&QEC-DXc4yZSX&j1Ucy!^ehb2m;p zkj;Qw1#Axo2M4Za&je?;cH1PtBrUQ$SSNHSy3wdKs zfb&8u$I$weyE5KQN#UsKGCG1-xd~o|8vZNeQ5vBF4q-c;Uj2sV^aFOPM`&uqimj2d z+`B@xPZ_O}M@06I$a zHt<%x3mTO&B69VEsoLP30l5ruJM8!owxfb4`Pu|(vxK*XM>)ls-dn$JY^o68A!ebY z5pyCcj|C!Op7vzbXAeX-W%%l0Wt76Htm#*m=_;9>dJ~_P#qjLlB=!+K}CxW3fa(v-IskIF~-$ah&)`X1EAL zn8@HSx!Y4dJB4WnQgX!Gm^=}Ck7NF^`qZmX=8rCCd}_;vM{dM5Mf8^f+gEBSp(e>Q zoG%}*PQofFWh@6^%q95WR1nAq@@vI%a(%W&r+*o=%c;ucF++dn9*45YO)Pg5B-zp0=Sun}8Bmt#tL1u6Rntkyc(j#TJIt9%Cc{ zh$VOm1q1ie;5D27$^=fqR-kt%G1VyB>-%4=7@mvSGpi!jc}=GvyO#%xjh*HBJGfWAk(O+n z5nUAW+WC~prdL%{zaVk)7=NQ?le0rw&KFA=Tn8P>B@?D-f+X1U-oFPF)@=1WkW!Ur z$7{*bET};!bbTmkJYT11lkyo>4g%&&w2g@v8HWkTp6H2*DK%HEh!jg-Yy|)10mRvX<{u@m!G*@7q+?bx?eJ9S)S@vYxEux zmGKsVRH#At#%h@JybM3>iN7*%w?UZZE7#l#AksE8A9>;yaMjBf{qz;UW(a)iagS`IDL_iG#R>1}2Vu8?G zwm{Rw)f5A*13Fk0fc}hBz4^dor0#Un%A#XoH8ct6%*7=QVT>3^F+FkDbE16xrr(-F zRl>KSU+#teqNaZ{Lo|O=6uk&M`0F;KYfK(QS>x1H;vUqQ$vs-6jCpY)stPlhDk<@e z{ySpSnHUVAg@ApuZVB5;(-nu8eUz#8-#@a2)RCONzKKK$2<>IF?%@6hxOD+;s&?ptim~a}pGB#;?rtl;pU!YL@WG@E>(keMp?r<*8{=JDC6hM;Mg$ zP4F75QFL4X*q82#@wQX)=SUG14Qb+Wtq>Ev#qj@T0Zw7rJ%(Mf!)`WF){qU9#>CAP z%8L8cRQv^MktrTYHtDdypu9$bX7&Coro`p`Ym9GA zKH?zh1H!TGQ&iMRThaNCh4)|KGzwDTgi>D>%?y9t?L%0&qkWeal@v%D)Q#B1|G!tF zod5ROIBU{;-L&ZYwxXi4i;&>2Mj@}acM7$ztv!(K3g_zj+gDk-OCG5|@$)g!VJmng z3)C7)4pItAx+W-%v%J_ltM}a}tJ%?}iX;v_trc9|*+8XmAiPl@ROC~2xgD3P4ZJn5 zCI1?+UX%Y-Iy2grs47)(8dJQTdhC5)IJNL#NvjSg^G4y$3f=CfYq{#{+$Z@>lf)}#Dk#&?lD#&4maNpWrSx>IYueolexzbZ~ybIT!Uwr6)~&9FZYof7hB%2y)2t_3>_*43_C(hqN`8AX|Joov3M$uS9`RCdkl5Au zSdXYW4Y4H@l#)Qhb)Ejd<=6M0Wc=YoeVR>sQ`y%KUDxx=yVbq=!3h~vY2 zkdB?Mb_uUN+bwA*QSSSz`ZWSv`yOp}FOB9QvP9CdER#qb{#-GOacJt<$@m*xtFkd$ zJ^AXDn=GH`-B85V72$e2L%ANVD%E#)Vkt)EZ!@!K!x77WbpXTtua9@Q`?Lqo(O2Nr z<*}=WEZiPv&(Mc@pt+Pa+tYwg1i+2ZO&0{$S85XIa+WQjQFT<@3pJL_qAm-M$Vky> zY|;#)ZrRH@bFjNAFQmp`MjuCG*qlX4$x}6<3IcBf4jKjU6i2?VI6wXVmQ5Z#q1e^m zpUs9vCyZq?)O&bd*!bh{%2xAW5xwRpFW=%>fLK4Xs}xS9xaG{3$%h?jm5n=|k6iK^ z#!g$9;fhb#wIke)sqBa@uP%_`*h=xt$&!{MHnSPSUBP?brg>W#9qQ`{+}&FJPpTfM zAF|^;bKmfUc#^$ct)IfDYoGg&Nxihs%B!H@rh+`mj_ z;Lp3ctRMK%Le05Z6(x&Dvogshyax4%XjK~%fOl1Wnv(fF=s)5Q9hP9DPaJ^UivQ<> zGK`#n5E>F1T2fUNPs{`|PUqb%Ku4En2bU9Te7yU-1S2;Pro{nK3gAH8hmfU5Z&ISq zpJAb&8i^*uv~Qy-D%zB8nO8R%qT}U)v~PtE*1# zumxXO9tZ{qZWBzl`s;|n+wCn8!8#Joz@8O(o}4q?KVEUxPn0<7_vN`?=3W>A-*dsi zgO=0&n4g%^P0T7{nhC*DHwU&BT~9flFlm)>c?@{>|d8pPwxyexo+ z#`*gv59EE`DzpBSYf3tWU;w))dZAzYju5)YUW4jBFQSQ4?#Bz0E_Xe{qhsTZPTiN# z_*4d@L;f4U!iz+fr9@9VzNHC{oSsF3@VsN}EclNl!RuAG*f5|qxhXMk9`Gf{N8~IW zKCdA^n9Q2^b80ZhZ7>nyCSRRTS3hpOl}#M~7(bH;LO>PyGYNOFtC%H!>C>4+Tp@@l z2w@l6ytIyS*^V#l66ehpihE0>0T5kqyVd>}zkFst4iIw_W@~rF?57a=rrmBB zcjoCwvw)Id^QJEz_9ZykzEgPyejR)DGj6MY!T~m?;i6#I%|4|L?-HDx4pg?)y(auO zceiDXZYjVn@8F4QmCrHn9l#qBrIWo6Dc^4IpI7Sga3golw(hzlm2L9dT!~caSUS8( z&lMHCFrJ#el2BrFYcf1oeOY>q?H{DSHfJYU6pdT2&!@Hl|{F+D= zbM?^c*M&VTYI=hs0p1+ZuPC+n z7y2{pI|a+ey;V7PBW@iKLos{zNtcG$5}eoU=qmukql))=xNF|fJp+k-b*92Z?1@_J zu?xqs=a0Ja-nIl!jj%~Ks&(rc3V0eCN?vY5nsybvf)@a?KIL%II z|9Lwzu3I#$POyUBz4W9#tAIqh1=0M83Ugp_8t8ki$ry+S3cf+1O(%D-QedP1M>@MXwH zfpf;8Npx$U%Z92f?;{v}X$zZ&avcyq0@xt*+M?*nhhe-fHkcH+YQwr`n&OCYq3`H- zcWpSi_F4J%@+5$-p4bqe{UCVIo31d$StcE?a5j-3kCKKU^0@jckv>3UgR>L2>P+&Y zmHIIO72?&U$QTfJB=U~T;Xd-EGKwUWXdX_*4G&8|Yj8CdVxRA{X9AFn#x+Hfy8(M0 zpdJ*m63o#7+qFalLfzYa&vVUTO2u>_s7{++|KZ3-(Kjy`4lHbyL}^i&G62k$`XbFMP%qmxx5Mk%}B{b6pr+Z0PG)e zkc(jPi2;dMGF^Gs34HoM#NSBkNYCU&*XPC))?$j|11e`ASD5RHokf7{n@e9CIdN%l z^La7fhbixayksQb73fPIohi!q$)$;FfzmJCj9sTyE@!)<Q6@NZG{u@xZ zuq*G;1c)%id1L<#mOa+;*7PQMuwb{O>j3{xF8Ebqfr#np>ihmDCI+||F5M@W$u`ZhEQUqP#5>? z@wvNRrE2g7>c2VNA#?Q1MxeU+9YGgW&OCifGVdg+tb@H#q;I4ne%q(DMEI>01g*E& zST9lJpaAx$PJNC-bQc6GjQt7c+du3+Rdddsp04vB3&qqOmE1gCZ{+^B3~Mw01+vZ& zz4wL|r@@;$r{5+3<4dYxK#T$Bl2Q>_2g=jkmz;$+BG|{X+Mq|Elt+gVLz)M^Re;(LrT!|KYb zhl2yveBRB91c`d2c46T^U9$Je=G?}=212y?T646z_Y-jvSfxMy0dDGkcO=&1O6hJn zrK@4t#*6C22_U9yGGMa&Hrock$?mF}D9a;zqwGsPomYfk!bbxorG@=0C*LOuuv`7T zP$_o4MFTe21B(*t^DRgocY}x6_2r+*YZE+9R&`(*cJIY!ppW zRO5&QHvBdUtxNMbGMyzs1Wz_U=qj2m^QKs;muZ#iRJ?yE6~j{ek6S1LT|@EzQ)%x( zE#Az4Uj9j#8RkvmYf%!d3hmbm^0)XmsOnqNJKP-i@Zh6HG`EZCgdAC*M0Xy82&1r_ z2g0IwZx{#26A{>u>{5ilN)|S_ouk4iAIZJQA;*RJQOusg5`Zyfvpt6q!G|TnKuqj> z)VRDPG#gYi4lM!;2lu3}bUi99qmTWFMbj~77Z~U}0-{|1;X+v0G|C{D)6xRNv<0|9 zt`|7i^$ui)4UkjAgGU&d)!k)v3U1ECzDewn8VSY_TPn0jS6qDoHfmxxYV)lH-r-vP zeQGR?UmB$Wu2LllWV0>cs1so+Clz^=(IpjA!w+R~X55Xe>mdt`%U;_X zZ0si=AG-Rsx8+9VGA&8_v3J(1 z*jDsA%z2_WXKlm>)Fzvg^^vQ870P1QS436olPT54jDWQZMT8~W)&1+3)bPaIivhgh zIc7q~Dzzeh@9LSe?6r%GL}M~xz(bxcm4=x2W8Z32)AKdH?tY@l+SN##dR}VQLvkcV zGg4odE)~?N^sfJT0iEUTG!npFFV16#Ihu1{ zko0chB}VMe>skL9pvU}W+-UOQHnyutB1C;=cYA|bq$QieseR*g7*8XqDE14SAkD5#p6EwbpO?IH ziN)atShcR*O7frvow2JXGkNajaQXjq-&`#0uxB{ljWuSrKJPP5cwoB*xVEOVZ{eOG zyno=E{EVjW^h4-sGN}!=m_H2LGtQ5zYSqVrLcUZIhPUcJ9}$XWC+;Q z9~9-O964mEMJ76(4l&`!^|U3aEasZ4ux*fk&h2V`A?<-4l`@kl@FE@y?MHwEp!+@RwocA1z{}gA0e4 z*d%1LNkPetwgyV91ztP&WDbyFf_|#RJ_&@C|v`$=^uSj40i?GROt(tMFBF+)hP5%A zWLD7xJ3B?+Q`)6kObvex0y3OfKTtT$ zL}|9eblySNw-;*6J^BMh+FK>$*I#UV3$W;lc<#Tla_ZG(h^BA`LF9|I^APPPd;bh4hvR;T*q;wc$clRVbRO-8YIksfc2|56`k^JV%uQ)4>?fE z5Ze2{0?on`J$HB-1R+?wCxwTm)7?cskU?>2@;F*>Du$iCpQ<|NCSl{OR3kL$j<8_# zkBBm;PAPsbhs-!s192mo;lB$E1Gr>B>6d9K;nbC^w#k=8Zg?f~d>XhJq#3p(|Hh(Q zW!DunRHjL`T!s}iy0$IAcrxwr8gVogW2h6dCl0)1U}@(R9K0yEPMR^PI?w)_FHU28 znt9uM?Bi()ht@>ldWOqew~_o0wlZ(Oxn8G-|Iq`Nc(@=$L$V3NpjGqfXw{4t`U69S zILtr!;y(^ zAkEUuE05A;KTGVk8P67xt5GwQHZ#baU8^9%13TY;PvDw!a6c%>l$Ea!4lF#vt}@ah z2y9nYhehF6aq#ge+1n(*2&CrxLSy8gw5giF+8;=l$i!i5~s$e;Pv(%Hv*?O21M7GGbc;>65`M45`^o=<;bYcmZ-}^zn&*` zU*VSPj7w38#D3)s&aLV1N@%V}meT4|M2-~44#Sct#ghN!nl33S*BSSo6DvQEO|D<$ z5#mqPfwR$iWFOjBDE!mQxT-L`JUs}gIKPyAacZ36J2IHw{OpwnIa+jOy_6go;ZT?KJC#&=gJ9;yI612MpyU;u(IDZA?b6)}un(-t;jT z*qLb|-V1ajlG9E|EKODv1Mabu#e$_D64fwVCce6zHcS_Dm+o=<$!P3!Cfhh_7|i7S z8_S8eTBXm|nm)Evn)oMcz3m$PSZ`bGV$X>FCB=#rJMFyvOGwJ8s-q6eIfbhn$@qMfvQJVfi|9r^_%r}DeM%d8ghb}? z0Y5677SLHRZrd(km=K7WTFcvux z{BRMsd{q5=mH+D!H|LBxz!Dfps|M$F zI4=tPm1y;K8~q97#*TiP!@XvUnl2jvjQR@daON72qYkwaP;{uPvD<5w*C%(mO8;z^ z-WXte+s1t&KTN5r@w$y#%8k{)k8I18?#TTH#2weU`AhTQq;q>SQz|~klqBGkUAziE zQ;gNST7^g8n{l(|;K-L4T5pq6bZ7JV0jOl6kVuzQFGt_N?9>%C!?-m*4@wH>hT1RP zkn&-Sca>ik!=8S%X1PqVHa_Uv<%Fd+9Zk|j&zg;ILgFLoH+SR->YV4-fYa(P&MygpgQ z2E@qvNuO=`Mee)`#BjP=pAWa_a}ro^IExE{(}H9~Y-<$?Q2PMfJ)DF@?Rd0ihRW&y z%w~qNsn6r5-k(tO3XwM-AT5+Y+A%k*^T7~#TAK+g!u>Nd?`m>YMwKxY9GOi{BAX2E zWsWZbK#s6v<}gA+A{rBhe>ne)%%#WV!2u@AqHv$P+5cW~N(;KnqaU?@ zK~FgIK_MlyH&lwE_$#3J6~Xl5Z8^t%X$EIL50PW;nWC{xcvjr7+X0f()jV&9xZrJo zBWg}{460Zn{i1G z$G!ppDotvNps~v|8108){EJn#CG0O|JPQ1%w0WWqRaRhO*Rd>OI&fRt%gJ*9HXr! zVS)wQsbP$e^LEywEgSn7Y`Xsd7XPfW?vw=#T5-!y2~u0wCJ$b(h%h&Ti5MB3?EIGb#UL4$!SUNJ{?5)~*_CL4!S{XC@00x%7_C~6^uyt?713vaU|APz z|L~dv74Vv*O3!lN)=O?+VtG3RTGj~u9DBGU(WH~6tBwa0ohRv1&%;OZLTs9@v}s>7 z<%O4v)wZ7qg(oPI5?9Tl$b{Rh*oD2KqM$2$Xo7wo_ zWaU>0AK3XW3FhR~I%+9yK9O~vC0+23OxUwel5HS}EG^^9jOa5MqL5aT1dT`Kim*Gq?Lo@h&U4w{udm z-f@}?#!}ne?L_{;t(+E;qJk-s{@wZ#!7-dH`musvV>`@@zA4wf%jo3*e1 zRB;-Be#H+-=qKEa+_tFYpqnII8ROO}ZsPTNX@G*gD9~Z9D!#d4#(^Yb$dt>R8rZ|? zwC=>i!{p?UYL48H;0a-&B5HybS#~>f2inej(pRQdQt~8dk}KKmluztV(h;4`3Ix7Z zV)N>LtbAL(F@Y8(?NVJC?N)MI+mUegN8!|4!2xcFXQ}2i7>PaRJuK{aW;^~6PRrUy zmqNazM$N&Mqq%V$ABGi`W9b8fl@0hkaF-IiB=u{X?R@wtNd=5?jYubX=X!&#Q_Cji zstQQUUyS!?Nm??etgtvM%P}wPoLWn@mo$f^gph*bHWciSEdz3IZ#{imYopQcW>)9I zpo}Uxh7=|&ZyE?3oMGt?B#!2~dTqWutJ#h_pFVWUCtk4Db+|NI;>s`#z^jG!7}$tu zG2yi>s(HB2l9K5mML<$C|Lza&z7or^?B_kSqBz!YyxJX#~u&1g|!LNg@hYtLs>4hF_4beYK%N4cXx9U7P< z^Q)$v&|w!ef`JdFGX}yFO<4Zxatc3FwFw;7Vtyne3#%>y%KEMmiX76r5AOn0zmXxU zgOg2nwS}l;%aYt`7uqSn)F7q42TMcSG}{>vg0#d>|IY8sfdmSTg}|8TT;v|RM&~{m zqazcgOoNX4Ra;l7ZDS=xd-)N+Nz{Ni-pf>6WoQ3$X)Q%dMLek16=%IyeLm5sOoF+o zZQ!;ADE@0hMhWrVsMYq8VvIZ2H`PM^fsVD`E{hHUbcDYY1O{AC0L(FopbJM!G}?TW z1S(M%dr>fKCJnXiAkqv!W`g{?JZyVfv`9frp18&ky+#i^Uzcb+QI<2qQ-pq%`5?=_ zQLH3XqGYvjx;nnZMY54-PE{z@c6@-lG~Ftqw*FCWC98xo!Lh!i?}m1aEEQ4vGgKT% zy>3s-p&3}kf%;D9g_!Amg1j^xb&WHlO1;5iCnm;tKw{mcSU@MgJtScRzN(7xUA^{ta&xvz#pWtUbCk2~q; zs%ha-jvB*6VMSr^=_xwmlhDvTq9dG@we_IIa=HNnCQI;**a=<;R^p7?_3bqWKZiJo z2S<}Di8*FNl__K-6Uk1txpZ7Tzy&E)gYq!?c96gUL8LriqTJ`6ZaRfSRT5V}SjPu~ zTt%N<_vaqq7;Hdu$<^?5*oysIQco^)N*yhpszy3qQNL6SyL%E7QG%6yogXRm^TtDC zhB)SeAHxI^wGk~$CRu(cDF&l9sR3Yr*!}%l+j>eTlI*R-I^c&99{6Y$c<28#afh3e zz|bO1iNkw9<+}SJm?KZ45)*+^ouJkAH~61Ss$UVUZH1%pKVhVGzi@bK_QVO@2#_>^ zf`J!%1;l7Xna@xvFnk_c)330Dh4Ie&0G8a^5G2D7Qs*W*>6kixAATNCq)%mf@5J1c zT2e5kkm0)Y%X5XEY~TIi0PGPwVdPqT_s!YDM*2H>==jdVpd)fR9lM8KT*-N#6f#FU zEeu(Eg1ZaTQFdgbm)iP?Syrl6fLG z=DLum1~Ue6)h~78qNYZ(wac)EbmfM*<;8E)M8;L5XEkgQC?+aSAHH{S=y`peh!Di5 zeXbPLekhc&+747tWhfFWsJa&O5Dn<4`;MU=aA)xCNTIV;C?w*2Z_x2607 ziX-F*yrr$x)$axv`otk_(h;i(`zbgt(8}E`^7c8Fu+oo0yMg{ z8QMd{>Dgoq?y=yve!~|fb4sr>g~(5a1|`3KsC-IwHJu^(I!0Y$7~n%}s}uca-|}V{ zD+xI*Gxs|{bYf)%?&163v0;wMtu~W(GbgWtt~EY$7}AAs-)_yv-$j23`#sl=#SHe; z7%Q~o)Pv3zMP(~%gLkF>>Ns+IuB<|95G6L>Jk}~)a*7F|o`yH#>(uG?pGf}qqbl4C zMvqfuw6;c;}b|U+Lj~)k@T5e5n}Z{sQTvtDs3oC#5oM`RmY61;gShA*7o6m%y@x zgM^6^1s_Cc9)c;x47KPB$;o+$kd589OK>9gGPR`7NjPt(QU@dkGb+~l(0=luig zef`wkpF$9W;yB!J)4CpdHmVG|Lrb&{VYzic)VmNP7(+G7Iv>~nkMb%r`j5-&FQRw% z+YZO$c|F+M)_0fJT;a`|m7-2A=t2GH;c-`f>s!#O6Kf@?6(kllURw!@T97x|a%Zx0 z01un#9Aea_Gi}fzmjvzIyz@CM%jIGX|5#`A$CyXH#C;oU?CO-6{o*;lu6~vC?`o41 zXtf22NG3la;%r*_JQQ=ky1NL&WGB5zX=Tlml@ELd7Ln536R2^#R!qAJlW-sr=4i575B| z2?B#zW1?~Ny)5`D+NXxO63PjBhs^3;1X$T6v!=2Te;g^t4D~7Wdd=N*F!`n_6*FK}SdSyYNT)g?p@JqoMTy;GpJV0Yta%g~)w!z}2KI zvQ}C;Kt4d_KG|4bBD|XuyyIbL{)F>M7ivT-CBR@1^V7}`^dzeHM|d3HObJ=fT%oOT z0iwb4*FG3W7p}V8NC*5{uC4D!T6u}ga^q@FwBDsp_>Yn<+NBJW2hm5pE&GcnYSORh zs(lA%bMMkvJgI=|JB#$(kwlZhFJfJPcV^*QB&$b{L&DG;eQnLtvQ0KFlbH>h0zMh= zR`zKAx=QV5(51pJN~sh!4Z%Wm3>mYpO5prHBUC@NueSZrsFg>WW+%Oj)&NPlo|HK# z9Ly8OD3fMAWJidRSeHF6EY-*B7DVGDTo){irkuu-B;ZVEDbA?ObNCIjMD^*o3K1tH zMGi&*gy#6|DVyUDMUgnN6o|Dz3ProZ6jO%@alUqDplVEVx73pXncAgAM$lbj6W4~BCm}$T1mT}$X1zhoU4pJb3 znLUF){X(Esn&xRuxtZ4@I5?Bw`T7mZ+c-=+Q@2MhoN<)IoaGI!3&>yp-ek}jggxN#AMkY;|=ByD4J!yx7VL1A`v(2)S z!14IH?Q6&Om?yEf4^B(1VV-9*n^5_gJ=v;*S{bi>MY!&-Oo*~NKgJqSq~Jvu-ZS`L znM-mlNK0NEn5PbOAm66lrjMm^lho`4?%rq+3UeVZq6e?7*LTgemLmsJ%(XQnElRGf zpv^J)%!(Y(>_*O}k(R(|E`5cgM;e>>`r0(lT>E;b)V3~Gxz}kOvTx&SD>f6~Dk~eZ zE{slB8f(cL1$A@X1B!NA6q4cM5Xp%B2DRdk;yvKxHwTwXJ56X|4K2E=Wd5zb;n$_W zqIN>_3kPc#gbMq$s58-**a9$uxt^!ydmixJK}<7itZD z;S;h}y4+>bV){p)M`!brX-4pcOK9X>eL>yx;-KF}M2VU@V9k(1)jdi0(5Z?k&=|-! zrf%`4#$KE-7#Fgk-HCztsc@hGz8=Ec(xVr=cE!c^?q`P;XH6ABm5OeRK{EgRq&@bg zJ52pUHr#`a|5~y1V-IpDS3RkpXr*u-W&#B=GMqAvFuzX^&pEaE2w(W=h$KYgLNrfLdF$tMd zwca~yWNZ8a(qhnH(&1oIvbGi?G~wB|On*p+!`iSG+IN`Xw!(y9?fS6I-DHBnwt6lDszLbs$jZ29wThy2te)@kUdYg7(Xk1;O;Q& zvP7N`SxLkGR3}3v&X60E!^X)S3kXTZ?)x68Xfx>PF`YBUy(1Q3Ku$O4cKDYJaNYwI z@CE$(sXXuUhTqkjJ?~uHq-^9-rO2pSqa{HsV_=Q%*a>>Y(v?ASm#&E`A+bry&9AE{ zq$9t{#fb9RyW$OHnSm%ft3C~6v%#r}suO6W<(B+G0~iPy8IeZW;+H3$@SR#&n2X|*e zGr0_(m;C!!{l|2X)9l|E)sTWEUMls3f;Q_`f2%fGjm{410RSB1m$1^*4UJEcuECpC z$$$ndJ?U2*pppBj+P|OL{KlU=T|WUy#obEO-{cb}KphmUsWM9*Gm7qSGek$b6#fZp zRobf7D;tE4B(~}9=ch8Ryp#z14BV9nCOm@n(fu}RolOfr82^6R+AfFJtNvL-^OH>@ ziZ`v?HGlP~-xbs5ME=e08HOJe^oLNHC!tG!U_Z+&={NJBpZMB0F*x@=Um>&fNCF!Yhpy}k78Z>COWKP5ZAmXYvK zd%P7HAu@dak6bhI-z!_?Vtr2jKjWAj;ej%))bvbt({glD&G3T1d;k12utM^KN8~;$ zo+01VcFI{)kAeitfej_XA(#ksKN#WDoT(S1xmSqe{n>=l_I73+DY9IbtNBq?5 ztvlR9ETEFxFa2&E0BpL=&c_a+paC>SoiwfW zof7N1-0$ixUY$x5Ur}yO;Xf3vzr`&BZkk#;PHKJE$P2eA}f6&dE3y= z2|VKH(+HByduFL9~ONyEXcL0$gUu5gi&*+QuzF27&_SPM#t2 zXI6jf=9n+9@V!slRJrDBehG=a(Ke!45%D{7n-5^PUS11aZen7rd9h=xbwvG(`Kqj= zU7W3L;Jla5);ARJhVi6SckFkeOt$C}OBzx7_x_;i;q^{*Yq*c_*C2&RZo~Xqw~^P% z_|iXgiml7nCZDTGLde<;t!P^SYmQP>E6Ol~h#(?gZ3{8_9#fX6=*LXIAZ&9SoGcL& zi}$o;w@vYQmbvTqgv(;%T1mHuUWMTYxa*biuvbrEESFnw?&Yk|0Ang#lOv3ky@U{m32z7QnyJ!U@c1i*_pdK_^N);Ld$94~tPTJ#T+*mxj>oHpkUkS!^MCrKw$ zl^8#XvS*_$xb~o5%H96Bu4SEP(#BYJUKv~UIxFZJ6A>D8+v!O4IeMXvo9-4NaL)KET3RH<}&A`pB-#vo>+V-m2vpdc0h2*rEcY~R95_g z1F&cl(dL#*WoH>pIFPTAgY=F|@?d~lI8e>S= zg&>}Ja=f>>{@S+E+O0(2HpRmJ(#I8I@4U&y=Ul?aoH=e(VZWtG3mfgX@%`^g^6^Zu zPU{%2F?CVwCCF0VEB@PN+6s_)m)>xPJDSB-f9|8{Rb#T{t5+O6sSG+^HUEWR{ll81 z@A&41_eYTX)XkwPiIzdWhcv+la`sPps$06caFf{0J|XHhq-eE@4)YGb4iy$>sjv%{ z$Q-T-9M7nel#!~7&LydgzE^jpYBM7qoH`V0jn;99O{|Ox>-HC8DQ=dr=tCVpgmvvO z&xSo1<_wi7=v3}ozC7N%4^20jV-ri*IdYlJzDn~bbt$6ife|r7Q#RLYXN1^e;&{46 z*PDEv&2YD@{Xd1`M-|<&c>VoOB+h%3IMxXNi=tGoU{K!<1wq1;^2TEhCOT40ks^e7 z3_AE$|2YOUu?HoFw%4*e#>|MLgv9d*)L+(kiz`w}pin{m)rP5rK()Is;& zFThhWi@XtYfNMtg1(%_KUwqXIkbbeoDz5ZLD2CW`(Eh#*I_F68B9)_~4U2`2J7yXKpS9@^bSq zFGg5g+lg6%ZYiJYEXkf$UXJy46WhEqsL4-vgA>D%@%M&4B(PX2#`kBne^v3gz~};e zBFngZmRVcAA`6X2b7+UUG@|i}J4#=X2)TuR!lCtTT>m#tI?pi~|LyB)xsZRWY}NME z#F^;QvPFv)E1(sFnhx}x7j2iE+#sUBUehP%{pXLp`ZS@#p_d5wc87aF^PFy5`);*^pw~A_#L1-a)c|| zVdWpS$s<#faa+o%?{x4ms`K;yK>ImlIV<;@xYx~0AvAqLE{oqUR8tcx@a~9jTLzX3 zihg-ZoJb<-n)bu+K`8kP3G?!Bv z)0_<+upPS#t@~1n`HhN2L6Hv z8{`>U@E2HtQOs1CRDJ>>T;fabwKOu$ATo>u+{*($_#9ihi(B!R; zemD;l)>P?;5SWxBg=oP-FK)q%A+PPhK#S#Z9jQyTmO>k(RzT3o*f^=Pa3iO-3OOkts%v|-$j$Jz|=<kQjdd5Jmol5cS6uJjUg|$nsFqfX~%p?nS@cfRFhbYS-nt z?qcm8VdvWtWj8SP5-8_cYjy>5sJJs;j~S7cE7(7ydbasJA2`+)7;56@jlasY@%%dP zv-zOQe+yyu=jR+f%+ECZt~hwzOS63D_bc3aSs~CM6eIVMS4_Y=blYzN)BokOKZ3CV zeT6Jiy4_jHsS)+j=HM}^3EN={4I0r(A@5ME;CDM`CTF-WF zTfAtx^&7kK-tPRG_4@jZ?^{`>|`>G_3X?0*@ z1wk`a1QI6cTysh^@Y3A!#Dxm}UwtJ<#dJpS-Re=cc#klJF&gg=0M-u?p z^$<$xZi&zmd3Ee_yWH-(NfM4>viFnqrGY-x^;7BGe+uMNXt6T0 z$ZMrJ-HCmxH|OlC13$)f2Y-F{#jkSr7S`*GgCaGy`So>uD}EVbW;K4f$1Jve1CQUr z?HMZBoVYO?ejE^pK~HyS=yir8`~y1nXJ2bH7Z4u!)`8FO^-S7%wdM3Wg|obpWtWuX z(0rwkv(ORhz%e1`+%?R_9{5-2jMTz=6-^jWSI!vGtw*)M&r|qKOHf5Z)f}OZuoz6F z42+JWfiKhU6H_sZuEB7nVXixzkvi465%El$=p{SRSuP=_1^kKa0NY7AgHXNZ+Gp zC;RUH!s>sMX=3GO5;nbJx%Ti-*M9y8E6BGxN*x>UGdnX3^TEaVZRpP1<|+2Gfw%|FHmKFA%t2LE9Ox@Ib&ER+uJLwpBmwghGYkoRp9J=Z%Ea)9LQn`Tn^ar zz#b_0AK=Ka5jod`(J7KgYEtFpcnM^%=xXE7DuB;+?rXEA=aLK9Kh;4OFHBrre`M}M zgWhFww>%Gql{({UifY4kyC32kNhM9EuKRZ%*x7m+emk%t6lNFpD3rbD4GMp=oePhA zz&b$27!e8@(aVRJXzQY=39P{!(O@|lvflTDc_^n4qYxsv)h$MBd~>9cxGA-tc8y#{ z50*k=+WvZ}Pk3MAydTwjwBX0{pe5&#^X6?E`Cj8m#h^EK$M*>OPutG}CF@(yNc4K% z?z&@l%)5%O{p-(6d{u{iI9LIT5k2f3|K5f1pYV&Zs7V`mo!bv&-^*Sz&p!u!_>}2o z=2=8tz3FcFdJLai+;_B93^VAk+wQa1y^|a(9@YM4#EZ5Mvvl2^G!cr`#42$G8w$Qq zLfw8lHm!`}cY0%FA}z=J;yKbkj}=kHT&r7o5U{cO+H^m_%|`^ zAN%oM==KEWD9NUxLUoPu^kP@C$s75bX#V*D*&wg(;fmOVCiym|UO7yI*LC4!i0|*A zP;6eIb?cMSbg~Gg2TI+e^H!Ge4Qo^oxXxEk^1#@Ib7+E{h$uovo zhIv|3^-Vk`)^sdiydIE0NmsfKvOwu#>(08BkJo0~?*G|jbUdlJSP2jCV7ww?tTkn# z1)nf55|BQAe&BjbD~SPKJ$8<)0M_G#HrogmZv}Gvk5yz_>(WevS`MQ8-8U?)K3k;? zjn)3xM}Us2&eWWUp0+%ZIW2I9lpy$e2RV=DK-b0Uay6Yvi_hxO^2Pz_%Z*}A@$*<;H$IC!m}4be6Gxg=WUE1 z8-0BD*6Zrer@BpU=d1V&ev9WDRRJ-}?9b6>Z%6+Rzd%60|G=$(_`lONd5UL#^kY_C ze>V^9zMhX>ewiQqm(Bd0uaEHB^WWw9{dsPB;9lkqeZ+tIv!C#_uieeUt3To|PL$Yv z&%samiWUt@GiY|}Y_g>;TeFG1zzQXVS^Z&%f?RW8|Te>*>+K>6O z?~L(VPu|VxgKzPtuZ(m1XK&%gH3xa~nU`2KG|FAKta6pO1YRa$&{gb@*?4R-{7bCv$l_6ex>W_JUypsnW`y5x^dyjwjouBd>U;S)t zT+0_;0}=?DN_89WKTQgnA_866p9_2@9|8A(toP%c-%L}(53vkMdoB}zePOXvxR zYWd`UHCLn|m#=VnY>Lqp1GHy-1e(F&A+FuB4&U=Q${EafNU^(=XrQa z)JmX)VdyGN=-T(fFs!9(*iF-t2O0#Cb}29zq)^te6o$1_fGWp?a*%&1K}drTPR6yN zy`v53DTjs;iv)E>qwo+)5jif6j8e4{f=Wp|Z?Rf}6b4UNXM}cW7NaeBW>5*Klq={k ztfkLrqlrxPmm(u^#3VI^rdIMn)m80i9#IiOKv-saVS%wCY`$h4+cvMnS1$b`)4`@| zw$RzR4}I}CS4w3Ds^1;Hnd?^f;0p`s>g*n1>y|-2JZ-2H>l3>=SuwJP)vJ2(l>mH( zH>{_lw}&ld{U2+FVg7mvcl& zJUPfvPlgJB-%a1jt!!S=iL%5kbd0WJ-N-8X#YrY+3oMkD$Y*$gKm7l`&55Zw=W7*Y z+t>2j|I7ctHElj!-K*I#2yZPEIdk$7eR7JkQ<~M=dRafxOP^Us@6agGsZ&fYOmS)9 zqRszbbsK9sJMo3&`X|1@hPesOo_~+0-@M59_(dki#N_t!P4eQ1PL>( zDiNGHdz9B+p64Ual8JgAymv0d7|1UyR#s4L9gJ?>&PbOfn8fd5xObS9U7AW1QYjS} zo6j>-h8uQX!}`^OHO79K?PA-t*Wo{Rn8L(CE(K56d-@qhcHYFQ9xJ~{kNy>_SigBQ z>^n%IFhMR@AFI$O882yTET=7lxg0{Jxc0PS{HKMxwgPiaQ#LAYY}4eFrXhh#8l$uZ zaN06%%SBPd^{*9{^fZQDTor~SnO*w4w7K(fx%p`jBXM(@Cgmj-=G>xlCXG?uY|S*& zG18EUwpxNNO}V>P3FVUHG_7+qPHvmEzy3QN9Ua_q%PoBH!3SKtc(L~W&Ye5C{r21I z^Z-K`l~LXRo%PnF^y%vBql+0W z9)0*Gdc;~@eer+e@a2G8qXEe(7>?2OR{R(H#&G6ZK9_6tIZ=wCx5sLru5Ixu2!1V)J#_rn9x<1A6Kw^T3>9cz| z6>Q+|ee=s~ZZoX);78Bw<;{~jFy)Brc3#h~{@SmwVqqg=fA}(&rpG9n)pW2#=4!EQ zgAOa4dGp5mtCM{XD;zp0Dq|NJ&*kDaFA zs@N}FKFRoGj@yRTa{H~HVfEnkl=@YwHM1OU4rt&2XnDa_AF6egstbv&TOS!i6oiiD zUepvJxoAU!Ff{-H4#HeR<4dmw`L8}JlgUu21XL;&l(ePLs=NX<^1;v`G)Tun83fko z0g%dbEb9@*IRcjEtzNy*7TMrswT``x92p_h|^!FAbnkJ6!Y^GbMur-MZz$mR1TS*U0`;hOeM0|f?~Oh;g`$ao+x}k zsG(2_7@wS>ueY0wFDc~a=o=Vh>*h6NJV|Fq8yCl>nVQKF$to*-grCjQ;dz9CCET*k zn$UXN9K2sh=_&)*Qi8^foiWBm@ogz z?F&)9hc+5d`6y2j8H1|vSQtE|@RX`?AV_KN*WQ*vDe3%9Hfml)!eDIbL8J|lBghPc zfGDgu5x(pCMAkhS|8V<791T`YPRtH@rZ)K#lW0Q2)D%H%K&&YOE2wb_?j;>y|>|D(+_7oU9 ze3bJ8XP7o4?C9RWiY|dKIHXt`>vX?pb}t&U?yC2U@@|7f$P2ysLW!;3Lyltt&{G)74)$mVmFv~=rGxg$H2e}vb;+pOtI7Hv zUhg2CUPL9x6B@_>13Mn(o@@U(-}|@!E8jMXH8(%Ow|?iAhB6knzqZ5y&`gk8xoXin z`-hG0hM_a)rOlF;0%3$L?-zzBPvK`Ww$vYnS^(YUbxW5MEwBb$mC&zPD!Hhxv}M?o z#Du~!_PhV689-RbzstX_Mm;g2E~0B|r0KdSq;XXXszioWc>f}iy#i??{T7j+UA=XE z6?tH7F~~(hF%Cr_oI?Pu$!0xzd)gTu>}8;@i#8wf^RwjU=ExWF2&^+~ZF|fI? z0!v1yBUkOlr4k=g4u2MjTAP8#+0wWe331Ju!1Obt&YUnw~KoA5V7fTXW4fU%3 z%98w9GtkfYNa>Mn^DX~H6xoUp#+LB2dHtTNP+$!!A%)|I@Mv%EAd|_|WL!Gp$ZC-c z9a%EX$W%-JMFe3$7=;Memne*W>81Y~9Z*db!c5j0sAzur#tFW#eaN93>JQyM1gT>H>g2++dX8dwrQo@?@Yq}sOW05Wh@!Ki@)`)`{|VR zE;$d+1HY|}cCo-IG^SLck}D7hQ7bD)RAO#EN71y=-_uFDecA3+m7ua@JgspT00RSA zx_dH<`%hh$7RR-|uOb!-UHj?xFxu5kzYk~LIKZV{J6Jck?qdgvCFq>tl^-1g;p6vQ z%jz~b4OUS7?2{>7ia&E#wW z)xU$UKluO~R}RtF(Z=a_{+xgP7pIcXLYjj&8Yz@sS0C%|{USS8bs}l!=G*S((y0@? zbmR)Jy!S4H8`kmpU8DHz{rH(qgfZOk`7iUp_1DnhFFK$tv8q7!tOSd(Xz<)64RR$y zwXl2P$4d2u4o%<G6pwoCtRB(G^m{g$Ke zBt_HW43y~wJR<0VA`l)8t8GO=QJ}c(|$khvq@3Pv~{(cojY+6^0<4p5}jSz zm$ct)B;Sq3B`sR0)n8o(HMon%e&<{K z#tnm1a&ugnETU#U;JZ(ap$irJ{n9vZJ$IB%_uS~n(f!(~Y!DdV$K(n`u8KhvhKK;V zvIg*wcory5ox)UyNUe>1{a7lG?hO%_=PQof+fWgjvhoe_torj3qp@`RO4NL)Q0c%Vfy-KDMZxi)IR2 z^3GSvIe0{^YJ?@j69hq-D6)`!r4*f=otE`J(CA2jQ7&~u;QRI&o>EAu@G==&0YEro zPFoZKNGg?(Og2lly^V~YA(PG6lmuVlXFb9wpi(K@$^^p7kdTH-SS2?UcuHX+O;`zB z-aiCUnR2DFSRzo_DgnY0Ueu*9xRQkiTQV+_vCneiETzB$q%lZLt*StzH9-&(hMGd5 zKt7klL=m2{QNA!(OovEPKt9c@nKEO%4Lo{7H=P+l>CHdl`4dxw&bd?lSDL-Tkq@5Z zql#g0xQET#Mp2%JC-NM>aFNqj<`>&+4403cqLj-c2G-Hz`F#3}2R)5(w3tP5qVaw+A^vSdQ>A(5|e)yAvlzktss}qVd zf01F!4I5aqaS&5E$WPz>fHPwYi;hxLt=1B7^w~e)m6FD9Z|8<5c3VRnpfXEt;t-b$ zx|aG9%v|B(%ox-3vZil9^B0yoHS-U_Lj^ zg^4^PBYkYxFjRAntk}4YzL6pF9iY zmbx1u0cr_JY_b4>*kp_m7%R-;vBKaO@EDjdF^nh1gKUFm90m-`1Q;BMWvoD8fk7B7 z0g_rEgcc;Up>CvBtNXpzZ>d*RcgxIk&irvs=Dl_6X6Cu|x)BrcQtGHzw{B*h<#&GP z{C>ah@B90bujal4^2grIAHVBueDKl;`YWubDIFmY-E*9~$_~G%?INqsCC_#Ejql`MaSxlkY#ebV~om}i0b@3iwu=zOVG8o@g$`Q zV-3){JnAO-jxEs`)0fzLmVJNB{&y0xt=Osv^W)p*K!|NulkqqEUt8N2?%56RiE$9c zoE6%T5{u+YqJ>F+$jfB(q) z_^Zp8dGCMuH@xAE?T`zoy@mu}_?|JMxS04Kq@B7W)p|kcfUiRQ=x}%Tt&fk6q zPaQtRJKywnKJ-+Vvv)p=vbfHZ5C41q#SguKk6m@#@!$)1!Se$Ny=$NQrc|n?OU4RR z{X=EQjX%0rrP4m?Ze3N|zN(8}mCXy}U&gb#I}?cTn3lw=-s@bbbuQ6T`iO3pQRF`F zTb53UaDbJ<8(ms!RHB0cc^6^WK zJMZ3RW3vOo0FLXIuCc#=z+{f(Q+K*tc>WjCS0g_2-o_)eHcWC?Ncx3>z=@t zR}K#u>^;G|{@Wk%-iJSiK7AkOPVcg&7H@p>o1ds;C}n;1G|#;|32k2G^yWEk+nJIX zc1}Nw(;KJghkMfJ+|QZSRT3c(AuWge3Qs&aU^E(Wu=f-n_~ZY=ue|#zNP$xVlbQN4 zZGpeH!C-~xa_<+skT3d%FQTIapM2NbdHC&r%;kK8yU%X2-Iu)ow||TGee_ZG1|vqp z0iS%=ukusB{})`_ACj!DHyjw}K2Y0y?%ij&>rBGqfAqV&>reiii+g_lE`9K~`M=-# zD1%J$;8(nWmGWjg;`*a+=9k|35e^3f_OE=Jcfadl-u$Q6*|_68=O4U-w59*^pVvX( zXMfJFzeNZA*ywhXkvjXHrgk+Q`kVSv_xYl~EegmqjnB=zf6?>na-*B{dD}SG^|7g6 zO>)Z#jZVS(*?V}+5C0I)TmL9O_JiNUKm48_`N*4J5; z9b}TSdOoerB|7b~+F#++T`%BEU;X8nzx;prp6~oF{^c)yg8RShm3+zH`cnSk-~B53 zkNkK3=YRZ<`9I!R@XGK0Ms7R1!96e8<-`9|w8|_103ZNKL_t*VzvfLJ-$!>=Sm|{+ zeeW0ZyHIal8HANWVFeI5V) zk1p}DSA97zd+;19{XT1*9(R4&>v;a=qx_#g@H+n9w|o~r{r>0jy_93%2Qm# zRtYOT&GR03HoBAY$;Y2!@5TV(1bJr23*!ywz$~U_i6xIHavv$TGY%P@qzIvL*5HC+ z-tYB2Vk5xaMacsxWgvHSSYs>0TWf_#9a)w!8V<46lB5abKKEZq@2s+c;L%x!)V_j1 zQ5a-^tQ%uIss&N8q?Zmb>l{jWBVU#Tg`!lbf%H%a&-hQ^L8uu26-XISBq_q-t0G8+ zEZ1kCw(v?Dvbf`!&cFLlZ{zZn z>%8q}e~dp63Wf2^>q64$?{NR~U&7b_otM%Vg5I+~hkGCTVm@&B?flvA{R$s{|6AEv zPq=*XDGo=D)r}YNwGZ9NdS8=G2}Tx{RuN)qP?m#f5!eMa%*ze1d)q^N(?f6Nm)}0& zFW&T%{7>(=n|rq{AOGklu`*%z?%VmwSHFag?r`@#&*Q6K_+EbJeV^bhZ}@TE{pK!i za=_lu(p!BtU;N-b>~3}#Y;Tb!3FhO!!N2(DzsWcJ!0Y+)vXHuzpgL?_cmdz^;oAOxK`QopACHuo6fApTe;M&Ljke~h0KScGn*z6mwUpw#>PdcldJNFX4@1K7I zTSEAX7-b`dm-)c&{0txb-2^RRGMS({eO~&d4{-l;&LPN;%uStK9^sN$TVeOPcOoA7 zOT^k4w$47A9X<1%bcg%SZ1BDn!EhkB_x=m?SA2bl-uB&`T3_K{_yj-ozx-3~y7vxl zJn;#xPrCG1`iuuxdE|p{;Z1Md;cK2tRXLWL{c$#fp)uM!583RV;h`74m@AKeir@Z| z$9U)4{)F@AZs!#*|1$1<@)}p)`*D8tC;k=hxaTf9!zcLUr6E@J*?QnLe9irR80}YF zI&v;OTyDxYtcYfj`kG|u5yzPxY%?I9b8(V$Dr$7A^6Qfw)`eI)5(%q`$Du5Xu z@+ZIiqx{K#)}+cY8aa~gIbQJW=kd_J8(^;-SwD{Y9O#%5b@PYUI#}=`c~}HbUWTzd zh8V2LFl$0P#K5o@8BR@Q+~(WSq;u!L*QE2Co)sHGZsRs+8;82w=(hUlu_+jBIqb2F z?R9cc_j}CV+ayzMr4^fC;Z4tsNo8oue~%$nY?I4a&Wg73hIRAU#MRJNR`De1G%;yJ zu@y=deWyu()m1mBgOazSOA@wke~AC_^*_(+hC?z7-ENOg#|Iuo^_wGBGT_vh=r`HpFycOK-sf8fD-8P~V-zy0DHs=s$uFYvd&|L6GX!2zQ}vA(s2 zat`S5;8(ncANi73GZ+`7-5&j}4^n*VKl|ZoY`^=*{w;t1+CCGJvc9oOD%#J}P5Qa* z(rpvmY5)X_N-Bvp9+Rwfg0YrKmV5F$Bql2=B0O7ogGDGP^4uG=LQYA*%fl1iz;fZ> zVvNODQ|0w*rN~1R(^aJiLsFwu-q;Cw(bK5?6eZvZ{t9effKXK%oDC=hAwyI*unRaF z$_RSn3_C?J$bca5dEy3ZJVBh$lEQc>ccL{)IJ&)r-E*h7Vg>{xrr$b?ikc00K64F#xDFYxY2aV4VF(5(}iNNQem1GjgBm4aooO6su zqpJL)lrr!;gz|(l;~;|UNGZ`e!3lve*3(Z2;n4@qVXPrlDJb7B8Cd*X$>J{@GO(oi zlmLO23MIX>qSxz?rXlCHB(wCmZJdR|T2Goe&d4TXoGGf*7lR-Vya>6)#}33~YCH_>xzAHGLGn|M2^{mKE$> z&*}6w*tqj^`Q~r=8XmZ?jRx{`hx6xm$#%{iF^q)LtZbd(w%s0Qw>vl?>8`AEZufRh zZ*I{El@^?HNZn)S)ERcu^Pa=OX+Hm3zMsy<8~D|?f1Kg?2A7`_Y@a#L=FYSE+Hd_9 zo`23qpx4eno0os%KR~YjSKj%dC%p>kZ?Svf4!-o2ui{0Yb0;Z~-t%G}xZ_h8b(x${ z86i2v?(Q!AJI^A3&iW}{`kL=Sth|Z0eBjd*#h62(=zUq}<$$e*5fQ;_u zHm7%YIlt8-RWoxSQg+UrXLod-^~6^+NxC~cXLpzVGpAWgWaD8^t=-PofBScE&z--^ zTOR%ZPu>`MP78S z;CZ5Eib(1ENh|0uiJcpfAXEL;>UmSZ45^l``7nS>(Ao3_q>QN|GaJ9^~N{z z7%SN81L*eIID3}c*H5#x)|qL8pu4`!ne)4x-|B|y5sUJ?CB2O^?4B<;z1}@`$m^ZE zpNAg$GOk~HD~}xB;PQe!R(5&y-~L86Wx_i?^q1^sL#|C=ZDWTs zyASbQ-}!ai)=d!3(m#J27j749oVtzv{-Zp0;PG*5+dDk)!dLJOU;839@OhLg8(W;) zeHJ_GYt_89k)bVPfHl=(Z{i17WPmo2!!0_v*BLsC929kiMx8EfA~;)Q}H+ZwUyS4DTf$K0NR$?vkdo0>{!*22G;4WSfb9hcg(Jpg{fRp(py`j z$0DSZqSIfc({Jx{TZ)bl!l#rco#Xw`UAp@CePxxgqsS(S>aMchrBx@#IuS*%hkI+A zblsEy-d_sc>9N^ua%Ls0Z|^MB{W0rnSto$7*1DU4|Gw($zMkKG%UgU|G>12gLXLBY zg`=hR#&d{_mV{4)UU4Fqv>T&I8wgz?!m_y<}yj z&v-m0%L@J`Tmm2UTI*@2%pU9P^QnJ<6v( zb&1PY4;kkUV||)KVJulzAcaIH(^7uZst^#cCBD>M?j1{Mnjj>YBIMf(jdcd4M97a< z0r}y}N-70eKEVY7L1+9=6(Z@mF%==-a5xGT9&F&b5Ey3>1ZR==Mxj*_qWHo``5mYd z@*mP0RH8jkgp}x1lW6Vp^MxSo^-+Ncu-EI+?RMyN`tIP)f17x=Na+ zRSL5Th+-Y1gqk`faKVr_!3dHVJ2mPZ7Gtvjx%N5yz6z9^=H!24H?s;Rydc)tlXON+`lW{X7{?=ptrIev= z`caMnTY4)(ZVY(%zpwf3+oqKC6%QozI+`=5w%FcSW4)guG3;Nz%HH)GWRo209L9LI zc2D5us?u(bX{kkHrekJ|Wq<#Wzs@VrjMd8rzBJf4D|q7KQzX)I;p`T;f;3rUwcleh z86olsLORy^37`MD&t>=QIsW`3k8tVQ0SAMe(a4weOA?2}L*JdTI9H&Rni6mb&xMdp zj3-$Xpp+udv#GZ)RDY160)wwSAyG=Bv_dIK;(YYqn8G`hf?@B%I2$ve)9s>^_V9kG zXBM-+*Yi$jJRO1c)glmqpN0A~b+wN(m0>9C49U_LGK6G2Qh`|tkx8G386 zUUbFk`e|0zPe(-$+t{F&VTvxVq<4zj?%ZkbpYG7#=+JK*A5C{fFPw|n?@5)iwzbRJ z77=4afm|5F>l@&uNqWn5gtg^>ggHTBd((k@{snYpc4j+?r~Z-<#1Zu{t4U zEMuaT^Ll;ReJs{^T&5aE%=g;h@omqkB^X|^@py~DveI!OuwiXz7bLrV$ikpKbq?W47!RCghxcR4 z$_F+;`~5sw94b^47>-AtJ0S2oC@pYCR+T9no@YQQ1vrc;s&oKjL*9`Uq1L+%GVC2x z{vI$U#~6o76nUN_rLIsWu7u!I5e|4#KM_h1N`W-qNhK4{AK-9Ro$7gY>&CgRO|g-} zCiw26$m%l4me~1?Y2UK?wP{V&>49bY*HpW{NiLh#UaXF7lG&K`(57c%%Ja49?6&=_ zsf=GNv;MMcDt13_dtMBeNZS}S8Hi00-I()Do6NTHJ;dxEF>^fs&N7Hv1g^DZeV@87k*RNe?Fc>k(4AvE7d5&|CCO#j0l4lgoGRY0O zwWQjY{S$M}lBe^Ul7q2uVMWUXUJNp88BQh`2c2%0A~%eN6D-a)1qU~-(d)1A zz3KGN=PF}d zDTy@&dEwCl1d=`B@M!=+MkFq940uF5Q-#8Q9>ddD5;P#K?sEqp=6;>NVFzR6H+bF0$(sO%#{t1e`ADC zCn>yBpfJWG5u{{j3cyw*i+>&0GEsq(5)&>uz%+fo>0s96`EEO4H60EX{cP%IQ&c48 z(A+kTb%%{MGP9V?IF{@vHu?~2T*MGQ#oRkT2W|atBeiNel(fAgCRL?L{$itDZG>e_ zdDbyyyJ8M=O=HwH9!>fnmgsoVJCFg%?jv={gduEg4b5Y;h z5F>4JQK$Q398+!kY#TBumW;B^=>^d3b}5R2gM))mrRtgIgt~Q|>@voXWf`lhtF1aC zW*(PD034UNz}W7*(c?qk&Ktvlu*^rZ@lJxkG%X;&=gabYAe2C&F@-166SL(Hgs+L{ ztij|2XukCXa9W03eJXwdZ>f2Q0*EOCdmsb!@Pa9C0eI(x3$@pbDJnMh!W6Tk>Z7e? z1+|b;;8PVmFaYaoIxAsWU+Z#ud!0mBE`8?H3wW`4~!MhYH*VB^^SWKfnQ2__BaE1|zQRA8_v64kpjJeB}zA zuFrcrhI2e-%Cg zZ*6eU2oca9e%vY&LL63@Djh&6g-#L#flt8scB82(1<0_ONU1`~ibo}AorGK-9k>Z* z=g;>=I-kNY7>~$`3}X#Nk%g22gDLXr-^(02PI|@UEuJKrv1o&DI)uy~GTO_r)ko#( zHr}R9y={D&Seaw`+_V|Ay|>8#k117;1ZR;wQcrKRHqE2TlQ&C{qy{^sS z)Aapi97s+2q3#)V&a#sP$>!g)$l=(wcG{c~vHeYwgq4*QMxznq@%Ti2xph7Bmk(O{ zeEx2?TYEl?MRx({n{JepA#!gkNWB!YGWKm*{x3hZl96RTf~=H83vU?O zFg8jm3g^l<2M5bk2$Yf(g*n1Lzq~+!I#Q>K5M}nCWtoqd3ndXw1fs(*Z%0ebSI?WG zE4&|QG_hQ{e#qYbkbdfk{e&t=(}Zz8VKg{EDo6KVpW$eLP#x~PaGJ?DBg-<38Ic=b zrZG2uK2(T?YpoE{_^JRHUm_7plB5VxkY%2G0xZVlD4pPhM-5nOFv84jMy{$vSvrlB z*0>@thAQu@D&bO6=^507N0FekN3Mtf=MRzjGM`^+zcxB)idMezgp$5QrIOw;P(IV* zi6vEFBa}*^v_>i!xC=y}p%9(}052nDI)k;AJhU~>a;z~FMNUx|l=Ox5Y#>zpYo(+N`qviKsAHsVf5w|PTr?K*k^Q=7 zos^($S(%Q}2W>iN8HdvRcbZC@H90!!#(G)(*5uHtlfl^iq-j3dNC%so9d&y}+dJ#t z6%(CrTC;V}Zp$;Sdv4ucwaAeYOPUsgOj>krljCU_G*{gkUlu|iGY>KMw6%L)KgH(D z*Nx%)8ZNISNh(TcL0=R zY?bBY%l3KW$Jb7G_-G~wPsZl$c+b&CsLAeZl^WpT&LQGkR;vnd{StBD9S{D^KGG{H zh_)w(6P1Bl)r!YMv4vA$tglThMMYfbN@KcQAmM-0zJ^?XYy7JNs-d!coiEeY>m+Qh z_c^n(!NzKr;lVzKHx9@POO{(kc|m3zh4V;(RQa-QrGcO5gxna4!VtIstLS`LGgFrB zK7j+Elo72YNuoTe!uYBJX_5ef+!W|g!mvVih#BxinDe6xa_ZG_&fCMeg)3JN_|)SU zx&7P@-BgkvWNd6~01lxQ;0@D`mQ2P2Qq|>I7fw+agL?ca_V&l*PI^>?D-jCb=#>gg z;ZYsNdV^MJFF#45{MbnmxFRNi&x;oj`ey=(WVxUW;DQ0|9Tm#SKyc{^081i3f&Y$B z((?>h5Yi(QY)B6&@f{_6LQ3zv(IF*82wzb`3Q-|Wk|YiCUG_7SewRM|Kq_AqA<@1( zq7WcOAg9D&oUO_zTI-HD0B~T668&&AU8n7E_H^iq*aJ!1;d0R-AO?ot6oFlqJ+^6+ zYJ=Ct92R2okLM3DZNxn>P}MqvDCPhVlRw{P+{UmCH_cyLIzrPyzpkB42jZp;xbCoA z*RQ&WchjLUhPR<<9vk=ehJMDT?8I_v#O6vi<@cV1hof!{w%r$N_%tCln&z;roo#UJ z7`FSm)PcG+Q#Z!3DJd~I;&r;PO~=OM*vF*S#76q-_Ouv7ZJ89UrZH%m|GK$sbE?#> z@kMjF?3tlyKALoW-TPwYJ2s`GZH>p|E>?ruUIcv0D!zTUZU#*@SarvrF0y@1m%TU$N~CjvXX zDX@l6J|IB7MIa`u)=_1~9Tm)Aka`%kLkdSXO*pf&$+Iq;qt{Uk_HQseJYX`(7>shp zg?9ktVK{^o=tQH12q*-|^Mc$4G$>_#`$GzWN7R&b6Aq~)Nup6&dend@T`#V3etE}- z!sLeWaE!@viYyO^nX-&maWuUp;t+DuD>eezq=4I=*`}12JrJ~Q#IX^(wrKlFNDG&7 zc(iRqbgF&e|GEu| z9Fx~yH`Z-(v8au05!<%I>oPjxB>BBDhE>~|UDV!~Xx1_ggu3^)MZwy1#7WYJV)RUt zL4T5{Y78M~%;B`nFpu3MVvUA6V>gBf@1zKuy7dwh-CNY=x_vcP4(i73q^S^X@)OHN zvuORq5KqR+z%plm7{tpm928CZItGOoODx$mwoU6fR+q;(k=pjFCT@ad9SE^#jJiFn z%^}(5h-ri1FM~*kIj_W?2imTib^w%R@%;Yk12oP257=$ZJk@-3R z1g-!VqM4NShs6vOCO8`sttpHN4ujc&^8c0uXuk8M{2V@YV8(M$8N}15x<)BQQ54e& zovBFRoG+hNLaj?guK<{B5yon~XT$Bk=OIo#j(W#Nzvvz*Z+C$oV!5#R5u zC{Q}_k!5Q_zPm34SVr8BZi4N3_(z0;ijo0^C#928kZK(w$7Q|x618DTq^!vAunree z6p}HS=L#sae5JPo)U_1Df$9aQI@3PF;v9Q>>y`fG%>(-8Uv#C^Vd=_mo9=mp997W5dh_vaH*gdRnt;XEfw6``v_G1DSF?=eqx}SU1aI(Kdc<6+>dv++r?$(i^8Y0U;M2=Od`0hn~nxh>9Iw z1|qYPq|MooUrsQ-g5g^|S5*A}xR4+3oM*uo_^5170W%x`4nq3D^fAs_Uve-I4mtrM zGbyNxV4?S}Jx zoWnSU6N1c?6o{^>F+a(2Ql;r68kakSQd7c0Dq#JL;7k?Aya9J~HB}Q!q6Hl#(IOa} z0Rd2!giDn2)eW4Prds$AHkL510<@H*T9HdCc)ATv95+`ju}m2#EDT0D7oWOHucuh) z`dp*y*Kg44cjJ7Dhh)&4wXpCL=qtdN=nLPnR1MzP-vymDnWzZi#5+e!VFKTV4HY*8I!OX=Lh~W;=}ZAwhDp6H=XFs#o0N9l z_v@5@-NCDElU*j_-V_mCG#+h{!$qIBL0)4cL2U=RSow(E*kTR~ZHD=xd5e|9Cb_RW zAjKNYG3%l2fEVNJSO!ww7EM^hvk|+-mVtgR>(n_Z{JQA?wroT!Hb1^i_rxCfVo^BD zI_YBdeVYNbNG@XKx$S#x$c-jrG$zX1_O3SQZ4CKd-8{vj9O`s`Qv^LGm7;A9V+^er z12$HF#H9Vi=!h7{THAVx;Rv~z>KAQ$QBzvSGHG7R=-Fk@X)$M_7=2O4&r&BdPgfdA z?0GXLt!mLYw4HaB*%Ru<>Lfe>I(DM~s6bc0YrcH6-I{6r@d~mmf2jtkihJcG_XUml`y| z5H{A5bUGAy5g6h_-Fd*8DcS*iPPP<+R4X=D`kX(r$=3P`Cd;^feUI@ZXOdeEh9h*^ z^=0j5!uLw~2{X=8*upzJwDRoi#)iJvDdZM{p$Z8BNR76sBd(oTvL zA(AbGhuKR_ZX8A75Y8h6k|gnjj=*}a=h@_O6xNa#CQOm=r4yMcD+n0t*gqUH98FkV z?S=ewLsDprO|TZSNx{TS$nqTP1i5i2owBph_qp%Fk!Z=muwegij4`G2N1~NR2uYq7 zXeGj&PMt%>6qurzE=Vb`R#cn<;Hw_^MKpD02qdO(5_7^7O0|8A2GX*w+4Onz+4*tX^1H|c~J2=2|K3be^c zTbe|Zp}fp`Z8E@5VvsiVVcDu7i{^Wg^Q~?FTO@O{&xwg9#u%xwDK#;3x~y)DK^fHD z)8yb?#!!sWZEYzfv617G=-1eOEVDn>>6SK<+t@Qw6IyPWRFYVuxNSdOHbAk=+KG8* ztd3X~`S`R{0g!5H;Fm1>LIxr<0&}~P9^!00Tf0;$R0Ih5<(NR6=DdL<6}F0@&Xfua zdDSAo`aR^^lfQ`osuv=ZVhbhCv{ayVC=KVI@0`V1gHS3&SwsG`6eykeNNHa9wn|y` z1w_cnb_gtKqS;#SbK%?$>#He6HsN46g=LZ(CdI^;JtQC)O5}VXaWl@4 z6?uUETZ+n=Q4ja8SDbj`6M=A!R6r52D1<;In!-vZMIOe}J5T)FQ`wc}V=bY0g4779I6T}#1;e=0>EJBfxN(3f3LL)w zoxC8?DczM7b~d{t=~-6RR`|@NYZRuSC=7+8D&JQW#v9luKw@nX8e#)4g>RFT9!Bq6 zNw`;{K&FlrV+=}akA}b#CIS@2v>c<>x{SL|00LrBoc z(~t$!a+PIfZe6#oTi31Y)^+Q;b=|sdUAL}V*E4%*ts8?bH+}k-rLpdr^g@K)Got%^ zWp6we&KpTci7R2t*81;B8G`WwDLpLN;c!JB90J~uMfwQ3GZw89gjC+C;Jl%)q{29G z#^6!jKIOnz7ogG-DP6_hFQoEqEByU77*lzkd1F?B6%In~H-s{LS|X$%O%z)jE8Kqm zG^e-M$tFYg_Yc_LKVjLVH~zFi#^TKvm+EmL0(wTZ4lTBE4M@G0|`c~ zhvbVH$HdVqk%B}@C=9(s&`kwv{e+Iv8uKJsD(hM z8mToxf|44obd@gSa40b?W$6NfK?s2fyZ}j(1RekjNDs5AAQ#>_<)p(HPxNPs9Ge$7 zAcryij)ko+gqKC%oy%cAvk5-9M^ z=ztgq{>`9CmeD7%gmpL5u4VSrWvhtPwR@Si#-yRNy(hNXNsPS3^e+Y?f0DhRZ9izM zTJd!3@h8>Y%f9a48biWXbGtVjiuYu zY_9fL=_ppa3Canyuo&x0$_XL8Q5cf^W#JJMN=dTugl?kIN|6;gR$8<)bUHr5ZJhvX z5Lu4$#0uor_^Jqk0EwSk+=X>qxw6M{bH(do4CgYz<07*A^1>7<^V58pqXBq-^f4oYc+F%-^{B$^~iJ>)*56G-Wu z2NnDSfz%Qw0<2bfWPlSObs!WpMV0mS&s>JlxeeOa28(Swz%0X>+jJm^xp&c=G(EEk3LG;QF%ZsJa>tl{HH~+hp%KgA z9>b>*t7~FeuiNHpnbe#`km)v#gJopwq%7G@Imxl}u}r&8+U8h!ik-h@*Z-pXmf7Ey zm6bL*YLl@T=I^#O-`0&;-V{TW*VNBt9dAwRBDUI58^=Liu6Gle zaa~(tVEi#_qiwum(q!6n)iUj9)5Rw-=3~w`PltYOOSy`1P~VIVuW$CC??SyZAwUI# z$2ji*aG_M3bs((IZw@zwoMw%+rYaFAr3eiC7Uzs7tAoJgKTR3%QGM%cunTY4JFUE- z=PWLiA}sT-{ddhw{-TF``@p~RoC6jQ(JyP*JBtuD>hsh)hr2)N-sPJXz zY-o3xzg;H~N=Xte5vD*`M>o}6IJ3jn+6u*FfW~5Nju3`kS65>ymBt~+iUO?_QY8$B zV-%K7uLI7|Ni+ygP^Xn5O;QSrhwNKNW~@)25RzO@gY6C*jBM`=$}-1bIN|K+9khbH zC_JJ<2=XEi$Oqx`^@Su&6Y_jQnkFQjlpEKtl5{4VJF|_Gio7VuE?)Bll!2qcAyHbR zQi*j1MUndjBEVu1lq8D|=M2vI^pi5OUZyno%oAS?Kq&8glA%nb)*9`+Q^BXe5D)|& znc=L(I)l<0YrT^vNfPhG!Fi)!2yEFR;Zp=;qNnK}(j!d@Yv>B9`?c1ji9}0*EXzCw z=bN#PJhx<%f^3qLjdM@*Xbr{`Q@#PTPnqDEzYa6QWBVDmu3Oiw>(+Jax^>;UZe6#o zTi31YnY{+Np)2eEuHoi92uk~0X6u}fK#FNeIbQ19X(6 zd0OX=Yh;2i}HU)w#@;{!a~x{rQ4qzZ;A z)qIw|{mdkhCdvaBF440+)^`Cn$xTA>ojILo|I zR!mD4a-?FO3#AJESja%6cLd&VInMZhwCWzxTfrm(QUPndl=G*yu*HP&WCTiJa-YMl zgf9VTLe74oHBMNJb0`H#0vLgm7Ns>>%L=WKn;fuconUN=F@;Y@2>J51fWjFRo^Qe8 zs~s32$go_#e1q-H4Nh%uB1J(r?U3hrK#mZY{1tn9dnBo5b8`cw6ywp5$s|Wla?b9q zaohP*Jo)5B_O9Q+8H07+$n{nIyb*3(D642pK#=Gv9YhGKGLari@8wNOjSzyu6 zsDKKPQsOKqnFP{3Lq5qt2y#=Pv?fhbluE$)lmzehDxElfjo8BCl$Us=!AeO{WMB>P^ET5q0#8NG?gIeP2UKg&%|oc-HL^xrc&k1kY(B2H)j&62-o zZnZvLd+ld^&HRlS(Z87;erETg6UZFR{W$TwKBH$o7pkT`GgErfKHHXKw|-XQlRX8zxy0=;ML50O++MeLaprlBjMH|q$g1B9}C{@qF` zq|#VtJuiU@(DuUTKKn~l8m(kwFC+XSki5CTRgmZeog{%r0F-cO>Dby_hV z>({Sw@yUx^ySB$*Fs3NLBAMg`gVBgA&oS1QVk<(#dHzz$v;2+66LM4F5E$d86BlDQ z1<6nXx>~Z{@3Pv}toIX~$vC)i9Vs1Js}L=A6eh#if+SV+`#qGFJ{pc8FD3|AAf=(x zfz_3iZbz}wOVQGS$w648bo3L+YDcryOIb-15@C_fpb%&&ktNbWmLz(X!(qY2%X<`s zMIhPRyMc4i@2}A9^+-A$v`%mWCX)<-BuP66;SnVHWWv?U7dhO!%IWQOZreRWx9h6} zV2gm<@Vl2U`)2|aKjg)SQh2^fKv)Qsta=&FivsYns*)s>6jXtDQe&+r+w+8$UfxR9 zeih*RQ+e{w&hp&1#d%~&ndKp+ufR~Q857b5q!1nrA_8nZ@XUTH^E@KT^C#0P;RO+zgp)Io|GoR_bi3-2sj{Rl!vqj%3|02ZkdrD+b`H8FW zC&%AXEg2yezB^Xgw=KsK{WQJ9%`ewQOSty=vtx4edyI?vlW4rhHH^;D{<_F9c1QZ^ zj>(BzFg`*oYMEOod)3@T&-W~>v|d)k0(ooduWOa4MQft%$usw~cF#3_CKkNSwY0$1 zewQOFlg9NqzrN#T&o!^c`mtK@1lPLe=XzmaZXerabT!k|+lISD%TwHf^-&_nSczIjIx7;uW%GZl+z0;)5c2bl0VGN#C?zq*mm$+SLF=?CJ?4r3Y>3$Eie$}N z&%Q6DH;jxcLM=N5)`dy}Wo3FnQP{xfj*r?~6Ho{eq(>8AeSF`A3IjrUBMWDd3Qrhl zEm(`o3o^VDLupSk2o{uOb90S5ZaYIqIi7gpajswAV=|gxEhy>8iZR2LeV^%T6=P}Jj=max?0gs6}?olxw^sa7tWxp zVVo+Y@O%p@@f7_@N0X+Bhp4-PJkL=|&`naDbBuAMiAJXyo%r!oQesAVfRN)2ZDr}E z5`!c+j!6zi35*cr0o5U-_Br!;fpp#&e(LHTXHIW%_Vgw~NXFw)Fh&KA4AV(Gahy^N z217q~&gbeM92{`%+I4iN&+66=yXUqUjWev-<8UwnJc>gqpQ4h5fz(K*^*^S4cZ)s6ZeP%17RlM4^Q6&9*)*MFtsk z)}drb3(%e@QWq6dq+mi24WaLu^QeC<==)mPuAH$;UXG zBZaTHptbUx3dU5#i_i2G+-}v+@ z{*J}pcGaFJ7IomJW@EWOiJGyS--^VXGoyY^>St9fykFFerf8WTQ6pc=jZ%}Wh-C(n zBQ;VRd$f48McXKf<$Biq2C<-p$6Z6B_Pf-s@A<#Fh5BL9Oo-^wZhoGqXG#HH#?u6Z875_4~2zgG?oM1$}4X{}K)$5Ph{q?vWTdWyw z7SSQ*lxLOqAE`y!o;&-zw*6Pc$U>d|YZ=>mS!?KnyZQCqygw|z7UFjIX+Zm=^H(>b z?JGh=j?D4PXF1Q2%C!AF@_>*J?HSJ{&Ur)2lk!QFN=eg>hx~^!WS)K9mo!V$gifb} z3dDWJn838JLCA{W+!~A28kP9cYiZ&QSdS=>)%&IL&(=!QNmI1a-l#%&*uRu$snAk_ zwcfxI5}`CmF&TA$^otYk#1SGuo+Pu1n;FlAs)*mnQT&37tf-wYkozQ=4pVuCcMP!pdr& zPA8?;>#?@JN`IwGx1&*7pcBE$N|*KZ6*gA;taK7mDN%U%ymJ;Cj7@{1z%j}#k3Vr4 z>lCNYoFmT-lgXGe3RFg_r4URe6Gnp(d0vp`hCIs{4hD<{hX`vpeQJXyUIb z5`mO~_(W=yPS8o0B<+S0l3vp|XRtQMIpaT*5)rCU^m<){#Pdp6>%VUeiAsW!b#%Jj zz-tl8{3ROesJJG|exB7K$Z)Tcif*UxQ7u9S z*uD<(W1vJkl&LhrffP*gg3)BmXf(tW-ocY)SwJoLa)y&h=2HtIu4QyW!&8`z6iq)p zN{l)0d0+GjSNCP++f|MY9KT`iyKc4}vk|S?zc2EvAAkO_@o5}4xA@*NDQfn2;f}Y@ z%}19O)g)g$*2kK#;BU^&svcK6)+KuC__o;4|C*l_q0f;vA07YWW4U<#jy$(jKIX>2 z9gp12y{`V=`L$D)3>EFdetdk6&fk%~92<`s`99KDx42I&?UuMEpK4b8fLr zxg%?$d413KeX;y5)_+H3b@BRM{2sSJ|IK_~(5(L#>X!w3QIr0tT|YI0UaPa*w2X9{ z{#(#k7rQ?$lHYRvt94YjzTFJgWbs<4*Z(x`UyJ0@&1_I&q3qZ1`C_L3Vv+uf*uU%L zqkjHobx5Q9w!Ysj*yE=^MN|7+tLR0npT+H8sQ>5mpIdO=LCnc7MD)L5|2n3#T+9C0 zw13v^DKq=vyv!{c+s5@x%lXDFUf;Fno90WyaW?8Y7U)Hcgf`^%mqt&Tc5qgP8uJbl z$oEt*oV+n;u_okSD~YwHio%u=QXyp^P%A>fBrvZ#gLHztm|#O4dFRSpZh;UIfW8X&=>9A=g`KNw2FocWRTn@3_E9zr&MHUgD`M*Ek%G zL%&pDZI`5}f>0JwN>4bK8H2F_(!XF%r1H*-tjGaJx6@%VDS~0=Yq>AFPboharYK0H zq|=r36GbYas};Reb7Su+SFc>f6$PDClWIvPQFIbXqChE!kOI|B$P0yW)_;~HaKvz! zG07aMN*HB^ah{`-jz^rs43Ue?ls(@yl9ijZPFv zsz|j$Bap(c73V@_2@MRjS?cUA0&cidyP=cE_3{To9 zD3J-}AxM-J8^iNTl!mCDS@yZ=Uo$wCk+4-HBh9l#1Y)m;ae@EqPIzE-dW+oa} ztu-NLAdR9r?9GFGW+Cq`knSEGm(adaCM(&TayGabS+9gtl)7NLzAIzu$ogk)jNRh? zyZLp_l>Ass=V^NIEBoM%3Yl2E&S&-VvFC}|@tGaB+4-5u;?V%!(TsL67fCMlt*G?d zyiQqkR%B-EsMmkY>WJx|7s>Jb?^79IW_=yiZ%!Q7Z*FG2&5olxq8GyGxmo?;=D<3$ zvLKGxKcdp7^=WFi$ zM`UlRqmJr*j_4)?bMnHG@ewn72lL1eF^95Tu)f`#{+>M_%wGCk&`AVQb?>ZTc&PRAdUu{vKQcsN5(UNmJ+nhhQjlgjE z@@1a9c$vfD7-KC-Kp7~huolv^S?RCPNm9QUC0HEBSc<|j zKHMh@2L1Zh4rex3xpL_W&Ke)_&I<%nvcEjf5zf-<^#H+mJer~?v_^6CkY}C6WFEcY zIV>DP7Dy)phd}1#HSk1~PMoyUMJ1|2#`qldvJ9mS?Eb!DgLMw2Q&gfuJpf+~LnjJ^ z!@2_FLVAJpXd8hG6)<$*MeqyXXR-KkolG(g_lIPY0%N^QB}syok_nEk^o|a(p2%t82_CI(PJ*(&(Mt7^`ho%t77KgO|hwFv)N?N-R$Yj@6Pv}Q&oG&hh0^t#xvY^o6#Yf@4b7^ zsZ+K0+H3E%)_?u~m3t5!2b#)ts@Lw=Ym57=B_L>QptW)7i$0r&OVK|2wI8kl$P_(r zwQ3TC7Qn9+bcpuV+JSld{>sB}WkTo4i^g+Rk~u5M(@`&=)a<1(-nCh+9z43vNgd+> z?K$XOH_Z@E(9sql8e>G|h{Te1hi*V)c`torM55h_)0J51Yc%(b1C!_h?k}FJ2EbkP zjCSp;DjEcM-GMWRvJbYe;h^4DBzhWKL|uWmHRnaruO3{rA-IkE?0{|ij=_Bfig_bXET)#Tj)udHxeUuL< z8osu}Zx{PT@i9d2I_X@GLeyrQ`eBi;LG?VF3jiSJo^Ek8a_V$xA)pvT|)j&n`dyXV&1*dLq8rdlU^d*aH(Ueg*H z{;>P5m%-mf+pejeYx+OiS9tKEhloY=U#H(D{gPe1>7$#)n~wda??yUaniXGtdY%P| zm=F>vAx#sci1SLZN6HAL=MjEE76^f8&!ce8U~Nbq0GPBOOABUW^NPNAK9IwikTmcf zOlHE*a)P&Fafq@<8k7u=>0G!*kiL^8@tW3po-l~wGD~>=Y)&vYQ0&~i&TE&hv41qh zSP&w#AZ(0A80(l!ld@_pe5f>g3C22#YUaGc>PubtIF55N!ax$3WC(U!yvyX6hcK6IF8Gu{v??(75)m5D^27o0K(&?2+0Fg$N~nt(YbV`R-uhVDn%4U zC4pc_3^NKXn82mn>2iK4(6Fo+`} zrBFF919^f0Q8*`w^8!zh#tcdW5^D-1g2XzD(uz2W>JF(V;kT}y?}| zPVHyD>lu4Aghj_Q)DRjqJ>vPix39Ol>4?TbyOUkK%SJ0nlWr2Ep1^t?)9z#cZW(N~ zTGxFXTV*Hjp2sE{gVw>bjp}Q!$6}1iV5bs%tdbB}%O5nKp@Pv{qM z=zE49UYEY9ZM*h*^{n}v^SHnM!#WD8KK{*ppgyK8oLc8(^cTr|e_&J#0K4p?-}j5o zWbr%=(Wk?{$nSOfup08Ex%Vtx7z_RNB5&9A+wybER6>0BJhqZIVudgE?LB*K8lH|V zzJ_Qj_Qzr!h_;RP-S;AYTjH_&91Yi-fM`r(fk<5?5zww6%fTn{hSjd$d$JXwz zNH7TD^S{fSxjoBO0~A##vJfJW=~){P1qGxVxn5&DsI=6$qiF-9Tc!^=Ni2nBD7Q}DVa?tIBOZk zl9853;c&(gOGz9BIKEWmTnUsE?m68wd*@vyS|I_U>sOHk(5Yank3)^gW(V(!~GBA09_ZtVsRn(^x*S~wO0!7 z1hX{d@OaAc@q}~RBgW$mTxNoDgw{A9%M3bFWh;nOn!$L?a5}-53~L>;>4edEoBQ8% zH%G@Wax_cOA}9%1{)D!a2}S%UKtse+WB$bO^Td>yQ@hBZo9wGS<5CKxC+GZ^)_N$Z%N&$rAf{r4jRv^QHT}g>n zx$Cg5+_QOQa4I)0A*grZi$=k)jt=NOAc+2Ft{%`@@c+)h4w~otW+klawA4o?*1(5! z+e}YIn?^O&SCT!QK~iPUtmpkZ0$)Ers8mO1B?-00z>5l;wkz0ZRmM6FlGWMiO-Rw5 zOoHVH=JN2?xT)q^_M(lF2uXtax72Fam6nXAopi0fW=jLj_0%eO)?1dkd{67|zVA%M zlA|jvsA=71`j%up=|MG#(}gyuwanB2vE4ROZF>>DliZPjDde-d6LDQZNbdo?$H(<1 zgqtv4sI}izy=k9a&#&K|RH_BOwF+*-KZ$k)wArfBn%FXT7%Wv(k!Kwd^xR+jm54M& zS4M|A1ije`(U%-=S3m2|=6k(nb?@&=l(cs`(KsUrQBT9SzquRTRo(KuZ?+Y7*-AYa z6{5W!I@3wL0e##5w}w~rp#^FAzb+!mzT|h2h^SkSSdE|0S3cX}6T7d}{#kvjMb9-V zZ53ic`k;aQ@_jy5^r0iW6KO0diq%?88|$~er-(im+3-ZZz6|=_yy8nQI>ax{5azn( z&V@9YlL94Uob!RPybMePQsx@!#e#H!(cL=-PJp8fq>9Z^%0LF_T@fIOvS&Xt2B|{8 z>b*ru-8f9l53r$voA>pLoM}FPkJd3l3XBcGx>N$`J#iE<8pKQ|Q*PYYVgKL=geHyy zfWqtMlmXu48{WnqYV%W=R8|mBW9B+ zLQ2kFJkLAN-p1ik$`emK$!o8?#%!8myvHMnltK`y`-0Gh5l0$l9K%5v3ya4%gS8-X zHHXxgU?WN}OD#J)2b|m9;=po3s8C$)C-(-fm~8YWG>95)+)3MqzN{&MA3l3 zaD(kLWA=_GWG-jLCr2sxAX_Pp8fB#IPi7TO>@o;1x+S`f*gRN?Y| z|3Idf6BarHLI%k`C-UBVRaXC{3_-h;60HmcnXbIu4Mas-X6^a_a_5fdPUN-3lc za)VL|!t!!>Wa+ZK3km?43BCQt$4AVPX;>d3z+bI3C1*w;Rm>Ky`8TvJpmOr^Vp*M~ zUiI;!r>(#Xx(bG3!DXrRyH}f!`?9)yPt)%|1${@UR$E`!WhLov;f@WSNe{doh|K4XSWJf7G0|b zYHOzh?%p}p)xe=`A1#ZoMoEGdb=F1a`sog67p<3Wl+C=Ip`8F*1nsYVMb(zQ?+?^E zqS85XNc7BFeqReJ<-K;WYW9hGg1KGg7K>-4*h4z}xG1?z=E(`svE6jdtDt@leTlwS zg0A}iUUWde`wD)2_Sn&SMzghT-gm#69J=V(lNzuf{3Ue?3uon2=W!?I5vdqTAK!1*@wg%T?*RS-4LL#G+;K9x@v^Yzjr%{ zdIeBbs+~ITzXyj>nkd$!X@YY>8c+zCJA5C=*ObKjKx9^+1+}2hMwx$a~wBN8*WYB>>p*AEWulcae*yg=RNzy$_i=&0eOM9s5l~00)Z_PS1O0{XIWY! zEDC{r=sUH!qJ)qHDM3OTLm_902+0SELruX*niJ5doEHE=184)lALl$tng%Y8EDf9uQUr<2e9S=v*~ujBT-$HNODy_D&%v&&Zcrz>6Dxj+ zSSdE}EmA$P@&Ud3o_oW=CSRObXW$lP`$hM;YL&SaP1Hb7wV~F>-;r1m^ln6*2#s~^ zO)N?_h?OA3OTVJKpi?<~RI5DQu-1-_lp1ou`>sl{=ptiSe~r~h`Rb>gRfbxuGe*tv zr;n3ib$c&+yqkTvDj-?R3AZxez}S8G^nEzSdxwH~3;wy>&iYSSom^~6&nAzPM|?nB!& zd;ja#>uKRwV;?Jd!&Z3qPG7r1>v27i)5Q$3lZDq;*FI;mcJt$C3 z6jW&P`h4dqUtP%{&pS^VNP-^Jz*>(`@gFCGrHkH~%Kym8niudbt?Qna-QyY^Ee+qa zx_?`Q;9Sk_SFiT3@-E$U7=8V}#Y8tJyZoFKSZ8vnJ&*Gi=ODx}s_diAqh!1X>jHV8 zQlY;&BnAqWWskQ$ue8b%{#-m-L9V8hE;shT9-or|3YGUoORTNJSwTe_ojW1xeITpL zE45k)22sT3cmwa@#_m4*M-$R4Xu?AX(3G6#fa8H=5D&mQtjU;}BvhWA&p80XD~ckF zG39v5JkSf=1OzsBT4Tp9chq)Gz$s|xS%W{rC~aqVJskHCX)%9XU=lpy?2nke3e;pgwCb?0tsN?XRy{G zWL}LY$O{&U1|=0jMmh995cxUhu$e1ilHLb92y%aUkSZhr%Hqnudk@wNgcCt+z*&?H z$PjBSxryejG&1L+2&=tFas;IaiB>^5K*}QjK40nu(O|GPg-0TMNG#aQgC`}?}>ciH&1ZLxj8Xty@>lR)-g+xNhN>(AvEtmoy2oyzsAY}#VA zcAkZEP&ufHR$;z>{fGqzv#!5)-A8jR^|o`g4&z;L()RdLOZxQN%e30@&}X00!K|8uUgypkIr(IyW7 zl?)YaPpF`m!Hl&?;Q&LSD{+1mBtE3l7#AibN3^$3#n?!?%@kpb`5nE@^v3c$syZc8x_0)5` z^wKL#CJEAcP!6jgu@!_1Oh-&Cb$p+>n+{|Xurr20g;Mx zi9v_A7OCfil_1bcBlBx$twIZk49OcruqT_TTr=SF4=Jw6xO@Wfh}0D zSh91qo{KIp|bZH}a_{Cl0GV%t~MG3s;Tz|~qU7Bvv{TD0#b-0HjMnm_XO z>`)ttv3NY{0kiM-`91bh@9d~f;JiP%&sTTZYS$e4)}h~*(0}~$>$lBlSuo}s@9x`c z7WmTzM1kf0-DoH3yXGp%;Hs*RsJ8X72-?2f%T`;=%9f65a=1s8VEG((*mC2sy3isk zB_yFDbJ&qes-dfz_b-;-Got@J%l5Oyo@hZR-%BL9XnZ=jA=cO(`q4V=b8+Em7R_hh zX3}cj@$GY74{zoI{+s15-8Goa2U{ou=qo+bTp7Xn?aRas4yQlNeKdr|ES zkY!sks^?t+0WpBbGMCb`CH&u&n&#m<;{1C<&@6=j5rWQw$=&6|X#$CkBwk7IM4XW$^#lF>BD`-40ivoVvyBQo!}V{4n? zV1N~p(P)eSGUJegAzlq|BElj`vJ9aF!|{Oe*)bRHxQ+WCe2_ESXOZ5qb7O}jHB7UV z#2WUFryNZ(oD-x*lcWw~ERm3SMM%y_fdh>59M2LGYZ;D4%%&kIj-n`VGboJ^k}NYA zX9M>@W^#lFWLXH{XOkIQXGdH(cZS{FBX)KtSVyV!prb)9-8gUkP%5YhSZ7GHv_uEE zTvAZ!2rZ+0t_Xp;2#Afs4ns?TMo5J*IoE(zIReJxtVbzIwF??L(ji$8h$NL(wG&}U z{wE4Pfl4o7@joB935*Mz2PU&*=?v%6(*6NVmf?I(T$m?O7E66D{@GfuwP33q)z*$4 zutiMUZ`f-=(BI6!E^J+06Y^c=co(1&*3E8r&#&lDaI}aE#L{Uj4>NQ3cG5ds^tGM0 zc#%L~S<7c;fOeXe@@HK_QC zpIhwL>)P*&tbe&b>bgXK|NJWVzich|HIr`3=TLO-*C$=uqJ8bTDvf9%ht~a??rLmf zeXe0I%g~C=fOB1+*XkD+6#_axmm(A=THDvYb>I*#AM2**y4m9v!KYR8Rs6LI7$~ z#>1G6jS;gfAvIaOf4|{pm6SwU;hiJ%o=7Q@G$A!M^l?K-S@d!MIJ}p0h;!wwr9@r+ zJhhwfU^7Ev9Xe7(agdc842OV4N+0^(vy4muR$xu&X^(Xj5(fiKmRSz=4&dmBcrZjN zjUEgT&f|>5+u-_?ijgwLIZ2YFfs0|FL(jRAjJ7wqc-L**ci)}defxRh;gG4x*gKl= z%Bz=o>6J@3moi8N!+|1m7Mt3j@*pMB1!6ttJhRkrJegvBKyzeSMjQeslssTK9I?H*$=Ng8?Cno5*5SOzI*-x;1tM@r0f;;}mJ;uS z9qC-2G1#0fOFhmRl+LU8Ia9REi4BX-$_lhuNr~_t;RpnPO6442^~0`nE^h(Jr7UwI zK@r$9!(vqu9R<=wawQBApaeJsP6(`rBr_ywAhmSXf%O<`NRtF(gW5!rW@NLhT!%l1 z*Gf>#ivJS}fLDFhpj9@nW{%qtwU>O{7^-E%$AIlr_Lw#qTa zcU0<@9}t`Jay{_k4)&;%hQ@8C`Y>i)trvaJ$>OkAl~L-eUUnrleD^ff?XL&cx5~4( z4vUQk7Yp|BX3}6KB!&>}isT9hkXHLamn>G(t{P+42j}jRY%B>gJE@)OpR96>^fK-* zUhJ)AftrLUqQ%A77cg`_3$&T;Ir)LL&g|c1pT6~;)!?<&H;B&GshX{=I0k*s=X-5v zJ+D?iYpZ9zZD*Z!+u_seM2dc;)m7!ESbpR60J=_Ow;WxyY)qO^e^0-PM%7|quzKMi z001BWNklK0kBw;gy6R3|zwRn1h}L>)qBnZV z#C`2Tbnuwe+qx?i{+?t=*FLz;+7zwuebuu@W88cl+1a%w7PfXS-7oz@QtRd#??X0r z&2|0!B03d>y3QbdYqGnAY0h6$kowlqaqFL!G)p#|<+E21mIVSpV=O|b(vdnBSjn}P zIG0ySbHX<3T-nR-a(aJj1N2$S&?8+S2((r~RxQ8Bz^-2eXdxL;=&{$Ps?c}$9<4Rj z?RVXU8V>O?=E~KZeC4ZO=X+1TK$2LJSdv*yk{N{eL@HF#ofD<~ zT)B3Gt<4eV&TL?Fd6Q9334p-aO0gx1DEacb}cz zqc8_~`+zkz1mhyusLhi|Q4|Gey$nerYaLogbDNWS&%O{rSwMwFFO|rzH(#g)TR+YP z9tJgM`X^6t$Xp$OTm_&&dlX|19;x!rYKc%`vIYL5s<}gZpD~4>}!ElVXuU zG!lVgrS-IIycXW;0;q6TLZpQlyruMAp7O{I!&muiI+AmJQ0#?4dI{|o3(4BVf-&fq z|Et_%G+Y?K#?aTI{mKAj*K&#); z=l^R`p4Ild9>t+fK7ke2P7NoEPtS++0%;Jwd#_A7neIq9GCuGatMTa|nW-4B7mT>v-`QXzyR z#|{w38Y^>6`J4-2Jcv2BwaM|`E(0w&x4pr}ND^s?qX9aSL{T7r^Va4Bi4i)|I3G|K zAW4#pESVAyG_%7AdvXVXBux`;T)m1K4A?w-7s94kmvHmiC5{jFI6J;TJQyrNn$SnHV0k}%&gNJ7Sg0Y^tiMDd6-+Z$ZG?JP&fGkglt zORS?tVp$xBgph%pFXyumN>Q|M=qM_^mUDn~s2r*v&?us82dQs%Ak`t#`B2Ie%sZM3Do9%^|g4b${$b-(tC)Jg4imoF<}OU2*E30 zjAJ&-a1K-y<6IaYse&zJS&FqDB{WJ&tO*IDco1Q&3-g?&B*_#V$DBR0#m2@SX*vnX z8kG}13ePODrCelDjTfa#pbHHAQXy5~Q&2K6@+0R&l+Bk^xul=Sga1m9T_6C87L~&G zop*t_0hgmi3Z(&=Cm@1ShAvP8BA^RI&cETj!@9tYVXVQVfgBR&@XiKe$eeVu;LrF$ zwacG|v+k=5`CD|TJyO}X_8dZ-NVcU(*0yltrJw2dB(HUl4$A_buGw1@K=@Nim~_MP z+Jkdaw6$+%twCOuZ?Q|azH5!2#OJKzNBXXL z(uShG`@S{S^|lW!*Zm0+h^xT$n-#(n&qLw&PB$8@JxtI|XDwvaa$ordN$W0|w^il* zRxxPNGZ+4}6WymUx3|(>-8W`$s5Eky3R6!@S=TcxYvX0o zB_Gy5GTri<*LnWc=EZlb9NmH`&1DyFeGL?^mI}by6`4Gk5hC9|fyT8hVd{yegrJezU(mG6_Kvk;69V>UK6 zNTxIPZrtSB<;$egDPn6(md!Xm+QUmQ7B)8qy!Sot;Odp@+_m1fujIkUYO-ZI1qiB#<<~8vk!g%+q;!DJ3x`y}LtAT+`R8=b;9q7& z$gEcuq#n`gdVA+Q8M!uFEA`u-BEl#LiyU1a)e&D<8!aW`1z0b!gRq(Yb&@_+v%Opm9HaKvyT(qm{{v0;sp0u z8~-%|sCCD;&mK>6ji2^QtkUPb;M09<*C&0ZdJ(g(NxiZhB;749rE&)C^JJ6cY~5Gs z1=hUJRV!{?4BPAKhIe204YIfKRtx8*1^{ z{s}0HEI=Ku(qhoEy%iSBx)QoeC#rF%Sru1Uo|AicjGC=QYt5GEAIW7(Mys#;Ial3j z>^JKadHe~+MBl2dI#)o<^*oTttGP0l_p{a#l@MrGBf4-ot-8#00z+Zc=Pd8Cl+V*z zmw~@AfxSE^2!MBjDAKizv(}0v4NUP$_#BPk5lVu!SZ6{|7ex%B2%I5JW+bzOG_z%| z`J$JU;d`Z2xV#D*5)Oha%L92S0!qT!#<+!N4Xp37WcjZ_$4lgcAc|rHf;7tzQjnPp zWE3jYS|B2YBlLSC6%x-ZOUaBO(h)*}Nwb{rP~xQ~a~>rEv%E_Uv&jsXSz;ZNC59|> zWRnT|*DrIpyT|3%US_C5RI7EwXgp*#Gwj^B!L`d*h`c9`B9sth*^K?&8+asAXwIMA z;yv$rJ1@NSD!cnv7{;38S%#7VsU$WJNJE91@ZFgsiefTvn9XKb@9+>*7V^q?BqgKK zkjZfpI1SLmaT)^YINa-ayv=Rr&v0}+V>)vPncGP&r{{54e5j^-kGGc0TCB|wQh^gl z9pr5ASfWr50o}{v}MwQ|9_zVV(F$-(cAU?QYa_A zld`XBmHlI_D(v!P%B`}RpH7E-ePc+)$xyodnEU@Wk zB>t0d7F~P3ZrP?+pUd@v;FHaku7R$s7{MFU-XczPt;Ih3jq`c)Hlq2s zF1nvphuc@8U9rZqoOqpc3W0%d5UYx{T-EYx_XIE}x%b}c@Pd}RlifG1KJwG@SB0`b z7oWqe&gXh5!S%;vT@IsF{gOY0=UK;pbjh=xe9V_y$*rgq!Rd^*c!Sac(<4>_Sf*#`}DKPSv9dikM9E~pSt$1a@`@h`e9lhrm6KBD@171SU(!GDsEd?Cg+M2=^8lY7}YWSmV6K%tFBL z@fc$<)&+78=DYx1P9@09xst%8&~pz)T8xP+VcXzHvJ~kBnRgfuF%siEF10u$*3I%t zdVtDDN~0o$%`#-(mY^e@ClV|pEs13yP@E+R8yhhQK{888Co^V8M_jw{Iy*OZxckmK zKu89I7=UCpJVHy7S%$?k7!Dba#$l844y0#uW0Tn=!lHV~V z(|Tg)bQ8i&Wrc-#e?F1YVrpJ|>!lrH&h4 zH+fQ3nc@_@Uqb|=p`6mMj<8PqkLI*q1?6zr@9yUe`AQJFyF(?^=au_nkVEA+hv?^0 zfl^AGb69Ii?RD=xgTa6#N$}n^Bo=(xUmcJEp+ak&N7_*Jl_KxUmSUde^bVyZ=gyrY zOQsx8XJpo{^uQre5vsKoP&#lLWT```z-ZslGU-_Vb5(<~9ipnwl)ooQQlt#X28Rcw zIi98LAJ3RhEU}gh2N5GLuuG{YL3Te2fkg5z06Y8)5NY%z{CLn#<3$>vCt zWsd1ILF<^wamxPwF^BszUU}tp4v%Mef=YoihIBUL=8YS?_Uh~G9~?8%anQO)voYFa zw7JRQ;SrOA2}cJ9WSQWOix;^4!a4R2uc8FRN|6;6a-UbprD8fu+1cCY?&Km`J2I2v z@n{?8fi-9qVQdB-M&mKlS;oQs5tCS>bO?|KvB702YUCLXHG_ddqj6p`nPh<@LaQ*Y z&gFLIpg>*Z_GANNV`#$&5&v9@lDQma(RVBeO#Q`wMKY{v^IFPaGx^V}?KIvMi&zrH z1EM%4DoFeCzW=$q4d@w{llnUwS_DM62wG{J@OUiFsS-J3og*{Z4;=Qtwp;0xHu^y( zEKX7>>xb>0&fTAGrA;(;*f*k@zD%C#bieV|$OY>guULvaS(hYoVL!cC@!nQ^n$ud| z>-3b0lavW7QN=Cwi?d4dqbXf=I&zbX?sEMgtnE8a#aFM$OuwoAwEyHoGrdE#ibbIr6M%dM9Ep zT>s;1;-6|s_*)+F9tdggHoPVQv?%$RPL5OwO?0X6tX$KIwP75tF*8Hh)VbgN0^%r>xl(XVt8hM?oIJCxZNEyt^=Y&Q+_K-OB>PrFj;;7@qI--$ zEc~uz-_X~Nb1DPdK?ckU_p>_hlQ_{eR$FIH`Q+0XmRm;v2#I$N<4q2A_jynsdj8Wi zB~4RgF1sh?ye%NaNiIyblsN0ivYeq@NR%S4vd^2R(=-Kq&a6JyUYB{R04_)kIv4u! zqbRWRQz{7faGwIATuERMD-I9$xp8wR5D;crsaUXR1qcC|$#5<}tdXKjUU)~zSoU@)YB1P}s@3X*|FON_Pn|kP+03ojlo!lu^uM{ zN-AcFVVYP5dPXEX10@+nip@d9G&zG;m)Y9fWM^-}(In;A9PrwW11?>=&M4L-Ny6db z0fz_sWSM1uZ>%V;Jn0(5zfK63+I?*dmPRT zN-DHcOtKky?HVBksma*c-Q&#Gm|>(4!XSlUG#;b1CQUMI&aIH730al_f+!lGBFQY7 zF`a70n`4q>%4oFB=6J}}8<%nD(7P`r9*;8_sDKbDY)c47rf{jZdkxB&_%-j|V(!a7F-+QD|fDBTDDsW)LTIETrf|hWu zj^UjrGluCb4HA}w5&ZZP-6;D9cgB6ms^iZPKva7@=U}JG?oel! z?vnC@y8bOajLCiurL2BOslQ#VWcdorszZaiQ_82K((CgF4fj<)D0f1)s?e`|bMzg* z6Xo;tQwW!RqxlD_(6{+>RGz=7_ueG)^Of5W-N^@E$XOPw!G3k7XClvQs&w(xt z-shI%bG_g?j9OH8amUyB=C_{Ux$JKK!q2{g zxYTT~uEF}cY7=-->Q+hS#-cFBf7U#1$PrK~$3FzOleW1u9H-#LmqF#9*6k z`#Qh%)z|ppcfE@rd&?atI{ZTUog&vu&u!69dEv#U`Qv93e(@JR%(^*FN0 z4&VI3*Z4QzKg!Rb0-*-H=dEw$&;P_bxv&wn2o7rBU)#fqb>c9|F0Vav34QKP?!EV7 zDhZwx@2%kCL=0E$npW_2|*%AZVX;y6n^Y%F3%5tf&OS6<^nT7Rx`` zk))mPWt1CT%TLzUbAwixy?1PFZG#sa z9UYY$LWt}0g(!WlCr?SPSE#gw0LznQ1*^LZFl`0fo0}-`oy`xdbAv3YSo6&_j$1 znp!j-hbJ`|N`e(Z5590ZLWW>AGmcDnGABt>&p-(><(SSaY34yq$PjFfrX)$qG<770 z2h3&(nK6vwh$NY^zq8Bi_;#%IT)TXggM%ZSmtmCmxq?R~;jI#!v zOHdvh9I<`=3@VDTzCdbZh-89NFo-qBGlTGgNb8b!LinH#;bnmJXD*~8tPS&MtRapx z4#yx?q{iaB3p^BgU{**6>L?_z!hs-{wJhWTbMA*Iiio2)I1mDl#$Yf2Au-0GbF@Gd z1^9oggA#zwuj?y^1mkjqNY1HYT|hKY@D1emCZsO?g|5gG{vckp^K!?ZE%0x%2ev~p zNA#5Py5RPUw5gllAv!RQT{-FYH7kx@bU?EZy)3_-&@IvYF45}O?;PMR_IuF}4R7`_ zH}!}`YXaL4Inno>p4yl!8oT;jtcRQx4Pz1=Fv8~ehy`O`jzJGBU9`rdXM8(L!0lvG z```V~y!AtG;gcH|$=sB0eC7!r-Mo|k`X}#4TNrPh<;kZGkxtcBG~y9&zVAM6%gzvq z?m=iCq`OGbL}S9cL>@a^COV`?n+M*OJZbarczlhoe)DP6?QiE}?>@&z-YPhIc3hSS zy6#bQeZP04>4d$*32E0_Tjn!556i#SSM!zKiyfn($(T8a*M`#cyCtF)qsu0NZB1_{EN@>SagQJ_OYMj;z*;TA+sB=@P$A64*%|JDZlblAK><}Y&?6P&z>jTj;2@m zXP+dg)Ni5q*1U&z`<;zpb4|e23kOeuJPn z&fR-*Vb{e+>-%vJZb-EEM&CQfqIWM9Eg#c95BSEM_wC7|=ghEZ!|vX1Ym25m`?WoN zm9rQN-rL@%di~F$eW62=d467Mj_>j_WgiJ?b*~ZK2e;Ok{y;bYl!{9EJt0(C;TH&$ zmU)IT1ou)3yb5gtAt*B?q(95s0R*ASsig)l&??B(&1N&a6F3*D!%9h_s7e6naV{VM zoNz(&JP#tneTYD=hF}oKC zM8k;fQOrnt#-oTqtcYYtNMz2Eq>gE3nWUD?N>UT5#ZE$+g@lZj0zb2OImLR<{xFc| z8Dlv(Iws2umVO}B)#*yV?CJ-D?6Aq7N+ z6)EDufJriAcV~~`C}KDoklFCQcsSzBnGG(?65P!rj41-;K++dv2r1DkMQe%HBA1m6 zZ2MYAc>)J05-l>IQB=+)P<%ExP=(SGsq@Nz&L3c`!)IAQ90*CQG+M`jTu|w-uB5^X zhgOnEhu~eR&=Md@{tWV}mS;LmNM}1ej>XqhGeXUOS^(O^hyG|c>-#y0{?&2-y z?*uY-9)5-wx9;I>Z~kFMk;G(&e9x!6{MbYMS<4^M9f#J%|4o^%*{F$Hr5Fh{1d%5!UM|gUF z#@^MNJbH7=_FWJ1-+c1NxodOC^wmG+U;NIuc`TFs@cj?)>!0{Z?jB1fH!tzU&wZ7D z_wt0>&Yb0!-g7VV@Cu*(_GSE5!nV6eGLhWBb)It!dG#A#ESuPrrJMxq5}K?HTU8{eJ%DU-~)D*_Zjf-}(->y*cL5XAXGBkG-A2 z&XhYIyvd7CKgqYAJ7kg`@U30NPrv%kW19xt7=$_JZIa!WU*NHCz0Bs@ z-_M8MexbCHy%(P3_rLrdzJ7g*9B%QKf9YrWz=O9j&>7Ev?lb(u$FDISZtz1#8Jv+| zW?X*mTm06ipW;<1I6n|f$9G|mukiIpUgp)yhg{k};+}WDkDvdcn6H27F+Th9KJoT# z{O2G4DDS!F9NBA+^KU-&1Yez6^!Pk~>o5Ki51tiV{_Y>~Tc3M@@1l6io8HV{`^67& z&zV7K*Djs#+O->Ot8KQgJIDe6!xZ^JT;SIj_{cC*4yv|pic!BF#IGiUl_>mv~2tV=8 zdpLOdtNg1ky~Hy!i&I1X`X_&Z_un(+q2GO!7m^v9m!IbkzIK*R{N&s7gT3L}^Uw0| zH=gE5D{dZUy!k!v~2w-~IFp+&oHfPkx2Z+#T_b zIASaE#0u=}ke8nL2EY6Dm$_ym-g^H7{K7}x!=3&rUwrsGOfSBTpZVb17+ijmPd)q` z=il)`e(F8;)={*ot5fOBh6GB^eG***l+Fzn0*Q+dXcb)U#KmWC?NY zNw51xPk~ss<#W}0=|EeZ)|v8+e7%uvlDB;PFW`1AmqjaB#S1Ki^Dfs@&nx!Md5-tI?S4M+&IkC(AA38$__II8 zpZe&J^3e~yo%g@vO+0w_1@1b(!MTlyje#PP0b*{PCo!Ix@f=PKH;)o-?oYY4yU&%I zI~-1?2&Ir(6GaiX-+7Tc@4W}5HK|EM(j-YaIG(a|G~wF8F*lDA_GXrwM=95KkJ&v; z*gXh;-#ePIcQ|A3V9Nf{jL9@1NfN9vfpNdUjEX?4m}ZWnNy2oNl4b@kK*te61|^Bi zq&R0o@U0X=`4BV{2=Qh~R`&15T66Bq7Pp;0!+03y5{@Eg(GNs_UgVIWTq00uK@1=&=5wgI*Dem? zbK|M>s8nsQ^8Hkvhsv{hD#W*o?XP-b=(LZ9ZRKCwvX8(U6815duMHtX(mB8cEswu= zoqK-tz5ME1hdloDvpoL&1Fl}b$@i`ubN$7a`N|WQxa*zo;(z#=H*xUtclgQ+uXAYT z_nyA|2!H=G&!F#p2Y>gIZ)bGrW&YkDKF+mgzQF(bmCL;I{qN_$|GBr|pZ*@d@$VmH zKS}xi>zDY_p(>KY!vK%wB(v|L)&@i^OJJdwrijc>E*g`2gxnI7%& z=(FGF#j|hYZ-3$)MAyF0-}=pmv2Mz@E?wrgzIl}g9=L}KqbZMFy}>Ls+}ypvfBgO~ zvyI#M*gX;7c=TERXkYV-@4W|c@DdL_ca@v3ev5zd@H3cu-ooGcm5=bT!5;tHzy2~a z=h@%A%76OqvwSf<&nMq|2M1U8`0`U%@NUA(JC}KE-=Q|+g6|mip5wRw_`AF^x|6^0 zi4XHD7ahO#hkwLtdq=$T>EGuceDe|?{m}dPt8Y;}Y5PfzT z`CJbuy#Z!=%;ads3s?4e;?gdUytc#FZ|v~wVZxOsKF2?N=oubAOn6`<$!3TA zU%&nPeD%eBZr)4)NR8wAQC9IEFgcv@?5o%K!)LGX=#@QoUw@2$_NB-8gIA6?7kRE9 z+~EKG*PrIwuV3YrLx=O=UB;!IjQy+E_};+**AEVP;ps>Cd!KopXC{`^&iK+(Px7g6 zeuvj?On7zYCNCUJILaKe{e52A-R0FuN@^?nS0#A!&ar>(8sFVN;KtM;qX;brbN}4j zUt0dp*UuGx-WFHgUuyeT*WT2#e^vM6IhnbroLlPqclG)ObhovCRjyb4K2ed=>)gM5 zV}GY(|0?gXv40gUq8-<7{oB{iW!3$wx+hhRS|{7TsGpz8=YfT1i6*Mt*S@cP=4m{2 zt#zxqmzOObo`v>7^NdnEB-C3#YqmtwKI*p7KHvC8`_DY+^efw+Z=IL=Ub;KuuzFT1 z^caUgH;SU%sfNC6lbM`hy$ISf;y8vV4g`S691RcxJE;`jxiXM8K3qp=jW9M3_>$T} zvesg;2oxqWc;Sh32$~9I0q;FFR}Iig;czH#iKEaoaCkfkhbOH9WBw|+9T_UTQijBW zQXzoDS`eYCzvvbE&nW}{g3xeY(IqgE8HnOyt#Bqo0)t2sE7%yvoIkV41NYy> zJ$GE--n;MQ?73}ZtgsfY?;P;TD_8mM(=YPOb1!rC<^e|&gB22w##n=K9+O(E0~0Gm zpwnYxJZ3c1#LA4l?gKp3FF&O&N{15dR-_?-?xFncnyP-f&LGo8#n+ zL7G8Y02>Hw)-o;0B}Gc2B}-MVwPlqhSt{FAs&W%VmF1S++_JvP6+uQW7bW zV%WUcT`qv#0WgD^!C-Q_ljo)mC%vyfyr;WQcb^XT&MZ}K)YM?^?LK|Zo1f?T2P;yM zN1v(bB2|;HzP15LlS*71#F2Yn*+8XSqFgBw1RDq`v50nZ!BIMdeo4 zfibgY8C;g_fyVWa-MipkEuNm}es7kWCVJuDoiM%wC+mf^i#8{_jrb7c@IE^~5j}V~ z(Z$2>e>U3(m(C9IBx1Dped=&^n2=@-#ypZ3OnvHxIp~CDBD;?0mEBG6v{2 zLhOgTX6~s6o@u)psry;lx73TXvpwI@!{h6|=bZ6jvntlM!>`QteYPKaXq=*}O}pW} zHs!(h(=aj+**0&xHMVTmv-I9?H{7zjedrl8ojVykHxuEr=b4Z5OP@Z->Wu~NUi?$e zt~}&`ln7#i0BRvrDKL5DFn@7rKcYB|kA+kO_x9=Q#O&m+eBn73sy_ee7i;|H*#?*1 zxxw_}asKk>o`Yxbm;~+NBjPUO&mhc$)w6i!U=}W4`cH_xYc{zQU=id$@M1#Pc8fIIn$VnYE=^ z7C*Q~X}-+*`V{`c67zEntayl`!H1VNncDLrpLyvSc1;!dTY8hf^{>xxHGC3bBs-q` zIKTSmjPjyzV(CeJGw-1o>yL5K$HXce(P!|^YCf}OV;%vTFtb871F=lS3MwxRa$HgCMM%F_HIU;fe;Ipp8v8{hsW zU%9x-`+p*&PIBbn3|HSh%O8I5z-cU5x2L~! z>|=cS^G|Z`tG~tHf6wV8fjj2RmMwQbc);|;9-iA%;?x^8W+#`J@nTMHz|_8J4!?Mi zzxT?kTzT^i{_h{0<5Doi3;PP(d}EDzE#a^J;xF^*qqD4?_+9?yAKvCWrwxDmKl(V= z|KXd&dyeqezHlt10CX^j(!!zL2l(YrJ%@MU6z9)=$TLqL=T|cGz;;(&rFQJ(CCX;CHbm-Ak<^jndNtdf%L?CqKR7hQS?VxWLx z_S!Zh>e7FHqDSMVM}tS?wNEQi(|soDrKj19mP7l!U4qCx`cT>Nk=b**&xWn%%k1?% z=aEjLhJG|f4~?KRM!T^JqEFP&_R~Z2D0%HTaPV2Ai>lFez8QW#=t=-sYrD9sqYnLD zd;~;00nn=c%anU8m8;Tf?V+_I3~6UwUGl&ZM-fpRfe;i@CG;e{u2RYcg4R$h7Skj` zoCaqd+ci=x0jXr_a~>m8H3g@xF0n0tbnOX@INY?u~?g6 zjawvr&m&0114rgvQfoPDoz{Va^@}tC(4IwDk*WN(EDNPasaQli*ab;q5mHkRW9~iN zr0Dwy<#BIq9lu6C5{|Eg6~&Q(x-U&2Dk35vR(^_5@#tG#Ss!kf}jzEOjLYI zr6T3BkG2sdPf_p%#j;PK?BkWo=u#QKSa!Mzag#Wa#8E=C84?@kOYeCtbc3ddYpXa; z2*ZRh4OA0p2@F$pF~z*xMZ zPn?*PhGI}sBDBkBIIBR=T0590H&Dk#QI=!3Z;B{c!mmMgM zMDOy|;Z}9@-MNnrY_IbS^l-iU{a;&uiypC}J|>~ayGnmj!P4y^+$AoPqx9P=ekXdl?OoD$ zB1dh!cheMoeMIj2@}PmD?}4*)P@5yF*MHg(10j?mXD`gz_IuhTJ9hh8K0UDY94_fU zScuGVamZxDL-O4Ih4i0}E=JO_$JOjOIL}A!tnde?PVnEn^A_`y^L+8MuQI>bx^lqP z6~oMq9TZYg)XLG<_~l)zeB+;-W#PHSv>lyBiEk{m(BM@ksLs#hwFZt!=VJm-?OR}~ zT0{`1Sqi|Dz$*X!KmLlF57tmB7Pz%}kClSYr+3W&f{C5Gcx7=JvvG~{=U2Mc4x&}g z$00j+O;ahjnuhi~5HWEA(nwx@dUyJXr2Q9wEYEW6z!O}*_71=C2Y*bI2#y_ol3)15 zB2zuBT%Mnypk2{Gmx~}E1`;8d@cf(=ra)OuGU*BGKyh+{LbZ%FA&GIw4U@#&x^kNT z^E+?TKw+Z>k(fmbKqR0%G~ks>EIhS`=*|0_yfnq#yOP;wmYG(a`D9GOy_*;Ly|4X% zyGBDCu%0ZSle?TWF;DNCbqF%Y%ETmw&AWA!+{;wDeo7@#nK7)TL`#SfK%IZ})o<~8 z-&BAhi7mBYfzQ0Si!<+Do2{^FYVvQ>(9*akI$as@1J^yiP9uL`SF+8 zy@zfQK?E?v3y0y%{SWwO|MriF!h~lJKh0m>wHx7+Q8;yzH@55CY6`sB0yA?SUQUYyJv%Iv(;k~omeD5M}ojS`Oozd7RqMnAbt(4Ew&RMjl(7w!^ z=PeS;YCU3a(Zk$-$eZtc!1qoyDKD+@jnntpDDC94yCxxtx$)jx{Q3{ib2YB;t3Urb zFYHnLQ4kYbpZUcCQVJ%fOIT~UapyM8aH&1w5-d7{m}?#L_wQd~-<}z+ofpIwu6%fw ze{khI!XzZV4_bEYult0nT`Hkc^4YUIO?AoRXMg!iBq$n}&+=ybJ));(X4@j)!-3M7 zRjo_3wf`(KOzGd|C~9VfVY{8uMbA#&%aIpd`w$uNx!%30{qCGIO81_ZPgZm1i|o3e zqYXo^Us0ac1i5E~{xeXwcygYm(BRhUKVM{bzwW)Mw=eob(r#}B`UGP8sFhtsB z^q)m?uiPyx*}Hp-+%r(Wj>A9~f!Lif*l&O1FqvVEg_3xzv9P+VZx zbj_#?np6S36*P6!%q?LUAf-l1Nf<^c=U=AKeGg+3j7^YAwjBbLR9It4jKPx+1 z9E3cHiQ||y&U@ei&9>XB<%nQY+c-l8BHOx-bd^SH3_&xXSSeGjl<~1xDY?Ji66v{sQCNwmJc`94o>!z=tuhtHgo!1tH!(@#?nk8ygL3wFzE+eA8edAv zo@H)kg6XMAkQ(WinVw%_dDkAMFWz9Yevf7|A`Bw1f`aGa`wFcj1>dJqE>ZM-loG^I zL^F)2*8(;g0UJTY!&*SS84+8EV@O&FoYXF|*$7;MMu9O7DG^0M3cCl82q`EOe0-tV z*xbY-Xf&DxVStd9YPCeOzKPPBf)*$VQQ*|@t-&eud(xHoQpkTRF=JA3KZGHQ!W24a zP^q>=93>9HVjaChrNWb7QY42>ku3s@L2A`O0vM-%(X#r}+QIXE---VT!1p~0zSquh zI?Ke?;vz5>;#8L+3d1y6)D<5FLg3zAA&rNcV_AM~*S{+sN6Pas-zK zsRp-?PQ9Bg;@;hd)Wev`f??&v8~ow5DGtuVt<} z*x=cS&CMF2R?HM7>jT<2p+5vLfRYB}Jpb)q|7j*o!sflJe0ZbI(!L`1Ph4Z=!6xyt z=E1egoV|FLxrLJ3Z!w*9$1Ad^6<5}3)Wd`+->~tpft6)SnpV1@>tNTyJ=r*bVwu-I z_c^{)FLX6M2_7YwI^vDR?cHzs0pGXmjL6xk=#Iip^7@BlWmUZtu_k%MmPt5YkgUi{%7ONL7 z@a=OCIR5fS`NH%2sGa#P|KN=}P-Ip~R_?D6CbJYwKqE{8RAoux8tcuN8EpuIm?URz zNMR7N%3t`xNBP7P%h-)uoH=)oy+`2o)jj-If9>N`H}3J?o8RLfzxzWz^6~U*_+8 zwnPBf#86(^OC@Zu@b!EA@Wv(wmzR0 z6g;?iir+f%A@4o3{QM_h;P^s?xM|o?)Oa%H=G_er6`-~nfDlxd<|xT@Xe9|zGa!j- z+;3PWCd%!ZW{q=~(&@S9`KO=e=U&{0d~lbQ)durBCh+PaeTJAIBLXP|C;`ndV&(oS z_u?AwoOq81rQIB#bq(4KT=Aj45zuUjUq>}oHX4{hl^vDNoEy3$4|2tT!Q!_)L0xvA z=v`-rCUtW*o!+ppzxa^39vyd%{&U8F^HnSH-kj}}EdT%@07*naRJEt}?;%@kLL6zxx$&5q`J)@9(o?V>+b>EZogx4UYed> z{nE~787$)1my!`;V4K_jaEJaNfJ8^08dMV(!`PTVprO0SMR|ottZAfW&Ku_TslZ~k|b#DV{pFaI<3kk z#vp`6T8T8SaU}w2MOtB%2xAc#q_LEWK2wubn#~%u%}pl`xP@krQlPZLCZ^5X4#N~d z(6jn?XD)5e80_%dl9qNtJLY$lU3&N<##-u4$I}yuK}dtKF(yt>612?1d(%N;+=-{4 zB@@*$)oK-~wF{~QPItiAw(W$ceW#V61q#Ddwa9c?vuD>byLRnna(aRC)Dp!>c&Z6^ z@2zs@-Vaz$>L@KJ=>p|)1*rtSr>K-GR7yqWW~P~$C{ge=g+h_U7&hu57p~ppoewT? zY2`kq5tAq!#J$B~5`rjBh+;#jP{fiVMNEVs#!8Ek7Ho{g5`+O^7&=vbU!y!t6vjkB zK+%)G`fVQsy^%AHjwP-vXMpQMFQasAe^1a$U&AaL#NoF+5^i8VGA0TgK6N$9vF zfJ{Fx9L*u6p(yRd07d#ftu@kf_Kki)A+^F{5E8Vf(NZB1C?OsDBppVHb=AEju};Gx zF_<{UCNVaSNunsV4s?zY&IAyGFm!^1QjMJBkL8txk#+fJ4^YnS+n_U2^n`Xq+w62YXLvu`9JE8$ z+_8Q2UfZM*L3-v~*B69$S66y#NGRAtuiXsplF72-_Dh+`WF2-+k*Ui^rbi6T7R-RVyUEMz__`Ja#|5%<{iG z%Xi=3!E-yB{M)Zy;r{VY@Y!AS6y7|^ch1bPtX6sN?dvS;J;v@CpDP0fa$aSpDPZRC zZkEq~$hY3T&haJ5nQy(pkJLW?lcUdZWIE=%Z~c(ng?)VZ!5L0B=J@lwr;#>f<=zAC zEVQUpQ#`Y4nz!CM$&Z%HJTceg>)*V~?Ea_OglpQsQo^mXym4xgaDT#gzIv0z9miNK^wW3xCtv?btflm$m4`1RjX2`s zrT6*v57&w8Bv)3OJqw|tIyK4eBPD+C?FKvc&ho@Uq3fDTYJ91Pl9;R4FL2_-T^`mo z*Xt9!x^IGi^!*?3gB=By;>-O0r3f|cvvhPn>f$AS?|Wx?Y0+@vhZk8Z?rBem6u?1c zd5*=|%bdS@gZYZ2cIIvV@M^+eI_UA+-#)?I;gFwvYKh9iB!#P+1e+`T^RJ%d_{$&V z)x|R9*$E0k!C4OWE=I{F-+k{xR^mB6dF%i)(-Rac>lD(0P1hkDiSJi=;^+)tKXsq~ z>nnf2vy*~TH)}j`=n0PPUgX2GH`sW1ldpca#+mQOTv%&R+H;ioN|^`k*<51z=(0mv zq}jj5<}RMCyv>!sqq4A*{Y#R);v&~3C)vHcNLk%QX+<-vaqi?<&fUDr9RpE{=E&Y> zmUO0k&5_T%%CTR6i{E-P=4W4jjZaS&!2}#wD)Z*)yIj6~pJV$iZ(q2<*&B6)keogJ zBW|C2hnYRk@Ua~e?6|kaum8?hSvxeryC2+Usxrw>9zP8B8iI(`d)N8Xw@XY!m-s*4 zll;_Ayuzz8-E$EbJa+A#W$&djZ=bu!WN@3C*Y0!Ec>MY0!|axl5^(RzDc-!Wz)Z_6 z$oE*-w}`lMldpg6t6ZDXoV#7)=<|E4=xNR_Cfy?Y4T|sK!`ZxSK-O%vv4MlW&cn;YZGc$N-Al>UKBL<%ba;_sX z^a+t~7t_DL^cDpAAn3i%oH@sI`Sgj=Z7Q~SE)+fcw8*zl&TH;&szCq!*}UWjgVCkE z_n$o#^r0~Zxrz*J8ZqQ&+55NMjybm9HDKUbgnq=myWJkgl`ZsL*PiifzxHc?zpF8G zA-01X_&2}u+g!eK4Jj0)Jp0z;X`Kq4rLgK&FeF3@$+k{xO(=;>eK1;T_bwnN6)kh< z04;TDqvqglSm(_yaLVjb3MVj_-dkc?&H|~Rn-nNvnXHzWpPM9THdx=-pcVv9D2_2- znbWeAB8Bw31cl8>0JKFB^D=41al_l94J}3YoV#fSib?9C(2PTZIHnO9f&@YXK?2Q0 z5E?;fB(V`BNQ{t#32f8@HtGRkl(>qq1uG-~yg)<0*1AnXYlZK*%6~yiDn-rgM4838 zDHi8vSlqFLrM-u#%jjjHMW!dJ z?Ao=Hef#$l8^eROH6mk4OnUIJuI;pv_*zl)JSHlY6zL)Hltc*kCk|u6AS8$)8jU7V z9Fs=e6bn8Rhwbn?jah8BOwa1k0esz_9?O?Tj0nhjFiv^}ApyVkBN=vL|2}q4fGVWZk>%)^nHZtk-HjyssBdM_0f+{Hw*l z?-pZd+V)nM`>XoH+Hg$GTrqHI%YiYDxjg1t1&aRr>(V3uF=og1ayj!h_Ur~fP7W*I z#wP=Dv>Ds5K1xP!zYRVh<)$b^UXW}N1DSl;pBUC}-={vg#PNO8&e6pttloS;>Cgf8 zPH2)KVDn*v$sG&K7cHhZ$Mc702*QWFd;TgX&fn&tn&M;69pcbJwH^5SvkUADH~H>` ztNifdLz1~2{EeS^fyLz|st<1Q^$)Lc^7=zcJNEH2AAOEl8M0arDbFvlZ?;HM+vH9I zcI;YWG6^x0GwfQNqO4(K+~1(OdpA!kRlxHp3d!B8w|L{j%bdQ~V8_9OynJ*IQ^ih2 zfAi`&-o6hHHdi@y@g5u1S-$+mk2C8xxv|pZ;E_WtRVB@!#_Fcz(7r{&dL2`o;ppyJ zOns9Fp`|pImla zZfV#I*134g@Z9lZJhN2k8n|9j&}cS!|Kbhay|&8S`~-y}Tni`o^s9R*K3wIy=Pz^W zR+F7OCYhMq#V3zH#m?|P-@ClR`zvci#YvuAn&-gIIg+S}KRM5#9dneb(=02)#cMbD z{<-U1YA8PWv5)fHp1nL}HhBB;HQqXVnX?ZC&p-V=v=D91px6)wu-lKft$TAgQ^^Je&X{MIvnA%w7 zc5GR*iXFRl^Vt`k;@Hjt57z6{j8DPWG^9smdVybj{WwqUn4)p-0S`riXP-RCT*;w8 zTVEj26odObC`@zwi6cBQT_#*xr@Ct=FF$#Z9aEB;iMYAm;BHf}P_3{qU1o7~x)*sfWMUu&>D$*+uC?9WPfsefUBnL&nY7}#`k>E{D^4jw+@rCD?P}Y##Tj!xy z1U&XFmsv~7Jh^v?CExI{7BaVcCx@12sm{-`-4EJTfnbzPuXuCOpQ z!O{JDIWP@3HxlL+cJTb(GWS<%i0OHL;_00<9^T=uoZ#5O{VYxB9%Q!|nd8p~i&b1~pM^3Ozr|J99D@4m+P&tQk%)2KTfb}H$I;tv_YA}2vL&`YVad2u!0U(7hJNU6cwtdo#iLoSU z@aC%Y#+Wvr-=>ZNLP`grGcMp4LLijF3hVgSkRlD7C>%IZK#4=oCpJMV2ccF%xg4mr z?Af)z^kjuwE4R3DbA<=%H40`aM;gcREWVbC?&H><2Qv zEi!7M+S6!HJBYV2$TX1he2qjB#WBWOW@cy6TJqq*eKZ1JNqkQe$FUP;MB;fGPpNkH zEHM@(1fGVHFPSQ9Dh0vPOo`p|lN{Ky$eumREbrULjwg;Wv-_|U5Ny;q^UhoR_HX=4 zR<5t0l<$%$Mp6$V>dk;=7!yYZDGWtlqXkS=s+1>6Oixd-u(Zs|gEdZ^InTA*t323f z(1=`eLI7I8M9JsCo}KL3wTMs#tp(Ur2SO+sn+-NM8q}L1tLrtIp|kV@i|;F@C#%d( zS16V|D%A>8bBolQhI1FMac{MT)Ud2mp!pJcRa8S|hbWYaby5N=iK6r&ubb$$$ct>J-I^3N!OF?A^1A zT}v}8&sC`U5^WPiT6GAGp`KXoJZy6F_BtP4xW-O~-1D2lqE&btM-wpIa;>NybJ20EwcmHER##`v5t*-s!UccSn zBC|=_F*+_k;XiVWX0LCDKuSmT=^#-bn-Ll8_G7jKH7AB2o_emI^}ydZrL*g5N!BOt4uaNF>#XN;`4epGa#7GDqd@R4VaHf zxJjcCB6W#kshDa>4IWiCi3#f)#6sg0EBH!wS4)j^!;#uUd3q!+r|b6_gb~@G(njw5 zrMz_i-l8>`Nr;0Q^=5+h3lvI4l#m(mx8AB}_x0oY8bM@G#R-Z9-C21o#3pw1%~Zu< z=zbLkgv}<#ui$$c*^VU>qQu}S-Tvm*_%=yQ)T|R*iC-+^sg}+`;^>7!qqXX?78|&y z**x(y^111w)@gcCaorn7J1K0t#rX2B-y3L=hbHJcywHU_$d2z}9PjS42V|2HUHftG zd1s5)?`jI$|LlWokq0H@djs9$>N5dx(7PtDN&C zc97Ok-hqg&O}qa**}eW*G4MFpGe*R~^TObH1(rY8iOG0GjPbm!LDN#VHtE9R_+>J6 zVlYG7OH0RDkK?4n<;cjj&XUMJB2hq!4Uu)Ci)4V^2R#WwOGz zzVQu`D8%=C%H%W2ti`q zb>ajz>j6=0utE~W3H5r&W-X-F3~5FQ&B$@zTN(+%3Z!^|RDzQ4;}uV1kZguAQS8L@ z95SNaXbzsQU6o!W2DHW^@CpSy-zR7UC?zNsJc)aVqA;HbM!ivN>MHEXY zzf84SpdLgdR$ybNj^s8w)0q#(rhM8CUtS8;79~lnK^mOMmLxN#9dxv%+TS{?%2aXQ zwD|a`t)(#r&v*0-q1<@%eGk9j=exZaiXu0-G2E{@=&{&V6q_^t@M1IG+obC&`;3 z?LsOF6EhS>biWuqm;vxg6HdHLWNC5&rG2FGdk(z{CFyc@aKG0Ss#87pWcwW^a*!dq zP@q~U44mIyxy)2mqohxz>bJ*ei{skqThS{LJ;oIADYUN%_=Qx-y_4umnsqLnJjL5r zB`>{jkR25{K!3!;FMFAW^)r3vQJ9$SA6HW0m#h68+ng^@eu=W5H%6wJDrTuYfK(JJ zJ!8an*{1YdyGnJ`V9b0_DBU*(yV7-1ql=nhEU&KX_4GaYl%z1@3z)pDJ zGM}ThGEA#wti2x5Ll5ihTefHJ+X2_l24@|;fqv1}ynVbEt}aBk?on5Fwv*?16?57s z;4Z$m=$6vWYvjK3ljuj9bv^HZei6OTo73u@v)p({JCV~?wr~HU(|PH6*A5f#9b>fh zo;w7#YupKuFFn{x(Hwr<>6~j@DDaj>TwA+G&}Zj7@Hm*`E;Z=9FnC^#UP*P{#Oq$K zhgTe=lz7?$VbLjkSqf77GY3cXgtI2oTBep1qFq&WfszZBm1>~@9GsqXvzJ0ZswSVL zt;A)8#k~vswr7%73Zy_MMQ{@(8Vv-~kUDOhZ#rG7xbQR`;5+rfL zz1uh0STEv9D3yHXW~P{*n`M1%om=4@Ok&YWrH%@=E&PYDPS6fTq%4V&SPS)fz{Ayb z8ns5MaxcX*OfRFky4ENxc~pBnBfj%J&J4AuxgnfmBZS!2~gzNrG)e z7=yF06B4O3B8eg677@k?t8432%D&5d3(#I_eV6s?6v8nVZQ_FT6yuj95QZ^ITBMTH zYnzm$qEaqWsfW~?2CLjeP2!~8Z%QeorL7B~eUC5X)rx+*%Z!6`|$T8pRO>QADT?rNGUP#OYTE5T@h*X-JVS#t5@w1H~Ijkg#G z!oWFVNR7c&>syJpKg*XG3iM*cZ-<_Z1}unMNmgtX?B1t6*!2sMcUX9YS7)6PTL><; z)H!t9>Es`R#Mswrt$UsPs%1Q+LEgbA|G?5k9vxc~V!Z!$OaUvLdtPFW$zY6u%FC#=Y={sPKZSjE9<>0XeL`m=UCl5ZwFYPWeRaD*Mqg#-A z`|HJk^{@4BulEQG{VT)BW-KsI?Eg(B^a7b%r0BnIlufH)Q; z)&uT&vUEKy>KF~nB3ePe|Y4uy~k zK4B1&Bu*P52ojKqCHKqSfb$j6ts4F2d!j{Y}r0p5^IT#B?x1}I3kWhk~l_Ki2`ZBVEuWg6g)7ddL%v?U*h(Mwrt_8V4`v6a) z!OFZqW^)t|!^X4iWxM7ap7Yk{`~&mg`OzM4xh^>UqN$b;A|khCqptHMH|Up ztDh2N2k_r*pPg-Qo9ElEF;qvVJ=U`D@*!ho(6w_1|DZKz=sGfDE)Iatk7Q(TA>(dy zAnPN)X8_GGZ!Qm_(B)n`GtdUbaogQ*+t$MaVE5#V+fn^CS{tBe&B@M7(Vsr(e>Raj zpIV<0V~n@qiG>cTVA#GgbXgv>Om|&KFvx$<_8>Ngy>#xx9OGxLmlM}>6>zOxupisR z{S52i@xldSCe;UUL6Cz!3qi`0whl%lEE1f6nvmGk>aV3%Z{md58njlJ#96a>1rLl9 zMe{w0wK2YSoJC^{L8yts2EMP5N>HoSsW+RL#8qrN&!XDC=wnTQRIk7!iK||u2k4fq zVT(WBvPx`m|E1^%%eA22q9w|pBofuuI3TSK3n8&WI8ixc&zGbC;{NrEOymC&AMW`3SxxlC*mr1tUfP*{puGrO>WDwf%3G?<>A;^}9P z^Zw}%xN&m@gLJ_uf&?dQXA^@povgFPwQ+)>-fYqgn#`$5ComU;Na^S&PEW$3Jx!rh zpcosXSQ3RPMWij%C{kd7z{ClqqNG|avsn)z0xMM4Ap$H?OC&PwOQ-(tD*39tuqx#O zd{Wqt%m}+!Ymq6s#ffjE$$=CFAkwj*wMJ>>v?bE_Ng>fnqNQ-i8qraXZHW!WDepc> z5|TJ^wvNWM1AMRGBV$RDG)Ph{4TB{NW9MAK_Vhot@*2eD%gtgBQf?h^k9nC_ZdZS5O_wKM-KU(VS-P2zZg`p%~BwA<}tcX}c38UvawY(ZuNX z&0a9Ka@Q-eHefu99$kz){fp82!RYSFx|9rqp=a&MhV|v31c@C2lMzF3#=ZMi_t?y> zMdlNiMyw&COObW>oawAF-7xTBW2LXv#@INvg`dc}xa2P;nitQeTs%%9JrDKjFAK%}Ex(7#^f2jRNn0@I-y{{G&x>X^KQ~0#+`z|OkhBysKl-4e=SB@Hh zNvoN{rheopoL{!KJcCv)@NKEV8wp92pnZw9ngoNu*#;t{3y`e~l$8>AzK8ZCu@6O0 zk;E~zdW}ZC>EQHqFYx1d0kjT$S-ZH_pppC@*+tROzf-> zRjLLb^Mlp$L3D+eQe4k>`qZu|*MgJCk#gLfT(Jh2W9LLziCATc#r8)$$ac&T;M2^h# ze`~xrM*!JQMs%Lay-zAfeQEu%xUr)>B$lj)@)kcl{{4t?PWfAYo=)JK6TWO;c4WN1 z+~yZ-CviGf1t>2eAs!7*-aAS11R5XDv-G;BKYCkdQDTq()!~j0LyQR_w%q#J{bd}R z)3Mum#KQDQfb1MXm9)v)Z$*el-GP1kW!pVvVz>h>WXR zn^wch7K}|Ig-Z+w=_>D@_7Os%JqgywrrHyQq9Cp}2%1flQh2^3ieiTlkR5R*V+>Ig z(`W>#_JP7HIV6OV0kJU%(dsYS$pa%Dk{~t-Ryv&qoBlqlTjk*Wj+!75?PP$l24M}- zI%G^%@2WM2l$33eD}h9N+PO7ojZ(6sINUnm8^`50?J?qzCQ0JbVxI32ML}xG7du*q zu*7lV=By|2{o;?k`ajOXH-;(RP+PsNU+>Wt)^RrOLGKw0Qa;AB39mrLtwzx`$F5wi`f-Z8zoE*Bwnw+1^YOk8r<(;iO_)>&4cdNsPS0cKURb zi08QXpQTm|5-=O^JIq?%4zoPn+V!#*-qM)cN}~_3k$W7k-s0qT0^s4y0kI`lpz-cmvRNQCUb@@>lP77`&9aU204rA;g5 zI)#3NNn+wSO8wPo^X83-J7Rlr%=-EUwOYfe&D#O}IAEeWXun7;2~!)uw7QzsUa>9c ze!7t)iD`STw=@t`T46TE5XW(6%vjPuIO*o%N|gqh7GFuq1)s97D5B69;wYe&1l+!z zP_I2?W@dtFxk#l_b};@h;lb(}YY$hc)dQl)VvIngwuDg_5rz>;2>fCJtprLqXuXme zA!1?+VQd`tK8i3=fUpTd3JS#%`}XhSz}`LFRT62T;Ay5SC8`<<%Hzo1Wk?dP-F|>J z36+Az(*;W9Dr=jYL}5UjLdi@{CfWeaFl2RYoyls6iHeWsX{>-C42ct$bPA#XrG0E1 zV@;CUA3BYL*d`9jpFq$Iu+~-Vl~<(TDSS_1LW9kasI_+E$r?a{Cw1y#;W+r%1SK7i zre&>RQ=WgD1eMYcL@L-PGkO+MD`yLs9#({O-zk-BTLiX}3N1v0NZX^u|BsV|*chTX zAqparC?<{~Y#cj#pN=n*OJ*bnsoZyXp7&!9{s4y${g;Q8_jzwx70zWDi% zGN*FJn+>>e^BPy~T8e$N4p?wG^R3!F1QGhve}r{3d~S>k6t zvLCetMeKoZu!f|u%Kc5r!c2jiSI+V7g9$$W%0avVV`(cRaAdVE@7HFP@4bDIh5d)v zzc7WDc~5-%B>(Ik_|-2Q!ym<}9?RA(e?4kFvp|3eS-o|gw@zJUC5S0v2@r_#G%r4R zkSBJ|cHQH!Z_LtgOdQhK*dX>Mn5=js1LE9g2_ACmfn{lFlJ#rv^T(Hp{QT=jyT;O1 z+vee!AM$%EMSl5{hdBEuZxcWN5nfs@4(0N1d6CM~Wf^*z?borzV?+?O@5PFN$h*$7 zY~hYY2eq|T4U%!DVarYIu~)eVaKT5$=F=+s6EmlZ;&vPPd#-OE2Iky&( z!kS%`*7=MkvBenLRn$0+@O>YPBuUci8ta743J&UTt+SWw3|yxX;NZ;`fkjJ6EeP1$ z*d&Z%7yL`%BB^n}Wx}QblO_sn#$2i6GGH?mT_F@oyTH*T4q4#%-7?iBaFtm^3dv64 z+pTP4R@Gi>O`%Z4#t|Ndvagw}6sdRu6E;bb1Zypgpg|M`gkh8WN;yh_@`$6DTD?K7 z-XMxCpb^5s;iZ(ABq51oJWt{K3SpBJapCSwNR1JKW)#v0ngq=TL8C?xG${JcZ+XY^ zG6(kUMl?4`njr*AVx?M;H;DzIumY##FIobL5XMduA&R25wni9* z4k2KS8&$^H6e#785OEk2g-!nd@UkPS5`usKNsK{@y?7iru(9`t$A5A0h`(nH&4R%m zxLbt4KjtRrwJUmTS$(?wrt&zx+drI$p@LJRg3m!mnLaV4#|U2)Sb_)V`OUZ9XT3Vl z{wELd%3^6-!&;aS37GX8eEmmPc>U8Z0nk_JvJv<1ukgVY!_nhMn8-eJ;~^){onwD_ zo*h1@=WmLG(MFTA{e+baFt35tZ;%KQBGdnLa7vrnT*C?y8@Sk^u;7+yH#azY;vKHcALkd3FKn+f@1NnHe% z@=<~#VDs9CeDl33UwrK#!US!ov=v)xzwt&#M&xtox-7P}X8kyz&Dp})Kuwozw$gSq zNVam#7X5f@`X=LEdnEiBtsmE_@89=pqz&Mxm#g%r z{PvdEUlOCWc93>qutpNckeI|(JB0vi&{9(HeYBFqNkkMySW=NS>4KhA6uoU5*zrua z#Bm5#ptVThUJiEMs<5>JA6@X!5*qb7jYhL=yXR>y4HiR2CIKvtzL2E;>cRzs0C5!e zsi`L>ag}516yt?<_pX#`BL=XvIpM;UYU!4lwHb>$i<008NkMBWMW0GRB8rkY)`X8ePk?3O5)hiYy>oe7-JmgTPm-8zb(fGi9l!k>amW_VQd1*9rhBN5JVx(X2aR& z1x<<*E=f?GsIs&;&&`X9M%^I;HrE~^Ntne_EmwGQ?+*6uTtavS>dlbz7q9Zeci$%r z8Z-k4lTM(Tq=Jd6ZHwqC?#&>i-mFt^7V$krY;9ZAPYQ=>kV4>VMT3|mktnUONhe_w z#|b)?C}oM`h#+X-7c~V>6T}JDDx}g5wx0&|LKp|jR|@x2r%xfQYn#@Xw#I-=?J!g7 zfs_)heS}sBVcTuovdTm{6pQD1sg{LJ-37GMXwbsZ2Qn(z1~9@QN{qodE5t4lCP=9Z z>3>-8JRht*f;?b6GcJKrfmPr5CP*J7V_ZZLt%hh5Hs5L%3A z>Ra(+M+|NU9zFD)hqU!LnhnGHaNzqNF~vX7&wh(-G3#qMbzO^hd6FhYZ{mN?wt{XadyS8q4*wa?K5`+5EN0s?q& z`xbxjN8ey=Gh)|{oqXcigUqE*AyV<)^=lvSjd!nexe>E(X&0aU*i%$f-JmTryZ(QK*hedY&sn17tI2s@rYWHvR)_Z69;k}T#i77t%>=6#{^f~wL zB{u3!?yS|gQVZF?_b{J&ZZFkh$fY;m<#(@cU=SQX@)VzZZa22E!Ie|z*jPHu3;U)s z&th1=b)D~>I?wwLBbKIS`NZ=_*gFRb!@2iPa^~Il*^J?pXP@SkCw4d;s2)7732I!w zc#aP?CwcAV-E3UD!Uq>?EIo0AgHv@*oW4$Beiw&k6HdKzfgjzeQ^VtxXP@NdLrdt* z3;eqiYwWK?{PEQdihh}&`iYl0IOnnc;4VLU>pG?VPw>=4$mugTxMx9>>(oc8N7^ zUAfKO#VO3CGyL%CeKun#6f`0<9DU&{!igmc_|bjDv6!ZZt^};y59UA{Q{)1d~J{9GE){1EMG-F(%ajFlePy7<^2e#A&c; zQGxZqG$#sKubXw1k`G^ zwjP0d`fT2EoI{G^S7UL>j*N$UZ)celYHh7st(^^^X$vE^D*P=MfR+M$%Pkb`uq0?EAEqJ;Dp(s|X>^pRj`Gp0dB&OD=bL-AsE?>IB$&;se zPJvc*B(AqXOjaY=Vw%fF#wn z5M2?8F)r{AgUIP-q`Dg}>ENZj|IQ}p#+OA%ipE_LR=CzC5H4ub#PM^BOkFKqOsd3@P zW!}E>ko(sz@r}1naI2Q^%v^!`i?teO@k!6t~*>~RH zd+%OgwPSmI-nse?fArkzoNHJfSTMZ(#+&?$@14Qqq`?EKK`vwY`dR+u`|ol(g@ z7vFxBzj^BntGBN5-B*9Y56`c&e^!!Qy}3-m zz*Qm^^MLkz=vcqC%-u?q?+5Sk{&Ew6Dhgw{P&5-+!LBuD387%Y6UzZL)!YoMB_* zIzK*ro|VlOXRn;&E3cjAtxLCPE#Kg+_bzgE?G~@R{vKa_?-sL*vpmFYo_+3R&Th2P z8`pXEjd%IISFZ8kLPY1(DgOAo@1jl0?UgH>PGUj&HwpitC+>+pqqBfBF0eEY8mHNWH`NUwED0d-V#{O30Fe zP)cfHKhWcnP2N9yia&bsBp0qXh|^`h{=yqPdv=WjixJ8BGyLvfyv#a+Md>%{#fl_Z zUFO9LtF&92y#3?n`PK*5IarTy8&~+|8>cyW?iz2Nzs#xi1P63(U*m;y*SXQwrR#^p zaOs2VTx#lF+i%CMJG-@(PIIBH0t;e0pC2k2+6^9nJMG^xk7I0hUhM21#r3+lHn}MV zeftu1{T*^A5_e;^k6pH^{Cow_UV#j-0^H!RtH3*S##yjk&322^2AgMo zyApR@GM6ran~*YhX!ENH2vp$F3f7=aMw%paIswW`RJ}sA8Y3{IX@Uv^q?72(_}cRv zChi<)onfs3AwB7xQix20@H_w}(}Y3n(G*glyE=*1ARJy9KtiUooV&pHrIP}uBufVl zaL;|mxqRUg?ae06SURaDO0_5ZOETJxCbz3MK}IA-&|F(503s;~aYRyLg}_OPHU^VB z_SSgly3rXrGlW5el(~%wLDI=^+7bpT=aw*pVTduB#ALbZfFzD%vP}3uj0R@~&iI3z z3KS}r$aB_UjU`f{R|N}~BX?qPrj;DdT?R0Y=TkF0nEg0Ba$Gp3PtBdI~4O8DoOzz)1*?fED8+ReL zG&p|KK`5usgq0vqrbNhWsVluDr^OxEh$zS>d6Dj^vh`c{^|*c-I&kmc!CU9w;iWX< zAAa;GODngioxH>w7dw1nZV&t84>))J8tsF#T)KV}xp*H(4lSbG37$M~n8OR2==x2b zzqv`089J$^t&0jjg1ElK=RW=b&pdvR&8ug)cIGr!Z?`xw3x|#z=JTKbBoEJP-ult& zynOlw7b@MXYsUFEF7RGsk-zr~Px9#gh~whh{LY*2vi5}s*xQwU&0jWYasA>3E72^! z^^2e4c&K?Re1jjKy2fj*Tb#et;-N>Mio@!u;XP0>9OJ5+HDZ=?R zw{P6$(n`ofPd~{oJha66#kcv_FJ9upZAr_)CqD5pzWC%Z>gImT?|+BC`N>sIJg8Y~ zIfO~sSYD=SKq*UQb}x&q8=SkcM)US6H=1qM8mn9<#ZhNrZh-|-zWkZvJaq3~?1c{B zfA#|Fi6@e7qzS+IrC;G^567H{*Z4o)yvXhLgLKwb=>$u}Ny6Hy;K7fd;GxA8-mcCP z&hA0BFOejkyl3A-kMfyg520_o!wYAxbM%p?_|O5xyWhS@dgMv|?$10*MQ>1ZKj6_iE+$JCW^vC&`hxgMy@*4m1 zU!UV_>mxk<5QVj9A`ofFMY zm*d_(Dd+eA^_|+{-L|iBguCL7uX(r73w;sgX-+uXK_v#GU)~-BI7<`KBmq3Jn9Cv7 z6W!aUoy(o)PD%V5zJ#TZkx;7o6 zFhmK+vIHqZtdTUEO&YBx?IfX-rlgt4GxuF~w@Cvl2BK(PNVhB2dpj=!=L)iJeXqnH zz?6_U>3IOcF!X2!*UugpYx_|+&tlli)=C7C3NR)^Vlg_S(`*sgkU&A8B-Lt_+Dr{8 z6={-^Bnb{dl4J;Jyn}BI&N||XB2WTnH3Hk$vPNL6L0V8kA)SYa)T%M{O2|wlram)+ z6pke6U`#g%pa4l2S2+IQgIv9Ei8Cipdjy0rq}n2-cfi9i;K05;95{4@m9-W(Zmm_X=}T3V#5y1Ru-b3P9$IfvQa~UO(h-JXjx3=^ z6zPy&`cDXi6TVy|Cl3tsYfBXnC|`!6lp=~FPdeBOf=S{q%w;j@5dvCg^M3cGGsbw~ zThoo#IFFzRLP=`;*akt2a|We+08TsG3t0TLy>=p#vs-nKyCF5TRk^|)J?oT^FR_ER zZ?zfSNs#64Nq808u*=egW#cIB{2tQ;o$l10yU#jJUT51J3nT5h(~;Ahe&qtU6T|=g zhkuFG9d0%)ufBVM&;9%n4&OJ!xz%MZU$NX?3z$E0fW39Wh1)my*6XKO!_r!BQa$KO zJ5&e=;(!a!z0R|5Ds-BV>X47;LH33D8pjSTG8<;>sn3vJX|b7htHv$uw#KY3^KZZL zU1BBBt#w*W#YPHyhfYv7$!IP&iK`Frz|tHs83*QOA-T@`7dmJbIC5|wbF*{IKKeBO z;c?4MxX#sg&hYzxb&-y>bk2%QJ<+&S)65| zVo1`2%nBYkzK>%E7nzeyDuJZk(ab&i2+zFp5`XaQb5trJ_bl$?KR6Mg!ic?x_YXG0 zw7J$=Cz+Y&p~L%`nW+%%nPoP}NYV`LB**VrU}?TiMJf(PikF&6PTuRtl1;w(r{CuV zV0M0iPd@S>N5XTw{@!IC%p@P(KSy=#I&W+UtDvM;4p5SZ-RB z12DioK6&3BYRa;-7=de`oj?VFN9b5dszGHNynOKrudXXT-?_o_mv0c?{}_8_Ln0Ls znX~+>*DteLznA~)(~oc+TpmJBeMo-$a!X?l3szM2`z?nseHA`a2l?ve;H* zGp%u0tkxb05QKSVzUvryrhkvYjT*pMhcNj;;Ed`-#gEpB3~7OlIi_gSV<~N4s1m4{(Y! zH8fitsuhKG7H!g80@9KhpW&`lVqYVVM5&0>=)5e$+mVzCDZN5KtJS92Y*Cw;rxHbM z&>+k5z=Dt%qp?V&2neDucd&hs%9A&C9rCPw$XQNhCjk_`yr#AE$=Q4zl?72(zo8@?eH-F@Jo*qwKjO^xz||f8ACs6Adp02@L*&zsP4a) z-}?MR?3;yYs>(NmA#%4+9HHU?dANvW9NYYFb2ddf9G>gb7KD-BHQ4~`4x`e zKZCjfs3OaUKn9Y~LdW<%?5wSF`Qi=IR-4p1()9KONs68iR8BzF6ZBX&^MGJQ9=Ez4kc z`jR_pY++Q4(LNh&HP#udPH;K{=e5U;Ft<)}Y<$Nw&*8JOmL7?p zHX55}wbLx~d*>7L-?uo^sAS4Pytg#3g zFf%*H?Cd;Y81+cxy5x~khBzTfb%wPLX9ewMf=;s>8DVHOo3vU@uRPHuZxj}tX5NX< zkr^rou*UXK1>W8rG7zXx5JZwNQs8_b%zrQcPkN?*RVWGRat4HPNEj-@Pz@0M5k217su4yC4Xe) z)i*g~>-^dmpW-7Qd5ou?dX$fS;si?@O@4HGo&8IT?3>fPbh(L`U*f(!AxS%afFqSxr6guTfNFFXKvBCd6hTM zpCZ}6z%x%CWLDka!lf&$u3zWH=ilQ`Pp)w5c7tZ3xcAs0_5~~a==DvUbZ7u$F?y5R zjV!-M#8SM-O!GRgzVkjCoekbSd4-e9F^jWv%#1nFU3>Y*{IjqAgkaAhp8D96JXY1L zwNujO3Maq!Jzo3ZX2IsG9H`FWZe8Nd56;u*tnvDrSGce_!=9NL>eBH?&%Mj})dnl? zzrtTO6F&RokzUY2O2wW-`#E}OKZp12VQzkgJ%fSfkxp|lPn-P#ZC!ZNunmF}{&%I)Ho_U|SZvkUvza5LQQG%4q> zaz8EY+^vhc9qx6*d`Y`>0J%U$zut3q*#_@i2C!Fi?2DJWwffEptj-Y9k~v2ZcvkYv zXk6+rRwHvbe`=hEE_cl{H!f{0CeL`voZwH%fGqR6^-?;N3P_R!a0FpM7)XS3*f_+w zS=y}@H*ei$v(-jBfeZqqHDJLG`p~blq%lj}Jh2=(s0_*VJoO_Abt{ccF$bnJ4cHB%L%N>9lD! zH@&XC^4ju9P*RXNLl8=WI7Vj~snwqBFPHjLfglJYg!GVdr4$lDC61V_#mv>JEX>WY zci$3oi}Q$BVUxP`Um?toEFzKMI6_7{ONiA_@!6*M`wRRUBJB+!`r9c!yH{A z+g#zB-+GqsNI10r2*3ICeH^Oa03=FEj(_fHzHsXY{Qm#_{ic6 zFW-2R-}!(37>nbh`(pI9EBuphoa28uQKz$ZmjCllUgFn3;`hVFdk*r6j~(L=zxxvZ z^&78XZOG@Id74i?w1>Yrce&7ZNdSaOa?i(3u;+tU`5*tce*-u|QRBaQ`Y>r{ou9mQ zmFw~WKKgL~dj}po#wV6<@TbrJfbYB@F(&5AKldpPrSqaFd5J&x%3qOI6nm6lHPMKfIezI=ALZ!& zDrC#Nd25p!iRIEuKjBBO_~-h$U-~tE>(@WU6aV6e{Nw-qcM;ApJ9~)#=9iu%)GNd_ zc>BGRd?jdcD80ZbXSn~!UOcysC+4jjf0EyPWR-vYY@BgoNP|*yZ`S??O`l%&q?c4m>51;2dKZ3e8 z)Q|XcQ2WMJe()B z(wF%9H@=ZC^j^ZxB5|1kEJ%flV(++U4SB79SMS^#s_PS%S)VyqfycesE~Al+zJr^r_}VY zg%JR0nvP^ol~N!DMw^~vXS7BI0W&i*IO}LNo1Ppnf63fo_Zj3IrfocITPZ;tMa;w@ z^;mIePn`$v*~j5MbLdW+W}`)BHHkAm6YRVr>YO0eHqUTd$ff5(6=95{(`wUhwa7B< zYfF?upmIG~Uo&3~0~YF4_Ak^pxNn|&?m582kKWJX{zY6IV#5m6xr59t-HQz8kV4RD zuaUIYnWwADC~JMPvYt)&tPj@@&BBZm%PY=#t2sniIoYS7ja$1zc*;_XqWyoA69dxQ)SC>+KI zU8EumA}nBBF~c7r1BJ_NK2V{D`zwVA0#p=HsZ@w7HRcy)sm{+cH$ThagZntVZ=R)@ zfLb7k1BFDQoguN7cH&ss%(!-Ilk?}Ua`x0&u3o-G+FB=VH!)d?Lu0kUX4;qQIIm=p zX-ynNeDax3@X!9&|7DvSiyPs_=mxKhF?oQ_^H4Mz4cbmo-FIaA>v|?ngmAr*h22~8 zU14+Fo$D5**I*Z)xwnHmTz5edyQ4u|JRJ1wT z)ww!BUOLsQDII!VXHt^JIvuU3%+6DZRL@?sPKz|Ngq12`802a&ZQ83H6$+4r3Fv35WwPK`ZlfPTFqLY$OD=8S1rK@B03k^Y$0oU~R(s@(Ni{VQy)GO5yzF z80>$KT+}432F;cxo~cu-ReF8loT1%lVhO3$tNC~H{#J5C=c3O@?w{Z0>PfQuY|hYW zHqj_5)e6d{WKI!dD=lOo= z(73%$Dr1(G=6fW)&gPQ2DkA98Z}rx-ypM&KEl%4FT4_d9pQ924IkeVcZ9-}SDxu1s zJLgGAJ9OF^LA6RHS0=)xblNFahD1^1OIUL~KHKes!q3iMu&-)$M|0diS9ky2tu?#9 zri$Kt-@X0I+f#2p*v<9&ZtUlUjn^;Rj$M1`;=Es^WH-wpfdorl4N06GahG6y8y6y7AsBjot&^>hEg!EPW)?v}8z*D4HXM4_v$XV4bUK-F? z$NI)5&1TCZ6C63@+e5*Nnf+qasjE9b(pGIrbZ0zlO6CNC!uAdX-2rU3+u$Gw0x;SW z{kgnfj7CWh12@_`x}tl)wFc)r*-az`&S*9_n}ou1C}1tIQixFHnO(oxnJmE>gSLh^ zj=d^@)fjECMq~4G287HP4Nn|rj3H2hC=>+JQH?|DwHkZ(?`7YS!=yIDI!Ps-A&ToD z0~`W_Kn4}USd$r;T{^&1pZ+X2Z{Fg{sgpz)blPTfeGTI@pxD%~vbsT%Wxcw05l9jP zT3fUedHIM(dN?c~2$b>?cS>L_#Bq#LiY!fV&QYt?sMTt$Wt*hA)7xXy$0ILvy8}3s z^ce=N4Xsw2g}6ef0@m6Mf;a*J))*85)0KSc+9KW-{l@I)ZjxpGFqKokW8N_n(~levP0U(6g9Z8S-ekfdo3O@alT z>0B|QLsV3qK;o>%WErWpm@M7)oFA4Tal3>K7RAg_cO%%%^}4XxiXnaA-FWWqO?EHa zFNUtUdz~Q$xCC~WXQ51@W;c@@1JXA_?D}&L_s?!#m)vRCwGJ7YC&kN-++s(@F76%* zq8k)ZVx$(a$G1~>4kd=(kE_ha)!yHNN^RuXdlV-^5zWjK_1=@YB(DEiRRb#3$#zzs z-#c-P2Rsc|N2-2M`d~=80>QZLR1W zDpg_W(BUoYvoJOyq*7m`QZM_wq&~ke_=YR=cZm%Z?=$SQN)b?-Eh-TNs4@09YzGKM zT%9AX&W#tpg7UW=d%>VGjqfE#+9w3NyETgO_PeX=^_cavXGhxzm=rVTcSjcI zF67O{UF+|=wU-yK*Sqdr*~oVLj4DR#`)f0kvKo~FI^ zy7E$y>71a>xgPOh7zV!mMw2B8DT<_%(cEZZI|*?>F6rmBYK5`L+_}v%Lnmn?geUxy zLgvn|j~EA`A~XRGFIDLK!na9DsDz4ot-@?Ire3RZ=+FV~IeLtlxjK8I~ZV(bQyFMj)VCi3wxn*?dz? z+vOz=Io!S5FP>%JGwf$shE5ZoRSzSS3eb6-yAYBv3W7}qBw-=Ah84t!?tE(6nS8*7CteadOZap)W4 z*2HNn!VPj@OuHr(xw}SfyFbch*V~RWGT62;<2mj6P96Q&yJAPvF{xQv7Ue+JQtZA1tt@uP+v7K)Pjdw#NY=iwtPr}p{ z=6{#NX{X~fafWPTL+B&8#L%1`V}ny%d+=PayA1l}t=_8rQx;J6>||J0uV~+8&p&N3 z=lJgr)A&t0CkId?1GZYc=T_Gm-BDor^GEsqJMKKlNZ_=59b`v)By3X!pzJ*%Wu7JV zHOt*YhOxTW3jcTS{5$776yJH)TG`8TdndFTN$+OR{dIF`HHW`W?j%_}`alZl;rO{z zU#nDET3GPTw*iF0XpJ^HcbH>T2di~BvdlZQE{FCIBWHKHIurzz_zYedzUP$}QHnU^K(%HH`Pi^91KZ45zF=g}uVj&$(y_rJ;QD;H44 zprn@$+*g~UWgN{cA$AH)K(lRdSd0zOiMJtZy8$1MR!Gv6G)sxpJWd5(0m2xM@(2R7 zHb^W2hY|wkd^w8DgC9sQPpP#bOFid65Ga%}SZlnqF2FfSni{lDh(dByi}s}eF2f24 zqtHWe@xdM;Wna=Imy8rrAe6|#78aXBd=wTH`0T!t4ksL8Tm|W$CkiA=kShz&I~ls3 z%|MzNKS%OFl`#e-B~Geb;Zo9RdoB)~52{%su`=*&DHK?aJs9j}ly+#b8Wv?OBmFNf z)}r*;ic9FYn()z!_YddYEoDM|Tn>}%vjLCN@eed-z>yy#$1@F_J8t;ag$=HBvnqUHU~}9e5JDM?gDBX{ z=%KN=-4`k>3bC9m9FZQXt3P(d!zzVCQ4e`ECRS9Ip&xb*2KAQ9;kknc8`lqD4IP?` zP<~PD@`0xjV-HS)wlQKz<)ockKp5S?m=)%D(e`?u8J#z-KS9gqZvj?1(BEa(cZ@P; z_aM=f9!%ZPy+_x8!pxeONgOni-k2AHIHRgWgJaZP56fiS%Iv1AHspjG8}#hkV1IPR zA8beOJ3RiAoX=s~8aX68F_KYcczr4KMX!3aq<>32t#OmHFoBD6a;yIB2Si-2uZxHF z{@UH2jN?&Lj&W7ny>+G}cs#t;O+saj1`CIJcA)f6^!Ay7{cCuS9gOXbI?LVppCizCSU1e;CP9cjvzo1Mu?UAs?%-UMySaLdlCk_+FVnNhWxxe@fjv;d(YNO3o6l z2Z0`3@J54RlghwcVS5&(Ts!^djzdTeT1&U2qql$O{VRrekA~OEp2I!Xu@*ypGrX>f zlBqj*wkn&>{d*SA0b;qv}_^le`B;yD0Se66Gj84Trn<4vc2>9 zmLz~%X9W8)c2Y{8#kP6+Q+PQv=L^I7eb|$|%PI15C_JK2Gt|3Jo{cw_uH=lvXZyQy zgQi%gFC1YY>2x}5HX1Y=O-$|>7ss%lq4PJ>TKDQA(lo{9>IL1lbvXwHod5j0p84PP z9I=5@W?si-jdu{egAZXCqO~DSJ^a0UADlxW=qX|)c>Cq& zu+0quX%JGexc2~a=dY0Hltw$FqXovKbW%wm9V$>r<2ecZ0XLV-%O&lqwJHcl7{_R1 zNYV_4^K1svmso^>4^U+~!)k}Nob&B9IF0EH2BK2_uZPWLZX~ zUZWDngn=Rsq?cooqNfDl3e@0Uje=Y{&`bXLU|Mdk2$Tu|K__XGB?+NaUM|oWR9>F5 z-PawV0EP~S!)w=Iu8I86mv2mCGUx*fzAL;dhU$0)g%~(nM5;&k=>BnS=>GIXJH|J< z5Pv8;K$b(v#vIxUhoOEgp%`==M4=B0L6KpHue;77#Mr#9n6%>!BOMqn-Rjr(bxRFK zWtBw9_zxZ&i~H^fCr;O47?SLBg~LzLs}#e5kdg!H;C;ow0cu#;VDM~EI7$jJ+Be0q z=sidNeqlcJ?785n4`#v&b}L4+3ZmrDG1}%5`xUH_p5oUo#wQfk}9%MZ;thB7Z@WS_-3IeK;;h6M~Yc-T)Z ze6GKKxI)=ZvHrR5&J1RU+z1`opaV0w<`yTZpumYy9Fqb>p{G$j4&fvwQL}cRr_1>= z%I(p+UTNBLD7RTMhX(^d#kyJs?Ya<5b)rAkVqouKfcUXrUO3uD(bex3B`)SbTlyP~ zqwiSt_6iC?M=^>F5rv3Tf##+-%?J0E0Zx+fbAJ+AVFXp(wU42P6C*lt!+k`##-7*; zDOX%ayBo^jTJI2}HdL~{mZui_wcY(D4kDC`1|i0z)J1s?U|?@8LkSInw#3ldROsZ9 zGQr}4I_OjjF&Z=)nU$g+jA7up#3(XJlpNd~gL}LvA~Fj<53hA4^L{Lnq+sM_S#VJn zV{rZR;D8-F#u5&T!kipED~t~4K$j1p3yOi1fiv7lpN^tohJ&uomCQfNf8XjAjGI`K z{ywt6<_nIsF3*1ESw$s~GVsJ{)?htxe2?_67^?0Xy(=6@$pZjVO0t{)(6gsYR1n~d z&PfA3TfepRvg-n9=dys-^&hFH0w@Z#{tnVk0(q7n(RHrufHkN<^#>!*?0Q)`(_6$m zEZ)P`Jp|nI8}w#H-rgih$TFR)29O6jd=MeC8O|w;a42V~sK7gn#?sb?N-UAmk&$7H zBufqG-R>d)03ZNKL_t(K(>dv!VsatT)y*kuB2r@(xe_2R64qXAH(zgz_j1 z=Ny6ZW_s@G3vF_=Ve-9w-@LtwU>%Ua&cFk^fspmSza$KWi;?($uR@ey~3OpX(Ry-gK zXLd*1UX}sxX7&n)!`{Jo^bpZ?EC*tpV(4I3+Wzt#aad)c`}TkXRB&d+(7B)#7AK~p zwH-S24hQ9n`QyP(rG3`0fT- zipTve%6NtYQX`ER?$3V6Z2$=}5S$YO$OSRZ3mf{=Kzl~Lsv&+8F|u|IkNIfU%ndlI zlh(w6sU(K8$m4=aTg;lFz7Zvess3E-KZqNe2ji*ayU$g|Pa*~m?nT=iUYm#4=)t{6 zj4YP@y{+%y6dg&1vfF;Fi-9mVb{8A4zoKc1(ZJTA>54JsKci364>At^JYo}KY?5?z z%_%xFVl+rGvOW#BScoy_5z(99y>Iuj_G0XMJr0v1N&=bvAhQ^=e2hsdOepmbLu>j- zS%4@zKaGZ*2C~@`Y+!hPjX0Yn?H+yxG3kK7P>^h7trFwcy0IwK!tO6hkZNMgzlHuU zckm}{JCp2V%vqwJ@L&v4q9|EY%FtqGuU zUbo+^v9~sd`77zOm3a%Lkoi;F9xO;oi8U^-?+-lmxsPwn8C-2I(j)~`D-~ucRdnWS z;XTa5!|R)zDhfNs^qwKA>8gA+E$EX-1>bBnkr$B}dS?xkkLc!P4dofr>C4jS4qNQjG{B zqFNn-S-)-NHa7`RVkq!XdTT9O8!B-`k~7>_YgM8+!dUHV`i=2HmVDr?_5Eaw0ik_) zh_!@DQHkTc%*0!aQVNr4l8z-%UR@vz1B8=kZK=c(r9vE_GmEhq4h1qmb(uV^Mg@*Y zNQ`kgLM10Qw0XHlUiTkMMHs{cfp`3?QG}ARC)L=qMdz8FZO*E!wI)rqmpx21);Q86 zrQPX}B^haw`1u$3XGl8ve8*(L%xEly2h$+r8 zV^xy2sNWtJOB#StmyK^pwq0yt8-oYu!PL_LlBn=`G0u{wDd-<#Pa}bbp?O%=Ua`eJ z-9S2NFru*&YZP0}&tfKVi}jlc<|3xyg_t;JCUBZSfu-K{0xNg=8c&ES7{`xV4&^Q} zOhz5Su}e{@sfjJeU?>K=bsM)~_GLD_Rex;RUn8776iRJIgA-H4$VS%xsSS6?z9_M| zfsjcdo?I3fnsnPiUXQ^*K{r_8#9*dfOg(;XYzbq3{7M22*@4$`S6!umZZN?0K~b{rNcRpe-AIY^%=BFuwcN|}P7FDly7b?wgaLCi zb-=N{u|blgK4{S0K!Xn_1}rBsj8z_Y-*-m}}>VRFuAZ-+;rhZ@NHM{Dhs z4ss7%NrlDsgIQ8|ZTTTwhs+m5mn$G-){+|Iqr*DqMR4GhB@81fm6*6vA&z68fwws) zLmo(xf$#sgQo%UE`euT*2J0N53<$%BEORuHgfvM!37v3kc2a6lNT3|8RAZf@vDsp_ z9+PTA5LXDJ3Nw3-AfpN>OArV$o#IRe%3u&=LNT}Z5PJ_Fr`=q~C7UFjHtVams8;9M zzqG(iHHMWAJ(heaePD;YpHK*4aaht!lVuhuGIXZFXdm>*i6dR$N${-o5`98SOs0W8 zgMXkT!bw6Ect&Vpy-I@hM1caY0HB?ha1t_i<}*Vkb7I0EKuC}B$TAB;69zs=VRGV2 zV*zcE%JoW7eDKQKyC-RsIU%7!N>2hANdK&2C?afg2&=Z1EYo@R-=hFBZF9uSt&e^#1k^sN4qD*TI@ER|1LLPLqe-`;m!OnhF! zHVL3gvNB~^p>ZbSrp!bScfus6Z}=Kpk{1>La^-!t)h!C%*1$k*ZEMqwtC)UW8@8de z$(36h5Y2LAPkk!jix{d~?wvujCQDLerADZBK2t}aw$8BGSmWC5l>G=Rq9wL2m`Ea{yAc}+?o-@8G8H|=^o($}thO&y#wchbLuV_p1ZCtLYs8*p1b|4#dQ zFiA7MoNQcsCi(eyJpS95zjw0!4+h!`ycpZO*>>jeL>{4S8jmcK@S65-<((uU&m3d% z(lEKioe;7otJ1AwE7mo5r^J)=35R!zy2t^XCwc3Z2INai5O@Z6;UEe_s?{pmSdug) zGX~Ss=XIqM2jP_pL>^#py}Io@P~m(VoO9?b8|Vj_*SvRY8HF2)9Xi0e9DU%gr<5WH zRL}9Z+V#pPTvs7LdW3|O5}`b=f)4;VtPr3Av;%GPdUWCS=C$^ca5_uTnddQ3(lgpi z1Yxc>+ibT<(v&1iJ)vHzX|z%{nkk#jjLo*;_C|-5jSe^0TC6k^R$Cd%YfV15aFusH zILE~+%iLPN&FYP1Hf~-eZQR7A8(`X0DOU%&CR^DA|nU_DwUWh zj=a1e5QG6?6!wBs&UKXx1Zkp46JHYHtRt?(#8K#jP0srA5GgUn%S)zd=A{Z#o!c#* znLoD`XUX9k!V^3?hcOmw{Cn0|@MZf*6@pNheC&N2QvxM=frvgl(_6BqN)%+;(&;4m z^Z0TCr4*qGbG}PIr?SKcg^aO2h9(up3AC{zbG&HdJ6{XRPXa=eoDS}2>lwOEx3b7h zvuSppsZgss($?~yC$6_6wd|wiQ>E8(<&QmpTo@+35o505CU>)&*faeHaXT2QNuL!{ z$`rXNKO@T4bS9d|w(c{@A;FdOvl|^-H}Vy?y~ew8dnx@}A+SCGK^}LHVNypo>DmmE z6}eqW!1faX-4ck>HD?>+HUuRew_drDi@9yBP2IiQO+0kj)-o@?@)|Fmyp9!7>s$I5qq4_7BSGzV!(7pKJF%wM2^3Q8<_vo zb&4CmB$UpX;mY5!?Ph>YqGW$8@_KAlGB+kUCN7}1 zP*>)x!wH*T-+AWtT#61m=rpJxz~N!oo^gF}b_tc26IkovJz?J;aT;a zU}k2PYPC(XV=%eYpD`Bg4BhJfNC@vp=VdKjXIoh3RRxsK>I>ne_-uEB>XKhdfwex9 zA4}OI%?v`XLgDNGZI4{BYcT%*GKV-xoD~?Iv;0dzW~~n(35gVn)M%2_^yZqg7K0B$ z7;Q)9_*Sg{;!eZGY;)(?VpViQFhw!N{Y$GL#pHv?j?n9Fh|F!$wZtGCyfkwxw!Zn6 zkZ~pvK8aGerzq+3X%HJd2&F4wuNvOnrtItCjEx&YcewFr?eWA{+srtW?UUo|Z|I>q!2>g#diNyX zdgD4rg9YY4d=Cq`$b7nXi|ZR1vrBtetVeWiUgdH-Gql#0IeG3j>u8#5t26;?HSP5VXD=;twPUD6RUSBcfIXtc>+gKPUtCdiWXu;H zI|!RMc=ysetH!c_eu>8(JWPNk*|^1pn;FOMKSH$&6mS`9w^z7%tATcw|?PW(^*^Q)a4bHJDP>rc^3rDZic@Ak!T; zl*1J^qr662TSgh_uGnIbM%4+n-lry^fp&^o?Y_1p12}f1g+wU75ecdC41GVcV{?+e z0sWzF({hdTZV8TzmoAWg1zLH-Xqzs8`kGUSd(;OBxV@B-Jz;Z91KlB-Nza zpq)n|r0oRbEEa**8g0ESpcN8}B@`BC6-MSI8L~qZtx>5&EG{mvxU_&-U&RW+{zFFz zDm9YL7Eu@xg;fv%#z~BdsqZcuH5r@94YDLb3Plh_NZCe6+f!h$!gZM=3rGMk z)}f6h2qUDEIOS0$&RD{rinW#?hyag*sMcz%tv7wJ#*vqeklUEVd9ehtROf+&DpD%I zXYh^AJQ^VnWI;_gps)I$souCw^Tgp^0HAg40zW*p$-_@P$;avuo9Eu+o7ZRgJD+`+<(FRL*|miI^#zjj z7C$go_|0GbG>_Cbc=oy1c;!Nay$c~5H&@wQJc4bma`N=MeE;+svQ|YmQ_kNy!Do)Z z)r~gIjf@+&H)!1G@ZuY9bLy6$Qb~AeJ>shQ48Q!)JnL8AZ3;=YveCagb zeC{0aLJgZHY!K7_%rkuKpyH+1e!`oV+Q>-LYzCZbe3UQFp5qUny~f`^e3&Qp1T>f5 z=g+@?hA)13iS_Gm^6Wd;XvbB^GS1w3lwWx2AeYX(&kJu|K?ecHPdvf?y^GW%Ie}H& zjU{Q@{er07v2Rg$_KAdzJD7`oXJ!l*!Hs`!`ng%|6pQU_E>m7}^6D_=O zXBt%YxN}JUG%ek3DdOPxZ&lVaj=XY;b`)xI#;>t%%$hoW59<>hmZ(DP(wucu)ZgFn zsdDnK+j_}i*zb1Wy{^Du;R;eE*7!PV*R3Cahp}5nY7D8dWX6$X25lXQHZ}g4 zz?ViS_n=&&$Aay05=4_}Uz%clnS#kt2u7P8 z9|B0C(3i?cp|Fm;9Kn_x-Y2gEJ-giQ66VJLeH_fZC|T!87715VKU41Scs)7+{umBPH%a=Ej~Bt@KHKeZo2!9G8T)e$7&MXR16kK zY-w+0<PXT)4@K+QY{W&vRt|As)Z)|7Y*rdL&7*JHOvCGk1@Oyw$y`?>)C3 z&P=m+hO`tp6TiC>guY>s?3awyPKIF%-qA>!#%YE%$do)+B;HgZw|HZHHpZw0- zymC?6KYVx2YhU>q|KxXmop0T@{NMljdtBUnz^h#FFTVQ_Zyg{1^}D>U z4mmcD`B#7bKJx09`7eL>Tl|C1-{PZp-{sGK_LxPv;*p#3+FM`cTW`I@Nr%tCk0@^n zrF;!L8DYbI(ATdEf5yyWFJ-*SU2~mN5peLjCk=xvHZq)dBoqHlrvC&d<-u zixSs>vxY8mt=)z+?jP#?*QA3LOSsl5mITBFp#$;v?SHHXOPYhZ{#KoBZR%=t9Y}-p zrwWcJfy9`)Zrz~}A2i^tfF+Q@xlGp+Qb!H}r8OwUYMFB}U$R&fl-8lOAxVWr5zrD| zs{nHFE@Y`iP&x!h%F?nTNb;eB{Nc*NMecZfzT~~1eaxfBr<^@|N@f&(UNC>~g!6oX zc;V*lyBL!pl3*QprA zAJqZe`8A=YQVQoRdA_13%cy=(P?kk~|MQDE&X%~+;%tc$h4(==aC1)YrwB66SqwYO z!P+KILsPvSTCES1eTn2DKCr%x$cUuSh6I$~&ZO)IAdD4?W2eN{#=_O^|E5-TpG42L zuHPpz-G%w}L8Td43b2tW?&y$@$^LF<&y@{1rJ+lQV0)X=P3?^D&PcoLKLz|22>H%{ zjO-#3>n}UGY&FiHPw4Ao8M3M2xw9cXn%v`e?)^*tyPrJd`P~bc-QoAX{sj)*1sBVQ{OC`fBiWRb zgG1i`_!0l?`6C{Ga>j+9qRfnwX~x090VhW(PaiEQbKwW?|CFD7sF@dz<h#(e#r7Why2x#=6vC;Z!nYRy#L&zpFQJW{MC}h>4GQEFZkrsQ>Fs}L%!vV*ll#UwqK1v39oU2^rL;EI|F3xkLfv!olwP3~Vm7l^_NgLsb1_;tl7%Ubkc(1*&Gsua0^T;XF?y&q z;-OSQ%-k9hqj4ylk7$aBDDaA)L$B+kdCYW2P6Z__7E8|OOO~sg(uUgpB%7gSc+jw3yCJ3q$FujCivvZb55T>!{9K^ar^jysZM$J_z@~m zm?Y!)&V6pAN01x?8jIjic#|Ty50GF5m5pPZyUs$*TLd-X-7ZeZ#}E#HVK=tZLg!) z15h#<^Gtj8fn2Shh8BK*g=gCSymIAd9a@;KLs_D4OLL_IdY?31r5k^F(TUz=Lq@RF zU#^O_`FGj>;jTEFWzRnD{;d^sx-Od@m>~5ApQ~*G2l*g&HRR6ti}ya}uRn5p?(;8k z@0RAl_a7oC%)uT0;oto_@8dcB=wsgh@ELP|gWvmn5<=oVdym3-%J}PY6^Uts2{WB# z^)na~_C$-bCBiL|YCdX>!g2Qal%M?ILw=f`@a50nWqN+j`3023aC~4q##+cGGw$A) zF)^AO`VIc!%?U@cCJB+wpnHT_ra7LPC=pHMM)D--gxe+rwvwSE1GY}fUXEluyckJy*!ZqP4X zvW5LPW_-&Euh(kYR&FG2FXO)leE;Q3*!mS0cFm9RHtK5x zaBraL68*2LhrRrWHD3YhOnc1UD?HAY*s{RcGRo~$2X9voLd86~KG0YY9|-e2lzEP~ z9$VyiXG8rm3KKQlJ)XsC8EWL~-gI@~K`FD&z&CIfDoVt)Qall-Q)S$%EcDp!sG$4K z+NeMfW>;Mr(deJ8KC-dH_aSwTI1drJ?Y+k+6|%+R(Xlo?Nlk!}CkE#|%RG+<-q7!9 zmXKuzlW5Y^ASwhC#CwbuQmsi8q#BHPjP|67Aj%N{1s+?j$X5#%%LUKQ&Y3R@vV$WI zPHyw$**QOZ{{!aF&zPS+=E=uDBcDG*`4Wlh3QB97D9mKW;mw;Q*(7GQT|*6ajiG32 zx4Uq<##KBFq7jpTm2!iIfn+e0 zf`q_|(yDfNS_hs0i6{aQji72fu1gu>&)x@Xaur#L2*&6jX$dF+qje-QtO7dgG^vl@ zbrMWywJKN@c|yeSZuC^ls>}Z$%Jx zu{!U=>MJk0O9yb#V@d&rpTAvZah;zgxDB2s+x#z=AHU`}UZw_k+p{(8V;vjz zqe>RWKKo86=N0VpMa2u7TsU&g_w|_Lyg9&pH3}eg5d1wVgUa_h~{@jG9>$I%4lr9tEzoZW|U$hc(%yS*DZX0B=TgG*}Z}K}!sK)i@uzmEET=+eowckgz%|*D{ z{-$qWMx!+L?594}q@h09x&P^uboqhZ@8vjz)|^bO=kD}XpAC&U_^*pO*a*DzwJ~-K z%%%};p9s=}$rGi+!6}|Rd_25E%$_@kugS(NU8Y~vU{J4m$i)MelR(sl^JwLxwtHad z*9giOPL7YzMsxc7jC@sejKS6NgU+q3zp9-GOzUxJs}G>p<(%XH#ePvyHDH&eR^V@? zJlGvIXO58_tcsWp0;P#kVO13f-SBAQSmuj0X4MWo4mK1Y;hGMO;R zGV&sieXCK%H25GDqI4kNQ#ueC8iUfRMti6z{iuw=m;`N1J&}V-0Fn4ITw5VNw5&-S ztGVYJyb+=lUR;z84CM}itgx*4Cu|uc6`gefh2!(6c;EsW!2j}+99{MM`({UXu{z71 z?R&okp>Tx^Y+rO*1~lxq^+_*%&JIlBRT9USCZgJNe221L`;K4prTd`v{<6>37{qm^ zP4*(d8_#ZkbY z|K@u?&0T)`um6z$<^TF4{_s$7`pHwKCogew^ME@y9e?_lf5D@71$%bNa;5q1 z2amX!8r;PP{K3EdfdA@iU*MgGf5rd$&;E!>R`T%OQ-16Bzm0gyvxk4f|M~Bhyz=&2 z9HhfNs0cFAFTeA7es%sA{L#Pq6aM7S6;FQloOizSn`DWB6besb zG}BC@bd)Dd4B2Fg2j+_l&My`$S2+$yO+*E(mK1q`00)yPg|QT6IP80C(W$|^0*_-h z%`nO_%?z{5aO>ubx4-s9-gxZ+7w2b~Y{u8V`5S!cSHFo-2}zo=I6uYu1-2+~s|Cwv zpK<`qKr_E^atCufLl8=*KnyyakWOZtoSblSd_-mpMhdhDMr#UdQIT4+tO*%aw75{u zk3f; zOqv9?{iqO-rU@bnZGsX&C{qXr|H?kJ4u|v#g%Z#Lp`1a9kS2yK%gCmaz)?^UK48gD}Fkk`K)_Juya6=H065jh5Ac#bUW!Wx``CIU*HuQt_&m(tIWANG4)46Hsa>1^`!OGL$rrw!ukGSpxHkI`;o6SAay<~ijdg<;SGsX6Ha`5= zFYfcg%UHS^8rL=j;^X(L4XA_r{0HCu`+V_hMeF)oH*a$E`aRxwe9DCt(t`tTs1;8Z zaQn_n{FDFm2JfFfBln8Ko40xW{wl9eV-3g=-}>gaSow@QH!^M?+~A9!K4wu0**6Y(^R<_l zCK>@A{MtX@zkNOD)t7DpigbFDU;ECtx%K7~o-YdY^oaX+Z}I9$#^KxFTwHZt zk!w7b%64?fRha6pwziDkG3=Dg-N(c$`*?Bdn2hR=ODWpa`x@V1bh!G*(3v><*DU#% z@ptRjY%!M+2GQC2cV4Y!^L*19)!ISUB?JvAzgizMYO7~y!pX@oN`$AU&&bO%G^G^A z7@T*wsB`XPDS&5P;1p`@J=QxEZJvT!&!KTXst#`f+C7fuxcMDxZU5y0S{oo7TB{&Q z66?^#mT2cfZ8$+DP%DMjfOnz1K?lwRt-}Fynddm?Sw(dKV@xs9h(!`)F6iz55 z97Gl16#)?-C9`S9(JW;)F&xe^ZX8W{`>UVlJKy;R$Hy~HpFQL7Y9}l)>(v<(mLkz1-2~7vJ5Rcs5%e=N=kw6Vv zG)C(NCFYumcwHg`rL`1!LB7l>ixRCAS(1{+Z)v3hx<-UVCs%VW8INK}0AbtJblYMBo#=RCa zxt@*1_HpfpQH~XE8q<#>OZ&FB7hm*xbM(!n%OfLT3zt54yny-Nor^ndckH9o_9~+@ zX`{w=V6U`sxJ#xyxIg8=y}m||IJt8h??Y)B;&~$`Mh-srI`_%~hoDSSBf?&K{dHc# zhd^*;+bZMM{RiB*Q|)b3wD~1-3$q({dHYLuNR*0XxZt(sN`lsyv zeQw;j9qFWWt8dNGUEVov_&ueW9pC0Fhc^Sltr1+mb?Xkd_A=@A=K8wlqI8HKWe*$M z;^-KbLL2tyV}6|vc5JY2y|1~t4K_a;B>?*q3Dit3 z?T+q-4<#PlstkOSjly@b_BCEx$n!k>%Y%rn>#76$d4OC$znJsv`587A{|BgaWOR2v zHa9@x=RK~piBcKshMM0ihln%TB z))h=LgJ3y4m~#8(F(-!yynOFAu3U03)x7b_T}}>DOzJs0nUG90A{M-*v?WJ(?(yZn z^J_f)_@|toKIHK1jC_8^;_NB2#TjO5A}rHjvI!=eGCMrr)z@F<#*cr-(~A|V@Q_ET zMx{cK$*&{5&X(j}xVV^e`^E{=bb|L`+?>xT%aYl25;ir?A?2yT9N_v*#Fc@u6Nk-vHM1|4>ZIXc4&{5*A%23BSp>-P20u>TKX>`3& z@@uXK9grKMLb-)eRX}Df9q0gyr}PdRg9#!+S(dC;IW}@klx2x61H?ZdN`f;rTH~F< z+khVM71zcu@H3Vz`1&_yzE*;`o&|Q(wQOS{zWl-~y*kX-MI^UgNVhC5a=CXI$27m+ zBD}GX_IzU>)#iQr@k;I0h9zLj_>{@#-mnpqIvfUT){cQpLZT{&p{Cr)q+3WmNiL9#-^!0yF z>fGx-<2uIvx3>l_3~X$65cKYw}OmpaMWwFQf7FCKRDri%t`& z!+BK-&^ka@jJ2Tv*=!3 zqcownK}S7F5|%{~>bD~sKAxaNP_1xn-M`)X&tn*{d}BcdQmrte0&+oz_bAE&oFmbK zXoV6_k|nzp=oq83J^WYt6YB)SdIX;+h z_tp(=p3FFyB)oe6F7u1$oIQKQ^CzG1=wZssZ@$XW@d4+nocZDm$&PSZq0$+5Uwwny z4_@Vir=PN#=d8}pDCf^{t25N}2(1#FO7PZ@W;2eCPq=mK28Ra|QmxTg6dpy0_6Nq> zPy*obpah2_FH7>G;N)P6_lm;if#qJ-u=ylQ5G|BN$s|oEbBlMD(t41C~c1DD3NGFnShVwD%O@5rE50pfG}}u5=if{E|d)DD1E6D6*B%N zpg4qp01yG?J>o(;wPJ=79HA`1T8DG7kHk^hoT6Caoy90kDIq8ju5;KR8xVJDAz0)0 zAh^8xqOot(y|2dhdR(9ExjEgt{jt0%m$-MI4zqBzAVyo`{j=kS7~3Da5FahE5I<7p zZOp^G2;=BH`*qt#)4qoTB%i?qzQ(@jW@`5GBi$j5(SvL0k3DSlvz{~IV|eq|zJb>X zM)f~s#XUYGU%F2}d--g7;VOsSUH+xwhw|3|`F>F<06SGDu3(dW>q`a4zVfU1P33}X ztv`Q(KDF7xb@|nGw!7OCa)ma>_r+!VWK-RvUj}pk`O=Rrkk8nuUVUv?%Q#-DZ(Be6 z9`xGvbjbAt04hQ5N^V!Fb$!2pR|;!=d=Ve7X&%x9RLq*%Hncu4#;aI6?`vqI(VEG0 zf;I_@Ro)0F#4oxvOK+12(?_lQst*H8e8`g8!ZLRkIO}UEzUDgyjd;6v-Sn6MK*cxU ze088xI9x212n31ZL1`gP6QsF68Yt1qV-d1xR@=N% z3Kij#B7!ysQ5w9%Ig3e?SOTD`ApS~*JUn~Y=TQ1 zi{%1sf+|7o@)$&u$deIDY5sP7uG96sz|+hNUub+UocU^H={t}XTe|DopxRthW@Z;c zVJuGs`y&#@tp}fBf5`Q;bBz=4N`10#nagI$%r(A;{Ng;wRu<__U608oBl`4uYGZ%# z9`&+iEsdU#>x4@G5_HJ5^r!4B5gTi_SA|+%dcs_rFO=)^tCv)oxt<>1J!kes&h0Ge z7&TvBOljP%MW$)b*Qu0y^_bacR>P&f#)&l<&FkW} zDl)Gm=%*`PAL5lZLFz0C2PSPGo1|PUE+`}OdH=htg97V6H#9L_$f8z%a@K*UsF7~h zhpw0r_PeaS)g1#&w9OQTgnBoVB(;$SUV=4WfQmtoBumJ$6k`-x2~c88wRX99=!E%v z&T_RPolKY=9+FKbq|*u6bc%_L`ObU1c$9|OH09_h5<)KdGN0MJ`eih} zkrBbY$MMB=%8RqTaSdOF(Co@35&n{WvahcDCHv$>jHAC&yDx~e&|hO)J?*}bSu;Wv zW`tmdK(NIcrr=ks+)%}1VqiXq)O zhjS&$7_?3hJU4HgaC~^kaP;b#DliQTu>~I)V&)S43DHY}998FTX?Gw=N zbR0@4L|0JpaIF&1N@`>R5t1e$DnVHm2!TO997a8pGyxmx*o&gXI!|7DmPLt95)O`z zZ~|xZ3(n_r^0FjNGY*apn9dAo0*8kw2L~CcF?{mLN1UBM=i^Tv^7Pp$7t0m%<%+}O zW3t(lSKoYtmtTDiog@@_iMJ)`&UwDhcMFKxtV)F&1TjIS# z8-sO@E|>QD~)NpvF-amV8yz$`4_9 zg*44DNs4G4#?u2@g>1aiXi-cjQw|OeNKJxuF7N_G27P71{hf0Zd9kh|*BWhfWaVAM z^#j>n#JmO3!j63iS|?~_P|A>{DT&dfNfHk0wVYruR9_)rV!*5@OIG;`C!kYPOCOfj zlCN^K4pN3`mT+)51su*=jD&InpiTVrOZeFvJ}K9H-M{}_+amV2@0sNVwfotX{=i0Gq3jzl*$f3nTUE&yQpps?zeb6-OCO#ZkE0|& z#f!3B6DO)56K9md=)fqSuU0JQi*SHbD#E@4ai7r|jmEnYZ!JlhqIE)1IIIm&_ot`N zcy@L{Sz4^~D5Xg!DcT6xBx72e|305SJ>~HD1{aGZ7ENAyzW1YddH1Iu z^62Sv%F;8P&M;at%~EhB`SJo+E+|(E%A%lfp4+dy&Ub$IKjQT-e~r_N1<%gTz?WoN zz?T$7C{<8K;jtVXOnK@49a8N{6eN)u*SJ$%Ok4?sIbE80#&|Jg3MD z7K;TJ=X2)s1^KD~0^&hpsfqP2!tfQ^C`_tJvouKYr76>C=nqkfRgshDt024Q9HJDH z>6B~|pp~Knd8A5AP`FURzC!@W)uF1ebs3`KkKnBj zWhgPYRFXKBM3N681Od`lsbO{U&=i7Rluffz|ev&H`WP-k4(&OaOb+kgBSF;52Vab`ZLC6uWEn83)>d|GvISZ53Aq*{+H?H_!D zY<{TivHrX7v!Md8?Nc+&5cE)=4uR}V zRZ@VW@Jb=dV!0;rz?hlAnC=J}=+B$>HH4 z7t3?6Y-G-dG)u9*ps)%$7kf^&iAKx-j2rVj8_T5A;vkBvy1pQYOpqZNCg1uuzl5p ziXAo;@$IsqwT~L+gKyn)K+b3*^548?=eqTCb?YOWdgH$HteuDQ-RN%nq9L-RnuN%= z5l$jK5;v7(bgQ4(=zvN-uKBPsKu0SB9oUr$>?|OggVKC{zxl=WI}Q^^`AF#Io8KQO z;_J1Ao(p?rw)=kYn_BZ51Z%Y|%LaLrZz9ba7dP+UEM2TEYxu!BPqDT|8KJAZri5Dq z>gs3l&BE6Pc~y^u@J{>ddDacK;|*fUre7GCz`bv@*=J3uDQPPHcKwI6@42?0b-T^^ zEsgQ(N`XqFGulM?eGbTPC?m98$bfQF^Z7f*CbU%xHk43Wa?s7|*5J0aUyxpcJ89~O zG)Uv>y;$t4mMz6Ky4j|WH#P`^`i&1j5ezq?wu)g#G8b1Zx2U#qRA0rd6%fcsgm z6`K_MvPEmJZRXPN3%%6+x0C#^vcFEd&=lp`WTtP9OP2sn8e`F7_a7iY+)9ktbN}9Z z(m&>F=C4f;v+*w7zVt1(z5yr}I=0lem*{DK*G8i|f16LclHv#0001BWNklZ;VOroZDhc^>-S3;od1T@cv`Yr>5zg2OnzaX4UVM;G#ae5G2*Y z1aP?0LS)oeN~4sR~M(u{-25ne4>tqO|5Go4Ji`^J~}+SgC{ z*?Zq(IltiI;yEXiW9sq?QJ^&@OSyOVE_d(VYZD>x1>Olyo<3ui z8t&e{fzb)2Sj0QL4=N5?Yl@;EP17icXP8Vf%F;?lBf^Ot3MemZ{WQ)yonD&W9vP!okI8z@rqTiD44U5fniI zAShP&SU})#D$GG^L#czeA*g1{GUy=_P$i`cD3UClFh5_A7kR8)aU_W*cSW3!pAiwD zr}uEs?{wSelzQXQqrbj+p4q%d?=)?FQTCSZYWYIh{E{^PC5_Eh?aliRa%^rndNg5t za|0&>hk_mbJG?**_gddVHKyM-57WNC?*<5wb`cA;Hno1Y^iJQS`pz}GBpkc_U;Vw8 zox6G9>Kww>bE1718$RFmZ7etUE4{~y5rMw0dP4VIyJOW17a{xGU)$n3O!R$>@;!Ff z*A>1ez$9&FwC6WWJU?qSp1#hgMtw*k&Tksbrq3LqaNq~uS+a68(lr5$hx7H&TeP95o8}+vip^S5ZO=;>iQ4Q4g%R` z(qJRd+2^mT0Ne1KsY=0RA29^k^gn&;mml))I|Aa;*>v{y$rfhWooioXPdpfKkzJdu zrYXo?N;ziC1l&0QQk4Ku%kGH?DltLQFP`z7_ee#~=4?M;Mc^TCUKNAQEKJHV4G_%Jhj=_;^@q0|54u_q+CwZ{FHdT8EG9?#?=}7N>&l zt|nxYbz<;XO6Tx-!O~jJ&zGzUhtdXRk^mDg3XIkq9!x1p%lXBE#cG8Ek|e>Fo}#oo zEze`Xz;Spq3sQqm6H4pxD2l?eDm;sYo*$q7e!tW}1{zs46%T zvk^hwPBCBP6lFjMXtkc~N(t6l^3@7kS|kcz1RJ!7Qh{vJJB&7wWHCrqmSq8iY`Rwl z>m5=QC=)f3U98y9y6w^9{gqk=)U-(g3L%!icmmSH`EbY&3Jrnt!stlYN6097FJWFp z6$B?xS{G#;J+>$*ivaz%&SFc8bDq3dvY0P}44{R@VooC9oyGa0SL^qMeTIUZ15Rz@ z7~jf1Hy5m(x7)Z)y=ZNbBHC96dYcY?YXKR#viYHPrIE3$`(js!e%pc}J@4E9=%f01 z_aZn}wD7W2{q2#vEW3PnV^sgX&fpGiDFz?Ek6nCY zuKm8u^-h01Ft21+`#XBHCq&cAxUK^>)r{FP{#y=Q44KqM_O~Y;Jo3|Rzmrs5KhHkQ z^n25ij}Su~8ve$^ZTQa-vWBwh^jnCeR$8+PXm4D&{rLy|wciZhH02BBGJ{D+ig?t# zYY(m;@cWgI+I)5&2_(0y2eQio+B2oEZ-fE$pAp@(Mj`IjW|8f?qYWkb-Un!ug%2SG zwyvA4dDsa^Y#RD*C)j(nZ1nADGu!41YGjdbpv_ufcjpi#DA92*;L%xRUw46d-Fwe$G9}AWo}ZoLe8`|G-v}H;6@dyuS6P(v z5k{^WJOwuDqW4+Sn8W`I3J^H&DXpbM$VG64BUQq5k}#X5q=`bCwUnZu@#0uH$11nv zrDK_wSX&^n!dXv}B&5dRY-oSEDkw`wk|qd3ViHz`C0|*LcFZsGINuxxlL;m@q$U9+ z%rBOF`sp)PbHn3Dj?ARI`uYQODm?r26TI`JhsPw-V^T9iQ)0^%Ce65c_hp`(KEygl zUd%DsB#fg1YaK;dfOsaUVVWcuRYGm_u0HIzhz`+8lb0pu=NHW92TUdb2_X_{@UtwV zbhakFbIwJ!`~>fX<;9%Rg#d#yE(98MIN&=UiTFh!iNO~(Wc3q+a}J|S4eL`{*F=O$ z1Y=ZGDhTKTT?N4$*fJmm(ljMaQqnXF>Htb(RMQKtv&7PH<+gMbMH$=kIPU^sri%Bp zHvG2;B@Q4YNs4opVmYVGS23`#sRFPsZ0{=k0d0sTJz3)cm|F8I+oGZahnn`H)rQ=) zvKxEs6K|FW)S+*|Pblp`Fss6AsJK$yVEF+2z1#Y`sP33$L}|+`EDn?X1`OP%soA z+RV)L%=eAG6ZKBBZBwyko1=8()Qg%O}mhW-hIQOHnZQuYtCR0O}5+Pn6<3C9Bs|W_gHM#o;Up6 zM$or`WNAU#WrS_9#p`dtPTGfZ+3d72a;!~c%*MgC7r`>HKJ467L@DYze&JilpVssD zy;f&|s2ScH{ZM&7*$QXh{yWwy$%f2lA6lsEr?>g0O%v~cI@H)u ztY9F@)-BQK26dWtKIo@6`no^h(N_w$kDuL~|8d{Yv#!AY#E)j(fZvd<8x;&tYR!D^ ztJ-G?(t7dxN-4B9cpnZU&iUGDSGC;UhG`s#$y7YhNA`OO2VPf{9335Ue0;1 z6lJJ|ci})RQ4Y|0OO|FBt+AF!1Q=@Qs{?tO8qy>M1=ib;jn{@G%_y9vid}iuT~CN&`tkR)-A1k%Tf`cEOP`eEk?@_*jf zB>=9pc<1ZytH`xkI2TF{OiGcjLg|Duc%7g!07sq|48hkneedw^_YDH{lu`EAJ`H@& zH|O$J_}1aHvCp`6R{zQ-#=di3a~pEB(5V^idG?Xdya8Fq-$BGwgl?7~DL;Z)#2=*v- z=_}0`;XL|cWxFzsy=!f=%@)}Q8$s6=C{}jeWvpLl2b}wBv)6x;t#gpUdD(r!j>qk{ z-NAu~Pq3wI#_y(PS+5@*KijMV-Wqz}qqME_b9eeMgEG&X!X>*jo)TSKFGO{FLaxg_X zM^WaKcrNBSPoA8!TC8~V=qcytD~^wDp%(>b7Z*$q4q0V0rbjoJ9UfznlyrK4aX=hT zt-@hlR3J8-q$$%h4W$lBP#&yb^FU}7YUf=~*O5@95%So)67X?P?I>4Z+1Aar2Fq8!-9AP6HlmWuV zGr;{-97_TxhA0xP0!zOFg{Ptdbl&5n;&gC$ANU0%&Zk;&08f$_WIDlG%WApAIZKil ztS!k`1zKyS)09=dB+rXqi0aC2xUKKaV9Utw@3jeO%{@O_Ze=(UJnlM1zsvTtdR=qL z?oGhf{us!}HOuO+JnnLpexN5xzwVIhv5A3Ab`Oc&)%rmiYuEbiucP@slA;bIQKg#HP$fz;AR$ml9rah+Pnrc2!kn_`&k?c=I@Xn!C zI7lfKWbTv_l!V%UC%(}^0?vhOs**tXhDUtJY6?(Vixx$aX-bSG)1{$v9c^yc?hg%6NKfQ!5y z&6LB*goDYHvx_s%&YzL5EF5T*ny{L$_{raVz+zEy``&GIqPchf9@!m@_65tub5uD& zsWcGiNfO}f%7;Vzbi&cm5%=%i;pFImOg|w}Lhf9HGeU4p=(Z@l7qro6F(gGA4m8SO zEhI^bXbmw~qO}Rg09%shD?|xerIGDlg9K8)#bQZmLy$lulo0479NueIehDZIX9K@L zVnQ%Llmz?NAy5Dw>s%#nv?!JY#ds*eW&YVNP0*6k7g zD|BtEKiBxv^(L@Vb?Ell21)tOCzD11W4JH(eutrq>^1aHU%6mCTZfj-4p)WrlpFNI zHGA(rR5GyLmozhu*Y4hWh)rANG`>r6MI)=ZWnOg9I9(X-hMn!`6B!KBT&_d9`{;K5 zssUw=kZGDIhGzan`s#BxYnGd(1ViNqgXI;w=Hw;(&tCI}@xhj64Yc$Gm1;ARcA3c_ zGN5ZOT@@0xqp52@DD3j$d-jR%B|P2BQExOF5@SRD#M7B{wLSVe>)h8jJIiZi|6rwT znSb72S1`B{L~I0I>LG2+#d`lFo8^ofgn_K7C9pzUWb8zHdVFU-@r9Wn$O@CjRfL4MMg_clTt+hs!jhYa(5g8COyb_4iTqJf2(r@9=E`S!#G)p;{WX$LD`j8U>0L_}frsof}+`c-X zS2)oPN9G&>?7p4mQNE(6Z@vF;q(E~P(eCHBoZ76Md`?M%d#j~6^^|0SSK~Y zB51{1in0u_av~ukK4h(9z$LKYmng3guL7JNhc7K&X_oT>LxFLYRd#`Ofv9km=RCid zQ(8xwCLr+r@4v^v&p+b!?HlBaB{+*oG|Ay1%4pJL5)bJi<856TB^(8vB;34pi<>u& zNE3xwSyZJKP%Wk2hgyGCGfz_560a2|Nf0lA-XTCJC<{wr%1Em3LLkTmTXWWu7=iwYE^Lng#HdFfH>Pdv7}{<8*VPzS}BYUwf_*|N!{*tbPo?1Hg*_gEJ z#C>0%4#AhVz~nq*4mQ17t`sW*2`d8XzjX)tTnURk=CpS9eWY?ejz z)CiBCO@41C;PJ~-8zm?Mb?Docw_bTIX_6Ce8M96wkLsUBM6aK<{%Z44dgfodkJ#!{ z`pjQCV;L>6Wh(=y+tG7KF8S75uWUR_^RU%@_dZqBzRY-cUic0T;E-h3kbl}<#&B&| zg`RHl8(acI^JXZpDFcLwGDtNqy*|6!7rl0|k#ya!Tx5(DjY6ee;*RZ_|4meZ@7QB= zT>9*!<%c>6X|BV^b_`%E-@%@Nfo4fkSMs!J0Np(U>;Q%|A|leQ73mV)?kKg|&&yuT zUrQ&bx{K4K9i)`qzQ3`KA^m@E^@Z$o-K`d6#MS$*UuK_8e{Veo;mE9X5^9j+fkqSDgRYhG_Parh2gt7sAkTlbY#`}`VBw;qoczXJzj)MA1LQY(x z-hUmci0y6Uu|_e+dJ8J$UfTY0o5VzQl_pV+kM5YP`#hhpcEzvF!Zu0DP0jV z%qkpueZCBbN&~K__z^0tdxv;eZ$6a|hyO$?5-p@!$c!R0!c-}yX@b(AjWC_2C?iY{ zrrf-7!fbkgQi@e>Ilnk#F~8t!vEX94Vv=Qu(kxa>PR|!Se}2Joz93&MKzZ)I@^Yw0 zHwNb&I+ir3Km>tvL6?3yopAfs35N$Mr;7qr#!?W%nZ7Dv@HQNpi?XDMvVLX0Vm6tD zQid{+2s)=xO2|?}X-k~7C?x?huM9~N0vDwVi}fNe$@3DA!nts*G)h)VYcW2l`%_1I zt!t*CCM}dGJt->4{e@D1P@bYA>OjX5k1$VEO)eOa01|Tb-r<~&$c2KUEGcbCQRcA( zCPWE>{b0!_0N4F*WHN19Za(!FjI-)N7zwemq>%*4pR)pBMue(N~`O&~P%T8Le9jKN@Da2Tq_`aK`F1e=k)CFIvzrz$LwbFWT)pJ1eaMtH+F;xBTnQOAZUG)$#;_5okQb7nmMi|f`|y6p z-bOB2qSFqJY^Pkk+#Ho_ylVY1R~;aQ3cBS=his^XLq|BTs=7W-t8m!yc$|~STCQ8p zD;%yA&g)P%AmQ*8VBDH7e(`ng-@V8CKmQqs4{YoRg|mQ;BkU^8!F3ecOI^pbhBL)% zzjr+*zH1ix`qGMtpNK@zI*`2;c^*p>F5@LV&X!mO%48vnZ%eG#X z*(~M3EB7e{j_=&&)}8xg(*sO0VU?FWdHjTjAAiK7hadC&`E#B;KIM}~pE6%A&$T58e} z57~H%yu{gHcNK?2mS(Jq70cBMk&L1&F*IXLTZ;?O2R86C6l8W2pP(TPHv3I*WT0i@_?ed7e> zs@nf3KUg3B390~PVWa+4Krd*cuvRFF9Eltl6*=c;dH(MrXzI;v({nWs@rF!J0~yeSVYj08 z43$;1%SL1e^YG>-qYF8#ppygj(LFXkMl6w5`~4g2zRXTv&1}Dhc_SnzZMO7%c`}+d zTS>V}10mxZld08b+sbHqB^Ni*I72qqYN{27Xk#^fXS=>earnACq@G8OrN5O?^4l_e zeqC$aES=~}viU~NTDHv5ty`H6Jh%rs-+lfKbW^u~8{}Y(h~k>dpgI4WFl3>PH1G9Q zY{CaR{oK!z-tp<(aqaruM*mhnZ}|Kj>s;Ml6@U`iRAbqgkUdC&uGu%rwCZ=-5}odY zDYsot*Qfh7(x>O=<~k`oRPRGjXBxp}?+1MF#<=>Hl34vLjRn^?YKx?^UTu@Q>{UkS zS&!R)+E(k<8NY$`v35 zH{53%K6S^(FwnVUKUxV!$C`CKB0jR73rP|V_(} z)r6O-278^6x|E7QR3C7a^HA$7aOt32u5i92O%z#bLcP8#ao&<;3Dzl`^AuW97CBj> znN2eerV|cl8Cn8-+`1AaKBx<%2}jeEgT!$E<_TYX<5g~-98r`j%+&DO=U(C9)=h3c zc!_j&jF}vwk{Qk$ilSsWUvPf@ob&Sw9zJ};yYIfsUw!v4`QWGTak0udn=d#xIOg!+ zh~;9*34!syw1Tq*MG@=cy#-g27b`@0X0r*iSw`UJtFqZH9(WrvPAb@t7EP8Yh!FVF zs&<)(gR-a&%Hd#~x`eze!a@^mvMeoS8CdgOg%puWQ`$$kzKVevOJ>qo`Vx32bVOwY za=>WMA>ZEM22dnPiZK+P)&icg zEGUZtti#$eguj$-JNp;R0nkhIGdd(c0w~oB{oGz7us$4if(`@hv%L_#p7cl``?5%n zT#K~(r@aB(yvT3MG>Yu*vH_anHFRwY+j4LF?f%_O?$b}QIAjZ3$)IQwM0VhPjd5&2 z@njIS-}BD0u|bgCUux68`Az8IP}XkW!+*1-*1Pw#AUob~$Yh3|__ECLnjOEuFbXD9inX>oR3?^bAYR3Yn{Ff*>?Yg>CO6%@ZamhTxUGSxRWgx zdEb*O?%ICKA$H)hGQwB&biHhO=B_VjE6B)j|9AR#AMT0X05)u87w`J2K|7MocN#MX zhe}0;){qSaknY+fJ@z2|Q0Mmak@mGi&)0*T8W7L%r?8~vklqm6MQEr(VYvj)mXM5uzF;0z3hhmw@NNLb@&_7snS75Y@1J8`gn+r zRd)36sQYz&^%fH8UH9vM#V3AQXK%N&Kr7X_=;iX=^V z`Q?{+>A}am_p_(q^B^-xIN18u!PNz}r@Svk001BWNklI3$+@ylVGU%<0$*6NOVjD2*E`xc3@`ndg@fc-jf-}<;NUDdvov4e^6 z#-W34BvgJ}t@dTi;;InEA%eZF_Zv90A~LKePCo>9j3i@UU;iRLd&>pZ<0%{OEHKEQ z!O-S^;4VW1UzIWKkYXQY7rlKj0)D#dhWpk4Z&NC1B6YS&%Z-rS?(rex3}9?uwC%pX z;g+A;a&Ou5xw}EXvAWCG-Q9b=+5@q(w|VT6@4Z5QU)B%pJ`}e}`YHl!y1Yb}w!Rm$D9VoDeJ>jB zGEdSWD7cCQAnaKJ(C5t32-i*$gE1PDXwt->O@LTu(~QX^BTZA%G-OJR3AZis0`EO( znxaHlu2w9T3yM`iSy~DkG|p{N@YY+O=R4p2Hh=Ul{}tjPO_Q3yEo3uQ0}2!v?tM)6 zx8OjY7OYw;9VG?b<$AEn_BWiur4IiML(&)-xODuQGtukxL>Z)FVMgwR9 zAOP+|isTH31VxTSYR06InKUMo=1DL5BlHjGMS7Br>4_$dQKp%pjZx&xP-Dg+36LN_ zkPWcWjYc=Rx@*g<-0v0qcxGVhJ>a6i7BbH498SYv|_ zUPYQXk~G0NOH~$3i^4nQq3@*-Xq_NsaI^!&${6dl0_L!Od0qiP%5X54Ap?}B3xp~d zK1g7Zvl4va~iQa&Ier7w@^+Dphi`;~IV^=8%GW|eK}lJ^yHcdw23UY2LJ_>E_Euw3S(%$_nQ zBDjyXyY?NIj^mPyQqAYv%0bm`h|kvap2_`M4}vX%l}q%RqBD@s#qn4{%i*fh9Wk8a z=mYFxpl{)`j;kGl+nm9R*)?&AaMe=ONo*#Xx`U@^ly&fBYk5 zh%lq}CecoCwF*abd zq;HlvxUu8y<|wiF`4DZ&&o%fP$8)dyd0X)5{CmpweQPDm2( zyq850GLyc$ilSgTol;d^fUPJ?s@xj&g-SaJl`t9~aCmU&9rI3?UY_7gfiVS6fD#!Xsj8B4Qjlx- z)N8Nt_G_>4)?a>;vM71<=n=h*bx1qhTHhwgdK9I>VJXWgW?F!&Nb`)!f;%nHNlLfh zM<=JavY7Yrted42SSzqt&PF48oes`P#-k}omYfUs8Lxbg17j@4o;&5%nmJ@2At;TZ zEGsNtMPDd|RtjS*T6&EKBqZ8r?ZskE)ZkRRFqfROJ}@F3QYjpsk{}>_7Z6^MQH9_8 z(wSl|9_U3U-5gy|8ADZ7o(f*5CRJh!iB{fy_i_g>6=UVh77#tEOr-rLJG#iI*iTl0Lz;!^z^{^zoXsJ2Y$O#i|~ zh)Z6kKb{K$pdq_>16}3O75e99wu(Xuf(dFe@lneQI!=4Pj5)m)Yp|)zS2RGW*}^+@9s z9LXY(XcCnKGm)quV0n(>7igtPwDtmkB8XsWh0+=+1zJh86!Utci-!aMx7QaaD@$4U z0L5(Xczpl>=|C307b;=Q^baZ!ptZs!8fz4lb4W#i{rdou5DlVo&vLoC%mHN~65I&? zx=bDUC2-)n`FJHq;W_LC;yHa!v=H1cU7vUnHtFhx1~2t~3nlaFzI)lyZdaKXQHSNo zL(`=LRnK86U({T9W;T7{koU|~&1*aCYA)fqI{za7^Vuy4i&aXV`EujhVH}rr#OnCE zmzs!6zJ4CKS;!LBQE3)M728^0dyl$IWn3TCuN(C!i{||(LR+HY2Jsa=R-b=YC8ssk zP>-@}cP_$Qqnq>elb_Az{48l@^Pf9WE8-S!drhrd4(Gefc}GMB;9|#c@%+1}YqMNX zFn$1@{(ikS%*FL1W{fZDL$#e*uWWg)UHCKR(yJ|6AHA|p!sce5>o>Of(Jy>~FMsLF zeEPLdGw2UUbc(fJ%+DH&Ff$sx4W<9i;ikqd_}JlRDr8@U@ap>3mOeu&Bx&OL&B8h` zz79K~POj%#2bK6)kii8eVK``b_4rwj*^kZ(_w?v4*2oMuz*;-cqIw#ExpD-+T8DF9 z4c|HM;8ztCIM#a^8yjn6nL;Ta@F>a>sU)4G15#jYg}@=5z*N;-R4~yBf=J?YT5@`N zhAB%g3g~i%(-N8G6lbSAIX-1-?(zPEM{KSS*x26U^zlALG3LhZF3uVrKKOv0TbjXU zh7uAjEdmq9!1s5Wcer!+MQ-ihq#PboOeSchxpnIWhLvPInbPa$B&np=9Z-x;I6FPT zq$!=OhqHnw2Zx*uM{_8{?=jV9dS@CxtalFOqnj^JyJ(e%T3g?{_Hkg&hupt2*EBe=N z`wQZ@4YDCuowrS@0GAoUC=ucn?|o(bZ?E6s_T5|j^iTg3zxeaNz>Vv-&?3PaM^)LU zRtx7$fOL2fKHLQ-E0j0$(H=V&=c}wkY8|q;6~Z}^AedHSQBq(-)c|YHv-@5MkeQf% z$e6mPkO1?tffp=ANP#mm7>=*Q{PKdz4z&4DQ9QL^m<(egDoEI|0NQ`2k(D~v6lY&2B$}RbUHasBve#n zodHhhP=3x=UD)2a#w(wEg%5x54pJ*7lPOXqbkm$lsPNK~H0#hGtaG%t&*|YYw{CaX z+P;ob$y`{{+R}^tIm;pgPDl@%udHPwP3$y9$=U+4Aw%R zAb2Fq->`@J3_X>rW_rUi#Z}SM&Vl$F?AEKaeX+DpEArxRus@Twim%rHJ_xWF7rE+q#s)2(g&^g!d2yNcyG9HD+kc4#y^qU4>SO2n zGn=0gI**rw)Xz#iUTv>wM$w39eT%ElB`$^JYMO7)@;r6r0KnQ>pU-{nb$;$=f0mm! zZsDB5*-*aBI+T(jQn|>re;O+<=8%u`GJ5kG&S6244kqIX!{Ko53_9y;*&E}_4@xO9 zc2)w=&NMORTfw**KghcJE7a_(&=RdoiNP)E8*|*jOn#hb-UooDH=nuMBYe};d;~dgjKW@Q6S5hGyltqEo zz6wQ>YLwEH<-}KENHtPvlum*JZG4pnAWyp}W|c2o5Wn=43n4ukMM{tgr1qJ18MFel zl7a8#nZ=`nY}vUyvU+~%6M^1Q<+c#5S%fXqN12ie5t=6f@z(9Z>1$^ zs&O{Klodr$`1vKTV5lox{Zw*iJ^hbtOaA!!`1<(z`1<(z`1<(z`1<(z`1+6UdjC*1 ziqh+=@_t{udzafU?67<5HlPsB^Wx8MY3Giyn3Yy@4mX2(gfePRiJ}DcerDWjd`9&2 z^pxRnNRlRqNdZzKtk3BBmkgx=19iYyFvcsvJLkN^BP4|HNGSpUz&$PCXT5VIqhIe9Y{rKCEeZzoxus;`inO>JehKGHpW=Xv?#EP!6D8e_EIXu%+6*S z5L!{$66qwV)`&2kiom-Uf~p)*OiQ}`E}f2Vi`ND4*?W~Jqy&UVoJgfeJ1I%##rl*| zBuU~Oed+sHY3YLibHP0~w`rw9J3{pUAwY*Q?u1GJQp!2CA;is|3R@XF6EyTCC#^O9 z*}|d#gGDPvqEjj}##xK0DlZmjDzBrVB*vN$r!vod5mG{sD!E|aZb3M4NgeN&pUuk@ z)%?t_KdY(bH{CO~T`@nO{cf?1b#MfDSmpV#Yuzg6xY&MP zb=`>>hh?9=Oy9@;>@stGmG;N1+c9?Xyykk-n%&eVb#rEwy{fKVZTrk+*VWj)e3gCt zvU}sR*ekC(e`5EctE}0p&a>FQj5)_$cHOwlT#xCK#p^Qr%PR9Z*8ZgsjVFA4Res|u zuY7{t+dF8LQdJH)hxgBXYJr#u?9BvOE<)}v7zgtz$TM1iKrA>dv%2d_DU5R{;YggM zvOarWmR=lCs*srvuOEp?c2K_FZYdxGP7@eNbzrMxwtqrU*NVeGQcS)6`tO{Ov`DLCwIpE!* zz!ZfS(kl%eos#uavTjbV*F#CcU~LU06(`5Xj3*=VZqEMxKDV~F>2)*8qTsM7c=+Hx zy)v#*~cCj*&X0)9aIH$8b0XBgqrZU~`LZugmGlF_jaP#^K5e zX$#WM!1t7aG#4l*$UEy4rQ`eWzE9~=l=S5SXCCpa1kNmfZL#Rkaq#_i5WC>o(N3jk|3#T4i%xHcqWIom=|m;`=wX z?_$5jj7L4MFz#Jq+aGIdvE$ohE2})WuCHU-w9MA(z8~}4y7!G4x3+$78|N5Xi@C?L z^{L5L>*jjh^Onu)i|aycz@}+Ex_F+e;Z+NL1IvU@J;vpQR@Yu{y@!NtB@W*^I( z#EWfdS_hZCf7@DHH`Y!4({=_}bAs3V#&*jnmKP{g3?1KlMg(?W8-h#N zcusZrw-lcLBqb;WBJt39V?0FK!}isjQeds|&yXr04Ve4sBB%rSAA~yYi+q0JYpF}+ zzvP1Mz`2y+>~o8<*Q;LwL85(GMXfYggROkCthOr=1q!n%7cgZS?~AB z5`{GtN(k0_UADJ3*xFcQJe;t%{{-v6DPIji2*;q`XKQ_()3Y;%Cr4ziwgrW2~Fz+te}glakhonVuMB=3{v zT}X0FQE)aI;Z((7y^GWeYe6R+tWmhklK0oSzWV}qM->kqA5)nJUieRng^~+m4iW({ z&IO2m#o1`c&7B=Ooen}u`uzb_Sx{CLom2(hzah^v(lkM8jY<;iq(o>%t}~QQ5W?$K zq-lzj!qWtFiqk&(pC(>=0X&~SN&J13)}iE|Kx>WG3L!N@D$-7lPV~I(4o?{ncr<{p z=l^yBk4AAa2pHOV2{`Ah*IKX!;Vcp`)?%vyQ%*6JL1Gckpp+v|6G~wzr7s;Qq{2=s zFM!xG_pcg}pH8P79v<@X_3`!b_3`!b_3`!b_3`!b_3`!b^?a|QD16!SnoD1dq{PBe zW2Txbb>4pSyMW>K&wiR4JKGecVej!{q=eyk zj1eG}!c+y5@d!3HIXgKaQHobyy34iA4Th(uNFg{oJ7s%olN&d#0oJ!GO&M%#P*o-G z{oox$BI$2!(i?1WaD2ka(II8mFqw?$qGoJpz0!70FJpcj6$H(k!ZL+(&%jxME*7|qu zoU;4i}zf- z&$4^3`ui9-^RlROTjV?jBHb3LkAYj)wW;Y@F~ON-R}3_A)xL}wi&grfEvs^wagTk6 zrtd5pgH@m3gy2|q-&LQr%Ke{ZzdmmpiCrh^=I&M7+SaeDw7<^Ao6cLSKI<~$)^@ec zjaB;ns_zmzH=6qJGHb_WY-AN1zskF`W&N)@_nP*W%k*KL9Wwb$75z$!G6 ztFC#=?t9g_x$1eK4v})zeI>?@SJ_vd=f3m9*h8Py9=z<*ZLp|ilV ztic%T5eQOxD76b5aV}Q)Q=!Cy4ej=n0U;%}^6w!7|GP4wd|Yt;owJl>;f2>0^a4Z> ztn2l9XstOoIA|CGhtz^x=TxS`SxaRrC@n&05CW;7)9umeb?J6U?WLHiKxx6> z|H?1X>kW8x{{e>wPuLo)lVqCLe&jRkJ>DZp6od6XkM|yPczBGEp1Ypvgwx{#s>zU- zZr|WjFW=?Pofnu)#(eL4-{bV;0IlKfi+7n$C#WoC^V)Sbwyq(iMCKi&vRIjLIxMJ+ zJNty;Fe~CllghWb@3UFbrWSOSZ@w9+W zn$pX2lmsChN}rbsWL{QK1^f4v4~#XwydxD#7?gA*T2g5Vi9mKVQW~^!I3Y!BwZ5v#25&GE#?Tm%PEra4;gqgM-5SH0R>^RlkV;N+#uH6^=sA;S({;uiy zZT4Ol^r*Avwx8A6UJRw8=|Eohv#U5r%j~6X?$*tLrg3Uov+BmBZXUNeu66z0b`Xy_ zj4rdgW%D&=eQmPWy8dp0Z8y!2CfdNVcd4_brZs8ReWeN79dqVwqHDy$>YL_MO#ipd z(WYQ(EQMy-XWIe;Z8j3i`)-^2ZSQ_@&c?v!oBE<@{X)W|kFoQn{<#bVGDednW{+tbtC%2Y%zT4D0l17P%j{ChL%0ny z<^P%UKf~3#psash+rrZUX25xIUM9hv*8%am>kgbj1PH^?(J^INlBNme)H};sh5GhY zg_HuVC8qLq*=LzlLjClo%Jc~ztZ=^88o{#gz)KEU&2y6`Sf zzRQa*-9;(I-rgf}rO{c+U}FuWWNm$e$B!SgzPZl+-eat>>}+pS7A5b$e~}+3SXJ-qYB$U;Z8#lK}vy|(*HMsSGXzR`O1V&Y+J0KD5-pw9f3+T zN-6&iN|1IsXst+eMxqmh5Tr?h19alc{2AjNa7PdyR0^CR&2sWi2dNU0Od%*qbxtD1 zoEh`fCWgaUPo}ZX;;g~h3W!|`Bme*)07*naR4FW-Zh|Q~NLP?2j%uo?s+8$iV@-u~ z6=j)XtFE_u>pXo1kESrzvc0{@594a%2ruK!wH*dlJ#4gnzlmFZ@%tAKK(R=P*bTH! zFQJVyT8HS0;k?CUI-2^kZd_yfxov}OvWLs?#_Q~@jhoswRrHobcjm%K^uq=}I66GU7=u;`LU?XNVZ02Sl%8`fXUd0;p!_bqdi{cqfajghvh^ZR7S7wDgd)+3 z%6SF#nNFaTDwLA*@8Zj_i2xP%8Cxq|a6}2p>k%sJ&IYsr=eh{aF_{)vr$}|mv@AFq zj#=w>`QYIr_Ky#^aea&R^-U&|344$CkP2RU#BF$5*b8KC|fk7j5PH8nV$w=~b zj!#DjW$6z#d?2JWAQgrbD>P}|rKk+XN|a8$z+%vgaG^}35WZv`fi8h`(Z968b)HJS5^Q;byQg`o|HaE?ux_)n3mzr!l=5Q7x!WZL!Uc7fx0IRP5W7pBk z+Du*F#@IpKSjLFPHrZs%8c~;#j9J&4p1JB-x@nDRTEE-c(A1|f`*z#=)$Q?Z)P<(~ zw{7mXt>>%kGfiU}8yt$+$LrSCruH@2f7AY3*Opc6udcmqVwr90VB31K%A9OEo3!nT z%kCYszto*e+t$E3`)^ybVrYF$XNIOrU;N@K88m-MoD*}{vj51;x%Ogu&f4JJy8r?g z^Ac__BMW%<-_FI+0#o0C7J~6~%-;TIeK!yqX!S^^t!xo_XQq5xX=FMhg8RgmtXrNy+I#`<7_|>fw7>pBF{5Ad5%&Vog_%%&|0C>6se^bX9N=IQ2|QnfHd$_fHchz zAqZuigHQ$#p)gKR8L+~m6H*!UGejUs%qwWv0R6|)Ph5o-mR_pR{hWRR(~iPb71C8W zQ(;X>QI<@n6JPDXT9lBO%KuCVL6W9e3!_QNt(!MmH;bz{{>$!DxAC<_Z0CNt5d z!o3QtswsOP3&U#4aK#*=n>O&a%tYI})NLr2$&A-+-ff#_%%;`^7mcBYta|u~rG(VI z+r>jhQ(v{+ws$*SWS8%U0&Z?rjeZB&@H{WyjW z725}OG`Ce?=}l`+?3x{eu&cA{Rp&+wOuva%5!=p~@mm%gYO5d;Qj%Ey2-NN--LaI66K+2*xvOFwT0|vsgeN zNQp6a{xe&duyD&zO~7Y-%c8_$Q9@wPM-GR@7;w@%v)1|&ZIej>I80>#ixl$dY6Q`f zT82kil$K;cf!+xZA1}&^{ewd~os{9(kjZ$0DJQHCIyh4@==bRNyB-KHpxf^wbV9ek zfi)E;2M>AtWS`M=!e>AG8E)Ucg-#?7AKqteV*{-d4h|3L^#`1dMx=Sh+2aSC?mgtj zEyqr03#AiGS>X_*SqG&Ol+IB)BS{6utL~wFfqH}xp4MQ`y?^VBhvm;8?b2dRi4>AS ze+?@&<8i@gG?`N(>`ccY1OSk;Xi+G=D9@ee$#~4^>5z?nhcwl`N`%(rdFr$HT9I`- z?A+Ml#;u#Ad539buz*sUypz$*bFwTW(ZShQlDw0Hlq6bVDua@OypxBZk@YA5m4uRj z8YR^n=^~}XIz?$Lg@I{l0Ev>GeIlfr2Lf;o%lT&NnIJy%pZ0UgL?Q+m*gjQNVu~pO zixf~)B_^N`jH$?y1Sw!zOmWuuAVdYz!f^A(b$%FE8>g$yIg5dz#~frX{;nM9r$9i$FV`J zwhU6NUO-!*Am-rI#?_C7zc<-uEDyHrz*ToZi*fjx#y;jC7h~5kj&V~!VpSf0(-<|~ zKXz@74Nk^F>f3ZCR)GV@3ctqaXT&%!FWLL3S=T-KY zSon1ei$wy}XT zQ}!O-LrBSBeT}T!MWrcuuSc5q&?@DvH{T-5QeJ!QHD0*$0{i=qIXpT*C!SZHYG2s_ zQ&E}{YYf)->^NvIcBf|Kk6VPTyOnQb@MgqTi-IBV$lI*g|UCr2mrdjph8u?D6^ zH5bsE*@_UtqX7Vn4MLLPIZ9xhLpm6ZM)dN8UMIual0<5>lAiW~rPJ%My|csm`Z_{s zas)}5_;P+qkm`gy&(T_AttHipPN#!&4jps>aF#Sp0Z>x;l7dQk`?sE&lIT$OPfDy4 zl-4mSDzBd*1c{O;ArMZ?!&+YIzz1=xF-RbhUW8C48re<3RDjR&+fV@j;rabI7s_W^ zvcy+1D2k~MU|9hurqhzOwL$b|eAO#v1Bu}=*G1rCU|~(0K-o?U@}%qV%gZX?KMqn`el-kZCVy} zf}(A9)zr^T>p+`WYm;zi)4Xci@7mV=ws&o6XOm60A;{X^C1%dX>>+jivr6!zZO@IN z;lyOjTxaL6qg-rhZ9#SAsoD2W?%g(3*PCTW|@2pSb`pmg^ zijIzsI669FGMUb+2%Kl~L*^fX)8p?ZLzw}O67bKRJ6CuSKj*B^x(gp5aMob4nppMM=`}_3CG(@Pv>! z9A#P2>-5;Uw#LTBI_v9eq-n-zG-5oSFd9yjYJ4 z>GcMTMN)=kv{J}W@xli`W;6hOK1r?fL4g?xAP8LOpo1W!7vj^}SFaEdDoH4$z*8vz=M2_Z z1ddEg5+#w&ffWep``T6-HCqgEbj%wM$H;D%SGE#PADr^tk>E#P9?(x!{YGsKdk3d{?^N>Y ztv=fw^^tbk$%r=|j#1q%uWaRXbn}6#U9hO+{-YuHM}n7b^w{a?3!9+j(Yr@{XJom! znj~8C(pHDN+nqpdYCo*4a_C!b50;aI5%263Z0_`UaVv{DC@$TMjN$RYDen#?uihMR zts|p^nqr-+7*V3OO};4_AG2{U+w51##>PCSEdy0o@nP9_+MZk2-nKD{;cQ>LZw&vs zuKlrk4KabhrtyzyUz4C;(|BDRw>F`{x_Q?`xoSGBuL6T@g5Ji$)0=2jF?5_&M78SL z*LLq1-IQf*XhIy+p+(vpk(fSi3Pdg&^S1qa6>XOo1XdgLzU`iEj!&Co7Ms5K2u8Q`nv#~mRjG;$1 ztyim}Y8EdYvp}{kr2dKLo;{1cnFvb%Au1q5D9h&pq<*FeAOo7)dG-4Mw^usBTEoMK z_nC}Gp$>XQRh8a(M*_z4tOFr@o?&+96as-4yuGuPQ6b(rX1M<(-2naQwyMz(_d{Zd~eG7-%UadFCBYYb<%*p{F}&1zDQ1v9ZAm zcXnAD93CK_;5PU_gIu4S^s@bNamjC&$N}os8&Q z?@*N`#bm!@a~(r4i1NCYmfw(K_{_d3a&LG)a6_0VU_C00AKoAiP#U zur(>q0~8`u0w4sdoOQm0Wo1I(Y4&ywF{_wy9zmO}ZyyN$=l|wa`icAqT4~k}R~CH#dmr%6-qHNiUwVb@j{3;w?CBBz z>T3_kZr|pgd?}@))yiTtPc7+*w4o0dcq-K6a>*wn_R=dDVGh}q|3 zAl7XMr8f9`Q?Mn*iC@;%CI>l2?`W0m(8Zs%9WXDe+fmo97YE>Hiz2YtxX(smA1!>|0<}rWq-$tGsd6@V$c?CYkchb z8Y=)9J7#rza1632#z}3WQq}cYEbXvqF19(VZ2{4k^(1CJs2l5;eRvfrWvn*Ks%Xj> z-Kv=R*0#=Hyjm#$F_&9_`k!C+T%1kJKg6Phdk78i6g41Z>>UoAS56;|hJ5hB`vG?E zsRPbh92T!HD1CrIh`DmRvyRG`keQy%75NL zQItVbz>B*{DKW+%h5vsMgxid*BH>K4L30=WP2jRiKp=y|DMH{OQ39m}gTVlU!yxGP z1{@xpGI{ujTeoiD6WWSSHwP?bHKp6_AX(?^?2M{1oSd969gW%Bf6Sx(N1UFXQC1bh zvmwQ_;K2v?8ILCHY+YkC8gX*^A^o)t)W$mFa!fHDG8rc%nLs8TFWMLo7H(eCE};Ec zto%SgYxq)tT5Hem4^FO75-VUh9#fPR)+v8a>pZn1jN#nAW?dL;$6Bz$p&gu@ozcw` z*7`Y0`|;5_VPkWho40P#>vhpelIAIiP7yfLBqdKXFY4!f*-EJ-iBcp%rC&&iRNjuH zR9ItuwqMA(z(oMVgayF=ZSjJDp0;9dh~)y8#nf6c}4Mr0|KTn?kPQxHfLnnBIvbA z6uY0;=GU&ldZt1Ure?ubnp?N7@%J;yjjpOatjzDd!oh0U!D4n*K;@oV8W-Nv3sd3* zzx3ssyp;O;nX2NQM@M}9okI$p@TnVj>4`XJFGiD~{vaY)zdqn+Kd-p8lh4=GRiVrP zLMObiyUj246xX}56}s2th+jsjyG;WkHk%PEc-96DUDj_gdJR{}cDEhEnhvu~?^bz`*P5t<4!;74_6cJ!-SjRo3-7s@Jml)fD)MMfb#H z|6>DCZPdA#!0EF0Ttx`C={d`OAJZpIZEHh#w26+ky>FYIQd_Wem2*>*j!2shNo(>X zBCr;P0J!R5-&wbi{SRV*=jqFZ#?Ah=^Gu}{;gF3N@SA^n9t7~&`_qFn_V@Owsw%*$ z1AIJuK`Dhb1`y{I0D%`&3nlr45NMfTO~`^e>mljkGtxP%F(g_C82+r|EmCUlj5`l0 zS4wb^&R~oo&r@IeuUJL-|AIjWn7EYZf4qR6#aP31GNn?2EK3-TCVY7RKE@PiDLFoR zLOGoxgeLE%Y;3G?HXPFFoYLv!NC~}O53M!h@q|YY9#a%kjt&ngjX|d=ySuxT(bHWw{G3!#`Wvuc}|jMXeH5F2H3w3N+enZnu4zup|tiTAH$eP=|w1&PzW^(0?ihP zAUY|;JP0;NLLfZiK?bVIA__pvG%&!}nG@{IM1}yD6b|7+RSJ3T%+G=h0W0C}t;9J( z2XDI~&}*y}Pa!r|SvanG#jZOi_aF1kBf%%P6z_gG;eO%BItgEXd4oF}8O}M1(U|Xj zaLo4(4La4lluno!=muNZ+(`IzCh1hCeEnM!Oeg0jUfq}@B_^lGeCzvD*0#Ic>}9-G z3f2}UQURU$-^^CQyN4rc<&-l*!XMFF}FmbTE zmht1SZn2j7mY+V}=d15dcwjt&`cUvi=7@l+!pEb5>LL1b)&gri50wDb|{L; zy0p<7n);>=VH1O1iRF&AIX_Ks-WcWnxT7puJ6W!^WI(idB8q-lMNp>VY!0P6Ps*h|MYxb}0w;df#N z!3Q^IFEe-27pnx!1p(*YiwL5DA*(hUT%VHX(WA#4JUPG_hbawJSp`QYPzz@IaKiJY zJ@;E912=n?IR`v<-&#zl&u*+eF9m2SgiO#%2O~F_$_uH@VBY{rNx*t>wop^u7_S## zjQMCPufAt57_ysZvS*oNYaL~2D2kGibYzJl&r&L5cye@1o+)nJyiVl=?|=9RQx=pK z?!L53e=y+e?36rBQPOdAbbu6s>({R{nHJoC@PIT)n3g5IwE_M9fazp}PBhc9pr?9l zZ(n0=YZHUv=cRcss`^6Te5^q1km;Up}570W4G;|)`FP&Ui zL>4Msi1T34tV{gOy^eto28f`OA?EKAe0uC$7Sp#uiBK|dW;?Uehtkg_5wga!K*Kx` z5NzBD=2a=Als+i(L%3qg>|DGay>*}e<1NR_TZ;P+CKL{il;++^$v^zDTWnPm{_KtW z{EIh_crv!gM6=ZqJUlb}$ZY__yWf7yKYu9rAAhyWAAWtGw?)RwFRybWk=U~0!#6+V zx4u>JGhet)rH=T2-c|hOMxSm`@~3ay=U*<|`&vhE|J3mLJF|N~;{Vzc{7<(B^8mp9 zTle{`?+QNk*==$&;TvDQ$8W!V#-kF}HB5};rB^oj^)KDxi#sc}0v9`Kbf@A4CO2Mq5Y@VnnQqR1qNdsDtIdi-Qh^IKm% zWql`OvOi|8a-5;~#`^>E>4-P)7n}jvT932B@s-!t*#GdD-~aO?Ui~q}wwm$>-+I9B ze&>u*fS6i}JmFgh760@nuah6`^Uwb10bhT=V7(_PMwb6@t$nSob z@|znyvT?!J-nh@ddh>+i3R3GZO7Z6p$Nb};xXDYs5r6W{2mG~>teKMgr-s9cLku$R zP2s=)(M?Vcp77g$_>gZrm_i~cD@VH4;~)I^F2C^F2Azh3V4E88vdumgmfCc9X*)Qy zIR>l1nVSxgu>w+U8KzYa@NLlA%T|V1c2HV&pk1ZU>Ymr6Kd|iZS9jkg@v=5MZ8|j9 z9X{*U=DKlSG(o*Bgdljf zfPNR^93bvOHnTDn_wL=}=;#P*Emh^6VQ0jwUYb|=cjw;~fd-(p_9f{;`)9E0nK+u5 zJ6@8i@=)nHxvwTNG8&$dW$Wl9<&^!sJsv!K zfU}OB>(|LU9rpGQFjd9%oh`Ih9_y7F|zV@|0 z<-wyT45t+ijl*D_2?&50>V&5l6LWe;uq`PSN_t1z2@qP5WGS1Qn|%7ypXTn1FOhe; zIH{0Qk|arh$}3;ZAy7f25aD;{0R30k7y*Ru4Y)~^+jh`D*%6(}&R-rfSzqHn|KcWn zIpXVY9P<6qISOesGTb|XDp}`KYft!h?~nNUc&;-+tqi zz0Cpt?U%OMRwZw|d%(Yc=Y(%;5BS_p9=YZ^-hAsZI`==HOiTXay(7M9CD#TS`Eblv z|NJ3;wkP@V*KhH;?UbXvV}AFoBYx+vGH$G8Y!sF!!-8)gCj9D;+~DtR_t{AH`LMFQ z`C-9-_j50DR~f$g^?UrA?;rER^*+D(i@V6nPrb~~T^F1_8S;C7`j|g> zW1nBVdz0a`;=_qzR8DyN{yzWWjbqf#2LIJ(HrSRGZ~XNhzxUle{_R$W|MJt0gNfxk z`%`}Ab2s=$U+N$x$Nb;_{*Zt7t$qIM&#kfl;0b?l-|&UkZt=@6<{a&x@^8NLgg<)c zh)>@h@N!?Z9=_U~+nB8QDuQQCKa1Uu+YZHTZEUNM5F@^|iqKP2|HTMEwyhye@6y)B zRcxY(2OE1xjS+xq6EcfkSDX4EhOge_gk43T^0M!tahW7qqbF^;8|)cw2-aS*d-x9Rc31{Uka{<8MF?7BJyApFNWT?_wkAN}O4 zpPzc3m@x?KB1FK8s%gz+GUopM`;5mEs>)CnWpJ!!i=D#R$_xC-z^7igzt8d;%*^qb zJv6jah8(Gs(({i4JwPiBLZEemHC1r(yjx|gMGHZq6;&lEg+M2YG)XDT($}_+bgZ1S zbLZ?lMSMQEb_NA^!c!4cf=W`Xt*9!Cb%MuxPdFQnm`p3A5FDPIQ947n*X8>4ZMvO| z;pv%2Q2_70_a1Bgb?)4Gk$2yD2V*Q7>zfREU3PZ1*x%dZGu05rK!ea4~G|OPPYiW3J}(d^Z{j6BBUhER1jyh!Av}qUg?BK`}@58 z_V;=8_>jreQdKfgIzm5%#cA&QFYu<%X#pN3;3|W`lB5cyHB!kr^#2o|{3IKjTez9l zgb*Y;368fs4+LoKq5tw+IL@O?WI(hu93Gg*r+m9+w&NUyF%*@dG#05e%yatTedL@8 z!pxbUAztPaZb4T=2sdZp2qDgYCkSOQ?cCny3+23NKb!zS(}AvS4ayV6Z~XLKzVd1x z#$%H40bl=a#rqFW7*9@ltUCPq>o@qy>l<`L!As7tH#|6B0|MAc$__vEdWZl0!xR4P zUp?X1c5g8`dBX1>39h}==SQxkeEWkiUehT*cyh{~?(h#jdxKwjeS=&Syu^}w151b$ zNCcg3pI`nvH&NZ3FW<@-omlQ`m=u=D#H`T!j(`295BTGN0w^oX!!yhJ%>lpp#Vy9C zC;aIT3O07v`T5t@xYbpZ8-@=LhWy_BGwvNuSPOUhvDbF^%`e~J#kGX$-T?ym@z37i zzxd*HlCna)^8tTUB>ckXZ}DrN-(d9ch{F$_@I7~ql`(tmW42HU6`o z&vCnyw$O2IJmKBFGxk)@Kl;oLzwnt25@C2H zFZlM!9^bq-;#XcyDS>>m&p-U~O+Ixk!&MpY{m~)+Z&7ksdbHGuv7C$w&|NNdA; z4LFt=8(Li2URM#EYEwq8v-`^^T*uC_wl*&N{Z$VdtHL5<4q0u7!({@1t2(8zQ2fi% zEn+ARP0wo6C%7zZwJBS<%)Z*7r)?z}WA}sD$`y6(--~K;fAM0Cv$) z3c_ijHofCqAsryg5~@;CRTX)fhYt4+AyRt|`+{R{j16k)o$z(lDNsBuPS+3aY{j9O@*)SjVHs`*b@U3^1J*I3VxBlfx6<|KI_= zJZEivgX`CCa&U0KTW@`jL4S=--eY(7Hq+@D)5(O}H*YfN_mDzyaCpkz!6A>I9I&;$ z!wYxsa{I+QJbLs9og}1b#@TS>IoL%>H&=laj&afLCsILrK1r zJG))B){mFoYx9+Delj`ZPu@9T&)nqjyN4VkieLWJHM$GUC?|&FlajS9fA3s@5E*xN zJ8Z70$PGb|$b`+wn1A{GQ~uzu9L1#K@T}xeC}w(*P5rcZ{hiO=;FANv|Igl=JzJ98 z_kEwttg3U)-Foky1sDtfV&ejd1Su*=*tBJurWKNd5%!Dpr0_rD7r*&IFMhHdA&0_2 zS+eCtwnc%YxPYJlE}Fp%KwuWk*3;A7)5~4YQkAP8GS9iE@0_a2Iz50MJQWyp_r2#- zWo7lrAtV<&K z+Gh^9xm!L_I`C&cb%}`-SU?qmN(r95GNvGkPgcdbTW)^q*(9-qB2 zp^`DscKO*|KC^ekD~%^r3+3A79iG{X?RT=|Ac=cgp}2nQ3ctF0mjL5H9KUbBbI9S* zl&gCc&m4^T`WGwq#->!^PGcY&KaeT+uY~aZF3OLSqHnG**0HuM7a9e zl#80n)eY!-UXFvmslU43FUQI06N?*?MII{tm}~z-#MOq3SB}0#E&^l-%BQQ(b46p@ z)|#$0qzjGH6%-vR-uX0pLf^XE)la!1dO4aped}shALUR=y85JTkJ&UIh6I#~+|9Lh z)8$+pdg-jJ(vhisQ8aD+J5dQeB;mj1K{PC@0E7e$SBeJ@9&&hih)cELtpl4Jd+QwD zyOpS#2x29cw^Zr(-c!h^pnnd}_mN92Wpb<(vWSkCX>5|HkD_YcMa6bfE%o3d7hMpd z(=Q8DlA_mIV~iQrfh+a;*bhOjIg)V{vEFeqn_-;AdCzDxLM6?G`Lw1ep(;o0?d>vk zQyQ%~JvpPU7mUh+y~%`|*RL{}>;b179Zh-k@D!spLc(*;-ogWmrlBz!Z5@{`U*_%G zcQ`ye=Ja&R>1nJCFd0V{tyGexSx}TCf_ErHRHc{8f_7;{g+QQ?s>Hb_Wurx^cOS>O zC>4jtNBrf>FLQKqig5wsmTqzEZVC_91I?qxT=b8;07P~YPR$!RrFgx#Y0j%{H z>sN>sxq=FuFGk)kKcD83hu{JfDXNeV5f^ncA{t{!OF0jWc<-b9KLO{@H9D04_k#dv z6Ax-zWt3bKdsxvVBG278k8yr&;cb5>IljW*e(?@}@_NlH?;mpfhGA#C%ddWJ7igYn zr<5YuqJLt&>o`fou~-K1oa6qTyZob9PMK8|fA>q5xOutc_|cT#e`Pihd?EQ8U%A0o z59G2?!YUXVyv8`k9Knr)5x?@e14gMYy>oa`^0T)_sN3-kc1nr509jZDx;odX4cF+( zWq$qZBfj|MDfb?p^7fr6fAH>%Vh}Uq3qK{=HMaf9H%pxP8XM znPcZyZhmw#S^HB6fom)$&a=L%swB+$ksgwYtG90Q4}Nop|L|za-TP8df`cHr7HfBX7u)4eu*wk_k@ zcE3&i-uCm{tY9w8v(I_y;^F5yMC(8A8o!J0*(acNu^)2V)YXSM2m5Uh5`E~GK8Ggv zaNTDELk{{~_1D{;HG~e-RSh90u+pWDpELelb~t1V+WIf25BdZgyZU+4@A~vbx&-fr z1S0y@s2pm|khQ06@9A5wb5LhPXf!z$SaQTopH^37NT4Z4-=hyHH1YNi|835jHBMU^J>g2)whYq+9BI?^cp+ zg_3~6T1)UysuCe2jc%~UW@rDOw7M8*5UaL3yj!}^0q5iRENV^gXDF$-yf;CLnDMX1 zirpQ@>G70W*9bh;7{ZySkc!{}M~5erN>MKwj02$xs-23v_deisHs{9G%Z$bou3o;v zd+&e1&DCqq#L@N+Aw< zBo+OFP)287qE-iZDFnyIN4)atE4=mgJDg2tSnsgTuY~`?I#_*)lV55ku2)Xc?T5~q5F&4^7A(dP?G*U+K#1K-6!<6F>!Q(@~iGa42AUp~mwIULl zMG*BXymM&hP*R+OYJ6;?P1Pip8W|u_-tm*Ta`}Us7njYKDg>pFJUDH*eYoHkpPQht z+`e6Ncxbu#?B*r!%Rhg>v#&qmpZvicmx-zunzwfVK-U}YDYS6_aIe`7}cy{~_Y zpMUW>U;pwM|N49P_}BMp?wxAFv*T<*v97~*8;rBB_WUNXtlZ7I@0o3f%Uq~*j!;sc z=vUiZ?^+Mq?%BsD?&HSx1#J2#8f|^mcid;hMIcRA1B zG!AWT$Q4W*QrEjnbg@s9AcsDalPT<)!+m{s@fkUM@V@)E&F7(|F1yBg({nDiA&1-D zHl{gqvyTSTMc?QXblnCuk<*5*@#&kx+m`EXdxu;HcPOfBXgRyS3K(tnG1Mu~DX%zW zJ`d3k$qiBt6$5^11VC72B9jOj3L*T3`>hR-SY~TM29dbYv3h)1OP5Nen9b+B``)`u zr&F{x=%&Ftk1-ZwT!QDTD5j?53MQ^ZvEqt{LAF1du8UC}gT^uncJUR4TA23WS#tdcUop+EUM8MNeQ!HeY$Y!3S)B+G`#ko#I_! zXIwI>BvuFJvjxsanEk=Q9^QMjF+6y5NL7tuM%fs&u2DtFXguQJ;1bV1{{rv5`wl0k zcUaVhpZclKQyamZyAROXQ51^Dho`*!>i4;I{W3SMT;b-kx43)v10LMJ&;I@av*`&z zOqlHNfbc8rdFvc1y_b}VV!2SHn)PK_;hp1KfATGU_xFCE!^0Dt1Mk4Q=&U|*uvs!m z)_CwsF~@To6j<-EKGFny5Hwmdoy~dkt+)BYTW|5gXFg3?lsM;C+73brykC|rlq(8} zU$e_)nLn2hAuBa~Ay@Xlvhlz<_a0J7Ld&8tXd7?=Mn!=ts#LO4f{y_a?HxWOg?{hw zK48~gOh2)@vQ3Uw-{uA<(~q$xcL{{ytL0ReC7fF z{JmrT>9+*G@j}JB?;Z1hzdqyIi#OSylppEOAth@zkAq_DXWV;q#Q*$l&)@s`%RH|% z?|i7y7Cw7vhf99O_ufC_zyCwY-~YKiW{;0~_mO8jmOQ^-@%X{AzbAb0@;=Yc9`P^# z;x2_*@Oc{k&sUFl?L_boes!N~yLO}9EYSg81VXXkkG?l!?%?nL%r5ogGwwb#>`%rV z>=xND+@YDRTzFwFEVSzolgrl}DoE7@GtN1P_Hin6MX=fqSZ&JYeMpR)ENIu*bRE2g z(l~MtX?+2i9Q(^X#O84BbGXEtK9?gP*C(2_sb7YOcy_(}rtb~WtmrBY*Vg7f8|q$% z=|xKnd5>H>?OGdi1uApa)m*KCocGIF4~DE!IrB9aNt3gF||c zu5S(MsxpvUW^$-dY|a|EEp?~syF(F5ZT;PcXzRM38UYa9_oee60|Mgwmuq$Hi*qMU ztihv`5Z@CbXbE2b`0-;NKYq-jUeGiR&UtjB@jfc@FO}aTL?2Y4@HVQx%Tzs2b(6DscCF4;=2m$Lf-ukWj(T9My zE@}a&0*3>4?)duD78_t*H+UbIR*JoyG2=?Gzjuk9amC50#%PBsB+kNOZkf#*j;bl9 zshQ5E2mzO`USXjvQb@G*=*DvU?gLKF=3F{B;NbFg?%%)9;lo3AcSlt73Ul`X`;%R& zvgDn&-sb4&kk5Vo^DGu~Ci{+nC3v?g$%j~~;Kzw1g^D@~Nspl#kND2N{Wky4|NF0a z=iT?2&T8t$qfIQ+XqN#1&RHcwMzqJdPC`H=`bM;6R(cGjQV1kXV{mrN+1Zra@89O^ z?3kN3Z{b4}FH9qlG$P`&WU2;nZrB$Wvva54uL%^2WkAB8D-?PHwYAI}!$NBo+9Qhs zRj8GSTzpJKPRJ#KBB2~y@HARurKA+#f+OhWJOCg?oKnHZ=n13>2vK~ou^L2RQ8zem z7>{=-WDI}>G3MXL)ta41!%-G;ZH0Pb)dVR}5=K?Y7k+Ao-#T9K+b^H;KmFSUWeD6X z;h=<(l9BZQ=PG?6Ak+@O_6uYF(Ki>ASNHk38^zjTCn_Tpa>N(Ea4p{ZyQlo)Kb=#C zz^xMYE5S$#l&JWHuV3YF9^T`R-aY2OyC-Oj zBbk(v7cW;_6E)xdV9HP3DcA!lnb#-S0o* zFWwMn<9Y7pKL5qfUE{NtN*+lzpbp}{3nf?LkYy>60>;UfSA2_$UlW37zjT?e-<$Hk zy?w$z{QW7V@XQvTuYKhfzjUKw??1T3-@5++fAoWgeD9sdaeWj8f9Gd!@P&QJgyNB^WuT6%btcDZrkqLWuLhLjjr#s{jLk)lAE>P<{gH# zGbbq0HzYl%% zH2N&tIB+@j>T~X&qveu=aLPrAF% zhyo$-2xRb4bjn$@j>^`fQH7L}TGuQV3mQ`ohSDw#Hq`<^DHY2XnkZbi_Cc0e?-=}u z4&r2|;_}`uH?Cb`Z(Olh%qYu}$<7$(9Y$*|U)krz&8rX`T5G1WDP>hgEdiw{R6)I1 zV2$STrAvJF(=QOb=Z&|1#OcWiJClklS1+-*Q}Tt+e2N!7{Ty%p=nbl>!@ z;8wzm-alzi-iMemR|229Mkz&E6?hLy6;x%3AW&6`O9wk#ySmG#p1;m-{^$P*|LJf1 z29gqM15&D}W1v*zRJR<+o%1W|Km=$+BR&Tt2!cpe2z*F1k!V9xtvRbLr*qA`c8qs+ zxO(}3gPn@~am84bF`Jz3XT76#j>h>IJXkb%=TI_$ZoufM13(Hsc$XZwNdJ(j-NswA zwHRxe&F6UM7>_4$eh9&>TQBg}zxr!WvjnUT2;RrJV~jy-P17_?r&B@*+_-TgD>`f& z!-@8c$0a+3z}AKn2bXs%RGK5kSWb0drz+SfK^x2C;{_+P8a0`4d1s6ifvPIlDFwE6 zOg&uMDIzrj@W$}C_DH3;x>Kxzms&e!7WT#kl?-T|?mbWU-W?-J_pT%=c&3Xv4~`my z5LEkn94JBK;qqRI44&y(!^5L9Oi=6}>~JtC&`rb4!sUYrWe7A5CL_hDkQX+BKr=U- zIk>c2QiyZg`v?@!2Nv@MkI&}JbznRmv%f##V5}&lz#GS@_Ke2`V zTOK}q#EDgmgkt~3C9drhj0migBr)Ae0OdUV9pmz}$^~s9OGz z1K^N*cJ)WwK`mFAzVGL4hw82}Te)RTyMh6^@7AZtoKxF;NY<~-Iq9OI~9-k z$DxPjZR|L=9{dmyvfLnFPL1$QT4;^<`SG*UMNu}R!ZqHYp#+ydJFxOHcx-3Z#H)GDazZkP;yjO=F@W zeOaUoszffcwSMVr#!SBt$=Q@p7DX(@ClV){z-&HazF6RcWt);}f%WKW%En2BC`bW- zwbF)nVo}6 zv7B9^EXd@fSZ6TSA*DiiVl@B}c=_d*`1ZHI!^i~Ey4DAi*1i%{lalKh{U?-QcW;NCy~$dc%JcThQgNj!);2DICJn9KYs1BH7@GARO0j8Mv--w%NEMSl zCwd!B^$^&7j&?<^&2*KX+tk*+t82|3LIddf-ZtajH{WyCo?P+Du5~GQKg;Fq=ja-2 z>Z9CsV2Duaw)U~j`nfITVbfJSO@m=s$6ciIZ1E@SYUbyEE}b{AsuU0sE;k9HcYfsz2k%$v?gFAiQTqqu(a8Oq6+qsI?<{+Sy*bL&~E(U`h6P*_G2 zft1TEw#Rv$)aX5<@r2+d-}v3%<6r!X|DAW=y-mF^Ol!m0tikz!R0@~03lIY5qhkFM z93QD9^1RYS>WirHprRf`vY}{`Aj=A4J+s-2$vA2?+_`g?S6=xplgS>JFI^)9o+#r; zdZJWOJ%1T^P*Nr}f46e>qBx~Z&br5Wi*qrMVVox*Xtd|i$(*?hxS$9^#_9(}EL|x$ zcS2pFJh&B>Bvu44#^ar*ZVbAfL$CyAaYhq@!+D3d7H4b>zz}s57R`c3hey;+&2&D) zIm>u7VN_OBMZwPG($+P;heF=E7UH&y+{cm8>x)wNDbg;3J?E7l+M#aeYuiURmE5dP zUpAzx50^G0z(dRE_OTQgKbtTOWPXBYZi2;`HCUgtZW_ctr5S5CXvpC>xTyUV8g zGO642XP<4iW%hEjfPL@SHve*z%AfXGefP>~U)vbG^VGd8)lkvkqwWB)@CKu>e8 zuB+&Jft)M&m_dyvJ_$i05)3-#FXgJ{`1ySkuiLYNDti&LrJ{)3{SQ9)fJcuWVpAP> zDI_*T$I2(?4Cf2!uj)P%AUIBTiBWx7~UDam|3=SF>%YgaE*s1cJfCu0&Vs%;n0w!?a^NLTJgw&`Ad4oTOB*LUdb+Nk^5*LO(VG`3y8 z&;5Se{kq<(?Ooe!Bll3))vs-KoqIUlG`6{=0dxAGPho$E6OwztZkw}xPF46{PD5V747Z`_Kn%Yt%M}_)WIkWd~hztgi%Q+xp(s_g%rYO`mQ1S>K%P zT4&dP-xnO**3NU*`keKs%Vzr4_pb38vZlA$Q0`o88{@9EId?DWdwy4c=0e$XA^W*~ zklU7v-|t&*Hoa??Qhkobz^1cJUtjcTN3`uFed~0WP4~_7ZPw15`L~VcM79WETcfi$ z2SkXxSh-N13yGhPy!i6dB4ug)@_ABGjYgcDp78o>uW@>OjI|bP?8^DOcu6VnUSNzt zNJ&{0SnDXuDniG-10e|^Lh7ZIRO1R`OoE#)dD9w%qACmU5or*-r>rWhbvVD|fD5d3 zF{27JO&y={l$ZAot$oxulQQ)SPt-l0pfL6wF0H z8%y07PEV%n?M~R+oluq|n#Q7a&02%7SJ9oHu|30(XoCgmc@zP7L@}sxkB%kj~a+wa}s zb1(iB*RS5di9m2Ev%9P=Kv=<~m)Xd$qPvI{!oXThV{06N##$Pq(Z*q&h_%@lnp%4r z3nmCuAsO!|imFIe5Mj);RBy z_+SeD)SCHx&hgPHM~5fWb&Ycoy`UGGx~e#N_GD|m+cwUB7p$>ukl=e1e9W%Tb42p`f^<3Ph_3ypFNl&$ z|Hz$(Ic@Kn-#I!KIZEw0Hkk7+U4o}=LDw#u>uSrkO7XeDWuTzR+C1b`|Fh^`gca z$8@@2ep*NBLshVUaKP^Vgvn?J7c9>_`#d*p-NH-BqVY5jkKpkMlf6BzUb~L-f#c&T zFMszHzWL2>ar^zd937uxOu%}DHUaBA0f|e(aXy3upN~}oB$D79@uvyRu`JCOVl6-+ zqr$%zvBX`Zmnb6mL&Oq>;{qXKg#aG}*2ciboe%C)map={r(fVxpZXM4HNyH>R*w*! zdx$}RWof~c9fv492;h7~Ao$?X+OTLejke5c&7!f?jb*VgXaf!js$jGuaUmAJTC;k?H3pDC(y*B8b>;F6ve|8soKNK@N0nE?w;$%KyH&=yt)Pb2gl=&7jLM83JR> zP5gF?fT7*cY75sT9z+u5YrpuKjkK40>)5vCkHB z_s5*IvP;A>_gr2K$*yhgBv=(bPw;+`MBs!dlD{e-sg*DPwc>zE2qeC?Qq=W=w|?{^ zjt>uG>ef5(9wh`tp-?*ob)%#5yNWz&sT9Fmyme8$FJ;dKv6Pz-5~&1LRVF7cD!v04 zqhqGsizvR9Gy^1p(YT_B^mdet8R#X%+a>4h<8%I>yrhzdBJp8~=!oFliXRJr4^N;X zRxJ@r1^$>(_abGIt;JbI@ET)0v)Z7IXJ<0z^kf=&>9S-|H;jrAWm(|yF{3UdN|tD2 zdGP3vo!uQ4v&TGq_z*$rH{Ry<`}a9InbDY7dC^#(od0v< z_db^Vb3qWRIZ9Mf5`u_jOEF3=|vG9aQRbmLG;P?jY^D(tdkq$(py!U?RG z9G^^i_nmk68^825b|*Uo7YHek6p}4RW=6{Xr;>!J2tefedl$tZeZXjowVvs$=43i& z-Z-@J@p(3YP$(JO6e}-8F-%G1PK)LIIsYTtWe`~FF~*~{##oIMg7J8Sq(nChytODP zaZ(_IBnXeT2JdVXxD<-uBSl9yb;MkxXi?Lc>_cJhp*Hs(ZJSKn_i}lIxoz#s0Q4Oa zyEeW}i+vGEaS*dskl$aU3^6Z*zr>`VJ9o@3IYyc8I{zrt$5v zv%bFV+W2#X$@)Z=x-yEn5bfOe>VjYAijL)GZTlRxp@L>PD4aH1>dL^i^=Ix_cOCrt zo;wunG-M6z3Z(W0d%J9~>wSl;&t3iAg%TP<@5tFFbI>Y7MaMSn1y8dswAuF%LAbsk zbq)<9rytwa{2_?JK4HhU^{)$3-xmc3tgH|ah@^86 z5-08@zXn%aX}x1f@h41m@NUv0fG+{>`W0$WqK4gDyA0^9G;AnX(A>>CkARjzkLEI$!#)W?8OQ7W8~h*24{|IRRCL|GJQT~kn6L}WPg4A+Qt3OSwnKxi?%-Mv-PfdpW`5PjdgB@zRgB+ z50^Rgo-W;%zC9)BaAMtwn7*7F|h?uCvJ|8|;JlZ~AUuHo0$(_FXx8K|}YLuDxdH zx;#W5r7zLYww7$NwVYsI7rm})jC03oD-po18*F?~IIjQ@!beM3EqUr8_=F0Oi7F75 z@@zmXwWh7+wby^hJMX@Y)(y^Dj5a{b=muxe!9~?~5jpYBSx6#o!3Tsq=V>dYl0rOK zXYs)!q`={kQpC)5;(9A7vBpxA6)Fk8IT7gxF2U57@M`NKEr9UjasDCc9avC>h+J_O z-_H|JA}ag~DWe!-xFBd0Nd5lAP~b@pt_K=}Pl$qfeTtHT;2gR(NEBKdjM0=zAf|!& ztYW+~LZHwF?tgg9e9@qrhN4tFJbaVm(=%qX8lyeVfk#9UJD-9OK2kA+_etHK1Rhyt z@IB6XoOOxM;Lo)V!g*$%W$-9O;XIItRM#@3&w20h&Y^@%vj5ZwXg0d_qk}zU98X+VRE#v(l(VLI!%2_PC9Jek3nB0S5U$i`TJ#5>oyEeNv zr>GAq+$G4@2j?H6WSbKK&w(0t-LH>Np2Ne>-5k3zK3ze8HgTy<2bUa}<0e)1J{rPM z?SO5Ab6s;GS755|dtC>du0u@@oOM(GZTjvIW%C?OjvR_X&U*|Ip6YW9a*!N30fJnO zicM|Hfu}wVEo+F~4;9o+6{K;H!Dw!ZYa48e!B*JDKiNFjitDEQ#^d%XI}%bcDZ6TCw= zH3UylBp7yZR8>V)DU6FkasiK&in54KWK`3SSyLg`+Am4j<=8gw0>Q`ZvO*#Yffb&z zC^6W`yS5H%4FQsXo?bbw;m4T$UtZpOgm)+r=?YTHSUDlV(xZ++34k%CTS#Ip9^jl~ zzHkvZFO#61k34duU|Kg6QsAtoD4;4uEJ+w7jrJ5(fi;GEcONmY7nGw4V=cATt4a_c zlDK0;gv9Y9K0^dtNbi@j)6pqSFneTF{$C35g(plV*_~Y78zIuWME!>ZppX3oF}RVw zU!?5&Xf)>2pZYXk`qG!#+1*WCe^zXk7;{(~YY~GgKJoVn9%~&2iaKyG1ML}6As;XpE#X!Jn(_ee|I+eq@7%Yj^HUdh<(g3SPKzafWQsoUPWejFH zztR#Y%Yw;dgmVU|EM=KAG?K{UPx|U}Y;v8_ZAHFvpsam-;kJ!-D4cTBCe!w_Asa^D zTHYqW)u$jm1Wk|wb!+SUuKwz>iMH%%U+|{O3CNAWcX4ua_ShV%L7(Vgm-ax{l}j(_ z3cPG;dyW8AuDDWLAGP&Qmko6}Z8^?i?x8Ce;@?Gc8X|VpXX80q965HrX|DCHlR15n zD?putFvwYlbI=%F&*?)UU9_7%{(V;&h+V3 zGrM(HXWyPUQraw?Wah(TMu?rmj7` zYmM#O@4M&)eHsj1T0^;GyXh)&p+3Er5QtXe4JkgbCVWOz|98P7Wr4GnAO6+%dGn3e z&`nJU4k0{csVK{e5Tekal@4tj&RKjCO!L-LsDf&@#M;Q?Z|VkZ3}sPJR3%kW;a!wg zmqMacbTPe;hyViY?ChX*;`lokokAh0n+E56;$=t2TS^gs|Km=ehFGRAi1P<|=RicI z_o6IY6-irfx#GA-hP@uJE-pn~VT~ODW>8xSiXhLn0 zLoO2v#K)|D(qRbU+7|G^U=un39}zDq{a%QW z%KOEvzDRvoD8+bGQC20R(Fm#1bEMQJmJTEDW#~YichXju1~H{u1~H{u1~H{ zu1~H{u1~HX@3qp4Yq>U-0UUO%OZuJPN_hEf&LF~T9GM6PH7(Ggl!0#H(-q(a-6mGwa)L=hb+ zDM7_DY)Tb4uTe@8f=V3qDB@p_CxHS8A)u7PJC90G_gHH_MY@Q;x7Oy} zG%Wv5tZLc^4@wDK@OT$cNt97hpo$TV^)%jKoTqLyXVV#4TY_Bj9uX8qYH*6ORGUp?+d$x^MW!g&+1c5+#`HlZyE0O_ zYgTSXFqi+9%RkJ8xNh^iobTjP8ge14+w@Ua)P6{IbI5&iY-1?jF$cmqWDJL97>Dw& zbIU5V-EY%9x9!KFBA0#dJ+usE-#XK0H(l-S>!;joOdnEVDE~93jUUIF*R@{ct`FM? zqCL&Nkb@i>vPP}jY@eNXefHz%$EVp#a@faawEVb8Itaa3NgSU~xKN?pEDUhlp zc!84fC3Ry`S-JSk@pytNqLZnc27t1RuWYPE3Q463LgISQ7d6QEKBzzt5@TYi!6gEK z)w}#;xYHp7thE$HkthJs!E{6?aVZ`rWYkfJ^aj6an4WBM0K_^ngH+idLgsxSqBB&1 z5CyZkVK$#*d{UTS$_*@e{elQ-my*;|QPR#iL~{N~Q1@85AUgKm$I1SnWnNpF#<0|d6hbl@k0`5vlm(N?4*Lgt>`W>O73Ydf zsDu^2L5S48Bq|s}EMMsz1i#AcD=7(1tTZS>1hrtTOQMGYr6kT9tZm}=@gM?4De*Sy z6(~8v`&e3Y&{j0?b>|XAn=>|u5Sas z`2CA*%26ne4t|c1*N`#HnLD`- zX)dLp4ThZ~9@{n^U3S&SN8Z*k>!aDUDe!mg6Mbt}*PQRVPv7303yIEI$NKo;IrNV{ z&6wP|*VYexYgFGp)wkF6wROn(r*A*)vYW26P~Usx&^h}kPi=cs4s~ZJjkIgt_Puvs zrG?zK=UlxafW1O6OOE$CWcy-gJn?sNUR7O2p}r6AeaKsHzCp8Cu)DJp1^BGPTNxeA z5Q7CSI0_ZT%#={r0JYXw>v6_my^oM-Ss=@Tq9}oYb{6L?MNuX`xIn5{9*rPkh8lrR z8FV29wYJO`nnvrm@rdO+#ftuNXck4ih_ksZ(iWm zv>I0bUJlT5T*SGf9)dtS$LVZ_wwCFl#(GZ>;XGR}WXxcPD3~Zxm4X;3iPa253dnfx zV?Qo`7hQDZRbP6Qvt|BSI%=V%(k!dU9Yu+WCZyvCS7@X=1o zLQxixiXf$;8jl!{${3#r4kgP-0g!9eFoJk;TtpPO^hr-3{ymnbR4SqfoK0m2Q*bJR z1Oft&H8tQ9)j)voNCo3@iFW}XB4VVd%Abf0Z^H%e`dQ!N*|u=DiL&KxPD9$=wV`hM zS&kxg-$AV}xR9&VoYS8}4>^5*@8aI&me3laVBI#RxtX}9MW%GwXxk?Lafuamjqj%S z?rKMyignj~ACghe8PB%+^##D%-lLBPnj^}Y6Wkaoyw^3SbGX87W1Jgs=^MkLf^}`{ zT;E#J)~`d9$ou*`N431|-$M@NIYGK@5ky_VxUP0w47RlO>(Kt|8oS&+=?il9?V~y3 zf1C7S`W)-rG3&GWu1Y&?-|f?l=<3^CJ(o@Ik-KJf>Em>X6b`ki92@8h0t`j^_3eAx zYIyX`wQWjdUc8ErZ{GJ0So7AOJ~3K~y4@ zDijIfFs3#dYYd_&kV@e~Kq`fhBI+oF6TYrbz*<#<^A5i7Z$fmm zl}fq-u}XrofuKBs0wI#%AmBtq8W<~BEG%b5%@1Gu5r6#6KVh;n=Gj}%B#U;5$^g~} z8f|H`!TEr;j?=RZ9_!bG1r~(BYO^Y(SS;xyF5rnYib5%V5?7xB_Qi!b zCrZ05bi2#R?{jiCeJ;0>K+XZRtG~7p8EjLR-qfz#EMRWrf7AE7#xch+%E@5mZrFXF z>uPsf+jAj$eI?e~1dMWE;%(w%+wMI%%HrG3%f5`~kkVH}#QSm`r@k!G5T~YZzUCgR zbLVu|`ZLst-v)}__a3=+lZ%GxTQ_qmk8Dek=xcY5I{eT*t`Aj~Th245@nLlr%(s@xRin5@rDpaWu5~PT1YJq25 zmF(_J68t(TsS`8S#u|c1YWhiQpl%F{M#o?RGC9jn4vG|NO^N>e9Ye}?S5+0A^^fs# z&Y_J-Ja>f@Q7vCd1tAK-;RECGi1BE=;?YNHKpLZzfnT;;DHY-JOXuH<`QWcU>Rj`w||4W^OLP`oLSs#+sT!SP+ zxom3;rdVq+-eH`j(HgC7Y?n4@9m@|k#$c?)I-djGX=bX}cIR}$I!PmY_b?(8Stpdc8Yi6r&)fRBZ_nylciYyCHg)wbhqtff zV-8)YFSwp#A35v)rn%bXjCQrHt?&D?@?8#bjtyR1fBH%@cCE!Z>(rC}N$9n$Hm5#k zpJ;o(u5)GAKHoO~a;XGeS1|-~*0TIWe=?-hY=U>Q(#eY+j*>-!=S#eY!^6kC`J*@a z-uJ)Dy?ghu*0ZP$-a8hHhDQ${Q`a>I`BoV~GiXO2Fc!-Etk;zeCUJ(TV-ual(_YUV`1%r^p51n&(=Wy2Itj8J??LtLb zf_E0@T|~$zNhu>$VJL5Cn`;QnYUpOvc4!)!MeIA2nAl^`dm*5@#G*;~%M8iKmc zrGjvwMDL|-P7awX+x9`|V_h@f$-p9J~MS(;xstP3FTymhjV|P3vgjko}C2qY+RT5%LmJYFBIo(nwN7+Se zhqdP#^(03%_+`PmbBzb2KnS%Gf)vXPH*0kw1S!BE5GomLOmnYkEG*Fl>CPcU#DS3K zU7iTFLL$z zHG&t3t{_-6n$!6_3jZ~hMWZRpf}$)Kj|-~tB=*}N>0rwoWhY&>J;Xs7 zGH1Fnr@5T=He1}(w_TszMk8e#?Uf<(V2C3>^h=Z9u?ivd7W!l;hJWT6?TrFr6E! zQHA#bB_xx{2uVN*xOV*tZKX0~XkwZ;2@kOdNl zaFJFJ5^4YuVddwJa%k-gAq1*WjLHgC#UO}XEciIDK)^bS4-RWBRar7FO7I>fBe!0a z6@@DB0UB#r7>)IAC6wov5R=ubtd-vL=fr;|(AK?*7e zDc6tyk&>XqlYxtnj2%%ln!);gREQHQ`phu#^3Zfd-32+k3_!`g)H%++BZaNpe?J_);DeMyiMkR$ica9>~gL?;l@oH{x<6JZBYNdOhC@TWSeZw zQ2V&}xvsgnEw{9*@A`h8%j?Zm-0vEv+`wAb80Nlb+vjr2iw$}1P^WACJ-gPBq3{23 zl^X2Z({kr(-~QINX0&~0s3t<&J#yCKF0G7B&+Q7D1w{yY{`Db#U{dc=R8@p`d$7(DkW}M>fW#PsnKx){ zI60e9*9K!fE|ALI$yl~dL_s;cW$7}BLgKw3SU~u5Ed7Q-kwP*VkC6ms^TkJc?Blw8 z2>4*}jmH{GQA$cBkwM}eIB$_kp`<_wfw2L}58gv^+RrD2 zOznykj+p5eSZk3|r3w%dXG7E*kOD7QiA(wvdyuNY2f=({DWu`OJNNmcZ~iHTD*4J+ zzJv=7t?S5}SBmLkf%kz?RZ^8Dg_4NiAvg+IBpZ+fe5^bWB!~h_jH@W6P%@PQB*ea1 ziYWRhXc&USh4{*zNOx%(i*78&Saf5sy1^TZ2#!TF$7+r9QT)$ngEuy!J&eUThmdh> zRH5)b3Ps9gpyVfTb%|~gKL!OZ?*4DP1HT&ZIhXk-T^--TzPL6Y&LsMvT%7?B6IW&{LInb3% z===Vry()+1&_^X|n=4&oIYgVNPY+`o=>L$ppR+gi?Yl$85!(V?oBFCx&tg-5<_2}z z_OQNnxNEJsczrwpfD4XcS(cofobbE9`wd=y?T67RX%<*xY3hc$Zm1i>qsPZQJUn7L ztI^tFU91dHsOa>}Pp9a{CPyj;7(xJIA{#FPPDie~k#PUP5l5%fRVLIphj)RZETiM& zqPSW_9yq)Q7b4H!Sx-?&B2-*qU4&ATVCBxcm74mw6E9iAq_5QLo2F*5DA}7#*xTKq zX&M@5`Egx7c(n6aF9=n|sE}A^v3OL7nP~}BRY?e`e4uj>WD@@i%Nla$NDdN5T_%qB zQc%x1ggVd63z-5xE};n$^}~ng%qkJ70Fj3t$JGTNDFQx3M23`+$M3*7kCZb0Y)#?c zvn?=sx*Pb2T5%_)0yVYAKfOn zKLi5LJ@+i$YDxvp2?`-7#sy_HqAUw4B^ixJ5n}HEDUt+&SnF1gMWCvZqAV$vVtlKr z7-{l`B>WdhWeX+RdK%-<)>CVPsWtUNqw9v?8l2HFKtaH0O`~g^H7Fsel)z|>Hx^k) zR8in{M6ncw1SK){$7h#qn@rn+82iBC?TipK1ji@WC)X#}C)X#}C)X#}C)X#}C)fXP zFQE{kLaM!UO7!wqTk4q)QQ_J68Af#zk^VcLMW`UAXwFaUpclRDzJx@Aln)ze#vf^B4&J(@}YAs){HM5 zg;b2kBh1Xj`+eNk+AVzu)LP@5O(ot^W;yZbm5A#3s#I9(V!yVPFa(gPv|afBh|2>xwRd06Z7?$!Py#T71c_K0tAb=3}yy1bLO1W-FsJ6W-dQuR#mQ*S>1i+ z48a{SIOy)ZYgc8iT-R@XYbEpp2?YMyHUQbCKfj-lS`Ip!_T)GWh@;Q_?y1Z@vjxO_ ztu(TaQ-R;u{GD<6uJrwRz12aOyBhp7_qV5je{E4o75dI4NdDwQhCeW3^Z=y9)ALgtrvMXxv$GSJ&VfL1*1+WvfYzqA24<6<+Ymwoj?;)>9Cqvg zM9f1aD7RgZ$*6~nqR6>}lt_rc;A3L@A3Uxuk2qXj;&}B0!4H^*1A~tC9s)cF!4_Fo$cY@A`m1P566b`r@2!2` zl7F(g?k%3Vy2i6ySF~H*vTsg2d;5#7g)zQ|d%N!X?{x&!P1l|8VV)*(>uYV@cX6#- zuhmoD_vX4NIp4fzb?>)X+xKkq%e4iA_&uJ*XVf9Lwu{%TOXD2fc+VTxe7|M-+Gl?s z&f<+aYM#DJPq%G(JRmhB!0-TkGJ%w2u3u z1dR_dk20j0WDp<(Akz9h#k7euSs*dyGpEFXu?CEg5*>!%eT0u5mJF;-gnS$$yl0qh z9*dWF2O=dTKnTF$;PJ*AZ=>rh&d*PAdb)>?1aj#b-L6Ln0Vk)YaFm$;PxhynLclQk zgkCTPK29mg&=~*`CUYndC$5B<2O!ZU7{oZidtO-oL&QP?csLBWxVXY_d4!;9P0xr~R-GldO!hbtgJMA7L~NOOIT+TOJZ|tulK{{%sudJ7gTqA%{+X+>o8TLI z97_e-Ql{6ax$BfawXSnZBeNnK>U-L}u6l1eQ!C+SD`;umzc30^8l6_~zXkD=0h2g- z&4s+3<1q&u!Vu05t-gsOzp?ejS&p!GeqoZxE%gVuL8;2xKGH>B1ulEPJzqfI+ zH)M~n(Qc&lF+Jt=#rl!@ot9}zoJZH{zgBW-<2!G(U&nyHCF(SJD4BzB?6mP87XEt4+ z>;0R}GuYr^xM{!iV6z*)NS~P-7cP;jOpd#ybxmVjKocW9m~5 zVS*up@#t}Rb--cpU^a+|7>~!q#!iHB@;NXy%ON(_=5c)qbnipRv)&0IWF~m#gc#0* zee*1ImwWqD#Xo`rBgD8U3LgTDbzn~O?1>V}z!-y=8RL0ob}uXq8Iyu$AT#Mpp*W5M zjz0C^Q?9!D@ka+~W(Is?NefaBfR&Zj&RcN0c)4*8k7Ei2!v@O98AD>zW*k!4p;ct%O8QE z4lxE?9^b{2iwm5epTkc9XXj_Qytsn19gc?y-EN;`BTq6&9V-lzM>p!%ZYbqw>{GmdIzCD_Jccl*)xEjo?+bv{yD}h-JR^l6U`gJCjnSI0zoqWK?#rl{Kvs-CzcFFj zv_Z5{AX?>M(|%D)25V$dTc5UcL=8F>M4t1zcPna2&>^#tQ&3_{7N0iKxxby~&IOaW=G!6NCr)-oa!<0D$y2 zq-wBpF0rA9RQ+XUbgqLB9^*8ni2&9tOzy;t7!uq%-6z9OQ|dvU$NzEB>kk7&An;Uc z>MY#jG~%6i-v#d9$9~`A{QMl_!zn?u@uPi(5D^XotaUKP!Wfr=`QWoKC6;)Dlu$9q zbO1cF#3w<${#Fz;E@&w35F03QCE}ea zAqUP_gW}W%q9f@#v92A@9I+4)-2Bz@7W|z{bEB z%E35*m_{$A1e0CID$+axFoKETW6bdXh~NXJDPSBurfI_Qa7-Kk!-T`-0n;?XdynHd zz)b}%gM&IA8t+{ZbW=-B+zqR@%u2nwcd|%kO z2G%M!D=0y|7U~%{@1smiwbm62GNHV$wNrnR0S)+}VDaaKxML~;H~Y2VaMS?(Ac_p>D%vX~^s-d-bM8s}5!SD~7fep&*tYwo9IQ?9W;rA@tdUvKFv)%vStf0XhOBC$aVNH?GH zRhHD!?nKnZGCfh+gYcZ<2*7noG9Js=mS3T(U(MiX#`Lx)@`oyW=1(iY%c2R}}^MLdxJ&i&`iIyIUY>6gG1 zz;PTfd5<0U2rr@1J10exS3#Z?umC@pRyL2FMudb1&FX1qrt%we)!G>jzhqQ zUituDc(~fygaRu{FTOlPe5^$L{PDX17P*?a=S`aK?gtNC_yyqL?|i zG9)xcYJ-S@;eEu_VZi0Z6~;{dcN|8H)08<5(zJ_d@&FR~;WT;}0Kt1qM2I_w7(5P_ zN9=Yzy3XO`bdSgc=78gHym40Rby>!zNdnx&5WYGF`uB6Bk`0-Hb0uG3HT0!%T6}7q z-7Vxl1x{ray>=?3vw(Gi1yDhWfif6s1SonfMDebjNnX~N8jSiSlBf7yT`gR%1#zwP zp4CjTTA!uowXEFCV?$Ksp11&7Y6u(`#*iU`O%h{2Q8{K+)o%Xo96-u;3)<)<)dANW zD3Gewsp^iFcO?@j);d3CwSQHgr#u0b{LHY=>)8F}nVLuNQjv#V`z*w{fUYcSc>LshttXvi)}7EtCT`&8J)RX0nUR<>--`n@pQEq(|=K)_8tG~WB=_tvH{e}3}d7~q`6 zG!v;Y!x{_MximhGQ@{L@oo97YncJ2lzutZPC{_KvhaX4$*}k%*#aLvJ86hx^hava* zXJ|hFO9sbqfMG%)PQCk6YAGN?n5Iz}my`ox1cXHDn1lAza={q9M`T9tdQ3bePKa!@ zi6i=c2kQ)ChzlBH@-u2;ZWRbA`Lk4uavy@RS$RkYCq_o3#C0$yi9!f)Ia%bV366RI z5q;mobv=A!97hirg8*O{C!9Wdf~(_zApqwmdpvmVe!2%kiCy0_d|(Vm4?i*beN6W> zMc6&i^*wf7hh5jff?zVQ1&Cl`rjX1?6Jrb_PkCZON|yNG(^yMR|9=VrVMfd#Jrl>& zj^e#f34n3J#S=zn0Z_ytpP$2F#QtQDzPA|1dJ4czBqHyHNawb5-2vH`D6+z;f;v|> zSErj~pC6SDBP}B>MK-)_Gp04lse92>g%cYn}HQCXqWEaU^Vk*{ph1E&tZT^+8n2Ea@Kd%mViArGBdc1faZB%QpPD;@M8$%-EQNnf0st8df^K)>aos?=EkP0HW2(0D< zQC8H^LX<8^C6cx4#b?SZ#aQ$zX*;K5U`-TQ0V)akX;n+Pn!BqG@@^b_I4_odO

  • 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 mjqJ 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�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

    term-text
    description-text - // then after all replacements have been made, the extra
    at the start of the + // then after all replacements have been made, the extra at the start of the // first line can be removed. HTML5 allows the tag to be missing from the end of the last line. // Using '(?\n"; $eatLeadingSpaces = '(?: |[ \t])*'; // prevent spaces infront of [*= from adding another line to the previous element $listElements = preg_replace('/^(\n|
    )/', '', $match[2]); // ltrim the first newline $listElements = preg_replace( - '/' . $eatLeadingSpaces . '\[\*=([[:print:]]*?)(?$1
    ', + '/' . $eatLeadingSpaces . '\[\*=([[:print:]]*?)(?$1
    ', $listElements ); // Unescape any \] inside the
    tags $listElements = preg_replace_callback('/
    (.*?)<\/dt>/ism', 'bb_definitionList_unescapeBraces', $listElements); - + // Remove the extra at the start of the string, if there is one. $firstOpenTag = strpos($listElements, '
    '); $firstCloseTag = strpos($listElements, $closeDescriptionTag); - if ($firstCloseTag !== false && ($firstOpenTag === false || ($firstCloseTag < $firstOpenTag))) { + if ($firstCloseTag !== false && ($firstOpenTag === false || ($firstCloseTag < $firstOpenTag))) { $listElements = preg_replace( '/<\/dd>/ism', '', $listElements, 1); } @@ -802,7 +822,7 @@ function bb_imgoptions($match) { // $Text = preg_replace_callback("/\[([zi])mg([ \=])(.*?)\](.*?)\[\/[zi]mg\]/ism",'bb_imgoptions',$Text); // alt text cannot contain ']' - + // [img|zmg=wwwxhhh float=left|right alt=alt text]url[/img|zmg] $local_match = null; @@ -818,7 +838,7 @@ function bb_imgoptions($match) { if ($x) { $alt = $matches[1]; } - + $x = preg_match("/alt=\"\;(.*?)\"\;/ism", $attributes, $matches); if ($x) { $alt = $matches[1]; @@ -828,7 +848,7 @@ function bb_imgoptions($match) { if ($x) { $width = $matches[1]; } - + $x = preg_match("/width=\"\;(.*?)\"\;/ism", $attributes, $matches); if ($x) { $width = $matches[1]; @@ -838,7 +858,7 @@ function bb_imgoptions($match) { if ($x) { $height = $matches[1]; } - + $x = preg_match("/height=\"\;(.*?)\"\;/ism", $attributes, $matches); if ($x) { $height = $matches[1]; @@ -848,14 +868,14 @@ function bb_imgoptions($match) { if ($x) { $style = $matches[1]; } - + $x = preg_match("/style=\"\;(.*?)\"\;/ism", $attributes, $matches); if ($x) { $style = $matches[1]; } // legacy img options - + if ($match[2] === '=') { // pull out (optional) legacy size declarations first if (preg_match("/([0-9]*)x([0-9]*)/ism",$match[3],$local_match)) { @@ -873,16 +893,16 @@ function bb_imgoptions($match) { $float = 'right'; $match[3] = substr($match[3],$n + 11); } - + // finally alt text which extends to the close of the tag if ((! $alt) && ($n = strpos($match[3],'alt=') !== false)) { $alt = substr($match[3],$n + 4); } // now assemble the resulting img tag from these components - + $output = ''; - + return $output; - + } function bb_code_protect($s) { @@ -914,14 +934,14 @@ function bb_code_unprotect_sub($match) { } function bb_code($match) { - if(strpos($match[0], "
    ")) + if(strpos($match[0], PHP_EOL)) return '
    ' . bb_code_protect(trim($match[1])) . '
    '; else return '' . bb_code_protect(trim($match[1])) . ''; } function bb_code_options($match) { - if(strpos($match[0], "
    ")) { + if(strpos($match[0], PHP_EOL)) { $class = ""; $pre = true; } else { @@ -935,7 +955,7 @@ function bb_code_options($match) { } if($pre) { return '
    ' . bb_code_protect(trim($match[2])) . '
    '; - } else { + } else { return '' . bb_code_protect(trim($match[2])) . ''; } } @@ -949,7 +969,7 @@ function bb_fixtable_lf($match) { // remove extraneous whitespace between table element tags since newlines will all // be converted to '
    ' and turn your neatly crafted tables into a whole lot of // empty space. - + $x = preg_replace("/\]\s+\[/",'][',$match[1]); return '[table]' . $x . '[/table]'; @@ -966,7 +986,7 @@ function bbtopoll($s) { $pl['poll_id'] = $match[1]; $pl['poll_question'] = $match[2]; - $match = ''; + $match = []; if(preg_match_all("/\[poll\-answer=(.*?)\](.*?)\[\/poll\-answer\]/is",$s,$match,PREG_SET_ORDER)) { $pl['answer'] = []; foreach($match as $m) { @@ -991,7 +1011,7 @@ function parseIdentityAwareHTML($Text) { } if (strpos($Text,'[pre]') !== false) { $Text = preg_replace_callback("/\[pre\](.*?)\[\/pre\]/ism", 'bb_spacefy',$Text); - } + } // process [observer] tags before we do anything else because we might // be stripping away stuff that then doesn't need to be worked on anymore @@ -1012,7 +1032,7 @@ function parseIdentityAwareHTML($Text) { $Text = preg_replace("/\[observer\=0\](.*?)\[\/observer\]/ism", '$1', $Text); $Text = preg_replace("/\[rpost(=.*?)?\](.*?)\[\/rpost\]/ism", '', $Text); } - } + } // replace [observer.baseurl] if ($observer) { $s1 = ''; @@ -1033,11 +1053,11 @@ function parseIdentityAwareHTML($Text) { $Text = str_replace('[observer.webname]','',$Text); $Text = str_replace('[observer.photo]','', $Text); } - - $Text = str_replace(array('[baseurl]','[sitename]'),array(z_root(),get_config('system','sitename')),$Text); - - // Unhide all [noparse] contained bbtags unspacefying them + $Text = str_replace(array('[baseurl]','[sitename]'),array(z_root(),get_config('system','sitename')),$Text); + + + // Unhide all [noparse] contained bbtags unspacefying them // and triming the [noparse] tag. if (strpos($Text,'[noparse]') !== false) { $Text = preg_replace_callback("/\[noparse\](.*?)\[\/noparse\]/ism", 'bb_unspacefy_and_trim', $Text); @@ -1153,23 +1173,8 @@ function bbcode($Text, $options = []) { $Text = preg_replace_callback("/\[table\](.*?)\[\/table\]/ism",'bb_fixtable_lf',$Text); - // Convert new line chars to html
    tags - - // nlbr seems to be hopelessly messed up - // $Text = nl2br($Text); - - // We'll emulate it. - - $Text = str_replace("\r\n", "\n", $Text); - $Text = str_replace(array("\r", "\n"), array('
    ', '
    '), $Text); - - if ($preserve_nl) - $Text = str_replace(array("\n", "\r"), array('', ''), $Text); - - $Text = str_replace(array("\t", " "), array("    ", "  "), $Text); - // Check for [code] text if (strpos($Text,'[code]') !== false) { $Text = preg_replace_callback("/\[code\](.*?)\[\/code\]/ism", 'bb_code', $Text); @@ -1219,9 +1224,12 @@ function bbcode($Text, $options = []) { $Text = preg_replace("/([^\]\='".'"'."\;\/]|^|\#\^)(https?\:\/\/$urlchars+)/ismu", '$1
    $2', $Text); } - if (strpos($Text,'[/share]') !== false) { + $count = 0; + while (strpos($Text,'[/share]') !== false && $count < 10) { $Text = preg_replace_callback("/\[share(.*?)\](.*?)\[\/share\]/ism", 'bb_ShareAttributes', $Text); + $count ++; } + if($tryoembed) { if (strpos($Text,'[/url]') !== false) { $Text = preg_replace_callback("/[^\^]\[url\]([$URLSearchString]*)\[\/url\]/ism", 'tryoembed', $Text); @@ -1266,7 +1274,7 @@ function bbcode($Text, $options = []) { $Text = preg_replace("/\[map\]/", '
    ', $Text); } } - + // Check for bold text if (strpos($Text,'[b]') !== false) { $Text = preg_replace("(\[b\](.*?)\[\/b\])ism", '$1', $Text); @@ -1349,7 +1357,7 @@ function bbcode($Text, $options = []) { // Check for table of content with params while(strpos($Text,'[toc') !== false) { $toc_id = 'toc-' . random_string(10); - $Text = preg_replace("/\[toc([^\]]+?)\]/ism", '
      ', $Text, 1); + $Text = preg_replace("/\[toc([^\]]+?)\]/ism", '
        ', $Text, 1); } // Check for centered text if (strpos($Text,'[/center]') !== false) { @@ -1392,8 +1400,8 @@ function bbcode($Text, $options = []) { $Text = preg_replace("/\[li\](.*?)\[\/li\]/ism", '
      • $1
      • ', $Text); // [dl] tags have an optional [dl terms="bi"] form where bold/italic/underline/mono/large - // etc. style may be specified for the "terms" in the definition list. The quotation marks - // are also optional. The regex looks intimidating, but breaks down as: + // etc. style may be specified for the "terms" in the definition list. The quotation marks + // are also optional. The regex looks intimidating, but breaks down as: // "[dl" "]" "[/dl]" // where optional-termStyles are: "terms=" $Text = preg_replace_callback('/\[dl[[:space:]]*(?:terms=(?:"|")?([a-zA-Z]+)(?:"|")?)?\](.*?)\[\/dl\]/ism', 'bb_definitionList', $Text); @@ -1432,7 +1440,7 @@ function bbcode($Text, $options = []) { if(strpos($Text,'[/summary]') !== false) { - $Text = preg_replace_callback("/^(.*?)\[summary\](.*?)\[\/summary\](.*?)$/ism", 'bb_summary', $Text); + $Text = preg_replace_callback("/^(.*?)\[summary\](.*?)\[\/summary\](.*?)$/is", 'bb_summary', $Text); } // Check for [spoiler] text @@ -1522,18 +1530,18 @@ function bbcode($Text, $options = []) { // html5 video and audio if (strpos($Text,'[/video]') !== false) { - $Text = preg_replace_callback("/\[video (.*?)\](.*?\.(ogg|ogv|oga|ogm|webm|mp4|mpeg|mpg))\[\/video\]/ism", 'videowithopts', $Text); - $Text = preg_replace_callback("/\[video\](.*?\.(ogg|ogv|oga|ogm|webm|mp4|mpeg|mpg))\[\/video\]/ism", 'tryzrlvideo', $Text); + $Text = preg_replace_callback("/\[video (.*?)\](.*?)\[\/video\]/ism", 'videowithopts', $Text); + $Text = preg_replace_callback("/\[video\](.*?)\[\/video\]/ism", 'tryzrlvideo', $Text); } if (strpos($Text,'[/audio]') !== false) { - $Text = preg_replace_callback("/\[audio\](.*?\.(ogg|ogv|oga|ogm|webm|mp4|mp3|opus|m4a))\[\/audio\]/ism", 'tryzrlaudio', $Text); + $Text = preg_replace_callback("/\[audio\](.*?)\[\/audio\]/ism", 'tryzrlaudio', $Text); } if (strpos($Text,'[/zvideo]') !== false) { - $Text = preg_replace_callback("/\[zvideo (.*?)\](.*?\.(ogg|ogv|oga|ogm|webm|mp4|mpeg|mpg))\[\/zvideo\]/ism", 'videowithopts', $Text); - $Text = preg_replace_callback("/\[zvideo\](.*?\.(ogg|ogv|oga|ogm|webm|mp4|mpeg|mpg))\[\/zvideo\]/ism", 'tryzrlvideo', $Text); + $Text = preg_replace_callback("/\[zvideo (.*?)\](.*?)\[\/zvideo\]/ism", 'videowithopts', $Text); + $Text = preg_replace_callback("/\[zvideo\](.*?)\[\/zvideo\]/ism", 'tryzrlvideo', $Text); } if (strpos($Text,'[/zaudio]') !== false) { - $Text = preg_replace_callback("/\[zaudio\](.*?\.(ogg|ogv|oga|ogm|webm|mp4|mp3|opus|m4a))\[\/zaudio\]/ism", 'tryzrlaudio', $Text); + $Text = preg_replace_callback("/\[zaudio\](.*?)\[\/zaudio\]/ism", 'tryzrlaudio', $Text); } // SVG stuff @@ -1579,7 +1587,7 @@ function bbcode($Text, $options = []) { // If we found an event earlier, strip out all the event code and replace with a reformatted version. // Replace the event-start section with the entire formatted event. The other bbcode is stripped. - // Summary (e.g. title) is required, earlier revisions only required description (in addition to + // Summary (e.g. title) is required, earlier revisions only required description (in addition to // start which is always required). Allow desc with a missing summary for compatibility. if ((x($ev,'desc') || x($ev,'summary')) && x($ev,'dtstart')) { @@ -1588,7 +1596,7 @@ function bbcode($Text, $options = []) { $sub = str_replace('$',"\0",$sub); - $Text = preg_replace("/\[event\-start\](.*?)\[\/event\-start\]/ism",$sub,$Text); + $Text = preg_replace("/\[event\-start\](.*?)\[\/event\-start\]/ism",$sub,$Text); $Text = preg_replace("/\[event\](.*?)\[\/event\]/ism",'',$Text); $Text = preg_replace("/\[event\-summary\](.*?)\[\/event\-summary\]/ism",'',$Text); @@ -1603,7 +1611,7 @@ function bbcode($Text, $options = []) { } - // Unhide all [noparse] contained bbtags unspacefying them + // Unhide all [noparse] contained bbtags unspacefying them // and triming the [noparse] tag. if (strpos($Text,'[noparse]') !== false) { $Text = preg_replace_callback("/\[noparse\](.*?)\[\/noparse\]/ism", 'bb_unspacefy_and_trim', $Text); @@ -1633,6 +1641,19 @@ function bbcode($Text, $options = []) { $Text = bb_replace_images($Text, $saved_images); + // Convert new line chars to html
        tags + + // nlbr seems to be hopelessly messed up + // $Text = nl2br($Text); + + // We'll emulate it. + + $Text = str_replace("\r\n", "\n", $Text); + $Text = str_replace(array("\r", "\n"), array('
        ', '
        '), $Text); + + if ($preserve_nl) + $Text = str_replace(array("\n", "\r"), array('', ''), $Text); + call_hooks('bbcode', $Text); return $Text; diff --git a/include/bookmarks.php b/include/bookmarks.php index 21456c871..145119347 100644 --- a/include/bookmarks.php +++ b/include/bookmarks.php @@ -18,7 +18,7 @@ function bookmark_add($channel,$sender,$taxonomy,$private,$opts = null) { $channel_id = $channel['channel_id']; if($private) - $iarr['contact_allow'] = array($channel['channel_hash']); + $iarr['contact_allow'] = array($channel['channel_hash']); $iarr['mitem_link'] = $taxonomy['url']; $iarr['mitem_desc'] = $taxonomy['term']; $iarr['mitem_flags'] = (($ischat) ? MENU_ITEM_CHATROOM : 0); @@ -41,34 +41,34 @@ function bookmark_add($channel,$sender,$taxonomy,$private,$opts = null) { if(! $menu_id) { $x = menu_list($arr['menu_channel_id'],$arr['menu_name'],$arr['menu_flags']); - if($x) + if($x) $menu_id = $x[0]['menu_id']; - else + else $menu_id = menu_create($arr); } if(! $menu_id) { logger('bookmark_add: unable to create menu ' . $arr['menu_name']); - return; + return; } logger('add_bookmark: menu_id ' . $menu_id); $r = q("select * from menu_item where mitem_link = '%s' and mitem_menu_id = %d and mitem_channel_id = %d limit 1", dbesc($iarr['mitem_link']), intval($menu_id), - intval($channel_id) + intval($channel_id) ); if($r) logger('add_bookmark: duplicate menu entry', LOGGER_DEBUG); if(! $r) { $r = menu_add_item($menu_id,$channel_id,$iarr); - menu_sync_packet($channel_id,get_observer_hash(),$menu_id); + menu_sync_packet($channel_id,get_observer_hash(),$menu_id); } return $r; } function get_bookmark_link($observer) { - if((! $observer) || ($observer['xchan_network'] !== 'zot')) + if((! $observer) || !in_array($observer['xchan_network'], ['zot6', 'zot'])) return ''; $h = @parse_url($observer['xchan_url']); diff --git a/include/channel.php b/include/channel.php index f2e7a703c..1eb3be96d 100644 --- a/include/channel.php +++ b/include/channel.php @@ -9,6 +9,7 @@ use Zotlabs\Access\PermissionRoles; use Zotlabs\Access\PermissionLimits; use Zotlabs\Access\Permissions; use Zotlabs\Daemon\Master; +use Zotlabs\Lib\Crypto; use Zotlabs\Lib\System; use Zotlabs\Render\Comanche; use Zotlabs\Lib\Libzot; @@ -107,7 +108,7 @@ function create_sys_channel() { if ((! get_config('system', 'pubkey')) && (! get_config('system', 'prvkey'))) { require_once('include/crypto.php'); - $hostkey = new_keypair(4096); + $hostkey = Crypto::new_keypair(4096); set_config('system', 'pubkey', $hostkey['pubkey']); set_config('system', 'prvkey', $hostkey['prvkey']); } @@ -232,10 +233,10 @@ function create_identity($arr) { } $guid = Libzot::new_uid($nick); - $key = new_keypair(4096); + $key = Crypto::new_keypair(4096); // legacy zot - $zsig = base64url_encode(rsa_sign($guid,$key['prvkey'])); + $zsig = base64url_encode(Crypto::sign($guid,$key['prvkey'])); $zhash = make_xchan_hash($guid,$zsig); // zot6 @@ -345,7 +346,7 @@ function create_identity($arr) { 'hubloc_addr' => channel_reddress($ret['channel']), 'hubloc_primary' => intval($primary), 'hubloc_url' => z_root(), - 'hubloc_url_sig' => base64url_encode(rsa_sign(z_root(),$ret['channel']['channel_prvkey'])), + 'hubloc_url_sig' => base64url_encode(Crypto::sign(z_root(),$ret['channel']['channel_prvkey'])), 'hubloc_host' => App::get_hostname(), 'hubloc_callback' => z_root() . '/post', 'hubloc_sitekey' => get_config('system','pubkey'), @@ -603,9 +604,9 @@ function change_channel_keys($channel) { $stored = []; - $key = new_keypair(4096); + $key = Crypto::new_keypair(4096); - $sig = base64url_encode(rsa_sign($channel['channel_guid'],$key['prvkey'])); + $sig = base64url_encode(Crypto::sign($channel['channel_guid'],$key['prvkey'])); $hash = make_xchan_hash($channel['channel_guid'],$sig); $stored['old_guid'] = $channel['channel_guid']; @@ -614,7 +615,7 @@ function change_channel_keys($channel) { $stored['old_hash'] = $channel['channel_hash']; $stored['new_key'] = $key['pubkey']; - $stored['new_sig'] = base64url_encode(rsa_sign($key['pubkey'],$channel['channel_prvkey'])); + $stored['new_sig'] = base64url_encode(Crypto::sign($key['pubkey'],$channel['channel_prvkey'])); // Save this info for the notifier to collect @@ -651,7 +652,7 @@ function change_channel_keys($channel) { foreach($h as $hv) { $hv['hubloc_guid_sig'] = $sig; $hv['hubloc_hash'] = $hash; - $hv['hubloc_url_sig'] = base64url_encode(rsa_sign(z_root(),$modified['channel_prvkey'])); + $hv['hubloc_url_sig'] = base64url_encode(Crypto::sign(z_root(),$modified['channel_prvkey'])); hubloc_store_lowlevel($hv); } } @@ -890,20 +891,27 @@ function identity_basic_export($channel_id, $sections = null, $zap_compat = fals unset($ret['channel']['channel_salt']); } if ($zap_compat) { - $channel['channel_guid_sig'] = 'sha256.' . $channel['channel_guid_sig']; - $channel['channel_hash'] = $channel['channel_portable_id']; - unset($channel['channel_portable_id']); + unset($ret['channel']['channel_portable_id']); } - - } if(in_array('channel',$sections) || in_array('profile',$sections)) { $r = q("select * from profile where uid = %d", intval($channel_id) ); - if($r) + if($r) { $ret['profile'] = $r; + if ($zap_compat) { + // zap only supports one profile + foreach ($r as $rv) { + if ($rv['is_default']) { + $ret['profile'] = [ $rv ]; + break; + } + } + } + } + $r = q("select mimetype, content, os_storage from photo where imgscale = 4 and photo_usage = %d and uid = %d limit 1", @@ -936,50 +944,47 @@ function identity_basic_export($channel_id, $sections = null, $zap_compat = fals $newconfig = []; $abconfig = load_abconfig($channel_id,$ret['abook'][$x]['abook_xchan']); - // Partly revert of commit 85cf25a2a8bfbbfe10de485d4affd54626fbbfa4 if($abconfig) { - $ret['abook'][$x]['abconfig'] = $abconfig; - } - - /* This was added in commit 85cf25a2a8bfbbfe10de485d4affd54626fbbfa4 - * Seems unfinished work on zap compatibility for cloning. - * It breaks cloning of abconfig for hubzilla - reverted to the above code. - - if($abconfig) { - foreach ($abconfig as $abc) { - - if ($abc['cat'] === 'my_perms' && intval($abc['v'])) { - $my_perms[] = $abc['k']; - continue; - } - if ($abc['cat'] === 'their_perms' && intval($abc['v'])) { - $their_perms[] = $abc['k']; - continue; - } - if ($zap_compat && preg_match('|^a:[0-9]+:{.*}$|s', $abc['v'])) { - $abc['v'] = serialise(unserialize($abc['v'])); - } - $newconfig[] = $abc; - } - - $ret['abook'][$x]['abconfig'] = $newconfig; - if ($zap_compat) { - $ret['abook'][$x]['abconfig'][] = [ 'chan' => $channel_id, 'xchan' => $ret['abook'][$x]['abook_chan'], 'cat' => 'system', 'k' => 'my_perms', 'v' => implode(',',$my_perms) ]; - $ret['abook'][$x]['abconfig'][] = [ 'chan' => $channel_id, 'xchan' => $ret['abook'][$x]['abook_chan'], 'cat' => 'system', 'k' => 'their_perms', 'v' => implode(',',$their_perms) ]; + foreach ($abconfig as $abc) { + + if ($abc['cat'] === 'my_perms') { + if (intval($abc['v'])) { + $my_perms[] = $abc['k']; + } + continue; + } + if ($abc['cat'] === 'their_perms') { + if (intval($abc['v'])) { + $their_perms[] = $abc['k']; + } + continue; + } + if (preg_match('|^a:[0-9]+:{.*}$|s', $abc['v'])) { + $abc['v'] = serialise(unserialize($abc['v'])); + } + $newconfig[] = $abc; + } + + $ret['abook'][$x]['abconfig'] = $newconfig; + + $ret['abook'][$x]['abconfig'][] = [ 'chan' => $channel_id, 'xchan' => $ret['abook'][$x]['abook_xchan'], 'cat' => 'system', 'k' => 'my_perms', 'v' => implode(',',$my_perms) ]; + $ret['abook'][$x]['abconfig'][] = [ 'chan' => $channel_id, 'xchan' => $ret['abook'][$x]['abook_xchan'], 'cat' => 'system', 'k' => 'their_perms', 'v' => implode(',',$their_perms) ]; + + } + else { + $ret['abook'][$x]['abconfig'] = $abconfig; } } - */ + translate_abook_perms_outbound($ret['abook'][$x]); } - - // pick up the zot xchan and hublocs also - if($ret['channel']['channel_portable_id']) { + if($ret['channel']['channel_portable_id'] && ! $zot_compat) { $xchans[] = $ret['channel']['channel_portable_id']; } @@ -1090,13 +1095,24 @@ function identity_basic_export($channel_id, $sections = null, $zap_compat = fals } if(in_array('events',$sections)) { - $r = q("select * from event where uid = %d", + + // @fixme - Not totally certain how to handle $zot_compat for the event timezone which exists + // in Hubzilla but is stored with the item and not the event. In Zap, stored information is + // always UTC and localised on access as per standard conventions for working with global time data. + + // Older Zot (pre-Zot6) records aren't translated correctly w/r/t AS2 so only include events for the last year or so if + // migrating to Zap. + + $sqle = (($zap_compat) ? " and created > '2020-01-01 00:00:00' " : ''); + + $r = q("select * from event where uid = %d $sqle", intval($channel_id) ); - if($r) + if ($r) { $ret['event'] = $r; + } - $r = q("select * from item where resource_type = 'event' and uid = %d", + $r = q("select * from item where resource_type = 'event' and uid = %d $sqle", intval($channel_id) ); if($r) { @@ -1104,7 +1120,7 @@ function identity_basic_export($channel_id, $sections = null, $zap_compat = fals xchan_query($r); $r = fetch_post_tags($r,true); foreach($r as $rr) - $ret['event_item'][] = encode_item($rr,true); + $ret['event_item'][] = encode_item($rr,true, $zap_compat); } } @@ -1127,7 +1143,7 @@ function identity_basic_export($channel_id, $sections = null, $zap_compat = fals xchan_query($r); $r = fetch_post_tags($r,true); foreach($r as $rr) - $ret['webpages'][] = encode_item($rr,true); + $ret['webpages'][] = encode_item($rr,true, $zap_compat); } } @@ -1164,7 +1180,7 @@ function identity_basic_export($channel_id, $sections = null, $zap_compat = fals xchan_query($r); $r = fetch_post_tags($r,true); foreach($r as $rv) { - $ret['wiki'][] = encode_item($rv,true); + $ret['wiki'][] = encode_item($rv,true, $zap_compat); } } } @@ -1189,7 +1205,7 @@ function identity_basic_export($channel_id, $sections = null, $zap_compat = fals xchan_query($r); $r = fetch_post_tags($r,true); foreach($r as $rr) - $ret['item'][] = encode_item($rr,true); + $ret['item'][] = encode_item($rr,true, $zap_compat); } } @@ -1222,7 +1238,7 @@ function identity_basic_export($channel_id, $sections = null, $zap_compat = fals * * \e array \b relocate - (optional) * * \e array \b item - array with items encoded_item() */ -function identity_export_year($channel_id, $year, $month = 0) { +function identity_export_year($channel_id, $year, $month = 0, $zap_compat = false) { if(! $year) return array(); @@ -1240,7 +1256,7 @@ function identity_export_year($channel_id, $year, $month = 0) { else $maxdate = datetime_convert('UTC', 'UTC', $year+1 . '-01-01 00:00:00'); - return channel_export_items_date($channel_id,$mindate,$maxdate); + return channel_export_items_date($channel_id,$mindate,$maxdate, $zap_compat); } @@ -1255,7 +1271,7 @@ function identity_export_year($channel_id, $year, $month = 0) { * @return array */ -function channel_export_items_date($channel_id, $start, $finish) { +function channel_export_items_date($channel_id, $start, $finish, $zap_compat = false) { if(! $start) return array(); @@ -1273,6 +1289,11 @@ function channel_export_items_date($channel_id, $start, $finish) { $ret['relocate'] = [ 'channel_address' => $ch['channel_address'], 'url' => z_root()]; } + if ($zap_compat) { + $ret['compatibility']['codebase'] = 'zap'; + } + + $r = q("select * from item where ( item_wall = 1 or item_type != %d ) and item_deleted = 0 and uid = %d and created >= '%s' and created <= '%s' and resource_type != 'photo' order by created", intval(ITEM_TYPE_POST), intval($channel_id), @@ -1285,7 +1306,7 @@ function channel_export_items_date($channel_id, $start, $finish) { xchan_query($r); $r = fetch_post_tags($r, true); foreach($r as $rr) - $ret['item'][] = encode_item($rr, true); + $ret['item'][] = encode_item($rr, true, $zap_compat); } return $ret; @@ -1303,7 +1324,7 @@ function channel_export_items_date($channel_id, $start, $finish) { * @return array */ -function channel_export_items_page($channel_id, $start, $finish, $page = 0, $limit = 50) { +function channel_export_items_page($channel_id, $start, $finish, $page = 0, $limit = 50, $zap_compat = false) { if(intval($page) < 1) { $page = 0; @@ -1335,6 +1356,11 @@ function channel_export_items_page($channel_id, $start, $finish, $page = 0, $lim $ret['relocate'] = [ 'channel_address' => $ch['channel_address'], 'url' => z_root()]; } + if ($zap_compat) { + $ret['compatibility']['codebase'] = 'zap'; + } + + $r = q("select * from item where ( item_wall = 1 or item_type != %d ) and item_deleted = 0 and uid = %d and resource_type != 'photo' and created >= '%s' and created <= '%s' order by created limit %d offset %d", intval(ITEM_TYPE_POST), intval($channel_id), @@ -1349,7 +1375,7 @@ function channel_export_items_page($channel_id, $start, $finish, $page = 0, $lim xchan_query($r); $r = fetch_post_tags($r, true); foreach($r as $rr) - $ret['item'][] = encode_item($rr, true); + $ret['item'][] = encode_item($rr, true, $zap_compat); } return $ret; diff --git a/include/cli_startup.php b/include/cli_startup.php index a4c1f629a..b9e7d124d 100644 --- a/include/cli_startup.php +++ b/include/cli_startup.php @@ -9,4 +9,4 @@ function cli_startup() { sys_boot(); App::set_baseurl(get_config('system','baseurl')); -} \ No newline at end of file +} diff --git a/include/connections.php b/include/connections.php index 99a4cc71e..87db7faa9 100644 --- a/include/connections.php +++ b/include/connections.php @@ -211,8 +211,8 @@ function mark_orphan_hubsxchans() { if($dirmode == DIRECTORY_MODE_NORMAL) return; - $r = q("update hubloc set hubloc_error = 1 where hubloc_error = 0 - and hubloc_network = 'zot' and hubloc_connected < %s - interval %s", + $r = q("UPDATE hubloc SET hubloc_error = 1 WHERE hubloc_error = 0 + AND hubloc_network IN ('zot6', 'zot') AND hubloc_connected < %s - INTERVAL %s", db_utcnow(), db_quoteinterval('36 day') ); diff --git a/include/contact_widgets.php b/include/contact_widgets.php index 3b22a3c6d..a5f867b0f 100644 --- a/include/contact_widgets.php +++ b/include/contact_widgets.php @@ -71,36 +71,40 @@ function categories_widget($baseurl,$selected = '') { $item_normal = item_normal(); - $key = __FUNCTION__ . "-" . App::$profile['profile_uid']; - $content = Cache::get($key, '5 MINUTE'); + $key = __FUNCTION__ . "-" . App::$profile['profile_uid']; + $content = Cache::get($key, '5 MINUTE'); if (! $content) { - $r = q("select distinct(term.term) from term join item on term.oid = item.id - where item.uid = %d - and term.uid = item.uid - and term.ttype = %d - and term.otype = %d - and item.owner_xchan = '%s' - and item.item_wall = 1 - and item.verb != '%s' + + $content = Cache::get($key, '1 MONTH'); + + $arr = [ + "SELECT distinct(term.term) FROM term JOIN item ON term.oid = item.id + WHERE item.uid = %d + AND term.uid = item.uid + AND term.ttype = %d + AND term.otype = %d + AND item.owner_xchan = '%s' + AND item.item_wall = 1 + AND item.verb != '%s' $item_normal $sql_extra - order by term.term asc", + ORDER BY term.term ASC", intval(App::$profile['profile_uid']), intval(TERM_CATEGORY), intval(TERM_OBJ_POST), dbesc(App::$profile['channel_hash']), dbesc(ACTIVITY_UPDATE) - ); + ]; + + \Zotlabs\Daemon\Master::Summon([ 'Cache_query', $key, base64_encode(json_encode($arr)) ]); } - else - $r = unserialize($content); - $terms = array(); + $r = unserialize($content); + + $terms = []; if($r && count($r)) { - Cache::set($key, serialize($r)); - foreach($r as $rr) $terms[] = array('name' => $rr['term'], 'selected' => (($selected == $rr['term']) ? 'selected' : '')); diff --git a/include/conversation.php b/include/conversation.php index 6615b04c3..ae69b7a01 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -90,18 +90,18 @@ function item_redir_and_replace_images($body, $images, $cid) { function localize_item(&$item){ if (activity_match($item['verb'],ACTIVITY_LIKE) || activity_match($item['verb'],ACTIVITY_DISLIKE)){ - + if(! $item['obj']) return; if(intval($item['item_thread_top'])) - return; + return; $obj = json_decode($item['obj'],true); if((! $obj) && ($item['obj'])) { logger('localize_item: failed to decode object: ' . print_r($item['obj'],true)); } - + if(is_array($obj['author']) && $obj['author']['link']) $author_link = get_rel_link($obj['author']['link'],'alternate'); elseif(is_array($obj['actor']) && $obj['actor']['url']) @@ -167,7 +167,7 @@ function localize_item(&$item){ if($author_link && $author_name && $item_url) { $author = '[zrl=' . chanlink_url($item['author']['xchan_url']) . ']' . $item['author']['xchan_name'] . '[/zrl]'; $objauthor = '[zrl=' . chanlink_url($author_link) . ']' . $author_name . '[/zrl]'; - + $plink = '[zrl=' . zid($item_url) . ']' . $post_type . '[/zrl]'; if(activity_match($item['verb'],ACTIVITY_LIKE)) { @@ -189,7 +189,7 @@ function localize_item(&$item){ $item['shortlocalize'] = sprintf($shortbodyverb, '[bdi]' . $author_name . '[/bdi]', $post_type); $item['body'] = $item['localize'] = sprintf($bodyverb, '[bdi]' . $author . '[/bdi]', '[bdi]' . $objauthor . '[/bdi]', $plink); - if($Bphoto != "") + if($Bphoto != "") $item['body'] .= "\n\n\n" . '[zrl=' . chanlink_url($author_link) . '][zmg=80x80]' . $Bphoto . '[/zmg][/zrl]'; } @@ -201,7 +201,7 @@ function localize_item(&$item){ if (activity_match($item['verb'],ACTIVITY_FRIEND)) { - if ($item['obj_type'] == "" || $item['obj_type'] !== ACTIVITY_OBJ_PERSON) + if ($item['obj_type'] == "" || $item['obj_type'] !== ACTIVITY_OBJ_PERSON) return; $Aname = $item['author']['xchan_name']; @@ -209,7 +209,7 @@ function localize_item(&$item){ $obj= json_decode($item['obj'],true); - + $Blink = $Bphoto = ''; if($obj['link']) { @@ -282,7 +282,7 @@ function localize_item(&$item){ $Alink = $item['author']['xchan_url']; $A = '[zrl=' . chanlink_url($Alink) . '][bdi]' . $Aname . '[/bdi][/zrl]'; - + $txt = t('%1$s is %2$s','mood'); $item['body'] = sprintf($txt, $A, t($verb)); @@ -295,15 +295,15 @@ function localize_item(&$item){ // (and update to json storage) if (activity_match($item['verb'],ACTIVITY_TAG)) { - $r = q("SELECT * from item,contact WHERE + $r = q("SELECT * from item,contact WHERE item.contact-id=contact.id AND item.mid='%s';", dbesc($item['parent_mid'])); if(count($r)==0) return; $obj=$r[0]; - + $author = '[zrl=' . zid($item['author-link']) . ']' . $item['author-name'] . '[/zrl]'; $objauthor = '[zrl=' . zid($obj['author-link']) . ']' . $obj['author-name'] . '[/zrl]'; - + switch($obj['verb']){ case ACTIVITY_POST: switch ($obj['obj_type']){ @@ -416,7 +416,7 @@ function count_descendants($item) { * likes (etc.) can apply to other things besides posts. Check if they are post * children, in which case we handle them specially. Activities which are unrecognised * as having special meaning and hidden will be treated as posts or comments and visible - * in the stream. + * in the stream. * * @param array $item * @return boolean @@ -438,14 +438,14 @@ function visible_activity($item) { } // We only need edit activities for other federated protocols - // which do not support edits natively. While this does federate + // which do not support edits natively. While this does federate // edits, it presents a number of issues locally - such as #757 and #758. // The SQL check for an edit activity would not perform that well so to fix these issues - // requires an additional item flag (perhaps 'item_edit_activity') that we can add to the + // requires an additional item flag (perhaps 'item_edit_activity') that we can add to the // query for searches and notifications. - // For now we'll just forget about trying to make edits work on network protocols that - // don't support them. + // For now we'll just forget about trying to make edits work on network protocols that + // don't support them. // if(is_edit_activity($item)) // return false; @@ -455,7 +455,7 @@ function visible_activity($item) { /** * @brief Check if a given activity is an edit activity - * + * * * @param array $item * @return boolean @@ -463,11 +463,11 @@ function visible_activity($item) { function is_edit_activity($item) { - $post_types = [ ACTIVITY_OBJ_NOTE, ACTIVITY_OBJ_COMMENT, basename(ACTIVITY_OBJ_NOTE), basename(ACTIVITY_OBJ_COMMENT)]; + $post_types = [ ACTIVITY_OBJ_NOTE, ACTIVITY_OBJ_COMMENT, basename(ACTIVITY_OBJ_NOTE), basename(ACTIVITY_OBJ_COMMENT)]; - // In order to share edits with networks which have no concept of editing, we'll create + // In order to share edits with networks which have no concept of editing, we'll create // separate activities to indicate the edit. Our network will not require them, since our - // edits are automatically applied and the activity indicated. + // edits are automatically applied and the activity indicated. if(($item['verb'] === ACTIVITY_UPDATE) && (in_array($item['obj_type'],$post_types))) return true; @@ -678,12 +678,12 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa foreach($items as $item) { - $x = [ - 'mode' => $mode, - 'item' => $item + $x = [ + 'mode' => $mode, + 'item' => $item ]; call_hooks('stream_item',$x); - + if($x['item']['blocked']) continue; @@ -699,7 +699,7 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa $is_new = false; if($mode === 'search' || $mode === 'community') { - if(((activity_match($item['verb'],ACTIVITY_LIKE)) || (activity_match($item['verb'],ACTIVITY_DISLIKE))) + if(((activity_match($item['verb'],ACTIVITY_LIKE)) || (activity_match($item['verb'],ACTIVITY_DISLIKE))) && ($item['id'] != $item['parent'])) continue; } @@ -726,7 +726,7 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa $drop = array( 'pagedropping' => $page_dropping, 'dropping' => $dropping, - 'select' => t('Select'), + 'select' => t('Select'), 'delete' => t('Delete'), ); @@ -739,6 +739,8 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa ? t('Private Message') : false ); + $locktype = $item['item_private']; + $likebuttons = false; $shareable = false; @@ -769,7 +771,7 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa $tmp_item = array( 'template' => $tpl, 'toplevel' => 'toplevel_item', - 'item_type' => intval($item['item_type']), + 'item_type' => intval($item['item_type']), 'mode' => $mode, 'approve' => t('Approve'), 'delete' => t('Delete'), @@ -783,6 +785,7 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa 'name' => $profile_name, 'sparkle' => $sparkle, 'lock' => $lock, + 'locktype' => $locktype, 'thumb' => $profile_avatar, 'title' => $item['title'], 'body' => $body['html'], @@ -844,7 +847,7 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa $conv = new Zotlabs\Lib\ThreadStream($mode, $preview, $uploading, $prepared_item); - // In the display mode we don't have a profile owner. + // In the display mode we don't have a profile owner. if($mode === 'display' && $items) $conv->set_profile_owner($items[0]['uid']); @@ -861,7 +864,7 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa $x = [ 'mode' => $mode, 'item' => $item ]; call_hooks('stream_item',$x); - + if($x['item']['blocked']) continue; @@ -920,7 +923,6 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa // logger('nouveau: ' . print_r($threads,true)); - $o .= replace_macros($page_template, array( '$baseurl' => z_root(), '$photo_item' => $content_html, @@ -932,6 +934,7 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa '$wait' => t('Loading...'), '$conversation_tools' => t('Conversation Tools'), '$dropping' => ($page_dropping?t('Delete Selected Items'):False), + '$preview' => $preview )); return $o; @@ -970,9 +973,9 @@ function best_link_url($item) { function thread_action_menu($item,$mode = '') { $menu = []; - + if((local_channel()) && local_channel() == $item['uid']) { - $menu[] = [ + $menu[] = [ 'menu' => 'view_source', 'title' => t('View Source'), 'icon' => 'code', @@ -982,7 +985,7 @@ function thread_action_menu($item,$mode = '') { if(! in_array($mode, [ 'network-new', 'search', 'community'])) { if($item['parent'] == $item['id'] && (get_observer_hash() != $item['author_xchan'])) { - $menu[] = [ + $menu[] = [ 'menu' => 'follow_thread', 'title' => t('Follow Thread'), 'icon' => 'plus', @@ -991,7 +994,7 @@ function thread_action_menu($item,$mode = '') { ]; } - $menu[] = [ + $menu[] = [ 'menu' => 'unfollow_thread', 'title' => t('Unfollow Thread'), 'icon' => 'minus', @@ -1018,7 +1021,7 @@ function author_is_pmable($xchan, $abook) { call_hooks('author_is_pmable',$x); if($x['result'] !== 'unset') return $x['result']; - + if($xchan['xchan_network'] === 'zot' && get_observer_hash()) return true; return false; @@ -1063,7 +1066,7 @@ function thread_author_menu($item, $mode = '') { if($contact) { $poke_link = ((Apps::system_app_installed($local_channel, 'Poke')) ? z_root() . '/poke/?f=&c=' . $contact['abook_id'] : ''); - if (! intval($contact['abook_self'])) + if (! intval($contact['abook_self'])) $contact_url = z_root() . '/connedit/' . $contact['abook_id']; $posts_link = z_root() . '/network/?cid=' . $contact['abook_id']; @@ -1075,7 +1078,7 @@ function thread_author_menu($item, $mode = '') { $ratings_url = (($rating_enabled) ? z_root() . '/ratings/' . urlencode($item['author_xchan']) : ''); if($profile_link) { - $menu[] = [ + $menu[] = [ 'menu' => 'view_profile', 'title' => t('View Profile'), 'icon' => 'fw', @@ -1085,7 +1088,7 @@ function thread_author_menu($item, $mode = '') { } if($posts_link) { - $menu[] = [ + $menu[] = [ 'menu' => 'view_posts', 'title' => t('Recent Activity'), 'icon' => 'fw', @@ -1095,7 +1098,7 @@ function thread_author_menu($item, $mode = '') { } if($follow_url) { - $menu[] = [ + $menu[] = [ 'menu' => 'follow', 'title' => t('Connect'), 'icon' => 'fw', @@ -1105,7 +1108,7 @@ function thread_author_menu($item, $mode = '') { } if($contact_url) { - $menu[] = [ + $menu[] = [ 'menu' => 'connedit', 'title' => t('Edit Connection'), 'icon' => 'fw', @@ -1115,7 +1118,7 @@ function thread_author_menu($item, $mode = '') { } if($pm_url) { - $menu[] = [ + $menu[] = [ 'menu' => 'prv_message', 'title' => t('Message'), 'icon' => 'fw', @@ -1125,7 +1128,7 @@ function thread_author_menu($item, $mode = '') { } if($ratings_url) { - $menu[] = [ + $menu[] = [ 'menu' => 'ratings', 'title' => t('Ratings'), 'icon' => 'fw', @@ -1135,7 +1138,7 @@ function thread_author_menu($item, $mode = '') { } if($poke_link) { - $menu[] = [ + $menu[] = [ 'menu' => 'poke', 'title' => t('Poke'), 'icon' => 'fw', @@ -1209,8 +1212,8 @@ function builtin_activity_puller($item, &$conv_responses) { if((activity_match($item['verb'], $verb)) && ($item['id'] != $item['parent'])) { $name = (($item['author']['xchan_name']) ? $item['author']['xchan_name'] : t('Unknown')); - $url = (($item['author_xchan'] && $item['author']['xchan_photo_s']) - ? '' . '' . urlencode($name) . ' ' . $name . '' + $url = (($item['author_xchan'] && $item['author']['xchan_photo_s']) + ? '' . '' . urlencode($name) . ' ' . $name . '' : '' . $name . '' ); @@ -1222,7 +1225,7 @@ function builtin_activity_puller($item, &$conv_responses) { if($item['obj_type'] === 'Answer') continue; - if(! ((isset($conv_responses[$mode][$item['thr_parent'] . '-l'])) + if(! ((isset($conv_responses[$mode][$item['thr_parent'] . '-l'])) && (is_array($conv_responses[$mode][$item['thr_parent'] . '-l'])))) $conv_responses[$mode][$item['thr_parent'] . '-l'] = array(); @@ -1297,9 +1300,9 @@ function status_editor($a, $x, $popup = false, $module='') { } /** - * This is our general purpose content editor. + * This is our general purpose content editor. * It was once nicknamed "jot" and you may see references to "jot" littered throughout the code. - * They are referring to the content editor or components thereof. + * They are referring to the content editor or components thereof. */ function hz_status_editor($a, $x, $popup = false) { @@ -1341,7 +1344,7 @@ function hz_status_editor($a, $x, $popup = false) { $weblink = (($mimetype === 'text/bbcode') ? t('Insert web link') : false); if(x($x, 'hide_weblink')) $weblink = false; - + $embedPhotos = t('Embed (existing) photo from your photo albums'); $writefiles = (($mimetype === 'text/bbcode') ? perm_is_allowed($x['profile_uid'], get_observer_hash(), 'write_storage') : false); @@ -1366,9 +1369,9 @@ function hz_status_editor($a, $x, $popup = false) { $webpage = ((x($x,'webpage')) ? $x['webpage'] : ''); $reset = ((x($x,'reset')) ? $x['reset'] : ''); - + $feature_auto_save_draft = ((feature_enabled($x['profile_uid'], 'auto_save_draft')) ? "true" : "false"); - + $tpl = get_markup_template('jot-header.tpl'); $tplmacros = [ @@ -1394,7 +1397,7 @@ function hz_status_editor($a, $x, $popup = false) { '$reset' => $reset ]; - call_hooks('jot_header_tpl_filter',$tplmacros); + call_hooks('jot_header_tpl_filter',$tplmacros); App::$page['htmlhead'] .= replace_macros($tpl, $tplmacros); $tpl = get_markup_template('jot.tpl'); @@ -1421,7 +1424,7 @@ function hz_status_editor($a, $x, $popup = false) { $catsenabled = ((feature_enabled($x['profile_uid'], 'categories') && (! $webpage)) ? 'categories' : ''); // avoid illegal offset errors - if(! array_key_exists('permissions',$x)) + if(! array_key_exists('permissions',$x)) $x['permissions'] = [ 'allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '' ]; $jotplugins = ''; @@ -1471,7 +1474,9 @@ function hz_status_editor($a, $x, $popup = false) { '$nocomment' => ((array_key_exists('item',$x)) ? $x['item']['item_nocomment'] : 0), '$clearloc' => $clearloc, '$title' => ((x($x, 'title')) ? htmlspecialchars($x['title'], ENT_COMPAT,'UTF-8') : ''), + '$summary' => ((x($x, 'summary')) ? htmlspecialchars($x['summary'], ENT_COMPAT,'UTF-8') : ''), '$placeholdertitle' => ((x($x, 'placeholdertitle')) ? $x['placeholdertitle'] : t('Title (optional)')), + '$placeholdersummary' => ((x($x, 'placeholdersummary')) ? $x['placeholdersummary'] : t('Summary (optional)')), '$catsenabled' => $catsenabled, '$category' => ((x($x, 'category')) ? $x['category'] : ''), '$placeholdercategory' => t('Categories (optional, comma-separated list)'), @@ -1514,6 +1519,7 @@ function hz_status_editor($a, $x, $popup = false) { '$parent' => ((array_key_exists('parent',$x) && $x['parent']) ? $x['parent'] : 0), '$reset' => $reset, '$is_owner' => ((local_channel() && (local_channel() == $x['profile_uid'])) ? true : false), + '$customjotheaders' => '', '$custommoretoolsdropdown' => '', '$custommoretoolsbuttons' => '', '$customsubmitright' => [] @@ -1539,7 +1545,7 @@ function get_item_children($arr, $parent) { $thr_parent = $item['thr_parent']; if($thr_parent == '') $thr_parent = $item['parent_mid']; - + if($thr_parent == $parent['mid']) { $item['children'] = get_item_children($arr, $item); $children[] = $item; @@ -1698,9 +1704,9 @@ function prepare_page($item) { return replace_macros(get_markup_template($tpl), array( '$body' => $body['html'] )); - + } - + $tpl = get_pconfig($item['uid'], 'system', 'pagetemplate'); if (! $tpl) $tpl = 'page_display.tpl'; @@ -1721,13 +1727,11 @@ function get_responses($conv_responses,$response_verbs,$ob,$item) { $ret = array(); foreach($response_verbs as $v) { $ret[$v] = array(); - $ret[$v]['count'] = ((x($conv_responses[$v],$item['mid'])) ? $conv_responses[$v][$item['mid']] : ''); + $ret[$v]['count'] = ((x($conv_responses[$v],$item['mid'])) ? $conv_responses[$v][$item['mid']] : 0); $ret[$v]['list'] = ((x($conv_responses[$v],$item['mid'])) ? $conv_responses[$v][$item['mid'] . '-l'] : ''); $ret[$v]['button'] = get_response_button_text($v,$ret[$v]['count']); $ret[$v]['title'] = $conv_responses[$v]['title']; - if($ret[$v]['count'] > MAX_LIKERS) { - $ret[$v]['modal'] = true; - } + $ret[$v]['modal'] = (($ret[$v]['count'] > MAX_LIKERS) ? true : false); } $count = 0; diff --git a/include/crypto.php b/include/crypto.php index 39bfd8d43..40e68a4e7 100644 --- a/include/crypto.php +++ b/include/crypto.php @@ -25,7 +25,7 @@ function rsa_verify($data,$sig,$key,$alg = 'sha256') { if($verify === (-1)) { while($msg = openssl_error_string()) logger('openssl_verify: ' . $msg,LOGGER_NORMAL,LOG_ERR); - btlogger('openssl_verify: key: ' . $key, LOGGER_DEBUG, LOG_ERR); + btlogger('openssl_verify: key: ' . $key, LOGGER_DEBUG, LOG_ERR); } return (($verify > 0) ? true : false); @@ -110,7 +110,7 @@ function CAST5CFB_decrypt($data,$key,$iv) { function crypto_encapsulate($data,$pubkey,$alg='aes256cbc') { $fn = strtoupper($alg) . '_encrypt'; - + if($alg === 'aes256cbc') return aes_encapsulate($data,$pubkey); @@ -150,7 +150,7 @@ function other_encapsulate($data,$pubkey,$alg) { // assurance of security since it is meaningless if the source algorithms // have been compromised. Also none of this matters if RSA has been // compromised by state actors and evidence is mounting that this has - // already happened. + // already happened. $result = [ 'encrypted' => true ]; $key = openssl_random_pseudo_bytes(256); @@ -163,7 +163,7 @@ function other_encapsulate($data,$pubkey,$alg) { } $result['alg'] = $alg; - $result['key'] = base64url_encode($k,true); + $result['key'] = base64url_encode($k,true); openssl_public_encrypt($iv,$i,$pubkey,$padding); $result['iv'] = base64url_encode($i,true); return $result; @@ -177,11 +177,11 @@ function other_encapsulate($data,$pubkey,$alg) { function crypto_methods() { - // aes256cbc is provided for compatibility with earlier zot implementations which assume 32-byte key and 16-byte iv. + // aes256cbc is provided for compatibility with earlier zot implementations which assume 32-byte key and 16-byte iv. // other_encapsulate() now produces these longer keys/ivs by default so that it is difficult to guess a - // particular implementation or choice of underlying implementations based on the key/iv length. + // particular implementation or choice of underlying implementations based on the key/iv length. // The actual methods are responsible for deriving the actual key/iv from the provided parameters; - // possibly by truncation or segmentation - though many other methods could be used. + // possibly by truncation or segmentation - though many other methods could be used. $r = [ 'aes256ctr.oaep', 'camellia256cfb.oaep', 'cast5cfb.oaep', 'aes256ctr', 'camellia256cfb', 'cast5cfb', 'aes256cbc', 'aes128cbc', 'cast5cbc' ]; call_hooks('crypto_methods',$r); @@ -192,7 +192,6 @@ function crypto_methods() { function signing_methods() { - $r = [ 'sha256' ]; call_hooks('signing_methods',$r); return $r; @@ -215,7 +214,7 @@ function aes_encapsulate($data,$pubkey) { logger('aes_encapsulate: RSA failed. ' . print_r($x[0],true)); } $result['alg'] = 'aes256cbc'; - $result['key'] = base64url_encode($k,true); + $result['key'] = base64url_encode($k,true); openssl_public_encrypt($iv,$i,$pubkey); $result['iv'] = base64url_encode($i,true); return $result; @@ -226,9 +225,9 @@ function crypto_unencapsulate($data,$prvkey) { return; $alg = ((is_array($data) && (array_key_exists('encrypted',$data) || array_key_exists('iv',$data))) ? $data['alg'] : ''); - if(! $alg) { + if(! $alg) { return $data; - } + } if($alg === 'aes256cbc') { return aes_unencapsulate($data,$prvkey); @@ -280,13 +279,13 @@ function new_keypair($bits) { $openssl_options = array( 'digest_alg' => 'sha1', 'private_key_bits' => $bits, - 'encrypt_key' => false + 'encrypt_key' => false ); $conf = get_config('system','openssl_conf_file'); if($conf) $openssl_options['config'] = $conf; - + $result = openssl_pkey_new($openssl_options); if(empty($result)) { @@ -310,36 +309,36 @@ function new_keypair($bits) { function DerToPem($Der, $Private=false) { - //Encode: - $Der = base64_encode($Der); - //Split lines: - $lines = str_split($Der, 65); - $body = implode("\n", $lines); - //Get title: - $title = $Private? 'RSA PRIVATE KEY' : 'PUBLIC KEY'; - //Add wrapping: - $result = "-----BEGIN {$title}-----\n"; - $result .= $body . "\n"; - $result .= "-----END {$title}-----\n"; - - return $result; + //Encode: + $Der = base64_encode($Der); + //Split lines: + $lines = str_split($Der, 65); + $body = implode("\n", $lines); + //Get title: + $title = $Private? 'RSA PRIVATE KEY' : 'PUBLIC KEY'; + //Add wrapping: + $result = "-----BEGIN {$title}-----\n"; + $result .= $body . "\n"; + $result .= "-----END {$title}-----\n"; + + return $result; } function DerToRsa($Der) { - //Encode: - $Der = base64_encode($Der); - //Split lines: - $lines = str_split($Der, 64); - $body = implode("\n", $lines); - //Get title: - $title = 'RSA PUBLIC KEY'; - //Add wrapping: - $result = "-----BEGIN {$title}-----\n"; - $result .= $body . "\n"; - $result .= "-----END {$title}-----\n"; - - return $result; + //Encode: + $Der = base64_encode($Der); + //Split lines: + $lines = str_split($Der, 64); + $body = implode("\n", $lines); + //Get title: + $title = 'RSA PUBLIC KEY'; + //Add wrapping: + $result = "-----BEGIN {$title}-----\n"; + $result .= $body . "\n"; + $result .= "-----END {$title}-----\n"; + + return $result; } @@ -387,7 +386,7 @@ function metopem($m,$e) { $der = pkcs8_encode($m,$e); $key = DerToPem($der,false); return $key; -} +} function pubrsatome($key,&$m,&$e) { @@ -431,7 +430,7 @@ function metorsa($m,$e) { $der = pkcs1_encode($m,$e); $key = DerToRsa($der); return $key; -} +} diff --git a/include/dba/dba_driver.php b/include/dba/dba_driver.php old mode 100755 new mode 100644 diff --git a/include/dba/dba_pdo.php b/include/dba/dba_pdo.php old mode 100755 new mode 100644 diff --git a/include/dir_fns.php b/include/dir_fns.php index 88a1bb74f..8326415ed 100644 --- a/include/dir_fns.php +++ b/include/dir_fns.php @@ -3,6 +3,7 @@ * @file include/dir_fns.php */ +use Zotlabs\Lib\Crypto; use Zotlabs\Lib\Libzot; use Zotlabs\Lib\Webfinger; use Zotlabs\Lib\Zotfinger; @@ -280,7 +281,7 @@ function sync_directories($dirmode) { logger('key unavailable on this site for ' . $rr['channel']); continue; } - if (! rsa_verify($rr['target'] . '.' . $rr['rating'] . '.' . $rr['rating_text'], base64url_decode($rr['signature']),$y[0]['xchan_pubkey'])) { + if (! Crypto::verify($rr['target'] . '.' . $rr['rating'] . '.' . $rr['rating_text'], base64url_decode($rr['signature']),$y[0]['xchan_pubkey'])) { logger('failed to verify rating'); continue; } diff --git a/include/feedutils.php b/include/feedutils.php index 352b8f038..9cb645ff8 100644 --- a/include/feedutils.php +++ b/include/feedutils.php @@ -722,17 +722,17 @@ function get_atom_elements($feed, $item) { if(! $type) $type = 'application/octet-stream'; - if($ostatus_protocol) { - if((strpos($type,'image') === 0) && (strpos($res['body'], ']' . $link . '[/img]') === false) && (strpos($link,'http') === 0)) { - $res['body'] .= "\n\n" . '[img]' . $link . '[/img]'; - } - if((strpos($type,'video') === 0) && (strpos($res['body'], ']' . $link . '[/video]') === false) && (strpos($link,'http') === 0)) { - $res['body'] .= "\n\n" . '[video]' . $link . '[/video]'; - } - if((strpos($type,'audio') === 0) && (strpos($res['body'], ']' . $link . '[/audio]') === false) && (strpos($link,'http') === 0)) { - $res['body'] .= "\n\n" . '[audio]' . $link . '[/audio]'; - } + // put media enclosures in bbcode markup + if((strpos($type,'image') === 0) && (strpos($res['body'], ']' . $link . '[/img]') === false) && (strpos($link,'http') === 0)) { + $res['body'] .= "\n\n" . '[img]' . $link . '[/img]'; } + if((strpos($type,'video') === 0) && (strpos($res['body'], ']' . $link . '[/video]') === false) && (strpos($link,'http') === 0)) { + $res['body'] .= "\n\n" . '[video]' . $link . '[/video]'; + } + if((strpos($type,'audio') === 0) && (strpos($res['body'], ']' . $link . '[/audio]') === false) && (strpos($link,'http') === 0)) { + $res['body'] .= "\n\n" . '[audio]' . $link . '[/audio]'; + } + $res['attach'][] = array('href' => $link, 'length' => $len, 'type' => $type, 'title' => $title ); } } diff --git a/include/follow.php b/include/follow.php index a4d382545..64ae8f7f1 100644 --- a/include/follow.php +++ b/include/follow.php @@ -9,6 +9,8 @@ // $return['abook'] Address book entry joined with xchan if successful // $return['message'] error text if success is false. +use Zotlabs\Lib\Crypto; + require_once('include/zot.php'); function new_contact($uid,$url,$channel,$interactive = false, $confirm = false) { @@ -19,7 +21,7 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false) $is_zot = false; $protocol = ''; - + if(substr($url,0,1) === '[') { $x = strpos($url,']'); if($x) { @@ -62,7 +64,7 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false) call_hooks('follow_init', $arr); - if($arr['channel']['success']) + if($arr['channel']['success']) $ret = $arr['channel']; elseif((! $is_http) && ((! $protocol) || (strtolower($protocol) === 'zot'))) $ret = Zotlabs\Zot\Finger::run($url,$channel); @@ -98,11 +100,11 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false) return $result; } } - - + + // do we have an xchan and hubloc? - // If not, create them. + // If not, create them. $x = import_xchan($j); @@ -111,13 +113,13 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false) return $result; } - if(! $x['success']) + if(! $x['success']) return $x; $xchan_hash = $x['hash']; if( array_key_exists('permissions',$j) && array_key_exists('data',$j['permissions'])) { - $permissions = crypto_unencapsulate(array( + $permissions = Crypto::unencapsulate(array( 'data' => $j['permissions']['data'], 'alg' => $j['permissions']['alg'], 'key' => $j['permissions']['key'], @@ -140,7 +142,7 @@ function new_contact($uid,$url,$channel,$interactive = false, $confirm = false) $xchan_hash = ''; $sql_options = (($protocol) ? " and xchan_network = '" . dbesc($protocol) . "' " : ''); - + $r = q("select * from xchan where (xchan_addr = '%s' or xchan_url = '%s') $sql_options ", dbesc($url), diff --git a/include/help.php b/include/help.php index ebf1ccc08..38facb04a 100644 --- a/include/help.php +++ b/include/help.php @@ -285,6 +285,7 @@ function load_context_help() { $path = App::$cmd; $args = App::$argv; $lang = App::$language; + $context_help = ''; if(! isset($lang) || !is_dir('doc/context/' . $lang . '/')) { $lang = 'en'; diff --git a/include/html2bbcode.php b/include/html2bbcode.php index c916421b8..173ea63bd 100644 --- a/include/html2bbcode.php +++ b/include/html2bbcode.php @@ -87,6 +87,9 @@ function deletenode(&$doc, $node) function html2bbcode($message) { + if(!$message) + return; + $message = str_replace("\r", "", $message); $message = str_replace(array( diff --git a/include/html2plain.php b/include/html2plain.php index fde70bd01..91a1f14cb 100644 --- a/include/html2plain.php +++ b/include/html2plain.php @@ -102,12 +102,14 @@ function html2plain($html, $wraplength = 75, $compact = false) { $message = str_replace("\r", "", $html); + $message = mb_convert_encoding($message, 'HTML-ENTITIES', "UTF-8"); + + if(!$message) + return; + $doc = new DOMDocument(); $doc->preserveWhiteSpace = false; - - $message = mb_convert_encoding($message, 'HTML-ENTITIES', "UTF-8"); - @$doc->loadHTML($message); $xpath = new DomXPath($doc); diff --git a/include/import.php b/include/import.php index b512e1f11..8ce582ede 100644 --- a/include/import.php +++ b/include/import.php @@ -1469,7 +1469,7 @@ function sync_files($channel, $files) { fclose($fp); // Override remote hub thumbnails storage settings - if(! boolval(get_config('system','filesystem_storage_thumbnails', 0))) { + if(! boolval(get_config('system','photo_storage_type', 1))) { $p['os_storage'] = 0; $p['content'] = file_get_contents($stored_image); @unlink($stored_image); diff --git a/include/items.php b/include/items.php old mode 100755 new mode 100644 index 322e44471..88f100e60 --- a/include/items.php +++ b/include/items.php @@ -4,6 +4,7 @@ * @brief Items related functions. */ +use Zotlabs\Lib\Crypto; use Zotlabs\Lib\Enotify; use Zotlabs\Lib\MarkdownSoap; use Zotlabs\Lib\MessageFilter; @@ -11,6 +12,7 @@ use Zotlabs\Lib\ThreadListener; use Zotlabs\Lib\IConfig; use Zotlabs\Lib\Activity; use Zotlabs\Lib\Libsync; +use Zotlabs\Lib\Libzot; use Zotlabs\Access\PermissionLimits; use Zotlabs\Access\PermissionRoles; use Zotlabs\Access\AccessList; @@ -790,8 +792,8 @@ function get_item_elements($x,$allow_code = false) { dbesc($arr['author_xchan']) ); if($r) { - if($r[0]['xchan_pubkey'] && $r[0]['xchan_network'] === 'zot') { - if(rsa_verify($x['body'],base64url_decode($arr['sig']),$r[0]['xchan_pubkey'])) { + if($r[0]['xchan_pubkey'] && $r[0]['xchan_network'] === 'zot6') { + if(Libzot::verify($x['body'], $arr['sig'], $r[0]['xchan_pubkey'])) { $arr['item_verified'] = 1; } else { @@ -1087,7 +1089,7 @@ function empty_acl($item) { return (($item['allow_cid'] === EMPTY_STR && $item['allow_gid'] === EMPTY_STR && $item['deny_cid'] === EMPTY_STR && $item['deny_gid'] === EMPTY_STR) ? true : false); } -function encode_item($item,$mirror = false) { +function encode_item($item,$mirror = false,$zap_compat = false) { $x = []; $x['type'] = 'activity'; $x['encoding'] = 'zot'; @@ -1165,9 +1167,9 @@ function encode_item($item,$mirror = false) { $x['summary'] = $item['summary']; $x['body'] = $item['body']; $x['app'] = $item['app']; - $x['verb'] = $item['verb']; - $x['object_type'] = $item['obj_type']; - $x['target_type'] = $item['tgt_type']; + $x['verb'] = (($zap_compat) ? Activity::activity_mapper($item['verb']) : $item['verb']); + $x['object_type'] = (($zap_compat && $item['obj_type']) ? Activity::activity_obj_mapper($item['obj_type']) : $item['obj_type']); + $x['target_type'] = (($zap_compat && $item['tgt_type']) ? Activity::activity_obj_mapper($item['tgt_type']) : $item['tgt_type']); $x['permalink'] = $item['plink']; $x['location'] = $item['location']; $x['longlat'] = $item['coord']; @@ -1176,10 +1178,19 @@ function encode_item($item,$mirror = false) { $x['owner'] = encode_item_xchan($item['owner']); $x['author'] = encode_item_xchan($item['author']); - if($item['obj']) - $x['object'] = json_decode($item['obj'],true); + if ($zap_compat) { + $x['object'] = Activity::encode_item_object($item,'obj'); + } + else { + if ($item['obj']) { + $x['object'] = json_decode($item['obj'],true); + } + } + if($item['target']) - $x['target'] = json_decode($item['target'],true); + $x['target'] = (($zap_compat) + ? Activity::encode_item_object($item,'target') + : json_decode($item['target'],true)) ; if($item['attach']) $x['attach'] = json_decode($item['attach'],true); if($y = encode_item_flags($item)) @@ -1198,9 +1209,16 @@ function encode_item($item,$mirror = false) { if($item['term']) $x['tags'] = encode_item_terms($item['term'],$mirror); - if($item['iconfig']) + if($item['iconfig']) { + if ($zap_compat) { + for ($y = 0; $y < count($item['iconfig']); $y ++) { + if (preg_match('|^a:[0-9]+:{.*}$|s', $item['iconfig'][$y]['v'])) { + $item['iconfig'][$y]['v'] = serialise(unserialize($item['iconfig'][$y]['v'])); + } + } + } $x['meta'] = encode_item_meta($item['iconfig'],$mirror); - + } logger('encode_item: ' . print_r($x,true), LOGGER_DATA); @@ -1398,6 +1416,30 @@ function decode_tags($t) { return ''; } + +function purify_imported_object($obj) { + $ret = null; + if (is_array($obj)) { + foreach ( $obj as $k => $v ) { + if (is_array($v)) { + $ret[$k] = purify_imported_object($v); + } + elseif (is_string($v)) { + $ret[$k] = purify_html($v); + } + } + } + elseif (is_string($obj)) { + $ret = purify_html($obj); + } + + return $ret; +} + + + + + /** * @brief Santise a potentially complex array. * @@ -1409,6 +1451,10 @@ function activity_sanitise($arr) { if(is_array($arr)) { $ret = array(); foreach($arr as $k => $x) { + if (in_array($k, [ 'content', 'summary', 'contentMap', 'summaryMap' ])) { + $ret[$k] = purify_imported_object($arr[$k]); + continue; + } if(is_array($x)) $ret[$k] = activity_sanitise($x); else @@ -1651,7 +1697,7 @@ function item_sign(&$item) { if(! $r) return; - $item['sig'] = base64url_encode(rsa_sign($item['body'], $r[0]['channel_prvkey'])); + $item['sig'] = base64url_encode(Crypto::sign($item['body'], $r[0]['channel_prvkey'])); $item['item_verified'] = 1; } @@ -2390,9 +2436,14 @@ function item_store_update($arr, $allow_exec = false, $deliver = true) { logger('item_store_update: ' . print_r($arr,true), LOGGER_DATA); - $str = ''; - foreach($arr as $k => $v) { - if($str) + $columns = db_columns('item'); + $str = ''; + foreach ($arr as $k => $v) { + if (!in_array($k, $columns)) { + continue; + } + + if ($str) $str .= ","; $str .= " " . TQUOT . $k . TQUOT . " = '" . $v . "' "; } @@ -2694,10 +2745,13 @@ function tag_deliver($uid, $item_id) { return; } + /* this should not be required anymore due to the check above if (strpos($item['body'],'[/share]')) { logger('W2W post already shared'); return; } + */ + // group delivery via W2W logger('rewriting W2W post for ' . $u[0]['channel_address']); start_delivery_chain($u[0], $item, $item_id, 0, true, (($item['edited'] != $item['created']) || $item['item_deleted'])); @@ -2970,7 +3024,7 @@ function item_community_tag($channel,$item) { $pitem = $items[0]; $auth = get_iconfig($item,'system','communitytagauth'); if($auth) { - if(rsa_verify('tagauth.' . $item['mid'],base64url_decode($auth),$pitem['owner']['xchan_pubkey']) || rsa_verify('tagauth.' . $item['mid'],base64url_decode($auth),$pitem['author']['xchan_pubkey'])) { + if(Crypto::verify('tagauth.' . $item['mid'],base64url_decode($auth),$pitem['owner']['xchan_pubkey']) || Crypto::verify('tagauth.' . $item['mid'],base64url_decode($auth),$pitem['author']['xchan_pubkey'])) { logger('tag_deliver: tagging the post: ' . $channel['channel_name']); $tag_the_post = true; } @@ -2979,7 +3033,7 @@ function item_community_tag($channel,$item) { if(($pitem['owner_xchan'] === $channel['channel_hash']) && (! intval(get_pconfig($channel['channel_id'],'system','blocktags')))) { logger('tag_deliver: community tag recipient: ' . $channel['channel_name']); $tag_the_post = true; - $sig = rsa_sign('tagauth.' . $item['mid'],$channel['channel_prvkey']); + $sig = Crypto::sign('tagauth.' . $item['mid'],$channel['channel_prvkey']); logger('tag_deliver: setting iconfig for ' . $item['id']); set_iconfig($item['id'],'system','communitytagauth',base64url_encode($sig),1); } @@ -3267,24 +3321,19 @@ function start_delivery_chain($channel, $item, $item_id, $parent, $group = false $arr['item_wall'] = 1; $arr['item_thread_top'] = 1; - if (strpos($item['body'], "[/share]") !== false) { - $pos = strpos($item['body'], "[share"); - $bb = substr($item['body'], $pos); - } else { - $bb = "[share author='" . urlencode($item['author']['xchan_name']). - "' profile='" . $item['author']['xchan_url'] . - "' portable_id='" . $item['author']['xchan_hash'] . - "' avatar='" . $item['author']['xchan_photo_s'] . - "' link='" . $item['plink'] . - "' auth='" . ((in_array($item['author']['xchan_network'], ['zot6','zot'])) ? 'true' : 'false') . - "' posted='" . $item['created'] . - "' message_id='" . $item['mid'] . - "']"; - if($item['title']) - $bb .= '[h3][b]'.$item['title'].'[/b][/h3]'."\r\n"; - $bb .= $item['body']; - $bb .= "[/share]"; - } + $bb = "[share author='" . urlencode($item['author']['xchan_name']). + "' profile='" . $item['author']['xchan_url'] . + "' portable_id='" . $item['author']['xchan_hash'] . + "' avatar='" . $item['author']['xchan_photo_s'] . + "' link='" . $item['plink'] . + "' auth='" . ((in_array($item['author']['xchan_network'], ['zot6','zot'])) ? 'true' : 'false') . + "' posted='" . $item['created'] . + "' message_id='" . $item['mid'] . + "']"; + if($item['title']) + $bb .= '[h3][b]'.$item['title'].'[/b][/h3]'."\r\n"; + $bb .= $item['body']; + $bb .= "[/share]"; $arr['body'] = $bb; $arr['term'] = $item['term']; @@ -3969,10 +4018,10 @@ function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL) { ); if($items) { foreach($items as $i) - delete_item_lowlevel($i,$stage,$force); + delete_item_lowlevel($i, $stage); } else - delete_item_lowlevel($item,$stage,$force); + delete_item_lowlevel($item, $stage); if(! $interactive) return 1; @@ -4006,7 +4055,6 @@ function drop_item($id,$interactive = true,$stage = DROPITEM_NORMAL) { * * @param array $item * @param int $stage - * @param boolean $force * @return boolean */ function delete_item_lowlevel($item, $stage = DROPITEM_NORMAL) { @@ -4318,54 +4366,54 @@ function fetch_post_tags($items, $link = false) { */ function zot_feed($uid, $observer_hash, $arr) { - $result = array(); - $mindate = null; + $result = []; + $mindate = null; $message_id = null; - $wall = true; + $wall = true; require_once('include/security.php'); - if(array_key_exists('mindate',$arr)) { - $mindate = datetime_convert('UTC','UTC',$arr['mindate']); + if (array_key_exists('mindate', $arr)) { + $mindate = datetime_convert('UTC', 'UTC', $arr['mindate']); } - if(array_key_exists('message_id',$arr)) { + if (array_key_exists('message_id', $arr)) { $message_id = $arr['message_id']; } - if(array_key_exists('wall',$arr)) { + if (array_key_exists('wall', $arr)) { $wall = intval($arr['wall']); } - if(! $mindate) + if (!$mindate) $mindate = NULL_DATE; $mindate = dbesc($mindate); logger('zot_feed: requested for uid ' . $uid . ' from observer ' . $observer_hash, LOGGER_DEBUG); - if($message_id) - logger('message_id: ' . $message_id,LOGGER_DEBUG); + if ($message_id) + logger('message_id: ' . $message_id, LOGGER_DEBUG); - if(! perm_is_allowed($uid,$observer_hash,'view_stream')) { + if (!perm_is_allowed($uid, $observer_hash, 'view_stream')) { logger('zot_feed: permission denied.'); return $result; } - if(! is_sys_channel($uid)) - $sql_extra = item_permissions_sql($uid,$observer_hash); + if (!is_sys_channel($uid)) + $sql_extra = item_permissions_sql($uid, $observer_hash); $limit = " LIMIT 5000 "; - if($mindate > NULL_DATE) { + if ($mindate > NULL_DATE) { $sql_extra .= " and ( created > '$mindate' or changed > '$mindate' ) "; } - if($message_id) { + if ($message_id) { $sql_extra .= " and mid = '" . dbesc($message_id) . "' "; - $limit = ''; + $limit = ''; } - if($wall) { + if ($wall) { $sql_extra .= " and item_wall = 1 "; } @@ -4374,17 +4422,17 @@ function zot_feed($uid, $observer_hash, $arr) { $item_normal = item_normal(); - if(is_sys_channel($uid)) { + if (is_sys_channel($uid)) { - $nonsys_uids = q("SELECT channel_id FROM channel WHERE channel_system = 0"); - $nonsys_uids_str = ids_to_querystr($nonsys_uids,'channel_id'); + $nonsys_uids = q("SELECT channel_id FROM channel WHERE channel_system = 0"); + $nonsys_uids_str = ids_to_querystr($nonsys_uids, 'channel_id'); $r = q("SELECT parent, postopts FROM item WHERE uid IN ( %s ) AND item_private = 0 $item_normal $sql_extra ORDER BY created ASC $limit", - intval($nonsys_uids_str) + dbesc($nonsys_uids_str) ); } else { @@ -4398,19 +4446,19 @@ function zot_feed($uid, $observer_hash, $arr) { $parents = []; - if($r) { - foreach($r as $rv) { - if(array_key_exists($rv['parent'],$parents)) + if ($r) { + foreach ($r as $rv) { + if (array_key_exists($rv['parent'], $parents)) continue; - if(strpos($rv['postopts'],'nodeliver') !== false) + if (strpos($rv['postopts'], 'nodeliver') !== false) continue; $parents[$rv['parent']] = $rv; - if(count($parents) > 200) + if (count($parents) > 200) break; } - $parents_str = ids_to_querystr($parents,'parent'); - $sys_query = ((is_sys_channel($uid)) ? $sql_extra : ''); + $parents_str = ids_to_querystr($parents, 'parent'); + $sys_query = ((is_sys_channel($uid)) ? $sql_extra : ''); $item_normal = item_normal(); $items = q("SELECT item.*, item.id AS item_id FROM item @@ -4419,25 +4467,23 @@ function zot_feed($uid, $observer_hash, $arr) { ); } - if($items) { + if ($items) { xchan_query($items); $items = fetch_post_tags($items); require_once('include/conversation.php'); - $items = conv_sort($items,'ascending'); + $items = conv_sort($items, 'ascending'); } else - $items = array(); + $items = []; - logger('zot_feed: number items: ' . count($items),LOGGER_DEBUG); + logger('zot_feed: number items: ' . count($items), LOGGER_DEBUG); - foreach($items as $item) + foreach ($items as $item) $result[] = encode_item($item); return $result; } - - function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = CLIENT_MODE_NORMAL,$module = 'network') { $result = array('success' => false); @@ -4477,7 +4523,7 @@ function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = C $sql_extra = " AND item.parent IN ( SELECT parent FROM item WHERE $item_uids and item_thread_top = 1 $sql_options $item_normal ) "; if($arr['since_id']) - $sql_extra .= " and item.id > " . $since_id . " "; + $sql_extra .= " and item.id > " . intval($arr['since_id']) . " "; if($arr['cat']) $sql_extra .= protect_sprintf(term_query('item', $arr['cat'], TERM_CATEGORY)); @@ -4562,9 +4608,11 @@ function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = C // only setup pagination on initial page view $pager_sql = ''; } else { - $itemspage = (($channel) ? get_pconfig($uid,'system','itemspage') : 10); - App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 10)); - $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(App::$pager['itemspage']), intval(App::$pager['start'])); + if(! $arr['total']) { + $itemspage = (($channel) ? get_pconfig($uid,'system','itemspage') : 10); + App::set_pager_itemspage(((intval($itemspage)) ? $itemspage : 10)); + $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(App::$pager['itemspage']), intval(App::$pager['start'])); + } } if (isset($arr['start']) && isset($arr['records'])) @@ -4600,7 +4648,6 @@ function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = C require_once('include/security.php'); $sql_extra .= item_permissions_sql($channel['channel_id'],$observer_hash); - if($arr['pages']) $item_restrict = " AND item_type = " . ITEM_TYPE_WEBPAGE . " "; else @@ -4613,11 +4660,23 @@ function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = C // "New Item View" - show all items unthreaded in reverse created date order - $items = q("SELECT item.*, item.id AS item_id FROM item + if ($arr['total']) { + $items = dbq("SELECT count(item.id) AS total FROM item WHERE $item_uids $item_restrict $simple_update - $sql_extra $sql_nets $sql_extra3 - ORDER BY item.received DESC $pager_sql" + $sql_extra $sql_nets $sql_extra3" + ); + if ($items) { + return intval($items[0]['total']); + } + return 0; + } + + $items = dbq("SELECT item.*, item.id AS item_id FROM item + WHERE $item_uids $item_restrict + $simple_update + $sql_extra $sql_nets $sql_extra3 + ORDER BY item.received DESC $pager_sql" ); require_once('include/items.php'); @@ -4638,7 +4697,7 @@ function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = C // Fetch a page full of parent items for this page - $r = q("SELECT distinct item.id AS item_id, item.$ordering FROM item + $r = dbq("SELECT distinct item.id AS item_id, item.$ordering FROM item left join abook on item.author_xchan = abook.abook_xchan WHERE $item_uids $item_restrict AND item.parent = item.id @@ -4649,7 +4708,7 @@ function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = C } else { // update - $r = q("SELECT item.parent AS item_id FROM item + $r = dbq("SELECT item.parent AS item_id FROM item left join abook on item.author_xchan = abook.abook_xchan WHERE $item_uids $item_restrict $simple_update and (abook.abook_blocked = 0 or abook.abook_flags is null) @@ -4724,7 +4783,7 @@ function webpage_to_namespace($webpage) { function update_remote_id($channel,$post_id,$webpage,$pagetitle,$namespace,$remote_id,$mid) { - if(! $post_id) + if(! intval($post_id)) return; $page_type = webpage_to_namespace($webpage); @@ -4746,7 +4805,7 @@ function update_remote_id($channel,$post_id,$webpage,$pagetitle,$namespace,$remo // as the entire mid. If it were the post_id the link would be less portable. IConfig::Set( - intval($post_id), + $post_id, 'system', $page_type, ($pagetitle) ? $pagetitle : substr($mid,0,16), diff --git a/include/markdown.php b/include/markdown.php index 0bfe595b8..013d57c29 100644 --- a/include/markdown.php +++ b/include/markdown.php @@ -213,6 +213,11 @@ function bb_to_markdown_share($match) { } +function bb_to_markdown_transform_tags($match) { + return '#'. str_replace(' ', '_', $match[3]); +} + + /** * @brief Convert bbcode to Markdown. * @@ -226,8 +231,7 @@ function bb_to_markdown($Text, $options = []) { * Transform #tags, strip off the [url] and replace spaces with underscore */ - $Text = preg_replace_callback('/#\[([zu])rl\=(.*?)\](.*?)\[\/[(zu)]rl\]/i', - create_function('$match', 'return \'#\'. str_replace(\' \', \'_\', $match[3]);'), $Text); + $Text = preg_replace_callback('/#\[([zu])rl\=(.*?)\](.*?)\[\/[(zu)]rl\]/i', 'bb_to_markdown_transform_tags', $Text); $Text = preg_replace('/#\^\[([zu])rl\=(.*?)\](.*?)\[\/([zu])rl\]/i', '[$1rl=$2]$3[/$4rl]', $Text); @@ -282,7 +286,6 @@ function bb_to_markdown($Text, $options = []) { return $Text; } - /** * @brief Convert a HTML text into Markdown. * diff --git a/include/message.php b/include/message.php index 37fe6749d..e6c9ed8ee 100644 --- a/include/message.php +++ b/include/message.php @@ -17,9 +17,9 @@ function mail_prepare_binary($item) { // send a private message - -function send_message($uid = 0, $recipient = '', $body = '', $subject = '', $replyto = '', $expires = NULL_DATE, $mimetype = 'text/bbcode', $raw = false, $sig = '') { + +function send_message($uid = 0, $recipient = '', $body = '', $subject = '', $replyto = '', $expires = NULL_DATE, $mimetype = 'text/bbcode', $raw = false, $sig = '') { $ret = array('success' => false); $is_reply = false; @@ -80,7 +80,7 @@ function send_message($uid = 0, $recipient = '', $body = '', $subject = '', $rep $ret['message'] = t('No recipient provided.'); return $ret; } - + if(! strlen($subject)) $subject = t('[no subject]'); @@ -99,13 +99,13 @@ function send_message($uid = 0, $recipient = '', $body = '', $subject = '', $rep if($r) { $conv_guid = $r[0]['conv_guid']; } - } + } if(! $conv_guid) { // create a new conversation - $retconv = create_conversation($channel,$recipient,$subject); + $retconv = create_conversation($channel,$recipient,$subject); if($retconv) { $conv_guid = $retconv['guid']; } @@ -153,7 +153,7 @@ function send_message($uid = 0, $recipient = '', $body = '', $subject = '', $rep /** * - * When a photo was uploaded into the message using the (profile wall) ajax + * When a photo was uploaded into the message using the (profile wall) ajax * uploader, The permissions are initially set to disallow anybody but the * owner from seeing it. This is because the permissions may not yet have been * set for the post. If it's private, the photo permissions should be set @@ -232,7 +232,7 @@ function send_message($uid = 0, $recipient = '', $body = '', $subject = '', $rep dbesc($image_uri), intval($channel['channel_id']), dbesc('<' . $channel['channel_hash'] . '>') - ); + ); } } @@ -293,7 +293,7 @@ function create_conversation($channel,$recipient,$subject) { dbesc($conv_guid), intval($channel['channel_id']) ); - + return $r[0]; } @@ -308,11 +308,12 @@ function private_messages_list($uid, $mailbox = '', $start = 0, $numitems = 0) { if($numitems) $limit = " LIMIT " . intval($numitems) . " OFFSET " . intval($start); - + if($mailbox !== '') { $x = q("select channel_hash from channel where channel_id = %d limit 1", intval($uid) ); + if(! $x) return array(); @@ -332,10 +333,9 @@ function private_messages_list($uid, $mailbox = '', $start = 0, $numitems = 0) { case 'combined': default: $parents = q("SELECT mail.parent_mid FROM mail LEFT JOIN conv ON mail.conv_guid = conv.guid WHERE mail.mid = mail.parent_mid AND mail.channel_id = %d ORDER BY conv.updated DESC $limit", - dbesc($local_channel) + intval($local_channel) ); break; - } } @@ -346,7 +346,7 @@ function private_messages_list($uid, $mailbox = '', $start = 0, $numitems = 0) { foreach($parents as $parent) { $all = q("SELECT * FROM mail WHERE parent_mid = '%s' AND channel_id = %d ORDER BY created DESC limit 1", dbesc($parent['parent_mid']), - dbesc($local_channel) + intval($local_channel) ); if($all) { @@ -356,7 +356,7 @@ function private_messages_list($uid, $mailbox = '', $start = 0, $numitems = 0) { } } } - else { + elseif($sql) { $r = q($sql); } @@ -477,7 +477,7 @@ function private_messages_drop($channel_id, $messageitem_id, $drop_conversation dbesc($x[0]['conv_guid']), intval($channel_id) ); - } + } $m['mail'] = array(); foreach($z as $zz) { xchan_mail_query($zz); @@ -513,7 +513,7 @@ function private_messages_fetch_conversation($channel_id, $messageitem_id, $upda intval($messageitem_id) ); - if(! $r) + if(! $r) return array(); $messages = q("select * from mail where parent_mid = '%s' and channel_id = %d order by created asc", @@ -559,7 +559,7 @@ function private_messages_fetch_conversation($channel_id, $messageitem_id, $upda intval($channel_id) ); } - + return $messages; } diff --git a/include/nav.php b/include/nav.php index b2a061661..994f7e0c0 100644 --- a/include/nav.php +++ b/include/nav.php @@ -14,39 +14,41 @@ function nav($template = 'default') { * */ - if(!(x(App::$page,'nav'))) - App::$page['nav'] = ''; - + App::$page['nav'] = App::$page['nav'] ?? ''; + App::$page['htmlhead'] = App::$page['htmlhead'] ?? ''; App::$page['htmlhead'] .= ''; - $is_owner = (((local_channel()) && ((App::$profile_uid == local_channel()) || (App::$profile_uid == 0))) ? true : false); + $observer = []; + $sitelocation = ''; - if(local_channel()) { - $channel = App::get_channel(); + if (local_channel()) { + $channel = App::get_channel(); $observer = App::get_observer(); - $prof = q("select id from profile where uid = %d and is_default = 1", + + $prof = q("select id from profile where uid = %d and is_default = 1", intval($channel['channel_id']) ); - if(! $_SESSION['delegate']) { + if (empty($_SESSION['delegate'])) { $chans = q("select channel_name, channel_id from channel where channel_account_id = %d and channel_removed = 0 order by channel_name ", intval(get_account_id()) ); } $sitelocation = (($is_owner) ? '' : App::$profile['reddress']); } - elseif(remote_channel()) { - $observer = App::get_observer(); + elseif (remote_channel()) { + $observer = App::get_observer(); $sitelocation = ((App::$profile['reddress']) ? App::$profile['reddress'] : '@' . App::get_hostname()); } require_once('include/conversation.php'); - $nav_apps = []; - $navbar_apps = []; + $nav_apps = []; + $navbar_apps = []; $channel_apps = []; - - $channel_apps[] = channel_apps($is_owner, App::$profile['channel_address']); + + if (isset(App::$profile['channel_address'])) + $channel_apps[] = channel_apps($is_owner, App::$profile['channel_address']); /** @@ -55,117 +57,121 @@ function nav($template = 'default') { * */ - $banner = get_config('system','banner'); + $banner = get_config('system', 'banner'); - if($banner === false) - $banner = get_config('system','sitename'); - - call_hooks('get_banner',$banner); + if ($banner === false) + $banner = get_config('system', 'sitename'); - App::$page['header'] .= replace_macros(get_markup_template('hdr.tpl'), array( + call_hooks('get_banner', $banner); + + App::$page['header'] = App::$page['header'] ?? ''; + App::$page['header'] .= replace_macros(get_markup_template('hdr.tpl'), [ //we could additionally use this to display important system notifications e.g. for updates - )); + ]); // nav links: array of array('href', 'text', 'extra css classes', 'title') $nav = []; - if(can_view_public_stream()) + if (can_view_public_stream()) $nav['pubs'] = true; /** * Display login or logout - */ + */ - $nav['usermenu'] = []; - $userinfo = null; + $nav['usermenu'] = []; $nav['loginmenu'] = []; + $userinfo = []; - if($observer) { + if ($observer) { $userinfo = [ - 'icon' => $observer['xchan_photo_m'].'?rev='.strtotime($observer['xchan_photo_date']), + 'icon' => $observer['xchan_photo_m'] . '?rev=' . strtotime($observer['xchan_photo_date']), 'name' => $observer['xchan_addr'], ]; } - elseif(! $_SESSION['authenticated']) { + elseif (empty($_SESSION['authenticated'])) { $nav['remote_login'] = remote_login(); - $nav['loginmenu'][] = Array('rmagic',t('Remote authentication'),'',t('Click to authenticate to your home hub'),'rmagic_nav_btn'); + $nav['loginmenu'][] = ['rmagic', t('Remote authentication'), '', t('Click to authenticate to your home hub'), 'rmagic_nav_btn']; } - if(local_channel()) { + if (local_channel()) { - if(! $_SESSION['delegate']) { - $nav['manage'] = array('manage', t('Channel Manager'), "", t('Manage your channels'),'manage_nav_btn'); - } - if(Apps::system_app_installed(local_channel(), 'Privacy Groups')) - $nav['group'] = array('group', t('Privacy Groups'),"", t('Manage your privacy groups'),'group_nav_btn'); + if (empty($_SESSION['delegate'])) { + $nav['manage'] = ['manage', t('Channel Manager'), "", t('Manage your channels'), 'manage_nav_btn']; + } + if (Apps::system_app_installed(local_channel(), 'Privacy Groups')) + $nav['group'] = ['group', t('Privacy Groups'), "", t('Manage your privacy groups'), 'group_nav_btn']; - $nav['settings'] = array('settings', t('Settings'),"", t('Account/Channel Settings'),'settings_nav_btn'); + $nav['settings'] = ['settings', t('Settings'), "", t('Account/Channel Settings'), 'settings_nav_btn']; - - if($chans && count($chans) > 1 && feature_enabled(local_channel(),'nav_channel_select')) + + if ($chans && count($chans) > 1 && feature_enabled(local_channel(), 'nav_channel_select')) $nav['channels'] = $chans; - $nav['logout'] = ['logout',t('Logout'), "", t('End this session'),'logout_nav_btn']; - - // user menu - $nav['usermenu'][] = ['profile/' . $channel['channel_address'], t('View Profile'), ((\App::$nav_sel['raw_name'] == 'Profile') ? 'active' : ''), t('Your profile page'),'profile_nav_btn']; + $nav['logout'] = ['logout', t('Logout'), "", t('End this session'), 'logout_nav_btn']; - if(feature_enabled(local_channel(),'multi_profiles')) - $nav['usermenu'][] = ['profiles', t('Edit Profiles'), ((\App::$nav_sel['raw_name'] == 'Profiles') ? 'active' : '') , t('Manage/Edit profiles'),'profiles_nav_btn']; + // user menu + $nav['usermenu'][] = ['profile/' . $channel['channel_address'], t('View Profile'), ((App::$nav_sel['raw_name'] == 'Profile') ? 'active' : ''), t('Your profile page'), 'profile_nav_btn']; + + if (feature_enabled(local_channel(), 'multi_profiles')) + $nav['usermenu'][] = ['profiles', t('Edit Profiles'), ((App::$nav_sel['raw_name'] == 'Profiles') ? 'active' : ''), t('Manage/Edit profiles'), 'profiles_nav_btn']; else - $nav['usermenu'][] = ['profiles/' . $prof[0]['id'], t('Edit Profile'), ((\App::$nav_sel['raw_name'] == 'Profiles') ? 'active' : ''), t('Edit your profile'),'profiles_nav_btn']; + $nav['usermenu'][] = ['profiles/' . $prof[0]['id'], t('Edit Profile'), ((App::$nav_sel['raw_name'] == 'Profiles') ? 'active' : ''), t('Edit your profile'), 'profiles_nav_btn']; } else { - if(! get_account_id()) { - if(App::$module === 'channel') { - $nav['login'] = login(true,'main-login',false,false); - $nav['loginmenu'][] = ['login',t('Login'),'',t('Sign in'),'']; + if (!get_account_id()) { + if (App::$module === 'channel') { + $nav['login'] = login(true, 'main-login', false, false); + $nav['loginmenu'][] = ['login', t('Login'), '', t('Sign in'), '']; } else { - $nav['login'] = login(true,'main-login',false,false); - $nav['loginmenu'][] = ['login',t('Login'),'',t('Sign in'),'login_nav_btn']; + $nav['login'] = login(true, 'main-login', false, false); + $nav['loginmenu'][] = ['login', t('Login'), '', t('Sign in'), 'login_nav_btn']; + App::$page['content'] .= replace_macros(get_markup_template('nav_login.tpl'), - [ - '$nav' => $nav, + [ + '$nav' => $nav, 'userinfo' => $userinfo ] ); } } else - $nav['alogout'] = ['logout',t('Logout'), "", t('End this session'),'logout_nav_btn']; + $nav['alogout'] = ['logout', t('Logout'), "", t('End this session'), 'logout_nav_btn']; } $my_url = get_my_url(); - if(! $my_url) { + if (!$my_url) { $observer = App::get_observer(); - $my_url = (($observer) ? $observer['xchan_url'] : ''); + $my_url = (($observer) ? $observer['xchan_url'] : ''); } $homelink_arr = parse_url($my_url); - $homelink = $homelink_arr['scheme'] . '://' . $homelink_arr['host']; + $scheme = $homelink_arr['scheme'] ?? ''; + $host = $homelink_arr['host'] ?? ''; + $homelink = $scheme . '://' . $host; - if(! $is_owner) { - $nav['rusermenu'] = array( + if (!$is_owner) { + $nav['rusermenu'] = [ $homelink, t('Take me home'), 'logout', ((local_channel()) ? t('Logout') : t('Log me out of this site')) - ); + ]; } - if(((get_config('system','register_policy') == REGISTER_OPEN) || (get_config('system','register_policy') == REGISTER_APPROVE)) && (! $_SESSION['authenticated'])) - $nav['register'] = ['register',t('Register'), "", t('Create an account'),'register_nav_btn']; + if (((get_config('system', 'register_policy') == REGISTER_OPEN) || (get_config('system', 'register_policy') == REGISTER_APPROVE)) && (empty($_SESSION['authenticated']))) + $nav['register'] = ['register', t('Register'), "", t('Create an account'), 'register_nav_btn']; - if(! get_config('system','hide_help')) { - $help_url = z_root() . '/help?f=&cmd=' . App::$cmd; - $context_help = ''; - $enable_context_help = ((intval(get_config('system','enable_context_help')) === 1 || get_config('system','enable_context_help') === false) ? true : false); - if($enable_context_help === true) { + if (!get_config('system', 'hide_help')) { + $help_url = z_root() . '/help?f=&cmd=' . App::$cmd; + $context_help = ''; + $enable_context_help = ((intval(get_config('system', 'enable_context_help')) === 1 || get_config('system', 'enable_context_help') === false) ? true : false); + if ($enable_context_help === true) { require_once('include/help.php'); $context_help = load_context_help(); //point directly to /help if $context_help is empty - this can be removed once we have context help for all modules @@ -174,7 +180,7 @@ function nav($template = 'default') { $nav['help'] = [$help_url, t('Help'), "", t('Help and documentation'), 'help_nav_btn', $context_help, $enable_context_help]; } - switch(App::$module) { + switch (App::$module) { case 'network': $search_form_action = 'network'; break; @@ -190,32 +196,32 @@ function nav($template = 'default') { /** * Admin page */ - if (is_site_admin()) { - $nav['admin'] = array('admin/', t('Admin'), "", t('Site Setup and Configuration'),'admin_nav_btn'); - } + if (is_site_admin()) { + $nav['admin'] = ['admin/', t('Admin'), "", t('Site Setup and Configuration'), 'admin_nav_btn']; + } - $x = array('nav' => $nav, 'usermenu' => $userinfo ); + $x = ['nav' => $nav, 'usermenu' => $userinfo]; call_hooks('nav', $x); - // Not sure the best place to put this on the page. So I'm implementing it but leaving it - // turned off until somebody discovers this and figures out a good location for it. + // Not sure the best place to put this on the page. So I'm implementing it but leaving it + // turned off until somebody discovers this and figures out a good location for it. $powered_by = ''; - $url = ''; + $url = ''; $settings_url = ''; - if(App::$profile_uid && App::$nav_sel['raw_name']) { + if (App::$profile_uid && App::$nav_sel['raw_name']) { $active_app = q("SELECT app_url FROM app WHERE app_channel = %d AND app_name = '%s' LIMIT 1", intval(App::$profile_uid), dbesc(App::$nav_sel['raw_name']) ); - if($active_app) { - if(strpos($active_app[0]['app_url'], ',')) { + if ($active_app) { + if (strpos($active_app[0]['app_url'], ',')) { $urls = explode(',', $active_app[0]['app_url']); - $url = trim($urls[0]); - if($is_owner) + $url = trim($urls[0]); + if ($is_owner) $settings_url = trim($urls[1]); } else { @@ -224,42 +230,39 @@ function nav($template = 'default') { } } - if(! $settings_url && isset(App::$nav_sel['settings_url'])) + if (!$settings_url && isset(App::$nav_sel['settings_url'])) $settings_url = App::$nav_sel['settings_url']; $pinned_list = []; - $syslist = []; //app bin - if($is_owner) { - if(get_pconfig(local_channel(), 'system','import_system_apps') !== datetime_convert('UTC','UTC','now','Y-m-d')) { + if ($is_owner) { + if (get_pconfig(local_channel(), 'system', 'import_system_apps') !== datetime_convert('UTC', 'UTC', 'now', 'Y-m-d')) { Apps::import_system_apps(); - set_pconfig(local_channel(), 'system','import_system_apps', datetime_convert('UTC','UTC','now','Y-m-d')); + set_pconfig(local_channel(), 'system', 'import_system_apps', datetime_convert('UTC', 'UTC', 'now', 'Y-m-d')); } - if(get_pconfig(local_channel(), 'system','force_import_system_apps') !== STD_VERSION) { + if (get_pconfig(local_channel(), 'system', 'force_import_system_apps') !== STD_VERSION) { Apps::import_system_apps(); - set_pconfig(local_channel(), 'system','force_import_system_apps', STD_VERSION); + set_pconfig(local_channel(), 'system', 'force_import_system_apps', STD_VERSION); } - $list = Apps::app_list(local_channel(), false, [ 'nav_pinned_app' ]); - if($list) { - foreach($list as $li) { + $list = Apps::app_list(local_channel(), false, ['nav_pinned_app']); + if ($list) { + foreach ($list as $li) { $pinned_list[] = Apps::app_encode($li); } } Apps::translate_system_apps($pinned_list); - usort($pinned_list,'Zotlabs\\Lib\\Apps::app_name_compare'); - - $pinned_list = Apps::app_order(local_channel(),$pinned_list, 'nav_pinned_app'); - + usort($pinned_list, 'Zotlabs\\Lib\\Apps::app_name_compare'); + $pinned_list = Apps::app_order(local_channel(), $pinned_list, 'nav_pinned_app'); $syslist = []; - $list = Apps::app_list(local_channel(), false, [ 'nav_featured_app' ]); + $list = Apps::app_list(local_channel(), false, ['nav_featured_app']); - if($list) { - foreach($list as $li) { + if ($list) { + foreach ($list as $li) { $syslist[] = Apps::app_encode($li); } } @@ -270,85 +273,82 @@ function nav($template = 'default') { $syslist = Apps::get_system_apps(true); } - usort($syslist,'Zotlabs\\Lib\\Apps::app_name_compare'); + usort($syslist, 'Zotlabs\\Lib\\Apps::app_name_compare'); - $syslist = Apps::app_order(local_channel(),$syslist, 'nav_featured_app'); + $syslist = Apps::app_order(local_channel(), $syslist, 'nav_featured_app'); - - if($pinned_list) { - foreach($pinned_list as $app) { - if(\App::$nav_sel['name'] == $app['name']) + if ($pinned_list) { + foreach ($pinned_list as $app) { + if (App::$nav_sel['name'] == $app['name']) $app['active'] = true; - if($is_owner) { - $navbar_apps[] = Apps::app_render($app,'navbar'); + if ($is_owner) { + $navbar_apps[] = Apps::app_render($app, 'navbar'); } - elseif(! $is_owner && strpos($app['requires'], 'local_channel') === false) { - $navbar_apps[] = Apps::app_render($app,'navbar'); + elseif (!$is_owner && strpos($app['requires'], 'local_channel') === false) { + $navbar_apps[] = Apps::app_render($app, 'navbar'); } } } - - if($syslist) { - foreach($syslist as $app) { - if(\App::$nav_sel['name'] == $app['name']) + if ($syslist) { + foreach ($syslist as $app) { + if (isset(App::$nav_sel['name']) && App::$nav_sel['name'] == $app['name']) $app['active'] = true; - - if($is_owner) { - $nav_apps[] = Apps::app_render($app,'nav'); + if ($is_owner) { + $nav_apps[] = Apps::app_render($app, 'nav'); } - elseif(! $is_owner && strpos($app['requires'], 'local_channel') === false) { - $nav_apps[] = Apps::app_render($app,'nav'); + elseif (!$is_owner && (!isset($app['requires']) || (isset($app['requires']) && strpos($app['requires'], 'local_channel') === false))) { + $nav_apps[] = Apps::app_render($app, 'nav'); } } } - $c = theme_include('navbar_' . purify_filename($template) . '.css'); + $c = theme_include('navbar_' . purify_filename($template) . '.css'); $tpl = get_markup_template('navbar_' . purify_filename($template) . '.tpl'); - if($c && $tpl) { + if ($c && $tpl) { head_add_css('navbar_' . $template . '.css'); } - if(! $tpl) { + if (!$tpl) { $tpl = get_markup_template('navbar_default.tpl'); } - App::$page['nav'] .= replace_macros($tpl, array( - '$baseurl' => z_root(), - '$fulldocs' => t('Help'), - '$sitelocation' => $sitelocation, - '$nav' => $x['nav'], - '$banner' => $banner, + App::$page['nav'] .= replace_macros($tpl, [ + '$baseurl' => z_root(), + '$fulldocs' => t('Help'), + '$sitelocation' => $sitelocation, + '$nav' => $x['nav'], + '$banner' => $banner, '$emptynotifications' => t('Loading'), - '$userinfo' => $x['usermenu'], - '$localuser' => local_channel(), - '$is_owner' => $is_owner, - '$sel' => App::$nav_sel, - '$powered_by' => $powered_by, - '$help' => t('@name, !forum, #tag, ?doc, content'), - '$pleasewait' => t('Please wait...'), - '$nav_apps' => $nav_apps, - '$navbar_apps' => $navbar_apps, - '$channel_menu' => get_pconfig(App::$profile_uid,'system','channel_menu',get_config('system','channel_menu')), - '$channel_thumb' => ((App::$profile) ? App::$profile['thumb'] : ''), - '$channel_apps' => $channel_apps, - '$addapps' => t('Add Apps'), - '$orderapps' => t('Arrange Apps'), - '$sysapps_toggle' => t('Toggle System Apps'), - '$url' => (($url) ? $url : z_root() . '/' . App::$cmd), - '$settings_url' => $settings_url - )); + '$userinfo' => $x['usermenu'], + '$localuser' => local_channel(), + '$is_owner' => $is_owner, + '$sel' => App::$nav_sel, + '$powered_by' => $powered_by, + '$help' => t('@name, !forum, #tag, ?doc, content'), + '$pleasewait' => t('Please wait...'), + '$nav_apps' => $nav_apps, + '$navbar_apps' => $navbar_apps, + '$channel_menu' => get_pconfig(App::$profile_uid, 'system', 'channel_menu', get_config('system', 'channel_menu')), + '$channel_thumb' => ((App::$profile) ? App::$profile['thumb'] : ''), + '$channel_apps' => $channel_apps, + '$addapps' => t('Add Apps'), + '$orderapps' => t('Arrange Apps'), + '$sysapps_toggle' => t('Toggle System Apps'), + '$url' => (($url) ? $url : z_root() . '/' . App::$cmd), + '$settings_url' => $settings_url + ]); - if(x($_SESSION, 'reload_avatar') && $observer) { - // The avatar has been changed on the server but the browser doesn't know that, + if (x($_SESSION, 'reload_avatar') && $observer) { + // The avatar has been changed on the server but the browser doesn't know that, // force the browser to reload the image from the server instead of its cache. $tpl = get_markup_template('force_image_reload.tpl'); - App::$page['nav'] .= replace_macros($tpl, array( + App::$page['nav'] .= replace_macros($tpl, [ '$imgUrl' => $observer['xchan_photo_m'] - )); + ]); unset($_SESSION['reload_avatar']); } @@ -358,9 +358,9 @@ function nav($template = 'default') { /* * Set a menu item in navbar as selected - * + * */ -function nav_set_selected($raw_name, $settings_url = ''){ +function nav_set_selected($raw_name, $settings_url = '') { App::$nav_sel['raw_name'] = $raw_name; $item = ['name' => $raw_name]; @@ -368,7 +368,7 @@ function nav_set_selected($raw_name, $settings_url = ''){ App::$nav_sel['name'] = $item['name']; - if($settings_url) + if ($settings_url) App::$nav_sel['settings_url'] = z_root() . '/' . $settings_url; } @@ -376,20 +376,20 @@ function channel_apps($is_owner = false, $nickname = null) { // Don't provide any channel apps if we're running as the sys channel - if(App::$is_sys) + if (App::$is_sys) return ''; $channel = App::get_channel(); - if($channel && is_null($nickname)) + if ($channel && is_null($nickname)) $nickname = $channel['channel_address']; - $uid = ((App::$profile['profile_uid']) ? App::$profile['profile_uid'] : local_channel()); + $uid = ((isset(App::$profile['profile_uid'])) ? App::$profile['profile_uid'] : local_channel()); - if(! get_pconfig($uid, 'system', 'channelapps','1')) - return; + if (!get_pconfig($uid, 'system', 'channelapps', '1')) + return; - if($uid == local_channel()) { + if ($uid == local_channel()) { return; } else { @@ -399,9 +399,9 @@ function channel_apps($is_owner = false, $nickname = null) { $sql_options = item_permissions_sql($uid); $r = q("select item.* from item left join iconfig on item.id = iconfig.iid - where item.uid = %d and iconfig.cat = 'system' and iconfig.v = '%s' - and item.item_delayed = 0 and item.item_deleted = 0 - and ( iconfig.k = 'WEBPAGE' and item_type = %d ) + where item.uid = %d and iconfig.cat = 'system' and iconfig.v = '%s' + and item.item_delayed = 0 and item.item_deleted = 0 + and ( iconfig.k = 'WEBPAGE' and item_type = %d ) $sql_options limit 1", intval($uid), dbesc('home'), @@ -410,7 +410,7 @@ function channel_apps($is_owner = false, $nickname = null) { $has_webpages = (($r) ? true : false); - if(x($_GET, 'tab')) + if (x($_GET, 'tab')) $tab = notags(trim($_GET['tab'])); $url = z_root() . '/channel/' . $nickname; @@ -427,7 +427,7 @@ function channel_apps($is_owner = false, $nickname = null) { ], ]; - $p = get_all_perms($uid,get_observer_hash()); + $p = get_all_perms($uid, get_observer_hash()); if ($p['view_profile']) { $tabs[] = [ @@ -458,7 +458,7 @@ function channel_apps($is_owner = false, $nickname = null) { ]; } - if($p['view_stream'] && $cal_link) { + if ($p['view_stream'] && $cal_link) { $tabs[] = [ 'label' => t('Calendar'), 'url' => z_root() . $cal_link, @@ -470,13 +470,13 @@ function channel_apps($is_owner = false, $nickname = null) { } - if ($p['chat'] && Apps::system_app_installed($uid,'Chatrooms')) { + if ($p['chat'] && Apps::system_app_installed($uid, 'Chatrooms')) { $has_chats = Chatroom::list_count($uid); if ($has_chats) { $tabs[] = [ 'label' => t('Chatrooms'), 'url' => z_root() . '/chat/' . $nickname, - 'sel' => ((argv(0) == 'chat') ? 'active' : '' ), + 'sel' => ((argv(0) == 'chat') ? 'active' : ''), 'title' => t('Chatrooms'), 'id' => 'chat-tab', 'icon' => 'comments-o' @@ -484,7 +484,7 @@ function channel_apps($is_owner = false, $nickname = null) { } } - $has_bookmarks = menu_list_count(local_channel(),'',MENU_BOOKMARK) + menu_list_count(local_channel(),'',MENU_SYSTEM|MENU_BOOKMARK); + $has_bookmarks = menu_list_count(local_channel(), '', MENU_BOOKMARK) + menu_list_count(local_channel(), '', MENU_SYSTEM | MENU_BOOKMARK); if ($is_owner && $has_bookmarks) { $tabs[] = [ 'label' => t('Bookmarks'), @@ -496,10 +496,10 @@ function channel_apps($is_owner = false, $nickname = null) { ]; } - if($p['view_pages'] && Apps::system_app_installed($uid, 'Cards')) { + if ($p['view_pages'] && Apps::system_app_installed($uid, 'Cards')) { $tabs[] = [ 'label' => t('Cards'), - 'url' => z_root() . '/cards/' . $nickname , + 'url' => z_root() . '/cards/' . $nickname, 'sel' => ((argv(0) == 'cards') ? 'active' : ''), 'title' => t('View Cards'), 'id' => 'cards-tab', @@ -507,10 +507,10 @@ function channel_apps($is_owner = false, $nickname = null) { ]; } - if($p['view_pages'] && Apps::system_app_installed($uid, 'Articles')) { + if ($p['view_pages'] && Apps::system_app_installed($uid, 'Articles')) { $tabs[] = [ 'label' => t('Articles'), - 'url' => z_root() . '/articles/' . $nickname , + 'url' => z_root() . '/articles/' . $nickname, 'sel' => ((argv(0) == 'articles') ? 'active' : ''), 'title' => t('View Articles'), 'id' => 'articles-tab', @@ -519,7 +519,7 @@ function channel_apps($is_owner = false, $nickname = null) { } - if($has_webpages && Apps::system_app_installed($uid, 'Webpages')) { + if ($has_webpages && Apps::system_app_installed($uid, 'Webpages')) { $tabs[] = [ 'label' => t('Webpages'), 'url' => z_root() . '/page/' . $nickname . '/home', @@ -529,7 +529,7 @@ function channel_apps($is_owner = false, $nickname = null) { 'icon' => 'newspaper-o' ]; } - + if ($p['view_wiki'] && Apps::system_app_installed($uid, 'Wiki')) { $tabs[] = [ @@ -542,11 +542,11 @@ function channel_apps($is_owner = false, $nickname = null) { ]; } - $arr = array('is_owner' => $is_owner, 'nickname' => $nickname, 'tab' => (($tab) ? $tab : false), 'tabs' => $tabs); + $arr = ['is_owner' => $is_owner, 'nickname' => $nickname, 'tab' => (($tab) ? $tab : false), 'tabs' => $tabs]; - call_hooks('channel_apps', $arr); + call_hooks('channel_apps', $arr); - return replace_macros(get_markup_template('profile_tabs.tpl'), + return replace_macros(get_markup_template('profile_tabs.tpl'), [ '$tabs' => $arr['tabs'], '$name' => App::$profile['channel_name'], diff --git a/include/network.php b/include/network.php index 324a99eba..f5ff48fce 100644 --- a/include/network.php +++ b/include/network.php @@ -1,8 +1,10 @@ [ + ACTIVITYSTREAMS_JSONLD_REV, + 'https://w3id.org/security/v1', + z_root() . ZOT_APSCHEMA_REV + ]], $obj ); + + $headers = []; + $headers['Content-Type'] = 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"' ; + $x['signature'] = LDSignatures::sign($x,$channel); + $ret = json_encode($x, JSON_UNESCAPED_SLASHES); + logger('data: ' . jindent($ret), LOGGER_DATA); + $headers['Date'] = datetime_convert('UTC','UTC', 'now', 'D, d M Y H:i:s \\G\\M\\T'); + $headers['Digest'] = HTTPSig::generate_digest_header($ret); + $headers['(request-target)'] = strtolower($_SERVER['REQUEST_METHOD']) . ' ' . $_SERVER['REQUEST_URI']; + + $h = HTTPSig::create_sig($headers,$channel['channel_prvkey'],channel_url($channel)); + HTTPSig::set_headers($h); + + echo $ret; + killme(); + +} + /** * @brief Send HTTP status header. * @@ -1978,7 +2005,7 @@ function getBestSupportedMimeType($mimeTypes = null, $acceptedTypes = false) { // check if there is a different quality if (strpos($a, ';q=')) { // divide "mime/type;q=X" into two parts: "mime/type" i "X" - list($a, $q) = explode(';q=', $a); + [$a, $q] = explode(';q=', $a); } // mime-type $a is accepted with the quality $q // WARNING: $q == 0 means, that mime-type isn’t supported! diff --git a/include/oembed.php b/include/oembed.php old mode 100755 new mode 100644 index eeae7a174..9a25686fa --- a/include/oembed.php +++ b/include/oembed.php @@ -14,7 +14,7 @@ function oembed_replacecb($matches){ $j = oembed_fetch_url($result['url']); $s = oembed_format_object($j); - return $s; + return $s; } @@ -52,7 +52,7 @@ function oembed_action($embedurl) { } } } - + $found = false; if(($x = get_config('system','embed_allow'))) { @@ -74,7 +74,7 @@ function oembed_action($embedurl) { } // allow individual members to block something that wasn't blocked already. - // They cannot over-ride the site to allow or change the filtering on an + // They cannot over-ride the site to allow or change the filtering on an // embed that is not allowed by the site admin. if(local_channel()) { @@ -96,7 +96,7 @@ function oembed_action($embedurl) { $arr = array('url' => $embedurl, 'action' => $action); call_hooks('oembed_action',$arr); - logger('action: ' . $arr['action'] . ' url: ' . $arr['url'], LOGGER_DEBUG,LOG_DEBUG); + logger('action: ' . $arr['action'] . ' url: ' . $arr['url'], LOGGER_DEBUG,LOG_DEBUG); return $arr; @@ -122,7 +122,7 @@ function oembed_fetch_url($embedurl){ $noexts = [ '.mp3', '.mp4', '.ogg', '.ogv', '.oga', '.ogm', '.webm', '.opus', '.m4a' ]; - $result = oembed_action($embedurl); + $result = oembed_action($embedurl); $embedurl = $result['url']; $action = $result['action']; @@ -153,7 +153,7 @@ function oembed_fetch_url($embedurl){ 'title' => t('View PDF'), 'type' => 'pdf' ]; - + // set $txt to something so that we don't attempt to fetch what could be a lengthy pdf. $txt = EMPTY_STR; } @@ -165,12 +165,12 @@ function oembed_fetch_url($embedurl){ if ($action !== 'block') { // try oembed autodiscovery $redirects = 0; - $result = z_fetch_url($furl, false, $redirects, + $result = z_fetch_url($furl, false, $redirects, [ - 'timeout' => 30, - 'accept_content' => "text/*", - 'novalidate' => true, - 'session' => ((local_channel() && $zrl) ? true : false) + 'timeout' => 30, + 'accept_content' => "text/*", + 'novalidate' => true, + 'session' => ((local_channel() && $zrl) ? true : false) ] ); @@ -180,7 +180,8 @@ function oembed_fetch_url($embedurl){ logger('fetch failure: ' . $furl); if($html_text) { - $dom = @DOMDocument::loadHTML($html_text); + $dom = new DOMDocument; + @$dom->loadHTML($html_text); if ($dom){ $xpath = new DOMXPath($dom); $attr = "oembed"; @@ -189,6 +190,13 @@ function oembed_fetch_url($embedurl){ $entries = $xpath->query("//link[@type='application/json+oembed']"); foreach($entries as $e){ $href = $e->getAttributeNode("href")->nodeValue; + + // Youtube will happily hand us an http oembed URL even if we specify an https link; and the returned http link will fail with a 40x if you try and fetch it + // This is not our bug, but good luck getting google to fix it. + //if (strpos($href,'http:') === 0 && strpos($href,'youtu') !== false) { + // $href = str_replace('http:','https:', $href); + //} + $x = z_fetch_url($href . '&maxwidth=' . App::$videowidth); if($x['success']) $txt = $x['body']; @@ -196,7 +204,7 @@ function oembed_fetch_url($embedurl){ logger('fetch failed: ' . $href); break; } - // soundcloud is now using text/json+oembed instead of application/json+oembed, + // soundcloud is now using text/json+oembed instead of application/json+oembed, // others may be also $entries = $xpath->query("//link[@type='text/json+oembed']"); foreach($entries as $e){ @@ -211,18 +219,18 @@ function oembed_fetch_url($embedurl){ } } } - + if ($txt==false || $txt=="") { $x = array('url' => $embedurl,'videowidth' => App::$videowidth); call_hooks('oembed_probe',$x); if(array_key_exists('embed',$x)) $txt = $x['embed']; } - + $txt=trim($txt); if ($txt[0]!="{") $txt='{"type":"error"}'; - + // save in cache if(! get_config('system','oembed_cache_disable')) @@ -245,7 +253,7 @@ function oembed_fetch_url($embedurl){ // some sites wrap their entire embed in an iframe // which we will purify away and which we provide anyway. - // So if we see this, grab the frame src url and use that + // So if we see this, grab the frame src url and use that // as the embed content - which will still need to be purified. if(preg_match('#\$th, '$turl'=> $j['thumbnail_url'], )); - + } else { $ret=$jhtml; } @@ -322,7 +330,7 @@ function oembed_format_object($j){ case "photo": { $ret.= ""; $ret.="
        "; - }; break; + }; break; case "link": { if($j['thumbnail_url']) { if(is_matrix_url($embedurl)) { @@ -333,14 +341,14 @@ function oembed_format_object($j){ } //$ret = "".$j['title'].""; - }; break; + }; break; case 'pdf': { $ret = $j['html']; break; } case "rich": { - // not so safe.. + // not so safe.. if($j['zrl']) { $ret = ((preg_match('/^]+>(.*?)<\/div>$/is',$j['html'],$o)) ? $o[1] : $j['html']); } else { @@ -375,7 +383,7 @@ function oembed_iframe($src,$width,$height) { $scroll = ' scrolling="auto" '; } - // try and leave some room for the description line. + // try and leave some room for the description line. $height = intval($height) + 80; $width = intval($width) + 40; @@ -383,8 +391,8 @@ function oembed_iframe($src,$width,$height) { // Make sure any children are sandboxed within their own iframe. - return ''; + return ''; } @@ -411,7 +419,7 @@ function oe_get_inner_html( $node ) { $innerHTML .= $child->ownerDocument->saveXML( $child ); } return $innerHTML; -} +} /** * Find .... @@ -420,17 +428,20 @@ function oe_get_inner_html( $node ) { function oembed_html2bbcode($text) { // start parser only if 'oembed' is in text if (strpos($text, "oembed")){ - + // convert non ascii chars to html entities $html_text = mb_convert_encoding($text, 'HTML-ENTITIES', mb_detect_encoding($text)); - + // If it doesn't parse at all, just return the text. - $dom = @DOMDocument::loadHTML($html_text); + + $dom = new DOMDocument; + @$dom->loadHTML($html_text); if(! $dom) return $text; + $xpath = new DOMXPath($dom); $attr = "oembed"; - + $xattr = oe_build_xpath("class","oembed"); $entries = $xpath->query("//span[$xattr]"); @@ -442,7 +453,7 @@ function oembed_html2bbcode($text) { return oe_get_inner_html( $dom->getElementsByTagName("body")->item(0) ); } else { return $text; - } + } } diff --git a/include/permissions.php b/include/permissions.php index ca8ff6e93..c7eee11f4 100644 --- a/include/permissions.php +++ b/include/permissions.php @@ -279,7 +279,7 @@ function perm_is_allowed($uid, $observer_xchan, $permission, $check_siteblock = // First find out what the channel owner declared permissions to be. - $channel_perm = \Zotlabs\Access\PermissionLimits::Get($uid,$permission); + $channel_perm = intval(\Zotlabs\Access\PermissionLimits::Get($uid,$permission)); $r = q("select channel_pageflags, channel_moved, channel_hash from channel where channel_id = %d limit 1", intval($uid) diff --git a/include/photo/photo_driver.php b/include/photo/photo_driver.php index f61919eea..8de5185af 100644 --- a/include/photo/photo_driver.php +++ b/include/photo/photo_driver.php @@ -64,15 +64,23 @@ function photo_factory($data, $type = null) { * * @param string $filename * Image filename - * @param string $headers (optional) - * Headers to check for Content-Type (from curl request) + * @param string $data (optional) + * Data array fetched from cURL with z_fetch_url * @return null|string Guessed mimetype */ -function guess_image_type($filename, $headers = '') { -// logger('Photo: guess_image_type: '.$filename . ($headers?' from curl headers':''), LOGGER_DEBUG); +function guess_image_type($filename, $data = '') { + + if($data) + $headers = (is_array($data) ? $data['header'] : $data); + + // logger('Photo: guess_image_type: '.$filename . ($headers?' from curl headers':''), LOGGER_DEBUG); + $type = null; $m = null; + $ph = photo_factory(''); + $types = $ph->supportedTypes(); + if($headers) { $hdrs = []; $h = explode("\n", $headers); @@ -81,19 +89,14 @@ function guess_image_type($filename, $headers = '') { $hdrs[strtolower($k)] = $v; } logger('Curl headers: ' .var_export($hdrs, true), LOGGER_DEBUG); - if(array_key_exists('content-type', $hdrs)) { - $ph = photo_factory(''); - $types = $ph->supportedTypes(); - - if(array_key_exists($hdrs['content-type'], $types)) - $type = $hdrs['content-type']; - } + if(array_key_exists('content-type', $hdrs) && array_key_exists($hdrs['content-type'], $types)) + $type = $hdrs['content-type']; } if(is_null($type)){ $ignore_imagick = get_config('system', 'ignore_imagick'); // Guessing from extension? Isn't that... dangerous? - if(class_exists('Imagick') && file_exists($filename) && is_readable($filename) && !$ignore_imagick) { + if(class_exists('Imagick') && ! $ignore_imagick) { $v = Imagick::getVersion(); preg_match('/ImageMagick ([0-9]+\.[0-9]+\.[0-9]+)/', $v['versionString'], $m); if(version_compare($m[1], '6.6.7') >= 0) { @@ -102,8 +105,18 @@ function guess_image_type($filename, $headers = '') { * but at least it comes from the data inside the image, * we won't be tricked by a manipulated extension */ - $image = new Imagick($filename); - $type = $image->getImageMimeType(); + $body = false; + if (strpos($filename, 'http') === false && file_exists($filename) && is_readable($filename)) + $body == file_get_contents($filename); + elseif (is_array($data) && array_key_exists('body', $data)) + $body = $data['body']; + if ($body) { + $image = new Imagick(); + $image->readImageBlob($body); + $r = $image->identifyImage(); + if ($r && is_array($r) && array_key_exists($r['mimetype'], $types)) + $type = $r['mimetype']; + } } else { // earlier imagick versions have issues with scaling png's @@ -115,8 +128,6 @@ function guess_image_type($filename, $headers = '') { if(is_null($type)) { $ext = pathinfo($filename, PATHINFO_EXTENSION); - $ph = photo_factory(''); - $types = $ph->supportedTypes(); foreach($types as $m => $e) { if($ext === $e) { $type = $m; @@ -124,12 +135,12 @@ function guess_image_type($filename, $headers = '') { } } - if(is_null($type) && (strpos($filename, 'http') === false)) { + if(is_null($type) && strpos($filename, 'http') === 0) { $size = getimagesize($filename); - $ph = photo_factory(''); - $types = $ph->supportedTypes(); - $type = ((array_key_exists($size['mime'], $types)) ? $size['mime'] : 'image/jpeg'); + if (array_key_exists($size['mime'], $types)) + $type = $size['mime']; } + if(is_null($type)) { if(strpos(strtolower($filename),'jpg') !== false) $type = 'image/jpeg'; @@ -139,8 +150,8 @@ function guess_image_type($filename, $headers = '') { $type = 'image/gif'; elseif(strpos(strtolower($filename),'png') !== false) $type = 'image/png'; - elseif(strpos(strtolower($filename),'webp') !== false) - $type = 'image/webp'; + elseif(strpos(strtolower($filename),'webp') !== false) + $type = 'image/webp'; } } @@ -205,7 +216,11 @@ function import_xchan_photo($photo, $xchan, $thing = false, $force = false) { if($thing) $hash = photo_new_resource(); else { - $r = q("SELECT resource_id, edited, mimetype, expires, description FROM photo WHERE xchan = '%s' AND photo_usage = %d AND imgscale = 4 LIMIT 1", dbesc($xchan), intval(PHOTO_XCHAN)); + $r = q("SELECT resource_id, edited, mimetype, expires, description FROM photo WHERE xchan = '%s' AND photo_usage = %d AND imgscale = %d LIMIT 1", + dbesc($xchan), + intval(PHOTO_XCHAN), + intval(PHOTO_RES_PROFILE_300) + ); if($r) { $hash = $r[0]['resource_id']; $modified = $r[0]['edited']; @@ -220,7 +235,7 @@ function import_xchan_photo($photo, $xchan, $thing = false, $force = false) { $photo_failure = false; $img_str = ''; - if($photo) { + if($photo && strpos($photo, z_root() . '/' . get_default_profile_photo()) === false) { if($force || empty($modified)) $result = z_fetch_url($photo, true); @@ -260,7 +275,7 @@ function import_xchan_photo($photo, $xchan, $thing = false, $force = false) { if($result['success']) { $img_str = $result['body']; - $type = guess_image_type($photo, $result['header']); + $type = guess_image_type($photo, $result); if(is_null($type)) $photo_failure = true; } @@ -316,26 +331,20 @@ function import_xchan_photo($photo, $xchan, $thing = false, $force = false) { 'filename' => basename($photo), 'album' => $album, 'photo_usage' => $flags, - 'imgscale' => 4, 'edited' => $modified, 'description' => (array_key_exists('etag', $hdrs) ? $hdrs['etag'] : ''), 'expires' => gmdate('Y-m-d H:i:s', (isset($expires) ? $expires : time() + 86400)) ]; - $r = $img->save($p); - if($r === false) - $photo_failure = true; + $r1 = $img->storeThumbnail($p, PHOTO_RES_PROFILE_300); $img->scaleImage(80); - $p['imgscale'] = 5; - $r = $img->save($p); - if($r === false) - $photo_failure = true; + $r2 = $img->storeThumbnail($p, PHOTO_RES_PROFILE_80); $img->scaleImage(48); - $p['imgscale'] = 6; - $r = $img->save($p); - if($r === false) + $r3 = $img->storeThumbnail($p, PHOTO_RES_PROFILE_48); + + if($r1 === false || $r2 === false || $r3 === false) $photo_failure = true; $photo = z_root() . '/photo/' . $hash . '-4'; @@ -379,8 +388,7 @@ function import_channel_photo_from_url($photo, $aid, $uid) { if($result['success']) { $img_str = $result['body']; - $type = guess_image_type($photo, $result['header']); - + $type = guess_image_type($photo, $result); import_channel_photo($img_str, $type, $aid, $uid); } } @@ -401,8 +409,17 @@ function import_channel_photo($photo, $type, $aid, $uid) { logger('Importing channel photo for ' . $uid, LOGGER_DEBUG); + $r = q("SELECT resource_id FROM photo WHERE uid = %d AND photo_usage = %d AND imgscale = %d", + intval($uid), + intval(PHOTO_PROFILE), + intval(PHOTO_RES_PROFILE_300) + ); + if ($r) + $hash = $r[0]['resource_id']; + else + $hash = photo_new_resource(); + $photo_failure = false; - $hash = photo_new_resource(); $filename = $hash; $img = photo_factory($photo, $type); @@ -415,31 +432,26 @@ function import_channel_photo($photo, $type, $aid, $uid) { 'resource_id' => $hash, 'filename' => $filename, 'album' => t('Profile Photos'), - 'photo_usage' => PHOTO_PROFILE, - 'imgscale' => 4, + 'photo_usage' => PHOTO_PROFILE ]; // photo size $img->scaleImageSquare(300); - $r = $img->save($p); - if($r === false) - $photo_failure = true; + $r1 = $img->storeThumbnail($p, PHOTO_RES_PROFILE_300); // thumb size $img->scaleImage(80); - $p['imgscale'] = 5; - $r = $img->save($p); - if($r === false) - $photo_failure = true; + $r2 = $img->storeThumbnail($p, PHOTO_RES_PROFILE_80); // micro size $img->scaleImage(48); - $p['imgscale'] = 6; - $r = $img->save($p); - if($r === false) + $r3 = $img->storeThumbnail($p, PHOTO_RES_PROFILE_48); + + if($r1 === false || $r2 === false || $r3 === false) $photo_failure = true; - } else { + } + else { logger('Invalid image.'); $photo_failure = true; } diff --git a/include/plugin.php b/include/plugin.php old mode 100755 new mode 100644 index c789ad522..5b041f228 --- a/include/plugin.php +++ b/include/plugin.php @@ -912,7 +912,7 @@ function script_path() { // Some proxy setups may require using http_host - if(intval(App::$config['system']['script_path_use_http_host'])) + if(isset(App::$config['system']['script_path_use_http_host']) && intval(App::$config['system']['script_path_use_http_host'])) $server_var = 'HTTP_HOST'; else $server_var = 'SERVER_NAME'; @@ -929,8 +929,9 @@ function script_path() { } function head_add_js($src, $priority = 0) { - if(! is_array(App::$js_sources[$priority])) - App::$js_sources[$priority] = array(); + if(isset(App::$js_sources[$priority]) && !is_array(App::$js_sources[$priority])) + App::$js_sources[$priority] = []; + App::$js_sources[$priority][] = $src; } diff --git a/include/security.php b/include/security.php index 97bf002d8..18107d5cb 100644 --- a/include/security.php +++ b/include/security.php @@ -18,27 +18,28 @@ function authenticate_success($user_record, $channel = null, $login_initial = fa $_SESSION['addr'] = $_SERVER['REMOTE_ADDR']; $lastlog_updated = false; + $uid_to_load = null; - if(x($user_record, 'account_id')) { + if (x($user_record, 'account_id')) { App::$account = $user_record; $_SESSION['account_id'] = $user_record['account_id']; $_SESSION['authenticated'] = 1; - if($channel) + if ($channel) $uid_to_load = $channel['channel_id']; - if(! $uid_to_load) { - $uid_to_load = (((x($_SESSION,'uid')) && (intval($_SESSION['uid']))) + if (!$uid_to_load) { + $uid_to_load = (((x($_SESSION, 'uid')) && (intval($_SESSION['uid']))) ? intval($_SESSION['uid']) : intval(App::$account['account_default_channel']) ); } - if($uid_to_load) { + if ($uid_to_load) { change_channel($uid_to_load); } - if($login_initial || $update_lastlog) { + if ($login_initial || $update_lastlog) { q("update account set account_lastlog = '%s' where account_id = %d", dbesc(datetime_convert()), intval($_SESSION['account_id']) @@ -50,24 +51,24 @@ function authenticate_success($user_record, $channel = null, $login_initial = fa } - if(($login_initial) && (! $lastlog_updated)) { + if (($login_initial) && (!$lastlog_updated)) { call_hooks('logged_in', $user_record); // might want to log success here } - if($return || x($_SESSION, 'workflow')) { + if ($return || x($_SESSION, 'workflow')) { unset($_SESSION['workflow']); return; } - if((App::$module !== 'home') && x($_SESSION,'login_return_url') && strlen($_SESSION['login_return_url'])) { + if ((App::$module !== 'home') && x($_SESSION, 'login_return_url') && strlen($_SESSION['login_return_url'])) { $return_url = $_SESSION['login_return_url']; // don't let members get redirected to a raw ajax page update - this can happen // if DHCP changes the IP address at an unfortunate time and paranoia is turned on - if(strstr($return_url,'update_')) + if (strstr($return_url, 'update_')) $return_url = ''; unset($_SESSION['login_return_url']); @@ -76,11 +77,11 @@ function authenticate_success($user_record, $channel = null, $login_initial = fa /* This account has never created a channel. Send them to new_channel by default */ - if(App::$module === 'login') { + if (App::$module === 'login') { $r = q("select count(channel_id) as total from channel where channel_account_id = %d and channel_removed = 0 ", intval(App::$account['account_id']) ); - if(($r) && (! $r[0]['total'])) + if (($r) && (!$r[0]['total'])) goaway(z_root() . '/new_channel'); } @@ -88,14 +89,14 @@ function authenticate_success($user_record, $channel = null, $login_initial = fa } function atoken_login($atoken) { - if(! $atoken) + if (!$atoken) return false; $_SESSION['authenticated'] = 1; $_SESSION['visitor_id'] = $atoken['xchan_hash']; $_SESSION['atoken'] = $atoken['atoken_id']; - \App::set_observer($atoken); + App::set_observer($atoken); return true; } @@ -109,14 +110,14 @@ function atoken_login($atoken) { function atoken_xchan($atoken) { $c = channelx_by_n($atoken['atoken_uid']); - if($c) { + if ($c) { return [ 'atoken_id' => $atoken['atoken_id'], - 'xchan_hash' => substr($c['channel_hash'],0,16) . '.' . $atoken['atoken_name'], + 'xchan_hash' => substr($c['channel_hash'], 0, 16) . '.' . $atoken['atoken_name'], 'xchan_name' => $atoken['atoken_name'], - 'xchan_addr' => 'guest:' . $atoken['atoken_name'] . '@' . \App::get_hostname(), + 'xchan_addr' => 'guest:' . $atoken['atoken_name'] . '@' . App::get_hostname(), 'xchan_network' => 'unknown', - 'xchan_url' => z_root() . '/guest/' . substr($c['channel_hash'],0,16) . '.' . $atoken['atoken_name'], + 'xchan_url' => z_root() . '/guest/' . substr($c['channel_hash'], 0, 16) . '.' . $atoken['atoken_name'], 'xchan_hidden' => 1, 'xchan_photo_mimetype' => 'image/png', 'xchan_photo_l' => z_root() . '/' . get_default_profile_photo(300), @@ -133,16 +134,16 @@ function atoken_delete($atoken_id) { $r = q("select * from atoken where atoken_id = %d", intval($atoken_id) ); - if(! $r) + if (!$r) return; $c = q("select channel_id, channel_hash from channel where channel_id = %d", intval($r[0]['atoken_uid']) ); - if(! $c) + if (!$c) return; - $atoken_xchan = substr($c[0]['channel_hash'],0,16) . '.' . $r[0]['atoken_name']; + $atoken_xchan = substr($c[0]['channel_hash'], 0, 16) . '.' . $r[0]['atoken_name']; q("delete from atoken where atoken_id = %d", intval($atoken_id) @@ -168,41 +169,41 @@ function atoken_create_xchan($xchan) { $r = q("select xchan_hash from xchan where xchan_hash = '%s'", dbesc($xchan['xchan_hash']) ); - if($r) + if ($r) return; $xchan['xchan_guid'] = $xchan['xchan_hash']; $store = []; - foreach($xchan as $k => $v) { - if(strpos($k,'xchan_') === 0) { + foreach ($xchan as $k => $v) { + if (strpos($k, 'xchan_') === 0) { $store[$k] = $v; } } - - $r = xchan_store_lowlevel($store); + + xchan_store_lowlevel($store); return true; } -function atoken_abook($uid,$xchan_hash) { +function atoken_abook($uid, $xchan_hash) { - if(substr($xchan_hash,16,1) != '.') + if (substr($xchan_hash, 16, 1) != '.') return false; $r = q("select channel_hash from channel where channel_id = %d limit 1", intval($uid) ); - if(! $r) + if (!$r) return false; $x = q("select * from atoken where atoken_uid = %d and atoken_name = '%s'", intval($uid), - dbesc(substr($xchan_hash,17)) + dbesc(substr($xchan_hash, 17)) ); - if($x) { + if ($x) { $xchan = atoken_xchan($x[0]); $xchan['abook_blocked'] = 0; $xchan['abook_ignored'] = 0; @@ -215,12 +216,12 @@ function atoken_abook($uid,$xchan_hash) { function pseudo_abook($xchan) { - if(! $xchan) + if (!$xchan) return false; // set abook_pseudo to flag that we aren't really connected. - $xchan['abook_pseudo'] = 1; + $xchan['abook_pseudo'] = 1; $xchan['abook_blocked'] = 0; $xchan['abook_ignored'] = 0; $xchan['abook_pending'] = 0; @@ -240,7 +241,7 @@ function change_channel($change_channel) { $ret = false; - if($change_channel) { + if ($change_channel) { $r = q("select channel.*, xchan.* from channel left join xchan on channel.channel_hash = xchan.xchan_hash where channel_id = %d and channel_account_id = %d and channel_removed = 0 limit 1", intval($change_channel), @@ -249,7 +250,7 @@ function change_channel($change_channel) { // It's not there. Is this an administrator, and is this the sys channel? if (is_developer()) { - if (! $r) { + if (!$r) { if (is_site_admin()) { $r = q("select channel.*, xchan.* from channel left join xchan on channel.channel_hash = xchan.xchan_hash where channel_id = %d and channel_system = 1 and channel_removed = 0 limit 1", intval($change_channel) @@ -258,19 +259,19 @@ function change_channel($change_channel) { } } - if($r) { + if ($r) { $hash = $r[0]['channel_hash']; $_SESSION['uid'] = intval($r[0]['channel_id']); App::set_channel($r[0]); $_SESSION['theme'] = $r[0]['channel_theme']; - $_SESSION['mobile_theme'] = get_pconfig(local_channel(),'system', 'mobile_theme'); - $_SESSION['cloud_tiles'] = get_pconfig(local_channel(),'system', 'cloud_tiles'); + $_SESSION['mobile_theme'] = get_pconfig(local_channel(), 'system', 'mobile_theme'); + $_SESSION['cloud_tiles'] = get_pconfig(local_channel(), 'system', 'cloud_tiles'); date_default_timezone_set($r[0]['channel_timezone']); // Update the active timestamp at most once a day - if(substr($r[0]['channel_active'],0,10) !== substr(datetime_convert(),0,10)) { - $z = q("UPDATE channel SET channel_active = '%s' WHERE channel_id = %d", + if (substr($r[0]['channel_active'], 0, 10) !== substr(datetime_convert(), 0, 10)) { + q("UPDATE channel SET channel_active = '%s' WHERE channel_id = %d", dbesc(datetime_convert()), intval($r[0]['channel_id']) ); @@ -280,17 +281,17 @@ function change_channel($change_channel) { $x = q("select * from xchan where xchan_hash = '%s' limit 1", dbesc($hash) ); - if($x) { + if ($x) { $_SESSION['my_url'] = $x[0]['xchan_url']; $_SESSION['my_address'] = channel_reddress($r[0]); App::set_observer($x[0]); App::set_perms(get_all_perms(local_channel(), $hash)); } - if(! is_dir('store/' . $r[0]['channel_address'])) - @os_mkdir('store/' . $r[0]['channel_address'], STORAGE_DEFAULT_PERMISSIONS,true); + if (!is_dir('store/' . $r[0]['channel_address'])) + @os_mkdir('store/' . $r[0]['channel_address'], STORAGE_DEFAULT_PERMISSIONS, true); - $arr = [ 'channel_id' => $change_channel, 'chanx' => $ret ]; + $arr = ['channel_id' => $change_channel, 'chanx' => $ret]; call_hooks('change_channel', $arr); } @@ -333,18 +334,17 @@ function permissions_sql($owner_id, $remote_observer = null, $table = '') { if (($local_channel) && ($local_channel == $owner_id)) { return EMPTY_STR; } - /** - * Authenticated visitor. + * Authenticated visitor. */ else { - $observer = ((! is_null($remote_observer)) ? $remote_observer : get_observer_hash()); + $observer = ((!is_null($remote_observer)) ? $remote_observer : get_observer_hash()); if ($observer) { - $sec = get_security_ids($owner_id,$observer); + $sec = get_security_ids($owner_id, $observer); // always allow the channel owner, even if authenticated as a visitor @@ -354,14 +354,14 @@ function permissions_sql($owner_id, $remote_observer = null, $table = '') { return EMPTY_STR; } } - } + } if (is_array($sec['allow_cid']) && count($sec['allow_cid'])) { $ca = []; foreach ($sec['allow_cid'] as $c) { $ca[] = '<' . $c . '>'; } - $cs = implode('|',$ca); + $cs = implode('|', $ca); } else { $cs = '<<>>'; // should be impossible to match @@ -372,7 +372,7 @@ function permissions_sql($owner_id, $remote_observer = null, $table = '') { foreach ($sec['allow_gid'] as $g) { $ga[] = '<' . $g . '>'; } - $gs = implode('|',$ga); + $gs = implode('|', $ga); } else { $gs = '<<>>'; // should be impossible to match @@ -420,39 +420,38 @@ function item_permissions_sql($owner_id, $remote_observer = null) { * Profile owner - everything is visible */ - if(($local_channel) && ($local_channel == $owner_id)) { + if (($local_channel) && ($local_channel == $owner_id)) { $sql = ''; } - /** - * Authenticated visitor. + * Authenticated visitor. */ else { - $observer = (($remote_observer) ? $remote_observer : get_observer_hash()); + $observer = (($remote_observer) ? $remote_observer : get_observer_hash()); - if($observer) { + if ($observer) { - $scope = scopes_sql($owner_id,$observer); - $sec = get_security_ids($owner_id,$observer); + $scope = scopes_sql($owner_id, $observer); + $sec = get_security_ids($owner_id, $observer); // always allow the channel owner, even if authenticated as a visitor - if($sec['channel_id']) { - foreach($sec['channel_id'] as $ch) { - if($observer === $ch) { + if ($sec['channel_id']) { + foreach ($sec['channel_id'] as $ch) { + if ($observer === $ch) { return EMPTY_STR; } } - } + } if (is_array($sec['allow_cid']) && count($sec['allow_cid'])) { $ca = []; foreach ($sec['allow_cid'] as $c) { $ca[] = '<' . $c . '>'; } - $cs = implode('|',$ca); + $cs = implode('|', $ca); } else { $cs = '<<>>'; // should be impossible to match @@ -463,7 +462,7 @@ function item_permissions_sql($owner_id, $remote_observer = null) { foreach ($sec['allow_gid'] as $g) { $ga[] = '<' . $g . '>'; } - $gs = implode('|',$ga); + $gs = implode('|', $ga); } else { $gs = '<<>>'; // should be impossible to match @@ -493,21 +492,20 @@ function item_permissions_sql($owner_id, $remote_observer = null) { */ - -function scopes_sql($uid,$observer) { +function scopes_sql($uid, $observer) { $str = " and ( public_policy = 'authenticated' "; - if(! is_foreigner($observer)) + if (!is_foreigner($observer)) $str .= " or public_policy = 'network: red' "; - if(local_channel()) + if (local_channel()) $str .= " or public_policy = 'site: " . App::get_hostname() . "' "; $ab = q("select * from abook where abook_xchan = '%s' and abook_channel = %d limit 1", dbesc($observer), intval($uid) ); - if(! $ab) + if (!$ab) return $str . " ) "; - if($ab[0]['abook_pending']) + if ($ab[0]['abook_pending']) $str .= " or public_policy = 'any connections' "; $str .= " or public_policy = 'contacts' ) "; return $str; @@ -526,14 +524,14 @@ function public_permissions_sql($observer_hash) { if ($observer_hash) { - $sec = get_security_ids($owner_id,$observer_hash); + $sec = get_security_ids($owner_id, $observer_hash); if (is_array($sec['allow_cid']) && count($sec['allow_cid'])) { $ca = []; foreach ($sec['allow_cid'] as $c) { $ca[] = '<' . $c . '>'; } - $cs = implode('|',$ca); + $cs = implode('|', $ca); } else { $cs = '<<>>'; // should be impossible to match @@ -544,7 +542,7 @@ function public_permissions_sql($observer_hash) { foreach ($sec['allow_gid'] as $g) { $ga[] = '<' . $g . '>'; } - $gs = implode('|',$ga); + $gs = implode('|', $ga); } else { $gs = '<<>>'; // should be impossible to match @@ -598,7 +596,7 @@ function check_form_security_token($typename = '', $formname = 'form_security_to $x = explode('.', $hash); if (time() > (IntVal($x[0]) + $max_livetime) || time() < (IntVal($x[0]) + $min_livetime)) - return false; + return false; $sec_hash = hash('whirlpool', App::$observer['xchan_guid'] . ((local_channel()) ? App::$channel['channel_prvkey'] : '') . session_id() . $x[0] . $typename); @@ -606,16 +604,19 @@ function check_form_security_token($typename = '', $formname = 'form_security_to } function check_form_security_std_err_msg() { + /** @noinspection PhpToStringImplementationInspection */ return t('The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it.') . EOL; } + function check_form_security_token_redirectOnErr($err_redirect, $typename = '', $formname = 'form_security_token') { if (!check_form_security_token($typename, $formname)) { logger('check_form_security_token failed: user ' . App::$observer['xchan_name'] . ' - form element ' . $typename); logger('check_form_security_token failed: _REQUEST data: ' . print_r($_REQUEST, true), LOGGER_DATA); - notice( check_form_security_std_err_msg() ); - goaway(z_root() . $err_redirect ); + notice(check_form_security_std_err_msg()); + goaway(z_root() . $err_redirect); } } + function check_form_security_token_ForbiddenOnErr($typename = '', $formname = 'form_security_token') { if (!check_form_security_token($typename, $formname)) { logger('check_form_security_token failed: user ' . App::$observer['xchan_name'] . ' - form element ' . $typename); @@ -636,7 +637,7 @@ function init_groups_visitor($contact_id) { dbesc($contact_id) ); - if (! $x) { + if (!$x) { return $groups; } @@ -648,8 +649,8 @@ function init_groups_visitor($contact_id) { dbesc($x[0]['xchan_pubkey']) ); - if($xchans) { - $hashes = ids_to_querystr($xchans,'xchan_hash',true); + if ($xchans) { + $hashes = ids_to_querystr($xchans, 'xchan_hash', true); } // private profiles are treated as a virtual group @@ -672,21 +673,19 @@ function init_groups_visitor($contact_id) { } - - function get_security_ids($channel_id, $ob_hash) { - $ret = [ - 'channel_id' => [], - 'allow_cid' => [], - 'allow_gid' => [] + $ret = [ + 'channel_id' => [], + 'allow_cid' => [], + 'allow_gid' => [] ]; - if($channel_id) { + if ($channel_id) { $ch = q("select channel_hash, channel_portable_id from channel where channel_id = %d", - intval($channel_id) + intval($channel_id) ); - if($ch) { + if ($ch) { $ret['channel_id'][] = $ch[0]['channel_hash']; $ret['channel_id'][] = $ch[0]['channel_portable_id']; } @@ -709,13 +708,13 @@ function get_security_ids($channel_id, $ob_hash) { ); if ($xchans) { - $ret['allow_cid'] = ids_to_array($xchans,'xchan_hash'); - $hashes = ids_to_querystr($xchans,'xchan_hash',true); + $ret['allow_cid'] = ids_to_array($xchans, 'xchan_hash'); + $hashes = ids_to_querystr($xchans, 'xchan_hash', true); // private profiles are treated as a virtual group $r = q("SELECT abook_profile from abook where abook_xchan in ( " . protect_sprintf($hashes) . " ) and abook_profile != '' "); - if($r) { + if ($r) { foreach ($r as $rv) { $groups[] = 'vp.' . $rv['abook_profile']; } @@ -724,7 +723,7 @@ function get_security_ids($channel_id, $ob_hash) { // physical groups this identity is a member of $r = q("SELECT hash FROM pgrp left join pgrp_member on pgrp.id = pgrp_member.gid WHERE xchan in ( " . protect_sprintf($hashes) . " ) "); - if($r) { + if ($r) { foreach ($r as $rv) { $groups[] = $rv['hash']; } @@ -746,39 +745,39 @@ function get_security_ids($channel_id, $ob_hash) { // will likely be too expensive. // Returns a string list of comma separated channel_ids suitable for direct inclusion in a SQL query -function stream_perms_api_uids($perms = NULL, $limit = 0, $rand = 0 ) { - $perms = is_null($perms) ? (PERMS_SITE|PERMS_NETWORK|PERMS_PUBLIC) : $perms; +function stream_perms_api_uids($perms = NULL, $limit = 0, $rand = 0) { + $perms = is_null($perms) ? (PERMS_SITE | PERMS_NETWORK | PERMS_PUBLIC) : $perms; $ret = array(); $limit_sql = (($limit) ? " LIMIT " . intval($limit) . " " : ''); $random_sql = (($rand) ? " ORDER BY " . db_getfunc('RAND') . " " : ''); - if(local_channel()) + if (local_channel()) $ret[] = local_channel(); $x = q("select uid, v from pconfig where cat = 'perm_limits' and k = 'view_stream' "); - if($x) { + if ($x) { $y = []; - foreach($x as $xv) { - if(intval($xv['v']) & $perms) { + foreach ($x as $xv) { + if (intval($xv['v']) & $perms) { $y[] = $xv; } } - if($y) { - $ids = ids_to_querystr($y,'uid'); + if ($y) { + $ids = ids_to_querystr($y, 'uid'); $r = q("select channel_id from channel where channel_id in ( $ids ) and ( channel_pageflags & %d ) = 0 and channel_system = 0 and channel_removed = 0 $random_sql $limit_sql ", - intval(PAGE_ADULT|PAGE_CENSORED) + intval(PAGE_ADULT | PAGE_CENSORED) ); - if($r) { - foreach($r as $rr) - if(! in_array($rr['channel_id'], $ret)) + if ($r) { + foreach ($r as $rr) + if (!in_array($rr['channel_id'], $ret)) $ret[] = $rr['channel_id']; } } } $str = ''; - if($ret) { - foreach($ret as $rr) { - if($str) + if ($ret) { + foreach ($ret as $rr) { + if ($str) $str .= ','; $str .= intval($rr); } @@ -791,39 +790,39 @@ function stream_perms_api_uids($perms = NULL, $limit = 0, $rand = 0 ) { return $str; } -function stream_perms_xchans($perms = NULL ) { - $perms = is_null($perms) ? (PERMS_SITE|PERMS_NETWORK|PERMS_PUBLIC) : $perms; +function stream_perms_xchans($perms = NULL) { + $perms = is_null($perms) ? (PERMS_SITE | PERMS_NETWORK | PERMS_PUBLIC) : $perms; $ret = array(); - if(local_channel()) + if (local_channel()) $ret[] = get_observer_hash(); $x = q("select uid, v from pconfig where cat = 'perm_limits' and k = 'view_stream' "); - if($x) { + if ($x) { $y = []; - foreach($x as $xv) { - if(intval($xv['v']) & $perms) { + foreach ($x as $xv) { + if (intval($xv['v']) & $perms) { $y[] = $xv; } } - if($y) { - $ids = ids_to_querystr($y,'uid'); + if ($y) { + $ids = ids_to_querystr($y, 'uid'); $r = q("select channel_hash from channel where channel_id in ( $ids ) and ( channel_pageflags & %d ) = 0 and channel_system = 0 and channel_removed = 0 ", - intval(PAGE_ADULT|PAGE_CENSORED) + intval(PAGE_ADULT | PAGE_CENSORED) ); - if($r) { - foreach($r as $rr) - if(! in_array($rr['channel_hash'], $ret)) + if ($r) { + foreach ($r as $rr) + if (!in_array($rr['channel_hash'], $ret)) $ret[] = $rr['channel_hash']; } } } $str = ''; - if($ret) { - foreach($ret as $rr) { - if($str) + if ($ret) { + foreach ($ret as $rr) { + if ($str) $str .= ','; $str .= "'" . dbesc($rr) . "'"; } diff --git a/include/taxonomy.php b/include/taxonomy.php index e06568d19..5fa4fde3f 100644 --- a/include/taxonomy.php +++ b/include/taxonomy.php @@ -345,7 +345,7 @@ function pub_tagadelic($net,$site,$limit,$recent,$safemode,$type) { } if($recent) - $sql_extra .= " and item.created > '" . datetime_convert('UTC','UTC', 'now - ' . intval($recent) . ' days ') . "' "; + $sql_extra .= " and item.created > NOW() - INTERVAL " . db_quoteinterval(intval($recent) . ' DAY') . " "; if($safemode) { @@ -354,30 +354,32 @@ function pub_tagadelic($net,$site,$limit,$recent,$safemode,$type) { $sql_extra .= " and not term.term in ( " . stringify_array($unsafetags,true) . ") "; } } - - - $key = __FUNCTION__ . "-" . md5($site . $recent . $safemode . $limit . $type); - $content = Cache::get($key, '1 MINUTE'); - - if(! $content) { - // Fetch tags - $r = q("SELECT term, count(term) AS total FROM term LEFT JOIN item ON term.oid = item.id - where term.ttype = %d - and otype = %d and item_type = %d - $sql_extra $uids $item_normal - group by term order by total desc %s", - intval($type), - intval(TERM_OBJ_POST), - intval(ITEM_TYPE_POST), - ((intval($count)) ? "limit $count" : '') - ); - } else - $r = unserialize($content); - - if(! $r) - return array(); - else - Cache::set($key, serialize($r)); + + $key = __FUNCTION__ . "-" . md5($site . $recent . $safemode . $limit . $type); + + $content = Cache::get($key, '5 MINUTE'); + if(! $content) { + + $content = Cache::get($key, '1 MONTH'); + $arr = [ + "SELECT term, count(term) AS total FROM term LEFT JOIN item ON term.oid = item.id + WHERE term.ttype = %d + AND otype = %d + AND item_type = %d + $sql_extra $uids $item_normal + GROUP BY term ORDER BY total DESC %s", + intval($type), + intval(TERM_OBJ_POST), + intval(ITEM_TYPE_POST), + (intval($count) ? "LIMIT $count" : '') + ]; + + \Zotlabs\Daemon\Master::Summon([ 'Cache_query', $key, base64_encode(json_encode($arr)) ]); + } + + $r = unserialize($content); + if(! $r) + return []; return Zotlabs\Text\Tagadelic::calc($r); } diff --git a/include/text.php b/include/text.php index 96e5c7882..df066a05d 100644 --- a/include/text.php +++ b/include/text.php @@ -7,8 +7,9 @@ use Zotlabs\Lib as Zlib; use Michelf\MarkdownExtra; use Ramsey\Uuid\Uuid; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; +use Ramsey\Uuid\Exception\UnableToBuildUuidException; +use Zotlabs\Lib\Crypto; use Zotlabs\Lib\SvgSanitizer; require_once("include/bbcode.php"); @@ -2848,7 +2849,7 @@ function handle_tag(&$body, &$str_tags, $profile_uid, $tag, $in_network = true) // replace tag by the link. Make sure to not replace something in the middle of a word - $body = preg_replace('/(?toString(); - } catch (UnsatisfiedDependencyException $e) { + } catch (UnableToBuildUuidException $e) { $hash = random_string(48); } @@ -3854,7 +3855,7 @@ function uuid_from_url($url) { try { $hash = Uuid::uuid5(Uuid::NAMESPACE_URL, $url)->toString(); - } catch (UnsatisfiedDependencyException $e) { + } catch (UnableToBuildUuidException $e) { $hash = md5($url); } return $hash; @@ -3893,6 +3894,14 @@ function unserialise($x) { return ((is_array($y)) ? $y : $x); } +function obscurify($s) { + return str_rot47(base64url_encode($s)); +} + +function unobscurify($s) { + return base64url_decode(str_rot47($s)); +} + /** * @brief Remove new lines and tabs from strings. * diff --git a/include/xchan.php b/include/xchan.php index 5de828e7f..07fdb8b47 100644 --- a/include/xchan.php +++ b/include/xchan.php @@ -1,5 +1,6 @@ ', '<' . $newxchan['xchan_hash'] . '>', + dbesc(str_replace('<' . $oldxchan['xchan_hash'] . '>', '<' . $newxchan['xchan_hash'] . '>', $rv[$allow])), - dbesc(str_replace('<' . $oldxchan['xchan_hash'] . '>', '<' . $newxchan['xchan_hash'] . '>', + dbesc(str_replace('<' . $oldxchan['xchan_hash'] . '>', '<' . $newxchan['xchan_hash'] . '>', $rv[$deny])), intval($rv[$column]) ); @@ -243,7 +244,7 @@ function xchan_change_key($oldx,$newx,$data) { 'xprof' => 'xprof_hash', 'xtag' => 'xtag_hash' ]; - + $acls = [ 'channel' => 'channel_id', diff --git a/include/zid.php b/include/zid.php index e24b0035d..75414a691 100644 --- a/include/zid.php +++ b/include/zid.php @@ -58,7 +58,7 @@ function zid($s, $address = '') { $mine_parsed = parse_url($mine); $s_parsed = parse_url($s); - if($mine_parsed['host'] === $s_parsed['host']) + if(isset($mine_parsed['host']) && isset($s_parsed['host']) && $mine_parsed['host'] === $s_parsed['host']) $url_match = true; if ($mine && $myaddr && (! $url_match)) @@ -209,21 +209,21 @@ function red_zrl_callback($matches) { // Catch and exclude trailing punctuation preg_match("/[.,;:!?)]*$/i", $matches[2], $pts); $matches[2] = substr($matches[2], 0, strlen($matches[2])-strlen($pts[0])); - + $zrl = is_matrix_url($matches[2]); - + $t = strip_zids($matches[2]); if($t !== $matches[2]) { $zrl = true; $matches[2] = $t; } - + if($matches[1] === '#^') $matches[1] = ''; - + if($zrl) return $matches[1] . '#^[zrl=' . $matches[2] . ']' . $matches[2] . '[/zrl]' . $pts[0]; - + return $matches[1] . '#^[url=' . $matches[2] . ']' . $matches[2] . '[/url]' . $pts[0]; } diff --git a/include/zot.php b/include/zot.php index d61873ba2..634561fa3 100644 --- a/include/zot.php +++ b/include/zot.php @@ -8,6 +8,7 @@ * */ +use Zotlabs\Lib\Crypto; use Zotlabs\Lib\DReport; use Zotlabs\Lib\Libzot; use Zotlabs\Lib\Activity; @@ -123,15 +124,15 @@ function zot_build_packet($channel, $type = 'notify', $recipients = null, $remot 'type' => $type, 'sender' => [ 'guid' => $channel['channel_guid'], - 'guid_sig' => base64url_encode(rsa_sign($channel['channel_guid'],$channel['channel_prvkey'],$sig_method)), + 'guid_sig' => base64url_encode(Crypto::sign($channel['channel_guid'],$channel['channel_prvkey'],$sig_method)), 'url' => z_root(), - 'url_sig' => base64url_encode(rsa_sign(z_root(),$channel['channel_prvkey'],$sig_method)), + 'url_sig' => base64url_encode(Crypto::sign(z_root(),$channel['channel_prvkey'],$sig_method)), 'sitekey' => get_config('system','pubkey') ], 'callback' => '/post', 'version' => Zotlabs\Lib\System::get_zot_revision(), - 'encryption' => crypto_methods(), - 'signing' => signing_methods() + 'encryption' => Crypto::methods(), + 'signing' => Crypto::signing_methods() ]; if ($recipients) { @@ -143,7 +144,7 @@ function zot_build_packet($channel, $type = 'notify', $recipients = null, $remot if ($secret) { $data['secret'] = preg_replace('/[^0-9a-fA-F]/','',$secret); - $data['secret_sig'] = base64url_encode(rsa_sign($secret,$channel['channel_prvkey'],$sig_method)); + $data['secret_sig'] = base64url_encode(Crypto::sign($secret,$channel['channel_prvkey'],$sig_method)); } if ($extra) { @@ -157,7 +158,7 @@ function zot_build_packet($channel, $type = 'notify', $recipients = null, $remot if($remote_key) { $algorithm = zot_best_algorithm($methods); - $data = crypto_encapsulate(json_encode($data),$remote_key, $algorithm); + $data = Crypto::encapsulate(json_encode($data),$remote_key, $algorithm); } return json_encode($data); @@ -197,15 +198,15 @@ function zot6_build_packet($channel, $type = 'notify', $recipients = null, $msg 'type' => $type, 'sender' => [ 'guid' => $channel['channel_guid'], - 'guid_sig' => base64url_encode(rsa_sign($channel['channel_guid'],$channel['channel_prvkey'],$sig_method)), + 'guid_sig' => base64url_encode(Crypto::sign($channel['channel_guid'],$channel['channel_prvkey'],$sig_method)), 'url' => z_root(), - 'url_sig' => base64url_encode(rsa_sign(z_root(),$channel['channel_prvkey'],$sig_method)), + 'url_sig' => base64url_encode(Crypto::sign(z_root(),$channel['channel_prvkey'],$sig_method)), 'sitekey' => get_config('system','pubkey') ], 'callback' => '/post', 'version' => Zotlabs\Lib\System::get_zot_revision(), - 'encryption' => crypto_methods(), - 'signing' => signing_methods() + 'encryption' => Crypto::methods(), + 'signing' => Crypto::signing_methods() ]; if ($recipients) { @@ -221,7 +222,7 @@ function zot6_build_packet($channel, $type = 'notify', $recipients = null, $msg if ($secret) { $data['secret'] = preg_replace('/[^0-9a-fA-F]/','',$secret); - $data['secret_sig'] = base64url_encode(rsa_sign($secret,$channel['channel_prvkey'],$sig_method)); + $data['secret_sig'] = base64url_encode(Crypto::sign($secret,$channel['channel_prvkey'],$sig_method)); } if ($extra) { @@ -235,7 +236,7 @@ function zot6_build_packet($channel, $type = 'notify', $recipients = null, $msg if($remote_key) { $algorithm = zot_best_algorithm($methods); - $data = crypto_encapsulate(json_encode($data),$remote_key, $algorithm); + $data = Crypto::encapsulate(json_encode($data),$remote_key, $algorithm); } return json_encode($data); @@ -249,7 +250,7 @@ function zot6_build_packet($channel, $type = 'notify', $recipients = null, $msg * * @param string $methods * comma separated list of encryption methods - * @return string first match from our site method preferences crypto_methods() array + * @return string first match from our site method preferences Crypto::methods() array * of a method which is common to both sites; or 'aes256cbc' if no matches are found. */ function zot_best_algorithm($methods) { @@ -272,7 +273,7 @@ function zot_best_algorithm($methods) { if($methods) { $x = explode(',', $methods); if($x) { - $y = crypto_methods(); + $y = Crypto::methods(); if($y) { foreach($y as $yv) { $yv = trim($yv); @@ -443,7 +444,7 @@ function zot_refresh($them, $channel = null, $force = false) { $signed_token = ((is_array($j) && array_key_exists('signed_token',$j)) ? $j['signed_token'] : null); if($signed_token) { - $valid = rsa_verify('token.' . $token,base64url_decode($signed_token),$j['key']); + $valid = Crypto::verify('token.' . $token,base64url_decode($signed_token),$j['key']); if(! $valid) { logger('invalid signed token: ' . $url . $rhs, LOGGER_NORMAL, LOG_ERR); return false; @@ -461,16 +462,18 @@ function zot_refresh($them, $channel = null, $force = false) { if($channel) { if($j['permissions']['data']) { - $permissions = crypto_unencapsulate( + $permissions = Crypto::unencapsulate( [ + 'encrypted' => true, 'data' => $j['permissions']['data'], 'key' => $j['permissions']['key'], 'iv' => $j['permissions']['iv'], 'alg' => $j['permissions']['alg'] ], $channel['channel_prvkey']); - if($permissions) + if($permissions) { $permissions = json_decode($permissions,true); + } logger('decrypted permissions: ' . print_r($permissions,true), LOGGER_DATA, LOG_DEBUG); } else @@ -719,8 +722,8 @@ function zot_register_hub($arr) { */ foreach($sig_methods as $method) { - if((rsa_verify($arr['guid'],base64url_decode($arr['guid_sig']),$record['key'],$method)) - && (rsa_verify($arr['url'],base64url_decode($arr['url_sig']),$record['key'],$method)) + if((Crypto::verify($arr['guid'],base64url_decode($arr['guid_sig']),$record['key'],$method)) + && (Crypto::verify($arr['url'],base64url_decode($arr['url_sig']),$record['key'],$method)) && ($arr['guid'] === $record['guid']) && ($arr['guid_sig'] === $record['guid_sig'])) { $c = import_xchan($record); @@ -790,7 +793,7 @@ function import_xchan($arr, $ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { $verified = false; foreach($sig_methods as $method) { - if(! rsa_verify($arr['guid'],base64url_decode($arr['guid_sig']),$arr['key'],$method)) { + if(! Crypto::verify($arr['guid'],base64url_decode($arr['guid_sig']),$arr['key'],$method)) { logger('Unable to verify channel signature for ' . $arr['address'] . ' using ' . $method); continue; } @@ -925,28 +928,28 @@ function import_xchan($arr, $ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { $local = q("select channel_account_id, channel_id from channel where channel_portable_id = '%s' limit 1", dbesc($xchan_hash) ); - + if($local) { - // @FIXME This should be removed in future when profile photo update by file sync procedure will be applied + // @FIXME This should be removed in future when profile photo update by file sync procedure will be applied // on most hubs in the network // <--- $ph = z_fetch_url($arr['photo'], true); - + if($ph['success']) { - + // Do not fetch already received thumbnails $x = q("SELECT resource_id FROM photo WHERE uid = %d AND imgscale = %d AND filesize = %d LIMIT 1", intval($local[0]['channel_id']), intval(PHOTO_RES_PROFILE_300), strlen($ph['body']) - ); + ); if($x) $hash = $x[0]['resource_id']; else $hash = import_channel_photo($ph['body'], $arr['photo_mimetype'], $local[0]['channel_account_id'], $local[0]['channel_id']); } - + if($hash) { // unless proven otherwise $is_default_profile = 1; @@ -972,7 +975,7 @@ function import_xchan($arr, $ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) { } } // ---> - + // reset the names in case they got messed up when we had a bug in this function $photos = array( z_root() . '/photo/profile/l/' . $local[0]['channel_id'], @@ -1128,7 +1131,8 @@ function zot_process_response($hub, $arr, $outq) { if(is_array($x) && array_key_exists('delivery_report',$x) && is_array($x['delivery_report'])) { if(array_key_exists('iv',$x['delivery_report'])) { - $j = crypto_unencapsulate($x['delivery_report'],get_config('system','prvkey')); + $x['delivery_report']['encrypted'] = true; + $j = Crypto::unencapsulate($x['delivery_report'],get_config('system','prvkey')); if($j) { $x['delivery_report'] = json_decode($j,true); } @@ -1253,14 +1257,14 @@ function zot_fetch($arr) { $data = [ 'type' => 'pickup', 'url' => z_root(), - 'callback_sig' => base64url_encode(rsa_sign(z_root() . '/post', get_config('system','prvkey'))), + 'callback_sig' => base64url_encode(Crypto::sign(z_root() . '/post', get_config('system','prvkey'))), 'callback' => z_root() . '/post', 'secret' => $secret, - 'secret_sig' => base64url_encode(rsa_sign($secret, get_config('system','prvkey'))) + 'secret_sig' => base64url_encode(Crypto::sign($secret, get_config('system','prvkey'))) ]; $algorithm = zot_best_algorithm($hub['site_crypto']); - $datatosend = json_encode(crypto_encapsulate(json_encode($data),$hub['hubloc_sitekey'], $algorithm)); + $datatosend = json_encode(Crypto::encapsulate(json_encode($data),$hub['hubloc_sitekey'], $algorithm)); $import = zot_zot($url,$datatosend); @@ -1272,7 +1276,7 @@ function zot_fetch($arr) { $result = zot_import($import, $arr['sender']['url']); if($result) { - $result = crypto_encapsulate(json_encode($result),$hub['hubloc_sitekey'], $algorithm); + $result = Crypto::encapsulate(json_encode($result),$hub['hubloc_sitekey'], $algorithm); return $result; } @@ -1314,7 +1318,8 @@ function zot_import($arr, $sender_url) { } if(array_key_exists('iv', $data)) { - $data = json_decode(crypto_unencapsulate($data,get_config('system','prvkey')),true); + $data['encrypted'] = true; + $data = json_decode(Crypto::unencapsulate($data,get_config('system','prvkey')),true); } if(! is_array($data)) { @@ -1342,7 +1347,8 @@ function zot_import($arr, $sender_url) { $result = null; if(array_key_exists('iv',$i['notify'])) { - $i['notify'] = json_decode(crypto_unencapsulate($i['notify'],get_config('system','prvkey')),true); + $i['notify']['encrypted'] = true; + $i['notify'] = json_decode(Crypto::unencapsulate($i['notify'],get_config('system','prvkey')),true); } logger('Notify: ' . print_r($i['notify'],true), LOGGER_DATA, LOG_DEBUG); @@ -2466,7 +2472,7 @@ function process_rating_delivery($sender, $arr) { dbesc($sender['hash']) ); - if((! $z) || (! rsa_verify($arr['target'] . '.' . $arr['rating'] . '.' . $arr['rating_text'], base64url_decode($arr['signature']),$z[0]['xchan_pubkey']))) { + if((! $z) || (! Crypto::verify($arr['target'] . '.' . $arr['rating'] . '.' . $arr['rating_text'], base64url_decode($arr['signature']),$z[0]['xchan_pubkey']))) { logger('failed to verify rating'); return; } @@ -2652,7 +2658,7 @@ function sync_locations($sender, $arr, $absolute = false) { $arr['locations'][0]['primary'] = true; foreach($arr['locations'] as $location) { - if(! rsa_verify($location['url'],base64url_decode($location['url_sig']),$sender['key'])) { + if(! Crypto::verify($location['url'],base64url_decode($location['url_sig']),$sender['key'])) { logger('Unable to verify site signature for ' . $location['url']); $ret['message'] .= sprintf( t('Unable to verify site signature for %s'), $location['url']) . EOL; continue; @@ -3126,7 +3132,7 @@ function import_site($arr, $pubkey) { if( (! is_array($arr)) || (! $arr['url']) || (! $arr['url_sig'])) return false; - if(! rsa_verify($arr['url'], base64url_decode($arr['url_sig']), $pubkey)) { + if(! Crypto::verify($arr['url'], base64url_decode($arr['url_sig']), $pubkey)) { logger('Bad url_sig'); return false; } @@ -3509,12 +3515,12 @@ function process_channel_sync_delivery($sender, $arr, $deliveries) { if($keychange) { // verify the keychange operation - if(! rsa_verify($arr['channel']['channel_pubkey'],base64url_decode($arr['keychange']['new_sig']),$channel['channel_prvkey'])) { + if(! Crypto::verify($arr['channel']['channel_pubkey'],base64url_decode($arr['keychange']['new_sig']),$channel['channel_prvkey'])) { logger('sync keychange: verification failed'); continue; } - $sig = base64url_encode(rsa_sign($channel['channel_guid'],$arr['channel']['channel_prvkey'])); + $sig = base64url_encode(Crypto::sign($channel['channel_guid'],$arr['channel']['channel_prvkey'])); $hash = make_xchan_hash($channel['channel_guid'],$sig); @@ -3551,7 +3557,7 @@ function process_channel_sync_delivery($sender, $arr, $deliveries) { foreach($h as $hv) { $hv['hubloc_guid_sig'] = $sig; $hv['hubloc_hash'] = $hash; - $hv['hubloc_url_sig'] = base64url_encode(rsa_sign(z_root(),$channel['channel_prvkey'])); + $hv['hubloc_url_sig'] = base64url_encode(Crypto::sign(z_root(),$channel['channel_prvkey'])); hubloc_store_lowlevel($hv); } } @@ -4329,7 +4335,7 @@ function zot_rekey_request($sender,$data) { $xchan = $r[0]; - if(! rsa_verify($data['new_key'],base64url_decode($data['new_sig']),$xchan['xchan_pubkey'])) { + if(! Crypto::verify($data['new_key'],base64url_decode($data['new_sig']),$xchan['xchan_pubkey'])) { json_return_and_die($ret); } @@ -4367,7 +4373,7 @@ function zotinfo($arr) { $feed = ((x($arr,'feed')) ? intval($arr['feed']) : 0); if($ztarget) { - if((! $zkey) || (! $zsig) || (! rsa_verify($ztarget,base64url_decode($zsig),$zkey))) { + if((! $zkey) || (! $zsig) || (! Crypto::verify($ztarget,base64url_decode($zsig),$zkey))) { logger('zfinger: invalid target signature'); $ret['message'] = t("invalid target signature"); return($ret); @@ -4531,7 +4537,7 @@ function zotinfo($arr) { // Communication details if($token) - $ret['signed_token'] = base64url_encode(rsa_sign('token.' . $token,$e['channel_prvkey'],$sig_method)); + $ret['signed_token'] = base64url_encode(Crypto::sign('token.' . $token,$e['channel_prvkey'],$sig_method)); $ret['guid'] = $e['xchan_guid']; @@ -4587,7 +4593,7 @@ function zotinfo($arr) { // because ztarget refers to an xchan and we don't necessarily know the origination // location. - $ret['permissions'] = (($ztarget && $zkey) ? crypto_encapsulate(json_encode($permissions),$zkey) : $permissions); + $ret['permissions'] = (($ztarget && $zkey) ? crypto_encapsulate(json_encode($permissions),$zkey,) : $permissions); if($permissions['view_profile']) $ret['profile'] = $profile; @@ -4622,9 +4628,9 @@ function zot_site_info($channel_key = '') { $ret['site'] = []; $ret['site']['url'] = z_root(); if($channel_key) { - $ret['site']['url_sig'] = base64url_encode(rsa_sign(z_root(),$channel_key,$sig_method)); + $ret['site']['url_sig'] = base64url_encode(Crypto::sign(z_root(),$channel_key,$sig_method)); } - $ret['site']['url_site_sig'] = base64url_encode(rsa_sign(z_root(),$signing_key,$sig_method)); + $ret['site']['url_site_sig'] = base64url_encode(Crypto::sign(z_root(),$signing_key,$sig_method)); $ret['site']['post'] = z_root() . '/post'; $ret['site']['openWebAuth'] = z_root() . '/owa'; $ret['site']['authRedirect'] = z_root() . '/magic'; @@ -4644,8 +4650,8 @@ function zot_site_info($channel_key = '') { $ret['site']['directory_url'] = z_root() . '/dirsearch'; - $ret['site']['encryption'] = crypto_methods(); - $ret['site']['signing'] = signing_methods(); + $ret['site']['encryption'] = Crypto::methods(); + $ret['site']['signing'] = Crypto::signing_methods(); $ret['site']['zot'] = Zotlabs\Lib\System::get_zot_revision(); // hide detailed site information if you're off the grid @@ -4724,7 +4730,7 @@ function check_zotinfo($channel, $locations, &$ret) { // the sys channel must have a location (hubloc) $valid_location = false; if((count($locations) === 1) && ($locations[0]['primary']) && (! $locations[0]['deleted'])) { - if((rsa_verify($locations[0]['url'],base64url_decode($locations[0]['url_sig']),$channel['channel_pubkey'])) + if((Crypto::verify($locations[0]['url'],base64url_decode($locations[0]['url_sig']),$channel['channel_pubkey'])) && ($locations[0]['sitekey'] === get_config('system','pubkey')) && ($locations[0]['url'] === z_root())) $valid_location = true; @@ -4752,7 +4758,7 @@ function check_zotinfo($channel, $locations, &$ret) { 'hubloc_network' => 'zot', 'hubloc_primary' => 1, 'hubloc_url' => z_root(), - 'hubloc_url_sig' => base64url_encode(rsa_sign(z_root(),$channel['channel_prvkey'])), + 'hubloc_url_sig' => base64url_encode(Crypto::sign(z_root(),$channel['channel_prvkey'])), 'hubloc_host' => App::get_hostname(), 'hubloc_callback' => z_root() . '/post', 'hubloc_sitekey' => get_config('system','pubkey'), @@ -4931,7 +4937,7 @@ function zot_reply_ping() { $ret['success'] = true; $ret['site'] = array(); $ret['site']['url'] = z_root(); - $ret['site']['url_sig'] = base64url_encode(rsa_sign(z_root(),get_config('system','prvkey'))); + $ret['site']['url_sig'] = base64url_encode(Crypto::sign(z_root(),get_config('system','prvkey'))); $ret['site']['sitekey'] = get_config('system','pubkey'); json_return_and_die($ret); @@ -4979,10 +4985,10 @@ function zot_reply_pickup($data) { logger('mod_zot: Checking sitekey: ' . $sitekey, LOGGER_DATA, LOG_DEBUG); - if(rsa_verify($data['callback'],base64url_decode($data['callback_sig']),$sitekey)) { + if(Crypto::verify($data['callback'],base64url_decode($data['callback_sig']),$sitekey)) { $forgery = false; } - if(rsa_verify($data['secret'],base64url_decode($data['secret_sig']),$sitekey)) { + if(Crypto::verify($data['secret'],base64url_decode($data['secret_sig']),$sitekey)) { $secret_fail = false; } if((! $forgery) && (! $secret_fail)) @@ -5076,7 +5082,7 @@ function zot_reply_pickup($data) { ); $algorithm = zot_best_algorithm(($x) ? $x[0]['site_crypto'] : ''); - $encrypted = crypto_encapsulate(json_encode($ret),$sitekey,$algorithm); + $encrypted = Crypto::encapsulate(json_encode($ret),$sitekey,$algorithm); json_return_and_die($encrypted); // @FIXME: There is a possibility that the transmission will get interrupted @@ -5133,7 +5139,7 @@ function zot_reply_auth_check($data,$encrypted_packet) { // First verify their signature. We will have obtained a zot-info packet from them as part of the sender // verification. - if ((! $y) || (! rsa_verify($data['secret'], base64url_decode($data['secret_sig']),$y[0]['xchan_pubkey']))) { + if ((! $y) || (! Crypto::verify($data['secret'], base64url_decode($data['secret_sig']),$y[0]['xchan_pubkey']))) { logger('mod_zot: auth_check: sender not found or secret_sig invalid.'); $ret['message'] .= 'sender not found or sig invalid ' . print_r($y,true) . EOL; @@ -5158,7 +5164,7 @@ function zot_reply_auth_check($data,$encrypted_packet) { json_return_and_die($ret); } - $confirm = base64url_encode(rsa_sign($data['secret'] . $recip_hash,$c[0]['channel_prvkey'])); + $confirm = base64url_encode(Crypto::sign($data['secret'] . $recip_hash,$c[0]['channel_prvkey'])); // This additionally checks for forged sites since we already stored the expected result in meta // and we've already verified that this is them via zot_gethub() and that their key signed our token diff --git a/index.php b/index.php old mode 100755 new mode 100644 diff --git a/install/htconfig.sample.php b/install/htconfig.sample.php old mode 100755 new mode 100644 diff --git a/library/jgrowl/examples/jgrowl.html b/library/jgrowl/examples/jgrowl.html old mode 100755 new mode 100644 diff --git a/library/jgrowl/jquery.jgrowl.js b/library/jgrowl/jquery.jgrowl.js old mode 100755 new mode 100644 diff --git a/library/jgrowl/less/jgrowl.core.less b/library/jgrowl/less/jgrowl.core.less old mode 100755 new mode 100644 diff --git a/library/kzykhys/git/test/PHPGit/Command/ShortlogCommandTest.php b/library/kzykhys/git/test/PHPGit/Command/ShortlogCommandTest.php old mode 100755 new mode 100644 diff --git a/tests/travis/gen_apidocs.sh b/tests/travis/gen_apidocs.sh old mode 100755 new mode 100644 diff --git a/tests/travis/prepare.sh b/tests/travis/prepare.sh old mode 100755 new mode 100644 diff --git a/tests/travis/prepare_mysql.sh b/tests/travis/prepare_mysql.sh old mode 100755 new mode 100644 diff --git a/tests/travis/prepare_pgsql.sh b/tests/travis/prepare_pgsql.sh old mode 100755 new mode 100644 diff --git a/tests/unit/Lib/KeyutilsTest.php b/tests/unit/Lib/KeyutilsTest.php new file mode 100644 index 000000000..d1b0b5ab8 --- /dev/null +++ b/tests/unit/Lib/KeyutilsTest.php @@ -0,0 +1,93 @@ +getPubPKCS8(), $m, $e); + $gen_key = Keyutils::meToPem($m, $e); + self::assertEquals($this->getPubPKCS8(), $gen_key); + } + + public function testRsaToPem() { + $rsa = new RSA(); + $rsa->setPublicKey($this->getPubPKCS8()); + $key = $rsa->getPublicKey(RSA::PUBLIC_FORMAT_PKCS1); + $gen_key = Keyutils::rsaToPem($key); + self::assertEquals($gen_key, $this->getPubPKCS8()); + } + + public function testPemToRsa() { + $rsa = new RSA(); + $rsa->setPublicKey($this->getPubPKCS1()); + $key = $rsa->getPublicKey(RSA::PUBLIC_FORMAT_PKCS8); + $gen_key = Keyutils::pemToRsa($key); + self::assertEquals($gen_key, $this->getPubPKCS1()); + } + + public function testPemToMe() { + Keyutils::pemToMe($this->getPubPKCS8(), $m, $e); + $gen_key = new RSA(); + $gen_key->loadKey([ + 'e' => new BigInteger($e, 256), + 'n' => new BigInteger($m, 256) + ]); + self::assertEquals($gen_key->getPublicKey(), $this->getPubPKCS8()); + } + +} diff --git a/tests/unit/Web/HttpSigTest.php b/tests/unit/Web/HttpSigTest.php index bd11b96c8..5524e0510 100644 --- a/tests/unit/Web/HttpSigTest.php +++ b/tests/unit/Web/HttpSigTest.php @@ -71,7 +71,7 @@ class HttpSigTest extends UnitTestCase { } /** - * @uses ::crypto_unencapsulate + * @uses ::Crypto::unencapsulate */ function testDecrypt_sigheader() { $header = 'Header: iv="value_iv" key="value_key" alg="value_alg" data="value_data"'; @@ -86,7 +86,7 @@ class HttpSigTest extends UnitTestCase { $this->assertSame($result, HTTPSig::decrypt_sigheader($header, 'site private key')); } /** - * @uses ::crypto_unencapsulate + * @uses ::Crypto::unencapsulate */ function testDecrypt_sigheaderUseSitePrivateKey() { // Create a stub for global function get_config() with expectation @@ -95,7 +95,7 @@ class HttpSigTest extends UnitTestCase { $header = 'Header: iv="value_iv" key="value_key" alg="value_alg" data="value_data"'; $result = [ - 'encrypted' => true, + 'encrypted' => true, 'iv' => 'value_iv', 'key' => 'value_key', 'alg' => 'value_alg', diff --git a/util/.htaccess b/util/.htaccess old mode 100644 new mode 100755 diff --git a/util/Doxyfile b/util/Doxyfile old mode 100644 new mode 100755 diff --git a/util/Doxygen.footer b/util/Doxygen.footer old mode 100644 new mode 100755 diff --git a/util/Doxygen_phpvarfilter.php b/util/Doxygen_phpvarfilter.php old mode 100644 new mode 100755 diff --git a/util/README b/util/README old mode 100644 new mode 100755 diff --git a/util/config.md b/util/config.md old mode 100644 new mode 100755 diff --git a/util/connect b/util/connect index 7ceda300f..44128d580 100755 --- a/util/connect +++ b/util/connect @@ -2,6 +2,7 @@ \n" "Language-Team: LANGUAGE \n" @@ -21,7 +21,7 @@ msgstr "" #: ../../addon/cart/submodules/orderoptions.php:335 #: ../../addon/cart/submodules/orderoptions.php:359 #: ../../addon/cart/submodules/orderoptions.php:435 -#: ../../addon/cart/submodules/orderoptions.php:459 ../../include/text.php:3381 +#: ../../addon/cart/submodules/orderoptions.php:459 ../../include/text.php:3382 #: ../../Zotlabs/Module/Admin/Site.php:191 msgid "Default" msgstr "" @@ -46,7 +46,7 @@ msgstr "" #: ../../addon/ijpost/Mod_Ijpost.php:72 #: ../../addon/pubcrawl/Mod_Pubcrawl.php:65 #: ../../addon/dwpost/Mod_Dwpost.php:80 -#: ../../addon/startpage/Mod_Startpage.php:73 ../../addon/mail/Mod_Mail.php:310 +#: ../../addon/startpage/Mod_Startpage.php:73 ../../addon/mail/Mod_Mail.php:311 #: ../../addon/twitter/Mod_Twitter.php:184 #: ../../addon/pumpio/Mod_Pumpio.php:115 #: ../../addon/cart/submodules/subscriptions.php:410 @@ -58,8 +58,8 @@ msgstr "" #: ../../addon/cart/Settings/Cart.php:142 ../../addon/cart/cart.php:1376 #: ../../addon/nofed/Mod_Nofed.php:53 #: ../../addon/smileybutton/Mod_Smileybutton.php:55 -#: ../../addon/redfiles/redfiles.php:124 ../../addon/diaspora/diaspora.php:75 -#: ../../addon/diaspora/Mod_Diaspora.php:100 ../../addon/piwik/piwik.php:95 +#: ../../addon/redfiles/redfiles.php:124 ../../addon/diaspora/diaspora.php:79 +#: ../../addon/diaspora/Mod_Diaspora.php:102 ../../addon/piwik/piwik.php:95 #: ../../addon/workflow/workflow.php:1461 #: ../../addon/workflow/workflow.php:1520 #: ../../addon/workflow/workflow.php:1639 @@ -79,7 +79,7 @@ msgstr "" #: ../../Zotlabs/Widget/Wiki_pages.php:99 #: ../../Zotlabs/Widget/Eventstools.php:16 ../../Zotlabs/Module/Tokens.php:188 #: ../../Zotlabs/Module/Import_items.php:129 -#: ../../Zotlabs/Module/Import.php:645 ../../Zotlabs/Module/Setup.php:304 +#: ../../Zotlabs/Module/Import.php:646 ../../Zotlabs/Module/Setup.php:304 #: ../../Zotlabs/Module/Setup.php:344 ../../Zotlabs/Module/Group.php:151 #: ../../Zotlabs/Module/Group.php:167 ../../Zotlabs/Module/Oauth.php:111 #: ../../Zotlabs/Module/Chat.php:209 ../../Zotlabs/Module/Chat.php:248 @@ -102,7 +102,7 @@ msgstr "" #: ../../Zotlabs/Module/Photos.php:1058 ../../Zotlabs/Module/Photos.php:1098 #: ../../Zotlabs/Module/Photos.php:1216 ../../Zotlabs/Module/Profiles.php:725 #: ../../Zotlabs/Module/Invite.php:168 ../../Zotlabs/Module/Xchan.php:15 -#: ../../Zotlabs/Module/Affinity.php:87 ../../Zotlabs/Module/Rate.php:166 +#: ../../Zotlabs/Module/Affinity.php:87 ../../Zotlabs/Module/Rate.php:168 #: ../../Zotlabs/Module/Settings/Network.php:62 #: ../../Zotlabs/Module/Settings/Features.php:48 #: ../../Zotlabs/Module/Settings/Channel.php:495 @@ -121,10 +121,10 @@ msgstr "" #: ../../Zotlabs/Module/Defperms.php:266 ../../Zotlabs/Module/Pconfig.php:116 #: ../../Zotlabs/Module/Oauth2.php:116 ../../Zotlabs/Module/Thing.php:328 #: ../../Zotlabs/Module/Thing.php:381 ../../Zotlabs/Module/Pdledit.php:108 -#: ../../Zotlabs/Module/Wiki.php:215 ../../Zotlabs/Module/Connedit.php:896 +#: ../../Zotlabs/Module/Wiki.php:215 ../../Zotlabs/Module/Connedit.php:897 #: ../../Zotlabs/Module/Locs.php:132 ../../Zotlabs/Module/Sources.php:125 -#: ../../Zotlabs/Module/Sources.php:162 ../../Zotlabs/Lib/ThreadItem.php:825 -#: ../../Zotlabs/Storage/Browser.php:375 +#: ../../Zotlabs/Module/Sources.php:162 ../../Zotlabs/Lib/ThreadItem.php:827 +#: ../../Zotlabs/Storage/Browser.php:382 msgid "Submit" msgstr "" @@ -173,13 +173,14 @@ msgstr "" #: ../../addon/cart/Settings/Cart.php:61 ../../addon/cart/Settings/Cart.php:73 #: ../../addon/cart/cart.php:1370 ../../addon/nofed/Mod_Nofed.php:42 #: ../../addon/smileybutton/Mod_Smileybutton.php:44 +#: ../../addon/diaspora/Mod_Diaspora.php:72 #: ../../addon/libertree/Mod_Libertree.php:59 #: ../../addon/socialauth/Mod_SocialAuth.php:214 #: ../../addon/ljpost/Mod_Ljpost.php:63 ../../addon/ljpost/Mod_Ljpost.php:67 -#: ../../addon/ljpost/Mod_Ljpost.php:71 ../../include/conversation.php:1466 -#: ../../include/dir_fns.php:142 ../../include/dir_fns.php:143 -#: ../../include/dir_fns.php:144 ../../Zotlabs/Module/Import.php:634 -#: ../../Zotlabs/Module/Import.php:638 ../../Zotlabs/Module/Import.php:639 +#: ../../addon/ljpost/Mod_Ljpost.php:71 ../../include/conversation.php:1469 +#: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 +#: ../../include/dir_fns.php:146 ../../Zotlabs/Module/Import.php:635 +#: ../../Zotlabs/Module/Import.php:639 ../../Zotlabs/Module/Import.php:640 #: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177 #: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257 #: ../../Zotlabs/Module/Filestorage.php:203 @@ -191,14 +192,14 @@ msgstr "" #: ../../Zotlabs/Module/Settings/Display.php:88 #: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222 #: ../../Zotlabs/Module/Defperms.php:198 ../../Zotlabs/Module/Wiki.php:227 -#: ../../Zotlabs/Module/Wiki.php:228 ../../Zotlabs/Module/Connedit.php:403 -#: ../../Zotlabs/Module/Connedit.php:788 ../../Zotlabs/Module/Sources.php:124 -#: ../../Zotlabs/Module/Sources.php:159 ../../Zotlabs/Lib/Libzotdir.php:164 -#: ../../Zotlabs/Lib/Libzotdir.php:165 ../../Zotlabs/Lib/Libzotdir.php:167 -#: ../../Zotlabs/Storage/Browser.php:303 ../../Zotlabs/Storage/Browser.php:304 -#: ../../Zotlabs/Storage/Browser.php:305 ../../Zotlabs/Storage/Browser.php:382 -#: ../../Zotlabs/Storage/Browser.php:384 ../../Zotlabs/Storage/Browser.php:545 -#: ../../boot.php:1704 +#: ../../Zotlabs/Module/Wiki.php:228 ../../Zotlabs/Module/Connedit.php:404 +#: ../../Zotlabs/Module/Connedit.php:789 ../../Zotlabs/Module/Sources.php:124 +#: ../../Zotlabs/Module/Sources.php:159 ../../Zotlabs/Lib/Libzotdir.php:165 +#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:168 +#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311 +#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:389 +#: ../../Zotlabs/Storage/Browser.php:391 ../../Zotlabs/Storage/Browser.php:552 +#: ../../boot.php:1716 msgid "No" msgstr "" @@ -239,13 +240,14 @@ msgstr "" #: ../../addon/cart/Settings/Cart.php:61 ../../addon/cart/Settings/Cart.php:73 #: ../../addon/cart/cart.php:1370 ../../addon/nofed/Mod_Nofed.php:42 #: ../../addon/smileybutton/Mod_Smileybutton.php:44 +#: ../../addon/diaspora/Mod_Diaspora.php:72 #: ../../addon/libertree/Mod_Libertree.php:59 #: ../../addon/socialauth/Mod_SocialAuth.php:214 #: ../../addon/ljpost/Mod_Ljpost.php:63 ../../addon/ljpost/Mod_Ljpost.php:67 -#: ../../addon/ljpost/Mod_Ljpost.php:71 ../../include/conversation.php:1466 -#: ../../include/dir_fns.php:142 ../../include/dir_fns.php:143 -#: ../../include/dir_fns.php:144 ../../Zotlabs/Module/Import.php:634 -#: ../../Zotlabs/Module/Import.php:638 ../../Zotlabs/Module/Import.php:639 +#: ../../addon/ljpost/Mod_Ljpost.php:71 ../../include/conversation.php:1469 +#: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 +#: ../../include/dir_fns.php:146 ../../Zotlabs/Module/Import.php:635 +#: ../../Zotlabs/Module/Import.php:639 ../../Zotlabs/Module/Import.php:640 #: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177 #: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257 #: ../../Zotlabs/Module/Filestorage.php:203 @@ -257,13 +259,13 @@ msgstr "" #: ../../Zotlabs/Module/Settings/Display.php:88 #: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222 #: ../../Zotlabs/Module/Defperms.php:198 ../../Zotlabs/Module/Wiki.php:227 -#: ../../Zotlabs/Module/Wiki.php:228 ../../Zotlabs/Module/Connedit.php:403 +#: ../../Zotlabs/Module/Wiki.php:228 ../../Zotlabs/Module/Connedit.php:404 #: ../../Zotlabs/Module/Sources.php:124 ../../Zotlabs/Module/Sources.php:159 -#: ../../Zotlabs/Lib/Libzotdir.php:164 ../../Zotlabs/Lib/Libzotdir.php:165 -#: ../../Zotlabs/Lib/Libzotdir.php:167 ../../Zotlabs/Storage/Browser.php:303 -#: ../../Zotlabs/Storage/Browser.php:304 ../../Zotlabs/Storage/Browser.php:305 -#: ../../Zotlabs/Storage/Browser.php:382 ../../Zotlabs/Storage/Browser.php:384 -#: ../../Zotlabs/Storage/Browser.php:545 ../../boot.php:1704 +#: ../../Zotlabs/Lib/Libzotdir.php:165 ../../Zotlabs/Lib/Libzotdir.php:166 +#: ../../Zotlabs/Lib/Libzotdir.php:168 ../../Zotlabs/Storage/Browser.php:310 +#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:312 +#: ../../Zotlabs/Storage/Browser.php:389 ../../Zotlabs/Storage/Browser.php:391 +#: ../../Zotlabs/Storage/Browser.php:552 ../../boot.php:1716 msgid "Yes" msgstr "" @@ -419,8 +421,8 @@ msgstr "" #: ../../addon/channelreputation/channelreputation.php:233 #: ../../include/acl_selectors.php:155 ../../Zotlabs/Widget/Pinned.php:160 -#: ../../Zotlabs/Module/Photos.php:1275 ../../Zotlabs/Lib/ThreadItem.php:495 -#: ../../Zotlabs/Storage/Browser.php:404 +#: ../../Zotlabs/Module/Photos.php:1275 ../../Zotlabs/Lib/ThreadItem.php:497 +#: ../../Zotlabs/Storage/Browser.php:411 msgid "Close" msgstr "" @@ -444,11 +446,11 @@ msgstr "" msgid "Block Completely" msgstr "" -#: ../../addon/superblock/Mod_Superblock.php:20 +#: ../../addon/superblock/Mod_Superblock.php:21 msgid "Superblock App" msgstr "" -#: ../../addon/superblock/Mod_Superblock.php:20 +#: ../../addon/superblock/Mod_Superblock.php:21 #: ../../addon/nsabait/Mod_Nsabait.php:20 #: ../../addon/rainbowtag/Mod_Rainbowtag.php:21 #: ../../addon/photocache/Mod_Photocache.php:42 @@ -479,7 +481,7 @@ msgstr "" #: ../../Zotlabs/Module/Lang.php:17 ../../Zotlabs/Module/Uexport.php:61 #: ../../Zotlabs/Module/Mood.php:134 ../../Zotlabs/Module/Cards.php:51 #: ../../Zotlabs/Module/Articles.php:52 ../../Zotlabs/Module/Bookmarks.php:78 -#: ../../Zotlabs/Module/Probe.php:18 ../../Zotlabs/Module/Invite.php:110 +#: ../../Zotlabs/Module/Probe.php:19 ../../Zotlabs/Module/Invite.php:110 #: ../../Zotlabs/Module/Notes.php:57 ../../Zotlabs/Module/Affinity.php:52 #: ../../Zotlabs/Module/Defperms.php:190 ../../Zotlabs/Module/Oauth2.php:106 #: ../../Zotlabs/Module/Randprof.php:29 ../../Zotlabs/Module/Pdledit.php:43 @@ -488,23 +490,23 @@ msgstr "" msgid "Not Installed" msgstr "" -#: ../../addon/superblock/Mod_Superblock.php:21 +#: ../../addon/superblock/Mod_Superblock.php:22 msgid "Block channels" msgstr "" -#: ../../addon/superblock/Mod_Superblock.php:63 +#: ../../addon/superblock/Mod_Superblock.php:64 msgid "superblock settings updated" msgstr "" -#: ../../addon/superblock/Mod_Superblock.php:87 +#: ../../addon/superblock/Mod_Superblock.php:88 msgid "Currently blocked" msgstr "" -#: ../../addon/superblock/Mod_Superblock.php:89 +#: ../../addon/superblock/Mod_Superblock.php:90 msgid "No channels currently blocked" msgstr "" -#: ../../addon/superblock/Mod_Superblock.php:91 +#: ../../addon/superblock/Mod_Superblock.php:92 #: ../../Zotlabs/Module/Tagrm.php:137 ../../Zotlabs/Module/Admin/Addons.php:459 #: ../../Zotlabs/Module/Profile_photo.php:501 #: ../../Zotlabs/Module/Cover_photo.php:424 ../../Zotlabs/Module/Photos.php:996 @@ -569,14 +571,14 @@ msgstr "" msgid "Page to load after image selection." msgstr "" -#: ../../addon/openclipatar/openclipatar.php:57 ../../include/nav.php:112 -#: ../../include/conversation.php:1080 ../../Zotlabs/Module/Connedit.php:600 +#: ../../addon/openclipatar/openclipatar.php:57 ../../include/nav.php:115 +#: ../../include/conversation.php:1083 ../../Zotlabs/Module/Connedit.php:601 #: ../../Zotlabs/Lib/Apps.php:344 msgid "View Profile" msgstr "" -#: ../../addon/openclipatar/openclipatar.php:58 ../../include/nav.php:117 -#: ../../include/channel.php:1542 +#: ../../addon/openclipatar/openclipatar.php:58 ../../include/nav.php:120 +#: ../../include/channel.php:1543 msgid "Edit Profile" msgstr "" @@ -662,7 +664,7 @@ msgid "Profile photo updated successfully." msgstr "" #: ../../addon/bookmarker/bookmarker.php:38 -#: ../../Zotlabs/Lib/ThreadItem.php:472 +#: ../../Zotlabs/Lib/ThreadItem.php:474 msgid "Save Bookmarks" msgstr "" @@ -670,23 +672,35 @@ msgstr "" msgid "Max queueworker threads" msgstr "" -#: ../../addon/queueworker/Mod_Queueworker.php:91 -msgid "Assume workers dead after ___ seconds" +#: ../../addon/queueworker/Mod_Queueworker.php:79 +msgid "Minimum 4, default 4" +msgstr "" + +#: ../../addon/queueworker/Mod_Queueworker.php:90 +msgid "Assume workers dead after" +msgstr "" + +#: ../../addon/queueworker/Mod_Queueworker.php:92 +msgid "Minimum 120, default 300 seconds" +msgstr "" + +#: ../../addon/queueworker/Mod_Queueworker.php:103 +msgid "Pause before starting next task" msgstr "" #: ../../addon/queueworker/Mod_Queueworker.php:105 -msgid "" -"Pause before starting next task: (microseconds. Minimum 100 = .0001 seconds)" +msgid "Minimum 100, default 100 microseconds" msgstr "" -#: ../../addon/queueworker/Mod_Queueworker.php:116 +#: ../../addon/queueworker/Mod_Queueworker.php:113 msgid "Queueworker Settings" msgstr "" -#: ../../addon/queueworker/Mod_Queueworker.php:119 ../../include/text.php:1151 -#: ../../include/text.php:1163 ../../Zotlabs/Widget/Notes.php:23 +#: ../../addon/queueworker/Mod_Queueworker.php:116 ../../include/text.php:1152 +#: ../../include/text.php:1164 ../../Zotlabs/Widget/Notes.php:23 #: ../../Zotlabs/Module/Admin/Profs.php:94 -#: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Filer.php:54 +#: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Cards.php:113 +#: ../../Zotlabs/Module/Filer.php:54 ../../Zotlabs/Module/Articles.php:117 #: ../../Zotlabs/Module/Rbmark.php:32 ../../Zotlabs/Module/Rbmark.php:104 msgid "Save" msgstr "" @@ -738,9 +752,9 @@ msgstr "" msgid "Photo Gallery" msgstr "" -#: ../../addon/gallery/Mod_Gallery.php:49 ../../include/channel.php:1439 +#: ../../addon/gallery/Mod_Gallery.php:49 ../../include/channel.php:1440 #: ../../Zotlabs/Module/Hcard.php:12 ../../Zotlabs/Module/Editwebpage.php:32 -#: ../../Zotlabs/Module/Profile.php:20 ../../Zotlabs/Module/Webpages.php:39 +#: ../../Zotlabs/Module/Profile.php:27 ../../Zotlabs/Module/Webpages.php:39 #: ../../Zotlabs/Module/Filestorage.php:59 ../../Zotlabs/Module/Connect.php:17 #: ../../Zotlabs/Module/Achievements.php:15 ../../Zotlabs/Module/Cards.php:42 #: ../../Zotlabs/Module/Blocks.php:33 ../../Zotlabs/Module/Editblock.php:31 @@ -767,9 +781,9 @@ msgid "" "Set a random planet from the Star Wars Empire as your location when posting" msgstr "" -#: ../../addon/openid/Mod_Id.php:53 ../../addon/mail/Mod_Mail.php:25 +#: ../../addon/openid/Mod_Id.php:53 ../../addon/mail/Mod_Mail.php:26 #: ../../addon/pumpio/pumpio.php:44 ../../addon/keepout/keepout.php:36 -#: ../../include/photos.php:27 ../../include/items.php:3979 +#: ../../include/photos.php:27 ../../include/items.php:4001 #: ../../include/attach.php:156 ../../include/attach.php:205 #: ../../include/attach.php:278 ../../include/attach.php:329 #: ../../include/attach.php:424 ../../include/attach.php:438 @@ -782,20 +796,20 @@ msgstr "" #: ../../Zotlabs/Module/Register.php:80 ../../Zotlabs/Module/Setup.php:206 #: ../../Zotlabs/Module/Viewconnections.php:28 #: ../../Zotlabs/Module/Viewconnections.php:33 -#: ../../Zotlabs/Module/Channel.php:177 ../../Zotlabs/Module/Channel.php:332 -#: ../../Zotlabs/Module/Channel.php:371 ../../Zotlabs/Module/Group.php:15 +#: ../../Zotlabs/Module/Channel.php:209 ../../Zotlabs/Module/Channel.php:364 +#: ../../Zotlabs/Module/Channel.php:403 ../../Zotlabs/Module/Group.php:15 #: ../../Zotlabs/Module/Group.php:31 ../../Zotlabs/Module/Card_edit.php:51 #: ../../Zotlabs/Module/Editwebpage.php:68 #: ../../Zotlabs/Module/Editwebpage.php:89 #: ../../Zotlabs/Module/Editwebpage.php:107 #: ../../Zotlabs/Module/Editwebpage.php:121 ../../Zotlabs/Module/Chat.php:113 #: ../../Zotlabs/Module/Chat.php:118 -#: ../../Zotlabs/Module/Channel_calendar.php:230 -#: ../../Zotlabs/Module/Like.php:230 ../../Zotlabs/Module/Poke.php:157 -#: ../../Zotlabs/Module/Item.php:485 ../../Zotlabs/Module/Item.php:504 -#: ../../Zotlabs/Module/Item.php:514 ../../Zotlabs/Module/Item.php:1442 -#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Profile.php:85 -#: ../../Zotlabs/Module/Profile.php:101 +#: ../../Zotlabs/Module/Channel_calendar.php:232 +#: ../../Zotlabs/Module/Like.php:242 ../../Zotlabs/Module/Poke.php:157 +#: ../../Zotlabs/Module/Item.php:496 ../../Zotlabs/Module/Item.php:515 +#: ../../Zotlabs/Module/Item.php:525 ../../Zotlabs/Module/Item.php:1436 +#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Profile.php:99 +#: ../../Zotlabs/Module/Profile.php:114 #: ../../Zotlabs/Module/Sharedwithme.php:19 #: ../../Zotlabs/Module/Webpages.php:133 #: ../../Zotlabs/Module/Filestorage.php:20 @@ -807,7 +821,7 @@ msgstr "" #: ../../Zotlabs/Module/Achievements.php:34 ../../Zotlabs/Module/Events.php:277 #: ../../Zotlabs/Module/Manage.php:10 ../../Zotlabs/Module/Authtest.php:16 #: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Moderate.php:15 -#: ../../Zotlabs/Module/Display.php:425 ../../Zotlabs/Module/Common.php:38 +#: ../../Zotlabs/Module/Display.php:428 ../../Zotlabs/Module/Common.php:38 #: ../../Zotlabs/Module/New_channel.php:105 #: ../../Zotlabs/Module/New_channel.php:130 #: ../../Zotlabs/Module/Service_limits.php:11 ../../Zotlabs/Module/Mood.php:126 @@ -828,13 +842,13 @@ msgstr "" #: ../../Zotlabs/Module/Articles.php:89 ../../Zotlabs/Module/Bookmarks.php:70 #: ../../Zotlabs/Module/Invite.php:21 ../../Zotlabs/Module/Invite.php:102 #: ../../Zotlabs/Module/Block.php:24 ../../Zotlabs/Module/Block.php:74 -#: ../../Zotlabs/Module/Rate.php:113 ../../Zotlabs/Module/Menu.php:130 +#: ../../Zotlabs/Module/Rate.php:115 ../../Zotlabs/Module/Menu.php:130 #: ../../Zotlabs/Module/Menu.php:141 ../../Zotlabs/Module/Defperms.php:182 #: ../../Zotlabs/Module/Thing.php:282 ../../Zotlabs/Module/Thing.php:302 #: ../../Zotlabs/Module/Thing.php:343 ../../Zotlabs/Module/Pdledit.php:35 #: ../../Zotlabs/Module/Wiki.php:59 ../../Zotlabs/Module/Wiki.php:285 #: ../../Zotlabs/Module/Wiki.php:428 ../../Zotlabs/Module/Suggest.php:32 -#: ../../Zotlabs/Module/Connedit.php:396 +#: ../../Zotlabs/Module/Connedit.php:397 #: ../../Zotlabs/Module/Notifications.php:11 #: ../../Zotlabs/Module/Layouts.php:71 ../../Zotlabs/Module/Layouts.php:78 #: ../../Zotlabs/Module/Layouts.php:89 ../../Zotlabs/Module/Locs.php:100 @@ -844,12 +858,12 @@ msgid "Permission denied." msgstr "" #: ../../addon/openid/Mod_Id.php:85 ../../include/selectors.php:60 -#: ../../include/selectors.php:77 ../../include/channel.php:1722 +#: ../../include/selectors.php:77 ../../include/channel.php:1723 msgid "Male" msgstr "" #: ../../addon/openid/Mod_Id.php:87 ../../include/selectors.php:60 -#: ../../include/selectors.php:77 ../../include/channel.php:1720 +#: ../../include/selectors.php:77 ../../include/channel.php:1721 msgid "Female" msgstr "" @@ -858,7 +872,7 @@ msgid "OpenID protocol error. No ID returned." msgstr "" #: ../../addon/openid/Mod_Openid.php:76 ../../addon/openid/Mod_Openid.php:178 -#: ../../Zotlabs/Zot/Auth.php:264 +#: ../../Zotlabs/Zot/Auth.php:266 #, php-format msgid "Welcome %s. Remote authentication successful." msgstr "" @@ -895,11 +909,11 @@ msgstr "" #: ../../addon/openid/MysqlProvider.php:56 #: ../../addon/openid/MysqlProvider.php:57 ../../addon/redred/Mod_Redred.php:71 -#: ../../addon/rtof/Mod_Rtof.php:57 ../../include/network.php:1737 +#: ../../addon/rtof/Mod_Rtof.php:57 ../../include/network.php:1764 #: ../../Zotlabs/Module/Cdav.php:1376 #: ../../Zotlabs/Module/Admin/Accounts.php:171 #: ../../Zotlabs/Module/Admin/Accounts.php:183 -#: ../../Zotlabs/Module/Profiles.php:789 ../../Zotlabs/Module/Connedit.php:919 +#: ../../Zotlabs/Module/Profiles.php:789 ../../Zotlabs/Module/Connedit.php:920 msgid "Email" msgstr "" @@ -1173,9 +1187,9 @@ msgstr "" #: ../../addon/redphotos/redphotos.php:119 #: ../../addon/redfiles/redfiles.php:109 ../../addon/hzfiles/hzfiles.php:75 -#: ../../include/items.php:439 ../../Zotlabs/Module/Import_items.php:120 +#: ../../include/items.php:441 ../../Zotlabs/Module/Import_items.php:120 #: ../../Zotlabs/Module/Profperm.php:28 ../../Zotlabs/Module/Group.php:99 -#: ../../Zotlabs/Module/Like.php:332 ../../Zotlabs/Module/Cloud.php:123 +#: ../../Zotlabs/Module/Like.php:342 ../../Zotlabs/Module/Cloud.php:123 #: ../../Zotlabs/Module/Share.php:72 ../../Zotlabs/Module/Subthread.php:86 #: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:82 #: ../../Zotlabs/Web/WebServer.php:115 @@ -1221,11 +1235,11 @@ msgstr "" msgid "0 or blank to import all available" msgstr "" -#: ../../addon/redphotos/redphotohelper.php:71 ../../addon/pubcrawl/as.php:2057 -#: ../../addon/diaspora/Receiver.php:1597 ../../include/text.php:2252 -#: ../../include/conversation.php:128 ../../Zotlabs/Module/Like.php:433 +#: ../../addon/redphotos/redphotohelper.php:71 ../../addon/pubcrawl/as.php:2049 +#: ../../addon/diaspora/Receiver.php:1641 ../../include/text.php:2253 +#: ../../include/conversation.php:128 ../../Zotlabs/Module/Like.php:439 #: ../../Zotlabs/Module/Tagger.php:71 ../../Zotlabs/Module/Subthread.php:112 -#: ../../Zotlabs/Lib/Activity.php:2971 +#: ../../Zotlabs/Lib/Activity.php:3229 msgid "photo" msgstr "" @@ -1545,16 +1559,16 @@ msgstr "" msgid "Until modified date yyyy-mm-dd" msgstr "" -#: ../../addon/hsse/hsse.php:82 ../../include/conversation.php:1328 +#: ../../addon/hsse/hsse.php:82 ../../include/conversation.php:1331 msgid "Set your location" msgstr "" -#: ../../addon/hsse/hsse.php:83 ../../include/conversation.php:1329 +#: ../../addon/hsse/hsse.php:83 ../../include/conversation.php:1332 msgid "Clear browser location" msgstr "" -#: ../../addon/hsse/hsse.php:95 ../../addon/mail/Mod_Mail.php:166 -#: ../../addon/mail/Mod_Mail.php:309 ../../include/conversation.php:1341 +#: ../../addon/hsse/hsse.php:95 ../../addon/mail/Mod_Mail.php:167 +#: ../../addon/mail/Mod_Mail.php:310 ../../include/conversation.php:1344 #: ../../Zotlabs/Module/Article_edit.php:100 #: ../../Zotlabs/Module/Card_edit.php:101 #: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Chat.php:220 @@ -1562,131 +1576,131 @@ msgstr "" msgid "Insert web link" msgstr "" -#: ../../addon/hsse/hsse.php:99 ../../include/conversation.php:1345 +#: ../../addon/hsse/hsse.php:99 ../../include/conversation.php:1348 msgid "Embed (existing) photo from your photo albums" msgstr "" -#: ../../addon/hsse/hsse.php:134 ../../addon/mail/Mod_Mail.php:119 -#: ../../addon/mail/Mod_Mail.php:240 ../../include/conversation.php:1380 +#: ../../addon/hsse/hsse.php:134 ../../addon/mail/Mod_Mail.php:120 +#: ../../addon/mail/Mod_Mail.php:241 ../../include/conversation.php:1383 #: ../../Zotlabs/Module/Chat.php:218 msgid "Please enter a link URL:" msgstr "" -#: ../../addon/hsse/hsse.php:135 ../../include/conversation.php:1381 +#: ../../addon/hsse/hsse.php:135 ../../include/conversation.php:1384 msgid "Tag term:" msgstr "" -#: ../../addon/hsse/hsse.php:136 ../../include/conversation.php:1382 +#: ../../addon/hsse/hsse.php:136 ../../include/conversation.php:1385 msgid "Where are you right now?" msgstr "" -#: ../../addon/hsse/hsse.php:139 ../../include/conversation.php:1385 +#: ../../addon/hsse/hsse.php:139 ../../include/conversation.php:1388 #: ../../Zotlabs/Module/Profile_photo.php:509 #: ../../Zotlabs/Module/Cover_photo.php:430 ../../Zotlabs/Module/Wiki.php:403 msgid "Choose images to embed" msgstr "" -#: ../../addon/hsse/hsse.php:140 ../../include/conversation.php:1386 +#: ../../addon/hsse/hsse.php:140 ../../include/conversation.php:1389 #: ../../Zotlabs/Module/Profile_photo.php:510 #: ../../Zotlabs/Module/Cover_photo.php:431 ../../Zotlabs/Module/Wiki.php:404 msgid "Choose an album" msgstr "" -#: ../../addon/hsse/hsse.php:141 ../../include/conversation.php:1387 +#: ../../addon/hsse/hsse.php:141 ../../include/conversation.php:1390 msgid "Choose a different album..." msgstr "" -#: ../../addon/hsse/hsse.php:142 ../../include/conversation.php:1388 +#: ../../addon/hsse/hsse.php:142 ../../include/conversation.php:1391 #: ../../Zotlabs/Module/Profile_photo.php:512 #: ../../Zotlabs/Module/Cover_photo.php:433 ../../Zotlabs/Module/Wiki.php:406 msgid "Error getting album list" msgstr "" -#: ../../addon/hsse/hsse.php:143 ../../include/conversation.php:1389 +#: ../../addon/hsse/hsse.php:143 ../../include/conversation.php:1392 #: ../../Zotlabs/Module/Profile_photo.php:513 #: ../../Zotlabs/Module/Cover_photo.php:434 ../../Zotlabs/Module/Wiki.php:407 msgid "Error getting photo link" msgstr "" -#: ../../addon/hsse/hsse.php:144 ../../include/conversation.php:1390 +#: ../../addon/hsse/hsse.php:144 ../../include/conversation.php:1393 #: ../../Zotlabs/Module/Profile_photo.php:514 #: ../../Zotlabs/Module/Cover_photo.php:435 ../../Zotlabs/Module/Wiki.php:408 msgid "Error getting album" msgstr "" -#: ../../addon/hsse/hsse.php:145 ../../include/conversation.php:1391 +#: ../../addon/hsse/hsse.php:145 ../../include/conversation.php:1394 msgid "Comments enabled" msgstr "" -#: ../../addon/hsse/hsse.php:146 ../../include/conversation.php:1392 +#: ../../addon/hsse/hsse.php:146 ../../include/conversation.php:1395 msgid "Comments disabled" msgstr "" -#: ../../addon/hsse/hsse.php:153 ../../include/conversation.php:1402 +#: ../../addon/hsse/hsse.php:153 ../../include/conversation.php:1405 #: ../../Zotlabs/Module/Webpages.php:262 ../../Zotlabs/Module/Events.php:486 -#: ../../Zotlabs/Module/Photos.php:1099 ../../Zotlabs/Lib/ThreadItem.php:835 +#: ../../Zotlabs/Module/Photos.php:1099 ../../Zotlabs/Lib/ThreadItem.php:837 msgid "Preview" msgstr "" -#: ../../addon/hsse/hsse.php:186 ../../include/conversation.php:1435 +#: ../../addon/hsse/hsse.php:186 ../../include/conversation.php:1438 #: ../../Zotlabs/Widget/Cdav.php:136 ../../Zotlabs/Module/Webpages.php:256 #: ../../Zotlabs/Module/Blocks.php:161 ../../Zotlabs/Module/Photos.php:1078 #: ../../Zotlabs/Module/Wiki.php:301 ../../Zotlabs/Module/Layouts.php:194 msgid "Share" msgstr "" -#: ../../addon/hsse/hsse.php:195 ../../include/conversation.php:1444 +#: ../../addon/hsse/hsse.php:195 ../../include/conversation.php:1447 msgid "Page link name" msgstr "" -#: ../../addon/hsse/hsse.php:198 ../../include/conversation.php:1447 +#: ../../addon/hsse/hsse.php:198 ../../include/conversation.php:1450 msgid "Post as" msgstr "" -#: ../../addon/hsse/hsse.php:200 ../../include/conversation.php:1449 -#: ../../Zotlabs/Lib/ThreadItem.php:826 +#: ../../addon/hsse/hsse.php:200 ../../include/conversation.php:1452 +#: ../../Zotlabs/Lib/ThreadItem.php:828 msgid "Bold" msgstr "" -#: ../../addon/hsse/hsse.php:201 ../../include/conversation.php:1450 -#: ../../Zotlabs/Lib/ThreadItem.php:827 +#: ../../addon/hsse/hsse.php:201 ../../include/conversation.php:1453 +#: ../../Zotlabs/Lib/ThreadItem.php:829 msgid "Italic" msgstr "" -#: ../../addon/hsse/hsse.php:202 ../../include/conversation.php:1451 -#: ../../Zotlabs/Lib/ThreadItem.php:828 +#: ../../addon/hsse/hsse.php:202 ../../include/conversation.php:1454 +#: ../../Zotlabs/Lib/ThreadItem.php:830 msgid "Underline" msgstr "" -#: ../../addon/hsse/hsse.php:203 ../../include/conversation.php:1452 -#: ../../Zotlabs/Lib/ThreadItem.php:829 +#: ../../addon/hsse/hsse.php:203 ../../include/conversation.php:1455 +#: ../../Zotlabs/Lib/ThreadItem.php:831 msgid "Quote" msgstr "" -#: ../../addon/hsse/hsse.php:204 ../../include/conversation.php:1453 -#: ../../Zotlabs/Lib/ThreadItem.php:830 +#: ../../addon/hsse/hsse.php:204 ../../include/conversation.php:1456 +#: ../../Zotlabs/Lib/ThreadItem.php:832 msgid "Code" msgstr "" -#: ../../addon/hsse/hsse.php:205 ../../include/conversation.php:1454 -#: ../../Zotlabs/Lib/ThreadItem.php:832 +#: ../../addon/hsse/hsse.php:205 ../../include/conversation.php:1457 +#: ../../Zotlabs/Lib/ThreadItem.php:834 msgid "Attach/Upload file" msgstr "" -#: ../../addon/hsse/hsse.php:208 ../../include/conversation.php:1457 +#: ../../addon/hsse/hsse.php:208 ../../include/conversation.php:1460 #: ../../Zotlabs/Module/Wiki.php:400 msgid "Embed an image from your albums" msgstr "" #: ../../addon/hsse/hsse.php:209 ../../addon/hsse/hsse.php:258 -#: ../../include/conversation.php:1458 ../../include/conversation.php:1511 -#: ../../Zotlabs/Module/Article_edit.php:130 +#: ../../include/conversation.php:1461 ../../include/conversation.php:1516 +#: ../../Zotlabs/Module/Article_edit.php:131 #: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88 -#: ../../Zotlabs/Module/Card_edit.php:131 ../../Zotlabs/Module/Oauth.php:112 +#: ../../Zotlabs/Module/Card_edit.php:132 ../../Zotlabs/Module/Oauth.php:112 #: ../../Zotlabs/Module/Oauth.php:138 ../../Zotlabs/Module/Editwebpage.php:169 #: ../../Zotlabs/Module/Cdav.php:1058 ../../Zotlabs/Module/Cdav.php:1390 #: ../../Zotlabs/Module/Tagrm.php:15 ../../Zotlabs/Module/Tagrm.php:138 -#: ../../Zotlabs/Module/Editpost.php:110 +#: ../../Zotlabs/Module/Editpost.php:111 #: ../../Zotlabs/Module/Admin/Addons.php:427 #: ../../Zotlabs/Module/Profile_photo.php:507 #: ../../Zotlabs/Module/Editblock.php:141 ../../Zotlabs/Module/Filer.php:56 @@ -1694,63 +1708,63 @@ msgstr "" #: ../../Zotlabs/Module/Cover_photo.php:428 #: ../../Zotlabs/Module/Profiles.php:803 ../../Zotlabs/Module/Oauth2.php:117 #: ../../Zotlabs/Module/Oauth2.php:145 ../../Zotlabs/Module/Wiki.php:368 -#: ../../Zotlabs/Module/Wiki.php:401 ../../Zotlabs/Module/Connedit.php:933 -#: ../../Zotlabs/Storage/Browser.php:376 +#: ../../Zotlabs/Module/Wiki.php:401 ../../Zotlabs/Module/Connedit.php:934 +#: ../../Zotlabs/Storage/Browser.php:383 msgid "Cancel" msgstr "" #: ../../addon/hsse/hsse.php:210 ../../addon/hsse/hsse.php:257 -#: ../../include/conversation.php:1459 ../../include/conversation.php:1510 +#: ../../include/conversation.php:1462 ../../include/conversation.php:1515 #: ../../Zotlabs/Module/Profile_photo.php:508 #: ../../Zotlabs/Module/Cover_photo.php:429 ../../Zotlabs/Module/Wiki.php:402 msgid "OK" msgstr "" -#: ../../addon/hsse/hsse.php:212 ../../include/conversation.php:1461 +#: ../../addon/hsse/hsse.php:212 ../../include/conversation.php:1464 msgid "Toggle voting" msgstr "" -#: ../../addon/hsse/hsse.php:215 ../../include/conversation.php:1468 +#: ../../addon/hsse/hsse.php:215 ../../include/conversation.php:1471 msgid "Disable comments" msgstr "" -#: ../../addon/hsse/hsse.php:216 ../../include/conversation.php:1469 +#: ../../addon/hsse/hsse.php:216 ../../include/conversation.php:1472 msgid "Toggle comments" msgstr "" -#: ../../addon/hsse/hsse.php:221 ../../include/conversation.php:1474 -#: ../../Zotlabs/Module/Article_edit.php:116 -#: ../../Zotlabs/Module/Card_edit.php:117 +#: ../../addon/hsse/hsse.php:221 ../../include/conversation.php:1478 +#: ../../Zotlabs/Module/Article_edit.php:117 +#: ../../Zotlabs/Module/Card_edit.php:118 #: ../../Zotlabs/Module/Editblock.php:129 ../../Zotlabs/Module/Photos.php:674 #: ../../Zotlabs/Module/Photos.php:1044 msgid "Title (optional)" msgstr "" -#: ../../addon/hsse/hsse.php:224 ../../include/conversation.php:1477 +#: ../../addon/hsse/hsse.php:224 ../../include/conversation.php:1482 msgid "Categories (optional, comma-separated list)" msgstr "" -#: ../../addon/hsse/hsse.php:225 ../../include/conversation.php:1478 +#: ../../addon/hsse/hsse.php:225 ../../include/conversation.php:1483 #: ../../Zotlabs/Module/Events.php:487 msgid "Permission settings" msgstr "" -#: ../../addon/hsse/hsse.php:247 ../../include/conversation.php:1500 +#: ../../addon/hsse/hsse.php:247 ../../include/conversation.php:1505 msgid "Other networks and post services" msgstr "" -#: ../../addon/hsse/hsse.php:250 ../../addon/mail/Mod_Mail.php:170 -#: ../../addon/mail/Mod_Mail.php:313 ../../include/conversation.php:1503 +#: ../../addon/hsse/hsse.php:250 ../../addon/mail/Mod_Mail.php:171 +#: ../../addon/mail/Mod_Mail.php:314 ../../include/conversation.php:1508 msgid "Set expiration date" msgstr "" -#: ../../addon/hsse/hsse.php:253 ../../include/conversation.php:1506 +#: ../../addon/hsse/hsse.php:253 ../../include/conversation.php:1511 msgid "Set publish date" msgstr "" -#: ../../addon/hsse/hsse.php:255 ../../addon/mail/Mod_Mail.php:172 -#: ../../addon/mail/Mod_Mail.php:315 ../../include/conversation.php:1508 -#: ../../Zotlabs/Module/Chat.php:219 ../../Zotlabs/Lib/ThreadItem.php:839 +#: ../../addon/hsse/hsse.php:255 ../../addon/mail/Mod_Mail.php:173 +#: ../../addon/mail/Mod_Mail.php:316 ../../include/conversation.php:1513 +#: ../../Zotlabs/Module/Chat.php:219 ../../Zotlabs/Lib/ThreadItem.php:841 msgid "Encrypt text" msgstr "" @@ -1809,7 +1823,7 @@ msgstr "" #: ../../addon/openstreetmap/openstreetmap.php:171 #: ../../addon/rendezvous/rendezvous.php:82 ../../addon/twitter/twitter.php:494 -#: ../../addon/msgfooter/msgfooter.php:54 ../../addon/diaspora/diaspora.php:93 +#: ../../addon/msgfooter/msgfooter.php:54 ../../addon/diaspora/diaspora.php:97 #: ../../addon/piwik/piwik.php:116 ../../addon/logrot/logrot.php:54 #: ../../addon/xmpp/xmpp.php:54 ../../Zotlabs/Module/Settings/Channel.php:267 #: ../../Zotlabs/Module/Defperms.php:112 @@ -1864,36 +1878,36 @@ msgstr "" msgid "Enter some text" msgstr "" -#: ../../addon/pubcrawl/as.php:1187 ../../include/cdav.php:158 +#: ../../addon/pubcrawl/as.php:1183 ../../include/cdav.php:158 #: ../../include/cdav.php:159 ../../include/cdav.php:167 -#: ../../include/conversation.php:1211 ../../Zotlabs/Widget/Album.php:84 +#: ../../include/conversation.php:1214 ../../Zotlabs/Widget/Album.php:84 #: ../../Zotlabs/Widget/Pinned.php:270 ../../Zotlabs/Widget/Portfolio.php:95 -#: ../../Zotlabs/Module/Embedphotos.php:176 ../../Zotlabs/Module/Photos.php:793 -#: ../../Zotlabs/Module/Photos.php:1255 ../../Zotlabs/Lib/Activity.php:1508 +#: ../../Zotlabs/Module/Embedphotos.php:177 ../../Zotlabs/Module/Photos.php:793 +#: ../../Zotlabs/Module/Photos.php:1255 ../../Zotlabs/Lib/Activity.php:1529 #: ../../Zotlabs/Lib/Apps.php:1112 ../../Zotlabs/Lib/Apps.php:1196 msgid "Unknown" msgstr "" -#: ../../addon/pubcrawl/as.php:1483 ../../addon/pubcrawl/as.php:1895 -#: ../../addon/pubcrawl/as.php:2103 ../../include/network.php:1736 -#: ../../Zotlabs/Lib/Activity.php:2821 ../../Zotlabs/Lib/Activity.php:3015 +#: ../../addon/pubcrawl/as.php:1475 ../../addon/pubcrawl/as.php:1887 +#: ../../addon/pubcrawl/as.php:2095 ../../include/network.php:1763 +#: ../../Zotlabs/Lib/Activity.php:3079 ../../Zotlabs/Lib/Activity.php:3271 msgid "ActivityPub" msgstr "" -#: ../../addon/pubcrawl/as.php:2057 ../../addon/diaspora/Receiver.php:1597 -#: ../../Zotlabs/Module/Like.php:433 ../../Zotlabs/Module/Subthread.php:112 +#: ../../addon/pubcrawl/as.php:2049 ../../addon/diaspora/Receiver.php:1641 +#: ../../Zotlabs/Module/Like.php:439 ../../Zotlabs/Module/Subthread.php:112 msgid "status" msgstr "" -#: ../../addon/pubcrawl/as.php:2094 ../../addon/diaspora/Receiver.php:1537 -#: ../../include/conversation.php:174 ../../Zotlabs/Module/Like.php:469 -#: ../../Zotlabs/Lib/Activity.php:3006 +#: ../../addon/pubcrawl/as.php:2086 ../../addon/diaspora/Receiver.php:1587 +#: ../../include/conversation.php:174 ../../Zotlabs/Module/Like.php:471 +#: ../../Zotlabs/Lib/Activity.php:3262 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "" -#: ../../addon/pubcrawl/as.php:2096 ../../include/conversation.php:177 -#: ../../Zotlabs/Module/Like.php:471 ../../Zotlabs/Lib/Activity.php:3008 +#: ../../addon/pubcrawl/as.php:2088 ../../include/conversation.php:177 +#: ../../Zotlabs/Module/Like.php:473 ../../Zotlabs/Lib/Activity.php:3264 #, php-format msgid "%1$s doesn't like %2$s's %3$s" msgstr "" @@ -2188,9 +2202,9 @@ msgstr "" #: ../../Zotlabs/Module/Cdav.php:1372 ../../Zotlabs/Module/Sharedwithme.php:106 #: ../../Zotlabs/Module/Admin/Channels.php:159 #: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:146 -#: ../../Zotlabs/Module/Wiki.php:218 ../../Zotlabs/Module/Connedit.php:915 -#: ../../Zotlabs/Lib/NativeWikiPage.php:564 -#: ../../Zotlabs/Storage/Browser.php:370 +#: ../../Zotlabs/Module/Wiki.php:218 ../../Zotlabs/Module/Connedit.php:916 +#: ../../Zotlabs/Lib/NativeWikiPage.php:563 +#: ../../Zotlabs/Storage/Browser.php:377 msgid "Name" msgstr "" @@ -2304,102 +2318,102 @@ msgstr "" msgid "Startpage" msgstr "" -#: ../../addon/mail/Mod_Mail.php:39 +#: ../../addon/mail/Mod_Mail.php:40 msgid "Messages" msgstr "" -#: ../../addon/mail/Mod_Mail.php:52 +#: ../../addon/mail/Mod_Mail.php:53 msgid "message" msgstr "" -#: ../../addon/mail/Mod_Mail.php:92 +#: ../../addon/mail/Mod_Mail.php:93 msgid "Message recalled." msgstr "" -#: ../../addon/mail/Mod_Mail.php:105 +#: ../../addon/mail/Mod_Mail.php:106 msgid "Conversation removed." msgstr "" -#: ../../addon/mail/Mod_Mail.php:120 ../../addon/mail/Mod_Mail.php:241 +#: ../../addon/mail/Mod_Mail.php:121 ../../addon/mail/Mod_Mail.php:242 msgid "Expires YYYY-MM-DD HH:MM" msgstr "" -#: ../../addon/mail/Mod_Mail.php:148 +#: ../../addon/mail/Mod_Mail.php:149 msgid "Requested channel is not in this network" msgstr "" -#: ../../addon/mail/Mod_Mail.php:156 +#: ../../addon/mail/Mod_Mail.php:157 msgid "Send Private Message" msgstr "" -#: ../../addon/mail/Mod_Mail.php:157 ../../addon/mail/Mod_Mail.php:300 +#: ../../addon/mail/Mod_Mail.php:158 ../../addon/mail/Mod_Mail.php:301 msgid "To:" msgstr "" -#: ../../addon/mail/Mod_Mail.php:160 ../../addon/mail/Mod_Mail.php:302 +#: ../../addon/mail/Mod_Mail.php:161 ../../addon/mail/Mod_Mail.php:303 msgid "Subject:" msgstr "" -#: ../../addon/mail/Mod_Mail.php:163 ../../Zotlabs/Module/Invite.php:157 +#: ../../addon/mail/Mod_Mail.php:164 ../../Zotlabs/Module/Invite.php:157 msgid "Your message:" msgstr "" -#: ../../addon/mail/Mod_Mail.php:165 ../../addon/mail/Mod_Mail.php:308 +#: ../../addon/mail/Mod_Mail.php:166 ../../addon/mail/Mod_Mail.php:309 msgid "Attach file" msgstr "" -#: ../../addon/mail/Mod_Mail.php:167 +#: ../../addon/mail/Mod_Mail.php:168 msgid "Send" msgstr "" -#: ../../addon/mail/Mod_Mail.php:271 +#: ../../addon/mail/Mod_Mail.php:272 msgid "Delete message" msgstr "" -#: ../../addon/mail/Mod_Mail.php:272 +#: ../../addon/mail/Mod_Mail.php:273 msgid "Delivery report" msgstr "" -#: ../../addon/mail/Mod_Mail.php:273 +#: ../../addon/mail/Mod_Mail.php:274 msgid "Recall message" msgstr "" -#: ../../addon/mail/Mod_Mail.php:275 +#: ../../addon/mail/Mod_Mail.php:276 msgid "Message has been recalled." msgstr "" -#: ../../addon/mail/Mod_Mail.php:293 +#: ../../addon/mail/Mod_Mail.php:294 msgid "Delete Conversation" msgstr "" -#: ../../addon/mail/Mod_Mail.php:295 +#: ../../addon/mail/Mod_Mail.php:296 msgid "" "No secure communications available. You may be able to " "respond from the sender's profile page." msgstr "" -#: ../../addon/mail/Mod_Mail.php:299 +#: ../../addon/mail/Mod_Mail.php:300 msgid "Send Reply" msgstr "" -#: ../../addon/mail/Mod_Mail.php:304 +#: ../../addon/mail/Mod_Mail.php:305 #, php-format msgid "Your message for %s (%s):" msgstr "" -#: ../../addon/mail/Mod_Mail.php:384 +#: ../../addon/mail/Mod_Mail.php:385 msgid "Unable to lookup recipient." msgstr "" -#: ../../addon/mail/Mod_Mail.php:391 +#: ../../addon/mail/Mod_Mail.php:392 msgid "Unable to communicate with requested channel." msgstr "" -#: ../../addon/mail/Mod_Mail.php:398 +#: ../../addon/mail/Mod_Mail.php:399 msgid "Cannot verify requested channel." msgstr "" -#: ../../addon/mail/Mod_Mail.php:416 +#: ../../addon/mail/Mod_Mail.php:417 msgid "Selected channel has private message restrictions. Send failed." msgstr "" @@ -3019,20 +3033,20 @@ msgstr "" msgid "This will import all your Redmatrix cloud files to this channel." msgstr "" -#: ../../addon/diaspora/diaspora.php:66 +#: ../../addon/diaspora/diaspora.php:70 msgid "" "Please install the statistics addon to be able to configure a diaspora relay" msgstr "" -#: ../../addon/diaspora/diaspora.php:76 +#: ../../addon/diaspora/diaspora.php:80 msgid "Diaspora Relay Handle" msgstr "" -#: ../../addon/diaspora/diaspora.php:76 +#: ../../addon/diaspora/diaspora.php:80 msgid "Address of a diaspora relay. Example: relay@diasporarelay.tld" msgstr "" -#: ../../addon/diaspora/diaspora.php:96 +#: ../../addon/diaspora/diaspora.php:100 msgid "Diaspora relay could not be imported" msgstr "" @@ -3050,7 +3064,7 @@ msgid "Unable to create a unique channel address. Import failed." msgstr "" #: ../../addon/diaspora/import_diaspora.php:142 -#: ../../Zotlabs/Module/Import.php:593 +#: ../../Zotlabs/Module/Import.php:594 msgid "Import completed." msgstr "" @@ -3069,42 +3083,42 @@ msgstr "" msgid "Diaspora Protocol App" msgstr "" -#: ../../addon/diaspora/Mod_Diaspora.php:75 -msgid "Allow any Diaspora member to comment on your public posts" +#: ../../addon/diaspora/Mod_Diaspora.php:77 +msgid "Allow any Diaspora member to comment or like your public posts" msgstr "" -#: ../../addon/diaspora/Mod_Diaspora.php:79 +#: ../../addon/diaspora/Mod_Diaspora.php:81 msgid "Prevent your hashtags from being redirected to other sites" msgstr "" -#: ../../addon/diaspora/Mod_Diaspora.php:83 +#: ../../addon/diaspora/Mod_Diaspora.php:85 msgid "Sign and forward posts and comments with no existing Diaspora signature" msgstr "" -#: ../../addon/diaspora/Mod_Diaspora.php:88 +#: ../../addon/diaspora/Mod_Diaspora.php:90 msgid "Followed hashtags (comma separated, do not include the #)" msgstr "" -#: ../../addon/diaspora/Mod_Diaspora.php:97 +#: ../../addon/diaspora/Mod_Diaspora.php:99 msgid "Diaspora Protocol" msgstr "" -#: ../../addon/diaspora/Receiver.php:1541 +#: ../../addon/diaspora/Receiver.php:1591 #, php-format msgid "%1$s dislikes %2$s's %3$s" msgstr "" -#: ../../addon/diaspora/Receiver.php:2184 ../../Zotlabs/Module/Like.php:479 +#: ../../addon/diaspora/Receiver.php:2218 ../../Zotlabs/Module/Like.php:481 #, php-format msgid "%1$s is attending %2$s's %3$s" msgstr "" -#: ../../addon/diaspora/Receiver.php:2186 ../../Zotlabs/Module/Like.php:481 +#: ../../addon/diaspora/Receiver.php:2220 ../../Zotlabs/Module/Like.php:483 #, php-format msgid "%1$s is not attending %2$s's %3$s" msgstr "" -#: ../../addon/diaspora/Receiver.php:2188 ../../Zotlabs/Module/Like.php:483 +#: ../../addon/diaspora/Receiver.php:2222 ../../Zotlabs/Module/Like.php:485 #, php-format msgid "%1$s may attend %2$s's %3$s" msgstr "" @@ -3193,7 +3207,7 @@ msgstr "" #: ../../addon/workflow/workflow.php:2617 #: ../../addon/workflow/workflow.php:2678 ../../Zotlabs/Module/Cdav.php:1374 -#: ../../Zotlabs/Module/Connedit.php:917 +#: ../../Zotlabs/Module/Connedit.php:918 msgid "Title" msgstr "" @@ -3324,8 +3338,8 @@ msgctxt "opensearch" msgid "$Projectname" msgstr "" -#: ../../addon/opensearch/opensearch.php:42 ../../Zotlabs/Module/Home.php:72 -#: ../../Zotlabs/Module/Home.php:80 ../../Zotlabs/Lib/Enotify.php:66 +#: ../../addon/opensearch/opensearch.php:42 ../../Zotlabs/Module/Home.php:87 +#: ../../Zotlabs/Module/Home.php:95 ../../Zotlabs/Lib/Enotify.php:66 msgid "$Projectname" msgstr "" @@ -3415,7 +3429,7 @@ msgstr "" #: ../../include/acl_selectors.php:153 ../../Zotlabs/Module/Chat.php:241 #: ../../Zotlabs/Module/Filestorage.php:195 ../../Zotlabs/Module/Photos.php:678 #: ../../Zotlabs/Module/Photos.php:1047 ../../Zotlabs/Module/Thing.php:321 -#: ../../Zotlabs/Module/Thing.php:374 ../../Zotlabs/Module/Connedit.php:682 +#: ../../Zotlabs/Module/Thing.php:374 ../../Zotlabs/Module/Connedit.php:683 msgid "Permissions" msgstr "" @@ -3425,12 +3439,12 @@ msgid "Set/edit permissions" msgstr "" #: ../../addon/flashcards/Mod_Flashcards.php:284 -#: ../../addon/flashcards/Mod_Flashcards.php:285 ../../include/items.php:3902 +#: ../../addon/flashcards/Mod_Flashcards.php:285 ../../include/items.php:3924 #: ../../Zotlabs/Module/Filestorage.php:29 #: ../../Zotlabs/Module/Admin/Themes.php:72 #: ../../Zotlabs/Module/Admin/Addons.php:260 #: ../../Zotlabs/Module/Viewsrc.php:25 ../../Zotlabs/Module/Display.php:42 -#: ../../Zotlabs/Module/Display.php:429 ../../Zotlabs/Module/Admin.php:62 +#: ../../Zotlabs/Module/Display.php:432 ../../Zotlabs/Module/Admin.php:62 #: ../../Zotlabs/Module/Thing.php:96 msgid "Item not found." msgstr "" @@ -3467,19 +3481,19 @@ msgstr "" msgid "Libertree Crosspost Connector" msgstr "" -#: ../../addon/randpost/randpost.php:97 +#: ../../addon/randpost/randpost.php:99 msgid "You're welcome." msgstr "" -#: ../../addon/randpost/randpost.php:98 +#: ../../addon/randpost/randpost.php:100 msgid "Ah shucks..." msgstr "" -#: ../../addon/randpost/randpost.php:99 +#: ../../addon/randpost/randpost.php:101 msgid "Don't mention it." msgstr "" -#: ../../addon/randpost/randpost.php:100 +#: ../../addon/randpost/randpost.php:102 msgid "<blush>" msgstr "" @@ -3818,11 +3832,11 @@ msgstr "" msgid "I won!" msgstr "" -#: ../../addon/gnusoc/gnusoc.php:451 +#: ../../addon/gnusoc/gnusoc.php:453 msgid "Follow" msgstr "" -#: ../../addon/gnusoc/gnusoc.php:454 +#: ../../addon/gnusoc/gnusoc.php:456 #, php-format msgid "%1$s is now following %2$s" msgstr "" @@ -3894,7 +3908,7 @@ msgstr "" msgid "Posted by" msgstr "" -#: ../../addon/mdpost/mdpost.php:41 ../../include/text.php:2116 +#: ../../addon/mdpost/mdpost.php:41 ../../include/text.php:2117 #: ../../Zotlabs/Widget/Wiki_pages.php:38 #: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:217 #: ../../Zotlabs/Module/Wiki.php:371 @@ -4014,502 +4028,502 @@ msgstr "" msgid "XMPP Settings" msgstr "" -#: ../../include/zot.php:775 +#: ../../include/zot.php:778 msgid "Invalid data packet" msgstr "" -#: ../../include/zot.php:802 ../../Zotlabs/Lib/Libzot.php:656 +#: ../../include/zot.php:805 ../../Zotlabs/Lib/Libzot.php:656 msgid "Unable to verify channel signature" msgstr "" -#: ../../include/zot.php:2657 ../../Zotlabs/Lib/Libsync.php:740 +#: ../../include/zot.php:2663 ../../Zotlabs/Lib/Libsync.php:737 #, php-format msgid "Unable to verify site signature for %s" msgstr "" -#: ../../include/zot.php:4372 +#: ../../include/zot.php:4378 msgid "invalid target signature" msgstr "" -#: ../../include/text.php:522 +#: ../../include/text.php:523 msgid "prev" msgstr "" -#: ../../include/text.php:524 +#: ../../include/text.php:525 msgid "first" msgstr "" -#: ../../include/text.php:553 +#: ../../include/text.php:554 msgid "last" msgstr "" -#: ../../include/text.php:556 +#: ../../include/text.php:557 msgid "next" msgstr "" -#: ../../include/text.php:574 +#: ../../include/text.php:575 msgid "older" msgstr "" -#: ../../include/text.php:576 +#: ../../include/text.php:577 msgid "newer" msgstr "" -#: ../../include/text.php:1024 +#: ../../include/text.php:1025 msgid "No connections" msgstr "" -#: ../../include/text.php:1036 ../../include/features.php:133 -#: ../../Zotlabs/Module/Connections.php:374 ../../Zotlabs/Lib/Apps.php:333 +#: ../../include/text.php:1037 ../../include/features.php:133 +#: ../../Zotlabs/Module/Connections.php:375 ../../Zotlabs/Lib/Apps.php:333 msgid "Connections" msgstr "" -#: ../../include/text.php:1044 ../../Zotlabs/Module/Viewconnections.php:80 -#: ../../Zotlabs/Module/Connections.php:288 +#: ../../include/text.php:1045 ../../Zotlabs/Module/Viewconnections.php:80 +#: ../../Zotlabs/Module/Connections.php:289 msgid "Accepts" msgstr "" -#: ../../include/text.php:1047 ../../Zotlabs/Module/Viewconnections.php:83 -#: ../../Zotlabs/Module/Connections.php:291 +#: ../../include/text.php:1048 ../../Zotlabs/Module/Viewconnections.php:83 +#: ../../Zotlabs/Module/Connections.php:292 msgid "Comments" msgstr "" -#: ../../include/text.php:1052 ../../Zotlabs/Module/Viewconnections.php:88 -#: ../../Zotlabs/Module/Connections.php:296 +#: ../../include/text.php:1053 ../../Zotlabs/Module/Viewconnections.php:88 +#: ../../Zotlabs/Module/Connections.php:297 msgid "Stream items" msgstr "" -#: ../../include/text.php:1057 ../../Zotlabs/Module/Viewconnections.php:93 -#: ../../Zotlabs/Module/Connections.php:301 +#: ../../include/text.php:1058 ../../Zotlabs/Module/Viewconnections.php:93 +#: ../../Zotlabs/Module/Connections.php:302 msgid "Wall posts" msgstr "" -#: ../../include/text.php:1061 ../../Zotlabs/Module/Viewconnections.php:97 -#: ../../Zotlabs/Module/Connections.php:305 +#: ../../include/text.php:1062 ../../Zotlabs/Module/Viewconnections.php:97 +#: ../../Zotlabs/Module/Connections.php:306 msgid "Nothing" msgstr "" -#: ../../include/text.php:1076 +#: ../../include/text.php:1077 #, php-format msgid "View all %s connections" msgstr "" -#: ../../include/text.php:1139 +#: ../../include/text.php:1140 #, php-format msgid "Network: %s" msgstr "" -#: ../../include/text.php:1150 ../../include/text.php:1162 -#: ../../include/nav.php:188 ../../include/acl_selectors.php:148 +#: ../../include/text.php:1151 ../../include/text.php:1163 +#: ../../include/nav.php:194 ../../include/acl_selectors.php:148 #: ../../Zotlabs/Widget/Sitesearch.php:31 #: ../../Zotlabs/Widget/Activity_filter.php:193 -#: ../../Zotlabs/Module/Search.php:41 ../../Zotlabs/Module/Connections.php:378 +#: ../../Zotlabs/Module/Search.php:46 ../../Zotlabs/Module/Connections.php:379 #: ../../Zotlabs/Lib/Apps.php:353 msgid "Search" msgstr "" -#: ../../include/text.php:1242 ../../include/text.php:1246 +#: ../../include/text.php:1243 ../../include/text.php:1247 msgid "poke" msgstr "" -#: ../../include/text.php:1242 ../../include/text.php:1246 +#: ../../include/text.php:1243 ../../include/text.php:1247 #: ../../include/conversation.php:267 msgid "poked" msgstr "" -#: ../../include/text.php:1247 +#: ../../include/text.php:1248 msgid "ping" msgstr "" -#: ../../include/text.php:1247 +#: ../../include/text.php:1248 msgid "pinged" msgstr "" -#: ../../include/text.php:1248 +#: ../../include/text.php:1249 msgid "prod" msgstr "" -#: ../../include/text.php:1248 +#: ../../include/text.php:1249 msgid "prodded" msgstr "" -#: ../../include/text.php:1249 +#: ../../include/text.php:1250 msgid "slap" msgstr "" -#: ../../include/text.php:1249 +#: ../../include/text.php:1250 msgid "slapped" msgstr "" -#: ../../include/text.php:1250 +#: ../../include/text.php:1251 msgid "finger" msgstr "" -#: ../../include/text.php:1250 +#: ../../include/text.php:1251 msgid "fingered" msgstr "" -#: ../../include/text.php:1251 +#: ../../include/text.php:1252 msgid "rebuff" msgstr "" -#: ../../include/text.php:1251 +#: ../../include/text.php:1252 msgid "rebuffed" msgstr "" -#: ../../include/text.php:1274 +#: ../../include/text.php:1275 msgid "happy" msgstr "" -#: ../../include/text.php:1275 +#: ../../include/text.php:1276 msgid "sad" msgstr "" -#: ../../include/text.php:1276 +#: ../../include/text.php:1277 msgid "mellow" msgstr "" -#: ../../include/text.php:1277 +#: ../../include/text.php:1278 msgid "tired" msgstr "" -#: ../../include/text.php:1278 +#: ../../include/text.php:1279 msgid "perky" msgstr "" -#: ../../include/text.php:1279 +#: ../../include/text.php:1280 msgid "angry" msgstr "" -#: ../../include/text.php:1280 +#: ../../include/text.php:1281 msgid "stupefied" msgstr "" -#: ../../include/text.php:1281 +#: ../../include/text.php:1282 msgid "puzzled" msgstr "" -#: ../../include/text.php:1282 +#: ../../include/text.php:1283 msgid "interested" msgstr "" -#: ../../include/text.php:1283 +#: ../../include/text.php:1284 msgid "bitter" msgstr "" -#: ../../include/text.php:1284 +#: ../../include/text.php:1285 msgid "cheerful" msgstr "" -#: ../../include/text.php:1285 +#: ../../include/text.php:1286 msgid "alive" msgstr "" -#: ../../include/text.php:1286 +#: ../../include/text.php:1287 msgid "annoyed" msgstr "" -#: ../../include/text.php:1287 +#: ../../include/text.php:1288 msgid "anxious" msgstr "" -#: ../../include/text.php:1288 +#: ../../include/text.php:1289 msgid "cranky" msgstr "" -#: ../../include/text.php:1289 +#: ../../include/text.php:1290 msgid "disturbed" msgstr "" -#: ../../include/text.php:1290 +#: ../../include/text.php:1291 msgid "frustrated" msgstr "" -#: ../../include/text.php:1291 +#: ../../include/text.php:1292 msgid "depressed" msgstr "" -#: ../../include/text.php:1292 +#: ../../include/text.php:1293 msgid "motivated" msgstr "" -#: ../../include/text.php:1293 +#: ../../include/text.php:1294 msgid "relaxed" msgstr "" -#: ../../include/text.php:1294 +#: ../../include/text.php:1295 msgid "surprised" msgstr "" -#: ../../include/text.php:1482 ../../include/js_strings.php:99 +#: ../../include/text.php:1483 ../../include/js_strings.php:99 msgid "Monday" msgstr "" -#: ../../include/text.php:1482 ../../include/js_strings.php:100 +#: ../../include/text.php:1483 ../../include/js_strings.php:100 msgid "Tuesday" msgstr "" -#: ../../include/text.php:1482 ../../include/js_strings.php:101 +#: ../../include/text.php:1483 ../../include/js_strings.php:101 msgid "Wednesday" msgstr "" -#: ../../include/text.php:1482 ../../include/js_strings.php:102 +#: ../../include/text.php:1483 ../../include/js_strings.php:102 msgid "Thursday" msgstr "" -#: ../../include/text.php:1482 ../../include/js_strings.php:103 +#: ../../include/text.php:1483 ../../include/js_strings.php:103 msgid "Friday" msgstr "" -#: ../../include/text.php:1482 ../../include/js_strings.php:104 +#: ../../include/text.php:1483 ../../include/js_strings.php:104 msgid "Saturday" msgstr "" -#: ../../include/text.php:1482 ../../include/js_strings.php:98 +#: ../../include/text.php:1483 ../../include/js_strings.php:98 msgid "Sunday" msgstr "" -#: ../../include/text.php:1486 ../../include/js_strings.php:74 +#: ../../include/text.php:1487 ../../include/js_strings.php:74 msgid "January" msgstr "" -#: ../../include/text.php:1486 ../../include/js_strings.php:75 +#: ../../include/text.php:1487 ../../include/js_strings.php:75 msgid "February" msgstr "" -#: ../../include/text.php:1486 ../../include/js_strings.php:76 +#: ../../include/text.php:1487 ../../include/js_strings.php:76 msgid "March" msgstr "" -#: ../../include/text.php:1486 ../../include/js_strings.php:77 +#: ../../include/text.php:1487 ../../include/js_strings.php:77 msgid "April" msgstr "" -#: ../../include/text.php:1486 +#: ../../include/text.php:1487 msgid "May" msgstr "" -#: ../../include/text.php:1486 ../../include/js_strings.php:79 +#: ../../include/text.php:1487 ../../include/js_strings.php:79 msgid "June" msgstr "" -#: ../../include/text.php:1486 ../../include/js_strings.php:80 +#: ../../include/text.php:1487 ../../include/js_strings.php:80 msgid "July" msgstr "" -#: ../../include/text.php:1486 ../../include/js_strings.php:81 +#: ../../include/text.php:1487 ../../include/js_strings.php:81 msgid "August" msgstr "" -#: ../../include/text.php:1486 ../../include/js_strings.php:82 +#: ../../include/text.php:1487 ../../include/js_strings.php:82 msgid "September" msgstr "" -#: ../../include/text.php:1486 ../../include/js_strings.php:83 +#: ../../include/text.php:1487 ../../include/js_strings.php:83 msgid "October" msgstr "" -#: ../../include/text.php:1486 ../../include/js_strings.php:84 +#: ../../include/text.php:1487 ../../include/js_strings.php:84 msgid "November" msgstr "" -#: ../../include/text.php:1486 ../../include/js_strings.php:85 +#: ../../include/text.php:1487 ../../include/js_strings.php:85 msgid "December" msgstr "" -#: ../../include/text.php:1560 +#: ../../include/text.php:1561 msgid "Unknown Attachment" msgstr "" -#: ../../include/text.php:1562 ../../Zotlabs/Module/Sharedwithme.php:108 -#: ../../Zotlabs/Storage/Browser.php:372 +#: ../../include/text.php:1563 ../../Zotlabs/Module/Sharedwithme.php:108 +#: ../../Zotlabs/Storage/Browser.php:379 msgid "Size" msgstr "" -#: ../../include/text.php:1562 ../../include/feedutils.php:873 +#: ../../include/text.php:1563 ../../include/feedutils.php:873 msgid "unknown" msgstr "" -#: ../../include/text.php:1598 +#: ../../include/text.php:1599 msgid "remove category" msgstr "" -#: ../../include/text.php:1674 +#: ../../include/text.php:1675 msgid "remove from file" msgstr "" -#: ../../include/text.php:1843 ../../include/message.php:13 +#: ../../include/text.php:1844 ../../include/message.php:13 msgid "Download binary/encrypted content" msgstr "" -#: ../../include/text.php:1914 +#: ../../include/text.php:1915 msgid "Poll has ended." msgstr "" -#: ../../include/text.php:1917 +#: ../../include/text.php:1918 #, php-format msgid "Poll ends: %s" msgstr "" -#: ../../include/text.php:1922 ../../Zotlabs/Lib/ThreadItem.php:444 +#: ../../include/text.php:1923 ../../Zotlabs/Lib/ThreadItem.php:446 msgid "Vote" msgstr "" -#: ../../include/text.php:2074 ../../Zotlabs/Module/Events.php:669 +#: ../../include/text.php:2075 ../../Zotlabs/Module/Events.php:669 msgid "Link to Source" msgstr "" -#: ../../include/text.php:2096 ../../include/language.php:424 +#: ../../include/text.php:2097 ../../include/language.php:424 msgid "default" msgstr "" -#: ../../include/text.php:2104 +#: ../../include/text.php:2105 msgid "Page layout" msgstr "" -#: ../../include/text.php:2104 +#: ../../include/text.php:2105 msgid "You can create your own with the layouts tool" msgstr "" -#: ../../include/text.php:2114 ../../Zotlabs/Widget/Wiki_pages.php:38 +#: ../../include/text.php:2115 ../../Zotlabs/Widget/Wiki_pages.php:38 #: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:217 #: ../../Zotlabs/Module/Wiki.php:371 msgid "BBcode" msgstr "" -#: ../../include/text.php:2115 +#: ../../include/text.php:2116 msgid "HTML" msgstr "" -#: ../../include/text.php:2117 ../../Zotlabs/Widget/Wiki_pages.php:38 +#: ../../include/text.php:2118 ../../Zotlabs/Widget/Wiki_pages.php:38 #: ../../Zotlabs/Widget/Wiki_pages.php:95 ../../Zotlabs/Module/Wiki.php:217 msgid "Text" msgstr "" -#: ../../include/text.php:2118 +#: ../../include/text.php:2119 msgid "Comanche Layout" msgstr "" -#: ../../include/text.php:2123 +#: ../../include/text.php:2124 msgid "PHP" msgstr "" -#: ../../include/text.php:2132 +#: ../../include/text.php:2133 msgid "Page content type" msgstr "" -#: ../../include/text.php:2255 ../../include/event.php:1259 +#: ../../include/text.php:2256 ../../include/event.php:1259 #: ../../include/conversation.php:132 -#: ../../Zotlabs/Module/Channel_calendar.php:219 -#: ../../Zotlabs/Module/Like.php:435 ../../Zotlabs/Module/Tagger.php:75 +#: ../../Zotlabs/Module/Channel_calendar.php:221 +#: ../../Zotlabs/Module/Like.php:441 ../../Zotlabs/Module/Tagger.php:75 #: ../../Zotlabs/Module/Events.php:266 msgid "event" msgstr "" -#: ../../include/text.php:2258 ../../include/conversation.php:158 -#: ../../include/bbcode.php:523 ../../include/markdown.php:204 -#: ../../Zotlabs/Module/Tagger.php:79 ../../Zotlabs/Lib/Activity.php:2971 +#: ../../include/text.php:2259 ../../include/conversation.php:158 +#: ../../include/bbcode.php:543 ../../include/markdown.php:204 +#: ../../Zotlabs/Module/Tagger.php:79 ../../Zotlabs/Lib/Activity.php:3229 msgid "post" msgstr "" -#: ../../include/text.php:2260 ../../include/conversation.php:160 +#: ../../include/text.php:2261 ../../include/conversation.php:160 #: ../../Zotlabs/Module/Tagger.php:81 msgid "comment" msgstr "" -#: ../../include/text.php:2265 +#: ../../include/text.php:2266 msgid "activity" msgstr "" -#: ../../include/text.php:2268 +#: ../../include/text.php:2269 msgid "poll" msgstr "" -#: ../../include/text.php:2369 +#: ../../include/text.php:2370 msgid "a-z, 0-9, -, and _ only" msgstr "" -#: ../../include/text.php:2695 +#: ../../include/text.php:2696 msgid "Design Tools" msgstr "" -#: ../../include/text.php:2698 ../../Zotlabs/Module/Blocks.php:154 +#: ../../include/text.php:2699 ../../Zotlabs/Module/Blocks.php:154 msgid "Blocks" msgstr "" -#: ../../include/text.php:2699 ../../Zotlabs/Module/Menu.php:171 +#: ../../include/text.php:2700 ../../Zotlabs/Module/Menu.php:171 msgid "Menus" msgstr "" -#: ../../include/text.php:2700 ../../Zotlabs/Module/Layouts.php:184 +#: ../../include/text.php:2701 ../../Zotlabs/Module/Layouts.php:184 msgid "Layouts" msgstr "" -#: ../../include/text.php:2701 +#: ../../include/text.php:2702 msgid "Pages" msgstr "" -#: ../../include/text.php:2713 +#: ../../include/text.php:2714 msgid "Import" msgstr "" -#: ../../include/text.php:2714 +#: ../../include/text.php:2715 msgid "Import website..." msgstr "" -#: ../../include/text.php:2715 +#: ../../include/text.php:2716 msgid "Select folder to import" msgstr "" -#: ../../include/text.php:2716 +#: ../../include/text.php:2717 msgid "Import from a zipped folder:" msgstr "" -#: ../../include/text.php:2717 +#: ../../include/text.php:2718 msgid "Import from cloud files:" msgstr "" -#: ../../include/text.php:2718 +#: ../../include/text.php:2719 msgid "/cloud/channel/path/to/folder" msgstr "" -#: ../../include/text.php:2719 +#: ../../include/text.php:2720 msgid "Enter path to website files" msgstr "" -#: ../../include/text.php:2720 +#: ../../include/text.php:2721 msgid "Select folder" msgstr "" -#: ../../include/text.php:2721 +#: ../../include/text.php:2722 msgid "Export website..." msgstr "" -#: ../../include/text.php:2722 +#: ../../include/text.php:2723 msgid "Export to a zip file" msgstr "" -#: ../../include/text.php:2723 +#: ../../include/text.php:2724 msgid "website.zip" msgstr "" -#: ../../include/text.php:2724 +#: ../../include/text.php:2725 msgid "Enter a name for the zip file." msgstr "" -#: ../../include/text.php:2725 +#: ../../include/text.php:2726 msgid "Export to cloud files" msgstr "" -#: ../../include/text.php:2726 +#: ../../include/text.php:2727 msgid "/path/to/export/folder" msgstr "" -#: ../../include/text.php:2727 +#: ../../include/text.php:2728 msgid "Enter a path to a cloud files destination." msgstr "" -#: ../../include/text.php:2728 +#: ../../include/text.php:2729 msgid "Specify folder" msgstr "" @@ -4531,7 +4545,7 @@ msgid "Finishes:" msgstr "" #: ../../include/event.php:63 ../../include/event.php:134 -#: ../../include/channel.php:1633 ../../Zotlabs/Module/Directory.php:352 +#: ../../include/channel.php:1634 ../../Zotlabs/Module/Directory.php:354 msgid "Location:" msgstr "" @@ -4573,13 +4587,13 @@ msgstr "" #: ../../include/event.php:1422 ../../include/connections.php:734 #: ../../Zotlabs/Module/Cdav.php:1381 ../../Zotlabs/Module/Profiles.php:794 -#: ../../Zotlabs/Module/Connedit.php:924 +#: ../../Zotlabs/Module/Connedit.php:925 msgid "Mobile" msgstr "" #: ../../include/event.php:1423 ../../include/connections.php:735 #: ../../Zotlabs/Module/Cdav.php:1382 ../../Zotlabs/Module/Profiles.php:795 -#: ../../Zotlabs/Module/Connedit.php:925 +#: ../../Zotlabs/Module/Connedit.php:926 msgid "Home" msgstr "" @@ -4593,7 +4607,7 @@ msgstr "" #: ../../include/event.php:1426 ../../include/connections.php:738 #: ../../Zotlabs/Module/Cdav.php:1383 ../../Zotlabs/Module/Profiles.php:796 -#: ../../Zotlabs/Module/Connedit.php:926 +#: ../../Zotlabs/Module/Connedit.php:927 msgid "Work" msgstr "" @@ -4610,7 +4624,7 @@ msgstr "" #: ../../include/selectors.php:115 ../../include/selectors.php:151 #: ../../include/connections.php:741 ../../include/connections.php:748 #: ../../Zotlabs/Module/Cdav.php:1384 ../../Zotlabs/Module/Profiles.php:797 -#: ../../Zotlabs/Module/Connedit.php:927 +#: ../../Zotlabs/Module/Connedit.php:928 #: ../../Zotlabs/Access/PermissionRoles.php:310 msgid "Other" msgstr "" @@ -4627,8 +4641,8 @@ msgstr "" msgid "On" msgstr "" -#: ../../include/features.php:82 ../../include/nav.php:463 -#: ../../include/nav.php:466 ../../Zotlabs/Lib/Apps.php:346 +#: ../../include/features.php:82 ../../include/nav.php:464 +#: ../../include/nav.php:467 ../../Zotlabs/Lib/Apps.php:346 msgid "Calendar" msgstr "" @@ -4819,7 +4833,7 @@ msgstr "" msgid "Change channels directly from within the navigation dropdown menu" msgstr "" -#: ../../include/features.php:291 ../../Zotlabs/Module/Connections.php:332 +#: ../../include/features.php:291 ../../Zotlabs/Module/Connections.php:333 msgid "Network" msgstr "" @@ -4891,7 +4905,7 @@ msgstr "" msgid "Ability to display only posts that you've interacted on" msgstr "" -#: ../../include/features.php:369 ../../include/nav.php:444 +#: ../../include/features.php:369 ../../include/nav.php:445 #: ../../Zotlabs/Module/Fbrowser.php:29 ../../Zotlabs/Lib/Apps.php:345 msgid "Photos" msgstr "" @@ -4932,7 +4946,7 @@ msgstr "" msgid "Ability to create multiple profiles" msgstr "" -#: ../../include/security.php:609 +#: ../../include/security.php:608 msgid "" "The form security token was not correct. This probably happened because the " "form has been opened for too long (>3 hours) before submitting it." @@ -4943,11 +4957,11 @@ msgid "Delete this item?" msgstr "" #: ../../include/js_strings.php:6 ../../Zotlabs/Module/Photos.php:1097 -#: ../../Zotlabs/Module/Photos.php:1215 ../../Zotlabs/Lib/ThreadItem.php:824 +#: ../../Zotlabs/Module/Photos.php:1215 ../../Zotlabs/Lib/ThreadItem.php:826 msgid "Comment" msgstr "" -#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:533 +#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:535 #, php-format msgid "%s show all" msgstr "" @@ -5003,8 +5017,8 @@ msgstr "" msgid "Rate This Channel (this is public)" msgstr "" -#: ../../include/js_strings.php:20 ../../Zotlabs/Module/Rate.php:155 -#: ../../Zotlabs/Module/Connedit.php:879 +#: ../../include/js_strings.php:20 ../../Zotlabs/Module/Rate.php:157 +#: ../../Zotlabs/Module/Connedit.php:880 msgid "Rating" msgstr "" @@ -5020,7 +5034,7 @@ msgstr "" msgid "Unsaved changes. Are you sure you wish to leave this page?" msgstr "" -#: ../../include/js_strings.php:25 ../../Zotlabs/Module/Pubsites.php:52 +#: ../../include/js_strings.php:25 ../../Zotlabs/Module/Pubsites.php:53 #: ../../Zotlabs/Module/Cdav.php:1015 ../../Zotlabs/Module/Events.php:483 #: ../../Zotlabs/Module/Profiles.php:511 ../../Zotlabs/Module/Profiles.php:736 #: ../../Zotlabs/Module/Locs.php:128 @@ -5077,12 +5091,12 @@ msgstr "" msgid "Pinned" msgstr "" -#: ../../include/js_strings.php:38 ../../Zotlabs/Lib/ThreadItem.php:471 +#: ../../include/js_strings.php:38 ../../Zotlabs/Lib/ThreadItem.php:473 msgid "Pin to the top" msgstr "" #: ../../include/js_strings.php:39 ../../Zotlabs/Widget/Pinned.php:157 -#: ../../Zotlabs/Lib/ThreadItem.php:471 +#: ../../Zotlabs/Lib/ThreadItem.php:473 msgid "Unpin from the top" msgstr "" @@ -5285,7 +5299,7 @@ msgid "Help:" msgstr "" #: ../../include/help.php:117 ../../include/help.php:125 -#: ../../include/nav.php:174 ../../include/nav.php:320 +#: ../../include/nav.php:180 ../../include/nav.php:321 #: ../../Zotlabs/Module/Layouts.php:186 ../../Zotlabs/Lib/Apps.php:348 msgid "Help" msgstr "" @@ -5297,8 +5311,8 @@ msgstr "" #: ../../include/help.php:132 ../../Zotlabs/Module/Display.php:136 #: ../../Zotlabs/Module/Display.php:153 ../../Zotlabs/Module/Display.php:173 #: ../../Zotlabs/Module/Display.php:179 ../../Zotlabs/Module/Page.php:136 -#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Lib/NativeWikiPage.php:521 -#: ../../Zotlabs/Web/Router.php:185 +#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Lib/NativeWikiPage.php:520 +#: ../../Zotlabs/Web/Router.php:186 msgid "Page not found." msgstr "" @@ -5330,7 +5344,7 @@ msgctxt "photo_upload" msgid "%1$s posted %2$s to %3$s" msgstr "" -#: ../../include/photos.php:666 ../../include/nav.php:447 +#: ../../include/photos.php:666 ../../include/nav.php:448 msgid "Photo Albums" msgstr "" @@ -5343,43 +5357,43 @@ msgstr "" msgid "Upload New Photos" msgstr "" -#: ../../include/network.php:1731 ../../include/network.php:1732 +#: ../../include/network.php:1758 ../../include/network.php:1759 msgid "Friendica" msgstr "" -#: ../../include/network.php:1733 +#: ../../include/network.php:1760 msgid "OStatus" msgstr "" -#: ../../include/network.php:1734 +#: ../../include/network.php:1761 msgid "GNU-Social" msgstr "" -#: ../../include/network.php:1735 +#: ../../include/network.php:1762 msgid "RSS/Atom" msgstr "" -#: ../../include/network.php:1738 +#: ../../include/network.php:1765 msgid "Diaspora" msgstr "" -#: ../../include/network.php:1739 +#: ../../include/network.php:1766 msgid "Facebook" msgstr "" -#: ../../include/network.php:1740 +#: ../../include/network.php:1767 msgid "Zot" msgstr "" -#: ../../include/network.php:1741 +#: ../../include/network.php:1768 msgid "LinkedIn" msgstr "" -#: ../../include/network.php:1742 +#: ../../include/network.php:1769 msgid "XMPP/IM" msgstr "" -#: ../../include/network.php:1743 +#: ../../include/network.php:1770 msgid "MySpace" msgstr "" @@ -5434,13 +5448,13 @@ msgstr "" msgid "Examples: Robert Morgenstein, Fishing" msgstr "" -#: ../../include/contact_widgets.php:23 ../../Zotlabs/Module/Directory.php:431 -#: ../../Zotlabs/Module/Directory.php:436 -#: ../../Zotlabs/Module/Connections.php:381 +#: ../../include/contact_widgets.php:23 ../../Zotlabs/Module/Directory.php:433 +#: ../../Zotlabs/Module/Directory.php:438 +#: ../../Zotlabs/Module/Connections.php:382 msgid "Find" msgstr "" -#: ../../include/contact_widgets.php:24 ../../Zotlabs/Module/Directory.php:435 +#: ../../include/contact_widgets.php:24 ../../Zotlabs/Module/Directory.php:437 #: ../../Zotlabs/Module/Suggest.php:79 msgid "Channel Suggestions" msgstr "" @@ -5457,28 +5471,28 @@ msgstr "" msgid "Advanced example: name=fred and country=iceland" msgstr "" -#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:111 -#: ../../include/contact_widgets.php:155 ../../include/contact_widgets.php:200 -#: ../../include/contact_widgets.php:235 +#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:115 +#: ../../include/contact_widgets.php:159 ../../include/contact_widgets.php:204 +#: ../../include/contact_widgets.php:239 #: ../../Zotlabs/Widget/Appcategories.php:46 ../../Zotlabs/Widget/Filer.php:31 msgid "Everything" msgstr "" -#: ../../include/contact_widgets.php:108 ../../include/contact_widgets.php:152 -#: ../../include/contact_widgets.php:197 ../../include/contact_widgets.php:232 -#: ../../include/taxonomy.php:418 ../../include/taxonomy.php:500 -#: ../../include/taxonomy.php:520 ../../include/taxonomy.php:541 +#: ../../include/contact_widgets.php:112 ../../include/contact_widgets.php:156 +#: ../../include/contact_widgets.php:201 ../../include/contact_widgets.php:236 +#: ../../include/taxonomy.php:420 ../../include/taxonomy.php:502 +#: ../../include/taxonomy.php:522 ../../include/taxonomy.php:543 #: ../../Zotlabs/Widget/Appcategories.php:43 ../../Zotlabs/Module/Cdav.php:1070 -#: ../../Zotlabs/Storage/Browser.php:293 ../../Zotlabs/Storage/Browser.php:381 -#: ../../Zotlabs/Storage/Browser.php:396 +#: ../../Zotlabs/Storage/Browser.php:293 ../../Zotlabs/Storage/Browser.php:388 +#: ../../Zotlabs/Storage/Browser.php:403 msgid "Categories" msgstr "" -#: ../../include/contact_widgets.php:265 +#: ../../include/contact_widgets.php:269 msgid "Common Connections" msgstr "" -#: ../../include/contact_widgets.php:269 +#: ../../include/contact_widgets.php:273 #, php-format msgid "View all %d common connections" msgstr "" @@ -5500,24 +5514,24 @@ msgstr "" msgid "Cloned channel not found. Import failed." msgstr "" -#: ../../include/nav.php:92 +#: ../../include/nav.php:95 msgid "Remote authentication" msgstr "" -#: ../../include/nav.php:92 +#: ../../include/nav.php:95 msgid "Click to authenticate to your home hub" msgstr "" -#: ../../include/nav.php:98 ../../Zotlabs/Module/Manage.php:170 +#: ../../include/nav.php:101 ../../Zotlabs/Module/Manage.php:170 #: ../../Zotlabs/Lib/Apps.php:337 msgid "Channel Manager" msgstr "" -#: ../../include/nav.php:98 +#: ../../include/nav.php:101 msgid "Manage your channels" msgstr "" -#: ../../include/nav.php:101 ../../include/group.php:321 +#: ../../include/nav.php:104 ../../include/group.php:321 #: ../../include/acl_selectors.php:86 #: ../../Zotlabs/Widget/Activity_filter.php:82 #: ../../Zotlabs/Module/Group.php:142 ../../Zotlabs/Module/Group.php:154 @@ -5525,187 +5539,187 @@ msgstr "" msgid "Privacy Groups" msgstr "" -#: ../../include/nav.php:101 +#: ../../include/nav.php:104 msgid "Manage your privacy groups" msgstr "" -#: ../../include/nav.php:103 ../../Zotlabs/Widget/Settings_menu.php:61 +#: ../../include/nav.php:106 ../../Zotlabs/Widget/Settings_menu.php:61 #: ../../Zotlabs/Widget/Newmember.php:53 #: ../../Zotlabs/Module/Admin/Themes.php:125 #: ../../Zotlabs/Module/Admin/Addons.php:345 ../../Zotlabs/Lib/Apps.php:339 msgid "Settings" msgstr "" -#: ../../include/nav.php:103 +#: ../../include/nav.php:106 msgid "Account/Channel Settings" msgstr "" -#: ../../include/nav.php:109 ../../include/nav.php:138 -#: ../../include/nav.php:157 ../../boot.php:1698 +#: ../../include/nav.php:112 ../../include/nav.php:142 +#: ../../include/nav.php:163 ../../boot.php:1710 msgid "Logout" msgstr "" -#: ../../include/nav.php:109 ../../include/nav.php:138 +#: ../../include/nav.php:112 ../../include/nav.php:142 msgid "End this session" msgstr "" -#: ../../include/nav.php:112 +#: ../../include/nav.php:115 msgid "Your profile page" msgstr "" -#: ../../include/nav.php:115 ../../include/channel.php:1538 +#: ../../include/nav.php:118 ../../include/channel.php:1539 #: ../../Zotlabs/Module/Profiles.php:832 msgid "Edit Profiles" msgstr "" -#: ../../include/nav.php:115 +#: ../../include/nav.php:118 msgid "Manage/Edit profiles" msgstr "" -#: ../../include/nav.php:117 ../../Zotlabs/Widget/Newmember.php:35 +#: ../../include/nav.php:120 ../../Zotlabs/Widget/Newmember.php:35 msgid "Edit your profile" msgstr "" -#: ../../include/nav.php:124 ../../include/nav.php:128 -#: ../../Zotlabs/Lib/Apps.php:336 ../../boot.php:1699 +#: ../../include/nav.php:127 ../../include/nav.php:131 +#: ../../Zotlabs/Lib/Apps.php:336 ../../boot.php:1711 msgid "Login" msgstr "" -#: ../../include/nav.php:124 ../../include/nav.php:128 +#: ../../include/nav.php:127 ../../include/nav.php:131 msgid "Sign in" msgstr "" -#: ../../include/nav.php:155 +#: ../../include/nav.php:161 msgid "Take me home" msgstr "" -#: ../../include/nav.php:157 +#: ../../include/nav.php:163 msgid "Log me out of this site" msgstr "" -#: ../../include/nav.php:162 ../../Zotlabs/Module/Register.php:293 -#: ../../boot.php:1679 +#: ../../include/nav.php:168 ../../Zotlabs/Module/Register.php:293 +#: ../../boot.php:1691 msgid "Register" msgstr "" -#: ../../include/nav.php:162 +#: ../../include/nav.php:168 msgid "Create an account" msgstr "" -#: ../../include/nav.php:174 +#: ../../include/nav.php:180 msgid "Help and documentation" msgstr "" -#: ../../include/nav.php:188 +#: ../../include/nav.php:194 msgid "Search site @name, !forum, #tag, ?docs, content" msgstr "" -#: ../../include/nav.php:194 ../../Zotlabs/Widget/Admin.php:55 +#: ../../include/nav.php:200 ../../Zotlabs/Widget/Admin.php:55 msgid "Admin" msgstr "" -#: ../../include/nav.php:194 +#: ../../include/nav.php:200 msgid "Site Setup and Configuration" msgstr "" -#: ../../include/nav.php:324 ../../Zotlabs/Widget/Notifications.php:182 +#: ../../include/nav.php:325 ../../Zotlabs/Widget/Notifications.php:182 #: ../../Zotlabs/Module/New_channel.php:157 #: ../../Zotlabs/Module/New_channel.php:164 -#: ../../Zotlabs/Module/Defperms.php:257 ../../Zotlabs/Module/Connedit.php:861 +#: ../../Zotlabs/Module/Defperms.php:257 ../../Zotlabs/Module/Connedit.php:862 msgid "Loading" msgstr "" -#: ../../include/nav.php:330 +#: ../../include/nav.php:331 msgid "@name, !forum, #tag, ?doc, content" msgstr "" -#: ../../include/nav.php:331 +#: ../../include/nav.php:332 msgid "Please wait..." msgstr "" -#: ../../include/nav.php:337 +#: ../../include/nav.php:338 msgid "Add Apps" msgstr "" -#: ../../include/nav.php:338 +#: ../../include/nav.php:339 msgid "Arrange Apps" msgstr "" -#: ../../include/nav.php:339 +#: ../../include/nav.php:340 msgid "Toggle System Apps" msgstr "" -#: ../../include/nav.php:421 ../../Zotlabs/Module/Admin/Channels.php:154 +#: ../../include/nav.php:422 ../../Zotlabs/Module/Admin/Channels.php:154 msgid "Channel" msgstr "" -#: ../../include/nav.php:424 +#: ../../include/nav.php:425 msgid "Status Messages and Posts" msgstr "" -#: ../../include/nav.php:434 ../../Zotlabs/Module/Help.php:83 +#: ../../include/nav.php:435 ../../Zotlabs/Module/Help.php:83 msgid "About" msgstr "" -#: ../../include/nav.php:437 +#: ../../include/nav.php:438 msgid "Profile Details" msgstr "" -#: ../../include/nav.php:452 ../../Zotlabs/Module/Fbrowser.php:85 -#: ../../Zotlabs/Lib/Apps.php:340 ../../Zotlabs/Storage/Browser.php:344 +#: ../../include/nav.php:453 ../../Zotlabs/Module/Fbrowser.php:85 +#: ../../Zotlabs/Lib/Apps.php:340 ../../Zotlabs/Storage/Browser.php:351 msgid "Files" msgstr "" -#: ../../include/nav.php:455 +#: ../../include/nav.php:456 msgid "Files and Storage" msgstr "" -#: ../../include/nav.php:477 ../../include/nav.php:480 +#: ../../include/nav.php:478 ../../include/nav.php:481 #: ../../Zotlabs/Widget/Chatroom_list.php:16 ../../Zotlabs/Lib/Apps.php:330 msgid "Chatrooms" msgstr "" -#: ../../include/nav.php:490 ../../Zotlabs/Lib/Apps.php:329 +#: ../../include/nav.php:491 ../../Zotlabs/Lib/Apps.php:329 msgid "Bookmarks" msgstr "" -#: ../../include/nav.php:493 +#: ../../include/nav.php:494 msgid "Saved Bookmarks" msgstr "" -#: ../../include/nav.php:501 ../../Zotlabs/Module/Cards.php:207 +#: ../../include/nav.php:502 ../../Zotlabs/Module/Cards.php:207 #: ../../Zotlabs/Lib/Apps.php:326 msgid "Cards" msgstr "" -#: ../../include/nav.php:504 +#: ../../include/nav.php:505 msgid "View Cards" msgstr "" -#: ../../include/nav.php:512 ../../Zotlabs/Module/Articles.php:226 +#: ../../include/nav.php:513 ../../Zotlabs/Module/Articles.php:225 #: ../../Zotlabs/Lib/Apps.php:325 msgid "Articles" msgstr "" -#: ../../include/nav.php:515 +#: ../../include/nav.php:516 msgid "View Articles" msgstr "" -#: ../../include/nav.php:524 ../../Zotlabs/Module/Webpages.php:252 +#: ../../include/nav.php:525 ../../Zotlabs/Module/Webpages.php:252 #: ../../Zotlabs/Lib/Apps.php:341 msgid "Webpages" msgstr "" -#: ../../include/nav.php:527 +#: ../../include/nav.php:528 msgid "View Webpages" msgstr "" -#: ../../include/nav.php:536 ../../Zotlabs/Widget/Wiki_list.php:15 +#: ../../include/nav.php:537 ../../Zotlabs/Widget/Wiki_list.php:15 #: ../../Zotlabs/Module/Wiki.php:206 msgid "Wikis" msgstr "" -#: ../../include/nav.php:539 ../../Zotlabs/Lib/Apps.php:342 +#: ../../include/nav.php:540 ../../Zotlabs/Lib/Apps.php:342 msgid "Wiki" msgstr "" @@ -5742,7 +5756,7 @@ msgstr "" msgid "YYYY-MM-DD or MM-DD" msgstr "" -#: ../../include/datetime.php:238 ../../boot.php:2703 +#: ../../include/datetime.php:238 ../../boot.php:2715 msgid "never" msgstr "" @@ -5839,44 +5853,44 @@ msgstr "" msgid "Name: " msgstr "" -#: ../../include/follow.php:37 ../../Zotlabs/Lib/Connect.php:46 +#: ../../include/follow.php:39 ../../Zotlabs/Lib/Connect.php:46 #: ../../Zotlabs/Lib/Connect.php:143 msgid "Channel is blocked on this site." msgstr "" -#: ../../include/follow.php:42 ../../Zotlabs/Lib/Connect.php:51 +#: ../../include/follow.php:44 ../../Zotlabs/Lib/Connect.php:51 msgid "Channel location missing." msgstr "" -#: ../../include/follow.php:84 +#: ../../include/follow.php:86 msgid "Response from remote channel was incomplete." msgstr "" -#: ../../include/follow.php:96 +#: ../../include/follow.php:98 msgid "Premium channel - please visit:" msgstr "" -#: ../../include/follow.php:110 +#: ../../include/follow.php:112 msgid "Channel was deleted and no longer exists." msgstr "" -#: ../../include/follow.php:166 ../../Zotlabs/Lib/Connect.php:103 +#: ../../include/follow.php:168 ../../Zotlabs/Lib/Connect.php:103 msgid "Remote channel or protocol unavailable." msgstr "" -#: ../../include/follow.php:190 ../../Zotlabs/Lib/Connect.php:137 +#: ../../include/follow.php:192 ../../Zotlabs/Lib/Connect.php:137 msgid "Channel discovery failed." msgstr "" -#: ../../include/follow.php:202 ../../Zotlabs/Lib/Connect.php:155 +#: ../../include/follow.php:204 ../../Zotlabs/Lib/Connect.php:155 msgid "Protocol disabled." msgstr "" -#: ../../include/follow.php:213 ../../Zotlabs/Lib/Connect.php:167 +#: ../../include/follow.php:215 ../../Zotlabs/Lib/Connect.php:167 msgid "Cannot connect to yourself." msgstr "" -#: ../../include/conversation.php:135 ../../Zotlabs/Module/Like.php:166 +#: ../../include/conversation.php:135 ../../Zotlabs/Module/Like.php:178 msgid "channel" msgstr "" @@ -5906,7 +5920,7 @@ msgctxt "mood" msgid "%1$s is %2$s" msgstr "" -#: ../../include/conversation.php:516 ../../Zotlabs/Lib/ThreadItem.php:500 +#: ../../include/conversation.php:516 ../../Zotlabs/Lib/ThreadItem.php:502 msgid "This is an unsaved preview" msgstr "" @@ -5956,13 +5970,13 @@ msgctxt "title" msgid "Might attend" msgstr "" -#: ../../include/conversation.php:729 ../../Zotlabs/Lib/ThreadItem.php:180 +#: ../../include/conversation.php:729 ../../Zotlabs/Lib/ThreadItem.php:181 msgid "Select" msgstr "" -#: ../../include/conversation.php:730 ../../include/conversation.php:775 -#: ../../Zotlabs/Module/Article_edit.php:128 -#: ../../Zotlabs/Module/Card_edit.php:129 ../../Zotlabs/Module/Oauth.php:174 +#: ../../include/conversation.php:730 ../../include/conversation.php:777 +#: ../../Zotlabs/Module/Article_edit.php:129 +#: ../../Zotlabs/Module/Card_edit.php:130 ../../Zotlabs/Module/Oauth.php:174 #: ../../Zotlabs/Module/Editwebpage.php:167 ../../Zotlabs/Module/Cdav.php:1056 #: ../../Zotlabs/Module/Cdav.php:1389 ../../Zotlabs/Module/Webpages.php:257 #: ../../Zotlabs/Module/Admin/Accounts.php:175 @@ -5970,16 +5984,16 @@ msgstr "" #: ../../Zotlabs/Module/Admin/Profs.php:176 ../../Zotlabs/Module/Blocks.php:162 #: ../../Zotlabs/Module/Editblock.php:139 #: ../../Zotlabs/Module/Editlayout.php:138 -#: ../../Zotlabs/Module/Connections.php:328 +#: ../../Zotlabs/Module/Connections.php:329 #: ../../Zotlabs/Module/Photos.php:1179 ../../Zotlabs/Module/Profiles.php:802 #: ../../Zotlabs/Module/Oauth2.php:195 ../../Zotlabs/Module/Thing.php:269 -#: ../../Zotlabs/Module/Connedit.php:660 ../../Zotlabs/Module/Connedit.php:932 -#: ../../Zotlabs/Lib/Apps.php:558 ../../Zotlabs/Lib/ThreadItem.php:170 -#: ../../Zotlabs/Storage/Browser.php:377 +#: ../../Zotlabs/Module/Connedit.php:661 ../../Zotlabs/Module/Connedit.php:933 +#: ../../Zotlabs/Lib/Apps.php:558 ../../Zotlabs/Lib/ThreadItem.php:171 +#: ../../Zotlabs/Storage/Browser.php:384 msgid "Delete" msgstr "" -#: ../../include/conversation.php:734 ../../Zotlabs/Lib/ThreadItem.php:273 +#: ../../include/conversation.php:734 ../../Zotlabs/Lib/ThreadItem.php:274 msgid "Toggle Star Status" msgstr "" @@ -5987,245 +6001,249 @@ msgstr "" msgid "Private Message" msgstr "" -#: ../../include/conversation.php:746 ../../Zotlabs/Widget/Pinned.php:88 -#: ../../Zotlabs/Lib/ThreadItem.php:284 +#: ../../include/conversation.php:748 ../../Zotlabs/Widget/Pinned.php:88 +#: ../../Zotlabs/Lib/ThreadItem.php:285 msgid "Message signature validated" msgstr "" -#: ../../include/conversation.php:747 ../../Zotlabs/Widget/Pinned.php:89 -#: ../../Zotlabs/Lib/ThreadItem.php:285 +#: ../../include/conversation.php:749 ../../Zotlabs/Widget/Pinned.php:89 +#: ../../Zotlabs/Lib/ThreadItem.php:286 msgid "Message signature incorrect" msgstr "" -#: ../../include/conversation.php:774 +#: ../../include/conversation.php:776 #: ../../Zotlabs/Module/Admin/Accounts.php:173 -#: ../../Zotlabs/Module/Connections.php:342 +#: ../../Zotlabs/Module/Connections.php:343 msgid "Approve" msgstr "" -#: ../../include/conversation.php:779 +#: ../../include/conversation.php:781 #, php-format msgid "View %s's profile @ %s" msgstr "" -#: ../../include/conversation.php:799 +#: ../../include/conversation.php:802 msgid "Categories:" msgstr "" -#: ../../include/conversation.php:800 +#: ../../include/conversation.php:803 msgid "Filed under:" msgstr "" -#: ../../include/conversation.php:806 ../../Zotlabs/Widget/Pinned.php:133 -#: ../../Zotlabs/Lib/ThreadItem.php:429 +#: ../../include/conversation.php:809 ../../Zotlabs/Widget/Pinned.php:133 +#: ../../Zotlabs/Lib/ThreadItem.php:430 #, php-format msgid "from %s" msgstr "" -#: ../../include/conversation.php:809 ../../Zotlabs/Widget/Pinned.php:136 -#: ../../Zotlabs/Lib/ThreadItem.php:432 +#: ../../include/conversation.php:812 ../../Zotlabs/Widget/Pinned.php:136 +#: ../../Zotlabs/Lib/ThreadItem.php:433 #, php-format msgid "last edited: %s" msgstr "" -#: ../../include/conversation.php:810 ../../Zotlabs/Widget/Pinned.php:137 -#: ../../Zotlabs/Lib/ThreadItem.php:433 +#: ../../include/conversation.php:813 ../../Zotlabs/Widget/Pinned.php:137 +#: ../../Zotlabs/Lib/ThreadItem.php:434 #, php-format msgid "Expires: %s" msgstr "" -#: ../../include/conversation.php:825 +#: ../../include/conversation.php:828 msgid "View in context" msgstr "" -#: ../../include/conversation.php:827 ../../Zotlabs/Module/Photos.php:1079 -#: ../../Zotlabs/Lib/ThreadItem.php:501 +#: ../../include/conversation.php:830 ../../Zotlabs/Module/Photos.php:1079 +#: ../../Zotlabs/Lib/ThreadItem.php:503 msgid "Please wait" msgstr "" -#: ../../include/conversation.php:928 +#: ../../include/conversation.php:930 msgid "remove" msgstr "" -#: ../../include/conversation.php:932 +#: ../../include/conversation.php:934 msgid "Loading..." msgstr "" -#: ../../include/conversation.php:933 ../../Zotlabs/Lib/ThreadItem.php:301 +#: ../../include/conversation.php:935 ../../Zotlabs/Lib/ThreadItem.php:302 msgid "Conversation Tools" msgstr "" -#: ../../include/conversation.php:934 +#: ../../include/conversation.php:936 msgid "Delete Selected Items" msgstr "" -#: ../../include/conversation.php:977 +#: ../../include/conversation.php:980 msgid "View Source" msgstr "" -#: ../../include/conversation.php:987 +#: ../../include/conversation.php:990 msgid "Follow Thread" msgstr "" -#: ../../include/conversation.php:996 +#: ../../include/conversation.php:999 msgid "Unfollow Thread" msgstr "" -#: ../../include/conversation.php:1090 ../../Zotlabs/Module/Connedit.php:621 +#: ../../include/conversation.php:1093 ../../Zotlabs/Module/Connedit.php:622 msgid "Recent Activity" msgstr "" -#: ../../include/conversation.php:1100 ../../include/connections.php:110 -#: ../../include/channel.php:1618 ../../Zotlabs/Widget/Suggestions.php:46 -#: ../../Zotlabs/Widget/Follow.php:32 ../../Zotlabs/Module/Directory.php:368 -#: ../../Zotlabs/Module/Connections.php:349 ../../Zotlabs/Module/Suggest.php:71 +#: ../../include/conversation.php:1103 ../../include/connections.php:110 +#: ../../include/channel.php:1619 ../../Zotlabs/Widget/Suggestions.php:46 +#: ../../Zotlabs/Widget/Follow.php:32 ../../Zotlabs/Module/Directory.php:370 +#: ../../Zotlabs/Module/Connections.php:350 ../../Zotlabs/Module/Suggest.php:71 msgid "Connect" msgstr "" -#: ../../include/conversation.php:1110 +#: ../../include/conversation.php:1113 msgid "Edit Connection" msgstr "" -#: ../../include/conversation.php:1120 +#: ../../include/conversation.php:1123 msgid "Message" msgstr "" -#: ../../include/conversation.php:1130 ../../Zotlabs/Module/Pubsites.php:35 +#: ../../include/conversation.php:1133 ../../Zotlabs/Module/Pubsites.php:36 #: ../../Zotlabs/Module/Ratings.php:97 msgid "Ratings" msgstr "" -#: ../../include/conversation.php:1140 ../../Zotlabs/Module/Poke.php:199 +#: ../../include/conversation.php:1143 ../../Zotlabs/Module/Poke.php:199 #: ../../Zotlabs/Lib/Apps.php:351 msgid "Poke" msgstr "" -#: ../../include/conversation.php:1262 +#: ../../include/conversation.php:1265 #, php-format msgid "%s likes this." msgstr "" -#: ../../include/conversation.php:1262 +#: ../../include/conversation.php:1265 #, php-format msgid "%s doesn't like this." msgstr "" -#: ../../include/conversation.php:1266 +#: ../../include/conversation.php:1269 #, php-format msgid "%2$d people like this." msgid_plural "%2$d people like this." msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1268 +#: ../../include/conversation.php:1271 #, php-format msgid "%2$d people don't like this." msgid_plural "%2$d people don't like this." msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1274 +#: ../../include/conversation.php:1277 msgid "and" msgstr "" -#: ../../include/conversation.php:1277 +#: ../../include/conversation.php:1280 #, php-format msgid ", and %d other people" msgid_plural ", and %d other people" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1278 +#: ../../include/conversation.php:1281 #, php-format msgid "%s like this." msgstr "" -#: ../../include/conversation.php:1278 +#: ../../include/conversation.php:1281 #, php-format msgid "%s don't like this." msgstr "" -#: ../../include/conversation.php:1462 +#: ../../include/conversation.php:1465 msgid "Toggle poll" msgstr "" -#: ../../include/conversation.php:1463 +#: ../../include/conversation.php:1466 msgid "Option" msgstr "" -#: ../../include/conversation.php:1464 +#: ../../include/conversation.php:1467 msgid "Add option" msgstr "" -#: ../../include/conversation.php:1465 +#: ../../include/conversation.php:1468 msgid "Minutes" msgstr "" -#: ../../include/conversation.php:1465 +#: ../../include/conversation.php:1468 msgid "Hours" msgstr "" -#: ../../include/conversation.php:1465 +#: ../../include/conversation.php:1468 msgid "Days" msgstr "" -#: ../../include/conversation.php:1466 +#: ../../include/conversation.php:1469 msgid "Allow multiple answers" msgstr "" -#: ../../include/conversation.php:1749 ../../include/taxonomy.php:668 -#: ../../include/channel.php:1781 ../../Zotlabs/Module/Photos.php:1136 -#: ../../Zotlabs/Lib/ThreadItem.php:242 +#: ../../include/conversation.php:1479 +msgid "Summary (optional)" +msgstr "" + +#: ../../include/conversation.php:1753 ../../include/taxonomy.php:670 +#: ../../include/channel.php:1782 ../../Zotlabs/Module/Photos.php:1136 +#: ../../Zotlabs/Lib/ThreadItem.php:243 msgctxt "noun" msgid "Like" msgid_plural "Likes" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1752 ../../Zotlabs/Module/Photos.php:1141 -#: ../../Zotlabs/Lib/ThreadItem.php:247 +#: ../../include/conversation.php:1756 ../../Zotlabs/Module/Photos.php:1141 +#: ../../Zotlabs/Lib/ThreadItem.php:248 msgctxt "noun" msgid "Dislike" msgid_plural "Dislikes" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1755 +#: ../../include/conversation.php:1759 msgctxt "noun" msgid "Attending" msgid_plural "Attending" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1758 +#: ../../include/conversation.php:1762 msgctxt "noun" msgid "Not Attending" msgid_plural "Not Attending" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1761 +#: ../../include/conversation.php:1765 msgctxt "noun" msgid "Undecided" msgid_plural "Undecided" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1764 +#: ../../include/conversation.php:1768 msgctxt "noun" msgid "Agree" msgid_plural "Agrees" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1767 +#: ../../include/conversation.php:1771 msgctxt "noun" msgid "Disagree" msgid_plural "Disagrees" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:1770 +#: ../../include/conversation.php:1774 msgctxt "noun" msgid "Abstain" msgid_plural "Abstains" @@ -6292,11 +6310,11 @@ msgstr "" msgid "Hermaphrodite" msgstr "" -#: ../../include/selectors.php:60 ../../include/channel.php:1726 +#: ../../include/selectors.php:60 ../../include/channel.php:1727 msgid "Neuter" msgstr "" -#: ../../include/selectors.php:60 ../../include/channel.php:1728 +#: ../../include/selectors.php:60 ../../include/channel.php:1729 msgid "Non-specific" msgstr "" @@ -6392,15 +6410,15 @@ msgstr "" msgid "Sex Addict" msgstr "" -#: ../../include/selectors.php:134 ../../include/channel.php:505 -#: ../../include/channel.php:506 ../../include/channel.php:513 +#: ../../include/selectors.php:134 ../../include/channel.php:506 +#: ../../include/channel.php:507 ../../include/channel.php:514 #: ../../Zotlabs/Widget/Affinity.php:32 #: ../../Zotlabs/Module/Settings/Channel.php:71 #: ../../Zotlabs/Module/Settings/Channel.php:75 #: ../../Zotlabs/Module/Settings/Channel.php:76 #: ../../Zotlabs/Module/Settings/Channel.php:79 #: ../../Zotlabs/Module/Settings/Channel.php:90 -#: ../../Zotlabs/Module/Connedit.php:717 +#: ../../Zotlabs/Module/Connedit.php:718 msgid "Friends" msgstr "" @@ -6533,218 +6551,218 @@ msgstr "" msgid "Trending" msgstr "" -#: ../../include/taxonomy.php:323 ../../include/taxonomy.php:458 -#: ../../include/taxonomy.php:479 ../../Zotlabs/Widget/Tagcloud.php:22 +#: ../../include/taxonomy.php:323 ../../include/taxonomy.php:460 +#: ../../include/taxonomy.php:481 ../../Zotlabs/Widget/Tagcloud.php:22 msgid "Tags" msgstr "" -#: ../../include/taxonomy.php:559 +#: ../../include/taxonomy.php:561 msgid "Keywords" msgstr "" -#: ../../include/taxonomy.php:580 +#: ../../include/taxonomy.php:582 msgid "have" msgstr "" -#: ../../include/taxonomy.php:580 +#: ../../include/taxonomy.php:582 msgid "has" msgstr "" -#: ../../include/taxonomy.php:581 +#: ../../include/taxonomy.php:583 msgid "want" msgstr "" -#: ../../include/taxonomy.php:581 +#: ../../include/taxonomy.php:583 msgid "wants" msgstr "" -#: ../../include/taxonomy.php:582 ../../Zotlabs/Lib/ThreadItem.php:317 +#: ../../include/taxonomy.php:584 ../../Zotlabs/Lib/ThreadItem.php:318 msgid "like" msgstr "" -#: ../../include/taxonomy.php:582 +#: ../../include/taxonomy.php:584 msgid "likes" msgstr "" -#: ../../include/taxonomy.php:583 ../../Zotlabs/Lib/ThreadItem.php:318 +#: ../../include/taxonomy.php:585 ../../Zotlabs/Lib/ThreadItem.php:319 msgid "dislike" msgstr "" -#: ../../include/taxonomy.php:583 +#: ../../include/taxonomy.php:585 msgid "dislikes" msgstr "" -#: ../../include/items.php:999 ../../include/items.php:1059 +#: ../../include/items.php:1001 ../../include/items.php:1061 msgid "(Unknown)" msgstr "" -#: ../../include/items.php:1247 +#: ../../include/items.php:1249 msgid "Visible to anybody on the internet." msgstr "" -#: ../../include/items.php:1249 +#: ../../include/items.php:1251 msgid "Visible to you only." msgstr "" -#: ../../include/items.php:1251 +#: ../../include/items.php:1253 msgid "Visible to anybody in this network." msgstr "" -#: ../../include/items.php:1253 +#: ../../include/items.php:1255 msgid "Visible to anybody authenticated." msgstr "" -#: ../../include/items.php:1255 +#: ../../include/items.php:1257 #, php-format msgid "Visible to anybody on %s." msgstr "" -#: ../../include/items.php:1257 +#: ../../include/items.php:1259 msgid "Visible to all connections." msgstr "" -#: ../../include/items.php:1259 +#: ../../include/items.php:1261 msgid "Visible to approved connections." msgstr "" -#: ../../include/items.php:1261 +#: ../../include/items.php:1263 msgid "Visible to specific connections." msgstr "" -#: ../../include/items.php:4474 ../../Zotlabs/Module/Group.php:62 +#: ../../include/items.php:4493 ../../Zotlabs/Module/Group.php:62 #: ../../Zotlabs/Module/Group.php:214 msgid "Privacy group not found." msgstr "" -#: ../../include/items.php:4490 +#: ../../include/items.php:4509 msgid "Privacy group is empty." msgstr "" -#: ../../include/items.php:4497 +#: ../../include/items.php:4516 #, php-format msgid "Privacy group: %s" msgstr "" -#: ../../include/items.php:4507 ../../Zotlabs/Module/Connedit.php:859 +#: ../../include/items.php:4526 ../../Zotlabs/Module/Connedit.php:860 #, php-format msgid "Connection: %s" msgstr "" -#: ../../include/items.php:4509 +#: ../../include/items.php:4528 msgid "Connection not found." msgstr "" -#: ../../include/items.php:4843 ../../Zotlabs/Module/Cover_photo.php:297 +#: ../../include/items.php:4875 ../../Zotlabs/Module/Cover_photo.php:297 msgid "female" msgstr "" -#: ../../include/items.php:4844 ../../Zotlabs/Module/Cover_photo.php:298 +#: ../../include/items.php:4876 ../../Zotlabs/Module/Cover_photo.php:298 #, php-format msgid "%1$s updated her %2$s" msgstr "" -#: ../../include/items.php:4845 ../../Zotlabs/Module/Cover_photo.php:299 +#: ../../include/items.php:4877 ../../Zotlabs/Module/Cover_photo.php:299 msgid "male" msgstr "" -#: ../../include/items.php:4846 ../../Zotlabs/Module/Cover_photo.php:300 +#: ../../include/items.php:4878 ../../Zotlabs/Module/Cover_photo.php:300 #, php-format msgid "%1$s updated his %2$s" msgstr "" -#: ../../include/items.php:4848 ../../Zotlabs/Module/Cover_photo.php:302 +#: ../../include/items.php:4880 ../../Zotlabs/Module/Cover_photo.php:302 #, php-format msgid "%1$s updated their %2$s" msgstr "" -#: ../../include/items.php:4850 +#: ../../include/items.php:4882 msgid "profile photo" msgstr "" -#: ../../include/items.php:5042 +#: ../../include/items.php:5074 #, php-format msgid "[Edited %s]" msgstr "" -#: ../../include/items.php:5042 +#: ../../include/items.php:5074 msgctxt "edit_activity" msgid "Post" msgstr "" -#: ../../include/items.php:5042 +#: ../../include/items.php:5074 msgctxt "edit_activity" msgid "Comment" msgstr "" -#: ../../include/account.php:36 +#: ../../include/account.php:38 msgid "Not a valid email address" msgstr "" -#: ../../include/account.php:38 +#: ../../include/account.php:40 msgid "Your email domain is not among those allowed on this site" msgstr "" -#: ../../include/account.php:44 +#: ../../include/account.php:46 msgid "Your email address is already registered at this site." msgstr "" -#: ../../include/account.php:76 +#: ../../include/account.php:78 msgid "An invitation is required." msgstr "" -#: ../../include/account.php:80 +#: ../../include/account.php:82 msgid "Invitation could not be verified." msgstr "" -#: ../../include/account.php:156 +#: ../../include/account.php:158 msgid "Please enter the required information." msgstr "" -#: ../../include/account.php:223 +#: ../../include/account.php:225 msgid "Failed to store account information." msgstr "" -#: ../../include/account.php:311 +#: ../../include/account.php:313 #, php-format msgid "Registration confirmation for %s" msgstr "" -#: ../../include/account.php:380 +#: ../../include/account.php:382 #, php-format msgid "Registration request at %s" msgstr "" -#: ../../include/account.php:402 +#: ../../include/account.php:404 msgid "your registration password" msgstr "" -#: ../../include/account.php:408 ../../include/account.php:471 +#: ../../include/account.php:410 ../../include/account.php:473 #, php-format msgid "Registration details for %s" msgstr "" -#: ../../include/account.php:482 +#: ../../include/account.php:484 msgid "Account approved." msgstr "" -#: ../../include/account.php:522 +#: ../../include/account.php:524 #, php-format msgid "Registration revoked for %s" msgstr "" -#: ../../include/account.php:805 ../../include/account.php:807 +#: ../../include/account.php:807 ../../include/account.php:809 msgid "Click here to upgrade." msgstr "" -#: ../../include/account.php:813 +#: ../../include/account.php:815 msgid "This action exceeds the limits set by your subscription plan." msgstr "" -#: ../../include/account.php:818 +#: ../../include/account.php:820 msgid "This action is not available under your subscription plan." msgstr "" -#: ../../include/photo/photo_driver.php:417 +#: ../../include/photo/photo_driver.php:434 #: ../../Zotlabs/Module/Profile_photo.php:147 #: ../../Zotlabs/Module/Profile_photo.php:284 msgid "Profile Photos" @@ -6827,8 +6845,8 @@ msgstr "" msgid "%1$s's bookmarks" msgstr "" -#: ../../include/menu.php:120 ../../include/channel.php:1538 -#: ../../include/channel.php:1542 ../../Zotlabs/Widget/Cdav.php:138 +#: ../../include/menu.php:120 ../../include/channel.php:1539 +#: ../../include/channel.php:1543 ../../Zotlabs/Widget/Cdav.php:138 #: ../../Zotlabs/Widget/Cdav.php:175 ../../Zotlabs/Module/Article_edit.php:98 #: ../../Zotlabs/Module/Group.php:253 ../../Zotlabs/Module/Card_edit.php:99 #: ../../Zotlabs/Module/Oauth.php:173 ../../Zotlabs/Module/Editwebpage.php:142 @@ -6836,315 +6854,315 @@ msgstr "" #: ../../Zotlabs/Module/Admin/Profs.php:175 ../../Zotlabs/Module/Blocks.php:160 #: ../../Zotlabs/Module/Editblock.php:114 #: ../../Zotlabs/Module/Editlayout.php:114 -#: ../../Zotlabs/Module/Connections.php:320 -#: ../../Zotlabs/Module/Connections.php:362 -#: ../../Zotlabs/Module/Connections.php:382 ../../Zotlabs/Module/Menu.php:176 +#: ../../Zotlabs/Module/Connections.php:321 +#: ../../Zotlabs/Module/Connections.php:363 +#: ../../Zotlabs/Module/Connections.php:383 ../../Zotlabs/Module/Menu.php:176 #: ../../Zotlabs/Module/Oauth2.php:194 ../../Zotlabs/Module/Thing.php:268 #: ../../Zotlabs/Module/Wiki.php:211 ../../Zotlabs/Module/Wiki.php:384 #: ../../Zotlabs/Module/Layouts.php:193 ../../Zotlabs/Lib/Apps.php:557 -#: ../../Zotlabs/Lib/ThreadItem.php:148 +#: ../../Zotlabs/Lib/ThreadItem.php:149 msgid "Edit" msgstr "" -#: ../../include/bbcode.php:221 ../../include/bbcode.php:896 -#: ../../include/bbcode.php:1486 ../../include/bbcode.php:1494 +#: ../../include/bbcode.php:221 ../../include/bbcode.php:916 +#: ../../include/bbcode.php:1494 ../../include/bbcode.php:1502 msgid "Image/photo" msgstr "" -#: ../../include/bbcode.php:268 ../../include/bbcode.php:1511 +#: ../../include/bbcode.php:268 ../../include/bbcode.php:1519 msgid "Encrypted content" msgstr "" -#: ../../include/bbcode.php:302 +#: ../../include/bbcode.php:322 #, php-format msgid "Install %1$s element %2$s" msgstr "" -#: ../../include/bbcode.php:306 +#: ../../include/bbcode.php:326 #, php-format msgid "" "This post contains an installable %s element, however you lack permissions " "to install it on this site." msgstr "" -#: ../../include/bbcode.php:316 ../../Zotlabs/Module/Impel.php:43 +#: ../../include/bbcode.php:336 ../../Zotlabs/Module/Impel.php:43 msgid "webpage" msgstr "" -#: ../../include/bbcode.php:319 ../../Zotlabs/Module/Impel.php:53 +#: ../../include/bbcode.php:339 ../../Zotlabs/Module/Impel.php:53 msgid "layout" msgstr "" -#: ../../include/bbcode.php:322 ../../Zotlabs/Module/Impel.php:48 +#: ../../include/bbcode.php:342 ../../Zotlabs/Module/Impel.php:48 msgid "block" msgstr "" -#: ../../include/bbcode.php:325 ../../Zotlabs/Module/Impel.php:60 +#: ../../include/bbcode.php:345 ../../Zotlabs/Module/Impel.php:60 msgid "menu" msgstr "" -#: ../../include/bbcode.php:519 +#: ../../include/bbcode.php:539 msgid "card" msgstr "" -#: ../../include/bbcode.php:521 +#: ../../include/bbcode.php:541 msgid "article" msgstr "" -#: ../../include/bbcode.php:527 ../../include/markdown.php:202 +#: ../../include/bbcode.php:547 ../../include/markdown.php:202 #, php-format msgid "%1$s wrote the following %2$s %3$s" msgstr "" -#: ../../include/bbcode.php:604 ../../include/bbcode.php:612 +#: ../../include/bbcode.php:624 ../../include/bbcode.php:632 msgid "Click to open/close" msgstr "" -#: ../../include/bbcode.php:612 ../../include/markdown.php:251 +#: ../../include/bbcode.php:632 ../../include/markdown.php:255 msgid "spoiler" msgstr "" -#: ../../include/bbcode.php:625 +#: ../../include/bbcode.php:645 msgid "View article" msgstr "" -#: ../../include/bbcode.php:625 +#: ../../include/bbcode.php:645 msgid "View summary" msgstr "" -#: ../../include/bbcode.php:1018 ../../include/bbcode.php:1190 -#: ../../Zotlabs/Lib/NativeWikiPage.php:606 +#: ../../include/bbcode.php:1038 ../../include/bbcode.php:1195 +#: ../../Zotlabs/Lib/NativeWikiPage.php:605 msgid "Different viewers will see this text differently" msgstr "" -#: ../../include/bbcode.php:1474 +#: ../../include/bbcode.php:1482 msgid "$1 wrote:" msgstr "" -#: ../../include/channel.php:46 +#: ../../include/channel.php:47 msgid "Unable to obtain identity information from database" msgstr "" -#: ../../include/channel.php:79 +#: ../../include/channel.php:80 msgid "Empty name" msgstr "" -#: ../../include/channel.php:82 +#: ../../include/channel.php:83 msgid "Name too long" msgstr "" -#: ../../include/channel.php:199 +#: ../../include/channel.php:200 msgid "No account identifier" msgstr "" -#: ../../include/channel.php:211 +#: ../../include/channel.php:212 msgid "Nickname is required." msgstr "" -#: ../../include/channel.php:225 ../../include/channel.php:706 +#: ../../include/channel.php:226 ../../include/channel.php:707 #: ../../Zotlabs/Module/Changeaddr.php:46 msgid "Reserved nickname. Please choose another." msgstr "" -#: ../../include/channel.php:230 ../../include/channel.php:711 +#: ../../include/channel.php:231 ../../include/channel.php:712 #: ../../Zotlabs/Module/Changeaddr.php:51 msgid "" "Nickname has unsupported characters or is already being used on this site." msgstr "" -#: ../../include/channel.php:294 +#: ../../include/channel.php:295 msgid "Unable to retrieve created identity" msgstr "" -#: ../../include/channel.php:441 +#: ../../include/channel.php:442 msgid "Default Profile" msgstr "" -#: ../../include/channel.php:639 ../../include/channel.php:728 +#: ../../include/channel.php:640 ../../include/channel.php:729 msgid "Unable to retrieve modified identity" msgstr "" -#: ../../include/channel.php:1385 +#: ../../include/channel.php:1386 msgid "Requested channel is not available." msgstr "" -#: ../../include/channel.php:1531 ../../Zotlabs/Module/Profiles.php:730 +#: ../../include/channel.php:1532 ../../Zotlabs/Module/Profiles.php:730 msgid "Change profile photo" msgstr "" -#: ../../include/channel.php:1539 +#: ../../include/channel.php:1540 msgid "Create New Profile" msgstr "" -#: ../../include/channel.php:1557 ../../Zotlabs/Module/Profiles.php:822 +#: ../../include/channel.php:1558 ../../Zotlabs/Module/Profiles.php:822 msgid "Profile Image" msgstr "" -#: ../../include/channel.php:1560 +#: ../../include/channel.php:1561 msgid "Visible to everybody" msgstr "" -#: ../../include/channel.php:1561 ../../Zotlabs/Module/Profiles.php:727 +#: ../../include/channel.php:1562 ../../Zotlabs/Module/Profiles.php:727 #: ../../Zotlabs/Module/Profiles.php:826 msgid "Edit visibility" msgstr "" -#: ../../include/channel.php:1637 ../../include/channel.php:1765 +#: ../../include/channel.php:1638 ../../include/channel.php:1766 msgid "Gender:" msgstr "" -#: ../../include/channel.php:1638 ../../include/channel.php:1809 +#: ../../include/channel.php:1639 ../../include/channel.php:1810 msgid "Status:" msgstr "" -#: ../../include/channel.php:1639 ../../include/channel.php:1833 +#: ../../include/channel.php:1640 ../../include/channel.php:1834 msgid "Homepage:" msgstr "" -#: ../../include/channel.php:1640 +#: ../../include/channel.php:1641 msgid "Online Now" msgstr "" -#: ../../include/channel.php:1693 +#: ../../include/channel.php:1694 msgid "Change your profile photo" msgstr "" -#: ../../include/channel.php:1724 +#: ../../include/channel.php:1725 msgid "Trans" msgstr "" -#: ../../include/channel.php:1763 ../../Zotlabs/Module/Settings/Channel.php:501 +#: ../../include/channel.php:1764 ../../Zotlabs/Module/Settings/Channel.php:501 msgid "Full Name:" msgstr "" -#: ../../include/channel.php:1770 +#: ../../include/channel.php:1771 msgid "Like this channel" msgstr "" -#: ../../include/channel.php:1794 +#: ../../include/channel.php:1795 msgid "j F, Y" msgstr "" -#: ../../include/channel.php:1795 +#: ../../include/channel.php:1796 msgid "j F" msgstr "" -#: ../../include/channel.php:1802 +#: ../../include/channel.php:1803 msgid "Birthday:" msgstr "" -#: ../../include/channel.php:1806 ../../Zotlabs/Module/Directory.php:347 +#: ../../include/channel.php:1807 ../../Zotlabs/Module/Directory.php:349 msgid "Age:" msgstr "" -#: ../../include/channel.php:1815 +#: ../../include/channel.php:1816 #, php-format msgid "for %1$d %2$s" msgstr "" -#: ../../include/channel.php:1827 +#: ../../include/channel.php:1828 msgid "Tags:" msgstr "" -#: ../../include/channel.php:1831 +#: ../../include/channel.php:1832 msgid "Sexual Preference:" msgstr "" -#: ../../include/channel.php:1835 ../../Zotlabs/Module/Directory.php:365 +#: ../../include/channel.php:1836 ../../Zotlabs/Module/Directory.php:367 msgid "Hometown:" msgstr "" -#: ../../include/channel.php:1837 +#: ../../include/channel.php:1838 msgid "Political Views:" msgstr "" -#: ../../include/channel.php:1839 +#: ../../include/channel.php:1840 msgid "Religion:" msgstr "" -#: ../../include/channel.php:1841 ../../Zotlabs/Module/Directory.php:367 +#: ../../include/channel.php:1842 ../../Zotlabs/Module/Directory.php:369 msgid "About:" msgstr "" -#: ../../include/channel.php:1843 +#: ../../include/channel.php:1844 msgid "Hobbies/Interests:" msgstr "" -#: ../../include/channel.php:1845 +#: ../../include/channel.php:1846 msgid "Likes:" msgstr "" -#: ../../include/channel.php:1847 +#: ../../include/channel.php:1848 msgid "Dislikes:" msgstr "" -#: ../../include/channel.php:1849 +#: ../../include/channel.php:1850 msgid "Contact information and Social Networks:" msgstr "" -#: ../../include/channel.php:1851 +#: ../../include/channel.php:1852 msgid "My other channels:" msgstr "" -#: ../../include/channel.php:1853 +#: ../../include/channel.php:1854 msgid "Musical interests:" msgstr "" -#: ../../include/channel.php:1855 +#: ../../include/channel.php:1856 msgid "Books, literature:" msgstr "" -#: ../../include/channel.php:1857 +#: ../../include/channel.php:1858 msgid "Television:" msgstr "" -#: ../../include/channel.php:1859 +#: ../../include/channel.php:1860 msgid "Film/dance/culture/entertainment:" msgstr "" -#: ../../include/channel.php:1861 +#: ../../include/channel.php:1862 msgid "Love/Romance:" msgstr "" -#: ../../include/channel.php:1863 +#: ../../include/channel.php:1864 msgid "Work/employment:" msgstr "" -#: ../../include/channel.php:1865 +#: ../../include/channel.php:1866 msgid "School/education:" msgstr "" -#: ../../include/channel.php:1886 ../../Zotlabs/Module/Profperm.php:113 +#: ../../include/channel.php:1887 ../../Zotlabs/Module/Profperm.php:113 #: ../../Zotlabs/Lib/Apps.php:362 msgid "Profile" msgstr "" -#: ../../include/channel.php:1888 +#: ../../include/channel.php:1889 msgid "Like this thing" msgstr "" -#: ../../include/channel.php:1889 ../../Zotlabs/Module/Events.php:699 +#: ../../include/channel.php:1890 ../../Zotlabs/Module/Events.php:699 msgid "Export" msgstr "" -#: ../../include/channel.php:2328 ../../Zotlabs/Module/Cover_photo.php:304 +#: ../../include/channel.php:2329 ../../Zotlabs/Module/Cover_photo.php:304 msgid "cover photo" msgstr "" -#: ../../include/channel.php:2597 ../../Zotlabs/Module/Rmagic.php:96 -#: ../../boot.php:1700 +#: ../../include/channel.php:2598 ../../Zotlabs/Module/Rmagic.php:96 +#: ../../boot.php:1712 msgid "Remote Authentication" msgstr "" -#: ../../include/channel.php:2598 ../../Zotlabs/Module/Rmagic.php:97 +#: ../../include/channel.php:2599 ../../Zotlabs/Module/Rmagic.php:97 msgid "Enter your channel address (e.g. channel@example.com)" msgstr "" -#: ../../include/channel.php:2599 ../../Zotlabs/Module/Rmagic.php:98 +#: ../../include/channel.php:2600 ../../Zotlabs/Module/Rmagic.php:98 msgid "Authenticate" msgstr "" -#: ../../include/channel.php:2757 ../../Zotlabs/Module/Admin/Accounts.php:91 +#: ../../include/channel.php:2758 ../../Zotlabs/Module/Admin/Accounts.php:91 #, php-format msgid "Account '%s' deleted" msgstr "" @@ -7207,35 +7225,35 @@ msgstr "" msgid "View PDF" msgstr "" -#: ../../include/oembed.php:357 +#: ../../include/oembed.php:365 msgid " by " msgstr "" -#: ../../include/oembed.php:358 +#: ../../include/oembed.php:366 msgid " on " msgstr "" -#: ../../include/oembed.php:387 +#: ../../include/oembed.php:395 msgid "Embedded content" msgstr "" -#: ../../include/oembed.php:396 +#: ../../include/oembed.php:404 msgid "Embedding disabled" msgstr "" -#: ../../include/dir_fns.php:140 ../../Zotlabs/Lib/Libzotdir.php:162 +#: ../../include/dir_fns.php:142 ../../Zotlabs/Lib/Libzotdir.php:163 msgid "Directory Options" msgstr "" -#: ../../include/dir_fns.php:142 ../../Zotlabs/Lib/Libzotdir.php:164 +#: ../../include/dir_fns.php:144 ../../Zotlabs/Lib/Libzotdir.php:165 msgid "Safe Mode" msgstr "" -#: ../../include/dir_fns.php:143 ../../Zotlabs/Lib/Libzotdir.php:165 +#: ../../include/dir_fns.php:145 ../../Zotlabs/Lib/Libzotdir.php:166 msgid "Public Forums Only" msgstr "" -#: ../../include/dir_fns.php:144 ../../Zotlabs/Lib/Libzotdir.php:167 +#: ../../include/dir_fns.php:146 ../../Zotlabs/Lib/Libzotdir.php:168 msgid "This Website Only" msgstr "" @@ -7311,22 +7329,22 @@ msgid "Page name" msgstr "" #: ../../Zotlabs/Widget/Album.php:78 ../../Zotlabs/Widget/Portfolio.php:87 -#: ../../Zotlabs/Module/Embedphotos.php:170 ../../Zotlabs/Module/Photos.php:787 +#: ../../Zotlabs/Module/Embedphotos.php:171 ../../Zotlabs/Module/Photos.php:787 #: ../../Zotlabs/Module/Photos.php:1333 msgid "View Photo" msgstr "" #: ../../Zotlabs/Widget/Album.php:95 ../../Zotlabs/Widget/Portfolio.php:108 -#: ../../Zotlabs/Module/Embedphotos.php:186 ../../Zotlabs/Module/Photos.php:818 +#: ../../Zotlabs/Module/Embedphotos.php:187 ../../Zotlabs/Module/Photos.php:818 msgid "Edit Album" msgstr "" #: ../../Zotlabs/Widget/Album.php:97 ../../Zotlabs/Widget/Cdav.php:146 #: ../../Zotlabs/Widget/Cdav.php:182 ../../Zotlabs/Widget/Portfolio.php:110 -#: ../../Zotlabs/Module/Embedphotos.php:188 +#: ../../Zotlabs/Module/Embedphotos.php:189 #: ../../Zotlabs/Module/Profile_photo.php:500 #: ../../Zotlabs/Module/Cover_photo.php:423 ../../Zotlabs/Module/Photos.php:688 -#: ../../Zotlabs/Storage/Browser.php:533 +#: ../../Zotlabs/Storage/Browser.php:540 msgid "Upload" msgstr "" @@ -7334,7 +7352,7 @@ msgstr "" msgid "Tasks" msgstr "" -#: ../../Zotlabs/Widget/Pubsites.php:12 ../../Zotlabs/Module/Pubsites.php:24 +#: ../../Zotlabs/Widget/Pubsites.php:12 ../../Zotlabs/Module/Pubsites.php:25 msgid "Public Hubs" msgstr "" @@ -7362,35 +7380,35 @@ msgstr "" msgid "Chat Members" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:70 ../../Zotlabs/Lib/ThreadItem.php:205 +#: ../../Zotlabs/Widget/Pinned.php:70 ../../Zotlabs/Lib/ThreadItem.php:206 msgid "I will attend" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:70 ../../Zotlabs/Lib/ThreadItem.php:205 +#: ../../Zotlabs/Widget/Pinned.php:70 ../../Zotlabs/Lib/ThreadItem.php:206 msgid "I will not attend" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:70 ../../Zotlabs/Lib/ThreadItem.php:205 +#: ../../Zotlabs/Widget/Pinned.php:70 ../../Zotlabs/Lib/ThreadItem.php:206 msgid "I might attend" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:81 ../../Zotlabs/Lib/ThreadItem.php:219 +#: ../../Zotlabs/Widget/Pinned.php:81 ../../Zotlabs/Lib/ThreadItem.php:220 msgid "I agree" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:81 ../../Zotlabs/Lib/ThreadItem.php:219 +#: ../../Zotlabs/Widget/Pinned.php:81 ../../Zotlabs/Lib/ThreadItem.php:220 msgid "I disagree" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:81 ../../Zotlabs/Lib/ThreadItem.php:219 +#: ../../Zotlabs/Widget/Pinned.php:81 ../../Zotlabs/Lib/ThreadItem.php:220 msgid "I abstain" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:99 ../../Zotlabs/Lib/ThreadItem.php:329 +#: ../../Zotlabs/Widget/Pinned.php:99 ../../Zotlabs/Lib/ThreadItem.php:330 msgid "Share This" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:99 ../../Zotlabs/Lib/ThreadItem.php:329 +#: ../../Zotlabs/Widget/Pinned.php:99 ../../Zotlabs/Lib/ThreadItem.php:330 msgid "share" msgstr "" @@ -7399,19 +7417,19 @@ msgstr "" msgid "View %s's profile - %s" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:128 ../../Zotlabs/Lib/ThreadItem.php:413 +#: ../../Zotlabs/Widget/Pinned.php:128 ../../Zotlabs/Lib/ThreadItem.php:414 msgid "via" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:143 ../../Zotlabs/Lib/ThreadItem.php:443 +#: ../../Zotlabs/Widget/Pinned.php:143 ../../Zotlabs/Lib/ThreadItem.php:445 msgid "Attendance Options" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:144 ../../Zotlabs/Lib/ThreadItem.php:445 +#: ../../Zotlabs/Widget/Pinned.php:144 ../../Zotlabs/Lib/ThreadItem.php:447 msgid "Voting Options" msgstr "" -#: ../../Zotlabs/Widget/Pinned.php:156 ../../Zotlabs/Lib/ThreadItem.php:469 +#: ../../Zotlabs/Widget/Pinned.php:156 ../../Zotlabs/Lib/ThreadItem.php:471 msgid "Pinned post" msgstr "" @@ -7464,11 +7482,10 @@ msgstr "" #: ../../Zotlabs/Widget/Cdav.php:140 ../../Zotlabs/Widget/Cdav.php:178 #: ../../Zotlabs/Module/Cdav.php:1059 ../../Zotlabs/Module/Cdav.php:1387 #: ../../Zotlabs/Module/Webpages.php:254 -#: ../../Zotlabs/Module/New_channel.php:189 ../../Zotlabs/Module/Cards.php:113 -#: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Profiles.php:800 -#: ../../Zotlabs/Module/Articles.php:117 ../../Zotlabs/Module/Menu.php:182 -#: ../../Zotlabs/Module/Connedit.php:930 ../../Zotlabs/Module/Layouts.php:185 -#: ../../Zotlabs/Storage/Browser.php:358 ../../Zotlabs/Storage/Browser.php:531 +#: ../../Zotlabs/Module/New_channel.php:189 ../../Zotlabs/Module/Blocks.php:159 +#: ../../Zotlabs/Module/Profiles.php:800 ../../Zotlabs/Module/Menu.php:182 +#: ../../Zotlabs/Module/Connedit.php:931 ../../Zotlabs/Module/Layouts.php:185 +#: ../../Zotlabs/Storage/Browser.php:365 ../../Zotlabs/Storage/Browser.php:538 msgid "Create" msgstr "" @@ -7565,23 +7582,23 @@ msgid "Bookmarked Chatrooms" msgstr "" #: ../../Zotlabs/Widget/Wiki_page_history.php:23 -#: ../../Zotlabs/Lib/NativeWikiPage.php:565 +#: ../../Zotlabs/Lib/NativeWikiPage.php:564 msgctxt "wiki_history" msgid "Message" msgstr "" #: ../../Zotlabs/Widget/Wiki_page_history.php:24 -#: ../../Zotlabs/Lib/NativeWikiPage.php:566 +#: ../../Zotlabs/Lib/NativeWikiPage.php:565 msgid "Date" msgstr "" #: ../../Zotlabs/Widget/Wiki_page_history.php:25 -#: ../../Zotlabs/Module/Wiki.php:367 ../../Zotlabs/Lib/NativeWikiPage.php:567 +#: ../../Zotlabs/Module/Wiki.php:367 ../../Zotlabs/Lib/NativeWikiPage.php:566 msgid "Revert" msgstr "" #: ../../Zotlabs/Widget/Wiki_page_history.php:26 -#: ../../Zotlabs/Lib/NativeWikiPage.php:568 +#: ../../Zotlabs/Lib/NativeWikiPage.php:567 msgid "Compare" msgstr "" @@ -7881,21 +7898,21 @@ msgstr "" msgid "New Member Links" msgstr "" -#: ../../Zotlabs/Widget/Affinity.php:30 ../../Zotlabs/Module/Connedit.php:715 +#: ../../Zotlabs/Widget/Affinity.php:30 ../../Zotlabs/Module/Connedit.php:716 msgid "Me" msgstr "" -#: ../../Zotlabs/Widget/Affinity.php:31 ../../Zotlabs/Module/Connedit.php:716 +#: ../../Zotlabs/Widget/Affinity.php:31 ../../Zotlabs/Module/Connedit.php:717 msgid "Family" msgstr "" -#: ../../Zotlabs/Widget/Affinity.php:33 ../../Zotlabs/Module/Connedit.php:718 +#: ../../Zotlabs/Widget/Affinity.php:33 ../../Zotlabs/Module/Connedit.php:719 msgid "Acquaintances" msgstr "" #: ../../Zotlabs/Widget/Affinity.php:34 ../../Zotlabs/Module/Connections.php:97 #: ../../Zotlabs/Module/Connections.php:111 -#: ../../Zotlabs/Module/Connedit.php:719 +#: ../../Zotlabs/Module/Connedit.php:720 msgid "All" msgstr "" @@ -7997,7 +8014,7 @@ msgid "Mark all events seen" msgstr "" #: ../../Zotlabs/Widget/Notifications.php:104 -#: ../../Zotlabs/Module/Connections.php:164 +#: ../../Zotlabs/Module/Connections.php:165 msgid "New Connections" msgstr "" @@ -8106,27 +8123,27 @@ msgstr "" msgid "Expires (yyyy-mm-dd)" msgstr "" -#: ../../Zotlabs/Module/Tokens.php:180 ../../Zotlabs/Module/Connedit.php:899 +#: ../../Zotlabs/Module/Tokens.php:180 ../../Zotlabs/Module/Connedit.php:900 msgid "Their Settings" msgstr "" #: ../../Zotlabs/Module/Tokens.php:181 ../../Zotlabs/Module/Permcats.php:122 -#: ../../Zotlabs/Module/Defperms.php:267 ../../Zotlabs/Module/Connedit.php:900 +#: ../../Zotlabs/Module/Defperms.php:267 ../../Zotlabs/Module/Connedit.php:901 msgid "My Settings" msgstr "" #: ../../Zotlabs/Module/Tokens.php:183 ../../Zotlabs/Module/Permcats.php:124 -#: ../../Zotlabs/Module/Defperms.php:265 ../../Zotlabs/Module/Connedit.php:895 +#: ../../Zotlabs/Module/Defperms.php:265 ../../Zotlabs/Module/Connedit.php:896 msgid "inherited" msgstr "" #: ../../Zotlabs/Module/Tokens.php:186 ../../Zotlabs/Module/Permcats.php:127 -#: ../../Zotlabs/Module/Defperms.php:270 ../../Zotlabs/Module/Connedit.php:902 +#: ../../Zotlabs/Module/Defperms.php:270 ../../Zotlabs/Module/Connedit.php:903 msgid "Individual Permissions" msgstr "" #: ../../Zotlabs/Module/Tokens.php:187 ../../Zotlabs/Module/Permcats.php:128 -#: ../../Zotlabs/Module/Connedit.php:903 +#: ../../Zotlabs/Module/Connedit.php:904 msgid "" "Some permissions may be inherited from your channel's privacy settings, which have higher priority than " @@ -8146,12 +8163,12 @@ msgstr "" #: ../../Zotlabs/Module/Attach_edit.php:52 #: ../../Zotlabs/Module/Wall_upload.php:31 #: ../../Zotlabs/Module/Card_edit.php:44 ../../Zotlabs/Module/Chanview.php:95 -#: ../../Zotlabs/Module/Cal.php:31 ../../Zotlabs/Module/Attach.php:21 +#: ../../Zotlabs/Module/Cal.php:31 ../../Zotlabs/Module/Attach.php:22 #: ../../Zotlabs/Module/Page.php:75 ../../Zotlabs/Module/Block.php:41 msgid "Channel not found." msgstr "" -#: ../../Zotlabs/Module/Article_edit.php:127 +#: ../../Zotlabs/Module/Article_edit.php:128 msgid "Edit Article" msgstr "" @@ -8177,11 +8194,11 @@ msgstr "" msgid "No such channel" msgstr "" -#: ../../Zotlabs/Module/Network.php:164 ../../Zotlabs/Module/Channel.php:189 +#: ../../Zotlabs/Module/Network.php:164 ../../Zotlabs/Module/Channel.php:221 msgid "Search Results For:" msgstr "" -#: ../../Zotlabs/Module/Network.php:205 ../../Zotlabs/Module/Channel.php:224 +#: ../../Zotlabs/Module/Network.php:205 ../../Zotlabs/Module/Channel.php:256 #: ../../Zotlabs/Module/Hq.php:125 ../../Zotlabs/Module/Pubstream.php:95 #: ../../Zotlabs/Module/Display.php:76 msgid "Reset form" @@ -8195,16 +8212,16 @@ msgstr "" msgid "Privacy group: " msgstr "" -#: ../../Zotlabs/Module/Import_items.php:48 ../../Zotlabs/Module/Import.php:68 +#: ../../Zotlabs/Module/Import_items.php:48 ../../Zotlabs/Module/Import.php:69 msgid "Nothing to import." msgstr "" -#: ../../Zotlabs/Module/Import_items.php:72 ../../Zotlabs/Module/Import.php:83 -#: ../../Zotlabs/Module/Import.php:99 +#: ../../Zotlabs/Module/Import_items.php:72 ../../Zotlabs/Module/Import.php:84 +#: ../../Zotlabs/Module/Import.php:100 msgid "Unable to download data from old server" msgstr "" -#: ../../Zotlabs/Module/Import_items.php:77 ../../Zotlabs/Module/Import.php:106 +#: ../../Zotlabs/Module/Import_items.php:77 ../../Zotlabs/Module/Import.php:107 msgid "Imported file is empty." msgstr "" @@ -8226,55 +8243,55 @@ msgid "Use this form to import existing posts and content from an export file." msgstr "" #: ../../Zotlabs/Module/Import_items.php:127 -#: ../../Zotlabs/Module/Import.php:628 +#: ../../Zotlabs/Module/Import.php:629 msgid "File to Upload" msgstr "" -#: ../../Zotlabs/Module/Import.php:162 +#: ../../Zotlabs/Module/Import.php:163 #, php-format msgid "Your service plan only allows %d channels." msgstr "" -#: ../../Zotlabs/Module/Import.php:189 +#: ../../Zotlabs/Module/Import.php:190 msgid "No channel. Import failed." msgstr "" -#: ../../Zotlabs/Module/Import.php:621 +#: ../../Zotlabs/Module/Import.php:622 msgid "You must be logged in to use this feature." msgstr "" -#: ../../Zotlabs/Module/Import.php:626 +#: ../../Zotlabs/Module/Import.php:627 msgid "Import Channel" msgstr "" -#: ../../Zotlabs/Module/Import.php:627 +#: ../../Zotlabs/Module/Import.php:628 msgid "" "Use this form to import an existing channel from a different server/hub. You " "may retrieve the channel identity from the old server/hub via the network or " "provide an export file." msgstr "" -#: ../../Zotlabs/Module/Import.php:629 +#: ../../Zotlabs/Module/Import.php:630 msgid "Or provide the old server/hub details" msgstr "" -#: ../../Zotlabs/Module/Import.php:631 +#: ../../Zotlabs/Module/Import.php:632 msgid "Your old identity address (xyz@example.com)" msgstr "" -#: ../../Zotlabs/Module/Import.php:632 +#: ../../Zotlabs/Module/Import.php:633 msgid "Your old login email address" msgstr "" -#: ../../Zotlabs/Module/Import.php:633 +#: ../../Zotlabs/Module/Import.php:634 msgid "Your old login password" msgstr "" -#: ../../Zotlabs/Module/Import.php:634 +#: ../../Zotlabs/Module/Import.php:635 msgid "Import a few months of posts if possible (limited by available memory" msgstr "" -#: ../../Zotlabs/Module/Import.php:636 +#: ../../Zotlabs/Module/Import.php:637 msgid "" "For either option, please choose whether to make this hub your new primary " "address, or whether your old location should continue this role. You will be " @@ -8282,31 +8299,31 @@ msgid "" "location for files, photos, and media." msgstr "" -#: ../../Zotlabs/Module/Import.php:638 +#: ../../Zotlabs/Module/Import.php:639 msgid "Make this hub my primary location" msgstr "" -#: ../../Zotlabs/Module/Import.php:639 +#: ../../Zotlabs/Module/Import.php:640 msgid "Move this channel (disable all previous locations)" msgstr "" -#: ../../Zotlabs/Module/Import.php:640 +#: ../../Zotlabs/Module/Import.php:641 msgid "Use this channel nickname instead of the one provided" msgstr "" -#: ../../Zotlabs/Module/Import.php:640 +#: ../../Zotlabs/Module/Import.php:641 msgid "" "Leave blank to keep your existing channel nickname. You will be randomly " "assigned a similar nickname if either name is already allocated on this site." msgstr "" -#: ../../Zotlabs/Module/Import.php:642 +#: ../../Zotlabs/Module/Import.php:643 msgid "" "This process may take several minutes to complete. Please submit the form " "only once and leave this page open until finished." msgstr "" -#: ../../Zotlabs/Module/Ochannel.php:32 ../../Zotlabs/Module/Channel.php:42 +#: ../../Zotlabs/Module/Ochannel.php:32 ../../Zotlabs/Module/Channel.php:44 #: ../../Zotlabs/Module/Chat.php:29 msgid "You must be logged in to see this page." msgstr "" @@ -8465,20 +8482,20 @@ msgid "" "check your email for further instructions." msgstr "" -#: ../../Zotlabs/Module/Search.php:17 +#: ../../Zotlabs/Module/Search.php:22 #: ../../Zotlabs/Module/Viewconnections.php:23 #: ../../Zotlabs/Module/Ratings.php:83 ../../Zotlabs/Module/Display.php:26 -#: ../../Zotlabs/Module/Directory.php:71 ../../Zotlabs/Module/Directory.php:76 +#: ../../Zotlabs/Module/Directory.php:73 ../../Zotlabs/Module/Directory.php:78 #: ../../Zotlabs/Module/Photos.php:519 msgid "Public access denied." msgstr "" -#: ../../Zotlabs/Module/Search.php:222 +#: ../../Zotlabs/Module/Search.php:251 #, php-format msgid "Items tagged with: %s" msgstr "" -#: ../../Zotlabs/Module/Search.php:224 +#: ../../Zotlabs/Module/Search.php:253 #, php-format msgid "Search results for: %s" msgstr "" @@ -8522,7 +8539,7 @@ msgstr "" #: ../../Zotlabs/Module/Setup.php:260 ../../Zotlabs/Module/Cdav.php:1036 #: ../../Zotlabs/Module/Events.php:698 ../../Zotlabs/Module/Events.php:707 -#: ../../Zotlabs/Module/Cal.php:206 ../../Zotlabs/Module/Photos.php:956 +#: ../../Zotlabs/Module/Cal.php:204 ../../Zotlabs/Module/Photos.php:956 msgid "Next" msgstr "" @@ -8941,7 +8958,7 @@ msgstr "" msgid "View Connections" msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:27 +#: ../../Zotlabs/Module/Pubsites.php:28 msgid "" "The listed hubs allow public registration for the $Projectname network. All " "hubs in the network are interlinked so membership on any of them conveys " @@ -8950,52 +8967,52 @@ msgid "" "additional details." msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:33 +#: ../../Zotlabs/Module/Pubsites.php:34 msgid "Hub URL" msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:33 +#: ../../Zotlabs/Module/Pubsites.php:34 msgid "Access Type" msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:33 +#: ../../Zotlabs/Module/Pubsites.php:34 msgid "Registration Policy" msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:33 +#: ../../Zotlabs/Module/Pubsites.php:34 msgid "Stats" msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:33 +#: ../../Zotlabs/Module/Pubsites.php:34 msgid "Software" msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:49 +#: ../../Zotlabs/Module/Pubsites.php:50 msgid "Rate" msgstr "" -#: ../../Zotlabs/Module/Pubsites.php:60 ../../Zotlabs/Module/Webpages.php:261 +#: ../../Zotlabs/Module/Pubsites.php:61 ../../Zotlabs/Module/Webpages.php:261 #: ../../Zotlabs/Module/Events.php:702 ../../Zotlabs/Module/Blocks.php:166 #: ../../Zotlabs/Module/Wiki.php:213 ../../Zotlabs/Module/Wiki.php:409 #: ../../Zotlabs/Module/Layouts.php:198 msgid "View" msgstr "" -#: ../../Zotlabs/Module/Channel.php:99 ../../Zotlabs/Module/Hcard.php:37 -#: ../../Zotlabs/Module/Profile.php:45 +#: ../../Zotlabs/Module/Channel.php:131 ../../Zotlabs/Module/Hcard.php:37 +#: ../../Zotlabs/Module/Profile.php:60 msgid "Posts and comments" msgstr "" -#: ../../Zotlabs/Module/Channel.php:106 ../../Zotlabs/Module/Hcard.php:44 -#: ../../Zotlabs/Module/Profile.php:52 +#: ../../Zotlabs/Module/Channel.php:138 ../../Zotlabs/Module/Hcard.php:44 +#: ../../Zotlabs/Module/Profile.php:67 msgid "Only posts" msgstr "" -#: ../../Zotlabs/Module/Channel.php:174 +#: ../../Zotlabs/Module/Channel.php:206 msgid "Insufficient permissions. Request redirected to profile page." msgstr "" -#: ../../Zotlabs/Module/Channel.php:449 ../../Zotlabs/Module/Display.php:359 +#: ../../Zotlabs/Module/Channel.php:482 ../../Zotlabs/Module/Display.php:362 msgid "" "You must enable javascript for your browser to be able to view this content." msgstr "" @@ -9017,7 +9034,7 @@ msgid "Visible To" msgstr "" #: ../../Zotlabs/Module/Profperm.php:140 -#: ../../Zotlabs/Module/Connections.php:217 +#: ../../Zotlabs/Module/Connections.php:218 msgid "All Connections" msgstr "" @@ -9090,7 +9107,7 @@ msgstr "" msgid "Click a channel to toggle membership" msgstr "" -#: ../../Zotlabs/Module/Card_edit.php:128 +#: ../../Zotlabs/Module/Card_edit.php:129 msgid "Edit Card" msgstr "" @@ -9165,7 +9182,7 @@ msgstr "" #: ../../Zotlabs/Module/Cdav.php:1053 ../../Zotlabs/Module/Cdav.php:1388 #: ../../Zotlabs/Module/Admin/Addons.php:457 #: ../../Zotlabs/Module/Profiles.php:801 ../../Zotlabs/Module/Oauth2.php:58 -#: ../../Zotlabs/Module/Oauth2.php:144 ../../Zotlabs/Module/Connedit.php:931 +#: ../../Zotlabs/Module/Oauth2.php:144 ../../Zotlabs/Module/Connedit.php:932 #: ../../Zotlabs/Lib/Apps.php:536 msgid "Update" msgstr "" @@ -9258,7 +9275,7 @@ msgstr "" msgid "You have got no unseen posts..." msgstr "" -#: ../../Zotlabs/Module/Pin.php:35 ../../Zotlabs/Module/Item.php:450 +#: ../../Zotlabs/Module/Pin.php:36 ../../Zotlabs/Module/Item.php:461 msgid "Unable to locate original post." msgstr "" @@ -9328,106 +9345,106 @@ msgstr "" msgid "min" msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:57 +#: ../../Zotlabs/Module/Channel_calendar.php:62 #: ../../Zotlabs/Module/Events.php:113 msgid "Event can not end before it has started." msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:59 -#: ../../Zotlabs/Module/Channel_calendar.php:67 -#: ../../Zotlabs/Module/Channel_calendar.php:84 +#: ../../Zotlabs/Module/Channel_calendar.php:64 +#: ../../Zotlabs/Module/Channel_calendar.php:72 +#: ../../Zotlabs/Module/Channel_calendar.php:87 #: ../../Zotlabs/Module/Events.php:115 ../../Zotlabs/Module/Events.php:124 #: ../../Zotlabs/Module/Events.php:146 msgid "Unable to generate preview." msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:65 +#: ../../Zotlabs/Module/Channel_calendar.php:70 #: ../../Zotlabs/Module/Events.php:122 msgid "Event title and start time are required." msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:82 -#: ../../Zotlabs/Module/Channel_calendar.php:224 +#: ../../Zotlabs/Module/Channel_calendar.php:85 +#: ../../Zotlabs/Module/Channel_calendar.php:226 #: ../../Zotlabs/Module/Events.php:144 ../../Zotlabs/Module/Events.php:271 msgid "Event not found." msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:371 +#: ../../Zotlabs/Module/Channel_calendar.php:370 #: ../../Zotlabs/Module/Events.php:641 msgid "Edit event" msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:373 +#: ../../Zotlabs/Module/Channel_calendar.php:372 #: ../../Zotlabs/Module/Events.php:643 msgid "Delete event" msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:393 -#: ../../Zotlabs/Module/Cdav.php:943 ../../Zotlabs/Module/Cal.php:167 +#: ../../Zotlabs/Module/Channel_calendar.php:392 +#: ../../Zotlabs/Module/Cdav.php:943 ../../Zotlabs/Module/Cal.php:165 msgid "Link to source" msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:407 +#: ../../Zotlabs/Module/Channel_calendar.php:406 #: ../../Zotlabs/Module/Events.php:677 msgid "calendar" msgstr "" -#: ../../Zotlabs/Module/Channel_calendar.php:494 +#: ../../Zotlabs/Module/Channel_calendar.php:493 #: ../../Zotlabs/Module/Events.php:742 msgid "Failed to remove event" msgstr "" -#: ../../Zotlabs/Module/Like.php:93 +#: ../../Zotlabs/Module/Like.php:106 msgid "Like/Dislike" msgstr "" -#: ../../Zotlabs/Module/Like.php:98 +#: ../../Zotlabs/Module/Like.php:112 msgid "This action is restricted to members." msgstr "" -#: ../../Zotlabs/Module/Like.php:99 +#: ../../Zotlabs/Module/Like.php:113 msgid "" "Please login with your $Projectname ID or register as a new $Projectname member to continue." msgstr "" -#: ../../Zotlabs/Module/Like.php:154 ../../Zotlabs/Module/Like.php:180 -#: ../../Zotlabs/Module/Like.php:218 +#: ../../Zotlabs/Module/Like.php:166 ../../Zotlabs/Module/Like.php:192 +#: ../../Zotlabs/Module/Like.php:230 msgid "Invalid request." msgstr "" -#: ../../Zotlabs/Module/Like.php:195 +#: ../../Zotlabs/Module/Like.php:207 msgid "thing" msgstr "" -#: ../../Zotlabs/Module/Like.php:241 +#: ../../Zotlabs/Module/Like.php:253 msgid "Channel unavailable." msgstr "" -#: ../../Zotlabs/Module/Like.php:277 +#: ../../Zotlabs/Module/Like.php:289 msgid "Previous action reversed." msgstr "" -#: ../../Zotlabs/Module/Like.php:473 -#, php-format -msgid "%1$s agrees with %2$s's %3$s" -msgstr "" - #: ../../Zotlabs/Module/Like.php:475 #, php-format -msgid "%1$s doesn't agree with %2$s's %3$s" +msgid "%1$s agrees with %2$s's %3$s" msgstr "" #: ../../Zotlabs/Module/Like.php:477 #, php-format +msgid "%1$s doesn't agree with %2$s's %3$s" +msgstr "" + +#: ../../Zotlabs/Module/Like.php:479 +#, php-format msgid "%1$s abstains from a decision on %2$s's %3$s" msgstr "" -#: ../../Zotlabs/Module/Like.php:592 +#: ../../Zotlabs/Module/Like.php:586 msgid "Action completed." msgstr "" -#: ../../Zotlabs/Module/Like.php:593 +#: ../../Zotlabs/Module/Like.php:587 msgid "Thank you." msgstr "" @@ -9496,13 +9513,13 @@ msgid "Timezone:" msgstr "" #: ../../Zotlabs/Module/Cdav.php:1035 ../../Zotlabs/Module/Events.php:697 -#: ../../Zotlabs/Module/Events.php:706 ../../Zotlabs/Module/Cal.php:205 +#: ../../Zotlabs/Module/Events.php:706 ../../Zotlabs/Module/Cal.php:203 #: ../../Zotlabs/Module/Photos.php:947 msgid "Previous" msgstr "" #: ../../Zotlabs/Module/Cdav.php:1037 ../../Zotlabs/Module/Events.php:708 -#: ../../Zotlabs/Module/Cal.php:207 +#: ../../Zotlabs/Module/Cal.php:205 msgid "Today" msgstr "" @@ -9550,73 +9567,73 @@ msgstr "" msgid "Sorry! Editing of recurrent events is not yet implemented." msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1373 ../../Zotlabs/Module/Connedit.php:916 +#: ../../Zotlabs/Module/Cdav.php:1373 ../../Zotlabs/Module/Connedit.php:917 msgid "Organisation" msgstr "" #: ../../Zotlabs/Module/Cdav.php:1375 ../../Zotlabs/Module/Profiles.php:788 -#: ../../Zotlabs/Module/Connedit.php:918 +#: ../../Zotlabs/Module/Connedit.php:919 msgid "Phone" msgstr "" #: ../../Zotlabs/Module/Cdav.php:1377 ../../Zotlabs/Module/Profiles.php:790 -#: ../../Zotlabs/Module/Connedit.php:920 +#: ../../Zotlabs/Module/Connedit.php:921 msgid "Instant messenger" msgstr "" #: ../../Zotlabs/Module/Cdav.php:1378 ../../Zotlabs/Module/Profiles.php:791 -#: ../../Zotlabs/Module/Connedit.php:921 +#: ../../Zotlabs/Module/Connedit.php:922 msgid "Website" msgstr "" #: ../../Zotlabs/Module/Cdav.php:1379 #: ../../Zotlabs/Module/Admin/Channels.php:160 #: ../../Zotlabs/Module/Profiles.php:504 ../../Zotlabs/Module/Profiles.php:792 -#: ../../Zotlabs/Module/Connedit.php:922 ../../Zotlabs/Module/Locs.php:129 +#: ../../Zotlabs/Module/Connedit.php:923 ../../Zotlabs/Module/Locs.php:129 msgid "Address" msgstr "" #: ../../Zotlabs/Module/Cdav.php:1380 ../../Zotlabs/Module/Profiles.php:793 -#: ../../Zotlabs/Module/Connedit.php:923 +#: ../../Zotlabs/Module/Connedit.php:924 msgid "Note" msgstr "" #: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Profiles.php:798 -#: ../../Zotlabs/Module/Connedit.php:928 +#: ../../Zotlabs/Module/Connedit.php:929 msgid "Add Contact" msgstr "" #: ../../Zotlabs/Module/Cdav.php:1386 ../../Zotlabs/Module/Profiles.php:799 -#: ../../Zotlabs/Module/Connedit.php:929 +#: ../../Zotlabs/Module/Connedit.php:930 msgid "Add Field" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1391 ../../Zotlabs/Module/Connedit.php:934 +#: ../../Zotlabs/Module/Cdav.php:1391 ../../Zotlabs/Module/Connedit.php:935 msgid "P.O. Box" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1392 ../../Zotlabs/Module/Connedit.php:935 +#: ../../Zotlabs/Module/Cdav.php:1392 ../../Zotlabs/Module/Connedit.php:936 msgid "Additional" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1393 ../../Zotlabs/Module/Connedit.php:936 +#: ../../Zotlabs/Module/Cdav.php:1393 ../../Zotlabs/Module/Connedit.php:937 msgid "Street" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1394 ../../Zotlabs/Module/Connedit.php:937 +#: ../../Zotlabs/Module/Cdav.php:1394 ../../Zotlabs/Module/Connedit.php:938 msgid "Locality" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1395 ../../Zotlabs/Module/Connedit.php:938 +#: ../../Zotlabs/Module/Cdav.php:1395 ../../Zotlabs/Module/Connedit.php:939 msgid "Region" msgstr "" -#: ../../Zotlabs/Module/Cdav.php:1396 ../../Zotlabs/Module/Connedit.php:939 +#: ../../Zotlabs/Module/Cdav.php:1396 ../../Zotlabs/Module/Connedit.php:940 msgid "ZIP Code" msgstr "" #: ../../Zotlabs/Module/Cdav.php:1397 ../../Zotlabs/Module/Profiles.php:759 -#: ../../Zotlabs/Module/Connedit.php:940 +#: ../../Zotlabs/Module/Connedit.php:941 msgid "Country" msgstr "" @@ -9637,37 +9654,37 @@ msgid "Visible to:" msgstr "" #: ../../Zotlabs/Module/Lockview.php:117 ../../Zotlabs/Module/Lockview.php:153 -#: ../../Zotlabs/Module/Acl.php:121 +#: ../../Zotlabs/Module/Acl.php:123 msgctxt "acl" msgid "Profile" msgstr "" -#: ../../Zotlabs/Module/Item.php:736 +#: ../../Zotlabs/Module/Item.php:747 msgid "Empty post discarded." msgstr "" -#: ../../Zotlabs/Module/Item.php:1187 +#: ../../Zotlabs/Module/Item.php:1181 msgid "Duplicate post suppressed." msgstr "" -#: ../../Zotlabs/Module/Item.php:1332 +#: ../../Zotlabs/Module/Item.php:1326 msgid "System error. Post not saved." msgstr "" -#: ../../Zotlabs/Module/Item.php:1366 +#: ../../Zotlabs/Module/Item.php:1360 msgid "Your comment is awaiting approval." msgstr "" -#: ../../Zotlabs/Module/Item.php:1496 +#: ../../Zotlabs/Module/Item.php:1490 msgid "Unable to obtain post information from database." msgstr "" -#: ../../Zotlabs/Module/Item.php:1503 +#: ../../Zotlabs/Module/Item.php:1497 #, php-format msgid "You have reached your limit of %1$.0f top level posts." msgstr "" -#: ../../Zotlabs/Module/Item.php:1510 +#: ../../Zotlabs/Module/Item.php:1504 #, php-format msgid "You have reached your limit of %1$.0f webpages." msgstr "" @@ -9798,7 +9815,7 @@ msgstr "" msgid "Link text" msgstr "" -#: ../../Zotlabs/Module/Profile.php:93 +#: ../../Zotlabs/Module/Profile.php:106 msgid "vcard" msgstr "" @@ -9811,7 +9828,7 @@ msgid "NEW" msgstr "" #: ../../Zotlabs/Module/Sharedwithme.php:109 -#: ../../Zotlabs/Storage/Browser.php:373 +#: ../../Zotlabs/Storage/Browser.php:380 msgid "Last Modified" msgstr "" @@ -9935,12 +9952,12 @@ msgid "Return to file list" msgstr "" #: ../../Zotlabs/Module/Filestorage.php:206 -#: ../../Zotlabs/Storage/Browser.php:379 +#: ../../Zotlabs/Storage/Browser.php:386 msgid "Copy/paste this code to attach file to a post" msgstr "" #: ../../Zotlabs/Module/Filestorage.php:207 -#: ../../Zotlabs/Storage/Browser.php:380 +#: ../../Zotlabs/Storage/Browser.php:387 msgid "Copy/paste this URL to link file from a web page" msgstr "" @@ -9953,7 +9970,7 @@ msgid "Show URL to this file" msgstr "" #: ../../Zotlabs/Module/Filestorage.php:211 -#: ../../Zotlabs/Storage/Browser.php:545 +#: ../../Zotlabs/Storage/Browser.php:552 msgid "Show in your contacts shared folder" msgstr "" @@ -10024,7 +10041,7 @@ msgstr "" msgid "Unknown error" msgstr "" -#: ../../Zotlabs/Module/Share.php:104 ../../Zotlabs/Lib/Activity.php:2133 +#: ../../Zotlabs/Module/Share.php:104 ../../Zotlabs/Lib/Activity.php:2154 #, php-format msgid "🔁 Repeated %1$s's %2$s" msgstr "" @@ -10033,7 +10050,7 @@ msgstr "" msgid "Post repeated" msgstr "" -#: ../../Zotlabs/Module/Acl.php:368 +#: ../../Zotlabs/Module/Acl.php:370 msgid "network" msgstr "" @@ -10041,7 +10058,7 @@ msgstr "" msgid "Item is not editable" msgstr "" -#: ../../Zotlabs/Module/Editpost.php:109 ../../Zotlabs/Module/Rpost.php:150 +#: ../../Zotlabs/Module/Editpost.php:110 ../../Zotlabs/Module/Rpost.php:150 msgid "Edit post" msgstr "" @@ -10344,12 +10361,12 @@ msgid "No registrations." msgstr "" #: ../../Zotlabs/Module/Admin/Accounts.php:176 -#: ../../Zotlabs/Module/Connedit.php:628 +#: ../../Zotlabs/Module/Connedit.php:629 msgid "Block" msgstr "" #: ../../Zotlabs/Module/Admin/Accounts.php:177 -#: ../../Zotlabs/Module/Connedit.php:628 +#: ../../Zotlabs/Module/Connedit.php:629 msgid "Unblock" msgstr "" @@ -10640,7 +10657,7 @@ msgstr "" #: ../../Zotlabs/Module/Admin/Site.php:327 #: ../../Zotlabs/Module/Admin/Site.php:328 -#: ../../Zotlabs/Module/Connedit.php:884 ../../Zotlabs/Module/Connedit.php:885 +#: ../../Zotlabs/Module/Connedit.php:885 ../../Zotlabs/Module/Connedit.php:886 msgid "" "words one per line or #tags or /patterns/ or lang=xx, leave blank to import " "all posts" @@ -10893,12 +10910,12 @@ msgid "Channel '%s' code disallowed" msgstr "" #: ../../Zotlabs/Module/Admin/Channels.php:150 -#: ../../Zotlabs/Module/Directory.php:360 +#: ../../Zotlabs/Module/Directory.php:362 msgid "Censor" msgstr "" #: ../../Zotlabs/Module/Admin/Channels.php:151 -#: ../../Zotlabs/Module/Directory.php:360 +#: ../../Zotlabs/Module/Directory.php:362 msgid "Uncensor" msgstr "" @@ -11413,7 +11430,7 @@ msgstr "" msgid "Description: " msgstr "" -#: ../../Zotlabs/Module/Cal.php:64 +#: ../../Zotlabs/Module/Cal.php:62 msgid "Permissions denied." msgstr "" @@ -11550,11 +11567,11 @@ msgid "" "or restore these in date order (oldest first)." msgstr "" -#: ../../Zotlabs/Module/Display.php:377 +#: ../../Zotlabs/Module/Display.php:380 msgid "Article" msgstr "" -#: ../../Zotlabs/Module/Display.php:422 +#: ../../Zotlabs/Module/Display.php:425 msgid "Item has been removed." msgstr "" @@ -11848,90 +11865,90 @@ msgstr "" msgid "Add Card" msgstr "" -#: ../../Zotlabs/Module/Directory.php:120 +#: ../../Zotlabs/Module/Directory.php:122 msgid "No default suggestions were found." msgstr "" -#: ../../Zotlabs/Module/Directory.php:280 +#: ../../Zotlabs/Module/Directory.php:282 #, php-format msgid "%d rating" msgid_plural "%d ratings" msgstr[0] "" msgstr[1] "" -#: ../../Zotlabs/Module/Directory.php:291 +#: ../../Zotlabs/Module/Directory.php:293 msgid "Gender: " msgstr "" -#: ../../Zotlabs/Module/Directory.php:293 +#: ../../Zotlabs/Module/Directory.php:295 msgid "Status: " msgstr "" -#: ../../Zotlabs/Module/Directory.php:295 +#: ../../Zotlabs/Module/Directory.php:297 msgid "Homepage: " msgstr "" -#: ../../Zotlabs/Module/Directory.php:358 +#: ../../Zotlabs/Module/Directory.php:360 msgid "Description:" msgstr "" -#: ../../Zotlabs/Module/Directory.php:369 +#: ../../Zotlabs/Module/Directory.php:371 msgid "Public Forum:" msgstr "" -#: ../../Zotlabs/Module/Directory.php:372 +#: ../../Zotlabs/Module/Directory.php:374 msgid "Keywords: " msgstr "" -#: ../../Zotlabs/Module/Directory.php:375 +#: ../../Zotlabs/Module/Directory.php:377 msgid "Don't suggest" msgstr "" -#: ../../Zotlabs/Module/Directory.php:377 +#: ../../Zotlabs/Module/Directory.php:379 msgid "Common connections (estimated):" msgstr "" -#: ../../Zotlabs/Module/Directory.php:426 +#: ../../Zotlabs/Module/Directory.php:428 msgid "Global Directory" msgstr "" -#: ../../Zotlabs/Module/Directory.php:426 +#: ../../Zotlabs/Module/Directory.php:428 msgid "Local Directory" msgstr "" -#: ../../Zotlabs/Module/Directory.php:432 +#: ../../Zotlabs/Module/Directory.php:434 msgid "Finding:" msgstr "" -#: ../../Zotlabs/Module/Directory.php:437 +#: ../../Zotlabs/Module/Directory.php:439 msgid "next page" msgstr "" -#: ../../Zotlabs/Module/Directory.php:437 +#: ../../Zotlabs/Module/Directory.php:439 msgid "previous page" msgstr "" -#: ../../Zotlabs/Module/Directory.php:438 +#: ../../Zotlabs/Module/Directory.php:440 msgid "Sort options" msgstr "" -#: ../../Zotlabs/Module/Directory.php:439 +#: ../../Zotlabs/Module/Directory.php:441 msgid "Alphabetic" msgstr "" -#: ../../Zotlabs/Module/Directory.php:440 +#: ../../Zotlabs/Module/Directory.php:442 msgid "Reverse Alphabetic" msgstr "" -#: ../../Zotlabs/Module/Directory.php:441 +#: ../../Zotlabs/Module/Directory.php:443 msgid "Newest to Oldest" msgstr "" -#: ../../Zotlabs/Module/Directory.php:442 +#: ../../Zotlabs/Module/Directory.php:444 msgid "Oldest to Newest" msgstr "" -#: ../../Zotlabs/Module/Directory.php:459 +#: ../../Zotlabs/Module/Directory.php:461 msgid "No entries (some entries may be hidden)." msgstr "" @@ -11986,7 +12003,7 @@ msgstr "" msgid "Validation token" msgstr "" -#: ../../Zotlabs/Module/Attach.php:67 +#: ../../Zotlabs/Module/Attach.php:68 msgid "Item not available." msgstr "" @@ -12107,7 +12124,7 @@ msgstr "" msgid "or select an existing folder (doubleclick)" msgstr "" -#: ../../Zotlabs/Module/Filer.php:55 ../../Zotlabs/Lib/ThreadItem.php:184 +#: ../../Zotlabs/Module/Filer.php:55 ../../Zotlabs/Lib/ThreadItem.php:185 msgid "Save to Folder" msgstr "" @@ -12125,31 +12142,31 @@ msgid "Edit Layout" msgstr "" #: ../../Zotlabs/Module/Connections.php:58 -#: ../../Zotlabs/Module/Connections.php:115 -#: ../../Zotlabs/Module/Connections.php:273 +#: ../../Zotlabs/Module/Connections.php:116 +#: ../../Zotlabs/Module/Connections.php:274 msgid "Active" msgstr "" #: ../../Zotlabs/Module/Connections.php:63 -#: ../../Zotlabs/Module/Connections.php:181 -#: ../../Zotlabs/Module/Connections.php:278 +#: ../../Zotlabs/Module/Connections.php:182 +#: ../../Zotlabs/Module/Connections.php:279 msgid "Blocked" msgstr "" #: ../../Zotlabs/Module/Connections.php:68 -#: ../../Zotlabs/Module/Connections.php:188 -#: ../../Zotlabs/Module/Connections.php:277 +#: ../../Zotlabs/Module/Connections.php:189 +#: ../../Zotlabs/Module/Connections.php:278 msgid "Ignored" msgstr "" #: ../../Zotlabs/Module/Connections.php:73 -#: ../../Zotlabs/Module/Connections.php:202 -#: ../../Zotlabs/Module/Connections.php:276 +#: ../../Zotlabs/Module/Connections.php:203 +#: ../../Zotlabs/Module/Connections.php:277 msgid "Hidden" msgstr "" #: ../../Zotlabs/Module/Connections.php:78 -#: ../../Zotlabs/Module/Connections.php:195 +#: ../../Zotlabs/Module/Connections.php:196 msgid "Archived/Unreachable" msgstr "" @@ -12159,105 +12176,105 @@ msgstr "" msgid "New" msgstr "" -#: ../../Zotlabs/Module/Connections.php:157 +#: ../../Zotlabs/Module/Connections.php:158 msgid "Active Connections" msgstr "" -#: ../../Zotlabs/Module/Connections.php:160 +#: ../../Zotlabs/Module/Connections.php:161 msgid "Show active connections" msgstr "" -#: ../../Zotlabs/Module/Connections.php:167 +#: ../../Zotlabs/Module/Connections.php:168 msgid "Show pending (new) connections" msgstr "" -#: ../../Zotlabs/Module/Connections.php:184 +#: ../../Zotlabs/Module/Connections.php:185 msgid "Only show blocked connections" msgstr "" -#: ../../Zotlabs/Module/Connections.php:191 +#: ../../Zotlabs/Module/Connections.php:192 msgid "Only show ignored connections" msgstr "" -#: ../../Zotlabs/Module/Connections.php:198 +#: ../../Zotlabs/Module/Connections.php:199 msgid "Only show archived/unreachable connections" msgstr "" -#: ../../Zotlabs/Module/Connections.php:205 +#: ../../Zotlabs/Module/Connections.php:206 msgid "Only show hidden connections" msgstr "" -#: ../../Zotlabs/Module/Connections.php:220 +#: ../../Zotlabs/Module/Connections.php:221 msgid "Show all connections" msgstr "" -#: ../../Zotlabs/Module/Connections.php:274 +#: ../../Zotlabs/Module/Connections.php:275 msgid "Pending approval" msgstr "" -#: ../../Zotlabs/Module/Connections.php:275 +#: ../../Zotlabs/Module/Connections.php:276 msgid "Archived" msgstr "" -#: ../../Zotlabs/Module/Connections.php:279 +#: ../../Zotlabs/Module/Connections.php:280 msgid "Not connected at this location" msgstr "" -#: ../../Zotlabs/Module/Connections.php:318 +#: ../../Zotlabs/Module/Connections.php:319 #, php-format msgid "%1$s [%2$s]" msgstr "" -#: ../../Zotlabs/Module/Connections.php:319 +#: ../../Zotlabs/Module/Connections.php:320 msgid "Edit connection" msgstr "" -#: ../../Zotlabs/Module/Connections.php:321 +#: ../../Zotlabs/Module/Connections.php:322 msgid "Delete connection" msgstr "" -#: ../../Zotlabs/Module/Connections.php:330 +#: ../../Zotlabs/Module/Connections.php:331 msgid "Channel address" msgstr "" -#: ../../Zotlabs/Module/Connections.php:335 +#: ../../Zotlabs/Module/Connections.php:336 msgid "Call" msgstr "" -#: ../../Zotlabs/Module/Connections.php:337 +#: ../../Zotlabs/Module/Connections.php:338 msgid "Status" msgstr "" -#: ../../Zotlabs/Module/Connections.php:339 +#: ../../Zotlabs/Module/Connections.php:340 msgid "Connected" msgstr "" -#: ../../Zotlabs/Module/Connections.php:341 +#: ../../Zotlabs/Module/Connections.php:342 msgid "Approve connection" msgstr "" -#: ../../Zotlabs/Module/Connections.php:343 +#: ../../Zotlabs/Module/Connections.php:344 msgid "Ignore connection" msgstr "" -#: ../../Zotlabs/Module/Connections.php:344 -#: ../../Zotlabs/Module/Connedit.php:636 +#: ../../Zotlabs/Module/Connections.php:345 +#: ../../Zotlabs/Module/Connedit.php:637 msgid "Ignore" msgstr "" -#: ../../Zotlabs/Module/Connections.php:345 +#: ../../Zotlabs/Module/Connections.php:346 msgid "Recent activity" msgstr "" -#: ../../Zotlabs/Module/Connections.php:351 +#: ../../Zotlabs/Module/Connections.php:352 msgid "Connect at this location" msgstr "" -#: ../../Zotlabs/Module/Connections.php:379 +#: ../../Zotlabs/Module/Connections.php:380 msgid "Search your connections" msgstr "" -#: ../../Zotlabs/Module/Connections.php:380 +#: ../../Zotlabs/Module/Connections.php:381 msgid "Connections search" msgstr "" @@ -12400,21 +12417,21 @@ msgstr "" msgid "Flag as adult in album view" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1076 ../../Zotlabs/Lib/ThreadItem.php:317 +#: ../../Zotlabs/Module/Photos.php:1076 ../../Zotlabs/Lib/ThreadItem.php:318 msgid "I like this (toggle)" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1077 ../../Zotlabs/Lib/ThreadItem.php:318 +#: ../../Zotlabs/Module/Photos.php:1077 ../../Zotlabs/Lib/ThreadItem.php:319 msgid "I don't like this (toggle)" msgstr "" #: ../../Zotlabs/Module/Photos.php:1095 ../../Zotlabs/Module/Photos.php:1213 -#: ../../Zotlabs/Lib/ThreadItem.php:822 +#: ../../Zotlabs/Lib/ThreadItem.php:824 msgid "This is you" msgstr "" #: ../../Zotlabs/Module/Photos.php:1132 ../../Zotlabs/Module/Photos.php:1144 -#: ../../Zotlabs/Lib/ThreadItem.php:238 ../../Zotlabs/Lib/ThreadItem.php:250 +#: ../../Zotlabs/Lib/ThreadItem.php:239 ../../Zotlabs/Lib/ThreadItem.php:251 msgid "View all" msgstr "" @@ -12430,12 +12447,12 @@ msgstr "" msgid "Map" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1269 ../../Zotlabs/Lib/ThreadItem.php:489 +#: ../../Zotlabs/Module/Photos.php:1269 ../../Zotlabs/Lib/ThreadItem.php:491 msgctxt "noun" msgid "Likes" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1270 ../../Zotlabs/Lib/ThreadItem.php:490 +#: ../../Zotlabs/Module/Photos.php:1270 ../../Zotlabs/Lib/ThreadItem.php:492 msgctxt "noun" msgid "Dislikes" msgstr "" @@ -12464,7 +12481,7 @@ msgid "" "Password reset failed." msgstr "" -#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1708 +#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1720 msgid "Password Reset" msgstr "" @@ -12681,7 +12698,11 @@ msgid "Your full name" msgstr "" #: ../../Zotlabs/Module/Profiles.php:752 -msgid "Title/Description" +msgid "Short title/tescription" +msgstr "" + +#: ../../Zotlabs/Module/Profiles.php:752 +msgid "Maximal 190 characters" msgstr "" #: ../../Zotlabs/Module/Profiles.php:755 @@ -12818,11 +12839,11 @@ msgstr "" msgid "My Connections Bookmarks" msgstr "" -#: ../../Zotlabs/Module/Probe.php:18 +#: ../../Zotlabs/Module/Probe.php:19 msgid "Remote Diagnostics App" msgstr "" -#: ../../Zotlabs/Module/Probe.php:19 +#: ../../Zotlabs/Module/Probe.php:20 msgid "Perform diagnostics on remote channels" msgstr "" @@ -12983,20 +13004,20 @@ msgstr "" msgid "Affinity Tool Settings" msgstr "" -#: ../../Zotlabs/Module/Rate.php:156 +#: ../../Zotlabs/Module/Rate.php:158 msgid "Website:" msgstr "" -#: ../../Zotlabs/Module/Rate.php:159 +#: ../../Zotlabs/Module/Rate.php:161 #, php-format msgid "Remote Channel [%s] (not yet known on this site)" msgstr "" -#: ../../Zotlabs/Module/Rate.php:160 +#: ../../Zotlabs/Module/Rate.php:162 msgid "Rating (this information is public)" msgstr "" -#: ../../Zotlabs/Module/Rate.php:161 +#: ../../Zotlabs/Module/Rate.php:163 msgid "Optionally explain your rating (this information is public)" msgstr "" @@ -13695,7 +13716,7 @@ msgstr "" msgid "Allow bookmarks" msgstr "" -#: ../../Zotlabs/Module/Defperms.php:68 ../../Zotlabs/Module/Connedit.php:89 +#: ../../Zotlabs/Module/Defperms.php:68 ../../Zotlabs/Module/Connedit.php:90 msgid "Could not access contact record." msgstr "" @@ -13707,23 +13728,23 @@ msgstr "" msgid "Set custom default permissions for new connections" msgstr "" -#: ../../Zotlabs/Module/Defperms.php:255 ../../Zotlabs/Module/Connedit.php:859 +#: ../../Zotlabs/Module/Defperms.php:255 ../../Zotlabs/Module/Connedit.php:860 msgid "Connection Default Permissions" msgstr "" -#: ../../Zotlabs/Module/Defperms.php:256 ../../Zotlabs/Module/Connedit.php:860 +#: ../../Zotlabs/Module/Defperms.php:256 ../../Zotlabs/Module/Connedit.php:861 msgid "Apply these permissions automatically" msgstr "" -#: ../../Zotlabs/Module/Defperms.php:257 ../../Zotlabs/Module/Connedit.php:861 +#: ../../Zotlabs/Module/Defperms.php:257 ../../Zotlabs/Module/Connedit.php:862 msgid "Permission role" msgstr "" -#: ../../Zotlabs/Module/Defperms.php:258 ../../Zotlabs/Module/Connedit.php:862 +#: ../../Zotlabs/Module/Defperms.php:258 ../../Zotlabs/Module/Connedit.php:863 msgid "Add permission role" msgstr "" -#: ../../Zotlabs/Module/Defperms.php:262 ../../Zotlabs/Module/Connedit.php:875 +#: ../../Zotlabs/Module/Defperms.php:262 ../../Zotlabs/Module/Connedit.php:876 msgid "" "The permissions indicated on this page will be applied to all new " "connections." @@ -13984,7 +14005,7 @@ msgstr "" msgid "Error downloading wiki: " msgstr "" -#: ../../Zotlabs/Module/Wiki.php:212 ../../Zotlabs/Storage/Browser.php:397 +#: ../../Zotlabs/Module/Wiki.php:212 ../../Zotlabs/Storage/Browser.php:404 msgid "Download" msgstr "" @@ -13996,7 +14017,7 @@ msgstr "" msgid "Content type" msgstr "" -#: ../../Zotlabs/Module/Wiki.php:219 ../../Zotlabs/Storage/Browser.php:371 +#: ../../Zotlabs/Module/Wiki.php:219 ../../Zotlabs/Storage/Browser.php:378 msgid "Type" msgstr "" @@ -14104,7 +14125,7 @@ msgstr "" msgid "You must be authenticated." msgstr "" -#: ../../Zotlabs/Module/Home.php:90 +#: ../../Zotlabs/Module/Home.php:104 #, php-format msgid "Welcome to %s" msgstr "" @@ -14125,244 +14146,244 @@ msgid "" "hours." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:120 +#: ../../Zotlabs/Module/Connedit.php:121 msgid "Could not locate selected profile." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:264 +#: ../../Zotlabs/Module/Connedit.php:265 msgid "Connection updated." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:266 +#: ../../Zotlabs/Module/Connedit.php:267 msgid "Failed to update connection record." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:309 +#: ../../Zotlabs/Module/Connedit.php:310 msgid "is now connected to" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:434 +#: ../../Zotlabs/Module/Connedit.php:435 msgid "Could not access address book record." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:482 ../../Zotlabs/Module/Connedit.php:486 +#: ../../Zotlabs/Module/Connedit.php:483 ../../Zotlabs/Module/Connedit.php:487 msgid "Refresh failed - channel is currently unavailable." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:501 ../../Zotlabs/Module/Connedit.php:510 -#: ../../Zotlabs/Module/Connedit.php:519 ../../Zotlabs/Module/Connedit.php:528 -#: ../../Zotlabs/Module/Connedit.php:541 +#: ../../Zotlabs/Module/Connedit.php:502 ../../Zotlabs/Module/Connedit.php:511 +#: ../../Zotlabs/Module/Connedit.php:520 ../../Zotlabs/Module/Connedit.php:529 +#: ../../Zotlabs/Module/Connedit.php:542 msgid "Unable to set address book parameters." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:560 +#: ../../Zotlabs/Module/Connedit.php:561 msgid "Connection has been removed." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:603 +#: ../../Zotlabs/Module/Connedit.php:604 #, php-format msgid "View %s's profile" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:607 +#: ../../Zotlabs/Module/Connedit.php:608 msgid "Refresh Permissions" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:610 +#: ../../Zotlabs/Module/Connedit.php:611 msgid "Fetch updated permissions" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:614 +#: ../../Zotlabs/Module/Connedit.php:615 msgid "Refresh Photo" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:617 +#: ../../Zotlabs/Module/Connedit.php:618 msgid "Fetch updated photo" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:624 +#: ../../Zotlabs/Module/Connedit.php:625 msgid "View recent posts and comments" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:631 +#: ../../Zotlabs/Module/Connedit.php:632 msgid "Block (or Unblock) all communications with this connection" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:632 +#: ../../Zotlabs/Module/Connedit.php:633 msgid "This connection is blocked!" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:636 +#: ../../Zotlabs/Module/Connedit.php:637 msgid "Unignore" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:639 +#: ../../Zotlabs/Module/Connedit.php:640 msgid "Ignore (or Unignore) all inbound communications from this connection" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:640 +#: ../../Zotlabs/Module/Connedit.php:641 msgid "This connection is ignored!" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:644 +#: ../../Zotlabs/Module/Connedit.php:645 msgid "Unarchive" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:644 +#: ../../Zotlabs/Module/Connedit.php:645 msgid "Archive" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:647 +#: ../../Zotlabs/Module/Connedit.php:648 msgid "" "Archive (or Unarchive) this connection - mark channel dead but keep content" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:648 +#: ../../Zotlabs/Module/Connedit.php:649 msgid "This connection is archived!" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:652 +#: ../../Zotlabs/Module/Connedit.php:653 msgid "Unhide" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:652 +#: ../../Zotlabs/Module/Connedit.php:653 msgid "Hide" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:655 +#: ../../Zotlabs/Module/Connedit.php:656 msgid "Hide or Unhide this connection from your other connections" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:656 +#: ../../Zotlabs/Module/Connedit.php:657 msgid "This connection is hidden!" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:663 +#: ../../Zotlabs/Module/Connedit.php:664 msgid "Delete this connection" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:671 +#: ../../Zotlabs/Module/Connedit.php:672 msgid "Fetch Vcard" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:674 +#: ../../Zotlabs/Module/Connedit.php:675 msgid "Fetch electronic calling card for this connection" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:685 +#: ../../Zotlabs/Module/Connedit.php:686 msgid "Open Individual Permissions section by default" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:708 +#: ../../Zotlabs/Module/Connedit.php:709 msgid "Affinity" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:711 +#: ../../Zotlabs/Module/Connedit.php:712 msgid "Open Set Affinity section by default" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:748 +#: ../../Zotlabs/Module/Connedit.php:749 msgid "Filter" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:751 +#: ../../Zotlabs/Module/Connedit.php:752 msgid "Open Custom Filter section by default" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:788 +#: ../../Zotlabs/Module/Connedit.php:789 msgid "Approve this connection" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:788 +#: ../../Zotlabs/Module/Connedit.php:789 msgid "Accept connection to allow communication" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:793 +#: ../../Zotlabs/Module/Connedit.php:794 msgid "Set Affinity" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:796 +#: ../../Zotlabs/Module/Connedit.php:797 msgid "Set Profile" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:799 +#: ../../Zotlabs/Module/Connedit.php:800 msgid "Set Affinity & Profile" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:847 +#: ../../Zotlabs/Module/Connedit.php:848 msgid "This connection is unreachable from this location." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:848 +#: ../../Zotlabs/Module/Connedit.php:849 msgid "This connection may be unreachable from other channel locations." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:850 +#: ../../Zotlabs/Module/Connedit.php:851 msgid "Location independence is not supported by their network." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:856 +#: ../../Zotlabs/Module/Connedit.php:857 msgid "" "This connection is unreachable from this location. Location independence is " "not supported by their network." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:860 +#: ../../Zotlabs/Module/Connedit.php:861 msgid "Connection requests will be approved without your interaction" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:869 +#: ../../Zotlabs/Module/Connedit.php:870 msgid "This connection's primary address is" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:870 +#: ../../Zotlabs/Module/Connedit.php:871 msgid "Available locations:" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:876 +#: ../../Zotlabs/Module/Connedit.php:877 msgid "Connection Tools" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:878 +#: ../../Zotlabs/Module/Connedit.php:879 msgid "Slide to adjust your degree of friendship" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:880 +#: ../../Zotlabs/Module/Connedit.php:881 msgid "Slide to adjust your rating" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:881 ../../Zotlabs/Module/Connedit.php:886 +#: ../../Zotlabs/Module/Connedit.php:882 ../../Zotlabs/Module/Connedit.php:887 msgid "Optionally explain your rating" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:883 +#: ../../Zotlabs/Module/Connedit.php:884 msgid "Custom Filter" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:884 +#: ../../Zotlabs/Module/Connedit.php:885 msgid "Only import posts with this text" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:885 +#: ../../Zotlabs/Module/Connedit.php:886 msgid "Do not import posts with this text" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:887 +#: ../../Zotlabs/Module/Connedit.php:888 msgid "This information is public!" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:892 +#: ../../Zotlabs/Module/Connedit.php:893 msgid "Connection Pending Approval" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:897 +#: ../../Zotlabs/Module/Connedit.php:898 #, php-format msgid "" "Please choose the profile you would like to display to %s when viewing your " "profile securely." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:904 +#: ../../Zotlabs/Module/Connedit.php:905 msgid "" "Some permissions may be inherited from your channel's privacy settings, which have higher priority than " @@ -14370,11 +14391,11 @@ msgid "" "any impact unless the inherited setting changes." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:905 +#: ../../Zotlabs/Module/Connedit.php:906 msgid "Last update:" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:913 +#: ../../Zotlabs/Module/Connedit.php:914 msgid "Details" msgstr "" @@ -14387,7 +14408,7 @@ msgid "System Notifications" msgstr "" #: ../../Zotlabs/Module/Notifications.php:60 -#: ../../Zotlabs/Lib/ThreadItem.php:482 +#: ../../Zotlabs/Lib/ThreadItem.php:484 msgid "Mark all seen" msgstr "" @@ -14551,7 +14572,7 @@ msgstr "" msgid "Or enter new bookmark folder name" msgstr "" -#: ../../Zotlabs/Zot/Auth.php:152 +#: ../../Zotlabs/Zot/Auth.php:154 msgid "" "Remote authentication blocked. You are logged into this site locally. Please " "logout and retry." @@ -14604,32 +14625,32 @@ msgctxt "permcat" msgid "publisher" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2110 +#: ../../Zotlabs/Lib/Activity.php:2131 #, php-format msgid "Likes %1$s's %2$s" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2113 +#: ../../Zotlabs/Lib/Activity.php:2134 #, php-format msgid "Doesn't like %1$s's %2$s" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2119 +#: ../../Zotlabs/Lib/Activity.php:2140 #, php-format msgid "Will attend %s's event" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2122 +#: ../../Zotlabs/Lib/Activity.php:2143 #, php-format msgid "Will not attend %s's event" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2125 +#: ../../Zotlabs/Lib/Activity.php:2146 #, php-format msgid "May attend %s's event" msgstr "" -#: ../../Zotlabs/Lib/Activity.php:2128 +#: ../../Zotlabs/Lib/Activity.php:2149 #, php-format msgid "May not attend %s's event" msgstr "" @@ -14997,7 +15018,7 @@ msgstr "" msgid "Invite" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:360 ../../Zotlabs/Storage/Browser.php:400 +#: ../../Zotlabs/Lib/Apps.php:360 ../../Zotlabs/Storage/Browser.php:407 msgid "Post" msgstr "" @@ -15103,7 +15124,7 @@ msgid "Destination name already exists" msgstr "" #: ../../Zotlabs/Lib/NativeWikiPage.php:166 -#: ../../Zotlabs/Lib/NativeWikiPage.php:362 +#: ../../Zotlabs/Lib/NativeWikiPage.php:361 msgid "Page not found" msgstr "" @@ -15111,118 +15132,118 @@ msgstr "" msgid "Error reading page content" msgstr "" -#: ../../Zotlabs/Lib/NativeWikiPage.php:353 -#: ../../Zotlabs/Lib/NativeWikiPage.php:402 -#: ../../Zotlabs/Lib/NativeWikiPage.php:469 -#: ../../Zotlabs/Lib/NativeWikiPage.php:510 +#: ../../Zotlabs/Lib/NativeWikiPage.php:352 +#: ../../Zotlabs/Lib/NativeWikiPage.php:401 +#: ../../Zotlabs/Lib/NativeWikiPage.php:468 +#: ../../Zotlabs/Lib/NativeWikiPage.php:509 msgid "Error reading wiki" msgstr "" -#: ../../Zotlabs/Lib/NativeWikiPage.php:390 +#: ../../Zotlabs/Lib/NativeWikiPage.php:389 msgid "Page update failed." msgstr "" -#: ../../Zotlabs/Lib/NativeWikiPage.php:424 +#: ../../Zotlabs/Lib/NativeWikiPage.php:423 msgid "Nothing deleted" msgstr "" -#: ../../Zotlabs/Lib/NativeWikiPage.php:490 +#: ../../Zotlabs/Lib/NativeWikiPage.php:489 msgid "Compare: object not found." msgstr "" -#: ../../Zotlabs/Lib/NativeWikiPage.php:496 +#: ../../Zotlabs/Lib/NativeWikiPage.php:495 msgid "Page updated" msgstr "" -#: ../../Zotlabs/Lib/NativeWikiPage.php:499 +#: ../../Zotlabs/Lib/NativeWikiPage.php:498 msgid "Untitled" msgstr "" -#: ../../Zotlabs/Lib/NativeWikiPage.php:505 +#: ../../Zotlabs/Lib/NativeWikiPage.php:504 msgid "Wiki resource_id required for git commit" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:130 +#: ../../Zotlabs/Lib/ThreadItem.php:131 msgid "Privacy conflict. Discretion advised." msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:174 ../../Zotlabs/Storage/Browser.php:362 +#: ../../Zotlabs/Lib/ThreadItem.php:175 ../../Zotlabs/Storage/Browser.php:369 msgid "Admin Delete" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:319 +#: ../../Zotlabs/Lib/ThreadItem.php:320 msgid "Reply on this comment" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:319 +#: ../../Zotlabs/Lib/ThreadItem.php:320 msgid "reply" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:319 +#: ../../Zotlabs/Lib/ThreadItem.php:320 msgid "Reply to" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:339 +#: ../../Zotlabs/Lib/ThreadItem.php:340 msgid "Delivery Report" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:358 +#: ../../Zotlabs/Lib/ThreadItem.php:359 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "" msgstr[1] "" -#: ../../Zotlabs/Lib/ThreadItem.php:359 +#: ../../Zotlabs/Lib/ThreadItem.php:360 #, php-format msgid "%d unseen" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:412 +#: ../../Zotlabs/Lib/ThreadItem.php:413 msgid "to" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:414 +#: ../../Zotlabs/Lib/ThreadItem.php:415 msgid "Wall-to-Wall" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:415 +#: ../../Zotlabs/Lib/ThreadItem.php:416 msgid "via Wall-To-Wall:" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:442 +#: ../../Zotlabs/Lib/ThreadItem.php:444 msgid "Attend" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:460 +#: ../../Zotlabs/Lib/ThreadItem.php:462 msgid "Go to previous comment" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:473 +#: ../../Zotlabs/Lib/ThreadItem.php:475 msgid "Add to Calendar" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:831 +#: ../../Zotlabs/Lib/ThreadItem.php:833 msgid "Image" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:833 +#: ../../Zotlabs/Lib/ThreadItem.php:835 msgid "Insert Link" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:834 +#: ../../Zotlabs/Lib/ThreadItem.php:836 msgid "Video" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:844 +#: ../../Zotlabs/Lib/ThreadItem.php:846 msgid "Your full name (required)" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:845 +#: ../../Zotlabs/Lib/ThreadItem.php:847 msgid "Your email address (required)" msgstr "" -#: ../../Zotlabs/Lib/ThreadItem.php:846 +#: ../../Zotlabs/Lib/ThreadItem.php:848 msgid "Your website URL (optional)" msgstr "" @@ -15433,144 +15454,144 @@ msgstr "" msgid "Change filename to" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:302 ../../Zotlabs/Storage/Browser.php:383 +#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:390 msgid "Select a target location" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:303 ../../Zotlabs/Storage/Browser.php:384 +#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:391 msgid "Copy to target location" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:304 ../../Zotlabs/Storage/Browser.php:382 +#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:389 msgid "Set permissions for all files and sub folders" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:305 +#: ../../Zotlabs/Storage/Browser.php:312 msgid "Notify your contacts about this file" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:344 +#: ../../Zotlabs/Storage/Browser.php:351 msgid "File category" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:355 +#: ../../Zotlabs/Storage/Browser.php:362 msgid "Total" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:357 +#: ../../Zotlabs/Storage/Browser.php:364 msgid "Shared" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:359 +#: ../../Zotlabs/Storage/Browser.php:366 msgid "Add Files" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:374 +#: ../../Zotlabs/Storage/Browser.php:381 msgid "parent" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:392 +#: ../../Zotlabs/Storage/Browser.php:399 msgid "Select All" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:393 +#: ../../Zotlabs/Storage/Browser.php:400 msgid "Bulk Actions" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:394 +#: ../../Zotlabs/Storage/Browser.php:401 msgid "Adjust Permissions" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:395 +#: ../../Zotlabs/Storage/Browser.php:402 msgid "Move or Copy" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:398 +#: ../../Zotlabs/Storage/Browser.php:405 msgid "Info" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:399 +#: ../../Zotlabs/Storage/Browser.php:406 msgid "Rename" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:401 +#: ../../Zotlabs/Storage/Browser.php:408 msgid "Attachment BBcode" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:402 +#: ../../Zotlabs/Storage/Browser.php:409 msgid "Embed BBcode" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:403 +#: ../../Zotlabs/Storage/Browser.php:410 msgid "Link BBcode" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:473 +#: ../../Zotlabs/Storage/Browser.php:480 #, php-format msgid "You are using %1$s of your available file storage." msgstr "" -#: ../../Zotlabs/Storage/Browser.php:478 +#: ../../Zotlabs/Storage/Browser.php:485 #, php-format msgid "You are using %1$s of %2$s available file storage. (%3$s%)" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:489 +#: ../../Zotlabs/Storage/Browser.php:496 msgid "WARNING:" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:530 +#: ../../Zotlabs/Storage/Browser.php:537 msgid "Create new folder" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:532 +#: ../../Zotlabs/Storage/Browser.php:539 msgid "Upload file" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:544 +#: ../../Zotlabs/Storage/Browser.php:551 msgid "Drop files here to immediately upload" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:547 +#: ../../Zotlabs/Storage/Browser.php:554 msgid "" "You can select files via the upload button or drop them right here or into " "an existing folder." msgstr "" -#: ../../boot.php:1678 +#: ../../boot.php:1690 msgid "Create an account to access services and applications" msgstr "" -#: ../../boot.php:1702 +#: ../../boot.php:1714 msgid "Login/Email" msgstr "" -#: ../../boot.php:1703 +#: ../../boot.php:1715 msgid "Password" msgstr "" -#: ../../boot.php:1704 +#: ../../boot.php:1716 msgid "Remember me" msgstr "" -#: ../../boot.php:1707 +#: ../../boot.php:1719 msgid "Forgot your password?" msgstr "" -#: ../../boot.php:2576 +#: ../../boot.php:2588 #, php-format msgid "[$Projectname] Website SSL error for %s" msgstr "" -#: ../../boot.php:2581 +#: ../../boot.php:2593 msgid "Website SSL certificate is not valid. Please correct." msgstr "" -#: ../../boot.php:2697 +#: ../../boot.php:2709 #, php-format msgid "[$Projectname] Cron tasks not running on %s" msgstr "" -#: ../../boot.php:2702 +#: ../../boot.php:2714 msgid "Cron/Scheduled tasks not running." msgstr "" diff --git a/util/hstrings.php b/util/hstrings.php old mode 100644 new mode 100755 diff --git a/util/hubzilla_er/Makefile b/util/hubzilla_er/Makefile old mode 100644 new mode 100755 diff --git a/util/messages.po b/util/messages.po old mode 100644 new mode 100755 diff --git a/util/nconfig.php b/util/nconfig.php old mode 100644 new mode 100755 diff --git a/util/php2po.php b/util/php2po.php old mode 100644 new mode 100755 diff --git a/util/po2php.php b/util/po2php.php old mode 100644 new mode 100755 diff --git a/util/shredder/jansson-2.6.tar.gz b/util/shredder/jansson-2.6.tar.gz old mode 100644 new mode 100755 diff --git a/util/shredder/jshon.tar.gz b/util/shredder/jshon.tar.gz old mode 100644 new mode 100755 diff --git a/util/shredder/readme b/util/shredder/readme old mode 100644 new mode 100755 diff --git a/util/storageconv b/util/storageconv index 992c906b8..52bb77fbb 100755 --- a/util/storageconv +++ b/util/storageconv @@ -18,6 +18,8 @@ require_once('include/cli_startup.php'); cli_startup(); +use Zotlabs\Lib\Hashpath; + if($argc == 1) { usage(); killme(); @@ -25,15 +27,20 @@ if($argc == 1) { if($argc == 2) { - $storage = (intval(get_config('system','filesystem_storage_thumbnails', 0)) > 0 ? 1 : 0); + $storage = (intval(get_config('system','photo_storage_type', 1)) > 0 ? 1 : 0); echo 'Current storage set to: ' . ($storage ? 'filesystem' : 'SQL database') . PHP_EOL; switch($argv[1]) { case 'stats': $x = q("SELECT COUNT(resource_id) AS qty FROM photo WHERE photo_usage = 0 AND os_storage = 1 AND imgscale = 0"); echo 'Local images: ' . $x[0]['qty'] . PHP_EOL; - $x = q("SELECT COUNT(id) AS qty FROM photo WHERE resource_id IN (SELECT DISTINCT resource_id FROM photo WHERE photo_usage = 0 and os_storage = 1) AND imgscale > 0"); - echo 'Thumbnails total: ' . $x[0]['qty'] . PHP_EOL; - $x = q("SELECT COUNT(id) AS qty FROM photo WHERE resource_id IN (SELECT DISTINCT resource_id FROM photo WHERE photo_usage = 0 and os_storage = 1) AND os_storage != %d AND imgscale > 0", + $x = q("SELECT COUNT(resource_id) AS qty FROM photo WHERE photo_usage = 0 AND imgscale > 0"); + echo 'Image thumbnails: ' . $x[0]['qty'] . PHP_EOL; + $xx = intval($x[0]['qty']); + $x = q("SELECT COUNT(resource_id) AS qty FROM photo WHERE photo_usage IN (1, 2)"); + echo 'Imported profiles thumbnails: ' . $x[0]['qty'] . PHP_EOL; + $xx += intval($x[0]['qty']); + echo 'Thumbnails total: ' . $xx . PHP_EOL; + $x = q("SELECT COUNT(id) AS qty FROM photo WHERE os_storage != %d AND imgscale > 0", $storage ); echo 'Thumbnails to convert: ' . $x[0]['qty'] . PHP_EOL; @@ -41,87 +48,108 @@ if($argc == 2) { case 'fs': if($storage == 0) { - echo 'Please set system.filesystem_storage_thumbnails to 1 before move thumbnails to filesystem storage' . PHP_EOL; + echo 'Please set system.photo_storage_type to 1 before move thumbnails to filesystem storage' . PHP_EOL; break; } - $x = q("SELECT resource_id, content FROM photo WHERE photo_usage = 0 AND os_storage = 1 AND imgscale = 0"); + $cur_id = 0; + $i = 0; - if($x) { - foreach($x as $xx) { - - $n = q("SELECT id, imgscale, content FROM photo WHERE resource_id = '%s' AND os_storage != %d AND imgscale > 0", - dbesc($xx['resource_id']), - $storage - ); + $r = dbq("SELECT COUNT(id) AS max_num FROM photo WHERE os_storage = 0 AND imgscale > 0"); + $max_num = $r[0]['max_num']; - $img_path = dbunescbin($xx['content']); - - foreach($n as $nn) { - - echo '.'; - - $filename = $img_path . '-' . $nn['imgscale']; + while ($i < $max_num) { - if(! file_put_contents($filename, dbunescbin($nn['content']))) { - echo 'Failed to save file ' . $filename . PHP_EOL; + $x = q("SELECT id, uid, resource_id, content, imgscale FROM photo WHERE id > %d AND os_storage = 0 AND imgscale > 0 ORDER BY id LIMIT 10", + intval($cur_id) + ); + + if($x) { + foreach($x as $xx) { + + if ($xx['uid'] == 0 || in_array($xx['imgscale'], [4, 5, 6])) + $filename = Hashpath::path($xx['resource_id'], 'store/[data]/[xchan]', 2, 1) . '-' . $xx['imgscale']; + else { + $z = q("SELECT channel_address FROM channel WHERE channel_id = %d", + intval($xx['uid']) + ); + $filename = 'store/' . $z[0]['channel_address'] . '/' . $xx['resource_id'] . '-' . $xx['imgscale']; + } + + if(! file_put_contents($filename, dbunescbin($xx['content']))) { + echo PHP_EOL . 'Failed to save file ' . $filename . PHP_EOL; continue; } - + $z = q("UPDATE photo SET content = '%s', os_storage = 1 WHERE id = %d", dbescbin($filename), - intval($nn['id']) + intval($xx['id']) ); if(! $z) { @unlink($filename); - echo 'Failed to update metadata for saved file ' . $filename . PHP_EOL; + echo PHP_EOL . 'Failed to update metadata for saved file ' . $filename . PHP_EOL; } + $cur_id = $xx['id']; + + echo '.'; + $i++; } } + echo ($i % 100 == 0 ? $i : ''); } + echo $i . PHP_EOL . 'Total thumbnails processed: ' . $i; break; case 'db': if($storage == 1) { - echo 'Please set system.filesystem_storage_thumbnails to 0 before move thumbnails to SQL database storage' . PHP_EOL; + echo 'Please set system.photo_storage_type to 0 before move thumbnails to SQL database storage' . PHP_EOL; break; } - $x = q("SELECT resource_id FROM photo WHERE photo_usage = 0 AND os_storage = 1 AND imgscale = 0"); - - if($x) { - foreach($x as $xx) { + $cur_id = 0; + $i = 0; - $n = q("SELECT id, content FROM photo WHERE resource_id = '%s' AND os_storage != %d AND imgscale > 0", - dbesc($xx['resource_id']), - $storage - ); - - foreach($n as $nn) { + $r = dbq("SELECT COUNT(id) AS max_num FROM photo WHERE os_storage = 1 AND imgscale > 0"); + $max_num = $r[0]['max_num']; + + while ($i < $max_num) { + + $x = q("SELECT id, uid, resource_id, content, imgscale FROM photo WHERE id > %d AND os_storage = 1 AND imgscale > 0 ORDER BY id LIMIT 10", + intval($cur_id) + ); + + if($x) { + foreach($x as $xx) { - echo '.'; - - $filename = dbunescbin($nn['content']); + $filename = dbunescbin($xx['content']); + $content = file_get_contents($filename); if($content) { $z = q("UPDATE photo SET content = '%s', os_storage = 0 WHERE id = %d", dbescbin($content), - intval($nn['id']) + intval($xx['id']) ); if(! $z) { - echo 'Failed to update stored file metadata ' . $filename . PHP_EOL; + echo PHP_EOL . 'Failed to update stored file metadata ' . $filename . PHP_EOL; continue; } @unlink($filename); } else - echo 'Can not read file contents ' . $filename . PHP_EOL; + echo PHP_EOL . 'Can not read file contents ' . $filename . PHP_EOL; + + $cur_id = $xx['id']; + + echo '.'; + $i++; } } + echo ($i % 100 == 0 ? $i : ''); } + echo $i . PHP_EOL . 'Total files processed: ' . $i; break; default: @@ -129,6 +157,5 @@ if($argc == 2) { return; } - echo PHP_EOL; } diff --git a/util/storageconv.sh b/util/storageconv.sh new file mode 100755 index 000000000..90abdf0ef --- /dev/null +++ b/util/storageconv.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +WWWUSER=$(ps aux | egrep '([a|A]pache|[h|H]ttpd|lighttpd|[n|N]ginx|h2o)' | awk '{ print $1}' | uniq | grep -v `whoami` | tail -1) + +sudo -u $WWWUSER php util/storageconv $* + diff --git a/util/strings.php b/util/strings.php old mode 100644 new mode 100755 diff --git a/util/tpldebug.php b/util/tpldebug.php old mode 100644 new mode 100755 diff --git a/util/typo.php b/util/typo.php old mode 100644 new mode 100755 diff --git a/util/typohelper.php b/util/typohelper.php old mode 100644 new mode 100755 diff --git a/util/z6convert.php b/util/z6convert.php old mode 100644 new mode 100755 diff --git a/util/zotsh/README.txt b/util/zotsh/README.txt old mode 100644 new mode 100755 diff --git a/util/zotsh/easywebdav/LICENSE b/util/zotsh/easywebdav/LICENSE old mode 100644 new mode 100755 diff --git a/util/zotsh/easywebdav/__init__.py b/util/zotsh/easywebdav/__init__.py old mode 100644 new mode 100755 diff --git a/util/zotsh/easywebdav/__init__.pyc b/util/zotsh/easywebdav/__init__.pyc old mode 100644 new mode 100755 diff --git a/util/zotsh/easywebdav/__version__.py b/util/zotsh/easywebdav/__version__.py old mode 100644 new mode 100755 diff --git a/util/zotsh/easywebdav/__version__.pyc b/util/zotsh/easywebdav/__version__.pyc old mode 100644 new mode 100755 diff --git a/util/zotsh/easywebdav/client.py b/util/zotsh/easywebdav/client.py old mode 100644 new mode 100755 diff --git a/util/zotsh/easywebdav/client.pyc b/util/zotsh/easywebdav/client.pyc old mode 100644 new mode 100755 diff --git a/vendor/brick/math/CHANGELOG.md b/vendor/brick/math/CHANGELOG.md new file mode 100644 index 000000000..61ab09d18 --- /dev/null +++ b/vendor/brick/math/CHANGELOG.md @@ -0,0 +1,403 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [0.9.1](https://github.com/brick/math/releases/tag/0.9.1) - 2020-08-19 + +✨ New features + +- `BigInteger::not()` returns the bitwise `NOT` value + +🐛 **Bug fixes** + +- `BigInteger::toBytes()` could return an incorrect binary representation for some numbers +- The bitwise operations `and()`, `or()`, `xor()` on `BigInteger` could return an incorrect result when the GMP extension is not available + +## [0.9.0](https://github.com/brick/math/releases/tag/0.9.0) - 2020-08-18 + +👌 **Improvements** + +- `BigNumber::of()` now accepts `.123` and `123.` formats, both of which return a `BigDecimal` + +💥 **Breaking changes** + +- Deprecated method `BigInteger::powerMod()` has been removed - use `modPow()` instead +- Deprecated method `BigInteger::parse()` has been removed - use `fromBase()` instead + +## [0.8.9](https://github.com/brick/math/releases/tag/0.8.9) - 2020-01-08 + +⚡️ **Performance improvements** + +A few additional optimizations in `BigInteger` and `BigDecimal` when one of the operands can be returned as is. Thanks to @tomtomsen in #24. + +## [0.8.8](https://github.com/brick/math/releases/tag/0.8.8) - 2019-04-25 + +🐛 **Bug fixes** + +- `BigInteger::toBase()` could return an empty string for zero values (BCMath & Native calculators only, GMP calculator unaffected) + +✨ **New features** + +- `BigInteger::toArbitraryBase()` converts a number to an arbitrary base, using a custom alphabet +- `BigInteger::fromArbitraryBase()` converts a string in an arbitrary base, using a custom alphabet, back to a number + +These methods can be used as the foundation to convert strings between different bases/alphabets, using BigInteger as an intermediate representation. + +💩 **Deprecations** + +- `BigInteger::parse()` is now deprecated in favour of `fromBase()` + +`BigInteger::fromBase()` works the same way as `parse()`, with 2 minor differences: + +- the `$base` parameter is required, it does not default to `10` +- it throws a `NumberFormatException` instead of an `InvalidArgumentException` when the number is malformed + +## [0.8.7](https://github.com/brick/math/releases/tag/0.8.7) - 2019-04-20 + +**Improvements** + +- Safer conversion from `float` when using custom locales +- **Much faster** `NativeCalculator` implementation 🚀 + +You can expect **at least a 3x performance improvement** for common arithmetic operations when using the library on systems without GMP or BCMath; it gets exponentially faster on multiplications with a high number of digits. This is due to calculations now being performed on whole blocks of digits (the block size depending on the platform, 32-bit or 64-bit) instead of digit-by-digit as before. + +## [0.8.6](https://github.com/brick/math/releases/tag/0.8.6) - 2019-04-11 + +**New method** + +`BigNumber::sum()` returns the sum of one or more numbers. + +## [0.8.5](https://github.com/brick/math/releases/tag/0.8.5) - 2019-02-12 + +**Bug fix**: `of()` factory methods could fail when passing a `float` in environments using a `LC_NUMERIC` locale with a decimal separator other than `'.'` (#20). + +Thanks @manowark 👍 + +## [0.8.4](https://github.com/brick/math/releases/tag/0.8.4) - 2018-12-07 + +**New method** + +`BigDecimal::sqrt()` calculates the square root of a decimal number, to a given scale. + +## [0.8.3](https://github.com/brick/math/releases/tag/0.8.3) - 2018-12-06 + +**New method** + +`BigInteger::sqrt()` calculates the square root of a number (thanks @peter279k). + +**New exception** + +`NegativeNumberException` is thrown when calling `sqrt()` on a negative number. + +## [0.8.2](https://github.com/brick/math/releases/tag/0.8.2) - 2018-11-08 + +**Performance update** + +- Further improvement of `toInt()` performance +- `NativeCalculator` can now perform some multiplications more efficiently + +## [0.8.17](https://github.com/brick/math/releases/tag/0.8.17) - 2020-08-19 + +🐛 **Bug fix** + +- `BigInteger::toBytes()` could return an incorrect binary representation for some numbers +- The bitwise operations `and()`, `or()`, `xor()` on `BigInteger` could return an incorrect result when the GMP extension is not available + +## [0.8.16](https://github.com/brick/math/releases/tag/0.8.16) - 2020-08-18 + +🚑 **Critical fix** + +- This version reintroduces the deprecated `BigInteger::parse()` method, that has been removed by mistake in version `0.8.9` and should have lasted for the whole `0.8` release cycle. + +✨ **New features** + +- `BigInteger::modInverse()` calculates a modular multiplicative inverse +- `BigInteger::fromBytes()` creates a `BigInteger` from a byte string +- `BigInteger::toBytes()` converts a `BigInteger` to a byte string +- `BigInteger::randomBits()` creates a pseudo-random `BigInteger` of a given bit length +- `BigInteger::randomRange()` creates a pseudo-random `BigInteger` between two bounds + +💩 **Deprecations** + +- `BigInteger::powerMod()` is now deprecated in favour of `modPow()` + +## [0.8.15](https://github.com/brick/math/releases/tag/0.8.15) - 2020-04-15 + +🐛 **Fixes** + +- added missing `ext-json` requirement, due to `BigNumber` implementing `JsonSerializable` + +⚡️ **Optimizations** + +- additional optimization in `BigInteger::remainder()` + +## [0.8.14](https://github.com/brick/math/releases/tag/0.8.14) - 2020-02-18 + +✨ **New features** + +- `BigInteger::getLowestSetBit()` returns the index of the rightmost one bit + +## [0.8.13](https://github.com/brick/math/releases/tag/0.8.13) - 2020-02-16 + +✨ **New features** + +- `BigInteger::isEven()` tests whether the number is even +- `BigInteger::isOdd()` tests whether the number is odd +- `BigInteger::testBit()` tests if a bit is set +- `BigInteger::getBitLength()` returns the number of bits in the minimal representation of the number + +## [0.8.12](https://github.com/brick/math/releases/tag/0.8.12) - 2020-02-03 + +🛠️ **Maintenance release** + +Classes are now annotated for better static analysis with [psalm](https://psalm.dev/). + +This is a maintenance release: no bug fixes, no new features, no breaking changes. + +## [0.8.11](https://github.com/brick/math/releases/tag/0.8.11) - 2020-01-23 + +✨ **New feature** + +`BigInteger::powerMod()` performs a power-with-modulo operation. Useful for crypto. + +## [0.8.10](https://github.com/brick/math/releases/tag/0.8.10) - 2020-01-21 + +✨ **New feature** + +`BigInteger::mod()` returns the **modulo** of two numbers. The *modulo* differs from the *remainder* when the signs of the operands are different. + +## [0.8.1](https://github.com/brick/math/releases/tag/0.8.1) - 2018-11-07 + +Performance optimization of `toInt()` methods. + +## [0.8.0](https://github.com/brick/math/releases/tag/0.8.0) - 2018-10-13 + +**Breaking changes** + +The following deprecated methods have been removed. Use the new method name instead: + +| Method removed | Replacement method | +| --- | --- | +| `BigDecimal::getIntegral()` | `BigDecimal::getIntegralPart()` | +| `BigDecimal::getFraction()` | `BigDecimal::getFractionalPart()` | + +--- + +**New features** + +`BigInteger` has been augmented with 5 new methods for bitwise operations: + +| New method | Description | +| --- | --- | +| `and()` | performs a bitwise `AND` operation on two numbers | +| `or()` | performs a bitwise `OR` operation on two numbers | +| `xor()` | performs a bitwise `XOR` operation on two numbers | +| `shiftedLeft()` | returns the number shifted left by a number of bits | +| `shiftedRight()` | returns the number shifted right by a number of bits | + +Thanks to @DASPRiD 👍 + +## [0.7.3](https://github.com/brick/math/releases/tag/0.7.3) - 2018-08-20 + +**New method:** `BigDecimal::hasNonZeroFractionalPart()` + +**Renamed/deprecated methods:** + +- `BigDecimal::getIntegral()` has been renamed to `getIntegralPart()` and is now deprecated +- `BigDecimal::getFraction()` has been renamed to `getFractionalPart()` and is now deprecated + +## [0.7.2](https://github.com/brick/math/releases/tag/0.7.2) - 2018-07-21 + +**Performance update** + +`BigInteger::parse()` and `toBase()` now use GMP's built-in base conversion features when available. + +## [0.7.1](https://github.com/brick/math/releases/tag/0.7.1) - 2018-03-01 + +This is a maintenance release, no code has been changed. + +- When installed with `--no-dev`, the autoloader does not autoload tests anymore +- Tests and other files unnecessary for production are excluded from the dist package + +This will help make installations more compact. + +## [0.7.0](https://github.com/brick/math/releases/tag/0.7.0) - 2017-10-02 + +Methods renamed: + +- `BigNumber:sign()` has been renamed to `getSign()` +- `BigDecimal::unscaledValue()` has been renamed to `getUnscaledValue()` +- `BigDecimal::scale()` has been renamed to `getScale()` +- `BigDecimal::integral()` has been renamed to `getIntegral()` +- `BigDecimal::fraction()` has been renamed to `getFraction()` +- `BigRational::numerator()` has been renamed to `getNumerator()` +- `BigRational::denominator()` has been renamed to `getDenominator()` + +Classes renamed: + +- `ArithmeticException` has been renamed to `MathException` + +## [0.6.2](https://github.com/brick/math/releases/tag/0.6.2) - 2017-10-02 + +The base class for all exceptions is now `MathException`. +`ArithmeticException` has been deprecated, and will be removed in 0.7.0. + +## [0.6.1](https://github.com/brick/math/releases/tag/0.6.1) - 2017-10-02 + +A number of methods have been renamed: + +- `BigNumber:sign()` is deprecated; use `getSign()` instead +- `BigDecimal::unscaledValue()` is deprecated; use `getUnscaledValue()` instead +- `BigDecimal::scale()` is deprecated; use `getScale()` instead +- `BigDecimal::integral()` is deprecated; use `getIntegral()` instead +- `BigDecimal::fraction()` is deprecated; use `getFraction()` instead +- `BigRational::numerator()` is deprecated; use `getNumerator()` instead +- `BigRational::denominator()` is deprecated; use `getDenominator()` instead + +The old methods will be removed in version 0.7.0. + +## [0.6.0](https://github.com/brick/math/releases/tag/0.6.0) - 2017-08-25 + +- Minimum PHP version is now [7.1](https://gophp71.org/); for PHP 5.6 and PHP 7.0 support, use version `0.5` +- Deprecated method `BigDecimal::withScale()` has been removed; use `toScale()` instead +- Method `BigNumber::toInteger()` has been renamed to `toInt()` + +## [0.5.4](https://github.com/brick/math/releases/tag/0.5.4) - 2016-10-17 + +`BigNumber` classes now implement [JsonSerializable](http://php.net/manual/en/class.jsonserializable.php). +The JSON output is always a string. + +## [0.5.3](https://github.com/brick/math/releases/tag/0.5.3) - 2016-03-31 + +This is a bugfix release. Dividing by a negative power of 1 with the same scale as the dividend could trigger an incorrect optimization which resulted in a wrong result. See #6. + +## [0.5.2](https://github.com/brick/math/releases/tag/0.5.2) - 2015-08-06 + +The `$scale` parameter of `BigDecimal::dividedBy()` is now optional again. + +## [0.5.1](https://github.com/brick/math/releases/tag/0.5.1) - 2015-07-05 + +**New method: `BigNumber::toScale()`** + +This allows to convert any `BigNumber` to a `BigDecimal` with a given scale, using rounding if necessary. + +## [0.5.0](https://github.com/brick/math/releases/tag/0.5.0) - 2015-07-04 + +**New features** +- Common `BigNumber` interface for all classes, with the following methods: + - `sign()` and derived methods (`isZero()`, `isPositive()`, ...) + - `compareTo()` and derived methods (`isEqualTo()`, `isGreaterThan()`, ...) that work across different `BigNumber` types + - `toBigInteger()`, `toBigDecimal()`, `toBigRational`() conversion methods + - `toInteger()` and `toFloat()` conversion methods to native types +- Unified `of()` behaviour: every class now accepts any type of number, provided that it can be safely converted to the current type +- New method: `BigDecimal::exactlyDividedBy()`; this method automatically computes the scale of the result, provided that the division yields a finite number of digits +- New methods: `BigRational::quotient()` and `remainder()` +- Fine-grained exceptions: `DivisionByZeroException`, `RoundingNecessaryException`, `NumberFormatException` +- Factory methods `zero()`, `one()` and `ten()` available in all classes +- Rounding mode reintroduced in `BigInteger::dividedBy()` + +This release also comes with many performance improvements. + +--- + +**Breaking changes** +- `BigInteger`: + - `getSign()` is renamed to `sign()` + - `toString()` is renamed to `toBase()` + - `BigInteger::dividedBy()` now throws an exception by default if the remainder is not zero; use `quotient()` to get the previous behaviour +- `BigDecimal`: + - `getSign()` is renamed to `sign()` + - `getUnscaledValue()` is renamed to `unscaledValue()` + - `getScale()` is renamed to `scale()` + - `getIntegral()` is renamed to `integral()` + - `getFraction()` is renamed to `fraction()` + - `divideAndRemainder()` is renamed to `quotientAndRemainder()` + - `dividedBy()` now takes a **mandatory** `$scale` parameter **before** the rounding mode + - `toBigInteger()` does not accept a `$roundingMode` parameter any more + - `toBigRational()` does not simplify the fraction any more; explicitly add `->simplified()` to get the previous behaviour +- `BigRational`: + - `getSign()` is renamed to `sign()` + - `getNumerator()` is renamed to `numerator()` + - `getDenominator()` is renamed to `denominator()` + - `of()` is renamed to `nd()`, while `parse()` is renamed to `of()` +- Miscellaneous: + - `ArithmeticException` is moved to an `Exception\` sub-namespace + - `of()` factory methods now throw `NumberFormatException` instead of `InvalidArgumentException` + +## [0.4.3](https://github.com/brick/math/releases/tag/0.4.3) - 2016-03-31 + +Backport of two bug fixes from the 0.5 branch: +- `BigInteger::parse()` did not always throw `InvalidArgumentException` as expected +- Dividing by a negative power of 1 with the same scale as the dividend could trigger an incorrect optimization which resulted in a wrong result. See #6. + +## [0.4.2](https://github.com/brick/math/releases/tag/0.4.2) - 2015-06-16 + +New method: `BigDecimal::stripTrailingZeros()` + +## [0.4.1](https://github.com/brick/math/releases/tag/0.4.1) - 2015-06-12 + +Introducing a `BigRational` class, to perform calculations on fractions of any size. + +## [0.4.0](https://github.com/brick/math/releases/tag/0.4.0) - 2015-06-12 + +Rounding modes have been removed from `BigInteger`, and are now a concept specific to `BigDecimal`. + +`BigInteger::dividedBy()` now always returns the quotient of the division. + +## [0.3.5](https://github.com/brick/math/releases/tag/0.3.5) - 2016-03-31 + +Backport of two bug fixes from the 0.5 branch: + +- `BigInteger::parse()` did not always throw `InvalidArgumentException` as expected +- Dividing by a negative power of 1 with the same scale as the dividend could trigger an incorrect optimization which resulted in a wrong result. See #6. + +## [0.3.4](https://github.com/brick/math/releases/tag/0.3.4) - 2015-06-11 + +New methods: +- `BigInteger::remainder()` returns the remainder of a division only +- `BigInteger::gcd()` returns the greatest common divisor of two numbers + +## [0.3.3](https://github.com/brick/math/releases/tag/0.3.3) - 2015-06-07 + +Fix `toString()` not handling negative numbers. + +## [0.3.2](https://github.com/brick/math/releases/tag/0.3.2) - 2015-06-07 + +`BigInteger` and `BigDecimal` now have a `getSign()` method that returns: +- `-1` if the number is negative +- `0` if the number is zero +- `1` if the number is positive + +## [0.3.1](https://github.com/brick/math/releases/tag/0.3.1) - 2015-06-05 + +Minor performance improvements + +## [0.3.0](https://github.com/brick/math/releases/tag/0.3.0) - 2015-06-04 + +The `$roundingMode` and `$scale` parameters have been swapped in `BigDecimal::dividedBy()`. + +## [0.2.2](https://github.com/brick/math/releases/tag/0.2.2) - 2015-06-04 + +Stronger immutability guarantee for `BigInteger` and `BigDecimal`. + +So far, it would have been possible to break immutability of these classes by calling the `unserialize()` internal function. This release fixes that. + +## [0.2.1](https://github.com/brick/math/releases/tag/0.2.1) - 2015-06-02 + +Added `BigDecimal::divideAndRemainder()` + +## [0.2.0](https://github.com/brick/math/releases/tag/0.2.0) - 2015-05-22 + +- `min()` and `max()` do not accept an `array` any more, but a variable number of parameters +- **minimum PHP version is now 5.6** +- continuous integration with PHP 7 + +## [0.1.1](https://github.com/brick/math/releases/tag/0.1.1) - 2014-09-01 + +- Added `BigInteger::power()` +- Added HHVM support + +## [0.1.0](https://github.com/brick/math/releases/tag/0.1.0) - 2014-08-31 + +First beta release. + diff --git a/vendor/brick/math/SECURITY.md b/vendor/brick/math/SECURITY.md index 6bdc74f0d..cc8289bb5 100644 --- a/vendor/brick/math/SECURITY.md +++ b/vendor/brick/math/SECURITY.md @@ -2,10 +2,11 @@ ## Supported Versions -Only the latest release stream is supported. +Only the last two release streams are supported. | Version | Supported | | ------- | ------------------ | +| 0.9.x | :white_check_mark: | | 0.8.x | :white_check_mark: | | < 0.8 | :x: | diff --git a/vendor/brick/math/composer.json b/vendor/brick/math/composer.json index d347b6bde..c89955d12 100644 --- a/vendor/brick/math/composer.json +++ b/vendor/brick/math/composer.json @@ -14,13 +14,13 @@ ], "license": "MIT", "require": { - "php": "^7.1|^8.0", + "php": "^7.1 || ^8.0", "ext-json": "*" }, "require-dev": { - "phpunit/phpunit": "^7.5.15|^8.5", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", "php-coveralls/php-coveralls": "^2.2", - "vimeo/psalm": "^3.5" + "vimeo/psalm": "4.3.2" }, "autoload": { "psr-4": { diff --git a/vendor/brick/math/psalm-baseline.xml b/vendor/brick/math/psalm-baseline.xml deleted file mode 100644 index fe05b998c..000000000 --- a/vendor/brick/math/psalm-baseline.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - string - string - string - - - [$q, $r] - - - array - - - \bcdiv($a, $b, 0) - \bcmod($a, $b) - \bcpowmod($base, $exp, $mod, 0) - - - - - $a - $a - $a - $b - $blockA - $blockA - - - $i - $i - $i - $j - - - $e / 2 - - - diff --git a/vendor/brick/math/psalm.xml b/vendor/brick/math/psalm.xml deleted file mode 100644 index 123263ef4..000000000 --- a/vendor/brick/math/psalm.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/brick/math/random-tests.php b/vendor/brick/math/random-tests.php index c59529f6f..d9053fc11 100644 --- a/vendor/brick/math/random-tests.php +++ b/vendor/brick/math/random-tests.php @@ -64,7 +64,7 @@ use Brick\Math\Internal\Calculator; * @param string $a The left operand. * @param string $b The right operand. */ - function runTests(string $a, string $b) : void + private function runTests(string $a, string $b) : void { $this->test("$a + $b", function(Calculator $c) use($a, $b) { return $c->add($a, $b); @@ -123,8 +123,11 @@ use Brick\Math\Internal\Calculator; */ private function test(string $test, Closure $callback) : void { - static $counter = 0; - static $lastOutputTime = null; + static $testCounter = 0; + static $lastOutputTime = 0.0; + static $currentSecond = 0; + static $currentSecondTestCounter = 0; + static $testsPerSecond = 0; $gmpResult = $callback($this->gmp); $bcmathResult = $callback($this->bcmath); @@ -138,13 +141,20 @@ use Brick\Math\Internal\Calculator; self::failure('GMP', 'Native', $test); } - $counter++; - $time = microtime(true); + $testCounter++; + $currentSecondTestCounter++; - if ($lastOutputTime === null) { - $lastOutputTime = $time; - } elseif ($time - $lastOutputTime >= 0.1) { - echo "\r", number_format($counter); + $time = microtime(true); + $second = (int) $time; + + if ($second !== $currentSecond) { + $currentSecond = $second; + $testsPerSecond = $currentSecondTestCounter; + $currentSecondTestCounter = 0; + } + + if ($time - $lastOutputTime >= 0.1) { + echo "\r", number_format($testCounter), ' (', number_format($testsPerSecond) . ' / s)'; $lastOutputTime = $time; } } diff --git a/vendor/brick/math/src/BigDecimal.php b/vendor/brick/math/src/BigDecimal.php index 287177140..7707b166e 100644 --- a/vendor/brick/math/src/BigDecimal.php +++ b/vendor/brick/math/src/BigDecimal.php @@ -96,7 +96,10 @@ final class BigDecimal extends BigNumber */ public static function zero() : BigDecimal { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigDecimal|null $zero + */ static $zero; if ($zero === null) { @@ -115,7 +118,10 @@ final class BigDecimal extends BigNumber */ public static function one() : BigDecimal { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigDecimal|null $one + */ static $one; if ($one === null) { @@ -134,7 +140,10 @@ final class BigDecimal extends BigNumber */ public static function ten() : BigDecimal { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigDecimal|null $ten + */ static $ten; if ($ten === null) { @@ -677,11 +686,7 @@ final class BigDecimal extends BigNumber */ public function toBigInteger() : BigInteger { - if ($this->scale === 0) { - $zeroScaleDecimal = $this; - } else { - $zeroScaleDecimal = $this->dividedBy(1, 0); - } + $zeroScaleDecimal = $this->scale === 0 ? $this : $this->dividedBy(1, 0); return BigInteger::create($zeroScaleDecimal->value); } @@ -763,6 +768,7 @@ final class BigDecimal extends BigNumber * This method is only here to implement interface Serializable and cannot be accessed directly. * * @internal + * @psalm-suppress RedundantPropertyInitializationCheck * * @param string $value * diff --git a/vendor/brick/math/src/BigInteger.php b/vendor/brick/math/src/BigInteger.php index cee3ce82b..0dcc8f3b3 100644 --- a/vendor/brick/math/src/BigInteger.php +++ b/vendor/brick/math/src/BigInteger.php @@ -217,6 +217,8 @@ final class BigInteger extends BigNumber * * Using the default random bytes generator, this method is suitable for cryptographic use. * + * @psalm-param callable(int): string $randomBytesGenerator + * * @param int $numBits The number of bits. * @param callable|null $randomBytesGenerator A function that accepts a number of bytes as an integer, and returns a * string of random bytes of the given length. Defaults to the @@ -256,6 +258,8 @@ final class BigInteger extends BigNumber * * Using the default random bytes generator, this method is suitable for cryptographic use. * + * @psalm-param (callable(int): string)|null $randomBytesGenerator + * * @param BigNumber|int|float|string $min The lower bound. Must be convertible to a BigInteger. * @param BigNumber|int|float|string $max The upper bound. Must be convertible to a BigInteger. * @param callable|null $randomBytesGenerator A function that accepts a number of bytes as an integer, @@ -300,7 +304,10 @@ final class BigInteger extends BigNumber */ public static function zero() : BigInteger { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigInteger|null $zero + */ static $zero; if ($zero === null) { @@ -319,7 +326,10 @@ final class BigInteger extends BigNumber */ public static function one() : BigInteger { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigInteger|null $one + */ static $one; if ($one === null) { @@ -338,7 +348,10 @@ final class BigInteger extends BigNumber */ public static function ten() : BigInteger { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigInteger|null $ten + */ static $ten; if ($ten === null) { @@ -1070,7 +1083,10 @@ final class BigInteger extends BigNumber if ($signed) { if ($this->isNegative()) { - $hex = \bin2hex(~\hex2bin($hex)); + $bin = \hex2bin($hex); + assert($bin !== false); + + $hex = \bin2hex(~$bin); $hex = self::fromBase($hex, 16)->plus(1)->toBase(16); $hexLength = \strlen($hex); @@ -1116,6 +1132,7 @@ final class BigInteger extends BigNumber * This method is only here to implement interface Serializable and cannot be accessed directly. * * @internal + * @psalm-suppress RedundantPropertyInitializationCheck * * @param string $value * diff --git a/vendor/brick/math/src/BigNumber.php b/vendor/brick/math/src/BigNumber.php index 59fcc7ce5..38c8c554e 100644 --- a/vendor/brick/math/src/BigNumber.php +++ b/vendor/brick/math/src/BigNumber.php @@ -67,13 +67,10 @@ abstract class BigNumber implements \Serializable, \JsonSerializable return new BigInteger((string) $value); } - if (\is_float($value)) { - $value = self::floatToString($value); - } else { - $value = (string) $value; - } + /** @psalm-suppress RedundantCastGivenDocblockType We cannot trust the untyped $value here! */ + $value = \is_float($value) ? self::floatToString($value) : (string) $value; - $throw = function() use ($value) : void { + $throw = static function() use ($value) : void { throw new NumberFormatException(\sprintf( 'The given value "%s" does not represent a valid number.', $value @@ -84,7 +81,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable $throw(); } - $getMatch = function(string $value) use ($matches) : ?string { + $getMatch = static function(string $value) use ($matches) : ?string { return isset($matches[$value]) && $matches[$value] !== '' ? $matches[$value] : null; }; @@ -93,7 +90,13 @@ abstract class BigNumber implements \Serializable, \JsonSerializable $denominator = $getMatch('denominator'); if ($numerator !== null) { - $numerator = self::cleanUp($sign . $numerator); + assert($denominator !== null); + + if ($sign !== null) { + $numerator = $sign . $numerator; + } + + $numerator = self::cleanUp($numerator); $denominator = self::cleanUp($denominator); if ($denominator === '0') { @@ -121,14 +124,14 @@ abstract class BigNumber implements \Serializable, \JsonSerializable } if ($point !== null || $exponent !== null) { - $fractional = $fractional ?? ''; - $exponent = $exponent !== null ? (int) $exponent : 0; + $fractional = ($fractional ?? ''); + $exponent = ($exponent !== null) ? (int) $exponent : 0; if ($exponent === PHP_INT_MIN || $exponent === PHP_INT_MAX) { throw new NumberFormatException('Exponent too large.'); } - $unscaledValue = self::cleanUp($sign . $integral . $fractional); + $unscaledValue = self::cleanUp(($sign ?? ''). $integral . $fractional); $scale = \strlen($fractional) - $exponent; @@ -142,7 +145,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable return new BigDecimal($unscaledValue, $scale); } - $integral = self::cleanUp($sign . $integral); + $integral = self::cleanUp(($sign ?? '') . $integral); return new BigInteger($integral); } @@ -181,10 +184,11 @@ abstract class BigNumber implements \Serializable, \JsonSerializable * @return static * * @psalm-pure + * @psalm-suppress TooManyArguments + * @psalm-suppress UnsafeInstantiation */ protected static function create(... $args) : BigNumber { - /** @psalm-suppress TooManyArguments */ return new static(... $args); } @@ -199,6 +203,8 @@ abstract class BigNumber implements \Serializable, \JsonSerializable * @throws \InvalidArgumentException If no values are given. * @throws MathException If an argument is not valid. * + * @psalm-suppress LessSpecificReturnStatement + * @psalm-suppress MoreSpecificReturnType * @psalm-pure */ public static function min(...$values) : BigNumber @@ -231,6 +237,8 @@ abstract class BigNumber implements \Serializable, \JsonSerializable * @throws \InvalidArgumentException If no values are given. * @throws MathException If an argument is not valid. * + * @psalm-suppress LessSpecificReturnStatement + * @psalm-suppress MoreSpecificReturnType * @psalm-pure */ public static function max(...$values) : BigNumber @@ -263,6 +271,8 @@ abstract class BigNumber implements \Serializable, \JsonSerializable * @throws \InvalidArgumentException If no values are given. * @throws MathException If an argument is not valid. * + * @psalm-suppress LessSpecificReturnStatement + * @psalm-suppress MoreSpecificReturnType * @psalm-pure */ public static function sum(...$values) : BigNumber @@ -273,11 +283,7 @@ abstract class BigNumber implements \Serializable, \JsonSerializable foreach ($values as $value) { $value = static::of($value); - if ($sum === null) { - $sum = $value; - } else { - $sum = self::add($sum, $value); - } + $sum = $sum === null ? $value : self::add($sum, $value); } if ($sum === null) { diff --git a/vendor/brick/math/src/BigRational.php b/vendor/brick/math/src/BigRational.php index ff035c5c0..7fbabd7f1 100644 --- a/vendor/brick/math/src/BigRational.php +++ b/vendor/brick/math/src/BigRational.php @@ -108,7 +108,10 @@ final class BigRational extends BigNumber */ public static function zero() : BigRational { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigRational|null $zero + */ static $zero; if ($zero === null) { @@ -127,7 +130,10 @@ final class BigRational extends BigNumber */ public static function one() : BigRational { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigRational|null $one + */ static $one; if ($one === null) { @@ -146,7 +152,10 @@ final class BigRational extends BigNumber */ public static function ten() : BigRational { - /** @psalm-suppress ImpureStaticVariable */ + /** + * @psalm-suppress ImpureStaticVariable + * @var BigRational|null $ten + */ static $ten; if ($ten === null) { @@ -458,6 +467,7 @@ final class BigRational extends BigNumber * This method is only here to implement interface Serializable and cannot be accessed directly. * * @internal + * @psalm-suppress RedundantPropertyInitializationCheck * * @param string $value * diff --git a/vendor/brick/math/src/Internal/Calculator.php b/vendor/brick/math/src/Internal/Calculator.php index 44795acbb..99b478193 100644 --- a/vendor/brick/math/src/Internal/Calculator.php +++ b/vendor/brick/math/src/Internal/Calculator.php @@ -677,6 +677,9 @@ abstract class Calculator } /** + * @psalm-suppress InvalidOperand + * @see https://github.com/vimeo/psalm/issues/4456 + * * @param string $number A positive, binary number. * * @return string @@ -685,7 +688,7 @@ abstract class Calculator { $xor = \str_repeat("\xff", \strlen($number)); - $number = $number ^ $xor; + $number ^= $xor; for ($i = \strlen($number) - 1; $i >= 0; $i--) { $byte = \ord($number[$i]); diff --git a/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php b/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php index c087245bd..6632b378a 100644 --- a/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php +++ b/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php @@ -41,6 +41,9 @@ class BcMathCalculator extends Calculator /** * {@inheritdoc} + * + * @psalm-suppress InvalidNullableReturnType + * @psalm-suppress NullableReturnStatement */ public function divQ(string $a, string $b) : string { @@ -49,9 +52,16 @@ class BcMathCalculator extends Calculator /** * {@inheritdoc} + * + * @psalm-suppress InvalidNullableReturnType + * @psalm-suppress NullableReturnStatement */ public function divR(string $a, string $b) : string { + if (version_compare(PHP_VERSION, '7.2') >= 0) { + return \bcmod($a, $b, 0); + } + return \bcmod($a, $b); } @@ -61,7 +71,15 @@ class BcMathCalculator extends Calculator public function divQR(string $a, string $b) : array { $q = \bcdiv($a, $b, 0); - $r = \bcmod($a, $b); + + if (version_compare(PHP_VERSION, '7.2') >= 0) { + $r = \bcmod($a, $b, 0); + } else { + $r = \bcmod($a, $b); + } + + assert($q !== null); + assert($r !== null); return [$q, $r]; } @@ -76,6 +94,9 @@ class BcMathCalculator extends Calculator /** * {@inheritdoc} + * + * @psalm-suppress InvalidNullableReturnType + * @psalm-suppress NullableReturnStatement */ public function modPow(string $base, string $exp, string $mod) : string { @@ -84,6 +105,9 @@ class BcMathCalculator extends Calculator /** * {@inheritDoc} + * + * @psalm-suppress NullableReturnStatement + * @psalm-suppress InvalidNullableReturnType */ public function sqrt(string $n) : string { diff --git a/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php b/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php index d248e6849..a5f8a9b48 100644 --- a/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php +++ b/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php @@ -53,6 +53,10 @@ class NativeCalculator extends Calculator */ public function add(string $a, string $b) : string { + /** + * @psalm-var numeric-string $a + * @psalm-var numeric-string $b + */ $result = $a + $b; if (is_int($result)) { @@ -69,11 +73,7 @@ class NativeCalculator extends Calculator [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); - if ($aNeg === $bNeg) { - $result = $this->doAdd($aDig, $bDig); - } else { - $result = $this->doSub($aDig, $bDig); - } + $result = $aNeg === $bNeg ? $this->doAdd($aDig, $bDig) : $this->doSub($aDig, $bDig); if ($aNeg) { $result = $this->neg($result); @@ -95,6 +95,10 @@ class NativeCalculator extends Calculator */ public function mul(string $a, string $b) : string { + /** + * @psalm-var numeric-string $a + * @psalm-var numeric-string $b + */ $result = $a * $b; if (is_int($result)) { @@ -169,9 +173,11 @@ class NativeCalculator extends Calculator return [$this->neg($a), '0']; } + /** @psalm-var numeric-string $a */ $na = $a * 1; // cast to number if (is_int($na)) { + /** @psalm-var numeric-string $b */ $nb = $b * 1; if (is_int($nb)) { @@ -221,6 +227,8 @@ class NativeCalculator extends Calculator $e -= $odd; $aa = $this->mul($a, $a); + + /** @psalm-suppress PossiblyInvalidArgument We're sure that $e / 2 is an int now */ $result = $this->pow($aa, $e / 2); if ($odd === 1) { @@ -316,10 +324,14 @@ class NativeCalculator extends Calculator if ($i < 0) { $blockLength += $i; + /** @psalm-suppress LoopInvalidation */ $i = 0; } + /** @psalm-var numeric-string $blockA */ $blockA = \substr($a, $i, $blockLength); + + /** @psalm-var numeric-string $blockB */ $blockB = \substr($b, $i, $blockLength); $sum = (string) ($blockA + $blockB + $carry); @@ -386,10 +398,14 @@ class NativeCalculator extends Calculator if ($i < 0) { $blockLength += $i; + /** @psalm-suppress LoopInvalidation */ $i = 0; } + /** @psalm-var numeric-string $blockA */ $blockA = \substr($a, $i, $blockLength); + + /** @psalm-var numeric-string $blockB */ $blockB = \substr($b, $i, $blockLength); $sum = $blockA - $blockB - $carry; @@ -450,6 +466,7 @@ class NativeCalculator extends Calculator if ($i < 0) { $blockALength += $i; + /** @psalm-suppress LoopInvalidation */ $i = 0; } @@ -463,6 +480,7 @@ class NativeCalculator extends Calculator if ($j < 0) { $blockBLength += $j; + /** @psalm-suppress LoopInvalidation */ $j = 0; } diff --git a/vendor/commerceguys/intl/scripts/fetch_data.sh b/vendor/commerceguys/intl/scripts/fetch_data.sh old mode 100755 new mode 100644 diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php index 1a58957d2..4d989a212 100644 --- a/vendor/composer/ClassLoader.php +++ b/vendor/composer/ClassLoader.php @@ -42,6 +42,8 @@ namespace Composer\Autoload; */ class ClassLoader { + private $vendorDir; + // PSR-4 private $prefixLengthsPsr4 = array(); private $prefixDirsPsr4 = array(); @@ -57,6 +59,13 @@ class ClassLoader private $missingClasses = array(); private $apcuPrefix; + private static $registeredLoaders = array(); + + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + } + public function getPrefixes() { if (!empty($this->prefixesPsr0)) { @@ -300,6 +309,15 @@ class ClassLoader public function register($prepend = false) { spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + //no-op + } elseif ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } } /** @@ -308,6 +326,10 @@ class ClassLoader public function unregister() { spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } } /** @@ -367,6 +389,16 @@ class ClassLoader return $file; } + /** + * Returns the currently registered loaders indexed by their corresponding vendor directories. + * + * @return self[] + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + private function findFileWithExtension($class, $ext) { // PSR-4 lookup diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php index 66e0912d0..0e6b84d2a 100644 --- a/vendor/composer/InstalledVersions.php +++ b/vendor/composer/InstalledVersions.php @@ -1,5 +1,15 @@ array ( ), - 'reference' => 'f9d24d07dd67148a652610b002126e1e80b11839', + 'reference' => '6fae291cc8ec69a74d0c1673186b3d8f319378d4', 'name' => 'zotlabs/hubzilla', ), 'versions' => @@ -35,12 +45,12 @@ private static $installed = array ( ), 'brick/math' => array ( - 'pretty_version' => '0.9.1', - 'version' => '0.9.1.0', + 'pretty_version' => '0.9.2', + 'version' => '0.9.2.0', 'aliases' => array ( ), - 'reference' => '283a40c901101e66de7061bd359252c013dcc43c', + 'reference' => 'dff976c2f3487d42c1db75a3b180e2b9f0e72ce0', ), 'bshaffer/oauth2-server-php' => array ( @@ -114,6 +124,15 @@ private static $installed = array ( ), 'reference' => '9e253f26cef9a9066f53f200cc3e0684018cb5b5', ), + 'phpseclib/phpseclib' => + array ( + 'pretty_version' => '2.0.30', + 'version' => '2.0.30.0', + 'aliases' => + array ( + ), + 'reference' => '136b9ca7eebef78be14abf90d65c5e57b6bc5d36', + ), 'psr/log' => array ( 'pretty_version' => '1.1.3', @@ -125,12 +144,12 @@ private static $installed = array ( ), 'ramsey/collection' => array ( - 'pretty_version' => '1.1.1', - 'version' => '1.1.1.0', + 'pretty_version' => '1.1.3', + 'version' => '1.1.3.0', 'aliases' => array ( ), - 'reference' => '24d93aefb2cd786b7edd9f45b554aea20b28b9b1', + 'reference' => '28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1', ), 'ramsey/uuid' => array ( @@ -150,12 +169,12 @@ private static $installed = array ( ), 'sabre/dav' => array ( - 'pretty_version' => '4.1.3', - 'version' => '4.1.3.0', + 'pretty_version' => '4.1.5', + 'version' => '4.1.5.0', 'aliases' => array ( ), - 'reference' => 'b903eeedfbdcd6cab7935661ec6dc2d90cdf8a1e', + 'reference' => 'c1afdc77a95efea6ee40c03c45f57c3c0c80ec22', ), 'sabre/event' => array ( @@ -186,12 +205,12 @@ private static $installed = array ( ), 'sabre/vobject' => array ( - 'pretty_version' => '4.3.3', - 'version' => '4.3.3.0', + 'pretty_version' => '4.3.5', + 'version' => '4.3.5.0', 'aliases' => array ( ), - 'reference' => '58f9f9b46a1080c0130bd86f4df9a568aacb9c79', + 'reference' => 'd8a0a9ae215a8acfb51afc29101c7344670b9c83', ), 'sabre/xml' => array ( @@ -213,36 +232,36 @@ private static $installed = array ( ), 'smarty/smarty' => array ( - 'pretty_version' => 'v3.1.36', - 'version' => '3.1.36.0', + 'pretty_version' => 'v3.1.38', + 'version' => '3.1.38.0', 'aliases' => array ( ), - 'reference' => 'fd148f7ade295014fff77f89ee3d5b20d9d55451', + 'reference' => '63b3c0aed0f614880cda21a5c08c606e97b489bb', ), 'symfony/polyfill-ctype' => array ( - 'pretty_version' => 'v1.20.0', - 'version' => '1.20.0.0', + 'pretty_version' => 'v1.22.0', + 'version' => '1.22.0.0', 'aliases' => array ( ), - 'reference' => 'f4ba089a5b6366e453971d3aad5fe8e897b37f41', + 'reference' => 'c6c942b1ac76c82448322025e084cadc56048b4e', ), 'twbs/bootstrap' => array ( - 'pretty_version' => 'v4.5.3', - 'version' => '4.5.3.0', + 'pretty_version' => 'v4.6.0', + 'version' => '4.6.0.0', 'aliases' => array ( ), - 'reference' => 'a716fb03f965dc0846df479e14388b1b4b93d7ce', + 'reference' => '6ffb0b48e455430f8a5359ed689ad64c1143fac2', ), 'twitter/bootstrap' => array ( 'replaced' => array ( - 0 => 'v4.5.3', + 0 => 'v4.6.0', ), ), 'zotlabs/hubzilla' => @@ -252,7 +271,7 @@ private static $installed = array ( 'aliases' => array ( ), - 'reference' => 'f9d24d07dd67148a652610b002126e1e80b11839', + 'reference' => '6fae291cc8ec69a74d0c1673186b3d8f319378d4', ), ), ); diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 26b7fec8e..cf769556b 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -1082,8 +1082,10 @@ return array( 'Zotlabs\\Access\\Permissions' => $baseDir . '/Zotlabs/Access/Permissions.php', 'Zotlabs\\Daemon\\Addon' => $baseDir . '/Zotlabs/Daemon/Addon.php', 'Zotlabs\\Daemon\\Cache_embeds' => $baseDir . '/Zotlabs/Daemon/Cache_embeds.php', + 'Zotlabs\\Daemon\\Cache_query' => $baseDir . '/Zotlabs/Daemon/Cache_query.php', 'Zotlabs\\Daemon\\Checksites' => $baseDir . '/Zotlabs/Daemon/Checksites.php', 'Zotlabs\\Daemon\\Cli_suggest' => $baseDir . '/Zotlabs/Daemon/Cli_suggest.php', + 'Zotlabs\\Daemon\\Convo' => $baseDir . '/Zotlabs/Daemon/Convo.php', 'Zotlabs\\Daemon\\Cron' => $baseDir . '/Zotlabs/Daemon/Cron.php', 'Zotlabs\\Daemon\\Cron_daily' => $baseDir . '/Zotlabs/Daemon/Cron_daily.php', 'Zotlabs\\Daemon\\Cron_weekly' => $baseDir . '/Zotlabs/Daemon/Cron_weekly.php', @@ -1113,6 +1115,7 @@ return array( 'Zotlabs\\Identity\\OAuth2Storage' => $baseDir . '/Zotlabs/Identity/OAuth2Storage.php', 'Zotlabs\\Identity\\ProfilePhoto' => $baseDir . '/Zotlabs/Identity/ProfilePhoto.php', 'Zotlabs\\Lib\\AConfig' => $baseDir . '/Zotlabs/Lib/AConfig.php', + 'Zotlabs\\Lib\\ASCollection' => $baseDir . '/Zotlabs/Lib/ASCollection.php', 'Zotlabs\\Lib\\AbConfig' => $baseDir . '/Zotlabs/Lib/AbConfig.php', 'Zotlabs\\Lib\\AccessList' => $baseDir . '/Zotlabs/Lib/AccessList.php', 'Zotlabs\\Lib\\Activity' => $baseDir . '/Zotlabs/Lib/Activity.php', @@ -1123,14 +1126,17 @@ return array( 'Zotlabs\\Lib\\Chatroom' => $baseDir . '/Zotlabs/Lib/Chatroom.php', 'Zotlabs\\Lib\\Config' => $baseDir . '/Zotlabs/Lib/Config.php', 'Zotlabs\\Lib\\Connect' => $baseDir . '/Zotlabs/Lib/Connect.php', + 'Zotlabs\\Lib\\Crypto' => $baseDir . '/Zotlabs/Lib/Crypto.php', 'Zotlabs\\Lib\\DB_Upgrade' => $baseDir . '/Zotlabs/Lib/DB_Upgrade.php', 'Zotlabs\\Lib\\DReport' => $baseDir . '/Zotlabs/Lib/DReport.php', 'Zotlabs\\Lib\\Enotify' => $baseDir . '/Zotlabs/Lib/Enotify.php', 'Zotlabs\\Lib\\ExtendedZip' => $baseDir . '/Zotlabs/Lib/ExtendedZip.php', 'Zotlabs\\Lib\\Group' => $baseDir . '/Zotlabs/Lib/Group.php', + 'Zotlabs\\Lib\\Hashpath' => $baseDir . '/Zotlabs/Lib/Hashpath.php', 'Zotlabs\\Lib\\IConfig' => $baseDir . '/Zotlabs/Lib/IConfig.php', 'Zotlabs\\Lib\\Img_filesize' => $baseDir . '/Zotlabs/Lib/Img_filesize.php', 'Zotlabs\\Lib\\JSalmon' => $baseDir . '/Zotlabs/Lib/JSalmon.php', + 'Zotlabs\\Lib\\Keyutils' => $baseDir . '/Zotlabs/Lib/Keyutils.php', 'Zotlabs\\Lib\\LDSignatures' => $baseDir . '/Zotlabs/Lib/LDSignatures.php', 'Zotlabs\\Lib\\Libsync' => $baseDir . '/Zotlabs/Lib/Libsync.php', 'Zotlabs\\Lib\\Libzot' => $baseDir . '/Zotlabs/Lib/Libzot.php', @@ -1646,6 +1652,9 @@ return array( 'Zotlabs\\Update\\_1238' => $baseDir . '/Zotlabs/Update/_1238.php', 'Zotlabs\\Update\\_1239' => $baseDir . '/Zotlabs/Update/_1239.php', 'Zotlabs\\Update\\_1240' => $baseDir . '/Zotlabs/Update/_1240.php', + 'Zotlabs\\Update\\_1241' => $baseDir . '/Zotlabs/Update/_1241.php', + 'Zotlabs\\Update\\_1242' => $baseDir . '/Zotlabs/Update/_1242.php', + 'Zotlabs\\Update\\_1243' => $baseDir . '/Zotlabs/Update/_1243.php', 'Zotlabs\\Web\\Controller' => $baseDir . '/Zotlabs/Web/Controller.php', 'Zotlabs\\Web\\HTTPHeaders' => $baseDir . '/Zotlabs/Web/HTTPHeaders.php', 'Zotlabs\\Web\\HTTPSig' => $baseDir . '/Zotlabs/Web/HTTPSig.php', @@ -1728,4 +1737,28 @@ return array( 'Zotlabs\\Zot\\IHandler' => $baseDir . '/Zotlabs/Zot/IHandler.php', 'Zotlabs\\Zot\\Receiver' => $baseDir . '/Zotlabs/Zot/Receiver.php', 'Zotlabs\\Zot\\ZotHandler' => $baseDir . '/Zotlabs/Zot/ZotHandler.php', + 'phpseclib\\Crypt\\AES' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/AES.php', + 'phpseclib\\Crypt\\Base' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Base.php', + 'phpseclib\\Crypt\\Blowfish' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php', + 'phpseclib\\Crypt\\DES' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/DES.php', + 'phpseclib\\Crypt\\Hash' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Hash.php', + 'phpseclib\\Crypt\\RC2' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/RC2.php', + 'phpseclib\\Crypt\\RC4' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/RC4.php', + 'phpseclib\\Crypt\\RSA' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/RSA.php', + 'phpseclib\\Crypt\\Random' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Random.php', + 'phpseclib\\Crypt\\Rijndael' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php', + 'phpseclib\\Crypt\\TripleDES' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php', + 'phpseclib\\Crypt\\Twofish' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php', + 'phpseclib\\File\\ANSI' => $vendorDir . '/phpseclib/phpseclib/phpseclib/File/ANSI.php', + 'phpseclib\\File\\ASN1' => $vendorDir . '/phpseclib/phpseclib/phpseclib/File/ASN1.php', + 'phpseclib\\File\\ASN1\\Element' => $vendorDir . '/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php', + 'phpseclib\\File\\X509' => $vendorDir . '/phpseclib/phpseclib/phpseclib/File/X509.php', + 'phpseclib\\Math\\BigInteger' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Math/BigInteger.php', + 'phpseclib\\Net\\SCP' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Net/SCP.php', + 'phpseclib\\Net\\SFTP' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Net/SFTP.php', + 'phpseclib\\Net\\SFTP\\Stream' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php', + 'phpseclib\\Net\\SSH1' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Net/SSH1.php', + 'phpseclib\\Net\\SSH2' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Net/SSH2.php', + 'phpseclib\\System\\SSH\\Agent' => $vendorDir . '/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php', + 'phpseclib\\System\\SSH\\Agent\\Identity' => $vendorDir . '/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php', ); diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index 269b50330..4f9ca4d0b 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -15,5 +15,6 @@ return array( 'ebdb698ed4152ae445614b69b5e4bb6a' => $vendorDir . '/sabre/http/lib/functions.php', '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', + 'decc78cc4436b1292c6c0d151b19445c' => $vendorDir . '/phpseclib/phpseclib/phpseclib/bootstrap.php', 'e39a8b23c42d4e1452234d762b03835a' => $vendorDir . '/ramsey/uuid/src/functions.php', ); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index 59c2faa28..b6a4c826f 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -6,6 +6,7 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( + 'phpseclib\\' => array($vendorDir . '/phpseclib/phpseclib/phpseclib'), 'Zotlabs\\' => array($baseDir . '/Zotlabs'), 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), 'Sabre\\Xml\\' => array($vendorDir . '/sabre/xml/lib'), diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 264e26beb..fbfac821c 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -25,7 +25,7 @@ class ComposerAutoloaderInit7b34d7e50a62201ec5d5e526a5b8b35d require __DIR__ . '/platform_check.php'; spl_autoload_register(array('ComposerAutoloaderInit7b34d7e50a62201ec5d5e526a5b8b35d', 'loadClassLoader'), true, true); - self::$loader = $loader = new \Composer\Autoload\ClassLoader(); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); spl_autoload_unregister(array('ComposerAutoloaderInit7b34d7e50a62201ec5d5e526a5b8b35d', 'loadClassLoader')); $includePaths = require __DIR__ . '/include_paths.php'; diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 6988dc0b4..daa4919d7 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -16,10 +16,15 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'ebdb698ed4152ae445614b69b5e4bb6a' => __DIR__ . '/..' . '/sabre/http/lib/functions.php', '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', + 'decc78cc4436b1292c6c0d151b19445c' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/bootstrap.php', 'e39a8b23c42d4e1452234d762b03835a' => __DIR__ . '/..' . '/ramsey/uuid/src/functions.php', ); public static $prefixLengthsPsr4 = array ( + 'p' => + array ( + 'phpseclib\\' => 10, + ), 'Z' => array ( 'Zotlabs\\' => 8, @@ -73,6 +78,10 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d ); public static $prefixDirsPsr4 = array ( + 'phpseclib\\' => + array ( + 0 => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib', + ), 'Zotlabs\\' => array ( 0 => __DIR__ . '/../..' . '/Zotlabs', @@ -1263,8 +1272,10 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Access\\Permissions' => __DIR__ . '/../..' . '/Zotlabs/Access/Permissions.php', 'Zotlabs\\Daemon\\Addon' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Addon.php', 'Zotlabs\\Daemon\\Cache_embeds' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Cache_embeds.php', + 'Zotlabs\\Daemon\\Cache_query' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Cache_query.php', 'Zotlabs\\Daemon\\Checksites' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Checksites.php', 'Zotlabs\\Daemon\\Cli_suggest' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Cli_suggest.php', + 'Zotlabs\\Daemon\\Convo' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Convo.php', 'Zotlabs\\Daemon\\Cron' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Cron.php', 'Zotlabs\\Daemon\\Cron_daily' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Cron_daily.php', 'Zotlabs\\Daemon\\Cron_weekly' => __DIR__ . '/../..' . '/Zotlabs/Daemon/Cron_weekly.php', @@ -1294,6 +1305,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Identity\\OAuth2Storage' => __DIR__ . '/../..' . '/Zotlabs/Identity/OAuth2Storage.php', 'Zotlabs\\Identity\\ProfilePhoto' => __DIR__ . '/../..' . '/Zotlabs/Identity/ProfilePhoto.php', 'Zotlabs\\Lib\\AConfig' => __DIR__ . '/../..' . '/Zotlabs/Lib/AConfig.php', + 'Zotlabs\\Lib\\ASCollection' => __DIR__ . '/../..' . '/Zotlabs/Lib/ASCollection.php', 'Zotlabs\\Lib\\AbConfig' => __DIR__ . '/../..' . '/Zotlabs/Lib/AbConfig.php', 'Zotlabs\\Lib\\AccessList' => __DIR__ . '/../..' . '/Zotlabs/Lib/AccessList.php', 'Zotlabs\\Lib\\Activity' => __DIR__ . '/../..' . '/Zotlabs/Lib/Activity.php', @@ -1304,14 +1316,17 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Lib\\Chatroom' => __DIR__ . '/../..' . '/Zotlabs/Lib/Chatroom.php', 'Zotlabs\\Lib\\Config' => __DIR__ . '/../..' . '/Zotlabs/Lib/Config.php', 'Zotlabs\\Lib\\Connect' => __DIR__ . '/../..' . '/Zotlabs/Lib/Connect.php', + 'Zotlabs\\Lib\\Crypto' => __DIR__ . '/../..' . '/Zotlabs/Lib/Crypto.php', 'Zotlabs\\Lib\\DB_Upgrade' => __DIR__ . '/../..' . '/Zotlabs/Lib/DB_Upgrade.php', 'Zotlabs\\Lib\\DReport' => __DIR__ . '/../..' . '/Zotlabs/Lib/DReport.php', 'Zotlabs\\Lib\\Enotify' => __DIR__ . '/../..' . '/Zotlabs/Lib/Enotify.php', 'Zotlabs\\Lib\\ExtendedZip' => __DIR__ . '/../..' . '/Zotlabs/Lib/ExtendedZip.php', 'Zotlabs\\Lib\\Group' => __DIR__ . '/../..' . '/Zotlabs/Lib/Group.php', + 'Zotlabs\\Lib\\Hashpath' => __DIR__ . '/../..' . '/Zotlabs/Lib/Hashpath.php', 'Zotlabs\\Lib\\IConfig' => __DIR__ . '/../..' . '/Zotlabs/Lib/IConfig.php', 'Zotlabs\\Lib\\Img_filesize' => __DIR__ . '/../..' . '/Zotlabs/Lib/Img_filesize.php', 'Zotlabs\\Lib\\JSalmon' => __DIR__ . '/../..' . '/Zotlabs/Lib/JSalmon.php', + 'Zotlabs\\Lib\\Keyutils' => __DIR__ . '/../..' . '/Zotlabs/Lib/Keyutils.php', 'Zotlabs\\Lib\\LDSignatures' => __DIR__ . '/../..' . '/Zotlabs/Lib/LDSignatures.php', 'Zotlabs\\Lib\\Libsync' => __DIR__ . '/../..' . '/Zotlabs/Lib/Libsync.php', 'Zotlabs\\Lib\\Libzot' => __DIR__ . '/../..' . '/Zotlabs/Lib/Libzot.php', @@ -1827,6 +1842,9 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Update\\_1238' => __DIR__ . '/../..' . '/Zotlabs/Update/_1238.php', 'Zotlabs\\Update\\_1239' => __DIR__ . '/../..' . '/Zotlabs/Update/_1239.php', 'Zotlabs\\Update\\_1240' => __DIR__ . '/../..' . '/Zotlabs/Update/_1240.php', + 'Zotlabs\\Update\\_1241' => __DIR__ . '/../..' . '/Zotlabs/Update/_1241.php', + 'Zotlabs\\Update\\_1242' => __DIR__ . '/../..' . '/Zotlabs/Update/_1242.php', + 'Zotlabs\\Update\\_1243' => __DIR__ . '/../..' . '/Zotlabs/Update/_1243.php', 'Zotlabs\\Web\\Controller' => __DIR__ . '/../..' . '/Zotlabs/Web/Controller.php', 'Zotlabs\\Web\\HTTPHeaders' => __DIR__ . '/../..' . '/Zotlabs/Web/HTTPHeaders.php', 'Zotlabs\\Web\\HTTPSig' => __DIR__ . '/../..' . '/Zotlabs/Web/HTTPSig.php', @@ -1909,6 +1927,30 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Zot\\IHandler' => __DIR__ . '/../..' . '/Zotlabs/Zot/IHandler.php', 'Zotlabs\\Zot\\Receiver' => __DIR__ . '/../..' . '/Zotlabs/Zot/Receiver.php', 'Zotlabs\\Zot\\ZotHandler' => __DIR__ . '/../..' . '/Zotlabs/Zot/ZotHandler.php', + 'phpseclib\\Crypt\\AES' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/AES.php', + 'phpseclib\\Crypt\\Base' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/Base.php', + 'phpseclib\\Crypt\\Blowfish' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php', + 'phpseclib\\Crypt\\DES' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/DES.php', + 'phpseclib\\Crypt\\Hash' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/Hash.php', + 'phpseclib\\Crypt\\RC2' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/RC2.php', + 'phpseclib\\Crypt\\RC4' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/RC4.php', + 'phpseclib\\Crypt\\RSA' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/RSA.php', + 'phpseclib\\Crypt\\Random' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/Random.php', + 'phpseclib\\Crypt\\Rijndael' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php', + 'phpseclib\\Crypt\\TripleDES' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php', + 'phpseclib\\Crypt\\Twofish' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php', + 'phpseclib\\File\\ANSI' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/File/ANSI.php', + 'phpseclib\\File\\ASN1' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/File/ASN1.php', + 'phpseclib\\File\\ASN1\\Element' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php', + 'phpseclib\\File\\X509' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/File/X509.php', + 'phpseclib\\Math\\BigInteger' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Math/BigInteger.php', + 'phpseclib\\Net\\SCP' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Net/SCP.php', + 'phpseclib\\Net\\SFTP' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Net/SFTP.php', + 'phpseclib\\Net\\SFTP\\Stream' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php', + 'phpseclib\\Net\\SSH1' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Net/SSH1.php', + 'phpseclib\\Net\\SSH2' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Net/SSH2.php', + 'phpseclib\\System\\SSH\\Agent' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php', + 'phpseclib\\System\\SSH\\Agent\\Identity' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php', ); public static function getInitializer(ClassLoader $loader) diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 5a461e7fa..ce3eae708 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -66,29 +66,29 @@ }, { "name": "brick/math", - "version": "0.9.1", - "version_normalized": "0.9.1.0", + "version": "0.9.2", + "version_normalized": "0.9.2.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "283a40c901101e66de7061bd359252c013dcc43c" + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/283a40c901101e66de7061bd359252c013dcc43c", - "reference": "283a40c901101e66de7061bd359252c013dcc43c", + "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", "shasum": "" }, "require": { "ext-json": "*", - "php": "^7.1|^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15|^8.5", - "vimeo/psalm": "^3.5" + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", + "vimeo/psalm": "4.3.2" }, - "time": "2020-08-18T23:57:15+00:00", + "time": "2021-01-20T22:51:39+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -113,7 +113,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/master" + "source": "https://github.com/brick/math/tree/0.9.2" }, "funding": [ { @@ -557,6 +557,118 @@ }, "install-path": "../pear/text_languagedetect" }, + { + "name": "phpseclib/phpseclib", + "version": "2.0.30", + "version_normalized": "2.0.30.0", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "136b9ca7eebef78be14abf90d65c5e57b6bc5d36" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/136b9ca7eebef78be14abf90d65c5e57b6bc5d36", + "reference": "136b9ca7eebef78be14abf90d65c5e57b6bc5d36", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "time": "2020-12-17T05:42:04+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "support": { + "issues": "https://github.com/phpseclib/phpseclib/issues", + "source": "https://github.com/phpseclib/phpseclib/tree/2.0.30" + }, + "funding": [ + { + "url": "https://github.com/terrafrost", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpseclib", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", + "type": "tidelift" + } + ], + "install-path": "../phpseclib/phpseclib" + }, { "name": "psr/log", "version": "1.1.3", @@ -609,17 +721,17 @@ }, { "name": "ramsey/collection", - "version": "1.1.1", - "version_normalized": "1.1.1.0", + "version": "1.1.3", + "version_normalized": "1.1.3.0", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "24d93aefb2cd786b7edd9f45b554aea20b28b9b1" + "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/24d93aefb2cd786b7edd9f45b554aea20b28b9b1", - "reference": "24d93aefb2cd786b7edd9f45b554aea20b28b9b1", + "url": "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", + "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", "shasum": "" }, "require": { @@ -629,21 +741,21 @@ "captainhook/captainhook": "^5.3", "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "ergebnis/composer-normalize": "^2.6", - "fzaninotto/faker": "^1.5", + "fakerphp/faker": "^1.5", "hamcrest/hamcrest-php": "^2", - "jangregor/phpstan-prophecy": "^0.6", + "jangregor/phpstan-prophecy": "^0.8", "mockery/mockery": "^1.3", "phpstan/extension-installer": "^1", "phpstan/phpstan": "^0.12.32", "phpstan/phpstan-mockery": "^0.12.5", "phpstan/phpstan-phpunit": "^0.12.11", - "phpunit/phpunit": "^8.5", + "phpunit/phpunit": "^8.5 || ^9", "psy/psysh": "^0.10.4", "slevomat/coding-standard": "^6.3", "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^3.12.2" + "vimeo/psalm": "^4.4" }, - "time": "2020-09-10T20:58:17+00:00", + "time": "2021-01-21T17:40:04+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -673,12 +785,16 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.1.1" + "source": "https://github.com/ramsey/collection/tree/1.1.3" }, "funding": [ { "url": "https://github.com/ramsey", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" } ], "install-path": "../ramsey/collection" @@ -780,17 +896,17 @@ }, { "name": "sabre/dav", - "version": "4.1.3", - "version_normalized": "4.1.3.0", + "version": "4.1.5", + "version_normalized": "4.1.5.0", "source": { "type": "git", "url": "https://github.com/sabre-io/dav.git", - "reference": "b903eeedfbdcd6cab7935661ec6dc2d90cdf8a1e" + "reference": "c1afdc77a95efea6ee40c03c45f57c3c0c80ec22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/dav/zipball/b903eeedfbdcd6cab7935661ec6dc2d90cdf8a1e", - "reference": "b903eeedfbdcd6cab7935661ec6dc2d90cdf8a1e", + "url": "https://api.github.com/repos/sabre-io/dav/zipball/c1afdc77a95efea6ee40c03c45f57c3c0c80ec22", + "reference": "c1afdc77a95efea6ee40c03c45f57c3c0c80ec22", "shasum": "" }, "require": { @@ -814,7 +930,7 @@ }, "require-dev": { "evert/phpdoc-md": "~0.1.0", - "friendsofphp/php-cs-fixer": "^2.16.7", + "friendsofphp/php-cs-fixer": "^2.17.1", "monolog/monolog": "^1.18", "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" @@ -824,7 +940,7 @@ "ext-imap": "*", "ext-pdo": "*" }, - "time": "2020-11-09T07:48:35+00:00", + "time": "2021-02-12T07:54:23+00:00", "bin": [ "bin/sabredav", "bin/naturalselection" @@ -1064,17 +1180,17 @@ }, { "name": "sabre/vobject", - "version": "4.3.3", - "version_normalized": "4.3.3.0", + "version": "4.3.5", + "version_normalized": "4.3.5.0", "source": { "type": "git", "url": "https://github.com/sabre-io/vobject.git", - "reference": "58f9f9b46a1080c0130bd86f4df9a568aacb9c79" + "reference": "d8a0a9ae215a8acfb51afc29101c7344670b9c83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/vobject/zipball/58f9f9b46a1080c0130bd86f4df9a568aacb9c79", - "reference": "58f9f9b46a1080c0130bd86f4df9a568aacb9c79", + "url": "https://api.github.com/repos/sabre-io/vobject/zipball/d8a0a9ae215a8acfb51afc29101c7344670b9c83", + "reference": "d8a0a9ae215a8acfb51afc29101c7344670b9c83", "shasum": "" }, "require": { @@ -1083,14 +1199,15 @@ "sabre/xml": "^2.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.16.7", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", + "phpunit/php-invoker": "^2.0 || ^3.1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" }, "suggest": { "hoa/bench": "If you would like to run the benchmark scripts" }, - "time": "2020-11-09T04:31:38+00:00", + "time": "2021-02-12T06:28:04+00:00", "bin": [ "bin/vobject", "bin/generate_vcards" @@ -1320,27 +1437,27 @@ }, { "name": "smarty/smarty", - "version": "v3.1.36", - "version_normalized": "3.1.36.0", + "version": "v3.1.38", + "version_normalized": "3.1.38.0", "source": { "type": "git", "url": "https://github.com/smarty-php/smarty.git", - "reference": "fd148f7ade295014fff77f89ee3d5b20d9d55451" + "reference": "63b3c0aed0f614880cda21a5c08c606e97b489bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/smarty-php/smarty/zipball/fd148f7ade295014fff77f89ee3d5b20d9d55451", - "reference": "fd148f7ade295014fff77f89ee3d5b20d9d55451", + "url": "https://api.github.com/repos/smarty-php/smarty/zipball/63b3c0aed0f614880cda21a5c08c606e97b489bb", + "reference": "63b3c0aed0f614880cda21a5c08c606e97b489bb", "shasum": "" }, "require": { "php": ">=5.2" }, "require-dev": { - "phpunit/phpunit": "6.4.1", + "phpunit/phpunit": "^7.5 || ^6.5 || ^5.7 || ^4.8", "smarty/smarty-lexer": "^3.1" }, - "time": "2020-04-14T14:44:26+00:00", + "time": "2021-01-08T14:05:42+00:00", "type": "library", "extra": { "branch-alias": { @@ -1376,21 +1493,27 @@ "keywords": [ "templating" ], + "support": { + "forum": "http://www.smarty.net/forums/", + "irc": "irc://irc.freenode.org/smarty", + "issues": "https://github.com/smarty-php/smarty/issues", + "source": "https://github.com/smarty-php/smarty/tree/v3.1.38" + }, "install-path": "../smarty/smarty" }, { "name": "symfony/polyfill-ctype", - "version": "v1.20.0", - "version_normalized": "1.20.0.0", + "version": "v1.22.0", + "version_normalized": "1.22.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", "shasum": "" }, "require": { @@ -1399,11 +1522,11 @@ "suggest": { "ext-ctype": "For best performance" }, - "time": "2020-10-23T14:02:19+00:00", + "time": "2021-01-07T16:49:33+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1442,7 +1565,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.0" }, "funding": [ { @@ -1462,23 +1585,23 @@ }, { "name": "twbs/bootstrap", - "version": "v4.5.3", - "version_normalized": "4.5.3.0", + "version": "v4.6.0", + "version_normalized": "4.6.0.0", "source": { "type": "git", "url": "https://github.com/twbs/bootstrap.git", - "reference": "a716fb03f965dc0846df479e14388b1b4b93d7ce" + "reference": "6ffb0b48e455430f8a5359ed689ad64c1143fac2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twbs/bootstrap/zipball/a716fb03f965dc0846df479e14388b1b4b93d7ce", - "reference": "a716fb03f965dc0846df479e14388b1b4b93d7ce", + "url": "https://api.github.com/repos/twbs/bootstrap/zipball/6ffb0b48e455430f8a5359ed689ad64c1143fac2", + "reference": "6ffb0b48e455430f8a5359ed689ad64c1143fac2", "shasum": "" }, "replace": { "twitter/bootstrap": "self.version" }, - "time": "2020-10-13T15:38:30+00:00", + "time": "2021-01-19T16:16:38+00:00", "type": "library", "extra": { "branch-alias": { @@ -1514,7 +1637,7 @@ ], "support": { "issues": "https://github.com/twbs/bootstrap/issues", - "source": "https://github.com/twbs/bootstrap/tree/v4.5.3" + "source": "https://github.com/twbs/bootstrap/tree/v4.6.0" }, "funding": [ { diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 6672305a0..151f3da50 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -6,7 +6,7 @@ 'aliases' => array ( ), - 'reference' => 'f9d24d07dd67148a652610b002126e1e80b11839', + 'reference' => '6fae291cc8ec69a74d0c1673186b3d8f319378d4', 'name' => 'zotlabs/hubzilla', ), 'versions' => @@ -22,12 +22,12 @@ ), 'brick/math' => array ( - 'pretty_version' => '0.9.1', - 'version' => '0.9.1.0', + 'pretty_version' => '0.9.2', + 'version' => '0.9.2.0', 'aliases' => array ( ), - 'reference' => '283a40c901101e66de7061bd359252c013dcc43c', + 'reference' => 'dff976c2f3487d42c1db75a3b180e2b9f0e72ce0', ), 'bshaffer/oauth2-server-php' => array ( @@ -101,6 +101,15 @@ ), 'reference' => '9e253f26cef9a9066f53f200cc3e0684018cb5b5', ), + 'phpseclib/phpseclib' => + array ( + 'pretty_version' => '2.0.30', + 'version' => '2.0.30.0', + 'aliases' => + array ( + ), + 'reference' => '136b9ca7eebef78be14abf90d65c5e57b6bc5d36', + ), 'psr/log' => array ( 'pretty_version' => '1.1.3', @@ -112,12 +121,12 @@ ), 'ramsey/collection' => array ( - 'pretty_version' => '1.1.1', - 'version' => '1.1.1.0', + 'pretty_version' => '1.1.3', + 'version' => '1.1.3.0', 'aliases' => array ( ), - 'reference' => '24d93aefb2cd786b7edd9f45b554aea20b28b9b1', + 'reference' => '28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1', ), 'ramsey/uuid' => array ( @@ -137,12 +146,12 @@ ), 'sabre/dav' => array ( - 'pretty_version' => '4.1.3', - 'version' => '4.1.3.0', + 'pretty_version' => '4.1.5', + 'version' => '4.1.5.0', 'aliases' => array ( ), - 'reference' => 'b903eeedfbdcd6cab7935661ec6dc2d90cdf8a1e', + 'reference' => 'c1afdc77a95efea6ee40c03c45f57c3c0c80ec22', ), 'sabre/event' => array ( @@ -173,12 +182,12 @@ ), 'sabre/vobject' => array ( - 'pretty_version' => '4.3.3', - 'version' => '4.3.3.0', + 'pretty_version' => '4.3.5', + 'version' => '4.3.5.0', 'aliases' => array ( ), - 'reference' => '58f9f9b46a1080c0130bd86f4df9a568aacb9c79', + 'reference' => 'd8a0a9ae215a8acfb51afc29101c7344670b9c83', ), 'sabre/xml' => array ( @@ -200,36 +209,36 @@ ), 'smarty/smarty' => array ( - 'pretty_version' => 'v3.1.36', - 'version' => '3.1.36.0', + 'pretty_version' => 'v3.1.38', + 'version' => '3.1.38.0', 'aliases' => array ( ), - 'reference' => 'fd148f7ade295014fff77f89ee3d5b20d9d55451', + 'reference' => '63b3c0aed0f614880cda21a5c08c606e97b489bb', ), 'symfony/polyfill-ctype' => array ( - 'pretty_version' => 'v1.20.0', - 'version' => '1.20.0.0', + 'pretty_version' => 'v1.22.0', + 'version' => '1.22.0.0', 'aliases' => array ( ), - 'reference' => 'f4ba089a5b6366e453971d3aad5fe8e897b37f41', + 'reference' => 'c6c942b1ac76c82448322025e084cadc56048b4e', ), 'twbs/bootstrap' => array ( - 'pretty_version' => 'v4.5.3', - 'version' => '4.5.3.0', + 'pretty_version' => 'v4.6.0', + 'version' => '4.6.0.0', 'aliases' => array ( ), - 'reference' => 'a716fb03f965dc0846df479e14388b1b4b93d7ce', + 'reference' => '6ffb0b48e455430f8a5359ed689ad64c1143fac2', ), 'twitter/bootstrap' => array ( 'replaced' => array ( - 0 => 'v4.5.3', + 0 => 'v4.6.0', ), ), 'zotlabs/hubzilla' => @@ -239,7 +248,7 @@ 'aliases' => array ( ), - 'reference' => 'f9d24d07dd67148a652610b002126e1e80b11839', + 'reference' => '6fae291cc8ec69a74d0c1673186b3d8f319378d4', ), ), ); diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php index 589e9e770..92370c5a0 100644 --- a/vendor/composer/platform_check.php +++ b/vendor/composer/platform_check.php @@ -4,8 +4,8 @@ $issues = array(); -if (!(PHP_VERSION_ID >= 70200)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.0". You are running ' . PHP_VERSION . '.'; +if (!(PHP_VERSION_ID >= 70300)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.3.0". You are running ' . PHP_VERSION . '.'; } if ($issues) { diff --git a/vendor/phpseclib/phpseclib/AUTHORS b/vendor/phpseclib/phpseclib/AUTHORS new file mode 100644 index 000000000..a08b3099c --- /dev/null +++ b/vendor/phpseclib/phpseclib/AUTHORS @@ -0,0 +1,6 @@ +phpseclib Lead Developer: TerraFrost (Jim Wigginton) + +phpseclib Developers: monnerat (Patrick Monnerat) + bantu (Andreas Fischer) + petrich (Hans-Jürgen Petrich) + GrahamCampbell (Graham Campbell) diff --git a/vendor/phpseclib/phpseclib/BACKERS.md b/vendor/phpseclib/phpseclib/BACKERS.md new file mode 100644 index 000000000..e03152ca1 --- /dev/null +++ b/vendor/phpseclib/phpseclib/BACKERS.md @@ -0,0 +1,8 @@ +# Backers + +phpseclib ongoing development is made possible by [Tidelift](https://tidelift.com/subscription/pkg/packagist-phpseclib-phpseclib?utm_source=packagist-phpseclib-phpseclib&utm_medium=referral&utm_campaign=readme) and by contributions by users like you. Thank you. + +## Backers + +- Zane Hooper +- [Setasign](https://www.setasign.com/) \ No newline at end of file diff --git a/vendor/phpseclib/phpseclib/LICENSE b/vendor/phpseclib/phpseclib/LICENSE new file mode 100644 index 000000000..e7214ebbe --- /dev/null +++ b/vendor/phpseclib/phpseclib/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2011-2019 TerraFrost and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/vendor/phpseclib/phpseclib/README.md b/vendor/phpseclib/phpseclib/README.md new file mode 100644 index 000000000..099486dc9 --- /dev/null +++ b/vendor/phpseclib/phpseclib/README.md @@ -0,0 +1,94 @@ +# phpseclib - PHP Secure Communications Library + +[![Build Status](https://travis-ci.com/phpseclib/phpseclib.svg?branch=2.0)](https://travis-ci.com/phpseclib/phpseclib) + +## Supporting phpseclib + +- [Become a backer or sponsor on Patreon](https://www.patreon.com/phpseclib) +- [One-time donation via PayPal or crypto-currencies](http://sourceforge.net/donate/index.php?group_id=198487) +- [Subscribe to Tidelift](https://tidelift.com/subscription/pkg/packagist-phpseclib-phpseclib?utm_source=packagist-phpseclib-phpseclib&utm_medium=referral&utm_campaign=readme) + +## Introduction + +MIT-licensed pure-PHP implementations of the following: + +SSH-2, SFTP, X.509, an arbitrary-precision integer arithmetic library, Ed25519 / Ed449 / Curve25519 / Curve449, ECDSA / ECDH (with support for 66 curves), RSA (PKCS#1 v2.2 compliant), DSA / DH, DES / 3DES / RC4 / Rijndael / AES / Blowfish / Twofish / Salsa20 / ChaCha20, GCM / Poly1305 + +* [Browse Git](https://github.com/phpseclib/phpseclib) + +## Documentation + +* [Documentation / Manual](https://phpseclib.com/) +* [API Documentation](https://api.phpseclib.com/2.0/) (generated by Doctum) + +## Branches + +### master + +* Development Branch +* Unstable API +* Do not use in production + +### 3.0 + +* Long term support (LTS) release +* Major expansion of cryptographic primitives +* Minimum PHP version: 5.6.1 +* PSR-4 autoloading with namespace rooted at `\phpseclib3` +* Install via Composer: `composer require phpseclib/phpseclib:~3.0` + +### 2.0 + +* Long term support (LTS) release +* Modernized version of 1.0 +* Minimum PHP version: 5.3.3 +* PSR-4 autoloading with namespace rooted at `\phpseclib` +* Install via Composer: `composer require phpseclib/phpseclib:~2.0` + +### 1.0 + +* Long term support (LTS) release +* PHP4 compatible +* Composer compatible (PSR-0 autoloading) +* Install using Composer: `composer require phpseclib/phpseclib:~1.0` +* Install using PEAR: See [phpseclib PEAR Channel Documentation](http://phpseclib.sourceforge.net/pear.htm) +* [Download 1.0.19 as ZIP](http://sourceforge.net/projects/phpseclib/files/phpseclib1.0.19.zip/download) + +## Security contact information + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. + +## Support + +Need Support? + +* [Checkout Questions and Answers on Stack Overflow](http://stackoverflow.com/questions/tagged/phpseclib) +* [Create a Support Ticket on GitHub](https://github.com/phpseclib/phpseclib/issues/new) +* [Browse the Support Forum](http://www.frostjedi.com/phpbb/viewforum.php?f=46) (no longer in use) + +## Contributing + +1. Fork the Project + +2. Ensure you have Composer installed (see [Composer Download Instructions](https://getcomposer.org/download/)) + +3. Install Development Dependencies + + ``` sh + composer install + ``` + +4. Create a Feature Branch + +5. (Recommended) Run the Test Suite + + ``` sh + vendor/bin/phpunit + ``` +6. (Recommended) Check whether your code conforms to our Coding Standards by running + + ``` sh + vendor/bin/phing -f build/build.xml sniff + ``` + +7. Send us a Pull Request diff --git a/vendor/phpseclib/phpseclib/appveyor.yml b/vendor/phpseclib/phpseclib/appveyor.yml new file mode 100644 index 000000000..210a90347 --- /dev/null +++ b/vendor/phpseclib/phpseclib/appveyor.yml @@ -0,0 +1,27 @@ +build: false +shallow_clone: false +platform: + - x86 + - x64 +clone_folder: C:\projects\phpseclib + +install: + - cinst -y OpenSSL.Light + - SET PATH=C:\Program Files\OpenSSL;%PATH% + - sc config wuauserv start= auto + - net start wuauserv + - cinst -y php --version 5.6.30 + - cd c:\tools\php56 + - copy php.ini-production php.ini + - echo date.timezone="UTC" >> php.ini + - echo extension_dir=ext >> php.ini + - echo extension=php_openssl.dll >> php.ini + - echo extension=php_gmp.dll >> php.ini + - cd C:\projects\phpseclib + - SET PATH=C:\tools\php56;%PATH% + - php.exe -r "readfile('http://getcomposer.org/installer');" | php.exe + - php.exe composer.phar install --prefer-source --no-interaction + +test_script: + - cd C:\projects\phpseclib + - vendor\bin\phpunit.bat tests/Windows32Test.php \ No newline at end of file diff --git a/vendor/phpseclib/phpseclib/composer.json b/vendor/phpseclib/phpseclib/composer.json new file mode 100644 index 000000000..08b9c7c91 --- /dev/null +++ b/vendor/phpseclib/phpseclib/composer.json @@ -0,0 +1,75 @@ +{ + "name": "phpseclib/phpseclib", + "type": "library", + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "keywords": [ + "security", + "crypto", + "cryptography", + "encryption", + "signature", + "signing", + "rsa", + "aes", + "blowfish", + "twofish", + "ssh", + "sftp", + "x509", + "x.509", + "asn1", + "asn.1", + "BigInteger" + ], + "homepage": "http://phpseclib.sourceforge.net", + "license": "MIT", + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations." + }, + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php new file mode 100644 index 000000000..7d8cb8b03 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php @@ -0,0 +1,126 @@ + + * setKey('abcdefghijklmnop'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $aes->decrypt($aes->encrypt($plaintext)); + * ?> + * + * + * @category Crypt + * @package AES + * @author Jim Wigginton + * @copyright 2008 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Crypt; + +/** + * Pure-PHP implementation of AES. + * + * @package AES + * @author Jim Wigginton + * @access public + */ +class AES extends Rijndael +{ + /** + * Dummy function + * + * Since \phpseclib\Crypt\AES extends \phpseclib\Crypt\Rijndael, this function is, technically, available, but it doesn't do anything. + * + * @see \phpseclib\Crypt\Rijndael::setBlockLength() + * @access public + * @param int $length + */ + function setBlockLength($length) + { + return; + } + + /** + * Sets the key length + * + * Valid key lengths are 128, 192, and 256. If the length is less than 128, it will be rounded up to + * 128. If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount. + * + * @see \phpseclib\Crypt\Rijndael:setKeyLength() + * @access public + * @param int $length + */ + function setKeyLength($length) + { + switch ($length) { + case 160: + $length = 192; + break; + case 224: + $length = 256; + } + parent::setKeyLength($length); + } + + /** + * Sets the key. + * + * Rijndael supports five different key lengths, AES only supports three. + * + * @see \phpseclib\Crypt\Rijndael:setKey() + * @see setKeyLength() + * @access public + * @param string $key + */ + function setKey($key) + { + parent::setKey($key); + + if (!$this->explicit_key_length) { + $length = strlen($key); + switch (true) { + case $length <= 16: + $this->key_length = 16; + break; + case $length <= 24: + $this->key_length = 24; + break; + default: + $this->key_length = 32; + } + $this->_setEngine(); + } + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php new file mode 100644 index 000000000..efbcd242b --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php @@ -0,0 +1,2699 @@ + + * @author Hans-Juergen Petrich + * @copyright 2007 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Crypt; + +/** + * Base Class for all \phpseclib\Crypt\* cipher classes + * + * @package Base + * @author Jim Wigginton + * @author Hans-Juergen Petrich + */ +abstract class Base +{ + /**#@+ + * @access public + * @see \phpseclib\Crypt\Base::encrypt() + * @see \phpseclib\Crypt\Base::decrypt() + */ + /** + * Encrypt / decrypt using the Counter mode. + * + * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29 + */ + const MODE_CTR = -1; + /** + * Encrypt / decrypt using the Electronic Code Book mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29 + */ + const MODE_ECB = 1; + /** + * Encrypt / decrypt using the Code Book Chaining mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29 + */ + const MODE_CBC = 2; + /** + * Encrypt / decrypt using the Cipher Feedback mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29 + */ + const MODE_CFB = 3; + /** + * Encrypt / decrypt using the Cipher Feedback mode (8bit) + */ + const MODE_CFB8 = 38; + /** + * Encrypt / decrypt using the Output Feedback mode. + * + * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29 + */ + const MODE_OFB = 4; + /** + * Encrypt / decrypt using streaming mode. + */ + const MODE_STREAM = 5; + /**#@-*/ + + /** + * Whirlpool available flag + * + * @see \phpseclib\Crypt\Base::_hashInlineCryptFunction() + * @var bool + * @access private + */ + static $WHIRLPOOL_AVAILABLE; + + /**#@+ + * @access private + * @see \phpseclib\Crypt\Base::__construct() + */ + /** + * Base value for the internal implementation $engine switch + */ + const ENGINE_INTERNAL = 1; + /** + * Base value for the mcrypt implementation $engine switch + */ + const ENGINE_MCRYPT = 2; + /** + * Base value for the mcrypt implementation $engine switch + */ + const ENGINE_OPENSSL = 3; + /**#@-*/ + + /** + * The Encryption Mode + * + * @see self::__construct() + * @var int + * @access private + */ + var $mode; + + /** + * The Block Length of the block cipher + * + * @var int + * @access private + */ + var $block_size = 16; + + /** + * The Key + * + * @see self::setKey() + * @var string + * @access private + */ + var $key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; + + /** + * The Initialization Vector + * + * @see self::setIV() + * @var string + * @access private + */ + var $iv; + + /** + * A "sliding" Initialization Vector + * + * @see self::enableContinuousBuffer() + * @see self::_clearBuffers() + * @var string + * @access private + */ + var $encryptIV; + + /** + * A "sliding" Initialization Vector + * + * @see self::enableContinuousBuffer() + * @see self::_clearBuffers() + * @var string + * @access private + */ + var $decryptIV; + + /** + * Continuous Buffer status + * + * @see self::enableContinuousBuffer() + * @var bool + * @access private + */ + var $continuousBuffer = false; + + /** + * Encryption buffer for CTR, OFB and CFB modes + * + * @see self::encrypt() + * @see self::_clearBuffers() + * @var array + * @access private + */ + var $enbuffer; + + /** + * Decryption buffer for CTR, OFB and CFB modes + * + * @see self::decrypt() + * @see self::_clearBuffers() + * @var array + * @access private + */ + var $debuffer; + + /** + * mcrypt resource for encryption + * + * The mcrypt resource can be recreated every time something needs to be created or it can be created just once. + * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode. + * + * @see self::encrypt() + * @var resource + * @access private + */ + var $enmcrypt; + + /** + * mcrypt resource for decryption + * + * The mcrypt resource can be recreated every time something needs to be created or it can be created just once. + * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode. + * + * @see self::decrypt() + * @var resource + * @access private + */ + var $demcrypt; + + /** + * Does the enmcrypt resource need to be (re)initialized? + * + * @see \phpseclib\Crypt\Twofish::setKey() + * @see \phpseclib\Crypt\Twofish::setIV() + * @var bool + * @access private + */ + var $enchanged = true; + + /** + * Does the demcrypt resource need to be (re)initialized? + * + * @see \phpseclib\Crypt\Twofish::setKey() + * @see \phpseclib\Crypt\Twofish::setIV() + * @var bool + * @access private + */ + var $dechanged = true; + + /** + * mcrypt resource for CFB mode + * + * mcrypt's CFB mode, in (and only in) buffered context, + * is broken, so phpseclib implements the CFB mode by it self, + * even when the mcrypt php extension is available. + * + * In order to do the CFB-mode work (fast) phpseclib + * use a separate ECB-mode mcrypt resource. + * + * @link http://phpseclib.sourceforge.net/cfb-demo.phps + * @see self::encrypt() + * @see self::decrypt() + * @see self::_setupMcrypt() + * @var resource + * @access private + */ + var $ecb; + + /** + * Optimizing value while CFB-encrypting + * + * Only relevant if $continuousBuffer enabled + * and $engine == self::ENGINE_MCRYPT + * + * It's faster to re-init $enmcrypt if + * $buffer bytes > $cfb_init_len than + * using the $ecb resource furthermore. + * + * This value depends of the chosen cipher + * and the time it would be needed for it's + * initialization [by mcrypt_generic_init()] + * which, typically, depends on the complexity + * on its internaly Key-expanding algorithm. + * + * @see self::encrypt() + * @var int + * @access private + */ + var $cfb_init_len = 600; + + /** + * Does internal cipher state need to be (re)initialized? + * + * @see self::setKey() + * @see self::setIV() + * @see self::disableContinuousBuffer() + * @var bool + * @access private + */ + var $changed = true; + + /** + * Padding status + * + * @see self::enablePadding() + * @var bool + * @access private + */ + var $padding = true; + + /** + * Is the mode one that is paddable? + * + * @see self::__construct() + * @var bool + * @access private + */ + var $paddable = false; + + /** + * Holds which crypt engine internaly should be use, + * which will be determined automatically on __construct() + * + * Currently available $engines are: + * - self::ENGINE_OPENSSL (very fast, php-extension: openssl, extension_loaded('openssl') required) + * - self::ENGINE_MCRYPT (fast, php-extension: mcrypt, extension_loaded('mcrypt') required) + * - self::ENGINE_INTERNAL (slower, pure php-engine, no php-extension required) + * + * @see self::_setEngine() + * @see self::encrypt() + * @see self::decrypt() + * @var int + * @access private + */ + var $engine; + + /** + * Holds the preferred crypt engine + * + * @see self::_setEngine() + * @see self::setPreferredEngine() + * @var int + * @access private + */ + var $preferredEngine; + + /** + * The mcrypt specific name of the cipher + * + * Only used if $engine == self::ENGINE_MCRYPT + * + * @link http://www.php.net/mcrypt_module_open + * @link http://www.php.net/mcrypt_list_algorithms + * @see self::_setupMcrypt() + * @var string + * @access private + */ + var $cipher_name_mcrypt; + + /** + * The openssl specific name of the cipher + * + * Only used if $engine == self::ENGINE_OPENSSL + * + * @link http://www.php.net/openssl-get-cipher-methods + * @var string + * @access private + */ + var $cipher_name_openssl; + + /** + * The openssl specific name of the cipher in ECB mode + * + * If OpenSSL does not support the mode we're trying to use (CTR) + * it can still be emulated with ECB mode. + * + * @link http://www.php.net/openssl-get-cipher-methods + * @var string + * @access private + */ + var $cipher_name_openssl_ecb; + + /** + * The default salt used by setPassword() + * + * @see self::setPassword() + * @var string + * @access private + */ + var $password_default_salt = 'phpseclib/salt'; + + /** + * The name of the performance-optimized callback function + * + * Used by encrypt() / decrypt() + * only if $engine == self::ENGINE_INTERNAL + * + * @see self::encrypt() + * @see self::decrypt() + * @see self::_setupInlineCrypt() + * @see self::$use_inline_crypt + * @var Callback + * @access private + */ + var $inline_crypt; + + /** + * Holds whether performance-optimized $inline_crypt() can/should be used. + * + * @see self::encrypt() + * @see self::decrypt() + * @see self::inline_crypt + * @var mixed + * @access private + */ + var $use_inline_crypt = true; + + /** + * If OpenSSL can be used in ECB but not in CTR we can emulate CTR + * + * @see self::_openssl_ctr_process() + * @var bool + * @access private + */ + var $openssl_emulate_ctr = false; + + /** + * Determines what options are passed to openssl_encrypt/decrypt + * + * @see self::isValidEngine() + * @var mixed + * @access private + */ + var $openssl_options; + + /** + * Has the key length explicitly been set or should it be derived from the key, itself? + * + * @see self::setKeyLength() + * @var bool + * @access private + */ + var $explicit_key_length = false; + + /** + * Don't truncate / null pad key + * + * @see self::_clearBuffers() + * @var bool + * @access private + */ + var $skip_key_adjustment = false; + + /** + * Default Constructor. + * + * Determines whether or not the mcrypt extension should be used. + * + * $mode could be: + * + * - self::MODE_ECB + * + * - self::MODE_CBC + * + * - self::MODE_CTR + * + * - self::MODE_CFB + * + * - self::MODE_OFB + * + * If not explicitly set, self::MODE_CBC will be used. + * + * @param int $mode + * @access public + */ + function __construct($mode = self::MODE_CBC) + { + // $mode dependent settings + switch ($mode) { + case self::MODE_ECB: + $this->paddable = true; + $this->mode = self::MODE_ECB; + break; + case self::MODE_CTR: + case self::MODE_CFB: + case self::MODE_CFB8: + case self::MODE_OFB: + case self::MODE_STREAM: + $this->mode = $mode; + break; + case self::MODE_CBC: + default: + $this->paddable = true; + $this->mode = self::MODE_CBC; + } + + $this->_setEngine(); + } + + /** + * Sets the initialization vector. (optional) + * + * SetIV is not required when self::MODE_ECB (or ie for AES: \phpseclib\Crypt\AES::MODE_ECB) is being used. If not explicitly set, it'll be assumed + * to be all zero's. + * + * @access public + * @param string $iv + * @internal Can be overwritten by a sub class, but does not have to be + */ + function setIV($iv) + { + if ($this->mode == self::MODE_ECB) { + return; + } + + $this->iv = $iv; + $this->changed = true; + } + + /** + * Sets the key length. + * + * Keys with explicitly set lengths need to be treated accordingly + * + * @access public + * @param int $length + */ + function setKeyLength($length) + { + $this->explicit_key_length = true; + $this->changed = true; + $this->_setEngine(); + } + + /** + * Returns the current key length in bits + * + * @access public + * @return int + */ + function getKeyLength() + { + return $this->key_length << 3; + } + + /** + * Returns the current block length in bits + * + * @access public + * @return int + */ + function getBlockLength() + { + return $this->block_size << 3; + } + + /** + * Sets the key. + * + * The min/max length(s) of the key depends on the cipher which is used. + * If the key not fits the length(s) of the cipher it will paded with null bytes + * up to the closest valid key length. If the key is more than max length, + * we trim the excess bits. + * + * If the key is not explicitly set, it'll be assumed to be all null bytes. + * + * @access public + * @param string $key + * @internal Could, but not must, extend by the child Crypt_* class + */ + function setKey($key) + { + if (!$this->explicit_key_length) { + $this->setKeyLength(strlen($key) << 3); + $this->explicit_key_length = false; + } + + $this->key = $key; + $this->changed = true; + $this->_setEngine(); + } + + /** + * Sets the password. + * + * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows: + * {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2} or pbkdf1: + * $hash, $salt, $count, $dkLen + * + * Where $hash (default = sha1) currently supports the following hashes: see: Crypt/Hash.php + * + * @see Crypt/Hash.php + * @param string $password + * @param string $method + * @return bool + * @access public + * @internal Could, but not must, extend by the child Crypt_* class + */ + function setPassword($password, $method = 'pbkdf2') + { + $key = ''; + + switch ($method) { + default: // 'pbkdf2' or 'pbkdf1' + $func_args = func_get_args(); + + // Hash function + $hash = isset($func_args[2]) ? $func_args[2] : 'sha1'; + + // WPA and WPA2 use the SSID as the salt + $salt = isset($func_args[3]) ? $func_args[3] : $this->password_default_salt; + + // RFC2898#section-4.2 uses 1,000 iterations by default + // WPA and WPA2 use 4,096. + $count = isset($func_args[4]) ? $func_args[4] : 1000; + + // Keylength + if (isset($func_args[5])) { + $dkLen = $func_args[5]; + } else { + $dkLen = $method == 'pbkdf1' ? 2 * $this->key_length : $this->key_length; + } + + switch (true) { + case $method == 'pbkdf1': + $hashObj = new Hash(); + $hashObj->setHash($hash); + if ($dkLen > $hashObj->getLength()) { + user_error('Derived key too long'); + return false; + } + $t = $password . $salt; + for ($i = 0; $i < $count; ++$i) { + $t = $hashObj->hash($t); + } + $key = substr($t, 0, $dkLen); + + $this->setKey(substr($key, 0, $dkLen >> 1)); + $this->setIV(substr($key, $dkLen >> 1)); + + return true; + // Determining if php[>=5.5.0]'s hash_pbkdf2() function avail- and useable + case !function_exists('hash_pbkdf2'): + case !function_exists('hash_algos'): + case !in_array($hash, hash_algos()): + $i = 1; + $hmac = new Hash(); + $hmac->setHash($hash); + $hmac->setKey($password); + while (strlen($key) < $dkLen) { + $f = $u = $hmac->hash($salt . pack('N', $i++)); + for ($j = 2; $j <= $count; ++$j) { + $u = $hmac->hash($u); + $f^= $u; + } + $key.= $f; + } + $key = substr($key, 0, $dkLen); + break; + default: + $key = hash_pbkdf2($hash, $password, $salt, $count, $dkLen, true); + } + } + + $this->setKey($key); + + return true; + } + + /** + * Encrypts a message. + * + * $plaintext will be padded with additional bytes such that it's length is a multiple of the block size. Other cipher + * implementations may or may not pad in the same manner. Other common approaches to padding and the reasons why it's + * necessary are discussed in the following + * URL: + * + * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html} + * + * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does. + * strlen($plaintext) will still need to be a multiple of the block size, however, arbitrary values can be added to make it that + * length. + * + * @see self::decrypt() + * @access public + * @param string $plaintext + * @return string $ciphertext + * @internal Could, but not must, extend by the child Crypt_* class + */ + function encrypt($plaintext) + { + if ($this->paddable) { + $plaintext = $this->_pad($plaintext); + } + + if ($this->engine === self::ENGINE_OPENSSL) { + if ($this->changed) { + $this->_clearBuffers(); + $this->changed = false; + } + switch ($this->mode) { + case self::MODE_STREAM: + return openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options); + case self::MODE_ECB: + $result = @openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options); + return !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result; + case self::MODE_CBC: + $result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->encryptIV); + if (!defined('OPENSSL_RAW_DATA')) { + $result = substr($result, 0, -$this->block_size); + } + if ($this->continuousBuffer) { + $this->encryptIV = substr($result, -$this->block_size); + } + return $result; + case self::MODE_CTR: + return $this->_openssl_ctr_process($plaintext, $this->encryptIV, $this->enbuffer); + case self::MODE_CFB: + // cfb loosely routines inspired by openssl's: + // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1} + $ciphertext = ''; + if ($this->continuousBuffer) { + $iv = &$this->encryptIV; + $pos = &$this->enbuffer['pos']; + } else { + $iv = $this->encryptIV; + $pos = 0; + } + $len = strlen($plaintext); + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = $this->block_size - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; + } + // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize + $ciphertext = substr($iv, $orig_pos) ^ $plaintext; + $iv = substr_replace($iv, $ciphertext, $orig_pos, $i); + $plaintext = substr($plaintext, $i); + } + + $overflow = $len % $this->block_size; + + if ($overflow) { + $ciphertext.= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv); + $iv = $this->_string_pop($ciphertext, $this->block_size); + + $size = $len - $overflow; + $block = $iv ^ substr($plaintext, -$overflow); + $iv = substr_replace($iv, $block, 0, $overflow); + $ciphertext.= $block; + $pos = $overflow; + } elseif ($len) { + $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv); + $iv = substr($ciphertext, -$this->block_size); + } + + return $ciphertext; + case self::MODE_CFB8: + $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->encryptIV); + if ($this->continuousBuffer) { + if (($len = strlen($ciphertext)) >= $this->block_size) { + $this->encryptIV = substr($ciphertext, -$this->block_size); + } else { + $this->encryptIV = substr($this->encryptIV, $len - $this->block_size) . substr($ciphertext, -$len); + } + } + return $ciphertext; + case self::MODE_OFB: + return $this->_openssl_ofb_process($plaintext, $this->encryptIV, $this->enbuffer); + } + } + + if ($this->engine === self::ENGINE_MCRYPT) { + if ($this->changed) { + $this->_setupMcrypt(); + $this->changed = false; + } + if ($this->enchanged) { + @mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); + $this->enchanged = false; + } + + // re: {@link http://phpseclib.sourceforge.net/cfb-demo.phps} + // using mcrypt's default handing of CFB the above would output two different things. using phpseclib's + // rewritten CFB implementation the above outputs the same thing twice. + if ($this->mode == self::MODE_CFB && $this->continuousBuffer) { + $block_size = $this->block_size; + $iv = &$this->encryptIV; + $pos = &$this->enbuffer['pos']; + $len = strlen($plaintext); + $ciphertext = ''; + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = $block_size - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; + } + $ciphertext = substr($iv, $orig_pos) ^ $plaintext; + $iv = substr_replace($iv, $ciphertext, $orig_pos, $i); + $this->enbuffer['enmcrypt_init'] = true; + } + if ($len >= $block_size) { + if ($this->enbuffer['enmcrypt_init'] === false || $len > $this->cfb_init_len) { + if ($this->enbuffer['enmcrypt_init'] === true) { + @mcrypt_generic_init($this->enmcrypt, $this->key, $iv); + $this->enbuffer['enmcrypt_init'] = false; + } + $ciphertext.= @mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % $block_size)); + $iv = substr($ciphertext, -$block_size); + $len%= $block_size; + } else { + while ($len >= $block_size) { + $iv = @mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, $block_size); + $ciphertext.= $iv; + $len-= $block_size; + $i+= $block_size; + } + } + } + + if ($len) { + $iv = @mcrypt_generic($this->ecb, $iv); + $block = $iv ^ substr($plaintext, -$len); + $iv = substr_replace($iv, $block, 0, $len); + $ciphertext.= $block; + $pos = $len; + } + + return $ciphertext; + } + + $ciphertext = @mcrypt_generic($this->enmcrypt, $plaintext); + + if (!$this->continuousBuffer) { + @mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV); + } + + return $ciphertext; + } + + if ($this->changed) { + $this->_setup(); + $this->changed = false; + } + if ($this->use_inline_crypt) { + $inline = $this->inline_crypt; + return $inline('encrypt', $this, $plaintext); + } + + $buffer = &$this->enbuffer; + $block_size = $this->block_size; + $ciphertext = ''; + switch ($this->mode) { + case self::MODE_ECB: + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $ciphertext.= $this->_encryptBlock(substr($plaintext, $i, $block_size)); + } + break; + case self::MODE_CBC: + $xor = $this->encryptIV; + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $block = substr($plaintext, $i, $block_size); + $block = $this->_encryptBlock($block ^ $xor); + $xor = $block; + $ciphertext.= $block; + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + } + break; + case self::MODE_CTR: + $xor = $this->encryptIV; + if (strlen($buffer['ciphertext'])) { + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $block = substr($plaintext, $i, $block_size); + if (strlen($block) > strlen($buffer['ciphertext'])) { + $buffer['ciphertext'].= $this->_encryptBlock($xor); + } + $this->_increment_str($xor); + $key = $this->_string_shift($buffer['ciphertext'], $block_size); + $ciphertext.= $block ^ $key; + } + } else { + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $block = substr($plaintext, $i, $block_size); + $key = $this->_encryptBlock($xor); + $this->_increment_str($xor); + $ciphertext.= $block ^ $key; + } + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + if ($start = strlen($plaintext) % $block_size) { + $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext']; + } + } + break; + case self::MODE_CFB: + // cfb loosely routines inspired by openssl's: + // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1} + if ($this->continuousBuffer) { + $iv = &$this->encryptIV; + $pos = &$buffer['pos']; + } else { + $iv = $this->encryptIV; + $pos = 0; + } + $len = strlen($plaintext); + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = $block_size - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; + } + // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize + $ciphertext = substr($iv, $orig_pos) ^ $plaintext; + $iv = substr_replace($iv, $ciphertext, $orig_pos, $i); + } + while ($len >= $block_size) { + $iv = $this->_encryptBlock($iv) ^ substr($plaintext, $i, $block_size); + $ciphertext.= $iv; + $len-= $block_size; + $i+= $block_size; + } + if ($len) { + $iv = $this->_encryptBlock($iv); + $block = $iv ^ substr($plaintext, $i); + $iv = substr_replace($iv, $block, 0, $len); + $ciphertext.= $block; + $pos = $len; + } + break; + case self::MODE_CFB8: + $ciphertext = ''; + $len = strlen($plaintext); + $iv = $this->encryptIV; + + for ($i = 0; $i < $len; ++$i) { + $ciphertext .= ($c = $plaintext[$i] ^ $this->_encryptBlock($iv)); + $iv = substr($iv, 1) . $c; + } + + if ($this->continuousBuffer) { + if ($len >= $block_size) { + $this->encryptIV = substr($ciphertext, -$block_size); + } else { + $this->encryptIV = substr($this->encryptIV, $len - $block_size) . substr($ciphertext, -$len); + } + } + break; + case self::MODE_OFB: + $xor = $this->encryptIV; + if (strlen($buffer['xor'])) { + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $block = substr($plaintext, $i, $block_size); + if (strlen($block) > strlen($buffer['xor'])) { + $xor = $this->_encryptBlock($xor); + $buffer['xor'].= $xor; + } + $key = $this->_string_shift($buffer['xor'], $block_size); + $ciphertext.= $block ^ $key; + } + } else { + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $xor = $this->_encryptBlock($xor); + $ciphertext.= substr($plaintext, $i, $block_size) ^ $xor; + } + $key = $xor; + } + if ($this->continuousBuffer) { + $this->encryptIV = $xor; + if ($start = strlen($plaintext) % $block_size) { + $buffer['xor'] = substr($key, $start) . $buffer['xor']; + } + } + break; + case self::MODE_STREAM: + $ciphertext = $this->_encryptBlock($plaintext); + break; + } + + return $ciphertext; + } + + /** + * Decrypts a message. + * + * If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until + * it is. + * + * @see self::encrypt() + * @access public + * @param string $ciphertext + * @return string $plaintext + * @internal Could, but not must, extend by the child Crypt_* class + */ + function decrypt($ciphertext) + { + if ($this->paddable) { + // we pad with chr(0) since that's what mcrypt_generic does. to quote from {@link http://www.php.net/function.mcrypt-generic}: + // "The data is padded with "\0" to make sure the length of the data is n * blocksize." + $ciphertext = str_pad($ciphertext, strlen($ciphertext) + ($this->block_size - strlen($ciphertext) % $this->block_size) % $this->block_size, chr(0)); + } + + if ($this->engine === self::ENGINE_OPENSSL) { + if ($this->changed) { + $this->_clearBuffers(); + $this->changed = false; + } + switch ($this->mode) { + case self::MODE_STREAM: + $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options); + break; + case self::MODE_ECB: + if (!defined('OPENSSL_RAW_DATA')) { + $ciphertext.= @openssl_encrypt('', $this->cipher_name_openssl_ecb, $this->key, true); + } + $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options); + break; + case self::MODE_CBC: + if (!defined('OPENSSL_RAW_DATA')) { + $padding = str_repeat(chr($this->block_size), $this->block_size) ^ substr($ciphertext, -$this->block_size); + $ciphertext.= substr(@openssl_encrypt($padding, $this->cipher_name_openssl_ecb, $this->key, true), 0, $this->block_size); + $offset = 2 * $this->block_size; + } else { + $offset = $this->block_size; + } + $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->decryptIV); + if ($this->continuousBuffer) { + $this->decryptIV = substr($ciphertext, -$offset, $this->block_size); + } + break; + case self::MODE_CTR: + $plaintext = $this->_openssl_ctr_process($ciphertext, $this->decryptIV, $this->debuffer); + break; + case self::MODE_CFB: + // cfb loosely routines inspired by openssl's: + // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1} + $plaintext = ''; + if ($this->continuousBuffer) { + $iv = &$this->decryptIV; + $pos = &$this->buffer['pos']; + } else { + $iv = $this->decryptIV; + $pos = 0; + } + $len = strlen($ciphertext); + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = $this->block_size - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; + } + // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $this->blocksize + $plaintext = substr($iv, $orig_pos) ^ $ciphertext; + $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i); + $ciphertext = substr($ciphertext, $i); + } + $overflow = $len % $this->block_size; + if ($overflow) { + $plaintext.= openssl_decrypt(substr($ciphertext, 0, -$overflow), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv); + if ($len - $overflow) { + $iv = substr($ciphertext, -$overflow - $this->block_size, -$overflow); + } + $iv = openssl_encrypt(str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv); + $plaintext.= $iv ^ substr($ciphertext, -$overflow); + $iv = substr_replace($iv, substr($ciphertext, -$overflow), 0, $overflow); + $pos = $overflow; + } elseif ($len) { + $plaintext.= openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv); + $iv = substr($ciphertext, -$this->block_size); + } + break; + case self::MODE_CFB8: + $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->decryptIV); + if ($this->continuousBuffer) { + if (($len = strlen($ciphertext)) >= $this->block_size) { + $this->decryptIV = substr($ciphertext, -$this->block_size); + } else { + $this->decryptIV = substr($this->decryptIV, $len - $this->block_size) . substr($ciphertext, -$len); + } + } + break; + case self::MODE_OFB: + $plaintext = $this->_openssl_ofb_process($ciphertext, $this->decryptIV, $this->debuffer); + } + + return $this->paddable ? $this->_unpad($plaintext) : $plaintext; + } + + if ($this->engine === self::ENGINE_MCRYPT) { + $block_size = $this->block_size; + if ($this->changed) { + $this->_setupMcrypt(); + $this->changed = false; + } + if ($this->dechanged) { + @mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); + $this->dechanged = false; + } + + if ($this->mode == self::MODE_CFB && $this->continuousBuffer) { + $iv = &$this->decryptIV; + $pos = &$this->debuffer['pos']; + $len = strlen($ciphertext); + $plaintext = ''; + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = $block_size - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; + } + // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize + $plaintext = substr($iv, $orig_pos) ^ $ciphertext; + $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i); + } + if ($len >= $block_size) { + $cb = substr($ciphertext, $i, $len - $len % $block_size); + $plaintext.= @mcrypt_generic($this->ecb, $iv . $cb) ^ $cb; + $iv = substr($cb, -$block_size); + $len%= $block_size; + } + if ($len) { + $iv = @mcrypt_generic($this->ecb, $iv); + $plaintext.= $iv ^ substr($ciphertext, -$len); + $iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len); + $pos = $len; + } + + return $plaintext; + } + + $plaintext = @mdecrypt_generic($this->demcrypt, $ciphertext); + + if (!$this->continuousBuffer) { + @mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV); + } + + return $this->paddable ? $this->_unpad($plaintext) : $plaintext; + } + + if ($this->changed) { + $this->_setup(); + $this->changed = false; + } + if ($this->use_inline_crypt) { + $inline = $this->inline_crypt; + return $inline('decrypt', $this, $ciphertext); + } + + $block_size = $this->block_size; + + $buffer = &$this->debuffer; + $plaintext = ''; + switch ($this->mode) { + case self::MODE_ECB: + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $plaintext.= $this->_decryptBlock(substr($ciphertext, $i, $block_size)); + } + break; + case self::MODE_CBC: + $xor = $this->decryptIV; + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $block = substr($ciphertext, $i, $block_size); + $plaintext.= $this->_decryptBlock($block) ^ $xor; + $xor = $block; + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + } + break; + case self::MODE_CTR: + $xor = $this->decryptIV; + if (strlen($buffer['ciphertext'])) { + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $block = substr($ciphertext, $i, $block_size); + if (strlen($block) > strlen($buffer['ciphertext'])) { + $buffer['ciphertext'].= $this->_encryptBlock($xor); + $this->_increment_str($xor); + } + $key = $this->_string_shift($buffer['ciphertext'], $block_size); + $plaintext.= $block ^ $key; + } + } else { + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $block = substr($ciphertext, $i, $block_size); + $key = $this->_encryptBlock($xor); + $this->_increment_str($xor); + $plaintext.= $block ^ $key; + } + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + if ($start = strlen($ciphertext) % $block_size) { + $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext']; + } + } + break; + case self::MODE_CFB: + if ($this->continuousBuffer) { + $iv = &$this->decryptIV; + $pos = &$buffer['pos']; + } else { + $iv = $this->decryptIV; + $pos = 0; + } + $len = strlen($ciphertext); + $i = 0; + if ($pos) { + $orig_pos = $pos; + $max = $block_size - $pos; + if ($len >= $max) { + $i = $max; + $len-= $max; + $pos = 0; + } else { + $i = $len; + $pos+= $len; + $len = 0; + } + // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize + $plaintext = substr($iv, $orig_pos) ^ $ciphertext; + $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i); + } + while ($len >= $block_size) { + $iv = $this->_encryptBlock($iv); + $cb = substr($ciphertext, $i, $block_size); + $plaintext.= $iv ^ $cb; + $iv = $cb; + $len-= $block_size; + $i+= $block_size; + } + if ($len) { + $iv = $this->_encryptBlock($iv); + $plaintext.= $iv ^ substr($ciphertext, $i); + $iv = substr_replace($iv, substr($ciphertext, $i), 0, $len); + $pos = $len; + } + break; + case self::MODE_CFB8: + $plaintext = ''; + $len = strlen($ciphertext); + $iv = $this->decryptIV; + + for ($i = 0; $i < $len; ++$i) { + $plaintext .= $ciphertext[$i] ^ $this->_encryptBlock($iv); + $iv = substr($iv, 1) . $ciphertext[$i]; + } + + if ($this->continuousBuffer) { + if ($len >= $block_size) { + $this->decryptIV = substr($ciphertext, -$block_size); + } else { + $this->decryptIV = substr($this->decryptIV, $len - $block_size) . substr($ciphertext, -$len); + } + } + break; + case self::MODE_OFB: + $xor = $this->decryptIV; + if (strlen($buffer['xor'])) { + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $block = substr($ciphertext, $i, $block_size); + if (strlen($block) > strlen($buffer['xor'])) { + $xor = $this->_encryptBlock($xor); + $buffer['xor'].= $xor; + } + $key = $this->_string_shift($buffer['xor'], $block_size); + $plaintext.= $block ^ $key; + } + } else { + for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) { + $xor = $this->_encryptBlock($xor); + $plaintext.= substr($ciphertext, $i, $block_size) ^ $xor; + } + $key = $xor; + } + if ($this->continuousBuffer) { + $this->decryptIV = $xor; + if ($start = strlen($ciphertext) % $block_size) { + $buffer['xor'] = substr($key, $start) . $buffer['xor']; + } + } + break; + case self::MODE_STREAM: + $plaintext = $this->_decryptBlock($ciphertext); + break; + } + return $this->paddable ? $this->_unpad($plaintext) : $plaintext; + } + + /** + * OpenSSL CTR Processor + * + * PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream + * for CTR is the same for both encrypting and decrypting this function is re-used by both Base::encrypt() + * and Base::decrypt(). Also, OpenSSL doesn't implement CTR for all of it's symmetric ciphers so this + * function will emulate CTR with ECB when necessary. + * + * @see self::encrypt() + * @see self::decrypt() + * @param string $plaintext + * @param string $encryptIV + * @param array $buffer + * @return string + * @access private + */ + function _openssl_ctr_process($plaintext, &$encryptIV, &$buffer) + { + $ciphertext = ''; + + $block_size = $this->block_size; + $key = $this->key; + + if ($this->openssl_emulate_ctr) { + $xor = $encryptIV; + if (strlen($buffer['ciphertext'])) { + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $block = substr($plaintext, $i, $block_size); + if (strlen($block) > strlen($buffer['ciphertext'])) { + $result = @openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options); + $result = !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result; + $buffer['ciphertext'].= $result; + } + $this->_increment_str($xor); + $otp = $this->_string_shift($buffer['ciphertext'], $block_size); + $ciphertext.= $block ^ $otp; + } + } else { + for ($i = 0; $i < strlen($plaintext); $i+=$block_size) { + $block = substr($plaintext, $i, $block_size); + $otp = @openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options); + $otp = !defined('OPENSSL_RAW_DATA') ? substr($otp, 0, -$this->block_size) : $otp; + $this->_increment_str($xor); + $ciphertext.= $block ^ $otp; + } + } + if ($this->continuousBuffer) { + $encryptIV = $xor; + if ($start = strlen($plaintext) % $block_size) { + $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext']; + } + } + + return $ciphertext; + } + + if (strlen($buffer['ciphertext'])) { + $ciphertext = $plaintext ^ $this->_string_shift($buffer['ciphertext'], strlen($plaintext)); + $plaintext = substr($plaintext, strlen($ciphertext)); + + if (!strlen($plaintext)) { + return $ciphertext; + } + } + + $overflow = strlen($plaintext) % $block_size; + if ($overflow) { + $plaintext2 = $this->_string_pop($plaintext, $overflow); // ie. trim $plaintext to a multiple of $block_size and put rest of $plaintext in $plaintext2 + $encrypted = openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV); + $temp = $this->_string_pop($encrypted, $block_size); + $ciphertext.= $encrypted . ($plaintext2 ^ $temp); + if ($this->continuousBuffer) { + $buffer['ciphertext'] = substr($temp, $overflow); + $encryptIV = $temp; + } + } elseif (!strlen($buffer['ciphertext'])) { + $ciphertext.= openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV); + $temp = $this->_string_pop($ciphertext, $block_size); + if ($this->continuousBuffer) { + $encryptIV = $temp; + } + } + if ($this->continuousBuffer) { + if (!defined('OPENSSL_RAW_DATA')) { + $encryptIV.= @openssl_encrypt('', $this->cipher_name_openssl_ecb, $key, $this->openssl_options); + } + $encryptIV = openssl_decrypt($encryptIV, $this->cipher_name_openssl_ecb, $key, $this->openssl_options); + if ($overflow) { + $this->_increment_str($encryptIV); + } + } + + return $ciphertext; + } + + /** + * OpenSSL OFB Processor + * + * PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream + * for OFB is the same for both encrypting and decrypting this function is re-used by both Base::encrypt() + * and Base::decrypt(). + * + * @see self::encrypt() + * @see self::decrypt() + * @param string $plaintext + * @param string $encryptIV + * @param array $buffer + * @return string + * @access private + */ + function _openssl_ofb_process($plaintext, &$encryptIV, &$buffer) + { + if (strlen($buffer['xor'])) { + $ciphertext = $plaintext ^ $buffer['xor']; + $buffer['xor'] = substr($buffer['xor'], strlen($ciphertext)); + $plaintext = substr($plaintext, strlen($ciphertext)); + } else { + $ciphertext = ''; + } + + $block_size = $this->block_size; + + $len = strlen($plaintext); + $key = $this->key; + $overflow = $len % $block_size; + + if (strlen($plaintext)) { + if ($overflow) { + $ciphertext.= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV); + $xor = $this->_string_pop($ciphertext, $block_size); + if ($this->continuousBuffer) { + $encryptIV = $xor; + } + $ciphertext.= $this->_string_shift($xor, $overflow) ^ substr($plaintext, -$overflow); + if ($this->continuousBuffer) { + $buffer['xor'] = $xor; + } + } else { + $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV); + if ($this->continuousBuffer) { + $encryptIV = substr($ciphertext, -$block_size) ^ substr($plaintext, -$block_size); + } + } + } + + return $ciphertext; + } + + /** + * phpseclib <-> OpenSSL Mode Mapper + * + * May need to be overwritten by classes extending this one in some cases + * + * @return int + * @access private + */ + function _openssl_translate_mode() + { + switch ($this->mode) { + case self::MODE_ECB: + return 'ecb'; + case self::MODE_CBC: + return 'cbc'; + case self::MODE_CTR: + return 'ctr'; + case self::MODE_CFB: + return 'cfb'; + case self::MODE_CFB8: + return 'cfb8'; + case self::MODE_OFB: + return 'ofb'; + } + } + + /** + * Pad "packets". + * + * Block ciphers working by encrypting between their specified [$this->]block_size at a time + * If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to + * pad the input so that it is of the proper length. + * + * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH, + * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping + * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is + * transmitted separately) + * + * @see self::disablePadding() + * @access public + */ + function enablePadding() + { + $this->padding = true; + } + + /** + * Do not pad packets. + * + * @see self::enablePadding() + * @access public + */ + function disablePadding() + { + $this->padding = false; + } + + /** + * Treat consecutive "packets" as if they are a continuous buffer. + * + * Say you have a 32-byte plaintext $plaintext. Using the default behavior, the two following code snippets + * will yield different outputs: + * + * + * echo $rijndael->encrypt(substr($plaintext, 0, 16)); + * echo $rijndael->encrypt(substr($plaintext, 16, 16)); + * + * + * echo $rijndael->encrypt($plaintext); + * + * + * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates + * another, as demonstrated with the following: + * + * + * $rijndael->encrypt(substr($plaintext, 0, 16)); + * echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16))); + * + * + * echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16))); + * + * + * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different + * outputs. The reason is due to the fact that the initialization vector's change after every encryption / + * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant. + * + * Put another way, when the continuous buffer is enabled, the state of the \phpseclib\Crypt\*() object changes after each + * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that + * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them), + * however, they are also less intuitive and more likely to cause you problems. + * + * @see self::disableContinuousBuffer() + * @access public + * @internal Could, but not must, extend by the child Crypt_* class + */ + function enableContinuousBuffer() + { + if ($this->mode == self::MODE_ECB) { + return; + } + + $this->continuousBuffer = true; + + $this->_setEngine(); + } + + /** + * Treat consecutive packets as if they are a discontinuous buffer. + * + * The default behavior. + * + * @see self::enableContinuousBuffer() + * @access public + * @internal Could, but not must, extend by the child Crypt_* class + */ + function disableContinuousBuffer() + { + if ($this->mode == self::MODE_ECB) { + return; + } + if (!$this->continuousBuffer) { + return; + } + + $this->continuousBuffer = false; + $this->changed = true; + + $this->_setEngine(); + } + + /** + * Test for engine validity + * + * @see self::__construct() + * @param int $engine + * @access public + * @return bool + */ + function isValidEngine($engine) + { + switch ($engine) { + case self::ENGINE_OPENSSL: + if ($this->mode == self::MODE_STREAM && $this->continuousBuffer) { + return false; + } + $this->openssl_emulate_ctr = false; + $result = $this->cipher_name_openssl && + extension_loaded('openssl') && + // PHP 5.3.0 - 5.3.2 did not let you set IV's + version_compare(PHP_VERSION, '5.3.3', '>='); + if (!$result) { + return false; + } + + // prior to PHP 5.4.0 OPENSSL_RAW_DATA and OPENSSL_ZERO_PADDING were not defined. instead of expecting an integer + // $options openssl_encrypt expected a boolean $raw_data. + if (!defined('OPENSSL_RAW_DATA')) { + $this->openssl_options = true; + } else { + $this->openssl_options = OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING; + } + + $methods = openssl_get_cipher_methods(); + if (in_array($this->cipher_name_openssl, $methods)) { + return true; + } + // not all of openssl's symmetric cipher's support ctr. for those + // that don't we'll emulate it + switch ($this->mode) { + case self::MODE_CTR: + if (in_array($this->cipher_name_openssl_ecb, $methods)) { + $this->openssl_emulate_ctr = true; + return true; + } + } + return false; + case self::ENGINE_MCRYPT: + return $this->cipher_name_mcrypt && + extension_loaded('mcrypt') && + in_array($this->cipher_name_mcrypt, @mcrypt_list_algorithms()); + case self::ENGINE_INTERNAL: + return true; + } + + return false; + } + + /** + * Sets the preferred crypt engine + * + * Currently, $engine could be: + * + * - \phpseclib\Crypt\Base::ENGINE_OPENSSL [very fast] + * + * - \phpseclib\Crypt\Base::ENGINE_MCRYPT [fast] + * + * - \phpseclib\Crypt\Base::ENGINE_INTERNAL [slow] + * + * If the preferred crypt engine is not available the fastest available one will be used + * + * @see self::__construct() + * @param int $engine + * @access public + */ + function setPreferredEngine($engine) + { + switch ($engine) { + //case self::ENGINE_OPENSSL; + case self::ENGINE_MCRYPT: + case self::ENGINE_INTERNAL: + $this->preferredEngine = $engine; + break; + default: + $this->preferredEngine = self::ENGINE_OPENSSL; + } + + $this->_setEngine(); + } + + /** + * Returns the engine currently being utilized + * + * @see self::_setEngine() + * @access public + */ + function getEngine() + { + return $this->engine; + } + + /** + * Sets the engine as appropriate + * + * @see self::__construct() + * @access private + */ + function _setEngine() + { + $this->engine = null; + + $candidateEngines = array( + $this->preferredEngine, + self::ENGINE_OPENSSL, + self::ENGINE_MCRYPT + ); + foreach ($candidateEngines as $engine) { + if ($this->isValidEngine($engine)) { + $this->engine = $engine; + break; + } + } + if (!$this->engine) { + $this->engine = self::ENGINE_INTERNAL; + } + + if ($this->engine != self::ENGINE_MCRYPT && $this->enmcrypt) { + // Closing the current mcrypt resource(s). _mcryptSetup() will, if needed, + // (re)open them with the module named in $this->cipher_name_mcrypt + @mcrypt_module_close($this->enmcrypt); + @mcrypt_module_close($this->demcrypt); + $this->enmcrypt = null; + $this->demcrypt = null; + + if ($this->ecb) { + @mcrypt_module_close($this->ecb); + $this->ecb = null; + } + } + + $this->changed = true; + } + + /** + * Encrypts a block + * + * Note: Must be extended by the child \phpseclib\Crypt\* class + * + * @access private + * @param string $in + * @return string + */ + abstract function _encryptBlock($in); + + /** + * Decrypts a block + * + * Note: Must be extended by the child \phpseclib\Crypt\* class + * + * @access private + * @param string $in + * @return string + */ + abstract function _decryptBlock($in); + + /** + * Setup the key (expansion) + * + * Only used if $engine == self::ENGINE_INTERNAL + * + * Note: Must extend by the child \phpseclib\Crypt\* class + * + * @see self::_setup() + * @access private + */ + abstract function _setupKey(); + + /** + * Setup the self::ENGINE_INTERNAL $engine + * + * (re)init, if necessary, the internal cipher $engine and flush all $buffers + * Used (only) if $engine == self::ENGINE_INTERNAL + * + * _setup() will be called each time if $changed === true + * typically this happens when using one or more of following public methods: + * + * - setKey() + * + * - setIV() + * + * - disableContinuousBuffer() + * + * - First run of encrypt() / decrypt() with no init-settings + * + * @see self::setKey() + * @see self::setIV() + * @see self::disableContinuousBuffer() + * @access private + * @internal _setup() is always called before en/decryption. + * @internal Could, but not must, extend by the child Crypt_* class + */ + function _setup() + { + $this->_clearBuffers(); + $this->_setupKey(); + + if ($this->use_inline_crypt) { + $this->_setupInlineCrypt(); + } + } + + /** + * Setup the self::ENGINE_MCRYPT $engine + * + * (re)init, if necessary, the (ext)mcrypt resources and flush all $buffers + * Used (only) if $engine = self::ENGINE_MCRYPT + * + * _setupMcrypt() will be called each time if $changed === true + * typically this happens when using one or more of following public methods: + * + * - setKey() + * + * - setIV() + * + * - disableContinuousBuffer() + * + * - First run of encrypt() / decrypt() + * + * @see self::setKey() + * @see self::setIV() + * @see self::disableContinuousBuffer() + * @access private + * @internal Could, but not must, extend by the child Crypt_* class + */ + function _setupMcrypt() + { + $this->_clearBuffers(); + $this->enchanged = $this->dechanged = true; + + if (!isset($this->enmcrypt)) { + static $mcrypt_modes = array( + self::MODE_CTR => 'ctr', + self::MODE_ECB => MCRYPT_MODE_ECB, + self::MODE_CBC => MCRYPT_MODE_CBC, + self::MODE_CFB => 'ncfb', + self::MODE_CFB8 => MCRYPT_MODE_CFB, + self::MODE_OFB => MCRYPT_MODE_NOFB, + self::MODE_STREAM => MCRYPT_MODE_STREAM, + ); + + $this->demcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], ''); + $this->enmcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], ''); + + // we need the $ecb mcrypt resource (only) in MODE_CFB with enableContinuousBuffer() + // to workaround mcrypt's broken ncfb implementation in buffered mode + // see: {@link http://phpseclib.sourceforge.net/cfb-demo.phps} + if ($this->mode == self::MODE_CFB) { + $this->ecb = @mcrypt_module_open($this->cipher_name_mcrypt, '', MCRYPT_MODE_ECB, ''); + } + } // else should mcrypt_generic_deinit be called? + + if ($this->mode == self::MODE_CFB) { + @mcrypt_generic_init($this->ecb, $this->key, str_repeat("\0", $this->block_size)); + } + } + + /** + * Pads a string + * + * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize. + * $this->block_size - (strlen($text) % $this->block_size) bytes are added, each of which is equal to + * chr($this->block_size - (strlen($text) % $this->block_size) + * + * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless + * and padding will, hence forth, be enabled. + * + * @see self::_unpad() + * @param string $text + * @access private + * @return string + */ + function _pad($text) + { + $length = strlen($text); + + if (!$this->padding) { + if ($length % $this->block_size == 0) { + return $text; + } else { + user_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})"); + $this->padding = true; + } + } + + $pad = $this->block_size - ($length % $this->block_size); + + return str_pad($text, $length + $pad, chr($pad)); + } + + /** + * Unpads a string. + * + * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong + * and false will be returned. + * + * @see self::_pad() + * @param string $text + * @access private + * @return string + */ + function _unpad($text) + { + if (!$this->padding) { + return $text; + } + + $length = ord($text[strlen($text) - 1]); + + if (!$length || $length > $this->block_size) { + return false; + } + + return substr($text, 0, -$length); + } + + /** + * Clears internal buffers + * + * Clearing/resetting the internal buffers is done everytime + * after disableContinuousBuffer() or on cipher $engine (re)init + * ie after setKey() or setIV() + * + * @access public + * @internal Could, but not must, extend by the child Crypt_* class + */ + function _clearBuffers() + { + $this->enbuffer = $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true); + + // mcrypt's handling of invalid's $iv: + // $this->encryptIV = $this->decryptIV = strlen($this->iv) == $this->block_size ? $this->iv : str_repeat("\0", $this->block_size); + $this->encryptIV = $this->decryptIV = str_pad(substr($this->iv, 0, $this->block_size), $this->block_size, "\0"); + + if (!$this->skip_key_adjustment) { + $this->key = str_pad(substr($this->key, 0, $this->key_length), $this->key_length, "\0"); + } + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param string $string + * @param int $index + * @access private + * @return string + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } + + /** + * String Pop + * + * Inspired by array_pop + * + * @param string $string + * @param int $index + * @access private + * @return string + */ + function _string_pop(&$string, $index = 1) + { + $substr = substr($string, -$index); + $string = substr($string, 0, -$index); + return $substr; + } + + /** + * Increment the current string + * + * @see self::decrypt() + * @see self::encrypt() + * @param string $var + * @access private + */ + function _increment_str(&$var) + { + for ($i = 4; $i <= strlen($var); $i+= 4) { + $temp = substr($var, -$i, 4); + switch ($temp) { + case "\xFF\xFF\xFF\xFF": + $var = substr_replace($var, "\x00\x00\x00\x00", -$i, 4); + break; + case "\x7F\xFF\xFF\xFF": + $var = substr_replace($var, "\x80\x00\x00\x00", -$i, 4); + return; + default: + $temp = unpack('Nnum', $temp); + $var = substr_replace($var, pack('N', $temp['num'] + 1), -$i, 4); + return; + } + } + + $remainder = strlen($var) % 4; + + if ($remainder == 0) { + return; + } + + $temp = unpack('Nnum', str_pad(substr($var, 0, $remainder), 4, "\0", STR_PAD_LEFT)); + $temp = substr(pack('N', $temp['num'] + 1), -$remainder); + $var = substr_replace($var, $temp, 0, $remainder); + } + + /** + * Setup the performance-optimized function for de/encrypt() + * + * Stores the created (or existing) callback function-name + * in $this->inline_crypt + * + * Internally for phpseclib developers: + * + * _setupInlineCrypt() would be called only if: + * + * - $engine == self::ENGINE_INTERNAL and + * + * - $use_inline_crypt === true + * + * - each time on _setup(), after(!) _setupKey() + * + * + * This ensures that _setupInlineCrypt() has always a + * full ready2go initializated internal cipher $engine state + * where, for example, the keys allready expanded, + * keys/block_size calculated and such. + * + * It is, each time if called, the responsibility of _setupInlineCrypt(): + * + * - to set $this->inline_crypt to a valid and fully working callback function + * as a (faster) replacement for encrypt() / decrypt() + * + * - NOT to create unlimited callback functions (for memory reasons!) + * no matter how often _setupInlineCrypt() would be called. At some + * point of amount they must be generic re-useable. + * + * - the code of _setupInlineCrypt() it self, + * and the generated callback code, + * must be, in following order: + * - 100% safe + * - 100% compatible to encrypt()/decrypt() + * - using only php5+ features/lang-constructs/php-extensions if + * compatibility (down to php4) or fallback is provided + * - readable/maintainable/understandable/commented and... not-cryptic-styled-code :-) + * - >= 10% faster than encrypt()/decrypt() [which is, by the way, + * the reason for the existence of _setupInlineCrypt() :-)] + * - memory-nice + * - short (as good as possible) + * + * Note: - _setupInlineCrypt() is using _createInlineCryptFunction() to create the full callback function code. + * - In case of using inline crypting, _setupInlineCrypt() must extend by the child \phpseclib\Crypt\* class. + * - The following variable names are reserved: + * - $_* (all variable names prefixed with an underscore) + * - $self (object reference to it self. Do not use $this, but $self instead) + * - $in (the content of $in has to en/decrypt by the generated code) + * - The callback function should not use the 'return' statement, but en/decrypt'ing the content of $in only + * + * + * @see self::_setup() + * @see self::_createInlineCryptFunction() + * @see self::encrypt() + * @see self::decrypt() + * @access private + * @internal If a Crypt_* class providing inline crypting it must extend _setupInlineCrypt() + */ + function _setupInlineCrypt() + { + // If, for any reason, an extending \phpseclib\Crypt\Base() \phpseclib\Crypt\* class + // not using inline crypting then it must be ensured that: $this->use_inline_crypt = false + // ie in the class var declaration of $use_inline_crypt in general for the \phpseclib\Crypt\* class, + // in the constructor at object instance-time + // or, if it's runtime-specific, at runtime + + $this->use_inline_crypt = false; + } + + /** + * Creates the performance-optimized function for en/decrypt() + * + * Internally for phpseclib developers: + * + * _createInlineCryptFunction(): + * + * - merge the $cipher_code [setup'ed by _setupInlineCrypt()] + * with the current [$this->]mode of operation code + * + * - create the $inline function, which called by encrypt() / decrypt() + * as its replacement to speed up the en/decryption operations. + * + * - return the name of the created $inline callback function + * + * - used to speed up en/decryption + * + * + * + * The main reason why can speed up things [up to 50%] this way are: + * + * - using variables more effective then regular. + * (ie no use of expensive arrays but integers $k_0, $k_1 ... + * or even, for example, the pure $key[] values hardcoded) + * + * - avoiding 1000's of function calls of ie _encryptBlock() + * but inlining the crypt operations. + * in the mode of operation for() loop. + * + * - full loop unroll the (sometimes key-dependent) rounds + * avoiding this way ++$i counters and runtime-if's etc... + * + * The basic code architectur of the generated $inline en/decrypt() + * lambda function, in pseudo php, is: + * + * + * +----------------------------------------------------------------------------------------------+ + * | callback $inline = create_function: | + * | lambda_function_0001_crypt_ECB($action, $text) | + * | { | + * | INSERT PHP CODE OF: | + * | $cipher_code['init_crypt']; // general init code. | + * | // ie: $sbox'es declarations used for | + * | // encrypt and decrypt'ing. | + * | | + * | switch ($action) { | + * | case 'encrypt': | + * | INSERT PHP CODE OF: | + * | $cipher_code['init_encrypt']; // encrypt sepcific init code. | + * | ie: specified $key or $box | + * | declarations for encrypt'ing. | + * | | + * | foreach ($ciphertext) { | + * | $in = $block_size of $ciphertext; | + * | | + * | INSERT PHP CODE OF: | + * | $cipher_code['encrypt_block']; // encrypt's (string) $in, which is always: | + * | // strlen($in) == $this->block_size | + * | // here comes the cipher algorithm in action | + * | // for encryption. | + * | // $cipher_code['encrypt_block'] has to | + * | // encrypt the content of the $in variable | + * | | + * | $plaintext .= $in; | + * | } | + * | return $plaintext; | + * | | + * | case 'decrypt': | + * | INSERT PHP CODE OF: | + * | $cipher_code['init_decrypt']; // decrypt sepcific init code | + * | ie: specified $key or $box | + * | declarations for decrypt'ing. | + * | foreach ($plaintext) { | + * | $in = $block_size of $plaintext; | + * | | + * | INSERT PHP CODE OF: | + * | $cipher_code['decrypt_block']; // decrypt's (string) $in, which is always | + * | // strlen($in) == $this->block_size | + * | // here comes the cipher algorithm in action | + * | // for decryption. | + * | // $cipher_code['decrypt_block'] has to | + * | // decrypt the content of the $in variable | + * | $ciphertext .= $in; | + * | } | + * | return $ciphertext; | + * | } | + * | } | + * +----------------------------------------------------------------------------------------------+ + * + * + * See also the \phpseclib\Crypt\*::_setupInlineCrypt()'s for + * productive inline $cipher_code's how they works. + * + * Structure of: + * + * $cipher_code = array( + * 'init_crypt' => (string) '', // optional + * 'init_encrypt' => (string) '', // optional + * 'init_decrypt' => (string) '', // optional + * 'encrypt_block' => (string) '', // required + * 'decrypt_block' => (string) '' // required + * ); + * + * + * @see self::_setupInlineCrypt() + * @see self::encrypt() + * @see self::decrypt() + * @param array $cipher_code + * @access private + * @return string (the name of the created callback function) + */ + function _createInlineCryptFunction($cipher_code) + { + $block_size = $this->block_size; + + // optional + $init_crypt = isset($cipher_code['init_crypt']) ? $cipher_code['init_crypt'] : ''; + $init_encrypt = isset($cipher_code['init_encrypt']) ? $cipher_code['init_encrypt'] : ''; + $init_decrypt = isset($cipher_code['init_decrypt']) ? $cipher_code['init_decrypt'] : ''; + // required + $encrypt_block = $cipher_code['encrypt_block']; + $decrypt_block = $cipher_code['decrypt_block']; + + // Generating mode of operation inline code, + // merged with the $cipher_code algorithm + // for encrypt- and decryption. + switch ($this->mode) { + case self::MODE_ECB: + $encrypt = $init_encrypt . ' + $_ciphertext = ""; + $_plaintext_len = strlen($_text); + + for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') { + $in = substr($_text, $_i, '.$block_size.'); + '.$encrypt_block.' + $_ciphertext.= $in; + } + + return $_ciphertext; + '; + + $decrypt = $init_decrypt . ' + $_plaintext = ""; + $_text = str_pad($_text, strlen($_text) + ('.$block_size.' - strlen($_text) % '.$block_size.') % '.$block_size.', chr(0)); + $_ciphertext_len = strlen($_text); + + for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') { + $in = substr($_text, $_i, '.$block_size.'); + '.$decrypt_block.' + $_plaintext.= $in; + } + + return $self->_unpad($_plaintext); + '; + break; + case self::MODE_CTR: + $encrypt = $init_encrypt . ' + $_ciphertext = ""; + $_plaintext_len = strlen($_text); + $_xor = $self->encryptIV; + $_buffer = &$self->enbuffer; + if (strlen($_buffer["ciphertext"])) { + for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') { + $_block = substr($_text, $_i, '.$block_size.'); + if (strlen($_block) > strlen($_buffer["ciphertext"])) { + $in = $_xor; + '.$encrypt_block.' + $self->_increment_str($_xor); + $_buffer["ciphertext"].= $in; + } + $_key = $self->_string_shift($_buffer["ciphertext"], '.$block_size.'); + $_ciphertext.= $_block ^ $_key; + } + } else { + for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') { + $_block = substr($_text, $_i, '.$block_size.'); + $in = $_xor; + '.$encrypt_block.' + $self->_increment_str($_xor); + $_key = $in; + $_ciphertext.= $_block ^ $_key; + } + } + if ($self->continuousBuffer) { + $self->encryptIV = $_xor; + if ($_start = $_plaintext_len % '.$block_size.') { + $_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"]; + } + } + + return $_ciphertext; + '; + + $decrypt = $init_encrypt . ' + $_plaintext = ""; + $_ciphertext_len = strlen($_text); + $_xor = $self->decryptIV; + $_buffer = &$self->debuffer; + + if (strlen($_buffer["ciphertext"])) { + for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') { + $_block = substr($_text, $_i, '.$block_size.'); + if (strlen($_block) > strlen($_buffer["ciphertext"])) { + $in = $_xor; + '.$encrypt_block.' + $self->_increment_str($_xor); + $_buffer["ciphertext"].= $in; + } + $_key = $self->_string_shift($_buffer["ciphertext"], '.$block_size.'); + $_plaintext.= $_block ^ $_key; + } + } else { + for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') { + $_block = substr($_text, $_i, '.$block_size.'); + $in = $_xor; + '.$encrypt_block.' + $self->_increment_str($_xor); + $_key = $in; + $_plaintext.= $_block ^ $_key; + } + } + if ($self->continuousBuffer) { + $self->decryptIV = $_xor; + if ($_start = $_ciphertext_len % '.$block_size.') { + $_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"]; + } + } + + return $_plaintext; + '; + break; + case self::MODE_CFB: + $encrypt = $init_encrypt . ' + $_ciphertext = ""; + $_buffer = &$self->enbuffer; + + if ($self->continuousBuffer) { + $_iv = &$self->encryptIV; + $_pos = &$_buffer["pos"]; + } else { + $_iv = $self->encryptIV; + $_pos = 0; + } + $_len = strlen($_text); + $_i = 0; + if ($_pos) { + $_orig_pos = $_pos; + $_max = '.$block_size.' - $_pos; + if ($_len >= $_max) { + $_i = $_max; + $_len-= $_max; + $_pos = 0; + } else { + $_i = $_len; + $_pos+= $_len; + $_len = 0; + } + $_ciphertext = substr($_iv, $_orig_pos) ^ $_text; + $_iv = substr_replace($_iv, $_ciphertext, $_orig_pos, $_i); + } + while ($_len >= '.$block_size.') { + $in = $_iv; + '.$encrypt_block.'; + $_iv = $in ^ substr($_text, $_i, '.$block_size.'); + $_ciphertext.= $_iv; + $_len-= '.$block_size.'; + $_i+= '.$block_size.'; + } + if ($_len) { + $in = $_iv; + '.$encrypt_block.' + $_iv = $in; + $_block = $_iv ^ substr($_text, $_i); + $_iv = substr_replace($_iv, $_block, 0, $_len); + $_ciphertext.= $_block; + $_pos = $_len; + } + return $_ciphertext; + '; + + $decrypt = $init_encrypt . ' + $_plaintext = ""; + $_buffer = &$self->debuffer; + + if ($self->continuousBuffer) { + $_iv = &$self->decryptIV; + $_pos = &$_buffer["pos"]; + } else { + $_iv = $self->decryptIV; + $_pos = 0; + } + $_len = strlen($_text); + $_i = 0; + if ($_pos) { + $_orig_pos = $_pos; + $_max = '.$block_size.' - $_pos; + if ($_len >= $_max) { + $_i = $_max; + $_len-= $_max; + $_pos = 0; + } else { + $_i = $_len; + $_pos+= $_len; + $_len = 0; + } + $_plaintext = substr($_iv, $_orig_pos) ^ $_text; + $_iv = substr_replace($_iv, substr($_text, 0, $_i), $_orig_pos, $_i); + } + while ($_len >= '.$block_size.') { + $in = $_iv; + '.$encrypt_block.' + $_iv = $in; + $cb = substr($_text, $_i, '.$block_size.'); + $_plaintext.= $_iv ^ $cb; + $_iv = $cb; + $_len-= '.$block_size.'; + $_i+= '.$block_size.'; + } + if ($_len) { + $in = $_iv; + '.$encrypt_block.' + $_iv = $in; + $_plaintext.= $_iv ^ substr($_text, $_i); + $_iv = substr_replace($_iv, substr($_text, $_i), 0, $_len); + $_pos = $_len; + } + + return $_plaintext; + '; + break; + case self::MODE_CFB8: + $encrypt = $init_encrypt . ' + $_ciphertext = ""; + $_len = strlen($_text); + $_iv = $self->encryptIV; + + for ($_i = 0; $_i < $_len; ++$_i) { + $in = $_iv; + '.$encrypt_block.' + $_ciphertext .= ($_c = $_text[$_i] ^ $in); + $_iv = substr($_iv, 1) . $_c; + } + + if ($self->continuousBuffer) { + if ($_len >= '.$block_size.') { + $self->encryptIV = substr($_ciphertext, -'.$block_size.'); + } else { + $self->encryptIV = substr($self->encryptIV, $_len - '.$block_size.') . substr($_ciphertext, -$_len); + } + } + + return $_ciphertext; + '; + $decrypt = $init_encrypt . ' + $_plaintext = ""; + $_len = strlen($_text); + $_iv = $self->decryptIV; + + for ($_i = 0; $_i < $_len; ++$_i) { + $in = $_iv; + '.$encrypt_block.' + $_plaintext .= $_text[$_i] ^ $in; + $_iv = substr($_iv, 1) . $_text[$_i]; + } + + if ($self->continuousBuffer) { + if ($_len >= '.$block_size.') { + $self->decryptIV = substr($_text, -'.$block_size.'); + } else { + $self->decryptIV = substr($self->decryptIV, $_len - '.$block_size.') . substr($_text, -$_len); + } + } + + return $_plaintext; + '; + break; + case self::MODE_OFB: + $encrypt = $init_encrypt . ' + $_ciphertext = ""; + $_plaintext_len = strlen($_text); + $_xor = $self->encryptIV; + $_buffer = &$self->enbuffer; + + if (strlen($_buffer["xor"])) { + for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') { + $_block = substr($_text, $_i, '.$block_size.'); + if (strlen($_block) > strlen($_buffer["xor"])) { + $in = $_xor; + '.$encrypt_block.' + $_xor = $in; + $_buffer["xor"].= $_xor; + } + $_key = $self->_string_shift($_buffer["xor"], '.$block_size.'); + $_ciphertext.= $_block ^ $_key; + } + } else { + for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') { + $in = $_xor; + '.$encrypt_block.' + $_xor = $in; + $_ciphertext.= substr($_text, $_i, '.$block_size.') ^ $_xor; + } + $_key = $_xor; + } + if ($self->continuousBuffer) { + $self->encryptIV = $_xor; + if ($_start = $_plaintext_len % '.$block_size.') { + $_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"]; + } + } + return $_ciphertext; + '; + + $decrypt = $init_encrypt . ' + $_plaintext = ""; + $_ciphertext_len = strlen($_text); + $_xor = $self->decryptIV; + $_buffer = &$self->debuffer; + + if (strlen($_buffer["xor"])) { + for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') { + $_block = substr($_text, $_i, '.$block_size.'); + if (strlen($_block) > strlen($_buffer["xor"])) { + $in = $_xor; + '.$encrypt_block.' + $_xor = $in; + $_buffer["xor"].= $_xor; + } + $_key = $self->_string_shift($_buffer["xor"], '.$block_size.'); + $_plaintext.= $_block ^ $_key; + } + } else { + for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') { + $in = $_xor; + '.$encrypt_block.' + $_xor = $in; + $_plaintext.= substr($_text, $_i, '.$block_size.') ^ $_xor; + } + $_key = $_xor; + } + if ($self->continuousBuffer) { + $self->decryptIV = $_xor; + if ($_start = $_ciphertext_len % '.$block_size.') { + $_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"]; + } + } + return $_plaintext; + '; + break; + case self::MODE_STREAM: + $encrypt = $init_encrypt . ' + $_ciphertext = ""; + '.$encrypt_block.' + return $_ciphertext; + '; + $decrypt = $init_decrypt . ' + $_plaintext = ""; + '.$decrypt_block.' + return $_plaintext; + '; + break; + // case self::MODE_CBC: + default: + $encrypt = $init_encrypt . ' + $_ciphertext = ""; + $_plaintext_len = strlen($_text); + + $in = $self->encryptIV; + + for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') { + $in = substr($_text, $_i, '.$block_size.') ^ $in; + '.$encrypt_block.' + $_ciphertext.= $in; + } + + if ($self->continuousBuffer) { + $self->encryptIV = $in; + } + + return $_ciphertext; + '; + + $decrypt = $init_decrypt . ' + $_plaintext = ""; + $_text = str_pad($_text, strlen($_text) + ('.$block_size.' - strlen($_text) % '.$block_size.') % '.$block_size.', chr(0)); + $_ciphertext_len = strlen($_text); + + $_iv = $self->decryptIV; + + for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') { + $in = $_block = substr($_text, $_i, '.$block_size.'); + '.$decrypt_block.' + $_plaintext.= $in ^ $_iv; + $_iv = $_block; + } + + if ($self->continuousBuffer) { + $self->decryptIV = $_iv; + } + + return $self->_unpad($_plaintext); + '; + break; + } + + // Create the $inline function and return its name as string. Ready to run! + eval('$func = function ($_action, &$self, $_text) { ' . $init_crypt . 'if ($_action == "encrypt") { ' . $encrypt . ' } else { ' . $decrypt . ' } };'); + return $func; + } + + /** + * Holds the lambda_functions table (classwide) + * + * Each name of the lambda function, created from + * _setupInlineCrypt() && _createInlineCryptFunction() + * is stored, classwide (!), here for reusing. + * + * The string-based index of $function is a classwide + * unique value representing, at least, the $mode of + * operation (or more... depends of the optimizing level) + * for which $mode the lambda function was created. + * + * @access private + * @return array &$functions + */ + function &_getLambdaFunctions() + { + static $functions = array(); + return $functions; + } + + /** + * Generates a digest from $bytes + * + * @see self::_setupInlineCrypt() + * @access private + * @param string $bytes + * @return string + */ + function _hashInlineCryptFunction($bytes) + { + if (!isset(self::$WHIRLPOOL_AVAILABLE)) { + self::$WHIRLPOOL_AVAILABLE = extension_loaded('hash') && in_array('whirlpool', hash_algos()); + } + + $result = ''; + $hash = $bytes; + + switch (true) { + case self::$WHIRLPOOL_AVAILABLE: + foreach (str_split($bytes, 64) as $t) { + $hash = hash('whirlpool', $hash, true); + $result .= $t ^ $hash; + } + return $result . hash('whirlpool', $hash, true); + default: + $len = strlen($bytes); + for ($i = 0; $i < $len; $i+=20) { + $t = substr($bytes, $i, 20); + $hash = pack('H*', sha1($hash)); + $result .= $t ^ $hash; + } + return $result . pack('H*', sha1($hash)); + } + } + + /** + * Convert float to int + * + * On ARM CPUs converting floats to ints doesn't always work + * + * @access private + * @param string $x + * @return int + */ + function safe_intval($x) + { + switch (true) { + case is_int($x): + // PHP 5.3, per http://php.net/releases/5_3_0.php, introduced "more consistent float rounding" + case (php_uname('m') & "\xDF\xDF\xDF") != 'ARM': + return $x; + } + return (fmod($x, 0x80000000) & 0x7FFFFFFF) | + ((fmod(floor($x / 0x80000000), 2) & 1) << 31); + } + + /** + * eval()'able string for in-line float to int + * + * @access private + * @return string + */ + function safe_intval_inline() + { + switch (true) { + case defined('PHP_INT_SIZE') && PHP_INT_SIZE == 8: + case (php_uname('m') & "\xDF\xDF\xDF") != 'ARM': + return '%s'; + break; + default: + $safeint = '(is_int($temp = %s) ? $temp : (fmod($temp, 0x80000000) & 0x7FFFFFFF) | '; + return $safeint . '((fmod(floor($temp / 0x80000000), 2) & 1) << 31))'; + } + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php new file mode 100644 index 000000000..74cc49de8 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php @@ -0,0 +1,571 @@ + + * setKey('12345678901234567890123456789012'); + * + * $plaintext = str_repeat('a', 1024); + * + * echo $blowfish->decrypt($blowfish->encrypt($plaintext)); + * ?> + * + * + * @category Crypt + * @package Blowfish + * @author Jim Wigginton + * @author Hans-Juergen Petrich + * @copyright 2007 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Crypt; + +/** + * Pure-PHP implementation of Blowfish. + * + * @package Blowfish + * @author Jim Wigginton + * @author Hans-Juergen Petrich + * @access public + */ +class Blowfish extends Base +{ + /** + * Block Length of the cipher + * + * @see \phpseclib\Crypt\Base::block_size + * @var int + * @access private + */ + var $block_size = 8; + + /** + * The mcrypt specific name of the cipher + * + * @see \phpseclib\Crypt\Base::cipher_name_mcrypt + * @var string + * @access private + */ + var $cipher_name_mcrypt = 'blowfish'; + + /** + * Optimizing value while CFB-encrypting + * + * @see \phpseclib\Crypt\Base::cfb_init_len + * @var int + * @access private + */ + var $cfb_init_len = 500; + + /** + * The fixed subkeys boxes ($sbox0 - $sbox3) with 256 entries each + * + * S-Box 0 + * + * @access private + * @var array + */ + var $sbox0 = array( + 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, + 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, + 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, + 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, + 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, + 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, + 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, + 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, + 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, + 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, + 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, + 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, + 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, + 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, + 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, + 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, + 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, + 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, + 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, + 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, + 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, + 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, + 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, + 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, + 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, + 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, + 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, + 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, + 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, + 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, + 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, + 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a + ); + + /** + * S-Box 1 + * + * @access private + * @var array + */ + var $sbox1 = array( + 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, + 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, + 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, + 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, + 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, + 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, + 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, + 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, + 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, + 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, + 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, + 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, + 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, + 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, + 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, + 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, + 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, + 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, + 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, + 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, + 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, + 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, + 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, + 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, + 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, + 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, + 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, + 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, + 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, + 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, + 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, + 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7 + ); + + /** + * S-Box 2 + * + * @access private + * @var array + */ + var $sbox2 = array( + 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, + 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, + 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, + 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, + 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, + 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, + 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, + 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, + 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, + 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, + 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, + 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, + 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, + 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, + 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, + 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, + 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, + 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, + 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, + 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, + 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, + 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, + 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, + 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, + 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, + 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, + 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, + 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, + 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, + 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, + 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, + 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0 + ); + + /** + * S-Box 3 + * + * @access private + * @var array + */ + var $sbox3 = array( + 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, + 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, + 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, + 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, + 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, + 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, + 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, + 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, + 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, + 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, + 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, + 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, + 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, + 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, + 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, + 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, + 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, + 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, + 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, + 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, + 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, + 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, + 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, + 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, + 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, + 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, + 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, + 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, + 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, + 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, + 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, + 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6 + ); + + /** + * P-Array consists of 18 32-bit subkeys + * + * @var array + * @access private + */ + var $parray = array( + 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, + 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, + 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b + ); + + /** + * The BCTX-working Array + * + * Holds the expanded key [p] and the key-depended s-boxes [sb] + * + * @var array + * @access private + */ + var $bctx; + + /** + * Holds the last used key + * + * @var array + * @access private + */ + var $kl; + + /** + * The Key Length (in bytes) + * + * @see \phpseclib\Crypt\Base::setKeyLength() + * @var int + * @access private + * @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16. Exists in conjunction with $Nk + * because the encryption / decryption / key schedule creation requires this number and not $key_length. We could + * derive this from $key_length or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu + * of that, we'll just precompute it once. + */ + var $key_length = 16; + + /** + * Sets the key length. + * + * Key lengths can be between 32 and 448 bits. + * + * @access public + * @param int $length + */ + function setKeyLength($length) + { + if ($length < 32) { + $this->key_length = 4; + } elseif ($length > 448) { + $this->key_length = 56; + } else { + $this->key_length = $length >> 3; + } + + parent::setKeyLength($length); + } + + /** + * Test for engine validity + * + * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine() + * + * @see \phpseclib\Crypt\Base::isValidEngine() + * @param int $engine + * @access public + * @return bool + */ + function isValidEngine($engine) + { + if ($engine == self::ENGINE_OPENSSL) { + if (version_compare(PHP_VERSION, '5.3.7') < 0 && $this->key_length != 16) { + return false; + } + if ($this->key_length < 16) { + return false; + } + $this->cipher_name_openssl_ecb = 'bf-ecb'; + $this->cipher_name_openssl = 'bf-' . $this->_openssl_translate_mode(); + } + + return parent::isValidEngine($engine); + } + + /** + * Setup the key (expansion) + * + * @see \phpseclib\Crypt\Base::_setupKey() + * @access private + */ + function _setupKey() + { + if (isset($this->kl['key']) && $this->key === $this->kl['key']) { + // already expanded + return; + } + $this->kl = array('key' => $this->key); + + /* key-expanding p[] and S-Box building sb[] */ + $this->bctx = array( + 'p' => array(), + 'sb' => array( + $this->sbox0, + $this->sbox1, + $this->sbox2, + $this->sbox3 + ) + ); + + // unpack binary string in unsigned chars + $key = array_values(unpack('C*', $this->key)); + $keyl = count($key); + for ($j = 0, $i = 0; $i < 18; ++$i) { + // xor P1 with the first 32-bits of the key, xor P2 with the second 32-bits ... + for ($data = 0, $k = 0; $k < 4; ++$k) { + $data = ($data << 8) | $key[$j]; + if (++$j >= $keyl) { + $j = 0; + } + } + $this->bctx['p'][] = $this->parray[$i] ^ $data; + } + + // encrypt the zero-string, replace P1 and P2 with the encrypted data, + // encrypt P3 and P4 with the new P1 and P2, do it with all P-array and subkeys + $data = "\0\0\0\0\0\0\0\0"; + for ($i = 0; $i < 18; $i += 2) { + list($l, $r) = array_values(unpack('N*', $data = $this->_encryptBlock($data))); + $this->bctx['p'][$i ] = $l; + $this->bctx['p'][$i + 1] = $r; + } + for ($i = 0; $i < 4; ++$i) { + for ($j = 0; $j < 256; $j += 2) { + list($l, $r) = array_values(unpack('N*', $data = $this->_encryptBlock($data))); + $this->bctx['sb'][$i][$j ] = $l; + $this->bctx['sb'][$i][$j + 1] = $r; + } + } + } + + /** + * Encrypts a block + * + * @access private + * @param string $in + * @return string + */ + function _encryptBlock($in) + { + $p = $this->bctx["p"]; + // extract($this->bctx["sb"], EXTR_PREFIX_ALL, "sb"); // slower + $sb_0 = $this->bctx["sb"][0]; + $sb_1 = $this->bctx["sb"][1]; + $sb_2 = $this->bctx["sb"][2]; + $sb_3 = $this->bctx["sb"][3]; + + $in = unpack("N*", $in); + $l = $in[1]; + $r = $in[2]; + + for ($i = 0; $i < 16; $i+= 2) { + $l^= $p[$i]; + $r^= $this->safe_intval(($this->safe_intval($sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]) ^ + $sb_2[$l >> 8 & 0xff]) + + $sb_3[$l & 0xff]); + + $r^= $p[$i + 1]; + $l^= $this->safe_intval(($this->safe_intval($sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]) ^ + $sb_2[$r >> 8 & 0xff]) + + $sb_3[$r & 0xff]); + } + return pack("N*", $r ^ $p[17], $l ^ $p[16]); + } + + /** + * Decrypts a block + * + * @access private + * @param string $in + * @return string + */ + function _decryptBlock($in) + { + $p = $this->bctx["p"]; + $sb_0 = $this->bctx["sb"][0]; + $sb_1 = $this->bctx["sb"][1]; + $sb_2 = $this->bctx["sb"][2]; + $sb_3 = $this->bctx["sb"][3]; + + $in = unpack("N*", $in); + $l = $in[1]; + $r = $in[2]; + + for ($i = 17; $i > 2; $i-= 2) { + $l^= $p[$i]; + $r^= $this->safe_intval(($this->safe_intval($sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]) ^ + $sb_2[$l >> 8 & 0xff]) + + $sb_3[$l & 0xff]); + + $r^= $p[$i - 1]; + $l^= $this->safe_intval(($this->safe_intval($sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]) ^ + $sb_2[$r >> 8 & 0xff]) + + $sb_3[$r & 0xff]); + } + return pack("N*", $r ^ $p[0], $l ^ $p[1]); + } + + /** + * Setup the performance-optimized function for de/encrypt() + * + * @see \phpseclib\Crypt\Base::_setupInlineCrypt() + * @access private + */ + function _setupInlineCrypt() + { + $lambda_functions =& self::_getLambdaFunctions(); + + // We create max. 10 hi-optimized code for memory reason. Means: For each $key one ultra fast inline-crypt function. + // (Currently, for Blowfish, one generated $lambda_function cost on php5.5@32bit ~100kb unfreeable mem and ~180kb on php5.5@64bit) + // After that, we'll still create very fast optimized code but not the hi-ultimative code, for each $mode one. + $gen_hi_opt_code = (bool)(count($lambda_functions) < 10); + + // Generation of a unique hash for our generated code + $code_hash = "Crypt_Blowfish, {$this->mode}"; + if ($gen_hi_opt_code) { + $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key); + } + + $safeint = $this->safe_intval_inline(); + + if (!isset($lambda_functions[$code_hash])) { + switch (true) { + case $gen_hi_opt_code: + $p = $this->bctx['p']; + $init_crypt = ' + static $sb_0, $sb_1, $sb_2, $sb_3; + if (!$sb_0) { + $sb_0 = $self->bctx["sb"][0]; + $sb_1 = $self->bctx["sb"][1]; + $sb_2 = $self->bctx["sb"][2]; + $sb_3 = $self->bctx["sb"][3]; + } + '; + break; + default: + $p = array(); + for ($i = 0; $i < 18; ++$i) { + $p[] = '$p_' . $i; + } + $init_crypt = ' + list($sb_0, $sb_1, $sb_2, $sb_3) = $self->bctx["sb"]; + list(' . implode(',', $p) . ') = $self->bctx["p"]; + + '; + } + + // Generating encrypt code: + $encrypt_block = ' + $in = unpack("N*", $in); + $l = $in[1]; + $r = $in[2]; + '; + for ($i = 0; $i < 16; $i+= 2) { + $encrypt_block.= ' + $l^= ' . $p[$i] . '; + $r^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]') . ' ^ + $sb_2[$l >> 8 & 0xff]) + + $sb_3[$l & 0xff]') . '; + + $r^= ' . $p[$i + 1] . '; + $l^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]') . ' ^ + $sb_2[$r >> 8 & 0xff]) + + $sb_3[$r & 0xff]') . '; + '; + } + $encrypt_block.= ' + $in = pack("N*", + $r ^ ' . $p[17] . ', + $l ^ ' . $p[16] . ' + ); + '; + + // Generating decrypt code: + $decrypt_block = ' + $in = unpack("N*", $in); + $l = $in[1]; + $r = $in[2]; + '; + + for ($i = 17; $i > 2; $i-= 2) { + $decrypt_block.= ' + $l^= ' . $p[$i] . '; + $r^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]') . ' ^ + $sb_2[$l >> 8 & 0xff]) + + $sb_3[$l & 0xff]') . '; + + $r^= ' . $p[$i - 1] . '; + $l^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]') . ' ^ + $sb_2[$r >> 8 & 0xff]) + + $sb_3[$r & 0xff]') . '; + '; + } + + $decrypt_block.= ' + $in = pack("N*", + $r ^ ' . $p[0] . ', + $l ^ ' . $p[1] . ' + ); + '; + + $lambda_functions[$code_hash] = $this->_createInlineCryptFunction( + array( + 'init_crypt' => $init_crypt, + 'init_encrypt' => '', + 'init_decrypt' => '', + 'encrypt_block' => $encrypt_block, + 'decrypt_block' => $decrypt_block + ) + ); + } + $this->inline_crypt = $lambda_functions[$code_hash]; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php new file mode 100644 index 000000000..9a8225fb5 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php @@ -0,0 +1,1443 @@ + + * setKey('abcdefgh'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $des->decrypt($des->encrypt($plaintext)); + * ?> + * + * + * @category Crypt + * @package DES + * @author Jim Wigginton + * @copyright 2007 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Crypt; + +/** + * Pure-PHP implementation of DES. + * + * @package DES + * @author Jim Wigginton + * @access public + */ +class DES extends Base +{ + /**#@+ + * @access private + * @see \phpseclib\Crypt\DES::_setupKey() + * @see \phpseclib\Crypt\DES::_processBlock() + */ + /** + * Contains $keys[self::ENCRYPT] + */ + const ENCRYPT = 0; + /** + * Contains $keys[self::DECRYPT] + */ + const DECRYPT = 1; + /**#@-*/ + + /** + * Block Length of the cipher + * + * @see \phpseclib\Crypt\Base::block_size + * @var int + * @access private + */ + var $block_size = 8; + + /** + * Key Length (in bytes) + * + * @see \phpseclib\Crypt\Base::setKeyLength() + * @var int + * @access private + */ + var $key_length = 8; + + /** + * The mcrypt specific name of the cipher + * + * @see \phpseclib\Crypt\Base::cipher_name_mcrypt + * @var string + * @access private + */ + var $cipher_name_mcrypt = 'des'; + + /** + * The OpenSSL names of the cipher / modes + * + * @see \phpseclib\Crypt\Base::openssl_mode_names + * @var array + * @access private + */ + var $openssl_mode_names = array( + self::MODE_ECB => 'des-ecb', + self::MODE_CBC => 'des-cbc', + self::MODE_CFB => 'des-cfb', + self::MODE_OFB => 'des-ofb' + // self::MODE_CTR is undefined for DES + ); + + /** + * Optimizing value while CFB-encrypting + * + * @see \phpseclib\Crypt\Base::cfb_init_len + * @var int + * @access private + */ + var $cfb_init_len = 500; + + /** + * Switch for DES/3DES encryption + * + * Used only if $engine == self::ENGINE_INTERNAL + * + * @see self::_setupKey() + * @see self::_processBlock() + * @var int + * @access private + */ + var $des_rounds = 1; + + /** + * max possible size of $key + * + * @see self::setKey() + * @var string + * @access private + */ + var $key_length_max = 8; + + /** + * The Key Schedule + * + * @see self::_setupKey() + * @var array + * @access private + */ + var $keys; + + /** + * Shuffle table. + * + * For each byte value index, the entry holds an 8-byte string + * with each byte containing all bits in the same state as the + * corresponding bit in the index value. + * + * @see self::_processBlock() + * @see self::_setupKey() + * @var array + * @access private + */ + var $shuffle = array( + "\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\xFF", + "\x00\x00\x00\x00\x00\x00\xFF\x00", "\x00\x00\x00\x00\x00\x00\xFF\xFF", + "\x00\x00\x00\x00\x00\xFF\x00\x00", "\x00\x00\x00\x00\x00\xFF\x00\xFF", + "\x00\x00\x00\x00\x00\xFF\xFF\x00", "\x00\x00\x00\x00\x00\xFF\xFF\xFF", + "\x00\x00\x00\x00\xFF\x00\x00\x00", "\x00\x00\x00\x00\xFF\x00\x00\xFF", + "\x00\x00\x00\x00\xFF\x00\xFF\x00", "\x00\x00\x00\x00\xFF\x00\xFF\xFF", + "\x00\x00\x00\x00\xFF\xFF\x00\x00", "\x00\x00\x00\x00\xFF\xFF\x00\xFF", + "\x00\x00\x00\x00\xFF\xFF\xFF\x00", "\x00\x00\x00\x00\xFF\xFF\xFF\xFF", + "\x00\x00\x00\xFF\x00\x00\x00\x00", "\x00\x00\x00\xFF\x00\x00\x00\xFF", + "\x00\x00\x00\xFF\x00\x00\xFF\x00", "\x00\x00\x00\xFF\x00\x00\xFF\xFF", + "\x00\x00\x00\xFF\x00\xFF\x00\x00", "\x00\x00\x00\xFF\x00\xFF\x00\xFF", + "\x00\x00\x00\xFF\x00\xFF\xFF\x00", "\x00\x00\x00\xFF\x00\xFF\xFF\xFF", + "\x00\x00\x00\xFF\xFF\x00\x00\x00", "\x00\x00\x00\xFF\xFF\x00\x00\xFF", + "\x00\x00\x00\xFF\xFF\x00\xFF\x00", "\x00\x00\x00\xFF\xFF\x00\xFF\xFF", + "\x00\x00\x00\xFF\xFF\xFF\x00\x00", "\x00\x00\x00\xFF\xFF\xFF\x00\xFF", + "\x00\x00\x00\xFF\xFF\xFF\xFF\x00", "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF", + "\x00\x00\xFF\x00\x00\x00\x00\x00", "\x00\x00\xFF\x00\x00\x00\x00\xFF", + "\x00\x00\xFF\x00\x00\x00\xFF\x00", "\x00\x00\xFF\x00\x00\x00\xFF\xFF", + "\x00\x00\xFF\x00\x00\xFF\x00\x00", "\x00\x00\xFF\x00\x00\xFF\x00\xFF", + "\x00\x00\xFF\x00\x00\xFF\xFF\x00", "\x00\x00\xFF\x00\x00\xFF\xFF\xFF", + "\x00\x00\xFF\x00\xFF\x00\x00\x00", "\x00\x00\xFF\x00\xFF\x00\x00\xFF", + "\x00\x00\xFF\x00\xFF\x00\xFF\x00", "\x00\x00\xFF\x00\xFF\x00\xFF\xFF", + "\x00\x00\xFF\x00\xFF\xFF\x00\x00", "\x00\x00\xFF\x00\xFF\xFF\x00\xFF", + "\x00\x00\xFF\x00\xFF\xFF\xFF\x00", "\x00\x00\xFF\x00\xFF\xFF\xFF\xFF", + "\x00\x00\xFF\xFF\x00\x00\x00\x00", "\x00\x00\xFF\xFF\x00\x00\x00\xFF", + "\x00\x00\xFF\xFF\x00\x00\xFF\x00", "\x00\x00\xFF\xFF\x00\x00\xFF\xFF", + "\x00\x00\xFF\xFF\x00\xFF\x00\x00", "\x00\x00\xFF\xFF\x00\xFF\x00\xFF", + "\x00\x00\xFF\xFF\x00\xFF\xFF\x00", "\x00\x00\xFF\xFF\x00\xFF\xFF\xFF", + "\x00\x00\xFF\xFF\xFF\x00\x00\x00", "\x00\x00\xFF\xFF\xFF\x00\x00\xFF", + "\x00\x00\xFF\xFF\xFF\x00\xFF\x00", "\x00\x00\xFF\xFF\xFF\x00\xFF\xFF", + "\x00\x00\xFF\xFF\xFF\xFF\x00\x00", "\x00\x00\xFF\xFF\xFF\xFF\x00\xFF", + "\x00\x00\xFF\xFF\xFF\xFF\xFF\x00", "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF", + "\x00\xFF\x00\x00\x00\x00\x00\x00", "\x00\xFF\x00\x00\x00\x00\x00\xFF", + "\x00\xFF\x00\x00\x00\x00\xFF\x00", "\x00\xFF\x00\x00\x00\x00\xFF\xFF", + "\x00\xFF\x00\x00\x00\xFF\x00\x00", "\x00\xFF\x00\x00\x00\xFF\x00\xFF", + "\x00\xFF\x00\x00\x00\xFF\xFF\x00", "\x00\xFF\x00\x00\x00\xFF\xFF\xFF", + "\x00\xFF\x00\x00\xFF\x00\x00\x00", "\x00\xFF\x00\x00\xFF\x00\x00\xFF", + "\x00\xFF\x00\x00\xFF\x00\xFF\x00", "\x00\xFF\x00\x00\xFF\x00\xFF\xFF", + "\x00\xFF\x00\x00\xFF\xFF\x00\x00", "\x00\xFF\x00\x00\xFF\xFF\x00\xFF", + "\x00\xFF\x00\x00\xFF\xFF\xFF\x00", "\x00\xFF\x00\x00\xFF\xFF\xFF\xFF", + "\x00\xFF\x00\xFF\x00\x00\x00\x00", "\x00\xFF\x00\xFF\x00\x00\x00\xFF", + "\x00\xFF\x00\xFF\x00\x00\xFF\x00", "\x00\xFF\x00\xFF\x00\x00\xFF\xFF", + "\x00\xFF\x00\xFF\x00\xFF\x00\x00", "\x00\xFF\x00\xFF\x00\xFF\x00\xFF", + "\x00\xFF\x00\xFF\x00\xFF\xFF\x00", "\x00\xFF\x00\xFF\x00\xFF\xFF\xFF", + "\x00\xFF\x00\xFF\xFF\x00\x00\x00", "\x00\xFF\x00\xFF\xFF\x00\x00\xFF", + "\x00\xFF\x00\xFF\xFF\x00\xFF\x00", "\x00\xFF\x00\xFF\xFF\x00\xFF\xFF", + "\x00\xFF\x00\xFF\xFF\xFF\x00\x00", "\x00\xFF\x00\xFF\xFF\xFF\x00\xFF", + "\x00\xFF\x00\xFF\xFF\xFF\xFF\x00", "\x00\xFF\x00\xFF\xFF\xFF\xFF\xFF", + "\x00\xFF\xFF\x00\x00\x00\x00\x00", "\x00\xFF\xFF\x00\x00\x00\x00\xFF", + "\x00\xFF\xFF\x00\x00\x00\xFF\x00", "\x00\xFF\xFF\x00\x00\x00\xFF\xFF", + "\x00\xFF\xFF\x00\x00\xFF\x00\x00", "\x00\xFF\xFF\x00\x00\xFF\x00\xFF", + "\x00\xFF\xFF\x00\x00\xFF\xFF\x00", "\x00\xFF\xFF\x00\x00\xFF\xFF\xFF", + "\x00\xFF\xFF\x00\xFF\x00\x00\x00", "\x00\xFF\xFF\x00\xFF\x00\x00\xFF", + "\x00\xFF\xFF\x00\xFF\x00\xFF\x00", "\x00\xFF\xFF\x00\xFF\x00\xFF\xFF", + "\x00\xFF\xFF\x00\xFF\xFF\x00\x00", "\x00\xFF\xFF\x00\xFF\xFF\x00\xFF", + "\x00\xFF\xFF\x00\xFF\xFF\xFF\x00", "\x00\xFF\xFF\x00\xFF\xFF\xFF\xFF", + "\x00\xFF\xFF\xFF\x00\x00\x00\x00", "\x00\xFF\xFF\xFF\x00\x00\x00\xFF", + "\x00\xFF\xFF\xFF\x00\x00\xFF\x00", "\x00\xFF\xFF\xFF\x00\x00\xFF\xFF", + "\x00\xFF\xFF\xFF\x00\xFF\x00\x00", "\x00\xFF\xFF\xFF\x00\xFF\x00\xFF", + "\x00\xFF\xFF\xFF\x00\xFF\xFF\x00", "\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF", + "\x00\xFF\xFF\xFF\xFF\x00\x00\x00", "\x00\xFF\xFF\xFF\xFF\x00\x00\xFF", + "\x00\xFF\xFF\xFF\xFF\x00\xFF\x00", "\x00\xFF\xFF\xFF\xFF\x00\xFF\xFF", + "\x00\xFF\xFF\xFF\xFF\xFF\x00\x00", "\x00\xFF\xFF\xFF\xFF\xFF\x00\xFF", + "\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00", "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF", + "\xFF\x00\x00\x00\x00\x00\x00\x00", "\xFF\x00\x00\x00\x00\x00\x00\xFF", + "\xFF\x00\x00\x00\x00\x00\xFF\x00", "\xFF\x00\x00\x00\x00\x00\xFF\xFF", + "\xFF\x00\x00\x00\x00\xFF\x00\x00", "\xFF\x00\x00\x00\x00\xFF\x00\xFF", + "\xFF\x00\x00\x00\x00\xFF\xFF\x00", "\xFF\x00\x00\x00\x00\xFF\xFF\xFF", + "\xFF\x00\x00\x00\xFF\x00\x00\x00", "\xFF\x00\x00\x00\xFF\x00\x00\xFF", + "\xFF\x00\x00\x00\xFF\x00\xFF\x00", "\xFF\x00\x00\x00\xFF\x00\xFF\xFF", + "\xFF\x00\x00\x00\xFF\xFF\x00\x00", "\xFF\x00\x00\x00\xFF\xFF\x00\xFF", + "\xFF\x00\x00\x00\xFF\xFF\xFF\x00", "\xFF\x00\x00\x00\xFF\xFF\xFF\xFF", + "\xFF\x00\x00\xFF\x00\x00\x00\x00", "\xFF\x00\x00\xFF\x00\x00\x00\xFF", + "\xFF\x00\x00\xFF\x00\x00\xFF\x00", "\xFF\x00\x00\xFF\x00\x00\xFF\xFF", + "\xFF\x00\x00\xFF\x00\xFF\x00\x00", "\xFF\x00\x00\xFF\x00\xFF\x00\xFF", + "\xFF\x00\x00\xFF\x00\xFF\xFF\x00", "\xFF\x00\x00\xFF\x00\xFF\xFF\xFF", + "\xFF\x00\x00\xFF\xFF\x00\x00\x00", "\xFF\x00\x00\xFF\xFF\x00\x00\xFF", + "\xFF\x00\x00\xFF\xFF\x00\xFF\x00", "\xFF\x00\x00\xFF\xFF\x00\xFF\xFF", + "\xFF\x00\x00\xFF\xFF\xFF\x00\x00", "\xFF\x00\x00\xFF\xFF\xFF\x00\xFF", + "\xFF\x00\x00\xFF\xFF\xFF\xFF\x00", "\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF", + "\xFF\x00\xFF\x00\x00\x00\x00\x00", "\xFF\x00\xFF\x00\x00\x00\x00\xFF", + "\xFF\x00\xFF\x00\x00\x00\xFF\x00", "\xFF\x00\xFF\x00\x00\x00\xFF\xFF", + "\xFF\x00\xFF\x00\x00\xFF\x00\x00", "\xFF\x00\xFF\x00\x00\xFF\x00\xFF", + "\xFF\x00\xFF\x00\x00\xFF\xFF\x00", "\xFF\x00\xFF\x00\x00\xFF\xFF\xFF", + "\xFF\x00\xFF\x00\xFF\x00\x00\x00", "\xFF\x00\xFF\x00\xFF\x00\x00\xFF", + "\xFF\x00\xFF\x00\xFF\x00\xFF\x00", "\xFF\x00\xFF\x00\xFF\x00\xFF\xFF", + "\xFF\x00\xFF\x00\xFF\xFF\x00\x00", "\xFF\x00\xFF\x00\xFF\xFF\x00\xFF", + "\xFF\x00\xFF\x00\xFF\xFF\xFF\x00", "\xFF\x00\xFF\x00\xFF\xFF\xFF\xFF", + "\xFF\x00\xFF\xFF\x00\x00\x00\x00", "\xFF\x00\xFF\xFF\x00\x00\x00\xFF", + "\xFF\x00\xFF\xFF\x00\x00\xFF\x00", "\xFF\x00\xFF\xFF\x00\x00\xFF\xFF", + "\xFF\x00\xFF\xFF\x00\xFF\x00\x00", "\xFF\x00\xFF\xFF\x00\xFF\x00\xFF", + "\xFF\x00\xFF\xFF\x00\xFF\xFF\x00", "\xFF\x00\xFF\xFF\x00\xFF\xFF\xFF", + "\xFF\x00\xFF\xFF\xFF\x00\x00\x00", "\xFF\x00\xFF\xFF\xFF\x00\x00\xFF", + "\xFF\x00\xFF\xFF\xFF\x00\xFF\x00", "\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF", + "\xFF\x00\xFF\xFF\xFF\xFF\x00\x00", "\xFF\x00\xFF\xFF\xFF\xFF\x00\xFF", + "\xFF\x00\xFF\xFF\xFF\xFF\xFF\x00", "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF", + "\xFF\xFF\x00\x00\x00\x00\x00\x00", "\xFF\xFF\x00\x00\x00\x00\x00\xFF", + "\xFF\xFF\x00\x00\x00\x00\xFF\x00", "\xFF\xFF\x00\x00\x00\x00\xFF\xFF", + "\xFF\xFF\x00\x00\x00\xFF\x00\x00", "\xFF\xFF\x00\x00\x00\xFF\x00\xFF", + "\xFF\xFF\x00\x00\x00\xFF\xFF\x00", "\xFF\xFF\x00\x00\x00\xFF\xFF\xFF", + "\xFF\xFF\x00\x00\xFF\x00\x00\x00", "\xFF\xFF\x00\x00\xFF\x00\x00\xFF", + "\xFF\xFF\x00\x00\xFF\x00\xFF\x00", "\xFF\xFF\x00\x00\xFF\x00\xFF\xFF", + "\xFF\xFF\x00\x00\xFF\xFF\x00\x00", "\xFF\xFF\x00\x00\xFF\xFF\x00\xFF", + "\xFF\xFF\x00\x00\xFF\xFF\xFF\x00", "\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF", + "\xFF\xFF\x00\xFF\x00\x00\x00\x00", "\xFF\xFF\x00\xFF\x00\x00\x00\xFF", + "\xFF\xFF\x00\xFF\x00\x00\xFF\x00", "\xFF\xFF\x00\xFF\x00\x00\xFF\xFF", + "\xFF\xFF\x00\xFF\x00\xFF\x00\x00", "\xFF\xFF\x00\xFF\x00\xFF\x00\xFF", + "\xFF\xFF\x00\xFF\x00\xFF\xFF\x00", "\xFF\xFF\x00\xFF\x00\xFF\xFF\xFF", + "\xFF\xFF\x00\xFF\xFF\x00\x00\x00", "\xFF\xFF\x00\xFF\xFF\x00\x00\xFF", + "\xFF\xFF\x00\xFF\xFF\x00\xFF\x00", "\xFF\xFF\x00\xFF\xFF\x00\xFF\xFF", + "\xFF\xFF\x00\xFF\xFF\xFF\x00\x00", "\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF", + "\xFF\xFF\x00\xFF\xFF\xFF\xFF\x00", "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF", + "\xFF\xFF\xFF\x00\x00\x00\x00\x00", "\xFF\xFF\xFF\x00\x00\x00\x00\xFF", + "\xFF\xFF\xFF\x00\x00\x00\xFF\x00", "\xFF\xFF\xFF\x00\x00\x00\xFF\xFF", + "\xFF\xFF\xFF\x00\x00\xFF\x00\x00", "\xFF\xFF\xFF\x00\x00\xFF\x00\xFF", + "\xFF\xFF\xFF\x00\x00\xFF\xFF\x00", "\xFF\xFF\xFF\x00\x00\xFF\xFF\xFF", + "\xFF\xFF\xFF\x00\xFF\x00\x00\x00", "\xFF\xFF\xFF\x00\xFF\x00\x00\xFF", + "\xFF\xFF\xFF\x00\xFF\x00\xFF\x00", "\xFF\xFF\xFF\x00\xFF\x00\xFF\xFF", + "\xFF\xFF\xFF\x00\xFF\xFF\x00\x00", "\xFF\xFF\xFF\x00\xFF\xFF\x00\xFF", + "\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00", "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF", + "\xFF\xFF\xFF\xFF\x00\x00\x00\x00", "\xFF\xFF\xFF\xFF\x00\x00\x00\xFF", + "\xFF\xFF\xFF\xFF\x00\x00\xFF\x00", "\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF", + "\xFF\xFF\xFF\xFF\x00\xFF\x00\x00", "\xFF\xFF\xFF\xFF\x00\xFF\x00\xFF", + "\xFF\xFF\xFF\xFF\x00\xFF\xFF\x00", "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF", + "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00", "\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF", + "\xFF\xFF\xFF\xFF\xFF\x00\xFF\x00", "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF", + "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00", "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF", + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00", "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" + ); + + /** + * IP mapping helper table. + * + * Indexing this table with each source byte performs the initial bit permutation. + * + * @var array + * @access private + */ + var $ipmap = array( + 0x00, 0x10, 0x01, 0x11, 0x20, 0x30, 0x21, 0x31, + 0x02, 0x12, 0x03, 0x13, 0x22, 0x32, 0x23, 0x33, + 0x40, 0x50, 0x41, 0x51, 0x60, 0x70, 0x61, 0x71, + 0x42, 0x52, 0x43, 0x53, 0x62, 0x72, 0x63, 0x73, + 0x04, 0x14, 0x05, 0x15, 0x24, 0x34, 0x25, 0x35, + 0x06, 0x16, 0x07, 0x17, 0x26, 0x36, 0x27, 0x37, + 0x44, 0x54, 0x45, 0x55, 0x64, 0x74, 0x65, 0x75, + 0x46, 0x56, 0x47, 0x57, 0x66, 0x76, 0x67, 0x77, + 0x80, 0x90, 0x81, 0x91, 0xA0, 0xB0, 0xA1, 0xB1, + 0x82, 0x92, 0x83, 0x93, 0xA2, 0xB2, 0xA3, 0xB3, + 0xC0, 0xD0, 0xC1, 0xD1, 0xE0, 0xF0, 0xE1, 0xF1, + 0xC2, 0xD2, 0xC3, 0xD3, 0xE2, 0xF2, 0xE3, 0xF3, + 0x84, 0x94, 0x85, 0x95, 0xA4, 0xB4, 0xA5, 0xB5, + 0x86, 0x96, 0x87, 0x97, 0xA6, 0xB6, 0xA7, 0xB7, + 0xC4, 0xD4, 0xC5, 0xD5, 0xE4, 0xF4, 0xE5, 0xF5, + 0xC6, 0xD6, 0xC7, 0xD7, 0xE6, 0xF6, 0xE7, 0xF7, + 0x08, 0x18, 0x09, 0x19, 0x28, 0x38, 0x29, 0x39, + 0x0A, 0x1A, 0x0B, 0x1B, 0x2A, 0x3A, 0x2B, 0x3B, + 0x48, 0x58, 0x49, 0x59, 0x68, 0x78, 0x69, 0x79, + 0x4A, 0x5A, 0x4B, 0x5B, 0x6A, 0x7A, 0x6B, 0x7B, + 0x0C, 0x1C, 0x0D, 0x1D, 0x2C, 0x3C, 0x2D, 0x3D, + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4C, 0x5C, 0x4D, 0x5D, 0x6C, 0x7C, 0x6D, 0x7D, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x88, 0x98, 0x89, 0x99, 0xA8, 0xB8, 0xA9, 0xB9, + 0x8A, 0x9A, 0x8B, 0x9B, 0xAA, 0xBA, 0xAB, 0xBB, + 0xC8, 0xD8, 0xC9, 0xD9, 0xE8, 0xF8, 0xE9, 0xF9, + 0xCA, 0xDA, 0xCB, 0xDB, 0xEA, 0xFA, 0xEB, 0xFB, + 0x8C, 0x9C, 0x8D, 0x9D, 0xAC, 0xBC, 0xAD, 0xBD, + 0x8E, 0x9E, 0x8F, 0x9F, 0xAE, 0xBE, 0xAF, 0xBF, + 0xCC, 0xDC, 0xCD, 0xDD, 0xEC, 0xFC, 0xED, 0xFD, + 0xCE, 0xDE, 0xCF, 0xDF, 0xEE, 0xFE, 0xEF, 0xFF + ); + + /** + * Inverse IP mapping helper table. + * Indexing this table with a byte value reverses the bit order. + * + * @var array + * @access private + */ + var $invipmap = array( + 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, + 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, + 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, + 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, + 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, + 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, + 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, + 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, + 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, + 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, + 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, + 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, + 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, + 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, + 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, + 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, + 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, + 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, + 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, + 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, + 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, + 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, + 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, + 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, + 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, + 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, + 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, + 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, + 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, + 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, + 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, + 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF + ); + + /** + * Pre-permuted S-box1 + * + * Each box ($sbox1-$sbox8) has been vectorized, then each value pre-permuted using the + * P table: concatenation can then be replaced by exclusive ORs. + * + * @var array + * @access private + */ + var $sbox1 = array( + 0x00808200, 0x00000000, 0x00008000, 0x00808202, + 0x00808002, 0x00008202, 0x00000002, 0x00008000, + 0x00000200, 0x00808200, 0x00808202, 0x00000200, + 0x00800202, 0x00808002, 0x00800000, 0x00000002, + 0x00000202, 0x00800200, 0x00800200, 0x00008200, + 0x00008200, 0x00808000, 0x00808000, 0x00800202, + 0x00008002, 0x00800002, 0x00800002, 0x00008002, + 0x00000000, 0x00000202, 0x00008202, 0x00800000, + 0x00008000, 0x00808202, 0x00000002, 0x00808000, + 0x00808200, 0x00800000, 0x00800000, 0x00000200, + 0x00808002, 0x00008000, 0x00008200, 0x00800002, + 0x00000200, 0x00000002, 0x00800202, 0x00008202, + 0x00808202, 0x00008002, 0x00808000, 0x00800202, + 0x00800002, 0x00000202, 0x00008202, 0x00808200, + 0x00000202, 0x00800200, 0x00800200, 0x00000000, + 0x00008002, 0x00008200, 0x00000000, 0x00808002 + ); + + /** + * Pre-permuted S-box2 + * + * @var array + * @access private + */ + var $sbox2 = array( + 0x40084010, 0x40004000, 0x00004000, 0x00084010, + 0x00080000, 0x00000010, 0x40080010, 0x40004010, + 0x40000010, 0x40084010, 0x40084000, 0x40000000, + 0x40004000, 0x00080000, 0x00000010, 0x40080010, + 0x00084000, 0x00080010, 0x40004010, 0x00000000, + 0x40000000, 0x00004000, 0x00084010, 0x40080000, + 0x00080010, 0x40000010, 0x00000000, 0x00084000, + 0x00004010, 0x40084000, 0x40080000, 0x00004010, + 0x00000000, 0x00084010, 0x40080010, 0x00080000, + 0x40004010, 0x40080000, 0x40084000, 0x00004000, + 0x40080000, 0x40004000, 0x00000010, 0x40084010, + 0x00084010, 0x00000010, 0x00004000, 0x40000000, + 0x00004010, 0x40084000, 0x00080000, 0x40000010, + 0x00080010, 0x40004010, 0x40000010, 0x00080010, + 0x00084000, 0x00000000, 0x40004000, 0x00004010, + 0x40000000, 0x40080010, 0x40084010, 0x00084000 + ); + + /** + * Pre-permuted S-box3 + * + * @var array + * @access private + */ + var $sbox3 = array( + 0x00000104, 0x04010100, 0x00000000, 0x04010004, + 0x04000100, 0x00000000, 0x00010104, 0x04000100, + 0x00010004, 0x04000004, 0x04000004, 0x00010000, + 0x04010104, 0x00010004, 0x04010000, 0x00000104, + 0x04000000, 0x00000004, 0x04010100, 0x00000100, + 0x00010100, 0x04010000, 0x04010004, 0x00010104, + 0x04000104, 0x00010100, 0x00010000, 0x04000104, + 0x00000004, 0x04010104, 0x00000100, 0x04000000, + 0x04010100, 0x04000000, 0x00010004, 0x00000104, + 0x00010000, 0x04010100, 0x04000100, 0x00000000, + 0x00000100, 0x00010004, 0x04010104, 0x04000100, + 0x04000004, 0x00000100, 0x00000000, 0x04010004, + 0x04000104, 0x00010000, 0x04000000, 0x04010104, + 0x00000004, 0x00010104, 0x00010100, 0x04000004, + 0x04010000, 0x04000104, 0x00000104, 0x04010000, + 0x00010104, 0x00000004, 0x04010004, 0x00010100 + ); + + /** + * Pre-permuted S-box4 + * + * @var array + * @access private + */ + var $sbox4 = array( + 0x80401000, 0x80001040, 0x80001040, 0x00000040, + 0x00401040, 0x80400040, 0x80400000, 0x80001000, + 0x00000000, 0x00401000, 0x00401000, 0x80401040, + 0x80000040, 0x00000000, 0x00400040, 0x80400000, + 0x80000000, 0x00001000, 0x00400000, 0x80401000, + 0x00000040, 0x00400000, 0x80001000, 0x00001040, + 0x80400040, 0x80000000, 0x00001040, 0x00400040, + 0x00001000, 0x00401040, 0x80401040, 0x80000040, + 0x00400040, 0x80400000, 0x00401000, 0x80401040, + 0x80000040, 0x00000000, 0x00000000, 0x00401000, + 0x00001040, 0x00400040, 0x80400040, 0x80000000, + 0x80401000, 0x80001040, 0x80001040, 0x00000040, + 0x80401040, 0x80000040, 0x80000000, 0x00001000, + 0x80400000, 0x80001000, 0x00401040, 0x80400040, + 0x80001000, 0x00001040, 0x00400000, 0x80401000, + 0x00000040, 0x00400000, 0x00001000, 0x00401040 + ); + + /** + * Pre-permuted S-box5 + * + * @var array + * @access private + */ + var $sbox5 = array( + 0x00000080, 0x01040080, 0x01040000, 0x21000080, + 0x00040000, 0x00000080, 0x20000000, 0x01040000, + 0x20040080, 0x00040000, 0x01000080, 0x20040080, + 0x21000080, 0x21040000, 0x00040080, 0x20000000, + 0x01000000, 0x20040000, 0x20040000, 0x00000000, + 0x20000080, 0x21040080, 0x21040080, 0x01000080, + 0x21040000, 0x20000080, 0x00000000, 0x21000000, + 0x01040080, 0x01000000, 0x21000000, 0x00040080, + 0x00040000, 0x21000080, 0x00000080, 0x01000000, + 0x20000000, 0x01040000, 0x21000080, 0x20040080, + 0x01000080, 0x20000000, 0x21040000, 0x01040080, + 0x20040080, 0x00000080, 0x01000000, 0x21040000, + 0x21040080, 0x00040080, 0x21000000, 0x21040080, + 0x01040000, 0x00000000, 0x20040000, 0x21000000, + 0x00040080, 0x01000080, 0x20000080, 0x00040000, + 0x00000000, 0x20040000, 0x01040080, 0x20000080 + ); + + /** + * Pre-permuted S-box6 + * + * @var array + * @access private + */ + var $sbox6 = array( + 0x10000008, 0x10200000, 0x00002000, 0x10202008, + 0x10200000, 0x00000008, 0x10202008, 0x00200000, + 0x10002000, 0x00202008, 0x00200000, 0x10000008, + 0x00200008, 0x10002000, 0x10000000, 0x00002008, + 0x00000000, 0x00200008, 0x10002008, 0x00002000, + 0x00202000, 0x10002008, 0x00000008, 0x10200008, + 0x10200008, 0x00000000, 0x00202008, 0x10202000, + 0x00002008, 0x00202000, 0x10202000, 0x10000000, + 0x10002000, 0x00000008, 0x10200008, 0x00202000, + 0x10202008, 0x00200000, 0x00002008, 0x10000008, + 0x00200000, 0x10002000, 0x10000000, 0x00002008, + 0x10000008, 0x10202008, 0x00202000, 0x10200000, + 0x00202008, 0x10202000, 0x00000000, 0x10200008, + 0x00000008, 0x00002000, 0x10200000, 0x00202008, + 0x00002000, 0x00200008, 0x10002008, 0x00000000, + 0x10202000, 0x10000000, 0x00200008, 0x10002008 + ); + + /** + * Pre-permuted S-box7 + * + * @var array + * @access private + */ + var $sbox7 = array( + 0x00100000, 0x02100001, 0x02000401, 0x00000000, + 0x00000400, 0x02000401, 0x00100401, 0x02100400, + 0x02100401, 0x00100000, 0x00000000, 0x02000001, + 0x00000001, 0x02000000, 0x02100001, 0x00000401, + 0x02000400, 0x00100401, 0x00100001, 0x02000400, + 0x02000001, 0x02100000, 0x02100400, 0x00100001, + 0x02100000, 0x00000400, 0x00000401, 0x02100401, + 0x00100400, 0x00000001, 0x02000000, 0x00100400, + 0x02000000, 0x00100400, 0x00100000, 0x02000401, + 0x02000401, 0x02100001, 0x02100001, 0x00000001, + 0x00100001, 0x02000000, 0x02000400, 0x00100000, + 0x02100400, 0x00000401, 0x00100401, 0x02100400, + 0x00000401, 0x02000001, 0x02100401, 0x02100000, + 0x00100400, 0x00000000, 0x00000001, 0x02100401, + 0x00000000, 0x00100401, 0x02100000, 0x00000400, + 0x02000001, 0x02000400, 0x00000400, 0x00100001 + ); + + /** + * Pre-permuted S-box8 + * + * @var array + * @access private + */ + var $sbox8 = array( + 0x08000820, 0x00000800, 0x00020000, 0x08020820, + 0x08000000, 0x08000820, 0x00000020, 0x08000000, + 0x00020020, 0x08020000, 0x08020820, 0x00020800, + 0x08020800, 0x00020820, 0x00000800, 0x00000020, + 0x08020000, 0x08000020, 0x08000800, 0x00000820, + 0x00020800, 0x00020020, 0x08020020, 0x08020800, + 0x00000820, 0x00000000, 0x00000000, 0x08020020, + 0x08000020, 0x08000800, 0x00020820, 0x00020000, + 0x00020820, 0x00020000, 0x08020800, 0x00000800, + 0x00000020, 0x08020020, 0x00000800, 0x00020820, + 0x08000800, 0x00000020, 0x08000020, 0x08020000, + 0x08020020, 0x08000000, 0x00020000, 0x08000820, + 0x00000000, 0x08020820, 0x00020020, 0x08000020, + 0x08020000, 0x08000800, 0x08000820, 0x00000000, + 0x08020820, 0x00020800, 0x00020800, 0x00000820, + 0x00000820, 0x00020020, 0x08000000, 0x08020800 + ); + + /** + * Test for engine validity + * + * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine() + * + * @see \phpseclib\Crypt\Base::isValidEngine() + * @param int $engine + * @access public + * @return bool + */ + function isValidEngine($engine) + { + if ($this->key_length_max == 8) { + if ($engine == self::ENGINE_OPENSSL) { + $this->cipher_name_openssl_ecb = 'des-ecb'; + $this->cipher_name_openssl = 'des-' . $this->_openssl_translate_mode(); + } + } + + return parent::isValidEngine($engine); + } + + /** + * Sets the key. + * + * Keys can be of any length. DES, itself, uses 64-bit keys (eg. strlen($key) == 8), however, we + * only use the first eight, if $key has more then eight characters in it, and pad $key with the + * null byte if it is less then eight characters long. + * + * DES also requires that every eighth bit be a parity bit, however, we'll ignore that. + * + * If the key is not explicitly set, it'll be assumed to be all zero's. + * + * @see \phpseclib\Crypt\Base::setKey() + * @access public + * @param string $key + */ + function setKey($key) + { + // We check/cut here only up to max length of the key. + // Key padding to the proper length will be done in _setupKey() + if (strlen($key) > $this->key_length_max) { + $key = substr($key, 0, $this->key_length_max); + } + + // Sets the key + parent::setKey($key); + } + + /** + * Encrypts a block + * + * @see \phpseclib\Crypt\Base::_encryptBlock() + * @see \phpseclib\Crypt\Base::encrypt() + * @see self::encrypt() + * @access private + * @param string $in + * @return string + */ + function _encryptBlock($in) + { + return $this->_processBlock($in, self::ENCRYPT); + } + + /** + * Decrypts a block + * + * @see \phpseclib\Crypt\Base::_decryptBlock() + * @see \phpseclib\Crypt\Base::decrypt() + * @see self::decrypt() + * @access private + * @param string $in + * @return string + */ + function _decryptBlock($in) + { + return $this->_processBlock($in, self::DECRYPT); + } + + /** + * Encrypts or decrypts a 64-bit block + * + * $mode should be either self::ENCRYPT or self::DECRYPT. See + * {@link http://en.wikipedia.org/wiki/Image:Feistel.png Feistel.png} to get a general + * idea of what this function does. + * + * @see self::_encryptBlock() + * @see self::_decryptBlock() + * @access private + * @param string $block + * @param int $mode + * @return string + */ + function _processBlock($block, $mode) + { + static $sbox1, $sbox2, $sbox3, $sbox4, $sbox5, $sbox6, $sbox7, $sbox8, $shuffleip, $shuffleinvip; + if (!$sbox1) { + $sbox1 = array_map("intval", $this->sbox1); + $sbox2 = array_map("intval", $this->sbox2); + $sbox3 = array_map("intval", $this->sbox3); + $sbox4 = array_map("intval", $this->sbox4); + $sbox5 = array_map("intval", $this->sbox5); + $sbox6 = array_map("intval", $this->sbox6); + $sbox7 = array_map("intval", $this->sbox7); + $sbox8 = array_map("intval", $this->sbox8); + /* Merge $shuffle with $[inv]ipmap */ + for ($i = 0; $i < 256; ++$i) { + $shuffleip[] = $this->shuffle[$this->ipmap[$i]]; + $shuffleinvip[] = $this->shuffle[$this->invipmap[$i]]; + } + } + + $keys = $this->keys[$mode]; + $ki = -1; + + // Do the initial IP permutation. + $t = unpack('Nl/Nr', $block); + list($l, $r) = array($t['l'], $t['r']); + $block = ($shuffleip[ $r & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") | + ($shuffleip[($r >> 8) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") | + ($shuffleip[($r >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") | + ($shuffleip[($r >> 24) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") | + ($shuffleip[ $l & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") | + ($shuffleip[($l >> 8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") | + ($shuffleip[($l >> 16) & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") | + ($shuffleip[($l >> 24) & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01"); + + // Extract L0 and R0. + $t = unpack('Nl/Nr', $block); + list($l, $r) = array($t['l'], $t['r']); + + for ($des_round = 0; $des_round < $this->des_rounds; ++$des_round) { + // Perform the 16 steps. + for ($i = 0; $i < 16; $i++) { + // start of "the Feistel (F) function" - see the following URL: + // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png + // Merge key schedule. + $b1 = (($r >> 3) & 0x1FFFFFFF) ^ ($r << 29) ^ $keys[++$ki]; + $b2 = (($r >> 31) & 0x00000001) ^ ($r << 1) ^ $keys[++$ki]; + + // S-box indexing. + $t = $sbox1[($b1 >> 24) & 0x3F] ^ $sbox2[($b2 >> 24) & 0x3F] ^ + $sbox3[($b1 >> 16) & 0x3F] ^ $sbox4[($b2 >> 16) & 0x3F] ^ + $sbox5[($b1 >> 8) & 0x3F] ^ $sbox6[($b2 >> 8) & 0x3F] ^ + $sbox7[ $b1 & 0x3F] ^ $sbox8[ $b2 & 0x3F] ^ $l; + // end of "the Feistel (F) function" + + $l = $r; + $r = $t; + } + + // Last step should not permute L & R. + $t = $l; + $l = $r; + $r = $t; + } + + // Perform the inverse IP permutation. + return ($shuffleinvip[($r >> 24) & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") | + ($shuffleinvip[($l >> 24) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") | + ($shuffleinvip[($r >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") | + ($shuffleinvip[($l >> 16) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") | + ($shuffleinvip[($r >> 8) & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") | + ($shuffleinvip[($l >> 8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") | + ($shuffleinvip[ $r & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") | + ($shuffleinvip[ $l & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01"); + } + + /** + * Creates the key schedule + * + * @see \phpseclib\Crypt\Base::_setupKey() + * @access private + */ + function _setupKey() + { + if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->des_rounds === $this->kl['des_rounds']) { + // already expanded + return; + } + $this->kl = array('key' => $this->key, 'des_rounds' => $this->des_rounds); + + static $shifts = array( // number of key bits shifted per round + 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 + ); + + static $pc1map = array( + 0x00, 0x00, 0x08, 0x08, 0x04, 0x04, 0x0C, 0x0C, + 0x02, 0x02, 0x0A, 0x0A, 0x06, 0x06, 0x0E, 0x0E, + 0x10, 0x10, 0x18, 0x18, 0x14, 0x14, 0x1C, 0x1C, + 0x12, 0x12, 0x1A, 0x1A, 0x16, 0x16, 0x1E, 0x1E, + 0x20, 0x20, 0x28, 0x28, 0x24, 0x24, 0x2C, 0x2C, + 0x22, 0x22, 0x2A, 0x2A, 0x26, 0x26, 0x2E, 0x2E, + 0x30, 0x30, 0x38, 0x38, 0x34, 0x34, 0x3C, 0x3C, + 0x32, 0x32, 0x3A, 0x3A, 0x36, 0x36, 0x3E, 0x3E, + 0x40, 0x40, 0x48, 0x48, 0x44, 0x44, 0x4C, 0x4C, + 0x42, 0x42, 0x4A, 0x4A, 0x46, 0x46, 0x4E, 0x4E, + 0x50, 0x50, 0x58, 0x58, 0x54, 0x54, 0x5C, 0x5C, + 0x52, 0x52, 0x5A, 0x5A, 0x56, 0x56, 0x5E, 0x5E, + 0x60, 0x60, 0x68, 0x68, 0x64, 0x64, 0x6C, 0x6C, + 0x62, 0x62, 0x6A, 0x6A, 0x66, 0x66, 0x6E, 0x6E, + 0x70, 0x70, 0x78, 0x78, 0x74, 0x74, 0x7C, 0x7C, + 0x72, 0x72, 0x7A, 0x7A, 0x76, 0x76, 0x7E, 0x7E, + 0x80, 0x80, 0x88, 0x88, 0x84, 0x84, 0x8C, 0x8C, + 0x82, 0x82, 0x8A, 0x8A, 0x86, 0x86, 0x8E, 0x8E, + 0x90, 0x90, 0x98, 0x98, 0x94, 0x94, 0x9C, 0x9C, + 0x92, 0x92, 0x9A, 0x9A, 0x96, 0x96, 0x9E, 0x9E, + 0xA0, 0xA0, 0xA8, 0xA8, 0xA4, 0xA4, 0xAC, 0xAC, + 0xA2, 0xA2, 0xAA, 0xAA, 0xA6, 0xA6, 0xAE, 0xAE, + 0xB0, 0xB0, 0xB8, 0xB8, 0xB4, 0xB4, 0xBC, 0xBC, + 0xB2, 0xB2, 0xBA, 0xBA, 0xB6, 0xB6, 0xBE, 0xBE, + 0xC0, 0xC0, 0xC8, 0xC8, 0xC4, 0xC4, 0xCC, 0xCC, + 0xC2, 0xC2, 0xCA, 0xCA, 0xC6, 0xC6, 0xCE, 0xCE, + 0xD0, 0xD0, 0xD8, 0xD8, 0xD4, 0xD4, 0xDC, 0xDC, + 0xD2, 0xD2, 0xDA, 0xDA, 0xD6, 0xD6, 0xDE, 0xDE, + 0xE0, 0xE0, 0xE8, 0xE8, 0xE4, 0xE4, 0xEC, 0xEC, + 0xE2, 0xE2, 0xEA, 0xEA, 0xE6, 0xE6, 0xEE, 0xEE, + 0xF0, 0xF0, 0xF8, 0xF8, 0xF4, 0xF4, 0xFC, 0xFC, + 0xF2, 0xF2, 0xFA, 0xFA, 0xF6, 0xF6, 0xFE, 0xFE + ); + + // Mapping tables for the PC-2 transformation. + static $pc2mapc1 = array( + 0x00000000, 0x00000400, 0x00200000, 0x00200400, + 0x00000001, 0x00000401, 0x00200001, 0x00200401, + 0x02000000, 0x02000400, 0x02200000, 0x02200400, + 0x02000001, 0x02000401, 0x02200001, 0x02200401 + ); + static $pc2mapc2 = array( + 0x00000000, 0x00000800, 0x08000000, 0x08000800, + 0x00010000, 0x00010800, 0x08010000, 0x08010800, + 0x00000000, 0x00000800, 0x08000000, 0x08000800, + 0x00010000, 0x00010800, 0x08010000, 0x08010800, + 0x00000100, 0x00000900, 0x08000100, 0x08000900, + 0x00010100, 0x00010900, 0x08010100, 0x08010900, + 0x00000100, 0x00000900, 0x08000100, 0x08000900, + 0x00010100, 0x00010900, 0x08010100, 0x08010900, + 0x00000010, 0x00000810, 0x08000010, 0x08000810, + 0x00010010, 0x00010810, 0x08010010, 0x08010810, + 0x00000010, 0x00000810, 0x08000010, 0x08000810, + 0x00010010, 0x00010810, 0x08010010, 0x08010810, + 0x00000110, 0x00000910, 0x08000110, 0x08000910, + 0x00010110, 0x00010910, 0x08010110, 0x08010910, + 0x00000110, 0x00000910, 0x08000110, 0x08000910, + 0x00010110, 0x00010910, 0x08010110, 0x08010910, + 0x00040000, 0x00040800, 0x08040000, 0x08040800, + 0x00050000, 0x00050800, 0x08050000, 0x08050800, + 0x00040000, 0x00040800, 0x08040000, 0x08040800, + 0x00050000, 0x00050800, 0x08050000, 0x08050800, + 0x00040100, 0x00040900, 0x08040100, 0x08040900, + 0x00050100, 0x00050900, 0x08050100, 0x08050900, + 0x00040100, 0x00040900, 0x08040100, 0x08040900, + 0x00050100, 0x00050900, 0x08050100, 0x08050900, + 0x00040010, 0x00040810, 0x08040010, 0x08040810, + 0x00050010, 0x00050810, 0x08050010, 0x08050810, + 0x00040010, 0x00040810, 0x08040010, 0x08040810, + 0x00050010, 0x00050810, 0x08050010, 0x08050810, + 0x00040110, 0x00040910, 0x08040110, 0x08040910, + 0x00050110, 0x00050910, 0x08050110, 0x08050910, + 0x00040110, 0x00040910, 0x08040110, 0x08040910, + 0x00050110, 0x00050910, 0x08050110, 0x08050910, + 0x01000000, 0x01000800, 0x09000000, 0x09000800, + 0x01010000, 0x01010800, 0x09010000, 0x09010800, + 0x01000000, 0x01000800, 0x09000000, 0x09000800, + 0x01010000, 0x01010800, 0x09010000, 0x09010800, + 0x01000100, 0x01000900, 0x09000100, 0x09000900, + 0x01010100, 0x01010900, 0x09010100, 0x09010900, + 0x01000100, 0x01000900, 0x09000100, 0x09000900, + 0x01010100, 0x01010900, 0x09010100, 0x09010900, + 0x01000010, 0x01000810, 0x09000010, 0x09000810, + 0x01010010, 0x01010810, 0x09010010, 0x09010810, + 0x01000010, 0x01000810, 0x09000010, 0x09000810, + 0x01010010, 0x01010810, 0x09010010, 0x09010810, + 0x01000110, 0x01000910, 0x09000110, 0x09000910, + 0x01010110, 0x01010910, 0x09010110, 0x09010910, + 0x01000110, 0x01000910, 0x09000110, 0x09000910, + 0x01010110, 0x01010910, 0x09010110, 0x09010910, + 0x01040000, 0x01040800, 0x09040000, 0x09040800, + 0x01050000, 0x01050800, 0x09050000, 0x09050800, + 0x01040000, 0x01040800, 0x09040000, 0x09040800, + 0x01050000, 0x01050800, 0x09050000, 0x09050800, + 0x01040100, 0x01040900, 0x09040100, 0x09040900, + 0x01050100, 0x01050900, 0x09050100, 0x09050900, + 0x01040100, 0x01040900, 0x09040100, 0x09040900, + 0x01050100, 0x01050900, 0x09050100, 0x09050900, + 0x01040010, 0x01040810, 0x09040010, 0x09040810, + 0x01050010, 0x01050810, 0x09050010, 0x09050810, + 0x01040010, 0x01040810, 0x09040010, 0x09040810, + 0x01050010, 0x01050810, 0x09050010, 0x09050810, + 0x01040110, 0x01040910, 0x09040110, 0x09040910, + 0x01050110, 0x01050910, 0x09050110, 0x09050910, + 0x01040110, 0x01040910, 0x09040110, 0x09040910, + 0x01050110, 0x01050910, 0x09050110, 0x09050910 + ); + static $pc2mapc3 = array( + 0x00000000, 0x00000004, 0x00001000, 0x00001004, + 0x00000000, 0x00000004, 0x00001000, 0x00001004, + 0x10000000, 0x10000004, 0x10001000, 0x10001004, + 0x10000000, 0x10000004, 0x10001000, 0x10001004, + 0x00000020, 0x00000024, 0x00001020, 0x00001024, + 0x00000020, 0x00000024, 0x00001020, 0x00001024, + 0x10000020, 0x10000024, 0x10001020, 0x10001024, + 0x10000020, 0x10000024, 0x10001020, 0x10001024, + 0x00080000, 0x00080004, 0x00081000, 0x00081004, + 0x00080000, 0x00080004, 0x00081000, 0x00081004, + 0x10080000, 0x10080004, 0x10081000, 0x10081004, + 0x10080000, 0x10080004, 0x10081000, 0x10081004, + 0x00080020, 0x00080024, 0x00081020, 0x00081024, + 0x00080020, 0x00080024, 0x00081020, 0x00081024, + 0x10080020, 0x10080024, 0x10081020, 0x10081024, + 0x10080020, 0x10080024, 0x10081020, 0x10081024, + 0x20000000, 0x20000004, 0x20001000, 0x20001004, + 0x20000000, 0x20000004, 0x20001000, 0x20001004, + 0x30000000, 0x30000004, 0x30001000, 0x30001004, + 0x30000000, 0x30000004, 0x30001000, 0x30001004, + 0x20000020, 0x20000024, 0x20001020, 0x20001024, + 0x20000020, 0x20000024, 0x20001020, 0x20001024, + 0x30000020, 0x30000024, 0x30001020, 0x30001024, + 0x30000020, 0x30000024, 0x30001020, 0x30001024, + 0x20080000, 0x20080004, 0x20081000, 0x20081004, + 0x20080000, 0x20080004, 0x20081000, 0x20081004, + 0x30080000, 0x30080004, 0x30081000, 0x30081004, + 0x30080000, 0x30080004, 0x30081000, 0x30081004, + 0x20080020, 0x20080024, 0x20081020, 0x20081024, + 0x20080020, 0x20080024, 0x20081020, 0x20081024, + 0x30080020, 0x30080024, 0x30081020, 0x30081024, + 0x30080020, 0x30080024, 0x30081020, 0x30081024, + 0x00000002, 0x00000006, 0x00001002, 0x00001006, + 0x00000002, 0x00000006, 0x00001002, 0x00001006, + 0x10000002, 0x10000006, 0x10001002, 0x10001006, + 0x10000002, 0x10000006, 0x10001002, 0x10001006, + 0x00000022, 0x00000026, 0x00001022, 0x00001026, + 0x00000022, 0x00000026, 0x00001022, 0x00001026, + 0x10000022, 0x10000026, 0x10001022, 0x10001026, + 0x10000022, 0x10000026, 0x10001022, 0x10001026, + 0x00080002, 0x00080006, 0x00081002, 0x00081006, + 0x00080002, 0x00080006, 0x00081002, 0x00081006, + 0x10080002, 0x10080006, 0x10081002, 0x10081006, + 0x10080002, 0x10080006, 0x10081002, 0x10081006, + 0x00080022, 0x00080026, 0x00081022, 0x00081026, + 0x00080022, 0x00080026, 0x00081022, 0x00081026, + 0x10080022, 0x10080026, 0x10081022, 0x10081026, + 0x10080022, 0x10080026, 0x10081022, 0x10081026, + 0x20000002, 0x20000006, 0x20001002, 0x20001006, + 0x20000002, 0x20000006, 0x20001002, 0x20001006, + 0x30000002, 0x30000006, 0x30001002, 0x30001006, + 0x30000002, 0x30000006, 0x30001002, 0x30001006, + 0x20000022, 0x20000026, 0x20001022, 0x20001026, + 0x20000022, 0x20000026, 0x20001022, 0x20001026, + 0x30000022, 0x30000026, 0x30001022, 0x30001026, + 0x30000022, 0x30000026, 0x30001022, 0x30001026, + 0x20080002, 0x20080006, 0x20081002, 0x20081006, + 0x20080002, 0x20080006, 0x20081002, 0x20081006, + 0x30080002, 0x30080006, 0x30081002, 0x30081006, + 0x30080002, 0x30080006, 0x30081002, 0x30081006, + 0x20080022, 0x20080026, 0x20081022, 0x20081026, + 0x20080022, 0x20080026, 0x20081022, 0x20081026, + 0x30080022, 0x30080026, 0x30081022, 0x30081026, + 0x30080022, 0x30080026, 0x30081022, 0x30081026 + ); + static $pc2mapc4 = array( + 0x00000000, 0x00100000, 0x00000008, 0x00100008, + 0x00000200, 0x00100200, 0x00000208, 0x00100208, + 0x00000000, 0x00100000, 0x00000008, 0x00100008, + 0x00000200, 0x00100200, 0x00000208, 0x00100208, + 0x04000000, 0x04100000, 0x04000008, 0x04100008, + 0x04000200, 0x04100200, 0x04000208, 0x04100208, + 0x04000000, 0x04100000, 0x04000008, 0x04100008, + 0x04000200, 0x04100200, 0x04000208, 0x04100208, + 0x00002000, 0x00102000, 0x00002008, 0x00102008, + 0x00002200, 0x00102200, 0x00002208, 0x00102208, + 0x00002000, 0x00102000, 0x00002008, 0x00102008, + 0x00002200, 0x00102200, 0x00002208, 0x00102208, + 0x04002000, 0x04102000, 0x04002008, 0x04102008, + 0x04002200, 0x04102200, 0x04002208, 0x04102208, + 0x04002000, 0x04102000, 0x04002008, 0x04102008, + 0x04002200, 0x04102200, 0x04002208, 0x04102208, + 0x00000000, 0x00100000, 0x00000008, 0x00100008, + 0x00000200, 0x00100200, 0x00000208, 0x00100208, + 0x00000000, 0x00100000, 0x00000008, 0x00100008, + 0x00000200, 0x00100200, 0x00000208, 0x00100208, + 0x04000000, 0x04100000, 0x04000008, 0x04100008, + 0x04000200, 0x04100200, 0x04000208, 0x04100208, + 0x04000000, 0x04100000, 0x04000008, 0x04100008, + 0x04000200, 0x04100200, 0x04000208, 0x04100208, + 0x00002000, 0x00102000, 0x00002008, 0x00102008, + 0x00002200, 0x00102200, 0x00002208, 0x00102208, + 0x00002000, 0x00102000, 0x00002008, 0x00102008, + 0x00002200, 0x00102200, 0x00002208, 0x00102208, + 0x04002000, 0x04102000, 0x04002008, 0x04102008, + 0x04002200, 0x04102200, 0x04002208, 0x04102208, + 0x04002000, 0x04102000, 0x04002008, 0x04102008, + 0x04002200, 0x04102200, 0x04002208, 0x04102208, + 0x00020000, 0x00120000, 0x00020008, 0x00120008, + 0x00020200, 0x00120200, 0x00020208, 0x00120208, + 0x00020000, 0x00120000, 0x00020008, 0x00120008, + 0x00020200, 0x00120200, 0x00020208, 0x00120208, + 0x04020000, 0x04120000, 0x04020008, 0x04120008, + 0x04020200, 0x04120200, 0x04020208, 0x04120208, + 0x04020000, 0x04120000, 0x04020008, 0x04120008, + 0x04020200, 0x04120200, 0x04020208, 0x04120208, + 0x00022000, 0x00122000, 0x00022008, 0x00122008, + 0x00022200, 0x00122200, 0x00022208, 0x00122208, + 0x00022000, 0x00122000, 0x00022008, 0x00122008, + 0x00022200, 0x00122200, 0x00022208, 0x00122208, + 0x04022000, 0x04122000, 0x04022008, 0x04122008, + 0x04022200, 0x04122200, 0x04022208, 0x04122208, + 0x04022000, 0x04122000, 0x04022008, 0x04122008, + 0x04022200, 0x04122200, 0x04022208, 0x04122208, + 0x00020000, 0x00120000, 0x00020008, 0x00120008, + 0x00020200, 0x00120200, 0x00020208, 0x00120208, + 0x00020000, 0x00120000, 0x00020008, 0x00120008, + 0x00020200, 0x00120200, 0x00020208, 0x00120208, + 0x04020000, 0x04120000, 0x04020008, 0x04120008, + 0x04020200, 0x04120200, 0x04020208, 0x04120208, + 0x04020000, 0x04120000, 0x04020008, 0x04120008, + 0x04020200, 0x04120200, 0x04020208, 0x04120208, + 0x00022000, 0x00122000, 0x00022008, 0x00122008, + 0x00022200, 0x00122200, 0x00022208, 0x00122208, + 0x00022000, 0x00122000, 0x00022008, 0x00122008, + 0x00022200, 0x00122200, 0x00022208, 0x00122208, + 0x04022000, 0x04122000, 0x04022008, 0x04122008, + 0x04022200, 0x04122200, 0x04022208, 0x04122208, + 0x04022000, 0x04122000, 0x04022008, 0x04122008, + 0x04022200, 0x04122200, 0x04022208, 0x04122208 + ); + static $pc2mapd1 = array( + 0x00000000, 0x00000001, 0x08000000, 0x08000001, + 0x00200000, 0x00200001, 0x08200000, 0x08200001, + 0x00000002, 0x00000003, 0x08000002, 0x08000003, + 0x00200002, 0x00200003, 0x08200002, 0x08200003 + ); + static $pc2mapd2 = array( + 0x00000000, 0x00100000, 0x00000800, 0x00100800, + 0x00000000, 0x00100000, 0x00000800, 0x00100800, + 0x04000000, 0x04100000, 0x04000800, 0x04100800, + 0x04000000, 0x04100000, 0x04000800, 0x04100800, + 0x00000004, 0x00100004, 0x00000804, 0x00100804, + 0x00000004, 0x00100004, 0x00000804, 0x00100804, + 0x04000004, 0x04100004, 0x04000804, 0x04100804, + 0x04000004, 0x04100004, 0x04000804, 0x04100804, + 0x00000000, 0x00100000, 0x00000800, 0x00100800, + 0x00000000, 0x00100000, 0x00000800, 0x00100800, + 0x04000000, 0x04100000, 0x04000800, 0x04100800, + 0x04000000, 0x04100000, 0x04000800, 0x04100800, + 0x00000004, 0x00100004, 0x00000804, 0x00100804, + 0x00000004, 0x00100004, 0x00000804, 0x00100804, + 0x04000004, 0x04100004, 0x04000804, 0x04100804, + 0x04000004, 0x04100004, 0x04000804, 0x04100804, + 0x00000200, 0x00100200, 0x00000A00, 0x00100A00, + 0x00000200, 0x00100200, 0x00000A00, 0x00100A00, + 0x04000200, 0x04100200, 0x04000A00, 0x04100A00, + 0x04000200, 0x04100200, 0x04000A00, 0x04100A00, + 0x00000204, 0x00100204, 0x00000A04, 0x00100A04, + 0x00000204, 0x00100204, 0x00000A04, 0x00100A04, + 0x04000204, 0x04100204, 0x04000A04, 0x04100A04, + 0x04000204, 0x04100204, 0x04000A04, 0x04100A04, + 0x00000200, 0x00100200, 0x00000A00, 0x00100A00, + 0x00000200, 0x00100200, 0x00000A00, 0x00100A00, + 0x04000200, 0x04100200, 0x04000A00, 0x04100A00, + 0x04000200, 0x04100200, 0x04000A00, 0x04100A00, + 0x00000204, 0x00100204, 0x00000A04, 0x00100A04, + 0x00000204, 0x00100204, 0x00000A04, 0x00100A04, + 0x04000204, 0x04100204, 0x04000A04, 0x04100A04, + 0x04000204, 0x04100204, 0x04000A04, 0x04100A04, + 0x00020000, 0x00120000, 0x00020800, 0x00120800, + 0x00020000, 0x00120000, 0x00020800, 0x00120800, + 0x04020000, 0x04120000, 0x04020800, 0x04120800, + 0x04020000, 0x04120000, 0x04020800, 0x04120800, + 0x00020004, 0x00120004, 0x00020804, 0x00120804, + 0x00020004, 0x00120004, 0x00020804, 0x00120804, + 0x04020004, 0x04120004, 0x04020804, 0x04120804, + 0x04020004, 0x04120004, 0x04020804, 0x04120804, + 0x00020000, 0x00120000, 0x00020800, 0x00120800, + 0x00020000, 0x00120000, 0x00020800, 0x00120800, + 0x04020000, 0x04120000, 0x04020800, 0x04120800, + 0x04020000, 0x04120000, 0x04020800, 0x04120800, + 0x00020004, 0x00120004, 0x00020804, 0x00120804, + 0x00020004, 0x00120004, 0x00020804, 0x00120804, + 0x04020004, 0x04120004, 0x04020804, 0x04120804, + 0x04020004, 0x04120004, 0x04020804, 0x04120804, + 0x00020200, 0x00120200, 0x00020A00, 0x00120A00, + 0x00020200, 0x00120200, 0x00020A00, 0x00120A00, + 0x04020200, 0x04120200, 0x04020A00, 0x04120A00, + 0x04020200, 0x04120200, 0x04020A00, 0x04120A00, + 0x00020204, 0x00120204, 0x00020A04, 0x00120A04, + 0x00020204, 0x00120204, 0x00020A04, 0x00120A04, + 0x04020204, 0x04120204, 0x04020A04, 0x04120A04, + 0x04020204, 0x04120204, 0x04020A04, 0x04120A04, + 0x00020200, 0x00120200, 0x00020A00, 0x00120A00, + 0x00020200, 0x00120200, 0x00020A00, 0x00120A00, + 0x04020200, 0x04120200, 0x04020A00, 0x04120A00, + 0x04020200, 0x04120200, 0x04020A00, 0x04120A00, + 0x00020204, 0x00120204, 0x00020A04, 0x00120A04, + 0x00020204, 0x00120204, 0x00020A04, 0x00120A04, + 0x04020204, 0x04120204, 0x04020A04, 0x04120A04, + 0x04020204, 0x04120204, 0x04020A04, 0x04120A04 + ); + static $pc2mapd3 = array( + 0x00000000, 0x00010000, 0x02000000, 0x02010000, + 0x00000020, 0x00010020, 0x02000020, 0x02010020, + 0x00040000, 0x00050000, 0x02040000, 0x02050000, + 0x00040020, 0x00050020, 0x02040020, 0x02050020, + 0x00002000, 0x00012000, 0x02002000, 0x02012000, + 0x00002020, 0x00012020, 0x02002020, 0x02012020, + 0x00042000, 0x00052000, 0x02042000, 0x02052000, + 0x00042020, 0x00052020, 0x02042020, 0x02052020, + 0x00000000, 0x00010000, 0x02000000, 0x02010000, + 0x00000020, 0x00010020, 0x02000020, 0x02010020, + 0x00040000, 0x00050000, 0x02040000, 0x02050000, + 0x00040020, 0x00050020, 0x02040020, 0x02050020, + 0x00002000, 0x00012000, 0x02002000, 0x02012000, + 0x00002020, 0x00012020, 0x02002020, 0x02012020, + 0x00042000, 0x00052000, 0x02042000, 0x02052000, + 0x00042020, 0x00052020, 0x02042020, 0x02052020, + 0x00000010, 0x00010010, 0x02000010, 0x02010010, + 0x00000030, 0x00010030, 0x02000030, 0x02010030, + 0x00040010, 0x00050010, 0x02040010, 0x02050010, + 0x00040030, 0x00050030, 0x02040030, 0x02050030, + 0x00002010, 0x00012010, 0x02002010, 0x02012010, + 0x00002030, 0x00012030, 0x02002030, 0x02012030, + 0x00042010, 0x00052010, 0x02042010, 0x02052010, + 0x00042030, 0x00052030, 0x02042030, 0x02052030, + 0x00000010, 0x00010010, 0x02000010, 0x02010010, + 0x00000030, 0x00010030, 0x02000030, 0x02010030, + 0x00040010, 0x00050010, 0x02040010, 0x02050010, + 0x00040030, 0x00050030, 0x02040030, 0x02050030, + 0x00002010, 0x00012010, 0x02002010, 0x02012010, + 0x00002030, 0x00012030, 0x02002030, 0x02012030, + 0x00042010, 0x00052010, 0x02042010, 0x02052010, + 0x00042030, 0x00052030, 0x02042030, 0x02052030, + 0x20000000, 0x20010000, 0x22000000, 0x22010000, + 0x20000020, 0x20010020, 0x22000020, 0x22010020, + 0x20040000, 0x20050000, 0x22040000, 0x22050000, + 0x20040020, 0x20050020, 0x22040020, 0x22050020, + 0x20002000, 0x20012000, 0x22002000, 0x22012000, + 0x20002020, 0x20012020, 0x22002020, 0x22012020, + 0x20042000, 0x20052000, 0x22042000, 0x22052000, + 0x20042020, 0x20052020, 0x22042020, 0x22052020, + 0x20000000, 0x20010000, 0x22000000, 0x22010000, + 0x20000020, 0x20010020, 0x22000020, 0x22010020, + 0x20040000, 0x20050000, 0x22040000, 0x22050000, + 0x20040020, 0x20050020, 0x22040020, 0x22050020, + 0x20002000, 0x20012000, 0x22002000, 0x22012000, + 0x20002020, 0x20012020, 0x22002020, 0x22012020, + 0x20042000, 0x20052000, 0x22042000, 0x22052000, + 0x20042020, 0x20052020, 0x22042020, 0x22052020, + 0x20000010, 0x20010010, 0x22000010, 0x22010010, + 0x20000030, 0x20010030, 0x22000030, 0x22010030, + 0x20040010, 0x20050010, 0x22040010, 0x22050010, + 0x20040030, 0x20050030, 0x22040030, 0x22050030, + 0x20002010, 0x20012010, 0x22002010, 0x22012010, + 0x20002030, 0x20012030, 0x22002030, 0x22012030, + 0x20042010, 0x20052010, 0x22042010, 0x22052010, + 0x20042030, 0x20052030, 0x22042030, 0x22052030, + 0x20000010, 0x20010010, 0x22000010, 0x22010010, + 0x20000030, 0x20010030, 0x22000030, 0x22010030, + 0x20040010, 0x20050010, 0x22040010, 0x22050010, + 0x20040030, 0x20050030, 0x22040030, 0x22050030, + 0x20002010, 0x20012010, 0x22002010, 0x22012010, + 0x20002030, 0x20012030, 0x22002030, 0x22012030, + 0x20042010, 0x20052010, 0x22042010, 0x22052010, + 0x20042030, 0x20052030, 0x22042030, 0x22052030 + ); + static $pc2mapd4 = array( + 0x00000000, 0x00000400, 0x01000000, 0x01000400, + 0x00000000, 0x00000400, 0x01000000, 0x01000400, + 0x00000100, 0x00000500, 0x01000100, 0x01000500, + 0x00000100, 0x00000500, 0x01000100, 0x01000500, + 0x10000000, 0x10000400, 0x11000000, 0x11000400, + 0x10000000, 0x10000400, 0x11000000, 0x11000400, + 0x10000100, 0x10000500, 0x11000100, 0x11000500, + 0x10000100, 0x10000500, 0x11000100, 0x11000500, + 0x00080000, 0x00080400, 0x01080000, 0x01080400, + 0x00080000, 0x00080400, 0x01080000, 0x01080400, + 0x00080100, 0x00080500, 0x01080100, 0x01080500, + 0x00080100, 0x00080500, 0x01080100, 0x01080500, + 0x10080000, 0x10080400, 0x11080000, 0x11080400, + 0x10080000, 0x10080400, 0x11080000, 0x11080400, + 0x10080100, 0x10080500, 0x11080100, 0x11080500, + 0x10080100, 0x10080500, 0x11080100, 0x11080500, + 0x00000008, 0x00000408, 0x01000008, 0x01000408, + 0x00000008, 0x00000408, 0x01000008, 0x01000408, + 0x00000108, 0x00000508, 0x01000108, 0x01000508, + 0x00000108, 0x00000508, 0x01000108, 0x01000508, + 0x10000008, 0x10000408, 0x11000008, 0x11000408, + 0x10000008, 0x10000408, 0x11000008, 0x11000408, + 0x10000108, 0x10000508, 0x11000108, 0x11000508, + 0x10000108, 0x10000508, 0x11000108, 0x11000508, + 0x00080008, 0x00080408, 0x01080008, 0x01080408, + 0x00080008, 0x00080408, 0x01080008, 0x01080408, + 0x00080108, 0x00080508, 0x01080108, 0x01080508, + 0x00080108, 0x00080508, 0x01080108, 0x01080508, + 0x10080008, 0x10080408, 0x11080008, 0x11080408, + 0x10080008, 0x10080408, 0x11080008, 0x11080408, + 0x10080108, 0x10080508, 0x11080108, 0x11080508, + 0x10080108, 0x10080508, 0x11080108, 0x11080508, + 0x00001000, 0x00001400, 0x01001000, 0x01001400, + 0x00001000, 0x00001400, 0x01001000, 0x01001400, + 0x00001100, 0x00001500, 0x01001100, 0x01001500, + 0x00001100, 0x00001500, 0x01001100, 0x01001500, + 0x10001000, 0x10001400, 0x11001000, 0x11001400, + 0x10001000, 0x10001400, 0x11001000, 0x11001400, + 0x10001100, 0x10001500, 0x11001100, 0x11001500, + 0x10001100, 0x10001500, 0x11001100, 0x11001500, + 0x00081000, 0x00081400, 0x01081000, 0x01081400, + 0x00081000, 0x00081400, 0x01081000, 0x01081400, + 0x00081100, 0x00081500, 0x01081100, 0x01081500, + 0x00081100, 0x00081500, 0x01081100, 0x01081500, + 0x10081000, 0x10081400, 0x11081000, 0x11081400, + 0x10081000, 0x10081400, 0x11081000, 0x11081400, + 0x10081100, 0x10081500, 0x11081100, 0x11081500, + 0x10081100, 0x10081500, 0x11081100, 0x11081500, + 0x00001008, 0x00001408, 0x01001008, 0x01001408, + 0x00001008, 0x00001408, 0x01001008, 0x01001408, + 0x00001108, 0x00001508, 0x01001108, 0x01001508, + 0x00001108, 0x00001508, 0x01001108, 0x01001508, + 0x10001008, 0x10001408, 0x11001008, 0x11001408, + 0x10001008, 0x10001408, 0x11001008, 0x11001408, + 0x10001108, 0x10001508, 0x11001108, 0x11001508, + 0x10001108, 0x10001508, 0x11001108, 0x11001508, + 0x00081008, 0x00081408, 0x01081008, 0x01081408, + 0x00081008, 0x00081408, 0x01081008, 0x01081408, + 0x00081108, 0x00081508, 0x01081108, 0x01081508, + 0x00081108, 0x00081508, 0x01081108, 0x01081508, + 0x10081008, 0x10081408, 0x11081008, 0x11081408, + 0x10081008, 0x10081408, 0x11081008, 0x11081408, + 0x10081108, 0x10081508, 0x11081108, 0x11081508, + 0x10081108, 0x10081508, 0x11081108, 0x11081508 + ); + + $keys = array(); + for ($des_round = 0; $des_round < $this->des_rounds; ++$des_round) { + // pad the key and remove extra characters as appropriate. + $key = str_pad(substr($this->key, $des_round * 8, 8), 8, "\0"); + + // Perform the PC/1 transformation and compute C and D. + $t = unpack('Nl/Nr', $key); + list($l, $r) = array($t['l'], $t['r']); + $key = ($this->shuffle[$pc1map[ $r & 0xFF]] & "\x80\x80\x80\x80\x80\x80\x80\x00") | + ($this->shuffle[$pc1map[($r >> 8) & 0xFF]] & "\x40\x40\x40\x40\x40\x40\x40\x00") | + ($this->shuffle[$pc1map[($r >> 16) & 0xFF]] & "\x20\x20\x20\x20\x20\x20\x20\x00") | + ($this->shuffle[$pc1map[($r >> 24) & 0xFF]] & "\x10\x10\x10\x10\x10\x10\x10\x00") | + ($this->shuffle[$pc1map[ $l & 0xFF]] & "\x08\x08\x08\x08\x08\x08\x08\x00") | + ($this->shuffle[$pc1map[($l >> 8) & 0xFF]] & "\x04\x04\x04\x04\x04\x04\x04\x00") | + ($this->shuffle[$pc1map[($l >> 16) & 0xFF]] & "\x02\x02\x02\x02\x02\x02\x02\x00") | + ($this->shuffle[$pc1map[($l >> 24) & 0xFF]] & "\x01\x01\x01\x01\x01\x01\x01\x00"); + $key = unpack('Nc/Nd', $key); + $c = ( $key['c'] >> 4) & 0x0FFFFFFF; + $d = (($key['d'] >> 4) & 0x0FFFFFF0) | ($key['c'] & 0x0F); + + $keys[$des_round] = array( + self::ENCRYPT => array(), + self::DECRYPT => array_fill(0, 32, 0) + ); + for ($i = 0, $ki = 31; $i < 16; ++$i, $ki-= 2) { + $c <<= $shifts[$i]; + $c = ($c | ($c >> 28)) & 0x0FFFFFFF; + $d <<= $shifts[$i]; + $d = ($d | ($d >> 28)) & 0x0FFFFFFF; + + // Perform the PC-2 transformation. + $cp = $pc2mapc1[ $c >> 24 ] | $pc2mapc2[($c >> 16) & 0xFF] | + $pc2mapc3[($c >> 8) & 0xFF] | $pc2mapc4[ $c & 0xFF]; + $dp = $pc2mapd1[ $d >> 24 ] | $pc2mapd2[($d >> 16) & 0xFF] | + $pc2mapd3[($d >> 8) & 0xFF] | $pc2mapd4[ $d & 0xFF]; + + // Reorder: odd bytes/even bytes. Push the result in key schedule. + $val1 = ( $cp & 0xFF000000) | (($cp << 8) & 0x00FF0000) | + (($dp >> 16) & 0x0000FF00) | (($dp >> 8) & 0x000000FF); + $val2 = (($cp << 8) & 0xFF000000) | (($cp << 16) & 0x00FF0000) | + (($dp >> 8) & 0x0000FF00) | ( $dp & 0x000000FF); + $keys[$des_round][self::ENCRYPT][ ] = $val1; + $keys[$des_round][self::DECRYPT][$ki - 1] = $val1; + $keys[$des_round][self::ENCRYPT][ ] = $val2; + $keys[$des_round][self::DECRYPT][$ki ] = $val2; + } + } + + switch ($this->des_rounds) { + case 3: // 3DES keys + $this->keys = array( + self::ENCRYPT => array_merge( + $keys[0][self::ENCRYPT], + $keys[1][self::DECRYPT], + $keys[2][self::ENCRYPT] + ), + self::DECRYPT => array_merge( + $keys[2][self::DECRYPT], + $keys[1][self::ENCRYPT], + $keys[0][self::DECRYPT] + ) + ); + break; + // case 1: // DES keys + default: + $this->keys = array( + self::ENCRYPT => $keys[0][self::ENCRYPT], + self::DECRYPT => $keys[0][self::DECRYPT] + ); + } + } + + /** + * Setup the performance-optimized function for de/encrypt() + * + * @see \phpseclib\Crypt\Base::_setupInlineCrypt() + * @access private + */ + function _setupInlineCrypt() + { + $lambda_functions =& self::_getLambdaFunctions(); + + // Engine configuration for: + // - DES ($des_rounds == 1) or + // - 3DES ($des_rounds == 3) + $des_rounds = $this->des_rounds; + + // We create max. 10 hi-optimized code for memory reason. Means: For each $key one ultra fast inline-crypt function. + // (Currently, for DES, one generated $lambda_function cost on php5.5@32bit ~135kb unfreeable mem and ~230kb on php5.5@64bit) + // (Currently, for TripleDES, one generated $lambda_function cost on php5.5@32bit ~240kb unfreeable mem and ~340kb on php5.5@64bit) + // After that, we'll still create very fast optimized code but not the hi-ultimative code, for each $mode one + $gen_hi_opt_code = (bool)( count($lambda_functions) < 10 ); + + // Generation of a unique hash for our generated code + $code_hash = "Crypt_DES, $des_rounds, {$this->mode}"; + if ($gen_hi_opt_code) { + // For hi-optimized code, we create for each combination of + // $mode, $des_rounds and $this->key its own encrypt/decrypt function. + // After max 10 hi-optimized functions, we create generic + // (still very fast.. but not ultra) functions for each $mode/$des_rounds + // Currently 2 * 5 generic functions will be then max. possible. + $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key); + } + + // Is there a re-usable $lambda_functions in there? If not, we have to create it. + if (!isset($lambda_functions[$code_hash])) { + // Init code for both, encrypt and decrypt. + $init_crypt = 'static $sbox1, $sbox2, $sbox3, $sbox4, $sbox5, $sbox6, $sbox7, $sbox8, $shuffleip, $shuffleinvip; + if (!$sbox1) { + $sbox1 = array_map("intval", $self->sbox1); + $sbox2 = array_map("intval", $self->sbox2); + $sbox3 = array_map("intval", $self->sbox3); + $sbox4 = array_map("intval", $self->sbox4); + $sbox5 = array_map("intval", $self->sbox5); + $sbox6 = array_map("intval", $self->sbox6); + $sbox7 = array_map("intval", $self->sbox7); + $sbox8 = array_map("intval", $self->sbox8);' + /* Merge $shuffle with $[inv]ipmap */ . ' + for ($i = 0; $i < 256; ++$i) { + $shuffleip[] = $self->shuffle[$self->ipmap[$i]]; + $shuffleinvip[] = $self->shuffle[$self->invipmap[$i]]; + } + } + '; + + switch (true) { + case $gen_hi_opt_code: + // In Hi-optimized code mode, we use our [3]DES key schedule as hardcoded integers. + // No futher initialisation of the $keys schedule is necessary. + // That is the extra performance boost. + $k = array( + self::ENCRYPT => $this->keys[self::ENCRYPT], + self::DECRYPT => $this->keys[self::DECRYPT] + ); + $init_encrypt = ''; + $init_decrypt = ''; + break; + default: + // In generic optimized code mode, we have to use, as the best compromise [currently], + // our key schedule as $ke/$kd arrays. (with hardcoded indexes...) + $k = array( + self::ENCRYPT => array(), + self::DECRYPT => array() + ); + for ($i = 0, $c = count($this->keys[self::ENCRYPT]); $i < $c; ++$i) { + $k[self::ENCRYPT][$i] = '$ke[' . $i . ']'; + $k[self::DECRYPT][$i] = '$kd[' . $i . ']'; + } + $init_encrypt = '$ke = $self->keys[$self::ENCRYPT];'; + $init_decrypt = '$kd = $self->keys[$self::DECRYPT];'; + break; + } + + // Creating code for en- and decryption. + $crypt_block = array(); + foreach (array(self::ENCRYPT, self::DECRYPT) as $c) { + /* Do the initial IP permutation. */ + $crypt_block[$c] = ' + $in = unpack("N*", $in); + $l = $in[1]; + $r = $in[2]; + $in = unpack("N*", + ($shuffleip[ $r & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") | + ($shuffleip[($r >> 8) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") | + ($shuffleip[($r >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") | + ($shuffleip[($r >> 24) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") | + ($shuffleip[ $l & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") | + ($shuffleip[($l >> 8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") | + ($shuffleip[($l >> 16) & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") | + ($shuffleip[($l >> 24) & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01") + ); + ' . /* Extract L0 and R0 */ ' + $l = $in[1]; + $r = $in[2]; + '; + + $l = '$l'; + $r = '$r'; + + // Perform DES or 3DES. + for ($ki = -1, $des_round = 0; $des_round < $des_rounds; ++$des_round) { + // Perform the 16 steps. + for ($i = 0; $i < 16; ++$i) { + // start of "the Feistel (F) function" - see the following URL: + // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png + // Merge key schedule. + $crypt_block[$c].= ' + $b1 = ((' . $r . ' >> 3) & 0x1FFFFFFF) ^ (' . $r . ' << 29) ^ ' . $k[$c][++$ki] . '; + $b2 = ((' . $r . ' >> 31) & 0x00000001) ^ (' . $r . ' << 1) ^ ' . $k[$c][++$ki] . ';' . + /* S-box indexing. */ + $l . ' = $sbox1[($b1 >> 24) & 0x3F] ^ $sbox2[($b2 >> 24) & 0x3F] ^ + $sbox3[($b1 >> 16) & 0x3F] ^ $sbox4[($b2 >> 16) & 0x3F] ^ + $sbox5[($b1 >> 8) & 0x3F] ^ $sbox6[($b2 >> 8) & 0x3F] ^ + $sbox7[ $b1 & 0x3F] ^ $sbox8[ $b2 & 0x3F] ^ ' . $l . '; + '; + // end of "the Feistel (F) function" + + // swap L & R + list($l, $r) = array($r, $l); + } + list($l, $r) = array($r, $l); + } + + // Perform the inverse IP permutation. + $crypt_block[$c].= '$in = + ($shuffleinvip[($l >> 24) & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") | + ($shuffleinvip[($r >> 24) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") | + ($shuffleinvip[($l >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") | + ($shuffleinvip[($r >> 16) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") | + ($shuffleinvip[($l >> 8) & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") | + ($shuffleinvip[($r >> 8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") | + ($shuffleinvip[ $l & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") | + ($shuffleinvip[ $r & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01"); + '; + } + + // Creates the inline-crypt function + $lambda_functions[$code_hash] = $this->_createInlineCryptFunction( + array( + 'init_crypt' => $init_crypt, + 'init_encrypt' => $init_encrypt, + 'init_decrypt' => $init_decrypt, + 'encrypt_block' => $crypt_block[self::ENCRYPT], + 'decrypt_block' => $crypt_block[self::DECRYPT] + ) + ); + } + + // Set the inline-crypt function as callback in: $this->inline_crypt + $this->inline_crypt = $lambda_functions[$code_hash]; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php new file mode 100644 index 000000000..248b65ef7 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php @@ -0,0 +1,893 @@ + + * setKey('abcdefg'); + * + * echo base64_encode($hash->hash('abcdefg')); + * ?> + * + * + * @category Crypt + * @package Hash + * @author Jim Wigginton + * @copyright 2007 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Crypt; + +use phpseclib\Math\BigInteger; + +/** + * Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic hashing functions. + * + * @package Hash + * @author Jim Wigginton + * @access public + */ +class Hash +{ + /**#@+ + * @access private + * @see \phpseclib\Crypt\Hash::__construct() + */ + /** + * Toggles the internal implementation + */ + const MODE_INTERNAL = 1; + /** + * Toggles the mhash() implementation, which has been deprecated on PHP 5.3.0+. + */ + const MODE_MHASH = 2; + /** + * Toggles the hash() implementation, which works on PHP 5.1.2+. + */ + const MODE_HASH = 3; + /**#@-*/ + + /** + * Hash Parameter + * + * @see self::setHash() + * @var int + * @access private + */ + var $hashParam; + + /** + * Byte-length of compression blocks / key (Internal HMAC) + * + * @see self::setAlgorithm() + * @var int + * @access private + */ + var $b; + + /** + * Byte-length of hash output (Internal HMAC) + * + * @see self::setHash() + * @var int + * @access private + */ + var $l = false; + + /** + * Hash Algorithm + * + * @see self::setHash() + * @var string + * @access private + */ + var $hash; + + /** + * Key + * + * @see self::setKey() + * @var string + * @access private + */ + var $key = false; + + /** + * Computed Key + * + * @see self::_computeKey() + * @var string + * @access private + */ + var $computedKey = false; + + /** + * Outer XOR (Internal HMAC) + * + * @see self::setKey() + * @var string + * @access private + */ + var $opad; + + /** + * Inner XOR (Internal HMAC) + * + * @see self::setKey() + * @var string + * @access private + */ + var $ipad; + + /** + * Engine + * + * @see self::setHash() + * @var string + * @access private + */ + var $engine; + + /** + * Default Constructor. + * + * @param string $hash + * @return \phpseclib\Crypt\Hash + * @access public + */ + function __construct($hash = 'sha1') + { + if (!defined('CRYPT_HASH_MODE')) { + switch (true) { + case extension_loaded('hash'): + define('CRYPT_HASH_MODE', self::MODE_HASH); + break; + case extension_loaded('mhash'): + define('CRYPT_HASH_MODE', self::MODE_MHASH); + break; + default: + define('CRYPT_HASH_MODE', self::MODE_INTERNAL); + } + } + + $this->setHash($hash); + } + + /** + * Sets the key for HMACs + * + * Keys can be of any length. + * + * @access public + * @param string $key + */ + function setKey($key = false) + { + $this->key = $key; + $this->_computeKey(); + } + + /** + * Pre-compute the key used by the HMAC + * + * Quoting http://tools.ietf.org/html/rfc2104#section-2, "Applications that use keys longer than B bytes + * will first hash the key using H and then use the resultant L byte string as the actual key to HMAC." + * + * As documented in https://www.reddit.com/r/PHP/comments/9nct2l/symfonypolyfill_hash_pbkdf2_correct_fix_for/ + * when doing an HMAC multiple times it's faster to compute the hash once instead of computing it during + * every call + * + * @access private + */ + function _computeKey() + { + if ($this->key === false) { + $this->computedKey = false; + return; + } + + if (strlen($this->key) <= $this->b) { + $this->computedKey = $this->key; + return; + } + + switch ($this->engine) { + case self::MODE_MHASH: + $this->computedKey = mhash($this->hash, $this->key); + break; + case self::MODE_HASH: + $this->computedKey = hash($this->hash, $this->key, true); + break; + case self::MODE_INTERNAL: + $this->computedKey = call_user_func($this->hash, $this->key); + } + } + + /** + * Gets the hash function. + * + * As set by the constructor or by the setHash() method. + * + * @access public + * @return string + */ + function getHash() + { + return $this->hashParam; + } + + /** + * Sets the hash function. + * + * @access public + * @param string $hash + */ + function setHash($hash) + { + $this->hashParam = $hash = strtolower($hash); + switch ($hash) { + case 'md5-96': + case 'sha1-96': + case 'sha256-96': + case 'sha512-96': + $hash = substr($hash, 0, -3); + $this->l = 12; // 96 / 8 = 12 + break; + case 'md2': + case 'md5': + $this->l = 16; + break; + case 'sha1': + $this->l = 20; + break; + case 'sha256': + $this->l = 32; + break; + case 'sha384': + $this->l = 48; + break; + case 'sha512': + $this->l = 64; + } + + switch ($hash) { + case 'md2-96': + case 'md2': + $this->b = 16; + case 'md5-96': + case 'sha1-96': + case 'sha224-96': + case 'sha256-96': + case 'md2': + case 'md5': + case 'sha1': + case 'sha224': + case 'sha256': + $this->b = 64; + break; + default: + $this->b = 128; + } + + switch ($hash) { + case 'md2': + $this->engine = CRYPT_HASH_MODE == self::MODE_HASH && in_array('md2', hash_algos()) ? + self::MODE_HASH : self::MODE_INTERNAL; + break; + case 'sha384': + case 'sha512': + $this->engine = CRYPT_HASH_MODE == self::MODE_MHASH ? self::MODE_INTERNAL : CRYPT_HASH_MODE; + break; + default: + $this->engine = CRYPT_HASH_MODE; + } + + switch ($this->engine) { + case self::MODE_MHASH: + switch ($hash) { + case 'md5': + $this->hash = MHASH_MD5; + break; + case 'sha256': + $this->hash = MHASH_SHA256; + break; + case 'sha1': + default: + $this->hash = MHASH_SHA1; + } + $this->_computeKey(self::MODE_MHASH); + return; + case self::MODE_HASH: + switch ($hash) { + case 'md5': + $this->hash = 'md5'; + return; + case 'md2': + case 'sha256': + case 'sha384': + case 'sha512': + $this->hash = $hash; + return; + case 'sha1': + default: + $this->hash = 'sha1'; + } + $this->_computeKey(self::MODE_HASH); + return; + } + + switch ($hash) { + case 'md2': + $this->hash = array($this, '_md2'); + break; + case 'md5': + $this->hash = array($this, '_md5'); + break; + case 'sha256': + $this->hash = array($this, '_sha256'); + break; + case 'sha384': + case 'sha512': + $this->hash = array($this, '_sha512'); + break; + case 'sha1': + default: + $this->hash = array($this, '_sha1'); + } + + $this->ipad = str_repeat(chr(0x36), $this->b); + $this->opad = str_repeat(chr(0x5C), $this->b); + + $this->_computeKey(self::MODE_INTERNAL); + } + + /** + * Compute the HMAC. + * + * @access public + * @param string $text + * @return string + */ + function hash($text) + { + if (!empty($this->key) || is_string($this->key)) { + switch ($this->engine) { + case self::MODE_MHASH: + $output = mhash($this->hash, $text, $this->computedKey); + break; + case self::MODE_HASH: + $output = hash_hmac($this->hash, $text, $this->computedKey, true); + break; + case self::MODE_INTERNAL: + $key = str_pad($this->computedKey, $this->b, chr(0)); // step 1 + $temp = $this->ipad ^ $key; // step 2 + $temp .= $text; // step 3 + $temp = call_user_func($this->hash, $temp); // step 4 + $output = $this->opad ^ $key; // step 5 + $output.= $temp; // step 6 + $output = call_user_func($this->hash, $output); // step 7 + } + } else { + switch ($this->engine) { + case self::MODE_MHASH: + $output = mhash($this->hash, $text); + break; + case self::MODE_HASH: + $output = hash($this->hash, $text, true); + break; + case self::MODE_INTERNAL: + $output = call_user_func($this->hash, $text); + } + } + + return substr($output, 0, $this->l); + } + + /** + * Returns the hash length (in bytes) + * + * @access public + * @return int + */ + function getLength() + { + return $this->l; + } + + /** + * Wrapper for MD5 + * + * @access private + * @param string $m + */ + function _md5($m) + { + return pack('H*', md5($m)); + } + + /** + * Wrapper for SHA1 + * + * @access private + * @param string $m + */ + function _sha1($m) + { + return pack('H*', sha1($m)); + } + + /** + * Pure-PHP implementation of MD2 + * + * See {@link http://tools.ietf.org/html/rfc1319 RFC1319}. + * + * @access private + * @param string $m + */ + function _md2($m) + { + static $s = array( + 41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6, + 19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188, + 76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24, + 138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251, + 245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63, + 148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50, + 39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165, + 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210, + 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157, + 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27, + 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15, + 85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197, + 234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65, + 129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123, + 8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233, + 203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228, + 166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237, + 31, 26, 219, 153, 141, 51, 159, 17, 131, 20 + ); + + // Step 1. Append Padding Bytes + $pad = 16 - (strlen($m) & 0xF); + $m.= str_repeat(chr($pad), $pad); + + $length = strlen($m); + + // Step 2. Append Checksum + $c = str_repeat(chr(0), 16); + $l = chr(0); + for ($i = 0; $i < $length; $i+= 16) { + for ($j = 0; $j < 16; $j++) { + // RFC1319 incorrectly states that C[j] should be set to S[c xor L] + //$c[$j] = chr($s[ord($m[$i + $j] ^ $l)]); + // per , however, C[j] should be set to S[c xor L] xor C[j] + $c[$j] = chr($s[ord($m[$i + $j] ^ $l)] ^ ord($c[$j])); + $l = $c[$j]; + } + } + $m.= $c; + + $length+= 16; + + // Step 3. Initialize MD Buffer + $x = str_repeat(chr(0), 48); + + // Step 4. Process Message in 16-Byte Blocks + for ($i = 0; $i < $length; $i+= 16) { + for ($j = 0; $j < 16; $j++) { + $x[$j + 16] = $m[$i + $j]; + $x[$j + 32] = $x[$j + 16] ^ $x[$j]; + } + $t = chr(0); + for ($j = 0; $j < 18; $j++) { + for ($k = 0; $k < 48; $k++) { + $x[$k] = $t = $x[$k] ^ chr($s[ord($t)]); + //$t = $x[$k] = $x[$k] ^ chr($s[ord($t)]); + } + $t = chr(ord($t) + $j); + } + } + + // Step 5. Output + return substr($x, 0, 16); + } + + /** + * Pure-PHP implementation of SHA256 + * + * See {@link http://en.wikipedia.org/wiki/SHA_hash_functions#SHA-256_.28a_SHA-2_variant.29_pseudocode SHA-256 (a SHA-2 variant) pseudocode - Wikipedia}. + * + * @access private + * @param string $m + */ + function _sha256($m) + { + if (extension_loaded('suhosin')) { + return pack('H*', sha256($m)); + } + + // Initialize variables + $hash = array( + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + ); + // Initialize table of round constants + // (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311) + static $k = array( + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 + ); + + // Pre-processing + $length = strlen($m); + // to round to nearest 56 mod 64, we'll add 64 - (length + (64 - 56)) % 64 + $m.= str_repeat(chr(0), 64 - (($length + 8) & 0x3F)); + $m[$length] = chr(0x80); + // we don't support hashing strings 512MB long + $m.= pack('N2', 0, $length << 3); + + // Process the message in successive 512-bit chunks + $chunks = str_split($m, 64); + foreach ($chunks as $chunk) { + $w = array(); + for ($i = 0; $i < 16; $i++) { + extract(unpack('Ntemp', $this->_string_shift($chunk, 4))); + $w[] = $temp; + } + + // Extend the sixteen 32-bit words into sixty-four 32-bit words + for ($i = 16; $i < 64; $i++) { + // @codingStandardsIgnoreStart + $s0 = $this->_rightRotate($w[$i - 15], 7) ^ + $this->_rightRotate($w[$i - 15], 18) ^ + $this->_rightShift( $w[$i - 15], 3); + $s1 = $this->_rightRotate($w[$i - 2], 17) ^ + $this->_rightRotate($w[$i - 2], 19) ^ + $this->_rightShift( $w[$i - 2], 10); + // @codingStandardsIgnoreEnd + $w[$i] = $this->_add($w[$i - 16], $s0, $w[$i - 7], $s1); + } + + // Initialize hash value for this chunk + list($a, $b, $c, $d, $e, $f, $g, $h) = $hash; + + // Main loop + for ($i = 0; $i < 64; $i++) { + $s0 = $this->_rightRotate($a, 2) ^ + $this->_rightRotate($a, 13) ^ + $this->_rightRotate($a, 22); + $maj = ($a & $b) ^ + ($a & $c) ^ + ($b & $c); + $t2 = $this->_add($s0, $maj); + + $s1 = $this->_rightRotate($e, 6) ^ + $this->_rightRotate($e, 11) ^ + $this->_rightRotate($e, 25); + $ch = ($e & $f) ^ + ($this->_not($e) & $g); + $t1 = $this->_add($h, $s1, $ch, $k[$i], $w[$i]); + + $h = $g; + $g = $f; + $f = $e; + $e = $this->_add($d, $t1); + $d = $c; + $c = $b; + $b = $a; + $a = $this->_add($t1, $t2); + } + + // Add this chunk's hash to result so far + $hash = array( + $this->_add($hash[0], $a), + $this->_add($hash[1], $b), + $this->_add($hash[2], $c), + $this->_add($hash[3], $d), + $this->_add($hash[4], $e), + $this->_add($hash[5], $f), + $this->_add($hash[6], $g), + $this->_add($hash[7], $h) + ); + } + + // Produce the final hash value (big-endian) + return pack('N8', $hash[0], $hash[1], $hash[2], $hash[3], $hash[4], $hash[5], $hash[6], $hash[7]); + } + + /** + * Pure-PHP implementation of SHA384 and SHA512 + * + * @access private + * @param string $m + */ + function _sha512($m) + { + static $init384, $init512, $k; + + if (!isset($k)) { + // Initialize variables + $init384 = array( // initial values for SHA384 + 'cbbb9d5dc1059ed8', '629a292a367cd507', '9159015a3070dd17', '152fecd8f70e5939', + '67332667ffc00b31', '8eb44a8768581511', 'db0c2e0d64f98fa7', '47b5481dbefa4fa4' + ); + $init512 = array( // initial values for SHA512 + '6a09e667f3bcc908', 'bb67ae8584caa73b', '3c6ef372fe94f82b', 'a54ff53a5f1d36f1', + '510e527fade682d1', '9b05688c2b3e6c1f', '1f83d9abfb41bd6b', '5be0cd19137e2179' + ); + + for ($i = 0; $i < 8; $i++) { + $init384[$i] = new BigInteger($init384[$i], 16); + $init384[$i]->setPrecision(64); + $init512[$i] = new BigInteger($init512[$i], 16); + $init512[$i]->setPrecision(64); + } + + // Initialize table of round constants + // (first 64 bits of the fractional parts of the cube roots of the first 80 primes 2..409) + $k = array( + '428a2f98d728ae22', '7137449123ef65cd', 'b5c0fbcfec4d3b2f', 'e9b5dba58189dbbc', + '3956c25bf348b538', '59f111f1b605d019', '923f82a4af194f9b', 'ab1c5ed5da6d8118', + 'd807aa98a3030242', '12835b0145706fbe', '243185be4ee4b28c', '550c7dc3d5ffb4e2', + '72be5d74f27b896f', '80deb1fe3b1696b1', '9bdc06a725c71235', 'c19bf174cf692694', + 'e49b69c19ef14ad2', 'efbe4786384f25e3', '0fc19dc68b8cd5b5', '240ca1cc77ac9c65', + '2de92c6f592b0275', '4a7484aa6ea6e483', '5cb0a9dcbd41fbd4', '76f988da831153b5', + '983e5152ee66dfab', 'a831c66d2db43210', 'b00327c898fb213f', 'bf597fc7beef0ee4', + 'c6e00bf33da88fc2', 'd5a79147930aa725', '06ca6351e003826f', '142929670a0e6e70', + '27b70a8546d22ffc', '2e1b21385c26c926', '4d2c6dfc5ac42aed', '53380d139d95b3df', + '650a73548baf63de', '766a0abb3c77b2a8', '81c2c92e47edaee6', '92722c851482353b', + 'a2bfe8a14cf10364', 'a81a664bbc423001', 'c24b8b70d0f89791', 'c76c51a30654be30', + 'd192e819d6ef5218', 'd69906245565a910', 'f40e35855771202a', '106aa07032bbd1b8', + '19a4c116b8d2d0c8', '1e376c085141ab53', '2748774cdf8eeb99', '34b0bcb5e19b48a8', + '391c0cb3c5c95a63', '4ed8aa4ae3418acb', '5b9cca4f7763e373', '682e6ff3d6b2b8a3', + '748f82ee5defb2fc', '78a5636f43172f60', '84c87814a1f0ab72', '8cc702081a6439ec', + '90befffa23631e28', 'a4506cebde82bde9', 'bef9a3f7b2c67915', 'c67178f2e372532b', + 'ca273eceea26619c', 'd186b8c721c0c207', 'eada7dd6cde0eb1e', 'f57d4f7fee6ed178', + '06f067aa72176fba', '0a637dc5a2c898a6', '113f9804bef90dae', '1b710b35131c471b', + '28db77f523047d84', '32caab7b40c72493', '3c9ebe0a15c9bebc', '431d67c49c100d4c', + '4cc5d4becb3e42b6', '597f299cfc657e2a', '5fcb6fab3ad6faec', '6c44198c4a475817' + ); + + for ($i = 0; $i < 80; $i++) { + $k[$i] = new BigInteger($k[$i], 16); + } + } + + $hash = $this->l == 48 ? $init384 : $init512; + + // Pre-processing + $length = strlen($m); + // to round to nearest 112 mod 128, we'll add 128 - (length + (128 - 112)) % 128 + $m.= str_repeat(chr(0), 128 - (($length + 16) & 0x7F)); + $m[$length] = chr(0x80); + // we don't support hashing strings 512MB long + $m.= pack('N4', 0, 0, 0, $length << 3); + + // Process the message in successive 1024-bit chunks + $chunks = str_split($m, 128); + foreach ($chunks as $chunk) { + $w = array(); + for ($i = 0; $i < 16; $i++) { + $temp = new BigInteger($this->_string_shift($chunk, 8), 256); + $temp->setPrecision(64); + $w[] = $temp; + } + + // Extend the sixteen 32-bit words into eighty 32-bit words + for ($i = 16; $i < 80; $i++) { + $temp = array( + $w[$i - 15]->bitwise_rightRotate(1), + $w[$i - 15]->bitwise_rightRotate(8), + $w[$i - 15]->bitwise_rightShift(7) + ); + $s0 = $temp[0]->bitwise_xor($temp[1]); + $s0 = $s0->bitwise_xor($temp[2]); + $temp = array( + $w[$i - 2]->bitwise_rightRotate(19), + $w[$i - 2]->bitwise_rightRotate(61), + $w[$i - 2]->bitwise_rightShift(6) + ); + $s1 = $temp[0]->bitwise_xor($temp[1]); + $s1 = $s1->bitwise_xor($temp[2]); + $w[$i] = $w[$i - 16]->copy(); + $w[$i] = $w[$i]->add($s0); + $w[$i] = $w[$i]->add($w[$i - 7]); + $w[$i] = $w[$i]->add($s1); + } + + // Initialize hash value for this chunk + $a = $hash[0]->copy(); + $b = $hash[1]->copy(); + $c = $hash[2]->copy(); + $d = $hash[3]->copy(); + $e = $hash[4]->copy(); + $f = $hash[5]->copy(); + $g = $hash[6]->copy(); + $h = $hash[7]->copy(); + + // Main loop + for ($i = 0; $i < 80; $i++) { + $temp = array( + $a->bitwise_rightRotate(28), + $a->bitwise_rightRotate(34), + $a->bitwise_rightRotate(39) + ); + $s0 = $temp[0]->bitwise_xor($temp[1]); + $s0 = $s0->bitwise_xor($temp[2]); + $temp = array( + $a->bitwise_and($b), + $a->bitwise_and($c), + $b->bitwise_and($c) + ); + $maj = $temp[0]->bitwise_xor($temp[1]); + $maj = $maj->bitwise_xor($temp[2]); + $t2 = $s0->add($maj); + + $temp = array( + $e->bitwise_rightRotate(14), + $e->bitwise_rightRotate(18), + $e->bitwise_rightRotate(41) + ); + $s1 = $temp[0]->bitwise_xor($temp[1]); + $s1 = $s1->bitwise_xor($temp[2]); + $temp = array( + $e->bitwise_and($f), + $g->bitwise_and($e->bitwise_not()) + ); + $ch = $temp[0]->bitwise_xor($temp[1]); + $t1 = $h->add($s1); + $t1 = $t1->add($ch); + $t1 = $t1->add($k[$i]); + $t1 = $t1->add($w[$i]); + + $h = $g->copy(); + $g = $f->copy(); + $f = $e->copy(); + $e = $d->add($t1); + $d = $c->copy(); + $c = $b->copy(); + $b = $a->copy(); + $a = $t1->add($t2); + } + + // Add this chunk's hash to result so far + $hash = array( + $hash[0]->add($a), + $hash[1]->add($b), + $hash[2]->add($c), + $hash[3]->add($d), + $hash[4]->add($e), + $hash[5]->add($f), + $hash[6]->add($g), + $hash[7]->add($h) + ); + } + + // Produce the final hash value (big-endian) + // (\phpseclib\Crypt\Hash::hash() trims the output for hashes but not for HMACs. as such, we trim the output here) + $temp = $hash[0]->toBytes() . $hash[1]->toBytes() . $hash[2]->toBytes() . $hash[3]->toBytes() . + $hash[4]->toBytes() . $hash[5]->toBytes(); + if ($this->l != 48) { + $temp.= $hash[6]->toBytes() . $hash[7]->toBytes(); + } + + return $temp; + } + + /** + * Right Rotate + * + * @access private + * @param int $int + * @param int $amt + * @see self::_sha256() + * @return int + */ + function _rightRotate($int, $amt) + { + $invamt = 32 - $amt; + $mask = (1 << $invamt) - 1; + return (($int << $invamt) & 0xFFFFFFFF) | (($int >> $amt) & $mask); + } + + /** + * Right Shift + * + * @access private + * @param int $int + * @param int $amt + * @see self::_sha256() + * @return int + */ + function _rightShift($int, $amt) + { + $mask = (1 << (32 - $amt)) - 1; + return ($int >> $amt) & $mask; + } + + /** + * Not + * + * @access private + * @param int $int + * @see self::_sha256() + * @return int + */ + function _not($int) + { + return ~$int & 0xFFFFFFFF; + } + + /** + * Add + * + * _sha256() adds multiple unsigned 32-bit integers. Since PHP doesn't support unsigned integers and since the + * possibility of overflow exists, care has to be taken. BigInteger could be used but this should be faster. + * + * @return int + * @see self::_sha256() + * @access private + */ + function _add() + { + static $mod; + if (!isset($mod)) { + $mod = pow(2, 32); + } + + $result = 0; + $arguments = func_get_args(); + foreach ($arguments as $argument) { + $result+= $argument < 0 ? ($argument & 0x7FFFFFFF) + 0x80000000 : $argument; + } + + if ((php_uname('m') & "\xDF\xDF\xDF") != 'ARM') { + return fmod($result, $mod); + } + + return (fmod($result, 0x80000000) & 0x7FFFFFFF) | + ((fmod(floor($result / 0x80000000), 2) & 1) << 31); + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param string $string + * @param int $index + * @return string + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php new file mode 100644 index 000000000..b2b9d48ea --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php @@ -0,0 +1,688 @@ + + * setKey('abcdefgh'); + * + * $plaintext = str_repeat('a', 1024); + * + * echo $rc2->decrypt($rc2->encrypt($plaintext)); + * ?> + * + * + * @category Crypt + * @package RC2 + * @author Patrick Monnerat + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Crypt; + +/** + * Pure-PHP implementation of RC2. + * + * @package RC2 + * @access public + */ +class RC2 extends Base +{ + /** + * Block Length of the cipher + * + * @see \phpseclib\Crypt\Base::block_size + * @var int + * @access private + */ + var $block_size = 8; + + /** + * The Key + * + * @see \phpseclib\Crypt\Base::key + * @see self::setKey() + * @var string + * @access private + */ + var $key; + + /** + * The Original (unpadded) Key + * + * @see \phpseclib\Crypt\Base::key + * @see self::setKey() + * @see self::encrypt() + * @see self::decrypt() + * @var string + * @access private + */ + var $orig_key; + + /** + * Don't truncate / null pad key + * + * @see \phpseclib\Crypt\Base::_clearBuffers() + * @var bool + * @access private + */ + var $skip_key_adjustment = true; + + /** + * Key Length (in bytes) + * + * @see \phpseclib\Crypt\RC2::setKeyLength() + * @var int + * @access private + */ + var $key_length = 16; // = 128 bits + + /** + * The mcrypt specific name of the cipher + * + * @see \phpseclib\Crypt\Base::cipher_name_mcrypt + * @var string + * @access private + */ + var $cipher_name_mcrypt = 'rc2'; + + /** + * Optimizing value while CFB-encrypting + * + * @see \phpseclib\Crypt\Base::cfb_init_len + * @var int + * @access private + */ + var $cfb_init_len = 500; + + /** + * The key length in bits. + * + * @see self::setKeyLength() + * @see self::setKey() + * @var int + * @access private + * @internal Should be in range [1..1024]. + * @internal Changing this value after setting the key has no effect. + */ + var $default_key_length = 1024; + + /** + * The key length in bits. + * + * @see self::isValidEnine() + * @see self::setKey() + * @var int + * @access private + * @internal Should be in range [1..1024]. + */ + var $current_key_length; + + /** + * The Key Schedule + * + * @see self::_setupKey() + * @var array + * @access private + */ + var $keys; + + /** + * Key expansion randomization table. + * Twice the same 256-value sequence to save a modulus in key expansion. + * + * @see self::setKey() + * @var array + * @access private + */ + var $pitable = array( + 0xD9, 0x78, 0xF9, 0xC4, 0x19, 0xDD, 0xB5, 0xED, + 0x28, 0xE9, 0xFD, 0x79, 0x4A, 0xA0, 0xD8, 0x9D, + 0xC6, 0x7E, 0x37, 0x83, 0x2B, 0x76, 0x53, 0x8E, + 0x62, 0x4C, 0x64, 0x88, 0x44, 0x8B, 0xFB, 0xA2, + 0x17, 0x9A, 0x59, 0xF5, 0x87, 0xB3, 0x4F, 0x13, + 0x61, 0x45, 0x6D, 0x8D, 0x09, 0x81, 0x7D, 0x32, + 0xBD, 0x8F, 0x40, 0xEB, 0x86, 0xB7, 0x7B, 0x0B, + 0xF0, 0x95, 0x21, 0x22, 0x5C, 0x6B, 0x4E, 0x82, + 0x54, 0xD6, 0x65, 0x93, 0xCE, 0x60, 0xB2, 0x1C, + 0x73, 0x56, 0xC0, 0x14, 0xA7, 0x8C, 0xF1, 0xDC, + 0x12, 0x75, 0xCA, 0x1F, 0x3B, 0xBE, 0xE4, 0xD1, + 0x42, 0x3D, 0xD4, 0x30, 0xA3, 0x3C, 0xB6, 0x26, + 0x6F, 0xBF, 0x0E, 0xDA, 0x46, 0x69, 0x07, 0x57, + 0x27, 0xF2, 0x1D, 0x9B, 0xBC, 0x94, 0x43, 0x03, + 0xF8, 0x11, 0xC7, 0xF6, 0x90, 0xEF, 0x3E, 0xE7, + 0x06, 0xC3, 0xD5, 0x2F, 0xC8, 0x66, 0x1E, 0xD7, + 0x08, 0xE8, 0xEA, 0xDE, 0x80, 0x52, 0xEE, 0xF7, + 0x84, 0xAA, 0x72, 0xAC, 0x35, 0x4D, 0x6A, 0x2A, + 0x96, 0x1A, 0xD2, 0x71, 0x5A, 0x15, 0x49, 0x74, + 0x4B, 0x9F, 0xD0, 0x5E, 0x04, 0x18, 0xA4, 0xEC, + 0xC2, 0xE0, 0x41, 0x6E, 0x0F, 0x51, 0xCB, 0xCC, + 0x24, 0x91, 0xAF, 0x50, 0xA1, 0xF4, 0x70, 0x39, + 0x99, 0x7C, 0x3A, 0x85, 0x23, 0xB8, 0xB4, 0x7A, + 0xFC, 0x02, 0x36, 0x5B, 0x25, 0x55, 0x97, 0x31, + 0x2D, 0x5D, 0xFA, 0x98, 0xE3, 0x8A, 0x92, 0xAE, + 0x05, 0xDF, 0x29, 0x10, 0x67, 0x6C, 0xBA, 0xC9, + 0xD3, 0x00, 0xE6, 0xCF, 0xE1, 0x9E, 0xA8, 0x2C, + 0x63, 0x16, 0x01, 0x3F, 0x58, 0xE2, 0x89, 0xA9, + 0x0D, 0x38, 0x34, 0x1B, 0xAB, 0x33, 0xFF, 0xB0, + 0xBB, 0x48, 0x0C, 0x5F, 0xB9, 0xB1, 0xCD, 0x2E, + 0xC5, 0xF3, 0xDB, 0x47, 0xE5, 0xA5, 0x9C, 0x77, + 0x0A, 0xA6, 0x20, 0x68, 0xFE, 0x7F, 0xC1, 0xAD, + 0xD9, 0x78, 0xF9, 0xC4, 0x19, 0xDD, 0xB5, 0xED, + 0x28, 0xE9, 0xFD, 0x79, 0x4A, 0xA0, 0xD8, 0x9D, + 0xC6, 0x7E, 0x37, 0x83, 0x2B, 0x76, 0x53, 0x8E, + 0x62, 0x4C, 0x64, 0x88, 0x44, 0x8B, 0xFB, 0xA2, + 0x17, 0x9A, 0x59, 0xF5, 0x87, 0xB3, 0x4F, 0x13, + 0x61, 0x45, 0x6D, 0x8D, 0x09, 0x81, 0x7D, 0x32, + 0xBD, 0x8F, 0x40, 0xEB, 0x86, 0xB7, 0x7B, 0x0B, + 0xF0, 0x95, 0x21, 0x22, 0x5C, 0x6B, 0x4E, 0x82, + 0x54, 0xD6, 0x65, 0x93, 0xCE, 0x60, 0xB2, 0x1C, + 0x73, 0x56, 0xC0, 0x14, 0xA7, 0x8C, 0xF1, 0xDC, + 0x12, 0x75, 0xCA, 0x1F, 0x3B, 0xBE, 0xE4, 0xD1, + 0x42, 0x3D, 0xD4, 0x30, 0xA3, 0x3C, 0xB6, 0x26, + 0x6F, 0xBF, 0x0E, 0xDA, 0x46, 0x69, 0x07, 0x57, + 0x27, 0xF2, 0x1D, 0x9B, 0xBC, 0x94, 0x43, 0x03, + 0xF8, 0x11, 0xC7, 0xF6, 0x90, 0xEF, 0x3E, 0xE7, + 0x06, 0xC3, 0xD5, 0x2F, 0xC8, 0x66, 0x1E, 0xD7, + 0x08, 0xE8, 0xEA, 0xDE, 0x80, 0x52, 0xEE, 0xF7, + 0x84, 0xAA, 0x72, 0xAC, 0x35, 0x4D, 0x6A, 0x2A, + 0x96, 0x1A, 0xD2, 0x71, 0x5A, 0x15, 0x49, 0x74, + 0x4B, 0x9F, 0xD0, 0x5E, 0x04, 0x18, 0xA4, 0xEC, + 0xC2, 0xE0, 0x41, 0x6E, 0x0F, 0x51, 0xCB, 0xCC, + 0x24, 0x91, 0xAF, 0x50, 0xA1, 0xF4, 0x70, 0x39, + 0x99, 0x7C, 0x3A, 0x85, 0x23, 0xB8, 0xB4, 0x7A, + 0xFC, 0x02, 0x36, 0x5B, 0x25, 0x55, 0x97, 0x31, + 0x2D, 0x5D, 0xFA, 0x98, 0xE3, 0x8A, 0x92, 0xAE, + 0x05, 0xDF, 0x29, 0x10, 0x67, 0x6C, 0xBA, 0xC9, + 0xD3, 0x00, 0xE6, 0xCF, 0xE1, 0x9E, 0xA8, 0x2C, + 0x63, 0x16, 0x01, 0x3F, 0x58, 0xE2, 0x89, 0xA9, + 0x0D, 0x38, 0x34, 0x1B, 0xAB, 0x33, 0xFF, 0xB0, + 0xBB, 0x48, 0x0C, 0x5F, 0xB9, 0xB1, 0xCD, 0x2E, + 0xC5, 0xF3, 0xDB, 0x47, 0xE5, 0xA5, 0x9C, 0x77, + 0x0A, 0xA6, 0x20, 0x68, 0xFE, 0x7F, 0xC1, 0xAD + ); + + /** + * Inverse key expansion randomization table. + * + * @see self::setKey() + * @var array + * @access private + */ + var $invpitable = array( + 0xD1, 0xDA, 0xB9, 0x6F, 0x9C, 0xC8, 0x78, 0x66, + 0x80, 0x2C, 0xF8, 0x37, 0xEA, 0xE0, 0x62, 0xA4, + 0xCB, 0x71, 0x50, 0x27, 0x4B, 0x95, 0xD9, 0x20, + 0x9D, 0x04, 0x91, 0xE3, 0x47, 0x6A, 0x7E, 0x53, + 0xFA, 0x3A, 0x3B, 0xB4, 0xA8, 0xBC, 0x5F, 0x68, + 0x08, 0xCA, 0x8F, 0x14, 0xD7, 0xC0, 0xEF, 0x7B, + 0x5B, 0xBF, 0x2F, 0xE5, 0xE2, 0x8C, 0xBA, 0x12, + 0xE1, 0xAF, 0xB2, 0x54, 0x5D, 0x59, 0x76, 0xDB, + 0x32, 0xA2, 0x58, 0x6E, 0x1C, 0x29, 0x64, 0xF3, + 0xE9, 0x96, 0x0C, 0x98, 0x19, 0x8D, 0x3E, 0x26, + 0xAB, 0xA5, 0x85, 0x16, 0x40, 0xBD, 0x49, 0x67, + 0xDC, 0x22, 0x94, 0xBB, 0x3C, 0xC1, 0x9B, 0xEB, + 0x45, 0x28, 0x18, 0xD8, 0x1A, 0x42, 0x7D, 0xCC, + 0xFB, 0x65, 0x8E, 0x3D, 0xCD, 0x2A, 0xA3, 0x60, + 0xAE, 0x93, 0x8A, 0x48, 0x97, 0x51, 0x15, 0xF7, + 0x01, 0x0B, 0xB7, 0x36, 0xB1, 0x2E, 0x11, 0xFD, + 0x84, 0x2D, 0x3F, 0x13, 0x88, 0xB3, 0x34, 0x24, + 0x1B, 0xDE, 0xC5, 0x1D, 0x4D, 0x2B, 0x17, 0x31, + 0x74, 0xA9, 0xC6, 0x43, 0x6D, 0x39, 0x90, 0xBE, + 0xC3, 0xB0, 0x21, 0x6B, 0xF6, 0x0F, 0xD5, 0x99, + 0x0D, 0xAC, 0x1F, 0x5C, 0x9E, 0xF5, 0xF9, 0x4C, + 0xD6, 0xDF, 0x89, 0xE4, 0x8B, 0xFF, 0xC7, 0xAA, + 0xE7, 0xED, 0x46, 0x25, 0xB6, 0x06, 0x5E, 0x35, + 0xB5, 0xEC, 0xCE, 0xE8, 0x6C, 0x30, 0x55, 0x61, + 0x4A, 0xFE, 0xA0, 0x79, 0x03, 0xF0, 0x10, 0x72, + 0x7C, 0xCF, 0x52, 0xA6, 0xA7, 0xEE, 0x44, 0xD3, + 0x9A, 0x57, 0x92, 0xD0, 0x5A, 0x7A, 0x41, 0x7F, + 0x0E, 0x00, 0x63, 0xF2, 0x4F, 0x05, 0x83, 0xC9, + 0xA1, 0xD4, 0xDD, 0xC4, 0x56, 0xF4, 0xD2, 0x77, + 0x81, 0x09, 0x82, 0x33, 0x9F, 0x07, 0x86, 0x75, + 0x38, 0x4E, 0x69, 0xF1, 0xAD, 0x23, 0x73, 0x87, + 0x70, 0x02, 0xC2, 0x1E, 0xB8, 0x0A, 0xFC, 0xE6 + ); + + /** + * Test for engine validity + * + * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine() + * + * @see \phpseclib\Crypt\Base::__construct() + * @param int $engine + * @access public + * @return bool + */ + function isValidEngine($engine) + { + switch ($engine) { + case self::ENGINE_OPENSSL: + if ($this->current_key_length != 128 || strlen($this->orig_key) < 16) { + return false; + } + $this->cipher_name_openssl_ecb = 'rc2-ecb'; + $this->cipher_name_openssl = 'rc2-' . $this->_openssl_translate_mode(); + } + + return parent::isValidEngine($engine); + } + + /** + * Sets the key length. + * + * Valid key lengths are 8 to 1024. + * Calling this function after setting the key has no effect until the next + * \phpseclib\Crypt\RC2::setKey() call. + * + * @access public + * @param int $length in bits + */ + function setKeyLength($length) + { + if ($length < 8) { + $this->default_key_length = 1; + } elseif ($length > 1024) { + $this->default_key_length = 128; + } else { + $this->default_key_length = $length; + } + $this->current_key_length = $this->default_key_length; + + parent::setKeyLength($length); + } + + /** + * Returns the current key length + * + * @access public + * @return int + */ + function getKeyLength() + { + return $this->current_key_length; + } + + /** + * Sets the key. + * + * Keys can be of any length. RC2, itself, uses 8 to 1024 bit keys (eg. + * strlen($key) <= 128), however, we only use the first 128 bytes if $key + * has more then 128 bytes in it, and set $key to a single null byte if + * it is empty. + * + * If the key is not explicitly set, it'll be assumed to be a single + * null byte. + * + * @see \phpseclib\Crypt\Base::setKey() + * @access public + * @param string $key + * @param int $t1 optional Effective key length in bits. + */ + function setKey($key, $t1 = 0) + { + $this->orig_key = $key; + + if ($t1 <= 0) { + $t1 = $this->default_key_length; + } elseif ($t1 > 1024) { + $t1 = 1024; + } + $this->current_key_length = $t1; + // Key byte count should be 1..128. + $key = strlen($key) ? substr($key, 0, 128) : "\x00"; + $t = strlen($key); + + // The mcrypt RC2 implementation only supports effective key length + // of 1024 bits. It is however possible to handle effective key + // lengths in range 1..1024 by expanding the key and applying + // inverse pitable mapping to the first byte before submitting it + // to mcrypt. + + // Key expansion. + $l = array_values(unpack('C*', $key)); + $t8 = ($t1 + 7) >> 3; + $tm = 0xFF >> (8 * $t8 - $t1); + + // Expand key. + $pitable = $this->pitable; + for ($i = $t; $i < 128; $i++) { + $l[$i] = $pitable[$l[$i - 1] + $l[$i - $t]]; + } + $i = 128 - $t8; + $l[$i] = $pitable[$l[$i] & $tm]; + while ($i--) { + $l[$i] = $pitable[$l[$i + 1] ^ $l[$i + $t8]]; + } + + // Prepare the key for mcrypt. + $l[0] = $this->invpitable[$l[0]]; + array_unshift($l, 'C*'); + + parent::setKey(call_user_func_array('pack', $l)); + } + + /** + * Encrypts a message. + * + * Mostly a wrapper for \phpseclib\Crypt\Base::encrypt, with some additional OpenSSL handling code + * + * @see self::decrypt() + * @access public + * @param string $plaintext + * @return string $ciphertext + */ + function encrypt($plaintext) + { + if ($this->engine == self::ENGINE_OPENSSL) { + $temp = $this->key; + $this->key = $this->orig_key; + $result = parent::encrypt($plaintext); + $this->key = $temp; + return $result; + } + + return parent::encrypt($plaintext); + } + + /** + * Decrypts a message. + * + * Mostly a wrapper for \phpseclib\Crypt\Base::decrypt, with some additional OpenSSL handling code + * + * @see self::encrypt() + * @access public + * @param string $ciphertext + * @return string $plaintext + */ + function decrypt($ciphertext) + { + if ($this->engine == self::ENGINE_OPENSSL) { + $temp = $this->key; + $this->key = $this->orig_key; + $result = parent::decrypt($ciphertext); + $this->key = $temp; + return $result; + } + + return parent::decrypt($ciphertext); + } + + /** + * Encrypts a block + * + * @see \phpseclib\Crypt\Base::_encryptBlock() + * @see \phpseclib\Crypt\Base::encrypt() + * @access private + * @param string $in + * @return string + */ + function _encryptBlock($in) + { + list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in)); + $keys = $this->keys; + $limit = 20; + $actions = array($limit => 44, 44 => 64); + $j = 0; + + for (;;) { + // Mixing round. + $r0 = (($r0 + $keys[$j++] + ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF) << 1; + $r0 |= $r0 >> 16; + $r1 = (($r1 + $keys[$j++] + ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF) << 2; + $r1 |= $r1 >> 16; + $r2 = (($r2 + $keys[$j++] + ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF) << 3; + $r2 |= $r2 >> 16; + $r3 = (($r3 + $keys[$j++] + ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF) << 5; + $r3 |= $r3 >> 16; + + if ($j === $limit) { + if ($limit === 64) { + break; + } + + // Mashing round. + $r0 += $keys[$r3 & 0x3F]; + $r1 += $keys[$r0 & 0x3F]; + $r2 += $keys[$r1 & 0x3F]; + $r3 += $keys[$r2 & 0x3F]; + $limit = $actions[$limit]; + } + } + + return pack('vvvv', $r0, $r1, $r2, $r3); + } + + /** + * Decrypts a block + * + * @see \phpseclib\Crypt\Base::_decryptBlock() + * @see \phpseclib\Crypt\Base::decrypt() + * @access private + * @param string $in + * @return string + */ + function _decryptBlock($in) + { + list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in)); + $keys = $this->keys; + $limit = 44; + $actions = array($limit => 20, 20 => 0); + $j = 64; + + for (;;) { + // R-mixing round. + $r3 = ($r3 | ($r3 << 16)) >> 5; + $r3 = ($r3 - $keys[--$j] - ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF; + $r2 = ($r2 | ($r2 << 16)) >> 3; + $r2 = ($r2 - $keys[--$j] - ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF; + $r1 = ($r1 | ($r1 << 16)) >> 2; + $r1 = ($r1 - $keys[--$j] - ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF; + $r0 = ($r0 | ($r0 << 16)) >> 1; + $r0 = ($r0 - $keys[--$j] - ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF; + + if ($j === $limit) { + if ($limit === 0) { + break; + } + + // R-mashing round. + $r3 = ($r3 - $keys[$r2 & 0x3F]) & 0xFFFF; + $r2 = ($r2 - $keys[$r1 & 0x3F]) & 0xFFFF; + $r1 = ($r1 - $keys[$r0 & 0x3F]) & 0xFFFF; + $r0 = ($r0 - $keys[$r3 & 0x3F]) & 0xFFFF; + $limit = $actions[$limit]; + } + } + + return pack('vvvv', $r0, $r1, $r2, $r3); + } + + /** + * Setup the \phpseclib\Crypt\Base::ENGINE_MCRYPT $engine + * + * @see \phpseclib\Crypt\Base::_setupMcrypt() + * @access private + */ + function _setupMcrypt() + { + if (!isset($this->key)) { + $this->setKey(''); + } + + parent::_setupMcrypt(); + } + + /** + * Creates the key schedule + * + * @see \phpseclib\Crypt\Base::_setupKey() + * @access private + */ + function _setupKey() + { + if (!isset($this->key)) { + $this->setKey(''); + } + + // Key has already been expanded in \phpseclib\Crypt\RC2::setKey(): + // Only the first value must be altered. + $l = unpack('Ca/Cb/v*', $this->key); + array_unshift($l, $this->pitable[$l['a']] | ($l['b'] << 8)); + unset($l['a']); + unset($l['b']); + $this->keys = $l; + } + + /** + * Setup the performance-optimized function for de/encrypt() + * + * @see \phpseclib\Crypt\Base::_setupInlineCrypt() + * @access private + */ + function _setupInlineCrypt() + { + $lambda_functions =& self::_getLambdaFunctions(); + + // The first 10 generated $lambda_functions will use the $keys hardcoded as integers + // for the mixing rounds, for better inline crypt performance [~20% faster]. + // But for memory reason we have to limit those ultra-optimized $lambda_functions to an amount of 10. + // (Currently, for Crypt_RC2, one generated $lambda_function cost on php5.5@32bit ~60kb unfreeable mem and ~100kb on php5.5@64bit) + $gen_hi_opt_code = (bool)(count($lambda_functions) < 10); + + // Generation of a unique hash for our generated code + $code_hash = "Crypt_RC2, {$this->mode}"; + if ($gen_hi_opt_code) { + $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key); + } + + // Is there a re-usable $lambda_functions in there? + // If not, we have to create it. + if (!isset($lambda_functions[$code_hash])) { + // Init code for both, encrypt and decrypt. + $init_crypt = '$keys = $self->keys;'; + + switch (true) { + case $gen_hi_opt_code: + $keys = $this->keys; + default: + $keys = array(); + foreach ($this->keys as $k => $v) { + $keys[$k] = '$keys[' . $k . ']'; + } + } + + // $in is the current 8 bytes block which has to be en/decrypt + $encrypt_block = $decrypt_block = ' + $in = unpack("v4", $in); + $r0 = $in[1]; + $r1 = $in[2]; + $r2 = $in[3]; + $r3 = $in[4]; + '; + + // Create code for encryption. + $limit = 20; + $actions = array($limit => 44, 44 => 64); + $j = 0; + + for (;;) { + // Mixing round. + $encrypt_block .= ' + $r0 = (($r0 + ' . $keys[$j++] . ' + + ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF) << 1; + $r0 |= $r0 >> 16; + $r1 = (($r1 + ' . $keys[$j++] . ' + + ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF) << 2; + $r1 |= $r1 >> 16; + $r2 = (($r2 + ' . $keys[$j++] . ' + + ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF) << 3; + $r2 |= $r2 >> 16; + $r3 = (($r3 + ' . $keys[$j++] . ' + + ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF) << 5; + $r3 |= $r3 >> 16;'; + + if ($j === $limit) { + if ($limit === 64) { + break; + } + + // Mashing round. + $encrypt_block .= ' + $r0 += $keys[$r3 & 0x3F]; + $r1 += $keys[$r0 & 0x3F]; + $r2 += $keys[$r1 & 0x3F]; + $r3 += $keys[$r2 & 0x3F];'; + $limit = $actions[$limit]; + } + } + + $encrypt_block .= '$in = pack("v4", $r0, $r1, $r2, $r3);'; + + // Create code for decryption. + $limit = 44; + $actions = array($limit => 20, 20 => 0); + $j = 64; + + for (;;) { + // R-mixing round. + $decrypt_block .= ' + $r3 = ($r3 | ($r3 << 16)) >> 5; + $r3 = ($r3 - ' . $keys[--$j] . ' - + ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF; + $r2 = ($r2 | ($r2 << 16)) >> 3; + $r2 = ($r2 - ' . $keys[--$j] . ' - + ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF; + $r1 = ($r1 | ($r1 << 16)) >> 2; + $r1 = ($r1 - ' . $keys[--$j] . ' - + ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF; + $r0 = ($r0 | ($r0 << 16)) >> 1; + $r0 = ($r0 - ' . $keys[--$j] . ' - + ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF;'; + + if ($j === $limit) { + if ($limit === 0) { + break; + } + + // R-mashing round. + $decrypt_block .= ' + $r3 = ($r3 - $keys[$r2 & 0x3F]) & 0xFFFF; + $r2 = ($r2 - $keys[$r1 & 0x3F]) & 0xFFFF; + $r1 = ($r1 - $keys[$r0 & 0x3F]) & 0xFFFF; + $r0 = ($r0 - $keys[$r3 & 0x3F]) & 0xFFFF;'; + $limit = $actions[$limit]; + } + } + + $decrypt_block .= '$in = pack("v4", $r0, $r1, $r2, $r3);'; + + // Creates the inline-crypt function + $lambda_functions[$code_hash] = $this->_createInlineCryptFunction( + array( + 'init_crypt' => $init_crypt, + 'encrypt_block' => $encrypt_block, + 'decrypt_block' => $decrypt_block + ) + ); + } + + // Set the inline-crypt function as callback in: $this->inline_crypt + $this->inline_crypt = $lambda_functions[$code_hash]; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php new file mode 100644 index 000000000..25e4ff854 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php @@ -0,0 +1,342 @@ + + * setKey('abcdefgh'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $rc4->decrypt($rc4->encrypt($plaintext)); + * ?> + * + * + * @category Crypt + * @package RC4 + * @author Jim Wigginton + * @copyright 2007 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Crypt; + +/** + * Pure-PHP implementation of RC4. + * + * @package RC4 + * @author Jim Wigginton + * @access public + */ +class RC4 extends Base +{ + /**#@+ + * @access private + * @see \phpseclib\Crypt\RC4::_crypt() + */ + const ENCRYPT = 0; + const DECRYPT = 1; + /**#@-*/ + + /** + * Block Length of the cipher + * + * RC4 is a stream cipher + * so we the block_size to 0 + * + * @see \phpseclib\Crypt\Base::block_size + * @var int + * @access private + */ + var $block_size = 0; + + /** + * Key Length (in bytes) + * + * @see \phpseclib\Crypt\RC4::setKeyLength() + * @var int + * @access private + */ + var $key_length = 128; // = 1024 bits + + /** + * The mcrypt specific name of the cipher + * + * @see \phpseclib\Crypt\Base::cipher_name_mcrypt + * @var string + * @access private + */ + var $cipher_name_mcrypt = 'arcfour'; + + /** + * Holds whether performance-optimized $inline_crypt() can/should be used. + * + * @see \phpseclib\Crypt\Base::inline_crypt + * @var mixed + * @access private + */ + var $use_inline_crypt = false; // currently not available + + /** + * The Key + * + * @see self::setKey() + * @var string + * @access private + */ + var $key; + + /** + * The Key Stream for decryption and encryption + * + * @see self::setKey() + * @var array + * @access private + */ + var $stream; + + /** + * Default Constructor. + * + * Determines whether or not the mcrypt extension should be used. + * + * @see \phpseclib\Crypt\Base::__construct() + * @return \phpseclib\Crypt\RC4 + * @access public + */ + function __construct() + { + parent::__construct(Base::MODE_STREAM); + } + + /** + * Test for engine validity + * + * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine() + * + * @see \phpseclib\Crypt\Base::__construct() + * @param int $engine + * @access public + * @return bool + */ + function isValidEngine($engine) + { + if ($engine == Base::ENGINE_OPENSSL) { + if (version_compare(PHP_VERSION, '5.3.7') >= 0) { + $this->cipher_name_openssl = 'rc4-40'; + } else { + switch (strlen($this->key)) { + case 5: + $this->cipher_name_openssl = 'rc4-40'; + break; + case 8: + $this->cipher_name_openssl = 'rc4-64'; + break; + case 16: + $this->cipher_name_openssl = 'rc4'; + break; + default: + return false; + } + } + } + + return parent::isValidEngine($engine); + } + + /** + * Dummy function. + * + * Some protocols, such as WEP, prepend an "initialization vector" to the key, effectively creating a new key [1]. + * If you need to use an initialization vector in this manner, feel free to prepend it to the key, yourself, before + * calling setKey(). + * + * [1] WEP's initialization vectors (IV's) are used in a somewhat insecure way. Since, in that protocol, + * the IV's are relatively easy to predict, an attack described by + * {@link http://www.drizzle.com/~aboba/IEEE/rc4_ksaproc.pdf Scott Fluhrer, Itsik Mantin, and Adi Shamir} + * can be used to quickly guess at the rest of the key. The following links elaborate: + * + * {@link http://www.rsa.com/rsalabs/node.asp?id=2009 http://www.rsa.com/rsalabs/node.asp?id=2009} + * {@link http://en.wikipedia.org/wiki/Related_key_attack http://en.wikipedia.org/wiki/Related_key_attack} + * + * @param string $iv + * @see self::setKey() + * @access public + */ + function setIV($iv) + { + } + + /** + * Sets the key length + * + * Keys can be between 1 and 256 bytes long. + * + * @access public + * @param int $length + */ + function setKeyLength($length) + { + if ($length < 8) { + $this->key_length = 1; + } elseif ($length > 2048) { + $this->key_length = 256; + } else { + $this->key_length = $length >> 3; + } + + parent::setKeyLength($length); + } + + /** + * Encrypts a message. + * + * @see \phpseclib\Crypt\Base::decrypt() + * @see self::_crypt() + * @access public + * @param string $plaintext + * @return string $ciphertext + */ + function encrypt($plaintext) + { + if ($this->engine != Base::ENGINE_INTERNAL) { + return parent::encrypt($plaintext); + } + return $this->_crypt($plaintext, self::ENCRYPT); + } + + /** + * Decrypts a message. + * + * $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)). + * At least if the continuous buffer is disabled. + * + * @see \phpseclib\Crypt\Base::encrypt() + * @see self::_crypt() + * @access public + * @param string $ciphertext + * @return string $plaintext + */ + function decrypt($ciphertext) + { + if ($this->engine != Base::ENGINE_INTERNAL) { + return parent::decrypt($ciphertext); + } + return $this->_crypt($ciphertext, self::DECRYPT); + } + + /** + * Encrypts a block + * + * @access private + * @param string $in + */ + function _encryptBlock($in) + { + // RC4 does not utilize this method + } + + /** + * Decrypts a block + * + * @access private + * @param string $in + */ + function _decryptBlock($in) + { + // RC4 does not utilize this method + } + + /** + * Setup the key (expansion) + * + * @see \phpseclib\Crypt\Base::_setupKey() + * @access private + */ + function _setupKey() + { + $key = $this->key; + $keyLength = strlen($key); + $keyStream = range(0, 255); + $j = 0; + for ($i = 0; $i < 256; $i++) { + $j = ($j + $keyStream[$i] + ord($key[$i % $keyLength])) & 255; + $temp = $keyStream[$i]; + $keyStream[$i] = $keyStream[$j]; + $keyStream[$j] = $temp; + } + + $this->stream = array(); + $this->stream[self::DECRYPT] = $this->stream[self::ENCRYPT] = array( + 0, // index $i + 0, // index $j + $keyStream + ); + } + + /** + * Encrypts or decrypts a message. + * + * @see self::encrypt() + * @see self::decrypt() + * @access private + * @param string $text + * @param int $mode + * @return string $text + */ + function _crypt($text, $mode) + { + if ($this->changed) { + $this->_setup(); + $this->changed = false; + } + + $stream = &$this->stream[$mode]; + if ($this->continuousBuffer) { + $i = &$stream[0]; + $j = &$stream[1]; + $keyStream = &$stream[2]; + } else { + $i = $stream[0]; + $j = $stream[1]; + $keyStream = $stream[2]; + } + + $len = strlen($text); + for ($k = 0; $k < $len; ++$k) { + $i = ($i + 1) & 255; + $ksi = $keyStream[$i]; + $j = ($j + $ksi) & 255; + $ksj = $keyStream[$j]; + + $keyStream[$i] = $ksj; + $keyStream[$j] = $ksi; + $text[$k] = $text[$k] ^ chr($keyStream[($ksj + $ksi) & 255]); + } + + return $text; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php new file mode 100644 index 000000000..17e2b8329 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php @@ -0,0 +1,3207 @@ + + * createKey()); + * + * $plaintext = 'terrafrost'; + * + * $rsa->loadKey($privatekey); + * $ciphertext = $rsa->encrypt($plaintext); + * + * $rsa->loadKey($publickey); + * echo $rsa->decrypt($ciphertext); + * ?> + * + * + * Here's an example of how to create signatures and verify signatures with this library: + * + * createKey()); + * + * $plaintext = 'terrafrost'; + * + * $rsa->loadKey($privatekey); + * $signature = $rsa->sign($plaintext); + * + * $rsa->loadKey($publickey); + * echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified'; + * ?> + * + * + * @category Crypt + * @package RSA + * @author Jim Wigginton + * @copyright 2009 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Crypt; + +use phpseclib\Math\BigInteger; + +/** + * Pure-PHP PKCS#1 compliant implementation of RSA. + * + * @package RSA + * @author Jim Wigginton + * @access public + */ +class RSA +{ + /**#@+ + * @access public + * @see self::encrypt() + * @see self::decrypt() + */ + /** + * Use {@link http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding Optimal Asymmetric Encryption Padding} + * (OAEP) for encryption / decryption. + * + * Uses sha1 by default. + * + * @see self::setHash() + * @see self::setMGFHash() + */ + const ENCRYPTION_OAEP = 1; + /** + * Use PKCS#1 padding. + * + * Although self::ENCRYPTION_OAEP offers more security, including PKCS#1 padding is necessary for purposes of backwards + * compatibility with protocols (like SSH-1) written before OAEP's introduction. + */ + const ENCRYPTION_PKCS1 = 2; + /** + * Do not use any padding + * + * Although this method is not recommended it can none-the-less sometimes be useful if you're trying to decrypt some legacy + * stuff, if you're trying to diagnose why an encrypted message isn't decrypting, etc. + */ + const ENCRYPTION_NONE = 3; + /**#@-*/ + + /**#@+ + * @access public + * @see self::sign() + * @see self::verify() + * @see self::setHash() + */ + /** + * Use the Probabilistic Signature Scheme for signing + * + * Uses sha1 by default. + * + * @see self::setSaltLength() + * @see self::setMGFHash() + */ + const SIGNATURE_PSS = 1; + /** + * Use the PKCS#1 scheme by default. + * + * Although self::SIGNATURE_PSS offers more security, including PKCS#1 signing is necessary for purposes of backwards + * compatibility with protocols (like SSH-2) written before PSS's introduction. + */ + const SIGNATURE_PKCS1 = 2; + /**#@-*/ + + /**#@+ + * @access private + * @see \phpseclib\Crypt\RSA::createKey() + */ + /** + * ASN1 Integer + */ + const ASN1_INTEGER = 2; + /** + * ASN1 Bit String + */ + const ASN1_BITSTRING = 3; + /** + * ASN1 Octet String + */ + const ASN1_OCTETSTRING = 4; + /** + * ASN1 Object Identifier + */ + const ASN1_OBJECT = 6; + /** + * ASN1 Sequence (with the constucted bit set) + */ + const ASN1_SEQUENCE = 48; + /**#@-*/ + + /**#@+ + * @access private + * @see \phpseclib\Crypt\RSA::__construct() + */ + /** + * To use the pure-PHP implementation + */ + const MODE_INTERNAL = 1; + /** + * To use the OpenSSL library + * + * (if enabled; otherwise, the internal implementation will be used) + */ + const MODE_OPENSSL = 2; + /**#@-*/ + + /**#@+ + * @access public + * @see \phpseclib\Crypt\RSA::createKey() + * @see \phpseclib\Crypt\RSA::setPrivateKeyFormat() + */ + /** + * PKCS#1 formatted private key + * + * Used by OpenSSH + */ + const PRIVATE_FORMAT_PKCS1 = 0; + /** + * PuTTY formatted private key + */ + const PRIVATE_FORMAT_PUTTY = 1; + /** + * XML formatted private key + */ + const PRIVATE_FORMAT_XML = 2; + /** + * PKCS#8 formatted private key + */ + const PRIVATE_FORMAT_PKCS8 = 8; + /** + * OpenSSH formatted private key + */ + const PRIVATE_FORMAT_OPENSSH = 9; + /**#@-*/ + + /**#@+ + * @access public + * @see \phpseclib\Crypt\RSA::createKey() + * @see \phpseclib\Crypt\RSA::setPublicKeyFormat() + */ + /** + * Raw public key + * + * An array containing two \phpseclib\Math\BigInteger objects. + * + * The exponent can be indexed with any of the following: + * + * 0, e, exponent, publicExponent + * + * The modulus can be indexed with any of the following: + * + * 1, n, modulo, modulus + */ + const PUBLIC_FORMAT_RAW = 3; + /** + * PKCS#1 formatted public key (raw) + * + * Used by File/X509.php + * + * Has the following header: + * + * -----BEGIN RSA PUBLIC KEY----- + * + * Analogous to ssh-keygen's pem format (as specified by -m) + */ + const PUBLIC_FORMAT_PKCS1 = 4; + const PUBLIC_FORMAT_PKCS1_RAW = 4; + /** + * XML formatted public key + */ + const PUBLIC_FORMAT_XML = 5; + /** + * OpenSSH formatted public key + * + * Place in $HOME/.ssh/authorized_keys + */ + const PUBLIC_FORMAT_OPENSSH = 6; + /** + * PKCS#1 formatted public key (encapsulated) + * + * Used by PHP's openssl_public_encrypt() and openssl's rsautl (when -pubin is set) + * + * Has the following header: + * + * -----BEGIN PUBLIC KEY----- + * + * Analogous to ssh-keygen's pkcs8 format (as specified by -m). Although PKCS8 + * is specific to private keys it's basically creating a DER-encoded wrapper + * for keys. This just extends that same concept to public keys (much like ssh-keygen) + */ + const PUBLIC_FORMAT_PKCS8 = 7; + /**#@-*/ + + /** + * Precomputed Zero + * + * @var \phpseclib\Math\BigInteger + * @access private + */ + var $zero; + + /** + * Precomputed One + * + * @var \phpseclib\Math\BigInteger + * @access private + */ + var $one; + + /** + * Private Key Format + * + * @var int + * @access private + */ + var $privateKeyFormat = self::PRIVATE_FORMAT_PKCS1; + + /** + * Public Key Format + * + * @var int + * @access public + */ + var $publicKeyFormat = self::PUBLIC_FORMAT_PKCS8; + + /** + * Modulus (ie. n) + * + * @var \phpseclib\Math\BigInteger + * @access private + */ + var $modulus; + + /** + * Modulus length + * + * @var \phpseclib\Math\BigInteger + * @access private + */ + var $k; + + /** + * Exponent (ie. e or d) + * + * @var \phpseclib\Math\BigInteger + * @access private + */ + var $exponent; + + /** + * Primes for Chinese Remainder Theorem (ie. p and q) + * + * @var array + * @access private + */ + var $primes; + + /** + * Exponents for Chinese Remainder Theorem (ie. dP and dQ) + * + * @var array + * @access private + */ + var $exponents; + + /** + * Coefficients for Chinese Remainder Theorem (ie. qInv) + * + * @var array + * @access private + */ + var $coefficients; + + /** + * Hash name + * + * @var string + * @access private + */ + var $hashName; + + /** + * Hash function + * + * @var \phpseclib\Crypt\Hash + * @access private + */ + var $hash; + + /** + * Length of hash function output + * + * @var int + * @access private + */ + var $hLen; + + /** + * Length of salt + * + * @var int + * @access private + */ + var $sLen; + + /** + * Hash function for the Mask Generation Function + * + * @var \phpseclib\Crypt\Hash + * @access private + */ + var $mgfHash; + + /** + * Length of MGF hash function output + * + * @var int + * @access private + */ + var $mgfHLen; + + /** + * Encryption mode + * + * @var int + * @access private + */ + var $encryptionMode = self::ENCRYPTION_OAEP; + + /** + * Signature mode + * + * @var int + * @access private + */ + var $signatureMode = self::SIGNATURE_PSS; + + /** + * Public Exponent + * + * @var mixed + * @access private + */ + var $publicExponent = false; + + /** + * Password + * + * @var string + * @access private + */ + var $password = false; + + /** + * Components + * + * For use with parsing XML formatted keys. PHP's XML Parser functions use utilized - instead of PHP's DOM functions - + * because PHP's XML Parser functions work on PHP4 whereas PHP's DOM functions - although surperior - don't. + * + * @see self::_start_element_handler() + * @var array + * @access private + */ + var $components = array(); + + /** + * Current String + * + * For use with parsing XML formatted keys. + * + * @see self::_character_handler() + * @see self::_stop_element_handler() + * @var mixed + * @access private + */ + var $current; + + /** + * OpenSSL configuration file name. + * + * Set to null to use system configuration file. + * @see self::createKey() + * @var mixed + * @Access public + */ + var $configFile; + + /** + * Public key comment field. + * + * @var string + * @access private + */ + var $comment = 'phpseclib-generated-key'; + + /** + * The constructor + * + * If you want to make use of the openssl extension, you'll need to set the mode manually, yourself. The reason + * \phpseclib\Crypt\RSA doesn't do it is because OpenSSL doesn't fail gracefully. openssl_pkey_new(), in particular, requires + * openssl.cnf be present somewhere and, unfortunately, the only real way to find out is too late. + * + * @return \phpseclib\Crypt\RSA + * @access public + */ + function __construct() + { + $this->configFile = dirname(__FILE__) . '/../openssl.cnf'; + + if (!defined('CRYPT_RSA_MODE')) { + switch (true) { + // Math/BigInteger's openssl requirements are a little less stringent than Crypt/RSA's. in particular, + // Math/BigInteger doesn't require an openssl.cfg file whereas Crypt/RSA does. so if Math/BigInteger + // can't use OpenSSL it can be pretty trivially assumed, then, that Crypt/RSA can't either. + case defined('MATH_BIGINTEGER_OPENSSL_DISABLE'): + define('CRYPT_RSA_MODE', self::MODE_INTERNAL); + break; + case extension_loaded('openssl') && file_exists($this->configFile): + // some versions of XAMPP have mismatched versions of OpenSSL which causes it not to work + $versions = array(); + + // avoid generating errors (even with suppression) when phpinfo() is disabled (common in production systems) + if (strpos(ini_get('disable_functions'), 'phpinfo') === false) { + ob_start(); + @phpinfo(); + $content = ob_get_contents(); + ob_end_clean(); + + preg_match_all('#OpenSSL (Header|Library) Version(.*)#im', $content, $matches); + + if (!empty($matches[1])) { + for ($i = 0; $i < count($matches[1]); $i++) { + $fullVersion = trim(str_replace('=>', '', strip_tags($matches[2][$i]))); + + // Remove letter part in OpenSSL version + if (!preg_match('/(\d+\.\d+\.\d+)/i', $fullVersion, $m)) { + $versions[$matches[1][$i]] = $fullVersion; + } else { + $versions[$matches[1][$i]] = $m[0]; + } + } + } + } + + // it doesn't appear that OpenSSL versions were reported upon until PHP 5.3+ + switch (true) { + case !isset($versions['Header']): + case !isset($versions['Library']): + case $versions['Header'] == $versions['Library']: + case version_compare($versions['Header'], '1.0.0') >= 0 && version_compare($versions['Library'], '1.0.0') >= 0: + define('CRYPT_RSA_MODE', self::MODE_OPENSSL); + break; + default: + define('CRYPT_RSA_MODE', self::MODE_INTERNAL); + define('MATH_BIGINTEGER_OPENSSL_DISABLE', true); + } + break; + default: + define('CRYPT_RSA_MODE', self::MODE_INTERNAL); + } + } + + $this->zero = new BigInteger(); + $this->one = new BigInteger(1); + + $this->hash = new Hash('sha1'); + $this->hLen = $this->hash->getLength(); + $this->hashName = 'sha1'; + $this->mgfHash = new Hash('sha1'); + $this->mgfHLen = $this->mgfHash->getLength(); + } + + /** + * Create public / private key pair + * + * Returns an array with the following three elements: + * - 'privatekey': The private key. + * - 'publickey': The public key. + * - 'partialkey': A partially computed key (if the execution time exceeded $timeout). + * Will need to be passed back to \phpseclib\Crypt\RSA::createKey() as the third parameter for further processing. + * + * @access public + * @param int $bits + * @param int $timeout + * @param array $partial + */ + function createKey($bits = 1024, $timeout = false, $partial = array()) + { + if (!defined('CRYPT_RSA_EXPONENT')) { + // http://en.wikipedia.org/wiki/65537_%28number%29 + define('CRYPT_RSA_EXPONENT', '65537'); + } + // per , this number ought not result in primes smaller + // than 256 bits. as a consequence if the key you're trying to create is 1024 bits and you've set CRYPT_RSA_SMALLEST_PRIME + // to 384 bits then you're going to get a 384 bit prime and a 640 bit prime (384 + 1024 % 384). at least if + // CRYPT_RSA_MODE is set to self::MODE_INTERNAL. if CRYPT_RSA_MODE is set to self::MODE_OPENSSL then + // CRYPT_RSA_SMALLEST_PRIME is ignored (ie. multi-prime RSA support is more intended as a way to speed up RSA key + // generation when there's a chance neither gmp nor OpenSSL are installed) + if (!defined('CRYPT_RSA_SMALLEST_PRIME')) { + define('CRYPT_RSA_SMALLEST_PRIME', 4096); + } + + // OpenSSL uses 65537 as the exponent and requires RSA keys be 384 bits minimum + if (CRYPT_RSA_MODE == self::MODE_OPENSSL && $bits >= 384 && CRYPT_RSA_EXPONENT == 65537) { + $config = array(); + if (isset($this->configFile)) { + $config['config'] = $this->configFile; + } + $rsa = openssl_pkey_new(array('private_key_bits' => $bits) + $config); + openssl_pkey_export($rsa, $privatekey, null, $config); + $publickey = openssl_pkey_get_details($rsa); + $publickey = $publickey['key']; + + $privatekey = call_user_func_array(array($this, '_convertPrivateKey'), array_values($this->_parseKey($privatekey, self::PRIVATE_FORMAT_PKCS1))); + $publickey = call_user_func_array(array($this, '_convertPublicKey'), array_values($this->_parseKey($publickey, self::PUBLIC_FORMAT_PKCS1))); + + // clear the buffer of error strings stemming from a minimalistic openssl.cnf + while (openssl_error_string() !== false) { + } + + return array( + 'privatekey' => $privatekey, + 'publickey' => $publickey, + 'partialkey' => false + ); + } + + static $e; + if (!isset($e)) { + $e = new BigInteger(CRYPT_RSA_EXPONENT); + } + + extract($this->_generateMinMax($bits)); + $absoluteMin = $min; + $temp = $bits >> 1; // divide by two to see how many bits P and Q would be + if ($temp > CRYPT_RSA_SMALLEST_PRIME) { + $num_primes = floor($bits / CRYPT_RSA_SMALLEST_PRIME); + $temp = CRYPT_RSA_SMALLEST_PRIME; + } else { + $num_primes = 2; + } + extract($this->_generateMinMax($temp + $bits % $temp)); + $finalMax = $max; + extract($this->_generateMinMax($temp)); + + $generator = new BigInteger(); + + $n = $this->one->copy(); + if (!empty($partial)) { + extract(unserialize($partial)); + } else { + $exponents = $coefficients = $primes = array(); + $lcm = array( + 'top' => $this->one->copy(), + 'bottom' => false + ); + } + + $start = time(); + $i0 = count($primes) + 1; + + do { + for ($i = $i0; $i <= $num_primes; $i++) { + if ($timeout !== false) { + $timeout-= time() - $start; + $start = time(); + if ($timeout <= 0) { + return array( + 'privatekey' => '', + 'publickey' => '', + 'partialkey' => serialize(array( + 'primes' => $primes, + 'coefficients' => $coefficients, + 'lcm' => $lcm, + 'exponents' => $exponents + )) + ); + } + } + + if ($i == $num_primes) { + list($min, $temp) = $absoluteMin->divide($n); + if (!$temp->equals($this->zero)) { + $min = $min->add($this->one); // ie. ceil() + } + $primes[$i] = $generator->randomPrime($min, $finalMax, $timeout); + } else { + $primes[$i] = $generator->randomPrime($min, $max, $timeout); + } + + if ($primes[$i] === false) { // if we've reached the timeout + if (count($primes) > 1) { + $partialkey = ''; + } else { + array_pop($primes); + $partialkey = serialize(array( + 'primes' => $primes, + 'coefficients' => $coefficients, + 'lcm' => $lcm, + 'exponents' => $exponents + )); + } + + return array( + 'privatekey' => '', + 'publickey' => '', + 'partialkey' => $partialkey + ); + } + + // the first coefficient is calculated differently from the rest + // ie. instead of being $primes[1]->modInverse($primes[2]), it's $primes[2]->modInverse($primes[1]) + if ($i > 2) { + $coefficients[$i] = $n->modInverse($primes[$i]); + } + + $n = $n->multiply($primes[$i]); + + $temp = $primes[$i]->subtract($this->one); + + // textbook RSA implementations use Euler's totient function instead of the least common multiple. + // see http://en.wikipedia.org/wiki/Euler%27s_totient_function + $lcm['top'] = $lcm['top']->multiply($temp); + $lcm['bottom'] = $lcm['bottom'] === false ? $temp : $lcm['bottom']->gcd($temp); + + $exponents[$i] = $e->modInverse($temp); + } + + list($temp) = $lcm['top']->divide($lcm['bottom']); + $gcd = $temp->gcd($e); + $i0 = 1; + } while (!$gcd->equals($this->one)); + + $d = $e->modInverse($temp); + + $coefficients[2] = $primes[2]->modInverse($primes[1]); + + // from : + // RSAPrivateKey ::= SEQUENCE { + // version Version, + // modulus INTEGER, -- n + // publicExponent INTEGER, -- e + // privateExponent INTEGER, -- d + // prime1 INTEGER, -- p + // prime2 INTEGER, -- q + // exponent1 INTEGER, -- d mod (p-1) + // exponent2 INTEGER, -- d mod (q-1) + // coefficient INTEGER, -- (inverse of q) mod p + // otherPrimeInfos OtherPrimeInfos OPTIONAL + // } + + return array( + 'privatekey' => $this->_convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients), + 'publickey' => $this->_convertPublicKey($n, $e), + 'partialkey' => false + ); + } + + /** + * Convert a private key to the appropriate format. + * + * @access private + * @see self::setPrivateKeyFormat() + * @param Math_BigInteger $n + * @param Math_BigInteger $e + * @param Math_BigInteger $d + * @param array $primes + * @param array $exponents + * @param array $coefficients + * @return string + */ + function _convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients) + { + $signed = $this->privateKeyFormat != self::PRIVATE_FORMAT_XML; + $num_primes = count($primes); + $raw = array( + 'version' => $num_primes == 2 ? chr(0) : chr(1), // two-prime vs. multi + 'modulus' => $n->toBytes($signed), + 'publicExponent' => $e->toBytes($signed), + 'privateExponent' => $d->toBytes($signed), + 'prime1' => $primes[1]->toBytes($signed), + 'prime2' => $primes[2]->toBytes($signed), + 'exponent1' => $exponents[1]->toBytes($signed), + 'exponent2' => $exponents[2]->toBytes($signed), + 'coefficient' => $coefficients[2]->toBytes($signed) + ); + + // if the format in question does not support multi-prime rsa and multi-prime rsa was used, + // call _convertPublicKey() instead. + switch ($this->privateKeyFormat) { + case self::PRIVATE_FORMAT_XML: + if ($num_primes != 2) { + return false; + } + return "\r\n" . + ' ' . base64_encode($raw['modulus']) . "\r\n" . + ' ' . base64_encode($raw['publicExponent']) . "\r\n" . + '

        ' . base64_encode($raw['prime1']) . "

        \r\n" . + ' ' . base64_encode($raw['prime2']) . "\r\n" . + ' ' . base64_encode($raw['exponent1']) . "\r\n" . + ' ' . base64_encode($raw['exponent2']) . "\r\n" . + ' ' . base64_encode($raw['coefficient']) . "\r\n" . + ' ' . base64_encode($raw['privateExponent']) . "\r\n" . + '
        '; + break; + case self::PRIVATE_FORMAT_PUTTY: + if ($num_primes != 2) { + return false; + } + $key = "PuTTY-User-Key-File-2: ssh-rsa\r\nEncryption: "; + $encryption = (!empty($this->password) || is_string($this->password)) ? 'aes256-cbc' : 'none'; + $key.= $encryption; + $key.= "\r\nComment: " . $this->comment . "\r\n"; + $public = pack( + 'Na*Na*Na*', + strlen('ssh-rsa'), + 'ssh-rsa', + strlen($raw['publicExponent']), + $raw['publicExponent'], + strlen($raw['modulus']), + $raw['modulus'] + ); + $source = pack( + 'Na*Na*Na*Na*', + strlen('ssh-rsa'), + 'ssh-rsa', + strlen($encryption), + $encryption, + strlen($this->comment), + $this->comment, + strlen($public), + $public + ); + $public = base64_encode($public); + $key.= "Public-Lines: " . ((strlen($public) + 63) >> 6) . "\r\n"; + $key.= chunk_split($public, 64); + $private = pack( + 'Na*Na*Na*Na*', + strlen($raw['privateExponent']), + $raw['privateExponent'], + strlen($raw['prime1']), + $raw['prime1'], + strlen($raw['prime2']), + $raw['prime2'], + strlen($raw['coefficient']), + $raw['coefficient'] + ); + if (empty($this->password) && !is_string($this->password)) { + $source.= pack('Na*', strlen($private), $private); + $hashkey = 'putty-private-key-file-mac-key'; + } else { + $private.= Random::string(16 - (strlen($private) & 15)); + $source.= pack('Na*', strlen($private), $private); + $sequence = 0; + $symkey = ''; + while (strlen($symkey) < 32) { + $temp = pack('Na*', $sequence++, $this->password); + $symkey.= pack('H*', sha1($temp)); + } + $symkey = substr($symkey, 0, 32); + $crypto = new AES(); + + $crypto->setKey($symkey); + $crypto->disablePadding(); + $private = $crypto->encrypt($private); + $hashkey = 'putty-private-key-file-mac-key' . $this->password; + } + + $private = base64_encode($private); + $key.= 'Private-Lines: ' . ((strlen($private) + 63) >> 6) . "\r\n"; + $key.= chunk_split($private, 64); + $hash = new Hash('sha1'); + $hash->setKey(pack('H*', sha1($hashkey))); + $key.= 'Private-MAC: ' . bin2hex($hash->hash($source)) . "\r\n"; + + return $key; + case self::PRIVATE_FORMAT_OPENSSH: + if ($num_primes != 2) { + return false; + } + $publicKey = pack('Na*Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($raw['publicExponent']), $raw['publicExponent'], strlen($raw['modulus']), $raw['modulus']); + $privateKey = pack( + 'Na*Na*Na*Na*Na*Na*Na*', + strlen('ssh-rsa'), + 'ssh-rsa', + strlen($raw['modulus']), + $raw['modulus'], + strlen($raw['publicExponent']), + $raw['publicExponent'], + strlen($raw['privateExponent']), + $raw['privateExponent'], + strlen($raw['coefficient']), + $raw['coefficient'], + strlen($raw['prime1']), + $raw['prime1'], + strlen($raw['prime2']), + $raw['prime2'] + ); + $checkint = Random::string(4); + $paddedKey = pack( + 'a*Na*', + $checkint . $checkint . $privateKey, + strlen($this->comment), + $this->comment + ); + $paddingLength = (7 * strlen($paddedKey)) % 8; + for ($i = 1; $i <= $paddingLength; $i++) { + $paddedKey.= chr($i); + } + $key = pack( + 'Na*Na*Na*NNa*Na*', + strlen('none'), + 'none', + strlen('none'), + 'none', + 0, + '', + 1, + strlen($publicKey), + $publicKey, + strlen($paddedKey), + $paddedKey + ); + $key = "openssh-key-v1\0$key"; + + return "-----BEGIN OPENSSH PRIVATE KEY-----\r\n" . + chunk_split(base64_encode($key), 70) . + "-----END OPENSSH PRIVATE KEY-----"; + default: // eg. self::PRIVATE_FORMAT_PKCS1 + $components = array(); + foreach ($raw as $name => $value) { + $components[$name] = pack('Ca*a*', self::ASN1_INTEGER, $this->_encodeLength(strlen($value)), $value); + } + + $RSAPrivateKey = implode('', $components); + + if ($num_primes > 2) { + $OtherPrimeInfos = ''; + for ($i = 3; $i <= $num_primes; $i++) { + // OtherPrimeInfos ::= SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo + // + // OtherPrimeInfo ::= SEQUENCE { + // prime INTEGER, -- ri + // exponent INTEGER, -- di + // coefficient INTEGER -- ti + // } + $OtherPrimeInfo = pack('Ca*a*', self::ASN1_INTEGER, $this->_encodeLength(strlen($primes[$i]->toBytes(true))), $primes[$i]->toBytes(true)); + $OtherPrimeInfo.= pack('Ca*a*', self::ASN1_INTEGER, $this->_encodeLength(strlen($exponents[$i]->toBytes(true))), $exponents[$i]->toBytes(true)); + $OtherPrimeInfo.= pack('Ca*a*', self::ASN1_INTEGER, $this->_encodeLength(strlen($coefficients[$i]->toBytes(true))), $coefficients[$i]->toBytes(true)); + $OtherPrimeInfos.= pack('Ca*a*', self::ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfo)), $OtherPrimeInfo); + } + $RSAPrivateKey.= pack('Ca*a*', self::ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfos)), $OtherPrimeInfos); + } + + $RSAPrivateKey = pack('Ca*a*', self::ASN1_SEQUENCE, $this->_encodeLength(strlen($RSAPrivateKey)), $RSAPrivateKey); + + if ($this->privateKeyFormat == self::PRIVATE_FORMAT_PKCS8) { + $rsaOID = pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA + $RSAPrivateKey = pack( + 'Ca*a*Ca*a*', + self::ASN1_INTEGER, + "\01\00", + $rsaOID, + 4, + $this->_encodeLength(strlen($RSAPrivateKey)), + $RSAPrivateKey + ); + $RSAPrivateKey = pack('Ca*a*', self::ASN1_SEQUENCE, $this->_encodeLength(strlen($RSAPrivateKey)), $RSAPrivateKey); + if (!empty($this->password) || is_string($this->password)) { + $salt = Random::string(8); + $iterationCount = 2048; + + $crypto = new DES(); + $crypto->setPassword($this->password, 'pbkdf1', 'md5', $salt, $iterationCount); + $RSAPrivateKey = $crypto->encrypt($RSAPrivateKey); + + $parameters = pack( + 'Ca*a*Ca*N', + self::ASN1_OCTETSTRING, + $this->_encodeLength(strlen($salt)), + $salt, + self::ASN1_INTEGER, + $this->_encodeLength(4), + $iterationCount + ); + $pbeWithMD5AndDES_CBC = "\x2a\x86\x48\x86\xf7\x0d\x01\x05\x03"; + + $encryptionAlgorithm = pack( + 'Ca*a*Ca*a*', + self::ASN1_OBJECT, + $this->_encodeLength(strlen($pbeWithMD5AndDES_CBC)), + $pbeWithMD5AndDES_CBC, + self::ASN1_SEQUENCE, + $this->_encodeLength(strlen($parameters)), + $parameters + ); + + $RSAPrivateKey = pack( + 'Ca*a*Ca*a*', + self::ASN1_SEQUENCE, + $this->_encodeLength(strlen($encryptionAlgorithm)), + $encryptionAlgorithm, + self::ASN1_OCTETSTRING, + $this->_encodeLength(strlen($RSAPrivateKey)), + $RSAPrivateKey + ); + + $RSAPrivateKey = pack('Ca*a*', self::ASN1_SEQUENCE, $this->_encodeLength(strlen($RSAPrivateKey)), $RSAPrivateKey); + + $RSAPrivateKey = "-----BEGIN ENCRYPTED PRIVATE KEY-----\r\n" . + chunk_split(base64_encode($RSAPrivateKey), 64) . + '-----END ENCRYPTED PRIVATE KEY-----'; + } else { + $RSAPrivateKey = "-----BEGIN PRIVATE KEY-----\r\n" . + chunk_split(base64_encode($RSAPrivateKey), 64) . + '-----END PRIVATE KEY-----'; + } + return $RSAPrivateKey; + } + + if (!empty($this->password) || is_string($this->password)) { + $iv = Random::string(8); + $symkey = pack('H*', md5($this->password . $iv)); // symkey is short for symmetric key + $symkey.= substr(pack('H*', md5($symkey . $this->password . $iv)), 0, 8); + $des = new TripleDES(); + $des->setKey($symkey); + $des->setIV($iv); + $iv = strtoupper(bin2hex($iv)); + $RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" . + "Proc-Type: 4,ENCRYPTED\r\n" . + "DEK-Info: DES-EDE3-CBC,$iv\r\n" . + "\r\n" . + chunk_split(base64_encode($des->encrypt($RSAPrivateKey)), 64) . + '-----END RSA PRIVATE KEY-----'; + } else { + $RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" . + chunk_split(base64_encode($RSAPrivateKey), 64) . + '-----END RSA PRIVATE KEY-----'; + } + + return $RSAPrivateKey; + } + } + + /** + * Convert a public key to the appropriate format + * + * @access private + * @see self::setPublicKeyFormat() + * @param Math_BigInteger $n + * @param Math_BigInteger $e + * @return string|array + */ + function _convertPublicKey($n, $e) + { + $signed = $this->publicKeyFormat != self::PUBLIC_FORMAT_XML; + + $modulus = $n->toBytes($signed); + $publicExponent = $e->toBytes($signed); + + switch ($this->publicKeyFormat) { + case self::PUBLIC_FORMAT_RAW: + return array('e' => $e->copy(), 'n' => $n->copy()); + case self::PUBLIC_FORMAT_XML: + return "\r\n" . + ' ' . base64_encode($modulus) . "\r\n" . + ' ' . base64_encode($publicExponent) . "\r\n" . + ''; + break; + case self::PUBLIC_FORMAT_OPENSSH: + // from : + // string "ssh-rsa" + // mpint e + // mpint n + $RSAPublicKey = pack('Na*Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publicExponent), $publicExponent, strlen($modulus), $modulus); + $RSAPublicKey = 'ssh-rsa ' . base64_encode($RSAPublicKey) . ' ' . $this->comment; + + return $RSAPublicKey; + default: // eg. self::PUBLIC_FORMAT_PKCS1_RAW or self::PUBLIC_FORMAT_PKCS1 + // from : + // RSAPublicKey ::= SEQUENCE { + // modulus INTEGER, -- n + // publicExponent INTEGER -- e + // } + $components = array( + 'modulus' => pack('Ca*a*', self::ASN1_INTEGER, $this->_encodeLength(strlen($modulus)), $modulus), + 'publicExponent' => pack('Ca*a*', self::ASN1_INTEGER, $this->_encodeLength(strlen($publicExponent)), $publicExponent) + ); + + $RSAPublicKey = pack( + 'Ca*a*a*', + self::ASN1_SEQUENCE, + $this->_encodeLength(strlen($components['modulus']) + strlen($components['publicExponent'])), + $components['modulus'], + $components['publicExponent'] + ); + + if ($this->publicKeyFormat == self::PUBLIC_FORMAT_PKCS1_RAW) { + $RSAPublicKey = "-----BEGIN RSA PUBLIC KEY-----\r\n" . + chunk_split(base64_encode($RSAPublicKey), 64) . + '-----END RSA PUBLIC KEY-----'; + } else { + // sequence(oid(1.2.840.113549.1.1.1), null)) = rsaEncryption. + $rsaOID = pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA + $RSAPublicKey = chr(0) . $RSAPublicKey; + $RSAPublicKey = chr(3) . $this->_encodeLength(strlen($RSAPublicKey)) . $RSAPublicKey; + + $RSAPublicKey = pack( + 'Ca*a*', + self::ASN1_SEQUENCE, + $this->_encodeLength(strlen($rsaOID . $RSAPublicKey)), + $rsaOID . $RSAPublicKey + ); + + $RSAPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" . + chunk_split(base64_encode($RSAPublicKey), 64) . + '-----END PUBLIC KEY-----'; + } + + return $RSAPublicKey; + } + } + + /** + * Break a public or private key down into its constituant components + * + * @access private + * @see self::_convertPublicKey() + * @see self::_convertPrivateKey() + * @param string|array $key + * @param int $type + * @return array|bool + */ + function _parseKey($key, $type) + { + if ($type != self::PUBLIC_FORMAT_RAW && !is_string($key)) { + return false; + } + + switch ($type) { + case self::PUBLIC_FORMAT_RAW: + if (!is_array($key)) { + return false; + } + $components = array(); + switch (true) { + case isset($key['e']): + $components['publicExponent'] = $key['e']->copy(); + break; + case isset($key['exponent']): + $components['publicExponent'] = $key['exponent']->copy(); + break; + case isset($key['publicExponent']): + $components['publicExponent'] = $key['publicExponent']->copy(); + break; + case isset($key[0]): + $components['publicExponent'] = $key[0]->copy(); + } + switch (true) { + case isset($key['n']): + $components['modulus'] = $key['n']->copy(); + break; + case isset($key['modulo']): + $components['modulus'] = $key['modulo']->copy(); + break; + case isset($key['modulus']): + $components['modulus'] = $key['modulus']->copy(); + break; + case isset($key[1]): + $components['modulus'] = $key[1]->copy(); + } + return isset($components['modulus']) && isset($components['publicExponent']) ? $components : false; + case self::PRIVATE_FORMAT_PKCS1: + case self::PRIVATE_FORMAT_PKCS8: + case self::PUBLIC_FORMAT_PKCS1: + /* Although PKCS#1 proposes a format that public and private keys can use, encrypting them is + "outside the scope" of PKCS#1. PKCS#1 then refers you to PKCS#12 and PKCS#15 if you're wanting to + protect private keys, however, that's not what OpenSSL* does. OpenSSL protects private keys by adding + two new "fields" to the key - DEK-Info and Proc-Type. These fields are discussed here: + + http://tools.ietf.org/html/rfc1421#section-4.6.1.1 + http://tools.ietf.org/html/rfc1421#section-4.6.1.3 + + DES-EDE3-CBC as an algorithm, however, is not discussed anywhere, near as I can tell. + DES-CBC and DES-EDE are discussed in RFC1423, however, DES-EDE3-CBC isn't, nor is its key derivation + function. As is, the definitive authority on this encoding scheme isn't the IETF but rather OpenSSL's + own implementation. ie. the implementation *is* the standard and any bugs that may exist in that + implementation are part of the standard, as well. + + * OpenSSL is the de facto standard. It's utilized by OpenSSH and other projects */ + if (preg_match('#DEK-Info: (.+),(.+)#', $key, $matches)) { + $iv = pack('H*', trim($matches[2])); + $symkey = pack('H*', md5($this->password . substr($iv, 0, 8))); // symkey is short for symmetric key + $symkey.= pack('H*', md5($symkey . $this->password . substr($iv, 0, 8))); + // remove the Proc-Type / DEK-Info sections as they're no longer needed + $key = preg_replace('#^(?:Proc-Type|DEK-Info): .*#m', '', $key); + $ciphertext = $this->_extractBER($key); + if ($ciphertext === false) { + $ciphertext = $key; + } + switch ($matches[1]) { + case 'AES-256-CBC': + $crypto = new AES(); + break; + case 'AES-128-CBC': + $symkey = substr($symkey, 0, 16); + $crypto = new AES(); + break; + case 'DES-EDE3-CFB': + $crypto = new TripleDES(Base::MODE_CFB); + break; + case 'DES-EDE3-CBC': + $symkey = substr($symkey, 0, 24); + $crypto = new TripleDES(); + break; + case 'DES-CBC': + $crypto = new DES(); + break; + default: + return false; + } + $crypto->setKey($symkey); + $crypto->setIV($iv); + $decoded = $crypto->decrypt($ciphertext); + } else { + $decoded = $this->_extractBER($key); + } + + if ($decoded !== false) { + $key = $decoded; + } + + $components = array(); + + if (ord($this->_string_shift($key)) != self::ASN1_SEQUENCE) { + return false; + } + if ($this->_decodeLength($key) != strlen($key)) { + return false; + } + + $tag = ord($this->_string_shift($key)); + /* intended for keys for which OpenSSL's asn1parse returns the following: + + 0:d=0 hl=4 l= 631 cons: SEQUENCE + 4:d=1 hl=2 l= 1 prim: INTEGER :00 + 7:d=1 hl=2 l= 13 cons: SEQUENCE + 9:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 20:d=2 hl=2 l= 0 prim: NULL + 22:d=1 hl=4 l= 609 prim: OCTET STRING + + ie. PKCS8 keys*/ + + if ($tag == self::ASN1_INTEGER && substr($key, 0, 3) == "\x01\x00\x30") { + $this->_string_shift($key, 3); + $tag = self::ASN1_SEQUENCE; + } + + if ($tag == self::ASN1_SEQUENCE) { + $temp = $this->_string_shift($key, $this->_decodeLength($key)); + if (ord($this->_string_shift($temp)) != self::ASN1_OBJECT) { + return false; + } + $length = $this->_decodeLength($temp); + switch ($this->_string_shift($temp, $length)) { + case "\x2a\x86\x48\x86\xf7\x0d\x01\x01\x01": // rsaEncryption + break; + case "\x2a\x86\x48\x86\xf7\x0d\x01\x05\x03": // pbeWithMD5AndDES-CBC + /* + PBEParameter ::= SEQUENCE { + salt OCTET STRING (SIZE(8)), + iterationCount INTEGER } + */ + if (ord($this->_string_shift($temp)) != self::ASN1_SEQUENCE) { + return false; + } + if ($this->_decodeLength($temp) != strlen($temp)) { + return false; + } + $this->_string_shift($temp); // assume it's an octet string + $salt = $this->_string_shift($temp, $this->_decodeLength($temp)); + if (ord($this->_string_shift($temp)) != self::ASN1_INTEGER) { + return false; + } + $this->_decodeLength($temp); + list(, $iterationCount) = unpack('N', str_pad($temp, 4, chr(0), STR_PAD_LEFT)); + $this->_string_shift($key); // assume it's an octet string + $length = $this->_decodeLength($key); + if (strlen($key) != $length) { + return false; + } + + $crypto = new DES(); + $crypto->setPassword($this->password, 'pbkdf1', 'md5', $salt, $iterationCount); + $key = $crypto->decrypt($key); + if ($key === false) { + return false; + } + return $this->_parseKey($key, self::PRIVATE_FORMAT_PKCS1); + default: + return false; + } + /* intended for keys for which OpenSSL's asn1parse returns the following: + + 0:d=0 hl=4 l= 290 cons: SEQUENCE + 4:d=1 hl=2 l= 13 cons: SEQUENCE + 6:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption + 17:d=2 hl=2 l= 0 prim: NULL + 19:d=1 hl=4 l= 271 prim: BIT STRING */ + $tag = ord($this->_string_shift($key)); // skip over the BIT STRING / OCTET STRING tag + $this->_decodeLength($key); // skip over the BIT STRING / OCTET STRING length + // "The initial octet shall encode, as an unsigned binary integer wtih bit 1 as the least significant bit, the number of + // unused bits in the final subsequent octet. The number shall be in the range zero to seven." + // -- http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf (section 8.6.2.2) + if ($tag == self::ASN1_BITSTRING) { + $this->_string_shift($key); + } + if (ord($this->_string_shift($key)) != self::ASN1_SEQUENCE) { + return false; + } + if ($this->_decodeLength($key) != strlen($key)) { + return false; + } + $tag = ord($this->_string_shift($key)); + } + if ($tag != self::ASN1_INTEGER) { + return false; + } + + $length = $this->_decodeLength($key); + $temp = $this->_string_shift($key, $length); + if (strlen($temp) != 1 || ord($temp) > 2) { + $components['modulus'] = new BigInteger($temp, 256); + $this->_string_shift($key); // skip over self::ASN1_INTEGER + $length = $this->_decodeLength($key); + $components[$type == self::PUBLIC_FORMAT_PKCS1 ? 'publicExponent' : 'privateExponent'] = new BigInteger($this->_string_shift($key, $length), 256); + + return $components; + } + if (ord($this->_string_shift($key)) != self::ASN1_INTEGER) { + return false; + } + $length = $this->_decodeLength($key); + $components['modulus'] = new BigInteger($this->_string_shift($key, $length), 256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['publicExponent'] = new BigInteger($this->_string_shift($key, $length), 256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['privateExponent'] = new BigInteger($this->_string_shift($key, $length), 256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['primes'] = array(1 => new BigInteger($this->_string_shift($key, $length), 256)); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['primes'][] = new BigInteger($this->_string_shift($key, $length), 256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['exponents'] = array(1 => new BigInteger($this->_string_shift($key, $length), 256)); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['exponents'][] = new BigInteger($this->_string_shift($key, $length), 256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['coefficients'] = array(2 => new BigInteger($this->_string_shift($key, $length), 256)); + + if (!empty($key)) { + if (ord($this->_string_shift($key)) != self::ASN1_SEQUENCE) { + return false; + } + $this->_decodeLength($key); + while (!empty($key)) { + if (ord($this->_string_shift($key)) != self::ASN1_SEQUENCE) { + return false; + } + $this->_decodeLength($key); + $key = substr($key, 1); + $length = $this->_decodeLength($key); + $components['primes'][] = new BigInteger($this->_string_shift($key, $length), 256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['exponents'][] = new BigInteger($this->_string_shift($key, $length), 256); + $this->_string_shift($key); + $length = $this->_decodeLength($key); + $components['coefficients'][] = new BigInteger($this->_string_shift($key, $length), 256); + } + } + + return $components; + case self::PUBLIC_FORMAT_OPENSSH: + $parts = explode(' ', $key, 3); + + $key = isset($parts[1]) ? base64_decode($parts[1]) : false; + if ($key === false) { + return false; + } + + $comment = isset($parts[2]) ? $parts[2] : false; + + $cleanup = substr($key, 0, 11) == "\0\0\0\7ssh-rsa"; + + if (strlen($key) <= 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($key, 4))); + $publicExponent = new BigInteger($this->_string_shift($key, $length), -256); + if (strlen($key) <= 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($key, 4))); + $modulus = new BigInteger($this->_string_shift($key, $length), -256); + + if ($cleanup && strlen($key)) { + if (strlen($key) <= 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($key, 4))); + $realModulus = new BigInteger($this->_string_shift($key, $length), -256); + return strlen($key) ? false : array( + 'modulus' => $realModulus, + 'publicExponent' => $modulus, + 'comment' => $comment + ); + } else { + return strlen($key) ? false : array( + 'modulus' => $modulus, + 'publicExponent' => $publicExponent, + 'comment' => $comment + ); + } + // http://www.w3.org/TR/xmldsig-core/#sec-RSAKeyValue + // http://en.wikipedia.org/wiki/XML_Signature + case self::PRIVATE_FORMAT_XML: + case self::PUBLIC_FORMAT_XML: + $this->components = array(); + + $xml = xml_parser_create('UTF-8'); + xml_set_object($xml, $this); + xml_set_element_handler($xml, '_start_element_handler', '_stop_element_handler'); + xml_set_character_data_handler($xml, '_data_handler'); + // add to account for "dangling" tags like ... that are sometimes added + if (!xml_parse($xml, '' . $key . '')) { + xml_parser_free($xml); + unset($xml); + return false; + } + + xml_parser_free($xml); + unset($xml); + + return isset($this->components['modulus']) && isset($this->components['publicExponent']) ? $this->components : false; + // from PuTTY's SSHPUBK.C + case self::PRIVATE_FORMAT_PUTTY: + $components = array(); + $key = preg_split('#\r\n|\r|\n#', $key); + $type = trim(preg_replace('#PuTTY-User-Key-File-2: (.+)#', '$1', $key[0])); + if ($type != 'ssh-rsa') { + return false; + } + $encryption = trim(preg_replace('#Encryption: (.+)#', '$1', $key[1])); + $comment = trim(preg_replace('#Comment: (.+)#', '$1', $key[2])); + + $publicLength = trim(preg_replace('#Public-Lines: (\d+)#', '$1', $key[3])); + $public = base64_decode(implode('', array_map('trim', array_slice($key, 4, $publicLength)))); + $public = substr($public, 11); + extract(unpack('Nlength', $this->_string_shift($public, 4))); + $components['publicExponent'] = new BigInteger($this->_string_shift($public, $length), -256); + extract(unpack('Nlength', $this->_string_shift($public, 4))); + $components['modulus'] = new BigInteger($this->_string_shift($public, $length), -256); + + $privateLength = trim(preg_replace('#Private-Lines: (\d+)#', '$1', $key[$publicLength + 4])); + $private = base64_decode(implode('', array_map('trim', array_slice($key, $publicLength + 5, $privateLength)))); + + switch ($encryption) { + case 'aes256-cbc': + $symkey = ''; + $sequence = 0; + while (strlen($symkey) < 32) { + $temp = pack('Na*', $sequence++, $this->password); + $symkey.= pack('H*', sha1($temp)); + } + $symkey = substr($symkey, 0, 32); + $crypto = new AES(); + } + + if ($encryption != 'none') { + $crypto->setKey($symkey); + $crypto->disablePadding(); + $private = $crypto->decrypt($private); + if ($private === false) { + return false; + } + } + + extract(unpack('Nlength', $this->_string_shift($private, 4))); + if (strlen($private) < $length) { + return false; + } + $components['privateExponent'] = new BigInteger($this->_string_shift($private, $length), -256); + extract(unpack('Nlength', $this->_string_shift($private, 4))); + if (strlen($private) < $length) { + return false; + } + $components['primes'] = array(1 => new BigInteger($this->_string_shift($private, $length), -256)); + extract(unpack('Nlength', $this->_string_shift($private, 4))); + if (strlen($private) < $length) { + return false; + } + $components['primes'][] = new BigInteger($this->_string_shift($private, $length), -256); + + $temp = $components['primes'][1]->subtract($this->one); + $components['exponents'] = array(1 => $components['publicExponent']->modInverse($temp)); + $temp = $components['primes'][2]->subtract($this->one); + $components['exponents'][] = $components['publicExponent']->modInverse($temp); + + extract(unpack('Nlength', $this->_string_shift($private, 4))); + if (strlen($private) < $length) { + return false; + } + $components['coefficients'] = array(2 => new BigInteger($this->_string_shift($private, $length), -256)); + + return $components; + case self::PRIVATE_FORMAT_OPENSSH: + $components = array(); + $decoded = $this->_extractBER($key); + $magic = $this->_string_shift($decoded, 15); + if ($magic !== "openssh-key-v1\0") { + return false; + } + $options = $this->_string_shift($decoded, 24); + // \0\0\0\4none = ciphername + // \0\0\0\4none = kdfname + // \0\0\0\0 = kdfoptions + // \0\0\0\1 = numkeys + if ($options != "\0\0\0\4none\0\0\0\4none\0\0\0\0\0\0\0\1") { + return false; + } + extract(unpack('Nlength', $this->_string_shift($decoded, 4))); + if (strlen($decoded) < $length) { + return false; + } + $publicKey = $this->_string_shift($decoded, $length); + extract(unpack('Nlength', $this->_string_shift($decoded, 4))); + if (strlen($decoded) < $length) { + return false; + } + $paddedKey = $this->_string_shift($decoded, $length); + + if ($this->_string_shift($publicKey, 11) !== "\0\0\0\7ssh-rsa") { + return false; + } + + $checkint1 = $this->_string_shift($paddedKey, 4); + $checkint2 = $this->_string_shift($paddedKey, 4); + if (strlen($checkint1) != 4 || $checkint1 !== $checkint2) { + return false; + } + + if ($this->_string_shift($paddedKey, 11) !== "\0\0\0\7ssh-rsa") { + return false; + } + + $values = array( + &$components['modulus'], + &$components['publicExponent'], + &$components['privateExponent'], + &$components['coefficients'][2], + &$components['primes'][1], + &$components['primes'][2] + ); + + foreach ($values as &$value) { + extract(unpack('Nlength', $this->_string_shift($paddedKey, 4))); + if (strlen($paddedKey) < $length) { + return false; + } + $value = new BigInteger($this->_string_shift($paddedKey, $length), -256); + } + + extract(unpack('Nlength', $this->_string_shift($paddedKey, 4))); + if (strlen($paddedKey) < $length) { + return false; + } + $components['comment'] = $this->_string_shift($decoded, $length); + + $temp = $components['primes'][1]->subtract($this->one); + $components['exponents'] = array(1 => $components['publicExponent']->modInverse($temp)); + $temp = $components['primes'][2]->subtract($this->one); + $components['exponents'][] = $components['publicExponent']->modInverse($temp); + + return $components; + } + + return false; + } + + /** + * Returns the key size + * + * More specifically, this returns the size of the modulo in bits. + * + * @access public + * @return int + */ + function getSize() + { + return !isset($this->modulus) ? 0 : strlen($this->modulus->toBits()); + } + + /** + * Start Element Handler + * + * Called by xml_set_element_handler() + * + * @access private + * @param resource $parser + * @param string $name + * @param array $attribs + */ + function _start_element_handler($parser, $name, $attribs) + { + //$name = strtoupper($name); + switch ($name) { + case 'MODULUS': + $this->current = &$this->components['modulus']; + break; + case 'EXPONENT': + $this->current = &$this->components['publicExponent']; + break; + case 'P': + $this->current = &$this->components['primes'][1]; + break; + case 'Q': + $this->current = &$this->components['primes'][2]; + break; + case 'DP': + $this->current = &$this->components['exponents'][1]; + break; + case 'DQ': + $this->current = &$this->components['exponents'][2]; + break; + case 'INVERSEQ': + $this->current = &$this->components['coefficients'][2]; + break; + case 'D': + $this->current = &$this->components['privateExponent']; + } + $this->current = ''; + } + + /** + * Stop Element Handler + * + * Called by xml_set_element_handler() + * + * @access private + * @param resource $parser + * @param string $name + */ + function _stop_element_handler($parser, $name) + { + if (isset($this->current)) { + $this->current = new BigInteger(base64_decode($this->current), 256); + unset($this->current); + } + } + + /** + * Data Handler + * + * Called by xml_set_character_data_handler() + * + * @access private + * @param resource $parser + * @param string $data + */ + function _data_handler($parser, $data) + { + if (!isset($this->current) || is_object($this->current)) { + return; + } + $this->current.= trim($data); + } + + /** + * Loads a public or private key + * + * Returns true on success and false on failure (ie. an incorrect password was provided or the key was malformed) + * + * @access public + * @param string|RSA|array $key + * @param bool|int $type optional + * @return bool + */ + function loadKey($key, $type = false) + { + if ($key instanceof RSA) { + $this->privateKeyFormat = $key->privateKeyFormat; + $this->publicKeyFormat = $key->publicKeyFormat; + $this->k = $key->k; + $this->hLen = $key->hLen; + $this->sLen = $key->sLen; + $this->mgfHLen = $key->mgfHLen; + $this->encryptionMode = $key->encryptionMode; + $this->signatureMode = $key->signatureMode; + $this->password = $key->password; + $this->configFile = $key->configFile; + $this->comment = $key->comment; + + if (is_object($key->hash)) { + $this->hash = new Hash($key->hash->getHash()); + } + if (is_object($key->mgfHash)) { + $this->mgfHash = new Hash($key->mgfHash->getHash()); + } + + if (is_object($key->modulus)) { + $this->modulus = $key->modulus->copy(); + } + if (is_object($key->exponent)) { + $this->exponent = $key->exponent->copy(); + } + if (is_object($key->publicExponent)) { + $this->publicExponent = $key->publicExponent->copy(); + } + + $this->primes = array(); + $this->exponents = array(); + $this->coefficients = array(); + + foreach ($this->primes as $prime) { + $this->primes[] = $prime->copy(); + } + foreach ($this->exponents as $exponent) { + $this->exponents[] = $exponent->copy(); + } + foreach ($this->coefficients as $coefficient) { + $this->coefficients[] = $coefficient->copy(); + } + + return true; + } + + if ($type === false) { + $types = array( + self::PUBLIC_FORMAT_RAW, + self::PRIVATE_FORMAT_PKCS1, + self::PRIVATE_FORMAT_XML, + self::PRIVATE_FORMAT_PUTTY, + self::PUBLIC_FORMAT_OPENSSH, + self::PRIVATE_FORMAT_OPENSSH + ); + foreach ($types as $type) { + $components = $this->_parseKey($key, $type); + if ($components !== false) { + break; + } + } + } else { + $components = $this->_parseKey($key, $type); + } + + if ($components === false) { + $this->comment = null; + $this->modulus = null; + $this->k = null; + $this->exponent = null; + $this->primes = null; + $this->exponents = null; + $this->coefficients = null; + $this->publicExponent = null; + + return false; + } + + if (isset($components['comment']) && $components['comment'] !== false) { + $this->comment = $components['comment']; + } + $this->modulus = $components['modulus']; + $this->k = strlen($this->modulus->toBytes()); + $this->exponent = isset($components['privateExponent']) ? $components['privateExponent'] : $components['publicExponent']; + if (isset($components['primes'])) { + $this->primes = $components['primes']; + $this->exponents = $components['exponents']; + $this->coefficients = $components['coefficients']; + $this->publicExponent = $components['publicExponent']; + } else { + $this->primes = array(); + $this->exponents = array(); + $this->coefficients = array(); + $this->publicExponent = false; + } + + switch ($type) { + case self::PUBLIC_FORMAT_OPENSSH: + case self::PUBLIC_FORMAT_RAW: + $this->setPublicKey(); + break; + case self::PRIVATE_FORMAT_PKCS1: + switch (true) { + case strpos($key, '-BEGIN PUBLIC KEY-') !== false: + case strpos($key, '-BEGIN RSA PUBLIC KEY-') !== false: + $this->setPublicKey(); + } + } + + return true; + } + + /** + * Sets the password + * + * Private keys can be encrypted with a password. To unset the password, pass in the empty string or false. + * Or rather, pass in $password such that empty($password) && !is_string($password) is true. + * + * @see self::createKey() + * @see self::loadKey() + * @access public + * @param string $password + */ + function setPassword($password = false) + { + $this->password = $password; + } + + /** + * Defines the public key + * + * Some private key formats define the public exponent and some don't. Those that don't define it are problematic when + * used in certain contexts. For example, in SSH-2, RSA authentication works by sending the public key along with a + * message signed by the private key to the server. The SSH-2 server looks the public key up in an index of public keys + * and if it's present then proceeds to verify the signature. Problem is, if your private key doesn't include the public + * exponent this won't work unless you manually add the public exponent. phpseclib tries to guess if the key being used + * is the public key but in the event that it guesses incorrectly you might still want to explicitly set the key as being + * public. + * + * Do note that when a new key is loaded the index will be cleared. + * + * Returns true on success, false on failure + * + * @see self::getPublicKey() + * @access public + * @param string $key optional + * @param int $type optional + * @return bool + */ + function setPublicKey($key = false, $type = false) + { + // if a public key has already been loaded return false + if (!empty($this->publicExponent)) { + return false; + } + + if ($key === false && !empty($this->modulus)) { + $this->publicExponent = $this->exponent; + return true; + } + + if ($type === false) { + $types = array( + self::PUBLIC_FORMAT_RAW, + self::PUBLIC_FORMAT_PKCS1, + self::PUBLIC_FORMAT_XML, + self::PUBLIC_FORMAT_OPENSSH + ); + foreach ($types as $type) { + $components = $this->_parseKey($key, $type); + if ($components !== false) { + break; + } + } + } else { + $components = $this->_parseKey($key, $type); + } + + if ($components === false) { + return false; + } + + if (empty($this->modulus) || !$this->modulus->equals($components['modulus'])) { + $this->modulus = $components['modulus']; + $this->exponent = $this->publicExponent = $components['publicExponent']; + return true; + } + + $this->publicExponent = $components['publicExponent']; + + return true; + } + + /** + * Defines the private key + * + * If phpseclib guessed a private key was a public key and loaded it as such it might be desirable to force + * phpseclib to treat the key as a private key. This function will do that. + * + * Do note that when a new key is loaded the index will be cleared. + * + * Returns true on success, false on failure + * + * @see self::getPublicKey() + * @access public + * @param string $key optional + * @param int $type optional + * @return bool + */ + function setPrivateKey($key = false, $type = false) + { + if ($key === false && !empty($this->publicExponent)) { + $this->publicExponent = false; + return true; + } + + $rsa = new RSA(); + if (!$rsa->loadKey($key, $type)) { + return false; + } + $rsa->publicExponent = false; + + // don't overwrite the old key if the new key is invalid + $this->loadKey($rsa); + return true; + } + + /** + * Returns the public key + * + * The public key is only returned under two circumstances - if the private key had the public key embedded within it + * or if the public key was set via setPublicKey(). If the currently loaded key is supposed to be the public key this + * function won't return it since this library, for the most part, doesn't distinguish between public and private keys. + * + * @see self::getPublicKey() + * @access public + * @param int $type optional + */ + function getPublicKey($type = self::PUBLIC_FORMAT_PKCS8) + { + if (empty($this->modulus) || empty($this->publicExponent)) { + return false; + } + + $oldFormat = $this->publicKeyFormat; + $this->publicKeyFormat = $type; + $temp = $this->_convertPublicKey($this->modulus, $this->publicExponent); + $this->publicKeyFormat = $oldFormat; + return $temp; + } + + /** + * Returns the public key's fingerprint + * + * The public key's fingerprint is returned, which is equivalent to running `ssh-keygen -lf rsa.pub`. If there is + * no public key currently loaded, false is returned. + * Example output (md5): "c1:b1:30:29:d7:b8:de:6c:97:77:10:d7:46:41:63:87" (as specified by RFC 4716) + * + * @access public + * @param string $algorithm The hashing algorithm to be used. Valid options are 'md5' and 'sha256'. False is returned + * for invalid values. + * @return mixed + */ + function getPublicKeyFingerprint($algorithm = 'md5') + { + if (empty($this->modulus) || empty($this->publicExponent)) { + return false; + } + + $modulus = $this->modulus->toBytes(true); + $publicExponent = $this->publicExponent->toBytes(true); + + $RSAPublicKey = pack('Na*Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publicExponent), $publicExponent, strlen($modulus), $modulus); + + switch ($algorithm) { + case 'sha256': + $hash = new Hash('sha256'); + $base = base64_encode($hash->hash($RSAPublicKey)); + return substr($base, 0, strlen($base) - 1); + case 'md5': + return substr(chunk_split(md5($RSAPublicKey), 2, ':'), 0, -1); + default: + return false; + } + } + + /** + * Returns the private key + * + * The private key is only returned if the currently loaded key contains the constituent prime numbers. + * + * @see self::getPublicKey() + * @access public + * @param int $type optional + * @return mixed + */ + function getPrivateKey($type = self::PUBLIC_FORMAT_PKCS1) + { + if (empty($this->primes)) { + return false; + } + + $oldFormat = $this->privateKeyFormat; + $this->privateKeyFormat = $type; + $temp = $this->_convertPrivateKey($this->modulus, $this->publicExponent, $this->exponent, $this->primes, $this->exponents, $this->coefficients); + $this->privateKeyFormat = $oldFormat; + return $temp; + } + + /** + * Returns a minimalistic private key + * + * Returns the private key without the prime number constituants. Structurally identical to a public key that + * hasn't been set as the public key + * + * @see self::getPrivateKey() + * @access private + * @param int $mode optional + */ + function _getPrivatePublicKey($mode = self::PUBLIC_FORMAT_PKCS8) + { + if (empty($this->modulus) || empty($this->exponent)) { + return false; + } + + $oldFormat = $this->publicKeyFormat; + $this->publicKeyFormat = $mode; + $temp = $this->_convertPublicKey($this->modulus, $this->exponent); + $this->publicKeyFormat = $oldFormat; + return $temp; + } + + /** + * __toString() magic method + * + * @access public + * @return string + */ + function __toString() + { + $key = $this->getPrivateKey($this->privateKeyFormat); + if ($key !== false) { + return $key; + } + $key = $this->_getPrivatePublicKey($this->publicKeyFormat); + return $key !== false ? $key : ''; + } + + /** + * __clone() magic method + * + * @access public + * @return Crypt_RSA + */ + function __clone() + { + $key = new RSA(); + $key->loadKey($this); + return $key; + } + + /** + * Generates the smallest and largest numbers requiring $bits bits + * + * @access private + * @param int $bits + * @return array + */ + function _generateMinMax($bits) + { + $bytes = $bits >> 3; + $min = str_repeat(chr(0), $bytes); + $max = str_repeat(chr(0xFF), $bytes); + $msb = $bits & 7; + if ($msb) { + $min = chr(1 << ($msb - 1)) . $min; + $max = chr((1 << $msb) - 1) . $max; + } else { + $min[0] = chr(0x80); + } + + return array( + 'min' => new BigInteger($min, 256), + 'max' => new BigInteger($max, 256) + ); + } + + /** + * DER-decode the length + * + * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See + * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information. + * + * @access private + * @param string $string + * @return int + */ + function _decodeLength(&$string) + { + $length = ord($this->_string_shift($string)); + if ($length & 0x80) { // definite length, long form + $length&= 0x7F; + $temp = $this->_string_shift($string, $length); + list(, $length) = unpack('N', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4)); + } + return $length; + } + + /** + * DER-encode the length + * + * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See + * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information. + * + * @access private + * @param int $length + * @return string + */ + function _encodeLength($length) + { + if ($length <= 0x7F) { + return chr($length); + } + + $temp = ltrim(pack('N', $length), chr(0)); + return pack('Ca*', 0x80 | strlen($temp), $temp); + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param string $string + * @param int $index + * @return string + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } + + /** + * Determines the private key format + * + * @see self::createKey() + * @access public + * @param int $format + */ + function setPrivateKeyFormat($format) + { + $this->privateKeyFormat = $format; + } + + /** + * Determines the public key format + * + * @see self::createKey() + * @access public + * @param int $format + */ + function setPublicKeyFormat($format) + { + $this->publicKeyFormat = $format; + } + + /** + * Determines which hashing function should be used + * + * Used with signature production / verification and (if the encryption mode is self::ENCRYPTION_OAEP) encryption and + * decryption. If $hash isn't supported, sha1 is used. + * + * @access public + * @param string $hash + */ + function setHash($hash) + { + // \phpseclib\Crypt\Hash supports algorithms that PKCS#1 doesn't support. md5-96 and sha1-96, for example. + switch ($hash) { + case 'md2': + case 'md5': + case 'sha1': + case 'sha256': + case 'sha384': + case 'sha512': + $this->hash = new Hash($hash); + $this->hashName = $hash; + break; + default: + $this->hash = new Hash('sha1'); + $this->hashName = 'sha1'; + } + $this->hLen = $this->hash->getLength(); + } + + /** + * Determines which hashing function should be used for the mask generation function + * + * The mask generation function is used by self::ENCRYPTION_OAEP and self::SIGNATURE_PSS and although it's + * best if Hash and MGFHash are set to the same thing this is not a requirement. + * + * @access public + * @param string $hash + */ + function setMGFHash($hash) + { + // \phpseclib\Crypt\Hash supports algorithms that PKCS#1 doesn't support. md5-96 and sha1-96, for example. + switch ($hash) { + case 'md2': + case 'md5': + case 'sha1': + case 'sha256': + case 'sha384': + case 'sha512': + $this->mgfHash = new Hash($hash); + break; + default: + $this->mgfHash = new Hash('sha1'); + } + $this->mgfHLen = $this->mgfHash->getLength(); + } + + /** + * Determines the salt length + * + * To quote from {@link http://tools.ietf.org/html/rfc3447#page-38 RFC3447#page-38}: + * + * Typical salt lengths in octets are hLen (the length of the output + * of the hash function Hash) and 0. + * + * @access public + * @param int $sLen + */ + function setSaltLength($sLen) + { + $this->sLen = $sLen; + } + + /** + * Integer-to-Octet-String primitive + * + * See {@link http://tools.ietf.org/html/rfc3447#section-4.1 RFC3447#section-4.1}. + * + * @access private + * @param \phpseclib\Math\BigInteger $x + * @param int $xLen + * @return string + */ + function _i2osp($x, $xLen) + { + $x = $x->toBytes(); + if (strlen($x) > $xLen) { + user_error('Integer too large'); + return false; + } + return str_pad($x, $xLen, chr(0), STR_PAD_LEFT); + } + + /** + * Octet-String-to-Integer primitive + * + * See {@link http://tools.ietf.org/html/rfc3447#section-4.2 RFC3447#section-4.2}. + * + * @access private + * @param int|string|resource $x + * @return \phpseclib\Math\BigInteger + */ + function _os2ip($x) + { + return new BigInteger($x, 256); + } + + /** + * Exponentiate with or without Chinese Remainder Theorem + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.2}. + * + * @access private + * @param \phpseclib\Math\BigInteger $x + * @return \phpseclib\Math\BigInteger + */ + function _exponentiate($x) + { + switch (true) { + case empty($this->primes): + case $this->primes[1]->equals($this->zero): + case empty($this->coefficients): + case $this->coefficients[2]->equals($this->zero): + case empty($this->exponents): + case $this->exponents[1]->equals($this->zero): + return $x->modPow($this->exponent, $this->modulus); + } + + $num_primes = count($this->primes); + + if (defined('CRYPT_RSA_DISABLE_BLINDING')) { + $m_i = array( + 1 => $x->modPow($this->exponents[1], $this->primes[1]), + 2 => $x->modPow($this->exponents[2], $this->primes[2]) + ); + $h = $m_i[1]->subtract($m_i[2]); + $h = $h->multiply($this->coefficients[2]); + list(, $h) = $h->divide($this->primes[1]); + $m = $m_i[2]->add($h->multiply($this->primes[2])); + + $r = $this->primes[1]; + for ($i = 3; $i <= $num_primes; $i++) { + $m_i = $x->modPow($this->exponents[$i], $this->primes[$i]); + + $r = $r->multiply($this->primes[$i - 1]); + + $h = $m_i->subtract($m); + $h = $h->multiply($this->coefficients[$i]); + list(, $h) = $h->divide($this->primes[$i]); + + $m = $m->add($r->multiply($h)); + } + } else { + $smallest = $this->primes[1]; + for ($i = 2; $i <= $num_primes; $i++) { + if ($smallest->compare($this->primes[$i]) > 0) { + $smallest = $this->primes[$i]; + } + } + + $one = new BigInteger(1); + + $r = $one->random($one, $smallest->subtract($one)); + + $m_i = array( + 1 => $this->_blind($x, $r, 1), + 2 => $this->_blind($x, $r, 2) + ); + $h = $m_i[1]->subtract($m_i[2]); + $h = $h->multiply($this->coefficients[2]); + list(, $h) = $h->divide($this->primes[1]); + $m = $m_i[2]->add($h->multiply($this->primes[2])); + + $r = $this->primes[1]; + for ($i = 3; $i <= $num_primes; $i++) { + $m_i = $this->_blind($x, $r, $i); + + $r = $r->multiply($this->primes[$i - 1]); + + $h = $m_i->subtract($m); + $h = $h->multiply($this->coefficients[$i]); + list(, $h) = $h->divide($this->primes[$i]); + + $m = $m->add($r->multiply($h)); + } + } + + return $m; + } + + /** + * Performs RSA Blinding + * + * Protects against timing attacks by employing RSA Blinding. + * Returns $x->modPow($this->exponents[$i], $this->primes[$i]) + * + * @access private + * @param \phpseclib\Math\BigInteger $x + * @param \phpseclib\Math\BigInteger $r + * @param int $i + * @return \phpseclib\Math\BigInteger + */ + function _blind($x, $r, $i) + { + $x = $x->multiply($r->modPow($this->publicExponent, $this->primes[$i])); + $x = $x->modPow($this->exponents[$i], $this->primes[$i]); + + $r = $r->modInverse($this->primes[$i]); + $x = $x->multiply($r); + list(, $x) = $x->divide($this->primes[$i]); + + return $x; + } + + /** + * Performs blinded RSA equality testing + * + * Protects against a particular type of timing attack described. + * + * See {@link http://codahale.com/a-lesson-in-timing-attacks/ A Lesson In Timing Attacks (or, Don't use MessageDigest.isEquals)} + * + * Thanks for the heads up singpolyma! + * + * @access private + * @param string $x + * @param string $y + * @return bool + */ + function _equals($x, $y) + { + if (function_exists('hash_equals')) { + return hash_equals($x, $y); + } + + if (strlen($x) != strlen($y)) { + return false; + } + + $result = "\0"; + $x^= $y; + for ($i = 0; $i < strlen($x); $i++) { + $result|= $x[$i]; + } + + return $result === "\0"; + } + + /** + * RSAEP + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.1}. + * + * @access private + * @param \phpseclib\Math\BigInteger $m + * @return \phpseclib\Math\BigInteger + */ + function _rsaep($m) + { + if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) { + user_error('Message representative out of range'); + return false; + } + return $this->_exponentiate($m); + } + + /** + * RSADP + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.2 RFC3447#section-5.1.2}. + * + * @access private + * @param \phpseclib\Math\BigInteger $c + * @return \phpseclib\Math\BigInteger + */ + function _rsadp($c) + { + if ($c->compare($this->zero) < 0 || $c->compare($this->modulus) > 0) { + user_error('Ciphertext representative out of range'); + return false; + } + return $this->_exponentiate($c); + } + + /** + * RSASP1 + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.1 RFC3447#section-5.2.1}. + * + * @access private + * @param \phpseclib\Math\BigInteger $m + * @return \phpseclib\Math\BigInteger + */ + function _rsasp1($m) + { + if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) { + user_error('Message representative out of range'); + return false; + } + return $this->_exponentiate($m); + } + + /** + * RSAVP1 + * + * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.2 RFC3447#section-5.2.2}. + * + * @access private + * @param \phpseclib\Math\BigInteger $s + * @return \phpseclib\Math\BigInteger + */ + function _rsavp1($s) + { + if ($s->compare($this->zero) < 0 || $s->compare($this->modulus) > 0) { + user_error('Signature representative out of range'); + return false; + } + return $this->_exponentiate($s); + } + + /** + * MGF1 + * + * See {@link http://tools.ietf.org/html/rfc3447#appendix-B.2.1 RFC3447#appendix-B.2.1}. + * + * @access private + * @param string $mgfSeed + * @param int $maskLen + * @return string + */ + function _mgf1($mgfSeed, $maskLen) + { + // if $maskLen would yield strings larger than 4GB, PKCS#1 suggests a "Mask too long" error be output. + + $t = ''; + $count = ceil($maskLen / $this->mgfHLen); + for ($i = 0; $i < $count; $i++) { + $c = pack('N', $i); + $t.= $this->mgfHash->hash($mgfSeed . $c); + } + + return substr($t, 0, $maskLen); + } + + /** + * RSAES-OAEP-ENCRYPT + * + * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.1 RFC3447#section-7.1.1} and + * {http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding OAES}. + * + * @access private + * @param string $m + * @param string $l + * @return string + */ + function _rsaes_oaep_encrypt($m, $l = '') + { + $mLen = strlen($m); + + // Length checking + + // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error + // be output. + + if ($mLen > $this->k - 2 * $this->hLen - 2) { + user_error('Message too long'); + return false; + } + + // EME-OAEP encoding + + $lHash = $this->hash->hash($l); + $ps = str_repeat(chr(0), $this->k - $mLen - 2 * $this->hLen - 2); + $db = $lHash . $ps . chr(1) . $m; + $seed = Random::string($this->hLen); + $dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1); + $maskedDB = $db ^ $dbMask; + $seedMask = $this->_mgf1($maskedDB, $this->hLen); + $maskedSeed = $seed ^ $seedMask; + $em = chr(0) . $maskedSeed . $maskedDB; + + // RSA encryption + + $m = $this->_os2ip($em); + $c = $this->_rsaep($m); + $c = $this->_i2osp($c, $this->k); + + // Output the ciphertext C + + return $c; + } + + /** + * RSAES-OAEP-DECRYPT + * + * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.2 RFC3447#section-7.1.2}. The fact that the error + * messages aren't distinguishable from one another hinders debugging, but, to quote from RFC3447#section-7.1.2: + * + * Note. Care must be taken to ensure that an opponent cannot + * distinguish the different error conditions in Step 3.g, whether by + * error message or timing, or, more generally, learn partial + * information about the encoded message EM. Otherwise an opponent may + * be able to obtain useful information about the decryption of the + * ciphertext C, leading to a chosen-ciphertext attack such as the one + * observed by Manger [36]. + * + * As for $l... to quote from {@link http://tools.ietf.org/html/rfc3447#page-17 RFC3447#page-17}: + * + * Both the encryption and the decryption operations of RSAES-OAEP take + * the value of a label L as input. In this version of PKCS #1, L is + * the empty string; other uses of the label are outside the scope of + * this document. + * + * @access private + * @param string $c + * @param string $l + * @return string + */ + function _rsaes_oaep_decrypt($c, $l = '') + { + // Length checking + + // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error + // be output. + + if (strlen($c) != $this->k || $this->k < 2 * $this->hLen + 2) { + user_error('Decryption error'); + return false; + } + + // RSA decryption + + $c = $this->_os2ip($c); + $m = $this->_rsadp($c); + if ($m === false) { + user_error('Decryption error'); + return false; + } + $em = $this->_i2osp($m, $this->k); + + // EME-OAEP decoding + + $lHash = $this->hash->hash($l); + $y = ord($em[0]); + $maskedSeed = substr($em, 1, $this->hLen); + $maskedDB = substr($em, $this->hLen + 1); + $seedMask = $this->_mgf1($maskedDB, $this->hLen); + $seed = $maskedSeed ^ $seedMask; + $dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1); + $db = $maskedDB ^ $dbMask; + $lHash2 = substr($db, 0, $this->hLen); + $m = substr($db, $this->hLen); + $hashesMatch = $this->_equals($lHash, $lHash2); + $leadingZeros = 1; + $patternMatch = 0; + $offset = 0; + for ($i = 0; $i < strlen($m); $i++) { + $patternMatch|= $leadingZeros & ($m[$i] === "\1"); + $leadingZeros&= $m[$i] === "\0"; + $offset+= $patternMatch ? 0 : 1; + } + + // we do & instead of && to avoid https://en.wikipedia.org/wiki/Short-circuit_evaluation + // to protect against timing attacks + if (!$hashesMatch & !$patternMatch) { + user_error('Decryption error'); + return false; + } + + // Output the message M + + return substr($m, $offset + 1); + } + + /** + * Raw Encryption / Decryption + * + * Doesn't use padding and is not recommended. + * + * @access private + * @param string $m + * @return string + */ + function _raw_encrypt($m) + { + $temp = $this->_os2ip($m); + $temp = $this->_rsaep($temp); + return $this->_i2osp($temp, $this->k); + } + + /** + * RSAES-PKCS1-V1_5-ENCRYPT + * + * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.1 RFC3447#section-7.2.1}. + * + * @access private + * @param string $m + * @return string + */ + function _rsaes_pkcs1_v1_5_encrypt($m) + { + $mLen = strlen($m); + + // Length checking + + if ($mLen > $this->k - 11) { + user_error('Message too long'); + return false; + } + + // EME-PKCS1-v1_5 encoding + + $psLen = $this->k - $mLen - 3; + $ps = ''; + while (strlen($ps) != $psLen) { + $temp = Random::string($psLen - strlen($ps)); + $temp = str_replace("\x00", '', $temp); + $ps.= $temp; + } + $type = 2; + // see the comments of _rsaes_pkcs1_v1_5_decrypt() to understand why this is being done + if (defined('CRYPT_RSA_PKCS15_COMPAT') && (!isset($this->publicExponent) || $this->exponent !== $this->publicExponent)) { + $type = 1; + // "The padding string PS shall consist of k-3-||D|| octets. ... for block type 01, they shall have value FF" + $ps = str_repeat("\xFF", $psLen); + } + $em = chr(0) . chr($type) . $ps . chr(0) . $m; + + // RSA encryption + $m = $this->_os2ip($em); + $c = $this->_rsaep($m); + $c = $this->_i2osp($c, $this->k); + + // Output the ciphertext C + + return $c; + } + + /** + * RSAES-PKCS1-V1_5-DECRYPT + * + * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.2 RFC3447#section-7.2.2}. + * + * For compatibility purposes, this function departs slightly from the description given in RFC3447. + * The reason being that RFC2313#section-8.1 (PKCS#1 v1.5) states that ciphertext's encrypted by the + * private key should have the second byte set to either 0 or 1 and that ciphertext's encrypted by the + * public key should have the second byte set to 2. In RFC3447 (PKCS#1 v2.1), the second byte is supposed + * to be 2 regardless of which key is used. For compatibility purposes, we'll just check to make sure the + * second byte is 2 or less. If it is, we'll accept the decrypted string as valid. + * + * As a consequence of this, a private key encrypted ciphertext produced with \phpseclib\Crypt\RSA may not decrypt + * with a strictly PKCS#1 v1.5 compliant RSA implementation. Public key encrypted ciphertext's should but + * not private key encrypted ciphertext's. + * + * @access private + * @param string $c + * @return string + */ + function _rsaes_pkcs1_v1_5_decrypt($c) + { + // Length checking + + if (strlen($c) != $this->k) { // or if k < 11 + user_error('Decryption error'); + return false; + } + + // RSA decryption + + $c = $this->_os2ip($c); + $m = $this->_rsadp($c); + + if ($m === false) { + user_error('Decryption error'); + return false; + } + $em = $this->_i2osp($m, $this->k); + + // EME-PKCS1-v1_5 decoding + + if (ord($em[0]) != 0 || ord($em[1]) > 2) { + user_error('Decryption error'); + return false; + } + + $ps = substr($em, 2, strpos($em, chr(0), 2) - 2); + $m = substr($em, strlen($ps) + 3); + + if (strlen($ps) < 8) { + user_error('Decryption error'); + return false; + } + + // Output M + + return $m; + } + + /** + * EMSA-PSS-ENCODE + * + * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.1 RFC3447#section-9.1.1}. + * + * @access private + * @param string $m + * @param int $emBits + */ + function _emsa_pss_encode($m, $emBits) + { + // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error + // be output. + + $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8) + $sLen = $this->sLen !== null ? $this->sLen : $this->hLen; + + $mHash = $this->hash->hash($m); + if ($emLen < $this->hLen + $sLen + 2) { + user_error('Encoding error'); + return false; + } + + $salt = Random::string($sLen); + $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt; + $h = $this->hash->hash($m2); + $ps = str_repeat(chr(0), $emLen - $sLen - $this->hLen - 2); + $db = $ps . chr(1) . $salt; + $dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1); + $maskedDB = $db ^ $dbMask; + $maskedDB[0] = ~chr(0xFF << ($emBits & 7)) & $maskedDB[0]; + $em = $maskedDB . $h . chr(0xBC); + + return $em; + } + + /** + * EMSA-PSS-VERIFY + * + * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.2 RFC3447#section-9.1.2}. + * + * @access private + * @param string $m + * @param string $em + * @param int $emBits + * @return string + */ + function _emsa_pss_verify($m, $em, $emBits) + { + // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error + // be output. + + $emLen = ($emBits + 7) >> 3; // ie. ceil($emBits / 8); + $sLen = $this->sLen !== null ? $this->sLen : $this->hLen; + + $mHash = $this->hash->hash($m); + if ($emLen < $this->hLen + $sLen + 2) { + return false; + } + + if ($em[strlen($em) - 1] != chr(0xBC)) { + return false; + } + + $maskedDB = substr($em, 0, -$this->hLen - 1); + $h = substr($em, -$this->hLen - 1, $this->hLen); + $temp = chr(0xFF << ($emBits & 7)); + if ((~$maskedDB[0] & $temp) != $temp) { + return false; + } + $dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1); + $db = $maskedDB ^ $dbMask; + $db[0] = ~chr(0xFF << ($emBits & 7)) & $db[0]; + $temp = $emLen - $this->hLen - $sLen - 2; + if (substr($db, 0, $temp) != str_repeat(chr(0), $temp) || ord($db[$temp]) != 1) { + return false; + } + $salt = substr($db, $temp + 1); // should be $sLen long + $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt; + $h2 = $this->hash->hash($m2); + return $this->_equals($h, $h2); + } + + /** + * RSASSA-PSS-SIGN + * + * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.1 RFC3447#section-8.1.1}. + * + * @access private + * @param string $m + * @return string + */ + function _rsassa_pss_sign($m) + { + // EMSA-PSS encoding + + $em = $this->_emsa_pss_encode($m, 8 * $this->k - 1); + + // RSA signature + + $m = $this->_os2ip($em); + $s = $this->_rsasp1($m); + $s = $this->_i2osp($s, $this->k); + + // Output the signature S + + return $s; + } + + /** + * RSASSA-PSS-VERIFY + * + * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.2 RFC3447#section-8.1.2}. + * + * @access private + * @param string $m + * @param string $s + * @return string + */ + function _rsassa_pss_verify($m, $s) + { + // Length checking + + if (strlen($s) != $this->k) { + user_error('Invalid signature'); + return false; + } + + // RSA verification + + $modBits = strlen($this->modulus->toBits()); + + $s2 = $this->_os2ip($s); + $m2 = $this->_rsavp1($s2); + if ($m2 === false) { + user_error('Invalid signature'); + return false; + } + $em = $this->_i2osp($m2, $this->k); + if ($em === false) { + user_error('Invalid signature'); + return false; + } + + // EMSA-PSS verification + + return $this->_emsa_pss_verify($m, $em, $modBits - 1); + } + + /** + * EMSA-PKCS1-V1_5-ENCODE + * + * See {@link http://tools.ietf.org/html/rfc3447#section-9.2 RFC3447#section-9.2}. + * + * @access private + * @param string $m + * @param int $emLen + * @return string + */ + function _emsa_pkcs1_v1_5_encode($m, $emLen) + { + $h = $this->hash->hash($m); + if ($h === false) { + return false; + } + + // see http://tools.ietf.org/html/rfc3447#page-43 + switch ($this->hashName) { + case 'md2': + $t = pack('H*', '3020300c06082a864886f70d020205000410'); + break; + case 'md5': + $t = pack('H*', '3020300c06082a864886f70d020505000410'); + break; + case 'sha1': + $t = pack('H*', '3021300906052b0e03021a05000414'); + break; + case 'sha256': + $t = pack('H*', '3031300d060960864801650304020105000420'); + break; + case 'sha384': + $t = pack('H*', '3041300d060960864801650304020205000430'); + break; + case 'sha512': + $t = pack('H*', '3051300d060960864801650304020305000440'); + } + $t.= $h; + $tLen = strlen($t); + + if ($emLen < $tLen + 11) { + user_error('Intended encoded message length too short'); + return false; + } + + $ps = str_repeat(chr(0xFF), $emLen - $tLen - 3); + + $em = "\0\1$ps\0$t"; + + return $em; + } + + /** + * RSASSA-PKCS1-V1_5-SIGN + * + * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.1 RFC3447#section-8.2.1}. + * + * @access private + * @param string $m + * @return string + */ + function _rsassa_pkcs1_v1_5_sign($m) + { + // EMSA-PKCS1-v1_5 encoding + + $em = $this->_emsa_pkcs1_v1_5_encode($m, $this->k); + if ($em === false) { + user_error('RSA modulus too short'); + return false; + } + + // RSA signature + + $m = $this->_os2ip($em); + $s = $this->_rsasp1($m); + $s = $this->_i2osp($s, $this->k); + + // Output the signature S + + return $s; + } + + /** + * RSASSA-PKCS1-V1_5-VERIFY + * + * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.2 RFC3447#section-8.2.2}. + * + * @access private + * @param string $m + * @param string $s + * @return string + */ + function _rsassa_pkcs1_v1_5_verify($m, $s) + { + // Length checking + + if (strlen($s) != $this->k) { + user_error('Invalid signature'); + return false; + } + + // RSA verification + + $s = $this->_os2ip($s); + $m2 = $this->_rsavp1($s); + if ($m2 === false) { + user_error('Invalid signature'); + return false; + } + $em = $this->_i2osp($m2, $this->k); + if ($em === false) { + user_error('Invalid signature'); + return false; + } + + // EMSA-PKCS1-v1_5 encoding + + $em2 = $this->_emsa_pkcs1_v1_5_encode($m, $this->k); + if ($em2 === false) { + user_error('RSA modulus too short'); + return false; + } + + // Compare + return $this->_equals($em, $em2); + } + + /** + * Set Encryption Mode + * + * Valid values include self::ENCRYPTION_OAEP and self::ENCRYPTION_PKCS1. + * + * @access public + * @param int $mode + */ + function setEncryptionMode($mode) + { + $this->encryptionMode = $mode; + } + + /** + * Set Signature Mode + * + * Valid values include self::SIGNATURE_PSS and self::SIGNATURE_PKCS1 + * + * @access public + * @param int $mode + */ + function setSignatureMode($mode) + { + $this->signatureMode = $mode; + } + + /** + * Set public key comment. + * + * @access public + * @param string $comment + */ + function setComment($comment) + { + $this->comment = $comment; + } + + /** + * Get public key comment. + * + * @access public + * @return string + */ + function getComment() + { + return $this->comment; + } + + /** + * Encryption + * + * Both self::ENCRYPTION_OAEP and self::ENCRYPTION_PKCS1 both place limits on how long $plaintext can be. + * If $plaintext exceeds those limits it will be broken up so that it does and the resultant ciphertext's will + * be concatenated together. + * + * @see self::decrypt() + * @access public + * @param string $plaintext + * @return string + */ + function encrypt($plaintext) + { + switch ($this->encryptionMode) { + case self::ENCRYPTION_NONE: + $plaintext = str_split($plaintext, $this->k); + $ciphertext = ''; + foreach ($plaintext as $m) { + $ciphertext.= $this->_raw_encrypt($m); + } + return $ciphertext; + case self::ENCRYPTION_PKCS1: + $length = $this->k - 11; + if ($length <= 0) { + return false; + } + + $plaintext = str_split($plaintext, $length); + $ciphertext = ''; + foreach ($plaintext as $m) { + $ciphertext.= $this->_rsaes_pkcs1_v1_5_encrypt($m); + } + return $ciphertext; + //case self::ENCRYPTION_OAEP: + default: + $length = $this->k - 2 * $this->hLen - 2; + if ($length <= 0) { + return false; + } + + $plaintext = str_split($plaintext, $length); + $ciphertext = ''; + foreach ($plaintext as $m) { + $ciphertext.= $this->_rsaes_oaep_encrypt($m); + } + return $ciphertext; + } + } + + /** + * Decryption + * + * @see self::encrypt() + * @access public + * @param string $ciphertext + * @return string + */ + function decrypt($ciphertext) + { + if ($this->k <= 0) { + return false; + } + + $ciphertext = str_split($ciphertext, $this->k); + $ciphertext[count($ciphertext) - 1] = str_pad($ciphertext[count($ciphertext) - 1], $this->k, chr(0), STR_PAD_LEFT); + + $plaintext = ''; + + switch ($this->encryptionMode) { + case self::ENCRYPTION_NONE: + $decrypt = '_raw_encrypt'; + break; + case self::ENCRYPTION_PKCS1: + $decrypt = '_rsaes_pkcs1_v1_5_decrypt'; + break; + //case self::ENCRYPTION_OAEP: + default: + $decrypt = '_rsaes_oaep_decrypt'; + } + + foreach ($ciphertext as $c) { + $temp = $this->$decrypt($c); + if ($temp === false) { + return false; + } + $plaintext.= $temp; + } + + return $plaintext; + } + + /** + * Create a signature + * + * @see self::verify() + * @access public + * @param string $message + * @return string + */ + function sign($message) + { + if (empty($this->modulus) || empty($this->exponent)) { + return false; + } + + switch ($this->signatureMode) { + case self::SIGNATURE_PKCS1: + return $this->_rsassa_pkcs1_v1_5_sign($message); + //case self::SIGNATURE_PSS: + default: + return $this->_rsassa_pss_sign($message); + } + } + + /** + * Verifies a signature + * + * @see self::sign() + * @access public + * @param string $message + * @param string $signature + * @return bool + */ + function verify($message, $signature) + { + if (empty($this->modulus) || empty($this->exponent)) { + return false; + } + + switch ($this->signatureMode) { + case self::SIGNATURE_PKCS1: + return $this->_rsassa_pkcs1_v1_5_verify($message, $signature); + //case self::SIGNATURE_PSS: + default: + return $this->_rsassa_pss_verify($message, $signature); + } + } + + /** + * Extract raw BER from Base64 encoding + * + * @access private + * @param string $str + * @return string + */ + function _extractBER($str) + { + /* X.509 certs are assumed to be base64 encoded but sometimes they'll have additional things in them + * above and beyond the ceritificate. + * ie. some may have the following preceding the -----BEGIN CERTIFICATE----- line: + * + * Bag Attributes + * localKeyID: 01 00 00 00 + * subject=/O=organization/OU=org unit/CN=common name + * issuer=/O=organization/CN=common name + */ + $temp = preg_replace('#.*?^-+[^-]+-+[\r\n ]*$#ms', '', $str, 1); + // remove the -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- stuff + $temp = preg_replace('#-+[^-]+-+#', '', $temp); + // remove new lines + $temp = str_replace(array("\r", "\n", ' '), '', $temp); + $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false; + return $temp != false ? $temp : $str; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php new file mode 100644 index 000000000..8f53eb319 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php @@ -0,0 +1,277 @@ + + * + * + * + * @category Crypt + * @package Random + * @author Jim Wigginton + * @copyright 2007 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Crypt; + +/** + * Pure-PHP Random Number Generator + * + * @package Random + * @author Jim Wigginton + * @access public + */ +class Random +{ + /** + * Generate a random string. + * + * Although microoptimizations are generally discouraged as they impair readability this function is ripe with + * microoptimizations because this function has the potential of being called a huge number of times. + * eg. for RSA key generation. + * + * @param int $length + * @return string + */ + static function string($length) + { + if (!$length) { + return ''; + } + + if (version_compare(PHP_VERSION, '7.0.0', '>=')) { + try { + return \random_bytes($length); + } catch (\Throwable $e) { + // If a sufficient source of randomness is unavailable, random_bytes() will throw an + // object that implements the Throwable interface (Exception, TypeError, Error). + // We don't actually need to do anything here. The string() method should just continue + // as normal. Note, however, that if we don't have a sufficient source of randomness for + // random_bytes(), most of the other calls here will fail too, so we'll end up using + // the PHP implementation. + } + } + + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + // method 1. prior to PHP 5.3 this would call rand() on windows hence the function_exists('class_alias') call. + // ie. class_alias is a function that was introduced in PHP 5.3 + if (extension_loaded('mcrypt') && function_exists('class_alias')) { + return @mcrypt_create_iv($length); + } + // method 2. openssl_random_pseudo_bytes was introduced in PHP 5.3.0 but prior to PHP 5.3.4 there was, + // to quote , "possible blocking behavior". as of 5.3.4 + // openssl_random_pseudo_bytes and mcrypt_create_iv do the exact same thing on Windows. ie. they both + // call php_win32_get_random_bytes(): + // + // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/openssl/openssl.c#L5008 + // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1392 + // + // php_win32_get_random_bytes() is defined thusly: + // + // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/win32/winutil.c#L80 + // + // we're calling it, all the same, in the off chance that the mcrypt extension is not available + if (extension_loaded('openssl') && version_compare(PHP_VERSION, '5.3.4', '>=')) { + return openssl_random_pseudo_bytes($length); + } + } else { + // method 1. the fastest + if (extension_loaded('openssl')) { + return openssl_random_pseudo_bytes($length); + } + // method 2 + static $fp = true; + if ($fp === true) { + // warning's will be output unles the error suppression operator is used. errors such as + // "open_basedir restriction in effect", "Permission denied", "No such file or directory", etc. + $fp = @fopen('/dev/urandom', 'rb'); + } + if ($fp !== true && $fp !== false) { // surprisingly faster than !is_bool() or is_resource() + $temp = fread($fp, $length); + if (strlen($temp) == $length) { + return $temp; + } + } + // method 3. pretty much does the same thing as method 2 per the following url: + // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1391 + // surprisingly slower than method 2. maybe that's because mcrypt_create_iv does a bunch of error checking that we're + // not doing. regardless, this'll only be called if this PHP script couldn't open /dev/urandom due to open_basedir + // restrictions or some such + if (extension_loaded('mcrypt')) { + return @mcrypt_create_iv($length, MCRYPT_DEV_URANDOM); + } + } + // at this point we have no choice but to use a pure-PHP CSPRNG + + // cascade entropy across multiple PHP instances by fixing the session and collecting all + // environmental variables, including the previous session data and the current session + // data. + // + // mt_rand seeds itself by looking at the PID and the time, both of which are (relatively) + // easy to guess at. linux uses mouse clicks, keyboard timings, etc, as entropy sources, but + // PHP isn't low level to be able to use those as sources and on a web server there's not likely + // going to be a ton of keyboard or mouse action. web servers do have one thing that we can use + // however, a ton of people visiting the website. obviously you don't want to base your seeding + // soley on parameters a potential attacker sends but (1) not everything in $_SERVER is controlled + // by the user and (2) this isn't just looking at the data sent by the current user - it's based + // on the data sent by all users. one user requests the page and a hash of their info is saved. + // another user visits the page and the serialization of their data is utilized along with the + // server envirnment stuff and a hash of the previous http request data (which itself utilizes + // a hash of the session data before that). certainly an attacker should be assumed to have + // full control over his own http requests. he, however, is not going to have control over + // everyone's http requests. + static $crypto = false, $v; + if ($crypto === false) { + // save old session data + $old_session_id = session_id(); + $old_use_cookies = ini_get('session.use_cookies'); + $old_session_cache_limiter = session_cache_limiter(); + $_OLD_SESSION = isset($_SESSION) ? $_SESSION : false; + if ($old_session_id != '') { + session_write_close(); + } + + session_id(1); + ini_set('session.use_cookies', 0); + session_cache_limiter(''); + session_start(); + + $v = $seed = $_SESSION['seed'] = pack('H*', sha1( + (isset($_SERVER) ? phpseclib_safe_serialize($_SERVER) : '') . + (isset($_POST) ? phpseclib_safe_serialize($_POST) : '') . + (isset($_GET) ? phpseclib_safe_serialize($_GET) : '') . + (isset($_COOKIE) ? phpseclib_safe_serialize($_COOKIE) : '') . + phpseclib_safe_serialize($GLOBALS) . + phpseclib_safe_serialize($_SESSION) . + phpseclib_safe_serialize($_OLD_SESSION) + )); + if (!isset($_SESSION['count'])) { + $_SESSION['count'] = 0; + } + $_SESSION['count']++; + + session_write_close(); + + // restore old session data + if ($old_session_id != '') { + session_id($old_session_id); + session_start(); + ini_set('session.use_cookies', $old_use_cookies); + session_cache_limiter($old_session_cache_limiter); + } else { + if ($_OLD_SESSION !== false) { + $_SESSION = $_OLD_SESSION; + unset($_OLD_SESSION); + } else { + unset($_SESSION); + } + } + + // in SSH2 a shared secret and an exchange hash are generated through the key exchange process. + // the IV client to server is the hash of that "nonce" with the letter A and for the encryption key it's the letter C. + // if the hash doesn't produce enough a key or an IV that's long enough concat successive hashes of the + // original hash and the current hash. we'll be emulating that. for more info see the following URL: + // + // http://tools.ietf.org/html/rfc4253#section-7.2 + // + // see the is_string($crypto) part for an example of how to expand the keys + $key = pack('H*', sha1($seed . 'A')); + $iv = pack('H*', sha1($seed . 'C')); + + // ciphers are used as per the nist.gov link below. also, see this link: + // + // http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator#Designs_based_on_cryptographic_primitives + switch (true) { + case class_exists('\phpseclib\Crypt\AES'): + $crypto = new AES(Base::MODE_CTR); + break; + case class_exists('\phpseclib\Crypt\Twofish'): + $crypto = new Twofish(Base::MODE_CTR); + break; + case class_exists('\phpseclib\Crypt\Blowfish'): + $crypto = new Blowfish(Base::MODE_CTR); + break; + case class_exists('\phpseclib\Crypt\TripleDES'): + $crypto = new TripleDES(Base::MODE_CTR); + break; + case class_exists('\phpseclib\Crypt\DES'): + $crypto = new DES(Base::MODE_CTR); + break; + case class_exists('\phpseclib\Crypt\RC4'): + $crypto = new RC4(); + break; + default: + user_error(__CLASS__ . ' requires at least one symmetric cipher be loaded'); + return false; + } + + $crypto->setKey($key); + $crypto->setIV($iv); + $crypto->enableContinuousBuffer(); + } + + //return $crypto->encrypt(str_repeat("\0", $length)); + + // the following is based off of ANSI X9.31: + // + // http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf + // + // OpenSSL uses that same standard for it's random numbers: + // + // http://www.opensource.apple.com/source/OpenSSL/OpenSSL-38/openssl/fips-1.0/rand/fips_rand.c + // (do a search for "ANS X9.31 A.2.4") + $result = ''; + while (strlen($result) < $length) { + $i = $crypto->encrypt(microtime()); // strlen(microtime()) == 21 + $r = $crypto->encrypt($i ^ $v); // strlen($v) == 20 + $v = $crypto->encrypt($r ^ $i); // strlen($r) == 20 + $result.= $r; + } + return substr($result, 0, $length); + } +} + +if (!function_exists('phpseclib_safe_serialize')) { + /** + * Safely serialize variables + * + * If a class has a private __sleep() method it'll give a fatal error on PHP 5.2 and earlier. + * PHP 5.3 will emit a warning. + * + * @param mixed $arr + * @access public + */ + function phpseclib_safe_serialize(&$arr) + { + if (is_object($arr)) { + return ''; + } + if (!is_array($arr)) { + return serialize($arr); + } + // prevent circular array recursion + if (isset($arr['__phpseclib_marker'])) { + return ''; + } + $safearr = array(); + $arr['__phpseclib_marker'] = true; + foreach (array_keys($arr) as $key) { + // do not recurse on the '__phpseclib_marker' key itself, for smaller memory usage + if ($key !== '__phpseclib_marker') { + $safearr[$key] = phpseclib_safe_serialize($arr[$key]); + } + } + unset($arr['__phpseclib_marker']); + return serialize($safearr); + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php new file mode 100644 index 000000000..3648a1972 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php @@ -0,0 +1,936 @@ + + * setKey('abcdefghijklmnop'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $rijndael->decrypt($rijndael->encrypt($plaintext)); + * ?> + * + * + * @category Crypt + * @package Rijndael + * @author Jim Wigginton + * @copyright 2008 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Crypt; + +/** + * Pure-PHP implementation of Rijndael. + * + * @package Rijndael + * @author Jim Wigginton + * @access public + */ +class Rijndael extends Base +{ + /** + * The mcrypt specific name of the cipher + * + * Mcrypt is useable for 128/192/256-bit $block_size/$key_length. For 160/224 not. + * \phpseclib\Crypt\Rijndael determines automatically whether mcrypt is useable + * or not for the current $block_size/$key_length. + * In case of, $cipher_name_mcrypt will be set dynamically at run time accordingly. + * + * @see \phpseclib\Crypt\Base::cipher_name_mcrypt + * @see \phpseclib\Crypt\Base::engine + * @see self::isValidEngine() + * @var string + * @access private + */ + var $cipher_name_mcrypt = 'rijndael-128'; + + /** + * The default salt used by setPassword() + * + * @see \phpseclib\Crypt\Base::password_default_salt + * @see \phpseclib\Crypt\Base::setPassword() + * @var string + * @access private + */ + var $password_default_salt = 'phpseclib'; + + /** + * The Key Schedule + * + * @see self::_setup() + * @var array + * @access private + */ + var $w; + + /** + * The Inverse Key Schedule + * + * @see self::_setup() + * @var array + * @access private + */ + var $dw; + + /** + * The Block Length divided by 32 + * + * @see self::setBlockLength() + * @var int + * @access private + * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4. Exists in conjunction with $block_size + * because the encryption / decryption / key schedule creation requires this number and not $block_size. We could + * derive this from $block_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu + * of that, we'll just precompute it once. + */ + var $Nb = 4; + + /** + * The Key Length (in bytes) + * + * @see self::setKeyLength() + * @var int + * @access private + * @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16. Exists in conjunction with $Nk + * because the encryption / decryption / key schedule creation requires this number and not $key_length. We could + * derive this from $key_length or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu + * of that, we'll just precompute it once. + */ + var $key_length = 16; + + /** + * The Key Length divided by 32 + * + * @see self::setKeyLength() + * @var int + * @access private + * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4 + */ + var $Nk = 4; + + /** + * The Number of Rounds + * + * @var int + * @access private + * @internal The max value is 14, the min value is 10. + */ + var $Nr; + + /** + * Shift offsets + * + * @var array + * @access private + */ + var $c; + + /** + * Holds the last used key- and block_size information + * + * @var array + * @access private + */ + var $kl; + + /** + * Sets the key length. + * + * Valid key lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to + * 128. If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount. + * + * Note: phpseclib extends Rijndael (and AES) for using 160- and 224-bit keys but they are officially not defined + * and the most (if not all) implementations are not able using 160/224-bit keys but round/pad them up to + * 192/256 bits as, for example, mcrypt will do. + * + * That said, if you want be compatible with other Rijndael and AES implementations, + * you should not setKeyLength(160) or setKeyLength(224). + * + * Additional: In case of 160- and 224-bit keys, phpseclib will/can, for that reason, not use + * the mcrypt php extension, even if available. + * This results then in slower encryption. + * + * @access public + * @param int $length + */ + function setKeyLength($length) + { + switch (true) { + case $length <= 128: + $this->key_length = 16; + break; + case $length <= 160: + $this->key_length = 20; + break; + case $length <= 192: + $this->key_length = 24; + break; + case $length <= 224: + $this->key_length = 28; + break; + default: + $this->key_length = 32; + } + + parent::setKeyLength($length); + } + + /** + * Sets the block length + * + * Valid block lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to + * 128. If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount. + * + * @access public + * @param int $length + */ + function setBlockLength($length) + { + $length >>= 5; + if ($length > 8) { + $length = 8; + } elseif ($length < 4) { + $length = 4; + } + $this->Nb = $length; + $this->block_size = $length << 2; + $this->changed = true; + $this->_setEngine(); + } + + /** + * Test for engine validity + * + * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine() + * + * @see \phpseclib\Crypt\Base::__construct() + * @param int $engine + * @access public + * @return bool + */ + function isValidEngine($engine) + { + switch ($engine) { + case self::ENGINE_OPENSSL: + if ($this->block_size != 16) { + return false; + } + $this->cipher_name_openssl_ecb = 'aes-' . ($this->key_length << 3) . '-ecb'; + $this->cipher_name_openssl = 'aes-' . ($this->key_length << 3) . '-' . $this->_openssl_translate_mode(); + break; + case self::ENGINE_MCRYPT: + $this->cipher_name_mcrypt = 'rijndael-' . ($this->block_size << 3); + if ($this->key_length % 8) { // is it a 160/224-bit key? + // mcrypt is not usable for them, only for 128/192/256-bit keys + return false; + } + } + + return parent::isValidEngine($engine); + } + + /** + * Encrypts a block + * + * @access private + * @param string $in + * @return string + */ + function _encryptBlock($in) + { + static $tables; + if (empty($tables)) { + $tables = &$this->_getTables(); + } + $t0 = $tables[0]; + $t1 = $tables[1]; + $t2 = $tables[2]; + $t3 = $tables[3]; + $sbox = $tables[4]; + + $state = array(); + $words = unpack('N*', $in); + + $c = $this->c; + $w = $this->w; + $Nb = $this->Nb; + $Nr = $this->Nr; + + // addRoundKey + $wc = $Nb - 1; + foreach ($words as $word) { + $state[] = $word ^ $w[++$wc]; + } + + // fips-197.pdf#page=19, "Figure 5. Pseudo Code for the Cipher", states that this loop has four components - + // subBytes, shiftRows, mixColumns, and addRoundKey. fips-197.pdf#page=30, "Implementation Suggestions Regarding + // Various Platforms" suggests that performs enhanced implementations are described in Rijndael-ammended.pdf. + // Rijndael-ammended.pdf#page=20, "Implementation aspects / 32-bit processor", discusses such an optimization. + // Unfortunately, the description given there is not quite correct. Per aes.spec.v316.pdf#page=19 [1], + // equation (7.4.7) is supposed to use addition instead of subtraction, so we'll do that here, as well. + + // [1] http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.v316.pdf + $temp = array(); + for ($round = 1; $round < $Nr; ++$round) { + $i = 0; // $c[0] == 0 + $j = $c[1]; + $k = $c[2]; + $l = $c[3]; + + while ($i < $Nb) { + $temp[$i] = $t0[$state[$i] >> 24 & 0x000000FF] ^ + $t1[$state[$j] >> 16 & 0x000000FF] ^ + $t2[$state[$k] >> 8 & 0x000000FF] ^ + $t3[$state[$l] & 0x000000FF] ^ + $w[++$wc]; + ++$i; + $j = ($j + 1) % $Nb; + $k = ($k + 1) % $Nb; + $l = ($l + 1) % $Nb; + } + $state = $temp; + } + + // subWord + for ($i = 0; $i < $Nb; ++$i) { + $state[$i] = $sbox[$state[$i] & 0x000000FF] | + ($sbox[$state[$i] >> 8 & 0x000000FF] << 8) | + ($sbox[$state[$i] >> 16 & 0x000000FF] << 16) | + ($sbox[$state[$i] >> 24 & 0x000000FF] << 24); + } + + // shiftRows + addRoundKey + $i = 0; // $c[0] == 0 + $j = $c[1]; + $k = $c[2]; + $l = $c[3]; + while ($i < $Nb) { + $temp[$i] = ($state[$i] & 0xFF000000) ^ + ($state[$j] & 0x00FF0000) ^ + ($state[$k] & 0x0000FF00) ^ + ($state[$l] & 0x000000FF) ^ + $w[$i]; + ++$i; + $j = ($j + 1) % $Nb; + $k = ($k + 1) % $Nb; + $l = ($l + 1) % $Nb; + } + + switch ($Nb) { + case 8: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]); + case 7: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]); + case 6: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]); + case 5: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]); + default: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]); + } + } + + /** + * Decrypts a block + * + * @access private + * @param string $in + * @return string + */ + function _decryptBlock($in) + { + static $invtables; + if (empty($invtables)) { + $invtables = &$this->_getInvTables(); + } + $dt0 = $invtables[0]; + $dt1 = $invtables[1]; + $dt2 = $invtables[2]; + $dt3 = $invtables[3]; + $isbox = $invtables[4]; + + $state = array(); + $words = unpack('N*', $in); + + $c = $this->c; + $dw = $this->dw; + $Nb = $this->Nb; + $Nr = $this->Nr; + + // addRoundKey + $wc = $Nb - 1; + foreach ($words as $word) { + $state[] = $word ^ $dw[++$wc]; + } + + $temp = array(); + for ($round = $Nr - 1; $round > 0; --$round) { + $i = 0; // $c[0] == 0 + $j = $Nb - $c[1]; + $k = $Nb - $c[2]; + $l = $Nb - $c[3]; + + while ($i < $Nb) { + $temp[$i] = $dt0[$state[$i] >> 24 & 0x000000FF] ^ + $dt1[$state[$j] >> 16 & 0x000000FF] ^ + $dt2[$state[$k] >> 8 & 0x000000FF] ^ + $dt3[$state[$l] & 0x000000FF] ^ + $dw[++$wc]; + ++$i; + $j = ($j + 1) % $Nb; + $k = ($k + 1) % $Nb; + $l = ($l + 1) % $Nb; + } + $state = $temp; + } + + // invShiftRows + invSubWord + addRoundKey + $i = 0; // $c[0] == 0 + $j = $Nb - $c[1]; + $k = $Nb - $c[2]; + $l = $Nb - $c[3]; + + while ($i < $Nb) { + $word = ($state[$i] & 0xFF000000) | + ($state[$j] & 0x00FF0000) | + ($state[$k] & 0x0000FF00) | + ($state[$l] & 0x000000FF); + + $temp[$i] = $dw[$i] ^ ($isbox[$word & 0x000000FF] | + ($isbox[$word >> 8 & 0x000000FF] << 8) | + ($isbox[$word >> 16 & 0x000000FF] << 16) | + ($isbox[$word >> 24 & 0x000000FF] << 24)); + ++$i; + $j = ($j + 1) % $Nb; + $k = ($k + 1) % $Nb; + $l = ($l + 1) % $Nb; + } + + switch ($Nb) { + case 8: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]); + case 7: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]); + case 6: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]); + case 5: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]); + default: + return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]); + } + } + + /** + * Setup the key (expansion) + * + * @see \phpseclib\Crypt\Base::_setupKey() + * @access private + */ + function _setupKey() + { + // Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field. + // See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse + static $rcon = array(0, + 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, + 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000, + 0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000, + 0x2F000000, 0x5E000000, 0xBC000000, 0x63000000, 0xC6000000, + 0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000, + 0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000 + ); + + if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->key_length === $this->kl['key_length'] && $this->block_size === $this->kl['block_size']) { + // already expanded + return; + } + $this->kl = array('key' => $this->key, 'key_length' => $this->key_length, 'block_size' => $this->block_size); + + $this->Nk = $this->key_length >> 2; + // see Rijndael-ammended.pdf#page=44 + $this->Nr = max($this->Nk, $this->Nb) + 6; + + // shift offsets for Nb = 5, 7 are defined in Rijndael-ammended.pdf#page=44, + // "Table 8: Shift offsets in Shiftrow for the alternative block lengths" + // shift offsets for Nb = 4, 6, 8 are defined in Rijndael-ammended.pdf#page=14, + // "Table 2: Shift offsets for different block lengths" + switch ($this->Nb) { + case 4: + case 5: + case 6: + $this->c = array(0, 1, 2, 3); + break; + case 7: + $this->c = array(0, 1, 2, 4); + break; + case 8: + $this->c = array(0, 1, 3, 4); + } + + $w = array_values(unpack('N*words', $this->key)); + + $length = $this->Nb * ($this->Nr + 1); + for ($i = $this->Nk; $i < $length; $i++) { + $temp = $w[$i - 1]; + if ($i % $this->Nk == 0) { + // according to , "the size of an integer is platform-dependent". + // on a 32-bit machine, it's 32-bits, and on a 64-bit machine, it's 64-bits. on a 32-bit machine, + // 0xFFFFFFFF << 8 == 0xFFFFFF00, but on a 64-bit machine, it equals 0xFFFFFFFF00. as such, doing 'and' + // with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is. + $temp = (($temp << 8) & 0xFFFFFF00) | (($temp >> 24) & 0x000000FF); // rotWord + $temp = $this->_subWord($temp) ^ $rcon[$i / $this->Nk]; + } elseif ($this->Nk > 6 && $i % $this->Nk == 4) { + $temp = $this->_subWord($temp); + } + $w[$i] = $w[$i - $this->Nk] ^ $temp; + } + + // convert the key schedule from a vector of $Nb * ($Nr + 1) length to a matrix with $Nr + 1 rows and $Nb columns + // and generate the inverse key schedule. more specifically, + // according to (section 5.3.3), + // "The key expansion for the Inverse Cipher is defined as follows: + // 1. Apply the Key Expansion. + // 2. Apply InvMixColumn to all Round Keys except the first and the last one." + // also, see fips-197.pdf#page=27, "5.3.5 Equivalent Inverse Cipher" + list($dt0, $dt1, $dt2, $dt3) = $this->_getInvTables(); + $temp = $this->w = $this->dw = array(); + for ($i = $row = $col = 0; $i < $length; $i++, $col++) { + if ($col == $this->Nb) { + if ($row == 0) { + $this->dw[0] = $this->w[0]; + } else { + // subWord + invMixColumn + invSubWord = invMixColumn + $j = 0; + while ($j < $this->Nb) { + $dw = $this->_subWord($this->w[$row][$j]); + $temp[$j] = $dt0[$dw >> 24 & 0x000000FF] ^ + $dt1[$dw >> 16 & 0x000000FF] ^ + $dt2[$dw >> 8 & 0x000000FF] ^ + $dt3[$dw & 0x000000FF]; + $j++; + } + $this->dw[$row] = $temp; + } + + $col = 0; + $row++; + } + $this->w[$row][$col] = $w[$i]; + } + + $this->dw[$row] = $this->w[$row]; + + // Converting to 1-dim key arrays (both ascending) + $this->dw = array_reverse($this->dw); + $w = array_pop($this->w); + $dw = array_pop($this->dw); + foreach ($this->w as $r => $wr) { + foreach ($wr as $c => $wc) { + $w[] = $wc; + $dw[] = $this->dw[$r][$c]; + } + } + $this->w = $w; + $this->dw = $dw; + } + + /** + * Performs S-Box substitutions + * + * @access private + * @param int $word + */ + function _subWord($word) + { + static $sbox; + if (empty($sbox)) { + list(, , , , $sbox) = $this->_getTables(); + } + + return $sbox[$word & 0x000000FF] | + ($sbox[$word >> 8 & 0x000000FF] << 8) | + ($sbox[$word >> 16 & 0x000000FF] << 16) | + ($sbox[$word >> 24 & 0x000000FF] << 24); + } + + /** + * Provides the mixColumns and sboxes tables + * + * @see self::_encryptBlock() + * @see self::_setupInlineCrypt() + * @see self::_subWord() + * @access private + * @return array &$tables + */ + function &_getTables() + { + static $tables; + if (empty($tables)) { + // according to (section 5.2.1), + // precomputed tables can be used in the mixColumns phase. in that example, they're assigned t0...t3, so + // those are the names we'll use. + $t3 = array_map('intval', array( + // with array_map('intval', ...) we ensure we have only int's and not + // some slower floats converted by php automatically on high values + 0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491, + 0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC, + 0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB, + 0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B, + 0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83, + 0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A, + 0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F, + 0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA, + 0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B, + 0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713, + 0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6, + 0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85, + 0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411, + 0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B, + 0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1, + 0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF, + 0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E, + 0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6, + 0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B, + 0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD, + 0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8, + 0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2, + 0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049, + 0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810, + 0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197, + 0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F, + 0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C, + 0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927, + 0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733, + 0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5, + 0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0, + 0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C + )); + + foreach ($t3 as $t3i) { + $t0[] = (($t3i << 24) & 0xFF000000) | (($t3i >> 8) & 0x00FFFFFF); + $t1[] = (($t3i << 16) & 0xFFFF0000) | (($t3i >> 16) & 0x0000FFFF); + $t2[] = (($t3i << 8) & 0xFFFFFF00) | (($t3i >> 24) & 0x000000FF); + } + + $tables = array( + // The Precomputed mixColumns tables t0 - t3 + $t0, + $t1, + $t2, + $t3, + // The SubByte S-Box + array( + 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, + 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, + 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, + 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, + 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, + 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, + 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, + 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, + 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, + 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, + 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, + 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, + 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, + 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, + 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, + 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 + ) + ); + } + return $tables; + } + + /** + * Provides the inverse mixColumns and inverse sboxes tables + * + * @see self::_decryptBlock() + * @see self::_setupInlineCrypt() + * @see self::_setupKey() + * @access private + * @return array &$tables + */ + function &_getInvTables() + { + static $tables; + if (empty($tables)) { + $dt3 = array_map('intval', array( + 0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B, + 0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5, + 0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B, + 0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E, + 0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D, + 0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9, + 0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66, + 0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED, + 0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4, + 0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD, + 0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60, + 0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79, + 0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C, + 0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24, + 0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C, + 0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814, + 0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B, + 0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084, + 0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077, + 0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22, + 0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F, + 0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582, + 0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB, + 0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF, + 0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035, + 0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17, + 0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46, + 0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D, + 0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A, + 0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678, + 0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF, + 0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0 + )); + + foreach ($dt3 as $dt3i) { + $dt0[] = (($dt3i << 24) & 0xFF000000) | (($dt3i >> 8) & 0x00FFFFFF); + $dt1[] = (($dt3i << 16) & 0xFFFF0000) | (($dt3i >> 16) & 0x0000FFFF); + $dt2[] = (($dt3i << 8) & 0xFFFFFF00) | (($dt3i >> 24) & 0x000000FF); + }; + + $tables = array( + // The Precomputed inverse mixColumns tables dt0 - dt3 + $dt0, + $dt1, + $dt2, + $dt3, + // The inverse SubByte S-Box + array( + 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, + 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, + 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, + 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, + 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, + 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, + 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, + 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, + 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, + 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, + 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, + 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, + 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, + 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, + 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D + ) + ); + } + return $tables; + } + + /** + * Setup the performance-optimized function for de/encrypt() + * + * @see \phpseclib\Crypt\Base::_setupInlineCrypt() + * @access private + */ + function _setupInlineCrypt() + { + // Note: _setupInlineCrypt() will be called only if $this->changed === true + // So here we are'nt under the same heavy timing-stress as we are in _de/encryptBlock() or de/encrypt(). + // However...the here generated function- $code, stored as php callback in $this->inline_crypt, must work as fast as even possible. + + $lambda_functions =& self::_getLambdaFunctions(); + + // We create max. 10 hi-optimized code for memory reason. Means: For each $key one ultra fast inline-crypt function. + // (Currently, for Crypt_Rijndael/AES, one generated $lambda_function cost on php5.5@32bit ~80kb unfreeable mem and ~130kb on php5.5@64bit) + // After that, we'll still create very fast optimized code but not the hi-ultimative code, for each $mode one. + $gen_hi_opt_code = (bool)(count($lambda_functions) < 10); + + // Generation of a uniqe hash for our generated code + $code_hash = "Crypt_Rijndael, {$this->mode}, {$this->Nr}, {$this->Nb}"; + if ($gen_hi_opt_code) { + $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key); + } + + if (!isset($lambda_functions[$code_hash])) { + switch (true) { + case $gen_hi_opt_code: + // The hi-optimized $lambda_functions will use the key-words hardcoded for better performance. + $w = $this->w; + $dw = $this->dw; + $init_encrypt = ''; + $init_decrypt = ''; + break; + default: + for ($i = 0, $cw = count($this->w); $i < $cw; ++$i) { + $w[] = '$w[' . $i . ']'; + $dw[] = '$dw[' . $i . ']'; + } + $init_encrypt = '$w = $self->w;'; + $init_decrypt = '$dw = $self->dw;'; + } + + $Nr = $this->Nr; + $Nb = $this->Nb; + $c = $this->c; + + // Generating encrypt code: + $init_encrypt.= ' + static $tables; + if (empty($tables)) { + $tables = &$self->_getTables(); + } + $t0 = $tables[0]; + $t1 = $tables[1]; + $t2 = $tables[2]; + $t3 = $tables[3]; + $sbox = $tables[4]; + '; + + $s = 'e'; + $e = 's'; + $wc = $Nb - 1; + + // Preround: addRoundKey + $encrypt_block = '$in = unpack("N*", $in);'."\n"; + for ($i = 0; $i < $Nb; ++$i) { + $encrypt_block .= '$s'.$i.' = $in['.($i + 1).'] ^ '.$w[++$wc].";\n"; + } + + // Mainrounds: shiftRows + subWord + mixColumns + addRoundKey + for ($round = 1; $round < $Nr; ++$round) { + list($s, $e) = array($e, $s); + for ($i = 0; $i < $Nb; ++$i) { + $encrypt_block.= + '$'.$e.$i.' = + $t0[($'.$s.$i .' >> 24) & 0xff] ^ + $t1[($'.$s.(($i + $c[1]) % $Nb).' >> 16) & 0xff] ^ + $t2[($'.$s.(($i + $c[2]) % $Nb).' >> 8) & 0xff] ^ + $t3[ $'.$s.(($i + $c[3]) % $Nb).' & 0xff] ^ + '.$w[++$wc].";\n"; + } + } + + // Finalround: subWord + shiftRows + addRoundKey + for ($i = 0; $i < $Nb; ++$i) { + $encrypt_block.= + '$'.$e.$i.' = + $sbox[ $'.$e.$i.' & 0xff] | + ($sbox[($'.$e.$i.' >> 8) & 0xff] << 8) | + ($sbox[($'.$e.$i.' >> 16) & 0xff] << 16) | + ($sbox[($'.$e.$i.' >> 24) & 0xff] << 24);'."\n"; + } + $encrypt_block .= '$in = pack("N*"'."\n"; + for ($i = 0; $i < $Nb; ++$i) { + $encrypt_block.= ', + ($'.$e.$i .' & '.((int)0xFF000000).') ^ + ($'.$e.(($i + $c[1]) % $Nb).' & 0x00FF0000 ) ^ + ($'.$e.(($i + $c[2]) % $Nb).' & 0x0000FF00 ) ^ + ($'.$e.(($i + $c[3]) % $Nb).' & 0x000000FF ) ^ + '.$w[$i]."\n"; + } + $encrypt_block .= ');'; + + // Generating decrypt code: + $init_decrypt.= ' + static $invtables; + if (empty($invtables)) { + $invtables = &$self->_getInvTables(); + } + $dt0 = $invtables[0]; + $dt1 = $invtables[1]; + $dt2 = $invtables[2]; + $dt3 = $invtables[3]; + $isbox = $invtables[4]; + '; + + $s = 'e'; + $e = 's'; + $wc = $Nb - 1; + + // Preround: addRoundKey + $decrypt_block = '$in = unpack("N*", $in);'."\n"; + for ($i = 0; $i < $Nb; ++$i) { + $decrypt_block .= '$s'.$i.' = $in['.($i + 1).'] ^ '.$dw[++$wc].';'."\n"; + } + + // Mainrounds: shiftRows + subWord + mixColumns + addRoundKey + for ($round = 1; $round < $Nr; ++$round) { + list($s, $e) = array($e, $s); + for ($i = 0; $i < $Nb; ++$i) { + $decrypt_block.= + '$'.$e.$i.' = + $dt0[($'.$s.$i .' >> 24) & 0xff] ^ + $dt1[($'.$s.(($Nb + $i - $c[1]) % $Nb).' >> 16) & 0xff] ^ + $dt2[($'.$s.(($Nb + $i - $c[2]) % $Nb).' >> 8) & 0xff] ^ + $dt3[ $'.$s.(($Nb + $i - $c[3]) % $Nb).' & 0xff] ^ + '.$dw[++$wc].";\n"; + } + } + + // Finalround: subWord + shiftRows + addRoundKey + for ($i = 0; $i < $Nb; ++$i) { + $decrypt_block.= + '$'.$e.$i.' = + $isbox[ $'.$e.$i.' & 0xff] | + ($isbox[($'.$e.$i.' >> 8) & 0xff] << 8) | + ($isbox[($'.$e.$i.' >> 16) & 0xff] << 16) | + ($isbox[($'.$e.$i.' >> 24) & 0xff] << 24);'."\n"; + } + $decrypt_block .= '$in = pack("N*"'."\n"; + for ($i = 0; $i < $Nb; ++$i) { + $decrypt_block.= ', + ($'.$e.$i. ' & '.((int)0xFF000000).') ^ + ($'.$e.(($Nb + $i - $c[1]) % $Nb).' & 0x00FF0000 ) ^ + ($'.$e.(($Nb + $i - $c[2]) % $Nb).' & 0x0000FF00 ) ^ + ($'.$e.(($Nb + $i - $c[3]) % $Nb).' & 0x000000FF ) ^ + '.$dw[$i]."\n"; + } + $decrypt_block .= ');'; + + $lambda_functions[$code_hash] = $this->_createInlineCryptFunction( + array( + 'init_crypt' => '', + 'init_encrypt' => $init_encrypt, + 'init_decrypt' => $init_decrypt, + 'encrypt_block' => $encrypt_block, + 'decrypt_block' => $decrypt_block + ) + ); + } + $this->inline_crypt = $lambda_functions[$code_hash]; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php new file mode 100644 index 000000000..a2c41668a --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php @@ -0,0 +1,460 @@ + + * setKey('abcdefghijklmnopqrstuvwx'); + * + * $size = 10 * 1024; + * $plaintext = ''; + * for ($i = 0; $i < $size; $i++) { + * $plaintext.= 'a'; + * } + * + * echo $des->decrypt($des->encrypt($plaintext)); + * ?> + * + * + * @category Crypt + * @package TripleDES + * @author Jim Wigginton + * @copyright 2007 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Crypt; + +/** + * Pure-PHP implementation of Triple DES. + * + * @package TripleDES + * @author Jim Wigginton + * @access public + */ +class TripleDES extends DES +{ + /** + * Encrypt / decrypt using inner chaining + * + * Inner chaining is used by SSH-1 and is generally considered to be less secure then outer chaining (self::MODE_CBC3). + */ + const MODE_3CBC = -2; + + /** + * Encrypt / decrypt using outer chaining + * + * Outer chaining is used by SSH-2 and when the mode is set to \phpseclib\Crypt\Base::MODE_CBC. + */ + const MODE_CBC3 = Base::MODE_CBC; + + /** + * Key Length (in bytes) + * + * @see \phpseclib\Crypt\TripleDES::setKeyLength() + * @var int + * @access private + */ + var $key_length = 24; + + /** + * The default salt used by setPassword() + * + * @see \phpseclib\Crypt\Base::password_default_salt + * @see \phpseclib\Crypt\Base::setPassword() + * @var string + * @access private + */ + var $password_default_salt = 'phpseclib'; + + /** + * The mcrypt specific name of the cipher + * + * @see \phpseclib\Crypt\DES::cipher_name_mcrypt + * @see \phpseclib\Crypt\Base::cipher_name_mcrypt + * @var string + * @access private + */ + var $cipher_name_mcrypt = 'tripledes'; + + /** + * Optimizing value while CFB-encrypting + * + * @see \phpseclib\Crypt\Base::cfb_init_len + * @var int + * @access private + */ + var $cfb_init_len = 750; + + /** + * max possible size of $key + * + * @see self::setKey() + * @see \phpseclib\Crypt\DES::setKey() + * @var string + * @access private + */ + var $key_length_max = 24; + + /** + * Internal flag whether using self::MODE_3CBC or not + * + * @var bool + * @access private + */ + var $mode_3cbc; + + /** + * The \phpseclib\Crypt\DES objects + * + * Used only if $mode_3cbc === true + * + * @var array + * @access private + */ + var $des; + + /** + * Default Constructor. + * + * Determines whether or not the mcrypt extension should be used. + * + * $mode could be: + * + * - \phpseclib\Crypt\Base::MODE_ECB + * + * - \phpseclib\Crypt\Base::MODE_CBC + * + * - \phpseclib\Crypt\Base::MODE_CTR + * + * - \phpseclib\Crypt\Base::MODE_CFB + * + * - \phpseclib\Crypt\Base::MODE_OFB + * + * - \phpseclib\Crypt\TripleDES::MODE_3CBC + * + * If not explicitly set, \phpseclib\Crypt\Base::MODE_CBC will be used. + * + * @see \phpseclib\Crypt\DES::__construct() + * @see \phpseclib\Crypt\Base::__construct() + * @param int $mode + * @access public + */ + function __construct($mode = Base::MODE_CBC) + { + switch ($mode) { + // In case of self::MODE_3CBC, we init as CRYPT_DES_MODE_CBC + // and additional flag us internally as 3CBC + case self::MODE_3CBC: + parent::__construct(Base::MODE_CBC); + $this->mode_3cbc = true; + + // This three $des'es will do the 3CBC work (if $key > 64bits) + $this->des = array( + new DES(Base::MODE_CBC), + new DES(Base::MODE_CBC), + new DES(Base::MODE_CBC), + ); + + // we're going to be doing the padding, ourselves, so disable it in the \phpseclib\Crypt\DES objects + $this->des[0]->disablePadding(); + $this->des[1]->disablePadding(); + $this->des[2]->disablePadding(); + break; + // If not 3CBC, we init as usual + default: + parent::__construct($mode); + } + } + + /** + * Test for engine validity + * + * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine() + * + * @see \phpseclib\Crypt\Base::__construct() + * @param int $engine + * @access public + * @return bool + */ + function isValidEngine($engine) + { + if ($engine == self::ENGINE_OPENSSL) { + $this->cipher_name_openssl_ecb = 'des-ede3'; + $mode = $this->_openssl_translate_mode(); + $this->cipher_name_openssl = $mode == 'ecb' ? 'des-ede3' : 'des-ede3-' . $mode; + } + + return parent::isValidEngine($engine); + } + + /** + * Sets the initialization vector. (optional) + * + * SetIV is not required when \phpseclib\Crypt\Base::MODE_ECB is being used. If not explicitly set, it'll be assumed + * to be all zero's. + * + * @see \phpseclib\Crypt\Base::setIV() + * @access public + * @param string $iv + */ + function setIV($iv) + { + parent::setIV($iv); + if ($this->mode_3cbc) { + $this->des[0]->setIV($iv); + $this->des[1]->setIV($iv); + $this->des[2]->setIV($iv); + } + } + + /** + * Sets the key length. + * + * Valid key lengths are 64, 128 and 192 + * + * @see \phpseclib\Crypt\Base:setKeyLength() + * @access public + * @param int $length + */ + function setKeyLength($length) + { + $length >>= 3; + switch (true) { + case $length <= 8: + $this->key_length = 8; + break; + case $length <= 16: + $this->key_length = 16; + break; + default: + $this->key_length = 24; + } + + parent::setKeyLength($length); + } + + /** + * Sets the key. + * + * Keys can be of any length. Triple DES, itself, can use 128-bit (eg. strlen($key) == 16) or + * 192-bit (eg. strlen($key) == 24) keys. This function pads and truncates $key as appropriate. + * + * DES also requires that every eighth bit be a parity bit, however, we'll ignore that. + * + * If the key is not explicitly set, it'll be assumed to be all null bytes. + * + * @access public + * @see \phpseclib\Crypt\DES::setKey() + * @see \phpseclib\Crypt\Base::setKey() + * @param string $key + */ + function setKey($key) + { + $length = $this->explicit_key_length ? $this->key_length : strlen($key); + if ($length > 8) { + $key = str_pad(substr($key, 0, 24), 24, chr(0)); + // if $key is between 64 and 128-bits, use the first 64-bits as the last, per this: + // http://php.net/function.mcrypt-encrypt#47973 + $key = $length <= 16 ? substr_replace($key, substr($key, 0, 8), 16) : substr($key, 0, 24); + } else { + $key = str_pad($key, 8, chr(0)); + } + parent::setKey($key); + + // And in case of self::MODE_3CBC: + // if key <= 64bits we not need the 3 $des to work, + // because we will then act as regular DES-CBC with just a <= 64bit key. + // So only if the key > 64bits (> 8 bytes) we will call setKey() for the 3 $des. + if ($this->mode_3cbc && $length > 8) { + $this->des[0]->setKey(substr($key, 0, 8)); + $this->des[1]->setKey(substr($key, 8, 8)); + $this->des[2]->setKey(substr($key, 16, 8)); + } + } + + /** + * Encrypts a message. + * + * @see \phpseclib\Crypt\Base::encrypt() + * @access public + * @param string $plaintext + * @return string $cipertext + */ + function encrypt($plaintext) + { + // parent::en/decrypt() is able to do all the work for all modes and keylengths, + // except for: self::MODE_3CBC (inner chaining CBC) with a key > 64bits + + // if the key is smaller then 8, do what we'd normally do + if ($this->mode_3cbc && strlen($this->key) > 8) { + return $this->des[2]->encrypt( + $this->des[1]->decrypt( + $this->des[0]->encrypt( + $this->_pad($plaintext) + ) + ) + ); + } + + return parent::encrypt($plaintext); + } + + /** + * Decrypts a message. + * + * @see \phpseclib\Crypt\Base::decrypt() + * @access public + * @param string $ciphertext + * @return string $plaintext + */ + function decrypt($ciphertext) + { + if ($this->mode_3cbc && strlen($this->key) > 8) { + return $this->_unpad( + $this->des[0]->decrypt( + $this->des[1]->encrypt( + $this->des[2]->decrypt( + str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, "\0") + ) + ) + ) + ); + } + + return parent::decrypt($ciphertext); + } + + /** + * Treat consecutive "packets" as if they are a continuous buffer. + * + * Say you have a 16-byte plaintext $plaintext. Using the default behavior, the two following code snippets + * will yield different outputs: + * + * + * echo $des->encrypt(substr($plaintext, 0, 8)); + * echo $des->encrypt(substr($plaintext, 8, 8)); + * + * + * echo $des->encrypt($plaintext); + * + * + * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates + * another, as demonstrated with the following: + * + * + * $des->encrypt(substr($plaintext, 0, 8)); + * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8))); + * + * + * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8))); + * + * + * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different + * outputs. The reason is due to the fact that the initialization vector's change after every encryption / + * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant. + * + * Put another way, when the continuous buffer is enabled, the state of the \phpseclib\Crypt\DES() object changes after each + * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that + * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them), + * however, they are also less intuitive and more likely to cause you problems. + * + * @see \phpseclib\Crypt\Base::enableContinuousBuffer() + * @see self::disableContinuousBuffer() + * @access public + */ + function enableContinuousBuffer() + { + parent::enableContinuousBuffer(); + if ($this->mode_3cbc) { + $this->des[0]->enableContinuousBuffer(); + $this->des[1]->enableContinuousBuffer(); + $this->des[2]->enableContinuousBuffer(); + } + } + + /** + * Treat consecutive packets as if they are a discontinuous buffer. + * + * The default behavior. + * + * @see \phpseclib\Crypt\Base::disableContinuousBuffer() + * @see self::enableContinuousBuffer() + * @access public + */ + function disableContinuousBuffer() + { + parent::disableContinuousBuffer(); + if ($this->mode_3cbc) { + $this->des[0]->disableContinuousBuffer(); + $this->des[1]->disableContinuousBuffer(); + $this->des[2]->disableContinuousBuffer(); + } + } + + /** + * Creates the key schedule + * + * @see \phpseclib\Crypt\DES::_setupKey() + * @see \phpseclib\Crypt\Base::_setupKey() + * @access private + */ + function _setupKey() + { + switch (true) { + // if $key <= 64bits we configure our internal pure-php cipher engine + // to act as regular [1]DES, not as 3DES. mcrypt.so::tripledes does the same. + case strlen($this->key) <= 8: + $this->des_rounds = 1; + break; + + // otherwise, if $key > 64bits, we configure our engine to work as 3DES. + default: + $this->des_rounds = 3; + + // (only) if 3CBC is used we have, of course, to setup the $des[0-2] keys also separately. + if ($this->mode_3cbc) { + $this->des[0]->_setupKey(); + $this->des[1]->_setupKey(); + $this->des[2]->_setupKey(); + + // because $des[0-2] will, now, do all the work we can return here + // not need unnecessary stress parent::_setupKey() with our, now unused, $key. + return; + } + } + // setup our key + parent::_setupKey(); + } + + /** + * Sets the internal crypt engine + * + * @see \phpseclib\Crypt\Base::__construct() + * @see \phpseclib\Crypt\Base::setPreferredEngine() + * @param int $engine + * @access public + * @return int + */ + function setPreferredEngine($engine) + { + if ($this->mode_3cbc) { + $this->des[0]->setPreferredEngine($engine); + $this->des[1]->setPreferredEngine($engine); + $this->des[2]->setPreferredEngine($engine); + } + + return parent::setPreferredEngine($engine); + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php new file mode 100644 index 000000000..70980a2ff --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php @@ -0,0 +1,816 @@ + + * setKey('12345678901234567890123456789012'); + * + * $plaintext = str_repeat('a', 1024); + * + * echo $twofish->decrypt($twofish->encrypt($plaintext)); + * ?> + * + * + * @category Crypt + * @package Twofish + * @author Jim Wigginton + * @author Hans-Juergen Petrich + * @copyright 2007 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Crypt; + +/** + * Pure-PHP implementation of Twofish. + * + * @package Twofish + * @author Jim Wigginton + * @author Hans-Juergen Petrich + * @access public + */ +class Twofish extends Base +{ + /** + * The mcrypt specific name of the cipher + * + * @see \phpseclib\Crypt\Base::cipher_name_mcrypt + * @var string + * @access private + */ + var $cipher_name_mcrypt = 'twofish'; + + /** + * Optimizing value while CFB-encrypting + * + * @see \phpseclib\Crypt\Base::cfb_init_len + * @var int + * @access private + */ + var $cfb_init_len = 800; + + /** + * Q-Table + * + * @var array + * @access private + */ + var $q0 = array( + 0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76, + 0x9A, 0x92, 0x80, 0x78, 0xE4, 0xDD, 0xD1, 0x38, + 0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C, + 0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48, + 0xF2, 0xD0, 0x8B, 0x30, 0x84, 0x54, 0xDF, 0x23, + 0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82, + 0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C, + 0xA6, 0xEB, 0xA5, 0xBE, 0x16, 0x0C, 0xE3, 0x61, + 0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B, + 0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1, + 0xE1, 0xE6, 0xBD, 0x45, 0xE2, 0xF4, 0xB6, 0x66, + 0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7, + 0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA, + 0xEA, 0x77, 0x39, 0xAF, 0x33, 0xC9, 0x62, 0x71, + 0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8, + 0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7, + 0xA1, 0x1D, 0xAA, 0xED, 0x06, 0x70, 0xB2, 0xD2, + 0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90, + 0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB, + 0x9E, 0x9C, 0x52, 0x1B, 0x5F, 0x93, 0x0A, 0xEF, + 0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B, + 0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64, + 0x2A, 0xCE, 0xCB, 0x2F, 0xFC, 0x97, 0x05, 0x7A, + 0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A, + 0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02, + 0xB8, 0xDA, 0xB0, 0x17, 0x55, 0x1F, 0x8A, 0x7D, + 0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72, + 0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34, + 0x6E, 0x50, 0xDE, 0x68, 0x65, 0xBC, 0xDB, 0xF8, + 0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4, + 0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00, + 0x6F, 0x9D, 0x36, 0x42, 0x4A, 0x5E, 0xC1, 0xE0 + ); + + /** + * Q-Table + * + * @var array + * @access private + */ + var $q1 = array( + 0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8, + 0x4A, 0xD3, 0xE6, 0x6B, 0x45, 0x7D, 0xE8, 0x4B, + 0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1, + 0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F, + 0x5E, 0xBA, 0xAE, 0x5B, 0x8A, 0x00, 0xBC, 0x9D, + 0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5, + 0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3, + 0xB2, 0x73, 0x4C, 0x54, 0x92, 0x74, 0x36, 0x51, + 0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96, + 0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C, + 0x13, 0x95, 0x9C, 0xC7, 0x24, 0x46, 0x3B, 0x70, + 0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8, + 0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC, + 0x03, 0x6F, 0x08, 0xBF, 0x40, 0xE7, 0x2B, 0xE2, + 0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9, + 0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17, + 0x66, 0x94, 0xA1, 0x1D, 0x3D, 0xF0, 0xDE, 0xB3, + 0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E, + 0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49, + 0x81, 0x88, 0xEE, 0x21, 0xC4, 0x1A, 0xEB, 0xD9, + 0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01, + 0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48, + 0x4F, 0xF2, 0x65, 0x8E, 0x78, 0x5C, 0x58, 0x19, + 0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64, + 0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5, + 0xCE, 0xE9, 0x68, 0x44, 0xE0, 0x4D, 0x43, 0x69, + 0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E, + 0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC, + 0x22, 0xC9, 0xC0, 0x9B, 0x89, 0xD4, 0xED, 0xAB, + 0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9, + 0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2, + 0x16, 0x25, 0x86, 0x56, 0x55, 0x09, 0xBE, 0x91 + ); + + /** + * M-Table + * + * @var array + * @access private + */ + var $m0 = array( + 0xBCBC3275, 0xECEC21F3, 0x202043C6, 0xB3B3C9F4, 0xDADA03DB, 0x02028B7B, 0xE2E22BFB, 0x9E9EFAC8, + 0xC9C9EC4A, 0xD4D409D3, 0x18186BE6, 0x1E1E9F6B, 0x98980E45, 0xB2B2387D, 0xA6A6D2E8, 0x2626B74B, + 0x3C3C57D6, 0x93938A32, 0x8282EED8, 0x525298FD, 0x7B7BD437, 0xBBBB3771, 0x5B5B97F1, 0x474783E1, + 0x24243C30, 0x5151E20F, 0xBABAC6F8, 0x4A4AF31B, 0xBFBF4887, 0x0D0D70FA, 0xB0B0B306, 0x7575DE3F, + 0xD2D2FD5E, 0x7D7D20BA, 0x666631AE, 0x3A3AA35B, 0x59591C8A, 0x00000000, 0xCDCD93BC, 0x1A1AE09D, + 0xAEAE2C6D, 0x7F7FABC1, 0x2B2BC7B1, 0xBEBEB90E, 0xE0E0A080, 0x8A8A105D, 0x3B3B52D2, 0x6464BAD5, + 0xD8D888A0, 0xE7E7A584, 0x5F5FE807, 0x1B1B1114, 0x2C2CC2B5, 0xFCFCB490, 0x3131272C, 0x808065A3, + 0x73732AB2, 0x0C0C8173, 0x79795F4C, 0x6B6B4154, 0x4B4B0292, 0x53536974, 0x94948F36, 0x83831F51, + 0x2A2A3638, 0xC4C49CB0, 0x2222C8BD, 0xD5D5F85A, 0xBDBDC3FC, 0x48487860, 0xFFFFCE62, 0x4C4C0796, + 0x4141776C, 0xC7C7E642, 0xEBEB24F7, 0x1C1C1410, 0x5D5D637C, 0x36362228, 0x6767C027, 0xE9E9AF8C, + 0x4444F913, 0x1414EA95, 0xF5F5BB9C, 0xCFCF18C7, 0x3F3F2D24, 0xC0C0E346, 0x7272DB3B, 0x54546C70, + 0x29294CCA, 0xF0F035E3, 0x0808FE85, 0xC6C617CB, 0xF3F34F11, 0x8C8CE4D0, 0xA4A45993, 0xCACA96B8, + 0x68683BA6, 0xB8B84D83, 0x38382820, 0xE5E52EFF, 0xADAD569F, 0x0B0B8477, 0xC8C81DC3, 0x9999FFCC, + 0x5858ED03, 0x19199A6F, 0x0E0E0A08, 0x95957EBF, 0x70705040, 0xF7F730E7, 0x6E6ECF2B, 0x1F1F6EE2, + 0xB5B53D79, 0x09090F0C, 0x616134AA, 0x57571682, 0x9F9F0B41, 0x9D9D803A, 0x111164EA, 0x2525CDB9, + 0xAFAFDDE4, 0x4545089A, 0xDFDF8DA4, 0xA3A35C97, 0xEAEAD57E, 0x353558DA, 0xEDEDD07A, 0x4343FC17, + 0xF8F8CB66, 0xFBFBB194, 0x3737D3A1, 0xFAFA401D, 0xC2C2683D, 0xB4B4CCF0, 0x32325DDE, 0x9C9C71B3, + 0x5656E70B, 0xE3E3DA72, 0x878760A7, 0x15151B1C, 0xF9F93AEF, 0x6363BFD1, 0x3434A953, 0x9A9A853E, + 0xB1B1428F, 0x7C7CD133, 0x88889B26, 0x3D3DA65F, 0xA1A1D7EC, 0xE4E4DF76, 0x8181942A, 0x91910149, + 0x0F0FFB81, 0xEEEEAA88, 0x161661EE, 0xD7D77321, 0x9797F5C4, 0xA5A5A81A, 0xFEFE3FEB, 0x6D6DB5D9, + 0x7878AEC5, 0xC5C56D39, 0x1D1DE599, 0x7676A4CD, 0x3E3EDCAD, 0xCBCB6731, 0xB6B6478B, 0xEFEF5B01, + 0x12121E18, 0x6060C523, 0x6A6AB0DD, 0x4D4DF61F, 0xCECEE94E, 0xDEDE7C2D, 0x55559DF9, 0x7E7E5A48, + 0x2121B24F, 0x03037AF2, 0xA0A02665, 0x5E5E198E, 0x5A5A6678, 0x65654B5C, 0x62624E58, 0xFDFD4519, + 0x0606F48D, 0x404086E5, 0xF2F2BE98, 0x3333AC57, 0x17179067, 0x05058E7F, 0xE8E85E05, 0x4F4F7D64, + 0x89896AAF, 0x10109563, 0x74742FB6, 0x0A0A75FE, 0x5C5C92F5, 0x9B9B74B7, 0x2D2D333C, 0x3030D6A5, + 0x2E2E49CE, 0x494989E9, 0x46467268, 0x77775544, 0xA8A8D8E0, 0x9696044D, 0x2828BD43, 0xA9A92969, + 0xD9D97929, 0x8686912E, 0xD1D187AC, 0xF4F44A15, 0x8D8D1559, 0xD6D682A8, 0xB9B9BC0A, 0x42420D9E, + 0xF6F6C16E, 0x2F2FB847, 0xDDDD06DF, 0x23233934, 0xCCCC6235, 0xF1F1C46A, 0xC1C112CF, 0x8585EBDC, + 0x8F8F9E22, 0x7171A1C9, 0x9090F0C0, 0xAAAA539B, 0x0101F189, 0x8B8BE1D4, 0x4E4E8CED, 0x8E8E6FAB, + 0xABABA212, 0x6F6F3EA2, 0xE6E6540D, 0xDBDBF252, 0x92927BBB, 0xB7B7B602, 0x6969CA2F, 0x3939D9A9, + 0xD3D30CD7, 0xA7A72361, 0xA2A2AD1E, 0xC3C399B4, 0x6C6C4450, 0x07070504, 0x04047FF6, 0x272746C2, + 0xACACA716, 0xD0D07625, 0x50501386, 0xDCDCF756, 0x84841A55, 0xE1E15109, 0x7A7A25BE, 0x1313EF91 + ); + + /** + * M-Table + * + * @var array + * @access private + */ + var $m1 = array( + 0xA9D93939, 0x67901717, 0xB3719C9C, 0xE8D2A6A6, 0x04050707, 0xFD985252, 0xA3658080, 0x76DFE4E4, + 0x9A084545, 0x92024B4B, 0x80A0E0E0, 0x78665A5A, 0xE4DDAFAF, 0xDDB06A6A, 0xD1BF6363, 0x38362A2A, + 0x0D54E6E6, 0xC6432020, 0x3562CCCC, 0x98BEF2F2, 0x181E1212, 0xF724EBEB, 0xECD7A1A1, 0x6C774141, + 0x43BD2828, 0x7532BCBC, 0x37D47B7B, 0x269B8888, 0xFA700D0D, 0x13F94444, 0x94B1FBFB, 0x485A7E7E, + 0xF27A0303, 0xD0E48C8C, 0x8B47B6B6, 0x303C2424, 0x84A5E7E7, 0x54416B6B, 0xDF06DDDD, 0x23C56060, + 0x1945FDFD, 0x5BA33A3A, 0x3D68C2C2, 0x59158D8D, 0xF321ECEC, 0xAE316666, 0xA23E6F6F, 0x82165757, + 0x63951010, 0x015BEFEF, 0x834DB8B8, 0x2E918686, 0xD9B56D6D, 0x511F8383, 0x9B53AAAA, 0x7C635D5D, + 0xA63B6868, 0xEB3FFEFE, 0xA5D63030, 0xBE257A7A, 0x16A7ACAC, 0x0C0F0909, 0xE335F0F0, 0x6123A7A7, + 0xC0F09090, 0x8CAFE9E9, 0x3A809D9D, 0xF5925C5C, 0x73810C0C, 0x2C273131, 0x2576D0D0, 0x0BE75656, + 0xBB7B9292, 0x4EE9CECE, 0x89F10101, 0x6B9F1E1E, 0x53A93434, 0x6AC4F1F1, 0xB499C3C3, 0xF1975B5B, + 0xE1834747, 0xE66B1818, 0xBDC82222, 0x450E9898, 0xE26E1F1F, 0xF4C9B3B3, 0xB62F7474, 0x66CBF8F8, + 0xCCFF9999, 0x95EA1414, 0x03ED5858, 0x56F7DCDC, 0xD4E18B8B, 0x1C1B1515, 0x1EADA2A2, 0xD70CD3D3, + 0xFB2BE2E2, 0xC31DC8C8, 0x8E195E5E, 0xB5C22C2C, 0xE9894949, 0xCF12C1C1, 0xBF7E9595, 0xBA207D7D, + 0xEA641111, 0x77840B0B, 0x396DC5C5, 0xAF6A8989, 0x33D17C7C, 0xC9A17171, 0x62CEFFFF, 0x7137BBBB, + 0x81FB0F0F, 0x793DB5B5, 0x0951E1E1, 0xADDC3E3E, 0x242D3F3F, 0xCDA47676, 0xF99D5555, 0xD8EE8282, + 0xE5864040, 0xC5AE7878, 0xB9CD2525, 0x4D049696, 0x44557777, 0x080A0E0E, 0x86135050, 0xE730F7F7, + 0xA1D33737, 0x1D40FAFA, 0xAA346161, 0xED8C4E4E, 0x06B3B0B0, 0x706C5454, 0xB22A7373, 0xD2523B3B, + 0x410B9F9F, 0x7B8B0202, 0xA088D8D8, 0x114FF3F3, 0x3167CBCB, 0xC2462727, 0x27C06767, 0x90B4FCFC, + 0x20283838, 0xF67F0404, 0x60784848, 0xFF2EE5E5, 0x96074C4C, 0x5C4B6565, 0xB1C72B2B, 0xAB6F8E8E, + 0x9E0D4242, 0x9CBBF5F5, 0x52F2DBDB, 0x1BF34A4A, 0x5FA63D3D, 0x9359A4A4, 0x0ABCB9B9, 0xEF3AF9F9, + 0x91EF1313, 0x85FE0808, 0x49019191, 0xEE611616, 0x2D7CDEDE, 0x4FB22121, 0x8F42B1B1, 0x3BDB7272, + 0x47B82F2F, 0x8748BFBF, 0x6D2CAEAE, 0x46E3C0C0, 0xD6573C3C, 0x3E859A9A, 0x6929A9A9, 0x647D4F4F, + 0x2A948181, 0xCE492E2E, 0xCB17C6C6, 0x2FCA6969, 0xFCC3BDBD, 0x975CA3A3, 0x055EE8E8, 0x7AD0EDED, + 0xAC87D1D1, 0x7F8E0505, 0xD5BA6464, 0x1AA8A5A5, 0x4BB72626, 0x0EB9BEBE, 0xA7608787, 0x5AF8D5D5, + 0x28223636, 0x14111B1B, 0x3FDE7575, 0x2979D9D9, 0x88AAEEEE, 0x3C332D2D, 0x4C5F7979, 0x02B6B7B7, + 0xB896CACA, 0xDA583535, 0xB09CC4C4, 0x17FC4343, 0x551A8484, 0x1FF64D4D, 0x8A1C5959, 0x7D38B2B2, + 0x57AC3333, 0xC718CFCF, 0x8DF40606, 0x74695353, 0xB7749B9B, 0xC4F59797, 0x9F56ADAD, 0x72DAE3E3, + 0x7ED5EAEA, 0x154AF4F4, 0x229E8F8F, 0x12A2ABAB, 0x584E6262, 0x07E85F5F, 0x99E51D1D, 0x34392323, + 0x6EC1F6F6, 0x50446C6C, 0xDE5D3232, 0x68724646, 0x6526A0A0, 0xBC93CDCD, 0xDB03DADA, 0xF8C6BABA, + 0xC8FA9E9E, 0xA882D6D6, 0x2BCF6E6E, 0x40507070, 0xDCEB8585, 0xFE750A0A, 0x328A9393, 0xA48DDFDF, + 0xCA4C2929, 0x10141C1C, 0x2173D7D7, 0xF0CCB4B4, 0xD309D4D4, 0x5D108A8A, 0x0FE25151, 0x00000000, + 0x6F9A1919, 0x9DE01A1A, 0x368F9494, 0x42E6C7C7, 0x4AECC9C9, 0x5EFDD2D2, 0xC1AB7F7F, 0xE0D8A8A8 + ); + + /** + * M-Table + * + * @var array + * @access private + */ + var $m2 = array( + 0xBC75BC32, 0xECF3EC21, 0x20C62043, 0xB3F4B3C9, 0xDADBDA03, 0x027B028B, 0xE2FBE22B, 0x9EC89EFA, + 0xC94AC9EC, 0xD4D3D409, 0x18E6186B, 0x1E6B1E9F, 0x9845980E, 0xB27DB238, 0xA6E8A6D2, 0x264B26B7, + 0x3CD63C57, 0x9332938A, 0x82D882EE, 0x52FD5298, 0x7B377BD4, 0xBB71BB37, 0x5BF15B97, 0x47E14783, + 0x2430243C, 0x510F51E2, 0xBAF8BAC6, 0x4A1B4AF3, 0xBF87BF48, 0x0DFA0D70, 0xB006B0B3, 0x753F75DE, + 0xD25ED2FD, 0x7DBA7D20, 0x66AE6631, 0x3A5B3AA3, 0x598A591C, 0x00000000, 0xCDBCCD93, 0x1A9D1AE0, + 0xAE6DAE2C, 0x7FC17FAB, 0x2BB12BC7, 0xBE0EBEB9, 0xE080E0A0, 0x8A5D8A10, 0x3BD23B52, 0x64D564BA, + 0xD8A0D888, 0xE784E7A5, 0x5F075FE8, 0x1B141B11, 0x2CB52CC2, 0xFC90FCB4, 0x312C3127, 0x80A38065, + 0x73B2732A, 0x0C730C81, 0x794C795F, 0x6B546B41, 0x4B924B02, 0x53745369, 0x9436948F, 0x8351831F, + 0x2A382A36, 0xC4B0C49C, 0x22BD22C8, 0xD55AD5F8, 0xBDFCBDC3, 0x48604878, 0xFF62FFCE, 0x4C964C07, + 0x416C4177, 0xC742C7E6, 0xEBF7EB24, 0x1C101C14, 0x5D7C5D63, 0x36283622, 0x672767C0, 0xE98CE9AF, + 0x441344F9, 0x149514EA, 0xF59CF5BB, 0xCFC7CF18, 0x3F243F2D, 0xC046C0E3, 0x723B72DB, 0x5470546C, + 0x29CA294C, 0xF0E3F035, 0x088508FE, 0xC6CBC617, 0xF311F34F, 0x8CD08CE4, 0xA493A459, 0xCAB8CA96, + 0x68A6683B, 0xB883B84D, 0x38203828, 0xE5FFE52E, 0xAD9FAD56, 0x0B770B84, 0xC8C3C81D, 0x99CC99FF, + 0x580358ED, 0x196F199A, 0x0E080E0A, 0x95BF957E, 0x70407050, 0xF7E7F730, 0x6E2B6ECF, 0x1FE21F6E, + 0xB579B53D, 0x090C090F, 0x61AA6134, 0x57825716, 0x9F419F0B, 0x9D3A9D80, 0x11EA1164, 0x25B925CD, + 0xAFE4AFDD, 0x459A4508, 0xDFA4DF8D, 0xA397A35C, 0xEA7EEAD5, 0x35DA3558, 0xED7AEDD0, 0x431743FC, + 0xF866F8CB, 0xFB94FBB1, 0x37A137D3, 0xFA1DFA40, 0xC23DC268, 0xB4F0B4CC, 0x32DE325D, 0x9CB39C71, + 0x560B56E7, 0xE372E3DA, 0x87A78760, 0x151C151B, 0xF9EFF93A, 0x63D163BF, 0x345334A9, 0x9A3E9A85, + 0xB18FB142, 0x7C337CD1, 0x8826889B, 0x3D5F3DA6, 0xA1ECA1D7, 0xE476E4DF, 0x812A8194, 0x91499101, + 0x0F810FFB, 0xEE88EEAA, 0x16EE1661, 0xD721D773, 0x97C497F5, 0xA51AA5A8, 0xFEEBFE3F, 0x6DD96DB5, + 0x78C578AE, 0xC539C56D, 0x1D991DE5, 0x76CD76A4, 0x3EAD3EDC, 0xCB31CB67, 0xB68BB647, 0xEF01EF5B, + 0x1218121E, 0x602360C5, 0x6ADD6AB0, 0x4D1F4DF6, 0xCE4ECEE9, 0xDE2DDE7C, 0x55F9559D, 0x7E487E5A, + 0x214F21B2, 0x03F2037A, 0xA065A026, 0x5E8E5E19, 0x5A785A66, 0x655C654B, 0x6258624E, 0xFD19FD45, + 0x068D06F4, 0x40E54086, 0xF298F2BE, 0x335733AC, 0x17671790, 0x057F058E, 0xE805E85E, 0x4F644F7D, + 0x89AF896A, 0x10631095, 0x74B6742F, 0x0AFE0A75, 0x5CF55C92, 0x9BB79B74, 0x2D3C2D33, 0x30A530D6, + 0x2ECE2E49, 0x49E94989, 0x46684672, 0x77447755, 0xA8E0A8D8, 0x964D9604, 0x284328BD, 0xA969A929, + 0xD929D979, 0x862E8691, 0xD1ACD187, 0xF415F44A, 0x8D598D15, 0xD6A8D682, 0xB90AB9BC, 0x429E420D, + 0xF66EF6C1, 0x2F472FB8, 0xDDDFDD06, 0x23342339, 0xCC35CC62, 0xF16AF1C4, 0xC1CFC112, 0x85DC85EB, + 0x8F228F9E, 0x71C971A1, 0x90C090F0, 0xAA9BAA53, 0x018901F1, 0x8BD48BE1, 0x4EED4E8C, 0x8EAB8E6F, + 0xAB12ABA2, 0x6FA26F3E, 0xE60DE654, 0xDB52DBF2, 0x92BB927B, 0xB702B7B6, 0x692F69CA, 0x39A939D9, + 0xD3D7D30C, 0xA761A723, 0xA21EA2AD, 0xC3B4C399, 0x6C506C44, 0x07040705, 0x04F6047F, 0x27C22746, + 0xAC16ACA7, 0xD025D076, 0x50865013, 0xDC56DCF7, 0x8455841A, 0xE109E151, 0x7ABE7A25, 0x139113EF + ); + + /** + * M-Table + * + * @var array + * @access private + */ + var $m3 = array( + 0xD939A9D9, 0x90176790, 0x719CB371, 0xD2A6E8D2, 0x05070405, 0x9852FD98, 0x6580A365, 0xDFE476DF, + 0x08459A08, 0x024B9202, 0xA0E080A0, 0x665A7866, 0xDDAFE4DD, 0xB06ADDB0, 0xBF63D1BF, 0x362A3836, + 0x54E60D54, 0x4320C643, 0x62CC3562, 0xBEF298BE, 0x1E12181E, 0x24EBF724, 0xD7A1ECD7, 0x77416C77, + 0xBD2843BD, 0x32BC7532, 0xD47B37D4, 0x9B88269B, 0x700DFA70, 0xF94413F9, 0xB1FB94B1, 0x5A7E485A, + 0x7A03F27A, 0xE48CD0E4, 0x47B68B47, 0x3C24303C, 0xA5E784A5, 0x416B5441, 0x06DDDF06, 0xC56023C5, + 0x45FD1945, 0xA33A5BA3, 0x68C23D68, 0x158D5915, 0x21ECF321, 0x3166AE31, 0x3E6FA23E, 0x16578216, + 0x95106395, 0x5BEF015B, 0x4DB8834D, 0x91862E91, 0xB56DD9B5, 0x1F83511F, 0x53AA9B53, 0x635D7C63, + 0x3B68A63B, 0x3FFEEB3F, 0xD630A5D6, 0x257ABE25, 0xA7AC16A7, 0x0F090C0F, 0x35F0E335, 0x23A76123, + 0xF090C0F0, 0xAFE98CAF, 0x809D3A80, 0x925CF592, 0x810C7381, 0x27312C27, 0x76D02576, 0xE7560BE7, + 0x7B92BB7B, 0xE9CE4EE9, 0xF10189F1, 0x9F1E6B9F, 0xA93453A9, 0xC4F16AC4, 0x99C3B499, 0x975BF197, + 0x8347E183, 0x6B18E66B, 0xC822BDC8, 0x0E98450E, 0x6E1FE26E, 0xC9B3F4C9, 0x2F74B62F, 0xCBF866CB, + 0xFF99CCFF, 0xEA1495EA, 0xED5803ED, 0xF7DC56F7, 0xE18BD4E1, 0x1B151C1B, 0xADA21EAD, 0x0CD3D70C, + 0x2BE2FB2B, 0x1DC8C31D, 0x195E8E19, 0xC22CB5C2, 0x8949E989, 0x12C1CF12, 0x7E95BF7E, 0x207DBA20, + 0x6411EA64, 0x840B7784, 0x6DC5396D, 0x6A89AF6A, 0xD17C33D1, 0xA171C9A1, 0xCEFF62CE, 0x37BB7137, + 0xFB0F81FB, 0x3DB5793D, 0x51E10951, 0xDC3EADDC, 0x2D3F242D, 0xA476CDA4, 0x9D55F99D, 0xEE82D8EE, + 0x8640E586, 0xAE78C5AE, 0xCD25B9CD, 0x04964D04, 0x55774455, 0x0A0E080A, 0x13508613, 0x30F7E730, + 0xD337A1D3, 0x40FA1D40, 0x3461AA34, 0x8C4EED8C, 0xB3B006B3, 0x6C54706C, 0x2A73B22A, 0x523BD252, + 0x0B9F410B, 0x8B027B8B, 0x88D8A088, 0x4FF3114F, 0x67CB3167, 0x4627C246, 0xC06727C0, 0xB4FC90B4, + 0x28382028, 0x7F04F67F, 0x78486078, 0x2EE5FF2E, 0x074C9607, 0x4B655C4B, 0xC72BB1C7, 0x6F8EAB6F, + 0x0D429E0D, 0xBBF59CBB, 0xF2DB52F2, 0xF34A1BF3, 0xA63D5FA6, 0x59A49359, 0xBCB90ABC, 0x3AF9EF3A, + 0xEF1391EF, 0xFE0885FE, 0x01914901, 0x6116EE61, 0x7CDE2D7C, 0xB2214FB2, 0x42B18F42, 0xDB723BDB, + 0xB82F47B8, 0x48BF8748, 0x2CAE6D2C, 0xE3C046E3, 0x573CD657, 0x859A3E85, 0x29A96929, 0x7D4F647D, + 0x94812A94, 0x492ECE49, 0x17C6CB17, 0xCA692FCA, 0xC3BDFCC3, 0x5CA3975C, 0x5EE8055E, 0xD0ED7AD0, + 0x87D1AC87, 0x8E057F8E, 0xBA64D5BA, 0xA8A51AA8, 0xB7264BB7, 0xB9BE0EB9, 0x6087A760, 0xF8D55AF8, + 0x22362822, 0x111B1411, 0xDE753FDE, 0x79D92979, 0xAAEE88AA, 0x332D3C33, 0x5F794C5F, 0xB6B702B6, + 0x96CAB896, 0x5835DA58, 0x9CC4B09C, 0xFC4317FC, 0x1A84551A, 0xF64D1FF6, 0x1C598A1C, 0x38B27D38, + 0xAC3357AC, 0x18CFC718, 0xF4068DF4, 0x69537469, 0x749BB774, 0xF597C4F5, 0x56AD9F56, 0xDAE372DA, + 0xD5EA7ED5, 0x4AF4154A, 0x9E8F229E, 0xA2AB12A2, 0x4E62584E, 0xE85F07E8, 0xE51D99E5, 0x39233439, + 0xC1F66EC1, 0x446C5044, 0x5D32DE5D, 0x72466872, 0x26A06526, 0x93CDBC93, 0x03DADB03, 0xC6BAF8C6, + 0xFA9EC8FA, 0x82D6A882, 0xCF6E2BCF, 0x50704050, 0xEB85DCEB, 0x750AFE75, 0x8A93328A, 0x8DDFA48D, + 0x4C29CA4C, 0x141C1014, 0x73D72173, 0xCCB4F0CC, 0x09D4D309, 0x108A5D10, 0xE2510FE2, 0x00000000, + 0x9A196F9A, 0xE01A9DE0, 0x8F94368F, 0xE6C742E6, 0xECC94AEC, 0xFDD25EFD, 0xAB7FC1AB, 0xD8A8E0D8 + ); + + /** + * The Key Schedule Array + * + * @var array + * @access private + */ + var $K = array(); + + /** + * The Key depended S-Table 0 + * + * @var array + * @access private + */ + var $S0 = array(); + + /** + * The Key depended S-Table 1 + * + * @var array + * @access private + */ + var $S1 = array(); + + /** + * The Key depended S-Table 2 + * + * @var array + * @access private + */ + var $S2 = array(); + + /** + * The Key depended S-Table 3 + * + * @var array + * @access private + */ + var $S3 = array(); + + /** + * Holds the last used key + * + * @var array + * @access private + */ + var $kl; + + /** + * The Key Length (in bytes) + * + * @see Crypt_Twofish::setKeyLength() + * @var int + * @access private + */ + var $key_length = 16; + + /** + * Sets the key length. + * + * Valid key lengths are 128, 192 or 256 bits + * + * @access public + * @param int $length + */ + function setKeyLength($length) + { + switch (true) { + case $length <= 128: + $this->key_length = 16; + break; + case $length <= 192: + $this->key_length = 24; + break; + default: + $this->key_length = 32; + } + + parent::setKeyLength($length); + } + + /** + * Setup the key (expansion) + * + * @see \phpseclib\Crypt\Base::_setupKey() + * @access private + */ + function _setupKey() + { + if (isset($this->kl['key']) && $this->key === $this->kl['key']) { + // already expanded + return; + } + $this->kl = array('key' => $this->key); + + /* Key expanding and generating the key-depended s-boxes */ + $le_longs = unpack('V*', $this->key); + $key = unpack('C*', $this->key); + $m0 = $this->m0; + $m1 = $this->m1; + $m2 = $this->m2; + $m3 = $this->m3; + $q0 = $this->q0; + $q1 = $this->q1; + + $K = $S0 = $S1 = $S2 = $S3 = array(); + + switch (strlen($this->key)) { + case 16: + list($s7, $s6, $s5, $s4) = $this->_mdsrem($le_longs[1], $le_longs[2]); + list($s3, $s2, $s1, $s0) = $this->_mdsrem($le_longs[3], $le_longs[4]); + for ($i = 0, $j = 1; $i < 40; $i+= 2, $j+= 2) { + $A = $m0[$q0[$q0[$i] ^ $key[ 9]] ^ $key[1]] ^ + $m1[$q0[$q1[$i] ^ $key[10]] ^ $key[2]] ^ + $m2[$q1[$q0[$i] ^ $key[11]] ^ $key[3]] ^ + $m3[$q1[$q1[$i] ^ $key[12]] ^ $key[4]]; + $B = $m0[$q0[$q0[$j] ^ $key[13]] ^ $key[5]] ^ + $m1[$q0[$q1[$j] ^ $key[14]] ^ $key[6]] ^ + $m2[$q1[$q0[$j] ^ $key[15]] ^ $key[7]] ^ + $m3[$q1[$q1[$j] ^ $key[16]] ^ $key[8]]; + $B = ($B << 8) | ($B >> 24 & 0xff); + $A = $this->safe_intval($A + $B); + $K[] = $A; + $A = $this->safe_intval($A + $B); + $K[] = ($A << 9 | $A >> 23 & 0x1ff); + } + for ($i = 0; $i < 256; ++$i) { + $S0[$i] = $m0[$q0[$q0[$i] ^ $s4] ^ $s0]; + $S1[$i] = $m1[$q0[$q1[$i] ^ $s5] ^ $s1]; + $S2[$i] = $m2[$q1[$q0[$i] ^ $s6] ^ $s2]; + $S3[$i] = $m3[$q1[$q1[$i] ^ $s7] ^ $s3]; + } + break; + case 24: + list($sb, $sa, $s9, $s8) = $this->_mdsrem($le_longs[1], $le_longs[2]); + list($s7, $s6, $s5, $s4) = $this->_mdsrem($le_longs[3], $le_longs[4]); + list($s3, $s2, $s1, $s0) = $this->_mdsrem($le_longs[5], $le_longs[6]); + for ($i = 0, $j = 1; $i < 40; $i+= 2, $j+= 2) { + $A = $m0[$q0[$q0[$q1[$i] ^ $key[17]] ^ $key[ 9]] ^ $key[1]] ^ + $m1[$q0[$q1[$q1[$i] ^ $key[18]] ^ $key[10]] ^ $key[2]] ^ + $m2[$q1[$q0[$q0[$i] ^ $key[19]] ^ $key[11]] ^ $key[3]] ^ + $m3[$q1[$q1[$q0[$i] ^ $key[20]] ^ $key[12]] ^ $key[4]]; + $B = $m0[$q0[$q0[$q1[$j] ^ $key[21]] ^ $key[13]] ^ $key[5]] ^ + $m1[$q0[$q1[$q1[$j] ^ $key[22]] ^ $key[14]] ^ $key[6]] ^ + $m2[$q1[$q0[$q0[$j] ^ $key[23]] ^ $key[15]] ^ $key[7]] ^ + $m3[$q1[$q1[$q0[$j] ^ $key[24]] ^ $key[16]] ^ $key[8]]; + $B = ($B << 8) | ($B >> 24 & 0xff); + $A = $this->safe_intval($A + $B); + $K[] = $A; + $A = $this->safe_intval($A + $B); + $K[] = ($A << 9 | $A >> 23 & 0x1ff); + } + for ($i = 0; $i < 256; ++$i) { + $S0[$i] = $m0[$q0[$q0[$q1[$i] ^ $s8] ^ $s4] ^ $s0]; + $S1[$i] = $m1[$q0[$q1[$q1[$i] ^ $s9] ^ $s5] ^ $s1]; + $S2[$i] = $m2[$q1[$q0[$q0[$i] ^ $sa] ^ $s6] ^ $s2]; + $S3[$i] = $m3[$q1[$q1[$q0[$i] ^ $sb] ^ $s7] ^ $s3]; + } + break; + default: // 32 + list($sf, $se, $sd, $sc) = $this->_mdsrem($le_longs[1], $le_longs[2]); + list($sb, $sa, $s9, $s8) = $this->_mdsrem($le_longs[3], $le_longs[4]); + list($s7, $s6, $s5, $s4) = $this->_mdsrem($le_longs[5], $le_longs[6]); + list($s3, $s2, $s1, $s0) = $this->_mdsrem($le_longs[7], $le_longs[8]); + for ($i = 0, $j = 1; $i < 40; $i+= 2, $j+= 2) { + $A = $m0[$q0[$q0[$q1[$q1[$i] ^ $key[25]] ^ $key[17]] ^ $key[ 9]] ^ $key[1]] ^ + $m1[$q0[$q1[$q1[$q0[$i] ^ $key[26]] ^ $key[18]] ^ $key[10]] ^ $key[2]] ^ + $m2[$q1[$q0[$q0[$q0[$i] ^ $key[27]] ^ $key[19]] ^ $key[11]] ^ $key[3]] ^ + $m3[$q1[$q1[$q0[$q1[$i] ^ $key[28]] ^ $key[20]] ^ $key[12]] ^ $key[4]]; + $B = $m0[$q0[$q0[$q1[$q1[$j] ^ $key[29]] ^ $key[21]] ^ $key[13]] ^ $key[5]] ^ + $m1[$q0[$q1[$q1[$q0[$j] ^ $key[30]] ^ $key[22]] ^ $key[14]] ^ $key[6]] ^ + $m2[$q1[$q0[$q0[$q0[$j] ^ $key[31]] ^ $key[23]] ^ $key[15]] ^ $key[7]] ^ + $m3[$q1[$q1[$q0[$q1[$j] ^ $key[32]] ^ $key[24]] ^ $key[16]] ^ $key[8]]; + $B = ($B << 8) | ($B >> 24 & 0xff); + $A = $this->safe_intval($A + $B); + $K[] = $A; + $A = $this->safe_intval($A + $B); + $K[] = ($A << 9 | $A >> 23 & 0x1ff); + } + for ($i = 0; $i < 256; ++$i) { + $S0[$i] = $m0[$q0[$q0[$q1[$q1[$i] ^ $sc] ^ $s8] ^ $s4] ^ $s0]; + $S1[$i] = $m1[$q0[$q1[$q1[$q0[$i] ^ $sd] ^ $s9] ^ $s5] ^ $s1]; + $S2[$i] = $m2[$q1[$q0[$q0[$q0[$i] ^ $se] ^ $sa] ^ $s6] ^ $s2]; + $S3[$i] = $m3[$q1[$q1[$q0[$q1[$i] ^ $sf] ^ $sb] ^ $s7] ^ $s3]; + } + } + + $this->K = $K; + $this->S0 = $S0; + $this->S1 = $S1; + $this->S2 = $S2; + $this->S3 = $S3; + } + + /** + * _mdsrem function using by the twofish cipher algorithm + * + * @access private + * @param string $A + * @param string $B + * @return array + */ + function _mdsrem($A, $B) + { + // No gain by unrolling this loop. + for ($i = 0; $i < 8; ++$i) { + // Get most significant coefficient. + $t = 0xff & ($B >> 24); + + // Shift the others up. + $B = ($B << 8) | (0xff & ($A >> 24)); + $A<<= 8; + + $u = $t << 1; + + // Subtract the modular polynomial on overflow. + if ($t & 0x80) { + $u^= 0x14d; + } + + // Remove t * (a * x^2 + 1). + $B ^= $t ^ ($u << 16); + + // Form u = a*t + t/a = t*(a + 1/a). + $u^= 0x7fffffff & ($t >> 1); + + // Add the modular polynomial on underflow. + if ($t & 0x01) { + $u^= 0xa6 ; + } + + // Remove t * (a + 1/a) * (x^3 + x). + $B^= ($u << 24) | ($u << 8); + } + + return array( + 0xff & $B >> 24, + 0xff & $B >> 16, + 0xff & $B >> 8, + 0xff & $B); + } + + /** + * Encrypts a block + * + * @access private + * @param string $in + * @return string + */ + function _encryptBlock($in) + { + $S0 = $this->S0; + $S1 = $this->S1; + $S2 = $this->S2; + $S3 = $this->S3; + $K = $this->K; + + $in = unpack("V4", $in); + $R0 = $K[0] ^ $in[1]; + $R1 = $K[1] ^ $in[2]; + $R2 = $K[2] ^ $in[3]; + $R3 = $K[3] ^ $in[4]; + + $ki = 7; + while ($ki < 39) { + $t0 = $S0[ $R0 & 0xff] ^ + $S1[($R0 >> 8) & 0xff] ^ + $S2[($R0 >> 16) & 0xff] ^ + $S3[($R0 >> 24) & 0xff]; + $t1 = $S0[($R1 >> 24) & 0xff] ^ + $S1[ $R1 & 0xff] ^ + $S2[($R1 >> 8) & 0xff] ^ + $S3[($R1 >> 16) & 0xff]; + $R2^= $this->safe_intval($t0 + $t1 + $K[++$ki]); + $R2 = ($R2 >> 1 & 0x7fffffff) | ($R2 << 31); + $R3 = ((($R3 >> 31) & 1) | ($R3 << 1)) ^ $this->safe_intval($t0 + ($t1 << 1) + $K[++$ki]); + + $t0 = $S0[ $R2 & 0xff] ^ + $S1[($R2 >> 8) & 0xff] ^ + $S2[($R2 >> 16) & 0xff] ^ + $S3[($R2 >> 24) & 0xff]; + $t1 = $S0[($R3 >> 24) & 0xff] ^ + $S1[ $R3 & 0xff] ^ + $S2[($R3 >> 8) & 0xff] ^ + $S3[($R3 >> 16) & 0xff]; + $R0^= $this->safe_intval($t0 + $t1 + $K[++$ki]); + $R0 = ($R0 >> 1 & 0x7fffffff) | ($R0 << 31); + $R1 = ((($R1 >> 31) & 1) | ($R1 << 1)) ^ $this->safe_intval($t0 + ($t1 << 1) + $K[++$ki]); + } + + // @codingStandardsIgnoreStart + return pack("V4", $K[4] ^ $R2, + $K[5] ^ $R3, + $K[6] ^ $R0, + $K[7] ^ $R1); + // @codingStandardsIgnoreEnd + } + + /** + * Decrypts a block + * + * @access private + * @param string $in + * @return string + */ + function _decryptBlock($in) + { + $S0 = $this->S0; + $S1 = $this->S1; + $S2 = $this->S2; + $S3 = $this->S3; + $K = $this->K; + + $in = unpack("V4", $in); + $R0 = $K[4] ^ $in[1]; + $R1 = $K[5] ^ $in[2]; + $R2 = $K[6] ^ $in[3]; + $R3 = $K[7] ^ $in[4]; + + $ki = 40; + while ($ki > 8) { + $t0 = $S0[$R0 & 0xff] ^ + $S1[$R0 >> 8 & 0xff] ^ + $S2[$R0 >> 16 & 0xff] ^ + $S3[$R0 >> 24 & 0xff]; + $t1 = $S0[$R1 >> 24 & 0xff] ^ + $S1[$R1 & 0xff] ^ + $S2[$R1 >> 8 & 0xff] ^ + $S3[$R1 >> 16 & 0xff]; + $R3^= $this->safe_intval($t0 + ($t1 << 1) + $K[--$ki]); + $R3 = $R3 >> 1 & 0x7fffffff | $R3 << 31; + $R2 = ($R2 >> 31 & 0x1 | $R2 << 1) ^ $this->safe_intval($t0 + $t1 + $K[--$ki]); + + $t0 = $S0[$R2 & 0xff] ^ + $S1[$R2 >> 8 & 0xff] ^ + $S2[$R2 >> 16 & 0xff] ^ + $S3[$R2 >> 24 & 0xff]; + $t1 = $S0[$R3 >> 24 & 0xff] ^ + $S1[$R3 & 0xff] ^ + $S2[$R3 >> 8 & 0xff] ^ + $S3[$R3 >> 16 & 0xff]; + $R1^= $this->safe_intval($t0 + ($t1 << 1) + $K[--$ki]); + $R1 = $R1 >> 1 & 0x7fffffff | $R1 << 31; + $R0 = ($R0 >> 31 & 0x1 | $R0 << 1) ^ $this->safe_intval($t0 + $t1 + $K[--$ki]); + } + + // @codingStandardsIgnoreStart + return pack("V4", $K[0] ^ $R2, + $K[1] ^ $R3, + $K[2] ^ $R0, + $K[3] ^ $R1); + // @codingStandardsIgnoreEnd + } + + /** + * Setup the performance-optimized function for de/encrypt() + * + * @see \phpseclib\Crypt\Base::_setupInlineCrypt() + * @access private + */ + function _setupInlineCrypt() + { + $lambda_functions =& self::_getLambdaFunctions(); + + // Max. 10 Ultra-Hi-optimized inline-crypt functions. After that, we'll (still) create very fast code, but not the ultimate fast one. + // (Currently, for Crypt_Twofish, one generated $lambda_function cost on php5.5@32bit ~140kb unfreeable mem and ~240kb on php5.5@64bit) + $gen_hi_opt_code = (bool)(count($lambda_functions) < 10); + + // Generation of a unique hash for our generated code + $code_hash = "Crypt_Twofish, {$this->mode}"; + if ($gen_hi_opt_code) { + $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key); + } + + $safeint = $this->safe_intval_inline(); + + if (!isset($lambda_functions[$code_hash])) { + switch (true) { + case $gen_hi_opt_code: + $K = $this->K; + $init_crypt = ' + static $S0, $S1, $S2, $S3; + if (!$S0) { + for ($i = 0; $i < 256; ++$i) { + $S0[] = (int)$self->S0[$i]; + $S1[] = (int)$self->S1[$i]; + $S2[] = (int)$self->S2[$i]; + $S3[] = (int)$self->S3[$i]; + } + } + '; + break; + default: + $K = array(); + for ($i = 0; $i < 40; ++$i) { + $K[] = '$K_' . $i; + } + $init_crypt = ' + $S0 = $self->S0; + $S1 = $self->S1; + $S2 = $self->S2; + $S3 = $self->S3; + list(' . implode(',', $K) . ') = $self->K; + '; + } + + // Generating encrypt code: + $encrypt_block = ' + $in = unpack("V4", $in); + $R0 = '.$K[0].' ^ $in[1]; + $R1 = '.$K[1].' ^ $in[2]; + $R2 = '.$K[2].' ^ $in[3]; + $R3 = '.$K[3].' ^ $in[4]; + '; + for ($ki = 7, $i = 0; $i < 8; ++$i) { + $encrypt_block.= ' + $t0 = $S0[ $R0 & 0xff] ^ + $S1[($R0 >> 8) & 0xff] ^ + $S2[($R0 >> 16) & 0xff] ^ + $S3[($R0 >> 24) & 0xff]; + $t1 = $S0[($R1 >> 24) & 0xff] ^ + $S1[ $R1 & 0xff] ^ + $S2[($R1 >> 8) & 0xff] ^ + $S3[($R1 >> 16) & 0xff]; + $R2^= ' . sprintf($safeint, '$t0 + $t1 + ' . $K[++$ki]) . '; + $R2 = ($R2 >> 1 & 0x7fffffff) | ($R2 << 31); + $R3 = ((($R3 >> 31) & 1) | ($R3 << 1)) ^ ' . sprintf($safeint, '($t0 + ($t1 << 1) + ' . $K[++$ki] . ')') . '; + + $t0 = $S0[ $R2 & 0xff] ^ + $S1[($R2 >> 8) & 0xff] ^ + $S2[($R2 >> 16) & 0xff] ^ + $S3[($R2 >> 24) & 0xff]; + $t1 = $S0[($R3 >> 24) & 0xff] ^ + $S1[ $R3 & 0xff] ^ + $S2[($R3 >> 8) & 0xff] ^ + $S3[($R3 >> 16) & 0xff]; + $R0^= ' . sprintf($safeint, '($t0 + $t1 + ' . $K[++$ki] . ')') . '; + $R0 = ($R0 >> 1 & 0x7fffffff) | ($R0 << 31); + $R1 = ((($R1 >> 31) & 1) | ($R1 << 1)) ^ ' . sprintf($safeint, '($t0 + ($t1 << 1) + ' . $K[++$ki] . ')') . '; + '; + } + $encrypt_block.= ' + $in = pack("V4", ' . $K[4] . ' ^ $R2, + ' . $K[5] . ' ^ $R3, + ' . $K[6] . ' ^ $R0, + ' . $K[7] . ' ^ $R1); + '; + + // Generating decrypt code: + $decrypt_block = ' + $in = unpack("V4", $in); + $R0 = '.$K[4].' ^ $in[1]; + $R1 = '.$K[5].' ^ $in[2]; + $R2 = '.$K[6].' ^ $in[3]; + $R3 = '.$K[7].' ^ $in[4]; + '; + for ($ki = 40, $i = 0; $i < 8; ++$i) { + $decrypt_block.= ' + $t0 = $S0[$R0 & 0xff] ^ + $S1[$R0 >> 8 & 0xff] ^ + $S2[$R0 >> 16 & 0xff] ^ + $S3[$R0 >> 24 & 0xff]; + $t1 = $S0[$R1 >> 24 & 0xff] ^ + $S1[$R1 & 0xff] ^ + $S2[$R1 >> 8 & 0xff] ^ + $S3[$R1 >> 16 & 0xff]; + $R3^= ' . sprintf($safeint, '$t0 + ($t1 << 1) + ' . $K[--$ki]) . '; + $R3 = $R3 >> 1 & 0x7fffffff | $R3 << 31; + $R2 = ($R2 >> 31 & 0x1 | $R2 << 1) ^ ' . sprintf($safeint, '($t0 + $t1 + '.$K[--$ki] . ')') . '; + + $t0 = $S0[$R2 & 0xff] ^ + $S1[$R2 >> 8 & 0xff] ^ + $S2[$R2 >> 16 & 0xff] ^ + $S3[$R2 >> 24 & 0xff]; + $t1 = $S0[$R3 >> 24 & 0xff] ^ + $S1[$R3 & 0xff] ^ + $S2[$R3 >> 8 & 0xff] ^ + $S3[$R3 >> 16 & 0xff]; + $R1^= ' . sprintf($safeint, '$t0 + ($t1 << 1) + ' . $K[--$ki]) . '; + $R1 = $R1 >> 1 & 0x7fffffff | $R1 << 31; + $R0 = ($R0 >> 31 & 0x1 | $R0 << 1) ^ ' . sprintf($safeint, '($t0 + $t1 + '.$K[--$ki] . ')') . '; + '; + } + $decrypt_block.= ' + $in = pack("V4", ' . $K[0] . ' ^ $R2, + ' . $K[1] . ' ^ $R3, + ' . $K[2] . ' ^ $R0, + ' . $K[3] . ' ^ $R1); + '; + + $lambda_functions[$code_hash] = $this->_createInlineCryptFunction( + array( + 'init_crypt' => $init_crypt, + 'init_encrypt' => '', + 'init_decrypt' => '', + 'encrypt_block' => $encrypt_block, + 'decrypt_block' => $decrypt_block + ) + ); + } + $this->inline_crypt = $lambda_functions[$code_hash]; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php b/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php new file mode 100644 index 000000000..b6874d357 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php @@ -0,0 +1,577 @@ + + * @copyright 2012 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\File; + +/** + * Pure-PHP ANSI Decoder + * + * @package ANSI + * @author Jim Wigginton + * @access public + */ +class ANSI +{ + /** + * Max Width + * + * @var int + * @access private + */ + var $max_x; + + /** + * Max Height + * + * @var int + * @access private + */ + var $max_y; + + /** + * Max History + * + * @var int + * @access private + */ + var $max_history; + + /** + * History + * + * @var array + * @access private + */ + var $history; + + /** + * History Attributes + * + * @var array + * @access private + */ + var $history_attrs; + + /** + * Current Column + * + * @var int + * @access private + */ + var $x; + + /** + * Current Row + * + * @var int + * @access private + */ + var $y; + + /** + * Old Column + * + * @var int + * @access private + */ + var $old_x; + + /** + * Old Row + * + * @var int + * @access private + */ + var $old_y; + + /** + * An empty attribute cell + * + * @var object + * @access private + */ + var $base_attr_cell; + + /** + * The current attribute cell + * + * @var object + * @access private + */ + var $attr_cell; + + /** + * An empty attribute row + * + * @var array + * @access private + */ + var $attr_row; + + /** + * The current screen text + * + * @var array + * @access private + */ + var $screen; + + /** + * The current screen attributes + * + * @var array + * @access private + */ + var $attrs; + + /** + * Current ANSI code + * + * @var string + * @access private + */ + var $ansi; + + /** + * Tokenization + * + * @var array + * @access private + */ + var $tokenization; + + /** + * Default Constructor. + * + * @return \phpseclib\File\ANSI + * @access public + */ + function __construct() + { + $attr_cell = new \stdClass(); + $attr_cell->bold = false; + $attr_cell->underline = false; + $attr_cell->blink = false; + $attr_cell->background = 'black'; + $attr_cell->foreground = 'white'; + $attr_cell->reverse = false; + $this->base_attr_cell = clone $attr_cell; + $this->attr_cell = clone $attr_cell; + + $this->setHistory(200); + $this->setDimensions(80, 24); + } + + /** + * Set terminal width and height + * + * Resets the screen as well + * + * @param int $x + * @param int $y + * @access public + */ + function setDimensions($x, $y) + { + $this->max_x = $x - 1; + $this->max_y = $y - 1; + $this->x = $this->y = 0; + $this->history = $this->history_attrs = array(); + $this->attr_row = array_fill(0, $this->max_x + 2, $this->base_attr_cell); + $this->screen = array_fill(0, $this->max_y + 1, ''); + $this->attrs = array_fill(0, $this->max_y + 1, $this->attr_row); + $this->ansi = ''; + } + + /** + * Set the number of lines that should be logged past the terminal height + * + * @param int $history + * @access public + */ + function setHistory($history) + { + $this->max_history = $history; + } + + /** + * Load a string + * + * @param string $source + * @access public + */ + function loadString($source) + { + $this->setDimensions($this->max_x + 1, $this->max_y + 1); + $this->appendString($source); + } + + /** + * Appdend a string + * + * @param string $source + * @access public + */ + function appendString($source) + { + $this->tokenization = array(''); + for ($i = 0; $i < strlen($source); $i++) { + if (strlen($this->ansi)) { + $this->ansi.= $source[$i]; + $chr = ord($source[$i]); + // http://en.wikipedia.org/wiki/ANSI_escape_code#Sequence_elements + // single character CSI's not currently supported + switch (true) { + case $this->ansi == "\x1B=": + $this->ansi = ''; + continue 2; + case strlen($this->ansi) == 2 && $chr >= 64 && $chr <= 95 && $chr != ord('['): + case strlen($this->ansi) > 2 && $chr >= 64 && $chr <= 126: + break; + default: + continue 2; + } + $this->tokenization[] = $this->ansi; + $this->tokenization[] = ''; + // http://ascii-table.com/ansi-escape-sequences-vt-100.php + switch ($this->ansi) { + case "\x1B[H": // Move cursor to upper left corner + $this->old_x = $this->x; + $this->old_y = $this->y; + $this->x = $this->y = 0; + break; + case "\x1B[J": // Clear screen from cursor down + $this->history = array_merge($this->history, array_slice(array_splice($this->screen, $this->y + 1), 0, $this->old_y)); + $this->screen = array_merge($this->screen, array_fill($this->y, $this->max_y, '')); + + $this->history_attrs = array_merge($this->history_attrs, array_slice(array_splice($this->attrs, $this->y + 1), 0, $this->old_y)); + $this->attrs = array_merge($this->attrs, array_fill($this->y, $this->max_y, $this->attr_row)); + + if (count($this->history) == $this->max_history) { + array_shift($this->history); + array_shift($this->history_attrs); + } + case "\x1B[K": // Clear screen from cursor right + $this->screen[$this->y] = substr($this->screen[$this->y], 0, $this->x); + + array_splice($this->attrs[$this->y], $this->x + 1, $this->max_x - $this->x, array_fill($this->x, $this->max_x - ($this->x - 1), $this->base_attr_cell)); + break; + case "\x1B[2K": // Clear entire line + $this->screen[$this->y] = str_repeat(' ', $this->x); + $this->attrs[$this->y] = $this->attr_row; + break; + case "\x1B[?1h": // set cursor key to application + case "\x1B[?25h": // show the cursor + case "\x1B(B": // set united states g0 character set + break; + case "\x1BE": // Move to next line + $this->_newLine(); + $this->x = 0; + break; + default: + switch (true) { + case preg_match('#\x1B\[(\d+)B#', $this->ansi, $match): // Move cursor down n lines + $this->old_y = $this->y; + $this->y+= $match[1]; + break; + case preg_match('#\x1B\[(\d+);(\d+)H#', $this->ansi, $match): // Move cursor to screen location v,h + $this->old_x = $this->x; + $this->old_y = $this->y; + $this->x = $match[2] - 1; + $this->y = $match[1] - 1; + break; + case preg_match('#\x1B\[(\d+)C#', $this->ansi, $match): // Move cursor right n lines + $this->old_x = $this->x; + $this->x+= $match[1]; + break; + case preg_match('#\x1B\[(\d+)D#', $this->ansi, $match): // Move cursor left n lines + $this->old_x = $this->x; + $this->x-= $match[1]; + if ($this->x < 0) { + $this->x = 0; + } + break; + case preg_match('#\x1B\[(\d+);(\d+)r#', $this->ansi, $match): // Set top and bottom lines of a window + break; + case preg_match('#\x1B\[(\d*(?:;\d*)*)m#', $this->ansi, $match): // character attributes + $attr_cell = &$this->attr_cell; + $mods = explode(';', $match[1]); + foreach ($mods as $mod) { + switch ($mod) { + case '': + case '0': // Turn off character attributes + $attr_cell = clone $this->base_attr_cell; + break; + case '1': // Turn bold mode on + $attr_cell->bold = true; + break; + case '4': // Turn underline mode on + $attr_cell->underline = true; + break; + case '5': // Turn blinking mode on + $attr_cell->blink = true; + break; + case '7': // Turn reverse video on + $attr_cell->reverse = !$attr_cell->reverse; + $temp = $attr_cell->background; + $attr_cell->background = $attr_cell->foreground; + $attr_cell->foreground = $temp; + break; + default: // set colors + //$front = $attr_cell->reverse ? &$attr_cell->background : &$attr_cell->foreground; + $front = &$attr_cell->{ $attr_cell->reverse ? 'background' : 'foreground' }; + //$back = $attr_cell->reverse ? &$attr_cell->foreground : &$attr_cell->background; + $back = &$attr_cell->{ $attr_cell->reverse ? 'foreground' : 'background' }; + switch ($mod) { + // @codingStandardsIgnoreStart + case '30': $front = 'black'; break; + case '31': $front = 'red'; break; + case '32': $front = 'green'; break; + case '33': $front = 'yellow'; break; + case '34': $front = 'blue'; break; + case '35': $front = 'magenta'; break; + case '36': $front = 'cyan'; break; + case '37': $front = 'white'; break; + + case '40': $back = 'black'; break; + case '41': $back = 'red'; break; + case '42': $back = 'green'; break; + case '43': $back = 'yellow'; break; + case '44': $back = 'blue'; break; + case '45': $back = 'magenta'; break; + case '46': $back = 'cyan'; break; + case '47': $back = 'white'; break; + // @codingStandardsIgnoreEnd + + default: + //user_error('Unsupported attribute: ' . $mod); + $this->ansi = ''; + break 2; + } + } + } + break; + default: + //user_error("{$this->ansi} is unsupported\r\n"); + } + } + $this->ansi = ''; + continue; + } + + $this->tokenization[count($this->tokenization) - 1].= $source[$i]; + switch ($source[$i]) { + case "\r": + $this->x = 0; + break; + case "\n": + $this->_newLine(); + break; + case "\x08": // backspace + if ($this->x) { + $this->x--; + $this->attrs[$this->y][$this->x] = clone $this->base_attr_cell; + $this->screen[$this->y] = substr_replace( + $this->screen[$this->y], + $source[$i], + $this->x, + 1 + ); + } + break; + case "\x0F": // shift + break; + case "\x1B": // start ANSI escape code + $this->tokenization[count($this->tokenization) - 1] = substr($this->tokenization[count($this->tokenization) - 1], 0, -1); + //if (!strlen($this->tokenization[count($this->tokenization) - 1])) { + // array_pop($this->tokenization); + //} + $this->ansi.= "\x1B"; + break; + default: + $this->attrs[$this->y][$this->x] = clone $this->attr_cell; + if ($this->x > strlen($this->screen[$this->y])) { + $this->screen[$this->y] = str_repeat(' ', $this->x); + } + $this->screen[$this->y] = substr_replace( + $this->screen[$this->y], + $source[$i], + $this->x, + 1 + ); + + if ($this->x > $this->max_x) { + $this->x = 0; + $this->_newLine(); + } else { + $this->x++; + } + } + } + } + + /** + * Add a new line + * + * Also update the $this->screen and $this->history buffers + * + * @access private + */ + function _newLine() + { + //if ($this->y < $this->max_y) { + // $this->y++; + //} + + while ($this->y >= $this->max_y) { + $this->history = array_merge($this->history, array(array_shift($this->screen))); + $this->screen[] = ''; + + $this->history_attrs = array_merge($this->history_attrs, array(array_shift($this->attrs))); + $this->attrs[] = $this->attr_row; + + if (count($this->history) >= $this->max_history) { + array_shift($this->history); + array_shift($this->history_attrs); + } + + $this->y--; + } + $this->y++; + } + + /** + * Returns the current coordinate without preformating + * + * @access private + * @return string + */ + function _processCoordinate($last_attr, $cur_attr, $char) + { + $output = ''; + + if ($last_attr != $cur_attr) { + $close = $open = ''; + if ($last_attr->foreground != $cur_attr->foreground) { + if ($cur_attr->foreground != 'white') { + $open.= ''; + } + if ($last_attr->foreground != 'white') { + $close = '' . $close; + } + } + if ($last_attr->background != $cur_attr->background) { + if ($cur_attr->background != 'black') { + $open.= ''; + } + if ($last_attr->background != 'black') { + $close = '' . $close; + } + } + if ($last_attr->bold != $cur_attr->bold) { + if ($cur_attr->bold) { + $open.= ''; + } else { + $close = '' . $close; + } + } + if ($last_attr->underline != $cur_attr->underline) { + if ($cur_attr->underline) { + $open.= ''; + } else { + $close = '' . $close; + } + } + if ($last_attr->blink != $cur_attr->blink) { + if ($cur_attr->blink) { + $open.= ''; + } else { + $close = '' . $close; + } + } + $output.= $close . $open; + } + + $output.= htmlspecialchars($char); + + return $output; + } + + /** + * Returns the current screen without preformating + * + * @access private + * @return string + */ + function _getScreen() + { + $output = ''; + $last_attr = $this->base_attr_cell; + for ($i = 0; $i <= $this->max_y; $i++) { + for ($j = 0; $j <= $this->max_x; $j++) { + $cur_attr = $this->attrs[$i][$j]; + $output.= $this->_processCoordinate($last_attr, $cur_attr, isset($this->screen[$i][$j]) ? $this->screen[$i][$j] : ''); + $last_attr = $this->attrs[$i][$j]; + } + $output.= "\r\n"; + } + $output = substr($output, 0, -2); + // close any remaining open tags + $output.= $this->_processCoordinate($last_attr, $this->base_attr_cell, ''); + return rtrim($output); + } + + /** + * Returns the current screen + * + * @access public + * @return string + */ + function getScreen() + { + return '
        ' . $this->_getScreen() . '
        '; + } + + /** + * Returns the current screen and the x previous lines + * + * @access public + * @return string + */ + function getHistory() + { + $scrollback = ''; + $last_attr = $this->base_attr_cell; + for ($i = 0; $i < count($this->history); $i++) { + for ($j = 0; $j <= $this->max_x + 1; $j++) { + $cur_attr = $this->history_attrs[$i][$j]; + $scrollback.= $this->_processCoordinate($last_attr, $cur_attr, isset($this->history[$i][$j]) ? $this->history[$i][$j] : ''); + $last_attr = $this->history_attrs[$i][$j]; + } + $scrollback.= "\r\n"; + } + $base_attr_cell = $this->base_attr_cell; + $this->base_attr_cell = $last_attr; + $scrollback.= $this->_getScreen(); + $this->base_attr_cell = $base_attr_cell; + + return '
        ' . $scrollback . '
        '; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php b/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php new file mode 100644 index 000000000..807ca88ce --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php @@ -0,0 +1,1415 @@ + + * @copyright 2012 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\File; + +use phpseclib\File\ASN1\Element; +use phpseclib\Math\BigInteger; +use DateTime; +use DateTimeZone; + +/** + * Pure-PHP ASN.1 Parser + * + * @package ASN1 + * @author Jim Wigginton + * @access public + */ +class ASN1 +{ + /**#@+ + * Tag Classes + * + * @access private + * @link http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=12 + */ + const CLASS_UNIVERSAL = 0; + const CLASS_APPLICATION = 1; + const CLASS_CONTEXT_SPECIFIC = 2; + const CLASS_PRIVATE = 3; + /**#@-*/ + + /**#@+ + * Tag Classes + * + * @access private + * @link http://www.obj-sys.com/asn1tutorial/node124.html + */ + const TYPE_BOOLEAN = 1; + const TYPE_INTEGER = 2; + const TYPE_BIT_STRING = 3; + const TYPE_OCTET_STRING = 4; + const TYPE_NULL = 5; + const TYPE_OBJECT_IDENTIFIER = 6; + //const TYPE_OBJECT_DESCRIPTOR = 7; + //const TYPE_INSTANCE_OF = 8; // EXTERNAL + const TYPE_REAL = 9; + const TYPE_ENUMERATED = 10; + //const TYPE_EMBEDDED = 11; + const TYPE_UTF8_STRING = 12; + //const TYPE_RELATIVE_OID = 13; + const TYPE_SEQUENCE = 16; // SEQUENCE OF + const TYPE_SET = 17; // SET OF + /**#@-*/ + /**#@+ + * More Tag Classes + * + * @access private + * @link http://www.obj-sys.com/asn1tutorial/node10.html + */ + const TYPE_NUMERIC_STRING = 18; + const TYPE_PRINTABLE_STRING = 19; + const TYPE_TELETEX_STRING = 20; // T61String + const TYPE_VIDEOTEX_STRING = 21; + const TYPE_IA5_STRING = 22; + const TYPE_UTC_TIME = 23; + const TYPE_GENERALIZED_TIME = 24; + const TYPE_GRAPHIC_STRING = 25; + const TYPE_VISIBLE_STRING = 26; // ISO646String + const TYPE_GENERAL_STRING = 27; + const TYPE_UNIVERSAL_STRING = 28; + //const TYPE_CHARACTER_STRING = 29; + const TYPE_BMP_STRING = 30; + /**#@-*/ + + /**#@+ + * Tag Aliases + * + * These tags are kinda place holders for other tags. + * + * @access private + */ + const TYPE_CHOICE = -1; + const TYPE_ANY = -2; + /**#@-*/ + + /** + * ASN.1 object identifier + * + * @var array + * @access private + * @link http://en.wikipedia.org/wiki/Object_identifier + */ + var $oids = array(); + + /** + * Default date format + * + * @var string + * @access private + * @link http://php.net/class.datetime + */ + var $format = 'D, d M Y H:i:s O'; + + /** + * Default date format + * + * @var array + * @access private + * @see self::setTimeFormat() + * @see self::asn1map() + * @link http://php.net/class.datetime + */ + var $encoded; + + /** + * Filters + * + * If the mapping type is self::TYPE_ANY what do we actually encode it as? + * + * @var array + * @access private + * @see self::_encode_der() + */ + var $filters; + + /** + * Type mapping table for the ANY type. + * + * Structured or unknown types are mapped to a \phpseclib\File\ASN1\Element. + * Unambiguous types get the direct mapping (int/real/bool). + * Others are mapped as a choice, with an extra indexing level. + * + * @var array + * @access public + */ + var $ANYmap = array( + self::TYPE_BOOLEAN => true, + self::TYPE_INTEGER => true, + self::TYPE_BIT_STRING => 'bitString', + self::TYPE_OCTET_STRING => 'octetString', + self::TYPE_NULL => 'null', + self::TYPE_OBJECT_IDENTIFIER => 'objectIdentifier', + self::TYPE_REAL => true, + self::TYPE_ENUMERATED => 'enumerated', + self::TYPE_UTF8_STRING => 'utf8String', + self::TYPE_NUMERIC_STRING => 'numericString', + self::TYPE_PRINTABLE_STRING => 'printableString', + self::TYPE_TELETEX_STRING => 'teletexString', + self::TYPE_VIDEOTEX_STRING => 'videotexString', + self::TYPE_IA5_STRING => 'ia5String', + self::TYPE_UTC_TIME => 'utcTime', + self::TYPE_GENERALIZED_TIME => 'generalTime', + self::TYPE_GRAPHIC_STRING => 'graphicString', + self::TYPE_VISIBLE_STRING => 'visibleString', + self::TYPE_GENERAL_STRING => 'generalString', + self::TYPE_UNIVERSAL_STRING => 'universalString', + //self::TYPE_CHARACTER_STRING => 'characterString', + self::TYPE_BMP_STRING => 'bmpString' + ); + + /** + * String type to character size mapping table. + * + * Non-convertable types are absent from this table. + * size == 0 indicates variable length encoding. + * + * @var array + * @access public + */ + var $stringTypeSize = array( + self::TYPE_UTF8_STRING => 0, + self::TYPE_BMP_STRING => 2, + self::TYPE_UNIVERSAL_STRING => 4, + self::TYPE_PRINTABLE_STRING => 1, + self::TYPE_TELETEX_STRING => 1, + self::TYPE_IA5_STRING => 1, + self::TYPE_VISIBLE_STRING => 1, + ); + + /** + * Parse BER-encoding + * + * Serves a similar purpose to openssl's asn1parse + * + * @param string $encoded + * @return array + * @access public + */ + function decodeBER($encoded) + { + if ($encoded instanceof Element) { + $encoded = $encoded->element; + } + + $this->encoded = $encoded; + // encapsulate in an array for BC with the old decodeBER + return array($this->_decode_ber($encoded)); + } + + /** + * Parse BER-encoding (Helper function) + * + * Sometimes we want to get the BER encoding of a particular tag. $start lets us do that without having to reencode. + * $encoded is passed by reference for the recursive calls done for self::TYPE_BIT_STRING and + * self::TYPE_OCTET_STRING. In those cases, the indefinite length is used. + * + * @param string $encoded + * @param int $start + * @param int $encoded_pos + * @return array + * @access private + */ + function _decode_ber($encoded, $start = 0, $encoded_pos = 0) + { + $current = array('start' => $start); + + $type = ord($encoded[$encoded_pos++]); + $start++; + + $constructed = ($type >> 5) & 1; + + $tag = $type & 0x1F; + if ($tag == 0x1F) { + $tag = 0; + // process septets (since the eighth bit is ignored, it's not an octet) + do { + $temp = ord($encoded[$encoded_pos++]); + $loop = $temp >> 7; + $tag <<= 7; + $tag |= $temp & 0x7F; + $start++; + } while ($loop); + } + + // Length, as discussed in paragraph 8.1.3 of X.690-0207.pdf#page=13 + $length = ord($encoded[$encoded_pos++]); + $start++; + if ($length == 0x80) { // indefinite length + // "[A sender shall] use the indefinite form (see 8.1.3.6) if the encoding is constructed and is not all + // immediately available." -- paragraph 8.1.3.2.c + $length = strlen($encoded) - $encoded_pos; + } elseif ($length & 0x80) { // definite length, long form + // technically, the long form of the length can be represented by up to 126 octets (bytes), but we'll only + // support it up to four. + $length&= 0x7F; + $temp = substr($encoded, $encoded_pos, $length); + $encoded_pos += $length; + // tags of indefinte length don't really have a header length; this length includes the tag + $current+= array('headerlength' => $length + 2); + $start+= $length; + extract(unpack('Nlength', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4))); + } else { + $current+= array('headerlength' => 2); + } + + if ($length > (strlen($encoded) - $encoded_pos)) { + return false; + } + + $content = substr($encoded, $encoded_pos, $length); + $content_pos = 0; + + // at this point $length can be overwritten. it's only accurate for definite length things as is + + /* Class is UNIVERSAL, APPLICATION, PRIVATE, or CONTEXT-SPECIFIC. The UNIVERSAL class is restricted to the ASN.1 + built-in types. It defines an application-independent data type that must be distinguishable from all other + data types. The other three classes are user defined. The APPLICATION class distinguishes data types that + have a wide, scattered use within a particular presentation context. PRIVATE distinguishes data types within + a particular organization or country. CONTEXT-SPECIFIC distinguishes members of a sequence or set, the + alternatives of a CHOICE, or universally tagged set members. Only the class number appears in braces for this + data type; the term CONTEXT-SPECIFIC does not appear. + + -- http://www.obj-sys.com/asn1tutorial/node12.html */ + $class = ($type >> 6) & 3; + switch ($class) { + case self::CLASS_APPLICATION: + case self::CLASS_PRIVATE: + case self::CLASS_CONTEXT_SPECIFIC: + if (!$constructed) { + return array( + 'type' => $class, + 'constant' => $tag, + 'content' => $content, + 'length' => $length + $start - $current['start'] + ); + } + + $newcontent = array(); + $remainingLength = $length; + while ($remainingLength > 0) { + $temp = $this->_decode_ber($content, $start, $content_pos); + if ($temp === false) { + break; + } + $length = $temp['length']; + // end-of-content octets - see paragraph 8.1.5 + if (substr($content, $content_pos + $length, 2) == "\0\0") { + $length+= 2; + $start+= $length; + $newcontent[] = $temp; + break; + } + $start+= $length; + $remainingLength-= $length; + $newcontent[] = $temp; + $content_pos += $length; + } + + return array( + 'type' => $class, + 'constant' => $tag, + // the array encapsulation is for BC with the old format + 'content' => $newcontent, + // the only time when $content['headerlength'] isn't defined is when the length is indefinite. + // the absence of $content['headerlength'] is how we know if something is indefinite or not. + // technically, it could be defined to be 2 and then another indicator could be used but whatever. + 'length' => $start - $current['start'] + ) + $current; + } + + $current+= array('type' => $tag); + + // decode UNIVERSAL tags + switch ($tag) { + case self::TYPE_BOOLEAN: + // "The contents octets shall consist of a single octet." -- paragraph 8.2.1 + //if (strlen($content) != 1) { + // return false; + //} + $current['content'] = (bool) ord($content[$content_pos]); + break; + case self::TYPE_INTEGER: + case self::TYPE_ENUMERATED: + $current['content'] = new BigInteger(substr($content, $content_pos), -256); + break; + case self::TYPE_REAL: // not currently supported + return false; + case self::TYPE_BIT_STRING: + // The initial octet shall encode, as an unsigned binary integer with bit 1 as the least significant bit, + // the number of unused bits in the final subsequent octet. The number shall be in the range zero to + // seven. + if (!$constructed) { + $current['content'] = substr($content, $content_pos); + } else { + $temp = $this->_decode_ber($content, $start, $content_pos); + if ($temp === false) { + return false; + } + $length-= (strlen($content) - $content_pos); + $last = count($temp) - 1; + for ($i = 0; $i < $last; $i++) { + // all subtags should be bit strings + //if ($temp[$i]['type'] != self::TYPE_BIT_STRING) { + // return false; + //} + $current['content'].= substr($temp[$i]['content'], 1); + } + // all subtags should be bit strings + //if ($temp[$last]['type'] != self::TYPE_BIT_STRING) { + // return false; + //} + $current['content'] = $temp[$last]['content'][0] . $current['content'] . substr($temp[$i]['content'], 1); + } + break; + case self::TYPE_OCTET_STRING: + if (!$constructed) { + $current['content'] = substr($content, $content_pos); + } else { + $current['content'] = ''; + $length = 0; + while (substr($content, $content_pos, 2) != "\0\0") { + $temp = $this->_decode_ber($content, $length + $start, $content_pos); + if ($temp === false) { + return false; + } + $content_pos += $temp['length']; + // all subtags should be octet strings + //if ($temp['type'] != self::TYPE_OCTET_STRING) { + // return false; + //} + $current['content'].= $temp['content']; + $length+= $temp['length']; + } + if (substr($content, $content_pos, 2) == "\0\0") { + $length+= 2; // +2 for the EOC + } + } + break; + case self::TYPE_NULL: + // "The contents octets shall not contain any octets." -- paragraph 8.8.2 + //if (strlen($content)) { + // return false; + //} + break; + case self::TYPE_SEQUENCE: + case self::TYPE_SET: + $offset = 0; + $current['content'] = array(); + $content_len = strlen($content); + while ($content_pos < $content_len) { + // if indefinite length construction was used and we have an end-of-content string next + // see paragraphs 8.1.1.3, 8.1.3.2, 8.1.3.6, 8.1.5, and (for an example) 8.6.4.2 + if (!isset($current['headerlength']) && substr($content, $content_pos, 2) == "\0\0") { + $length = $offset + 2; // +2 for the EOC + break 2; + } + $temp = $this->_decode_ber($content, $start + $offset, $content_pos); + if ($temp === false) { + return false; + } + $content_pos += $temp['length']; + $current['content'][] = $temp; + $offset+= $temp['length']; + } + break; + case self::TYPE_OBJECT_IDENTIFIER: + $current['content'] = $this->_decodeOID(substr($content, $content_pos)); + break; + /* Each character string type shall be encoded as if it had been declared: + [UNIVERSAL x] IMPLICIT OCTET STRING + + -- X.690-0207.pdf#page=23 (paragraph 8.21.3) + + Per that, we're not going to do any validation. If there are any illegal characters in the string, + we don't really care */ + case self::TYPE_NUMERIC_STRING: + // 0,1,2,3,4,5,6,7,8,9, and space + case self::TYPE_PRINTABLE_STRING: + // Upper and lower case letters, digits, space, apostrophe, left/right parenthesis, plus sign, comma, + // hyphen, full stop, solidus, colon, equal sign, question mark + case self::TYPE_TELETEX_STRING: + // The Teletex character set in CCITT's T61, space, and delete + // see http://en.wikipedia.org/wiki/Teletex#Character_sets + case self::TYPE_VIDEOTEX_STRING: + // The Videotex character set in CCITT's T.100 and T.101, space, and delete + case self::TYPE_VISIBLE_STRING: + // Printing character sets of international ASCII, and space + case self::TYPE_IA5_STRING: + // International Alphabet 5 (International ASCII) + case self::TYPE_GRAPHIC_STRING: + // All registered G sets, and space + case self::TYPE_GENERAL_STRING: + // All registered C and G sets, space and delete + case self::TYPE_UTF8_STRING: + // ???? + case self::TYPE_BMP_STRING: + $current['content'] = substr($content, $content_pos); + break; + case self::TYPE_UTC_TIME: + case self::TYPE_GENERALIZED_TIME: + $current['content'] = $this->_decodeTime(substr($content, $content_pos), $tag); + default: + } + + $start+= $length; + + // ie. length is the length of the full TLV encoding - it's not just the length of the value + return $current + array('length' => $start - $current['start']); + } + + /** + * ASN.1 Map + * + * Provides an ASN.1 semantic mapping ($mapping) from a parsed BER-encoding to a human readable format. + * + * "Special" mappings may be applied on a per tag-name basis via $special. + * + * @param array $decoded + * @param array $mapping + * @param array $special + * @return array + * @access public + */ + function asn1map($decoded, $mapping, $special = array()) + { + if (!is_array($decoded)) { + return false; + } + + if (isset($mapping['explicit']) && is_array($decoded['content'])) { + $decoded = $decoded['content'][0]; + } + + switch (true) { + case $mapping['type'] == self::TYPE_ANY: + $intype = $decoded['type']; + if (isset($decoded['constant']) || !isset($this->ANYmap[$intype]) || (ord($this->encoded[$decoded['start']]) & 0x20)) { + return new Element(substr($this->encoded, $decoded['start'], $decoded['length'])); + } + $inmap = $this->ANYmap[$intype]; + if (is_string($inmap)) { + return array($inmap => $this->asn1map($decoded, array('type' => $intype) + $mapping, $special)); + } + break; + case $mapping['type'] == self::TYPE_CHOICE: + foreach ($mapping['children'] as $key => $option) { + switch (true) { + case isset($option['constant']) && $option['constant'] == $decoded['constant']: + case !isset($option['constant']) && $option['type'] == $decoded['type']: + $value = $this->asn1map($decoded, $option, $special); + break; + case !isset($option['constant']) && $option['type'] == self::TYPE_CHOICE: + $v = $this->asn1map($decoded, $option, $special); + if (isset($v)) { + $value = $v; + } + } + if (isset($value)) { + if (isset($special[$key])) { + $value = call_user_func($special[$key], $value); + } + return array($key => $value); + } + } + return null; + case isset($mapping['implicit']): + case isset($mapping['explicit']): + case $decoded['type'] == $mapping['type']: + break; + default: + // if $decoded['type'] and $mapping['type'] are both strings, but different types of strings, + // let it through + switch (true) { + case $decoded['type'] < 18: // self::TYPE_NUMERIC_STRING == 18 + case $decoded['type'] > 30: // self::TYPE_BMP_STRING == 30 + case $mapping['type'] < 18: + case $mapping['type'] > 30: + return null; + } + } + + if (isset($mapping['implicit'])) { + $decoded['type'] = $mapping['type']; + } + + switch ($decoded['type']) { + case self::TYPE_SEQUENCE: + $map = array(); + + // ignore the min and max + if (isset($mapping['min']) && isset($mapping['max'])) { + $child = $mapping['children']; + foreach ($decoded['content'] as $content) { + if (($map[] = $this->asn1map($content, $child, $special)) === null) { + return null; + } + } + + return $map; + } + + $n = count($decoded['content']); + $i = 0; + + foreach ($mapping['children'] as $key => $child) { + $maymatch = $i < $n; // Match only existing input. + if ($maymatch) { + $temp = $decoded['content'][$i]; + + if ($child['type'] != self::TYPE_CHOICE) { + // Get the mapping and input class & constant. + $childClass = $tempClass = self::CLASS_UNIVERSAL; + $constant = null; + if (isset($temp['constant'])) { + $tempClass = $temp['type']; + } + if (isset($child['class'])) { + $childClass = $child['class']; + $constant = $child['cast']; + } elseif (isset($child['constant'])) { + $childClass = self::CLASS_CONTEXT_SPECIFIC; + $constant = $child['constant']; + } + + if (isset($constant) && isset($temp['constant'])) { + // Can only match if constants and class match. + $maymatch = $constant == $temp['constant'] && $childClass == $tempClass; + } else { + // Can only match if no constant expected and type matches or is generic. + $maymatch = !isset($child['constant']) && array_search($child['type'], array($temp['type'], self::TYPE_ANY, self::TYPE_CHOICE)) !== false; + } + } + } + + if ($maymatch) { + // Attempt submapping. + $candidate = $this->asn1map($temp, $child, $special); + $maymatch = $candidate !== null; + } + + if ($maymatch) { + // Got the match: use it. + if (isset($special[$key])) { + $candidate = call_user_func($special[$key], $candidate); + } + $map[$key] = $candidate; + $i++; + } elseif (isset($child['default'])) { + $map[$key] = $child['default']; // Use default. + } elseif (!isset($child['optional'])) { + return null; // Syntax error. + } + } + + // Fail mapping if all input items have not been consumed. + return $i < $n ? null: $map; + + // the main diff between sets and sequences is the encapsulation of the foreach in another for loop + case self::TYPE_SET: + $map = array(); + + // ignore the min and max + if (isset($mapping['min']) && isset($mapping['max'])) { + $child = $mapping['children']; + foreach ($decoded['content'] as $content) { + if (($map[] = $this->asn1map($content, $child, $special)) === null) { + return null; + } + } + + return $map; + } + + for ($i = 0; $i < count($decoded['content']); $i++) { + $temp = $decoded['content'][$i]; + $tempClass = self::CLASS_UNIVERSAL; + if (isset($temp['constant'])) { + $tempClass = $temp['type']; + } + + foreach ($mapping['children'] as $key => $child) { + if (isset($map[$key])) { + continue; + } + $maymatch = true; + if ($child['type'] != self::TYPE_CHOICE) { + $childClass = self::CLASS_UNIVERSAL; + $constant = null; + if (isset($child['class'])) { + $childClass = $child['class']; + $constant = $child['cast']; + } elseif (isset($child['constant'])) { + $childClass = self::CLASS_CONTEXT_SPECIFIC; + $constant = $child['constant']; + } + + if (isset($constant) && isset($temp['constant'])) { + // Can only match if constants and class match. + $maymatch = $constant == $temp['constant'] && $childClass == $tempClass; + } else { + // Can only match if no constant expected and type matches or is generic. + $maymatch = !isset($child['constant']) && array_search($child['type'], array($temp['type'], self::TYPE_ANY, self::TYPE_CHOICE)) !== false; + } + } + + if ($maymatch) { + // Attempt submapping. + $candidate = $this->asn1map($temp, $child, $special); + $maymatch = $candidate !== null; + } + + if (!$maymatch) { + break; + } + + // Got the match: use it. + if (isset($special[$key])) { + $candidate = call_user_func($special[$key], $candidate); + } + $map[$key] = $candidate; + break; + } + } + + foreach ($mapping['children'] as $key => $child) { + if (!isset($map[$key])) { + if (isset($child['default'])) { + $map[$key] = $child['default']; + } elseif (!isset($child['optional'])) { + return null; + } + } + } + return $map; + case self::TYPE_OBJECT_IDENTIFIER: + return isset($this->oids[$decoded['content']]) ? $this->oids[$decoded['content']] : $decoded['content']; + case self::TYPE_UTC_TIME: + case self::TYPE_GENERALIZED_TIME: + // for explicitly tagged optional stuff + if (is_array($decoded['content'])) { + $decoded['content'] = $decoded['content'][0]['content']; + } + // for implicitly tagged optional stuff + // in theory, doing isset($mapping['implicit']) would work but malformed certs do exist + // in the wild that OpenSSL decodes without issue so we'll support them as well + if (!is_object($decoded['content'])) { + $decoded['content'] = $this->_decodeTime($decoded['content'], $decoded['type']); + } + return $decoded['content'] ? $decoded['content']->format($this->format) : false; + case self::TYPE_BIT_STRING: + if (isset($mapping['mapping'])) { + $offset = ord($decoded['content'][0]); + $size = (strlen($decoded['content']) - 1) * 8 - $offset; + /* + From X.680-0207.pdf#page=46 (21.7): + + "When a "NamedBitList" is used in defining a bitstring type ASN.1 encoding rules are free to add (or remove) + arbitrarily any trailing 0 bits to (or from) values that are being encoded or decoded. Application designers should + therefore ensure that different semantics are not associated with such values which differ only in the number of trailing + 0 bits." + */ + $bits = count($mapping['mapping']) == $size ? array() : array_fill(0, count($mapping['mapping']) - $size, false); + for ($i = strlen($decoded['content']) - 1; $i > 0; $i--) { + $current = ord($decoded['content'][$i]); + for ($j = $offset; $j < 8; $j++) { + $bits[] = (bool) ($current & (1 << $j)); + } + $offset = 0; + } + $values = array(); + $map = array_reverse($mapping['mapping']); + foreach ($map as $i => $value) { + if ($bits[$i]) { + $values[] = $value; + } + } + return $values; + } + case self::TYPE_OCTET_STRING: + return base64_encode($decoded['content']); + case self::TYPE_NULL: + return ''; + case self::TYPE_BOOLEAN: + return $decoded['content']; + case self::TYPE_NUMERIC_STRING: + case self::TYPE_PRINTABLE_STRING: + case self::TYPE_TELETEX_STRING: + case self::TYPE_VIDEOTEX_STRING: + case self::TYPE_IA5_STRING: + case self::TYPE_GRAPHIC_STRING: + case self::TYPE_VISIBLE_STRING: + case self::TYPE_GENERAL_STRING: + case self::TYPE_UNIVERSAL_STRING: + case self::TYPE_UTF8_STRING: + case self::TYPE_BMP_STRING: + return $decoded['content']; + case self::TYPE_INTEGER: + case self::TYPE_ENUMERATED: + $temp = $decoded['content']; + if (isset($mapping['implicit'])) { + $temp = new BigInteger($decoded['content'], -256); + } + if (isset($mapping['mapping'])) { + $temp = (int) $temp->toString(); + return isset($mapping['mapping'][$temp]) ? + $mapping['mapping'][$temp] : + false; + } + return $temp; + } + } + + /** + * ASN.1 Encode + * + * DER-encodes an ASN.1 semantic mapping ($mapping). Some libraries would probably call this function + * an ASN.1 compiler. + * + * "Special" mappings can be applied via $special. + * + * @param string $source + * @param string $mapping + * @param array $special + * @return string + * @access public + */ + function encodeDER($source, $mapping, $special = array()) + { + $this->location = array(); + return $this->_encode_der($source, $mapping, null, $special); + } + + /** + * ASN.1 Encode (Helper function) + * + * @param string $source + * @param string $mapping + * @param int $idx + * @param array $special + * @return string + * @access private + */ + function _encode_der($source, $mapping, $idx = null, $special = array()) + { + if ($source instanceof Element) { + return $source->element; + } + + // do not encode (implicitly optional) fields with value set to default + if (isset($mapping['default']) && $source === $mapping['default']) { + return ''; + } + + if (isset($idx)) { + if (isset($special[$idx])) { + $source = call_user_func($special[$idx], $source); + } + $this->location[] = $idx; + } + + $tag = $mapping['type']; + + switch ($tag) { + case self::TYPE_SET: // Children order is not important, thus process in sequence. + case self::TYPE_SEQUENCE: + $tag|= 0x20; // set the constructed bit + + // ignore the min and max + if (isset($mapping['min']) && isset($mapping['max'])) { + $value = array(); + $child = $mapping['children']; + + foreach ($source as $content) { + $temp = $this->_encode_der($content, $child, null, $special); + if ($temp === false) { + return false; + } + $value[]= $temp; + } + /* "The encodings of the component values of a set-of value shall appear in ascending order, the encodings being compared + as octet strings with the shorter components being padded at their trailing end with 0-octets. + NOTE - The padding octets are for comparison purposes only and do not appear in the encodings." + + -- sec 11.6 of http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf */ + if ($mapping['type'] == self::TYPE_SET) { + sort($value); + } + $value = implode('', $value); + break; + } + + $value = ''; + foreach ($mapping['children'] as $key => $child) { + if (!array_key_exists($key, $source)) { + if (!isset($child['optional'])) { + return false; + } + continue; + } + + $temp = $this->_encode_der($source[$key], $child, $key, $special); + if ($temp === false) { + return false; + } + + // An empty child encoding means it has been optimized out. + // Else we should have at least one tag byte. + if ($temp === '') { + continue; + } + + // if isset($child['constant']) is true then isset($child['optional']) should be true as well + if (isset($child['constant'])) { + /* + From X.680-0207.pdf#page=58 (30.6): + + "The tagging construction specifies explicit tagging if any of the following holds: + ... + c) the "Tag Type" alternative is used and the value of "TagDefault" for the module is IMPLICIT TAGS or + AUTOMATIC TAGS, but the type defined by "Type" is an untagged choice type, an untagged open type, or + an untagged "DummyReference" (see ITU-T Rec. X.683 | ISO/IEC 8824-4, 8.3)." + */ + if (isset($child['explicit']) || $child['type'] == self::TYPE_CHOICE) { + $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | $child['constant']); + $temp = $subtag . $this->_encodeLength(strlen($temp)) . $temp; + } else { + $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | (ord($temp[0]) & 0x20) | $child['constant']); + $temp = $subtag . substr($temp, 1); + } + } + $value.= $temp; + } + break; + case self::TYPE_CHOICE: + $temp = false; + + foreach ($mapping['children'] as $key => $child) { + if (!isset($source[$key])) { + continue; + } + + $temp = $this->_encode_der($source[$key], $child, $key, $special); + if ($temp === false) { + return false; + } + + // An empty child encoding means it has been optimized out. + // Else we should have at least one tag byte. + if ($temp === '') { + continue; + } + + $tag = ord($temp[0]); + + // if isset($child['constant']) is true then isset($child['optional']) should be true as well + if (isset($child['constant'])) { + if (isset($child['explicit']) || $child['type'] == self::TYPE_CHOICE) { + $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | $child['constant']); + $temp = $subtag . $this->_encodeLength(strlen($temp)) . $temp; + } else { + $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | (ord($temp[0]) & 0x20) | $child['constant']); + $temp = $subtag . substr($temp, 1); + } + } + } + + if (isset($idx)) { + array_pop($this->location); + } + + if ($temp && isset($mapping['cast'])) { + $temp[0] = chr(($mapping['class'] << 6) | ($tag & 0x20) | $mapping['cast']); + } + + return $temp; + case self::TYPE_INTEGER: + case self::TYPE_ENUMERATED: + if (!isset($mapping['mapping'])) { + if (is_numeric($source)) { + $source = new BigInteger($source); + } + $value = $source->toBytes(true); + } else { + $value = array_search($source, $mapping['mapping']); + if ($value === false) { + return false; + } + $value = new BigInteger($value); + $value = $value->toBytes(true); + } + if (!strlen($value)) { + $value = chr(0); + } + break; + case self::TYPE_UTC_TIME: + case self::TYPE_GENERALIZED_TIME: + $format = $mapping['type'] == self::TYPE_UTC_TIME ? 'y' : 'Y'; + $format.= 'mdHis'; + $date = new DateTime($source, new DateTimeZone('GMT')); + $value = $date->format($format) . 'Z'; + break; + case self::TYPE_BIT_STRING: + if (isset($mapping['mapping'])) { + $bits = array_fill(0, count($mapping['mapping']), 0); + $size = 0; + for ($i = 0; $i < count($mapping['mapping']); $i++) { + if (in_array($mapping['mapping'][$i], $source)) { + $bits[$i] = 1; + $size = $i; + } + } + + if (isset($mapping['min']) && $mapping['min'] >= 1 && $size < $mapping['min']) { + $size = $mapping['min'] - 1; + } + + $offset = 8 - (($size + 1) & 7); + $offset = $offset !== 8 ? $offset : 0; + + $value = chr($offset); + + for ($i = $size + 1; $i < count($mapping['mapping']); $i++) { + unset($bits[$i]); + } + + $bits = implode('', array_pad($bits, $size + $offset + 1, 0)); + $bytes = explode(' ', rtrim(chunk_split($bits, 8, ' '))); + foreach ($bytes as $byte) { + $value.= chr(bindec($byte)); + } + + break; + } + case self::TYPE_OCTET_STRING: + /* The initial octet shall encode, as an unsigned binary integer with bit 1 as the least significant bit, + the number of unused bits in the final subsequent octet. The number shall be in the range zero to seven. + + -- http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=16 */ + $value = base64_decode($source); + break; + case self::TYPE_OBJECT_IDENTIFIER: + $value = $this->_encodeOID($source); + break; + case self::TYPE_ANY: + $loc = $this->location; + if (isset($idx)) { + array_pop($this->location); + } + + switch (true) { + case !isset($source): + return $this->_encode_der(null, array('type' => self::TYPE_NULL) + $mapping, null, $special); + case is_int($source): + case $source instanceof BigInteger: + return $this->_encode_der($source, array('type' => self::TYPE_INTEGER) + $mapping, null, $special); + case is_float($source): + return $this->_encode_der($source, array('type' => self::TYPE_REAL) + $mapping, null, $special); + case is_bool($source): + return $this->_encode_der($source, array('type' => self::TYPE_BOOLEAN) + $mapping, null, $special); + case is_array($source) && count($source) == 1: + $typename = implode('', array_keys($source)); + $outtype = array_search($typename, $this->ANYmap, true); + if ($outtype !== false) { + return $this->_encode_der($source[$typename], array('type' => $outtype) + $mapping, null, $special); + } + } + + $filters = $this->filters; + foreach ($loc as $part) { + if (!isset($filters[$part])) { + $filters = false; + break; + } + $filters = $filters[$part]; + } + if ($filters === false) { + user_error('No filters defined for ' . implode('/', $loc)); + return false; + } + return $this->_encode_der($source, $filters + $mapping, null, $special); + case self::TYPE_NULL: + $value = ''; + break; + case self::TYPE_NUMERIC_STRING: + case self::TYPE_TELETEX_STRING: + case self::TYPE_PRINTABLE_STRING: + case self::TYPE_UNIVERSAL_STRING: + case self::TYPE_UTF8_STRING: + case self::TYPE_BMP_STRING: + case self::TYPE_IA5_STRING: + case self::TYPE_VISIBLE_STRING: + case self::TYPE_VIDEOTEX_STRING: + case self::TYPE_GRAPHIC_STRING: + case self::TYPE_GENERAL_STRING: + $value = $source; + break; + case self::TYPE_BOOLEAN: + $value = $source ? "\xFF" : "\x00"; + break; + default: + user_error('Mapping provides no type definition for ' . implode('/', $this->location)); + return false; + } + + if (isset($idx)) { + array_pop($this->location); + } + + if (isset($mapping['cast'])) { + if (isset($mapping['explicit']) || $mapping['type'] == self::TYPE_CHOICE) { + $value = chr($tag) . $this->_encodeLength(strlen($value)) . $value; + $tag = ($mapping['class'] << 6) | 0x20 | $mapping['cast']; + } else { + $tag = ($mapping['class'] << 6) | (ord($temp[0]) & 0x20) | $mapping['cast']; + } + } + + return chr($tag) . $this->_encodeLength(strlen($value)) . $value; + } + + /** + * DER-encode the length + * + * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See + * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information. + * + * @access private + * @param int $length + * @return string + */ + function _encodeLength($length) + { + if ($length <= 0x7F) { + return chr($length); + } + + $temp = ltrim(pack('N', $length), chr(0)); + return pack('Ca*', 0x80 | strlen($temp), $temp); + } + + /** + * BER-decode the OID + * + * Called by _decode_ber() + * + * @access private + * @param string $content + * @return string + */ + function _decodeOID($content) + { + static $eighty; + if (!$eighty) { + $eighty = new BigInteger(80); + } + + $oid = array(); + $pos = 0; + $len = strlen($content); + $n = new BigInteger(); + while ($pos < $len) { + $temp = ord($content[$pos++]); + $n = $n->bitwise_leftShift(7); + $n = $n->bitwise_or(new BigInteger($temp & 0x7F)); + if (~$temp & 0x80) { + $oid[] = $n; + $n = new BigInteger(); + } + } + $part1 = array_shift($oid); + $first = floor(ord($content[0]) / 40); + /* + "This packing of the first two object identifier components recognizes that only three values are allocated from the root + node, and at most 39 subsequent values from nodes reached by X = 0 and X = 1." + + -- https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=22 + */ + if ($first <= 2) { // ie. 0 <= ord($content[0]) < 120 (0x78) + array_unshift($oid, ord($content[0]) % 40); + array_unshift($oid, $first); + } else { + array_unshift($oid, $part1->subtract($eighty)); + array_unshift($oid, 2); + } + + return implode('.', $oid); + } + + /** + * DER-encode the OID + * + * Called by _encode_der() + * + * @access private + * @param string $source + * @return string + */ + function _encodeOID($source) + { + static $mask, $zero, $forty; + if (!$mask) { + $mask = new BigInteger(0x7F); + $zero = new BigInteger(); + $forty = new BigInteger(40); + } + + $oid = preg_match('#(?:\d+\.)+#', $source) ? $source : array_search($source, $this->oids); + if ($oid === false) { + user_error('Invalid OID'); + return false; + } + $parts = explode('.', $oid); + $part1 = array_shift($parts); + $part2 = array_shift($parts); + + $first = new BigInteger($part1); + $first = $first->multiply($forty); + $first = $first->add(new BigInteger($part2)); + + array_unshift($parts, $first->toString()); + + $value = ''; + foreach ($parts as $part) { + if (!$part) { + $temp = "\0"; + } else { + $temp = ''; + $part = new BigInteger($part); + while (!$part->equals($zero)) { + $submask = $part->bitwise_and($mask); + $submask->setPrecision(8); + $temp = (chr(0x80) | $submask->toBytes()) . $temp; + $part = $part->bitwise_rightShift(7); + } + $temp[strlen($temp) - 1] = $temp[strlen($temp) - 1] & chr(0x7F); + } + $value.= $temp; + } + + return $value; + } + + /** + * BER-decode the time + * + * Called by _decode_ber() and in the case of implicit tags asn1map(). + * + * @access private + * @param string $content + * @param int $tag + * @return string + */ + function _decodeTime($content, $tag) + { + /* UTCTime: + http://tools.ietf.org/html/rfc5280#section-4.1.2.5.1 + http://www.obj-sys.com/asn1tutorial/node15.html + + GeneralizedTime: + http://tools.ietf.org/html/rfc5280#section-4.1.2.5.2 + http://www.obj-sys.com/asn1tutorial/node14.html */ + + $format = 'YmdHis'; + + if ($tag == self::TYPE_UTC_TIME) { + // https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=28 says "the seconds + // element shall always be present" but none-the-less I've seen X509 certs where it isn't and if the + // browsers parse it phpseclib ought to too + if (preg_match('#^(\d{10})(Z|[+-]\d{4})$#', $content, $matches)) { + $content = $matches[1] . '00' . $matches[2]; + } + $prefix = substr($content, 0, 2) >= 50 ? '19' : '20'; + $content = $prefix . $content; + } elseif (strpos($content, '.') !== false) { + $format.= '.u'; + } + + if ($content[strlen($content) - 1] == 'Z') { + $content = substr($content, 0, -1) . '+0000'; + } + + if (strpos($content, '-') !== false || strpos($content, '+') !== false) { + $format.= 'O'; + } + + // error supression isn't necessary as of PHP 7.0: + // http://php.net/manual/en/migration70.other-changes.php + return @DateTime::createFromFormat($format, $content); + } + + /** + * Set the time format + * + * Sets the time / date format for asn1map(). + * + * @access public + * @param string $format + */ + function setTimeFormat($format) + { + $this->format = $format; + } + + /** + * Load OIDs + * + * Load the relevant OIDs for a particular ASN.1 semantic mapping. + * + * @access public + * @param array $oids + */ + function loadOIDs($oids) + { + $this->oids = $oids; + } + + /** + * Load filters + * + * See \phpseclib\File\X509, etc, for an example. + * + * @access public + * @param array $filters + */ + function loadFilters($filters) + { + $this->filters = $filters; + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param string $string + * @param int $index + * @return string + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } + + /** + * String type conversion + * + * This is a lazy conversion, dealing only with character size. + * No real conversion table is used. + * + * @param string $in + * @param int $from + * @param int $to + * @return string + * @access public + */ + function convert($in, $from = self::TYPE_UTF8_STRING, $to = self::TYPE_UTF8_STRING) + { + if (!isset($this->stringTypeSize[$from]) || !isset($this->stringTypeSize[$to])) { + return false; + } + $insize = $this->stringTypeSize[$from]; + $outsize = $this->stringTypeSize[$to]; + $inlength = strlen($in); + $out = ''; + + for ($i = 0; $i < $inlength;) { + if ($inlength - $i < $insize) { + return false; + } + + // Get an input character as a 32-bit value. + $c = ord($in[$i++]); + switch (true) { + case $insize == 4: + $c = ($c << 8) | ord($in[$i++]); + $c = ($c << 8) | ord($in[$i++]); + case $insize == 2: + $c = ($c << 8) | ord($in[$i++]); + case $insize == 1: + break; + case ($c & 0x80) == 0x00: + break; + case ($c & 0x40) == 0x00: + return false; + default: + $bit = 6; + do { + if ($bit > 25 || $i >= $inlength || (ord($in[$i]) & 0xC0) != 0x80) { + return false; + } + $c = ($c << 6) | (ord($in[$i++]) & 0x3F); + $bit += 5; + $mask = 1 << $bit; + } while ($c & $bit); + $c &= $mask - 1; + break; + } + + // Convert and append the character to output string. + $v = ''; + switch (true) { + case $outsize == 4: + $v .= chr($c & 0xFF); + $c >>= 8; + $v .= chr($c & 0xFF); + $c >>= 8; + case $outsize == 2: + $v .= chr($c & 0xFF); + $c >>= 8; + case $outsize == 1: + $v .= chr($c & 0xFF); + $c >>= 8; + if ($c) { + return false; + } + break; + case ($c & 0x80000000) != 0: + return false; + case $c >= 0x04000000: + $v .= chr(0x80 | ($c & 0x3F)); + $c = ($c >> 6) | 0x04000000; + case $c >= 0x00200000: + $v .= chr(0x80 | ($c & 0x3F)); + $c = ($c >> 6) | 0x00200000; + case $c >= 0x00010000: + $v .= chr(0x80 | ($c & 0x3F)); + $c = ($c >> 6) | 0x00010000; + case $c >= 0x00000800: + $v .= chr(0x80 | ($c & 0x3F)); + $c = ($c >> 6) | 0x00000800; + case $c >= 0x00000080: + $v .= chr(0x80 | ($c & 0x3F)); + $c = ($c >> 6) | 0x000000C0; + default: + $v .= chr($c); + break; + } + $out .= strrev($v); + } + return $out; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php b/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php new file mode 100644 index 000000000..68246e2b5 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php @@ -0,0 +1,47 @@ + + * @copyright 2012 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\File\ASN1; + +/** + * ASN.1 Element + * + * Bypass normal encoding rules in phpseclib\File\ASN1::encodeDER() + * + * @package ASN1 + * @author Jim Wigginton + * @access public + */ +class Element +{ + /** + * Raw element value + * + * @var string + * @access private + */ + var $element; + + /** + * Constructor + * + * @param string $encoded + * @return \phpseclib\File\ASN1\Element + * @access public + */ + function __construct($encoded) + { + $this->element = $encoded; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/File/X509.php b/vendor/phpseclib/phpseclib/phpseclib/File/X509.php new file mode 100644 index 000000000..3520efdc1 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/File/X509.php @@ -0,0 +1,5094 @@ + + * @copyright 2012 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\File; + +use phpseclib\Crypt\Hash; +use phpseclib\Crypt\Random; +use phpseclib\Crypt\RSA; +use phpseclib\File\ASN1\Element; +use phpseclib\Math\BigInteger; +use DateTime; +use DateTimeZone; + +/** + * Pure-PHP X.509 Parser + * + * @package X509 + * @author Jim Wigginton + * @access public + */ +class X509 +{ + /** + * Flag to only accept signatures signed by certificate authorities + * + * Not really used anymore but retained all the same to suppress E_NOTICEs from old installs + * + * @access public + */ + const VALIDATE_SIGNATURE_BY_CA = 1; + + /**#@+ + * @access public + * @see \phpseclib\File\X509::getDN() + */ + /** + * Return internal array representation + */ + const DN_ARRAY = 0; + /** + * Return string + */ + const DN_STRING = 1; + /** + * Return ASN.1 name string + */ + const DN_ASN1 = 2; + /** + * Return OpenSSL compatible array + */ + const DN_OPENSSL = 3; + /** + * Return canonical ASN.1 RDNs string + */ + const DN_CANON = 4; + /** + * Return name hash for file indexing + */ + const DN_HASH = 5; + /**#@-*/ + + /**#@+ + * @access public + * @see \phpseclib\File\X509::saveX509() + * @see \phpseclib\File\X509::saveCSR() + * @see \phpseclib\File\X509::saveCRL() + */ + /** + * Save as PEM + * + * ie. a base64-encoded PEM with a header and a footer + */ + const FORMAT_PEM = 0; + /** + * Save as DER + */ + const FORMAT_DER = 1; + /** + * Save as a SPKAC + * + * Only works on CSRs. Not currently supported. + */ + const FORMAT_SPKAC = 2; + /** + * Auto-detect the format + * + * Used only by the load*() functions + */ + const FORMAT_AUTO_DETECT = 3; + /**#@-*/ + + /** + * Attribute value disposition. + * If disposition is >= 0, this is the index of the target value. + */ + const ATTR_ALL = -1; // All attribute values (array). + const ATTR_APPEND = -2; // Add a value. + const ATTR_REPLACE = -3; // Clear first, then add a value. + + /** + * ASN.1 syntax for X.509 certificates + * + * @var array + * @access private + */ + var $Certificate; + + /**#@+ + * ASN.1 syntax for various extensions + * + * @access private + */ + var $DirectoryString; + var $PKCS9String; + var $AttributeValue; + var $Extensions; + var $KeyUsage; + var $ExtKeyUsageSyntax; + var $BasicConstraints; + var $KeyIdentifier; + var $CRLDistributionPoints; + var $AuthorityKeyIdentifier; + var $CertificatePolicies; + var $AuthorityInfoAccessSyntax; + var $SubjectAltName; + var $SubjectDirectoryAttributes; + var $PrivateKeyUsagePeriod; + var $IssuerAltName; + var $PolicyMappings; + var $NameConstraints; + + var $CPSuri; + var $UserNotice; + + var $netscape_cert_type; + var $netscape_comment; + var $netscape_ca_policy_url; + + var $Name; + var $RelativeDistinguishedName; + var $CRLNumber; + var $CRLReason; + var $IssuingDistributionPoint; + var $InvalidityDate; + var $CertificateIssuer; + var $HoldInstructionCode; + var $SignedPublicKeyAndChallenge; + /**#@-*/ + + /**#@+ + * ASN.1 syntax for various DN attributes + * + * @access private + */ + var $PostalAddress; + /**#@-*/ + + /** + * ASN.1 syntax for Certificate Signing Requests (RFC2986) + * + * @var array + * @access private + */ + var $CertificationRequest; + + /** + * ASN.1 syntax for Certificate Revocation Lists (RFC5280) + * + * @var array + * @access private + */ + var $CertificateList; + + /** + * Distinguished Name + * + * @var array + * @access private + */ + var $dn; + + /** + * Public key + * + * @var string + * @access private + */ + var $publicKey; + + /** + * Private key + * + * @var string + * @access private + */ + var $privateKey; + + /** + * Object identifiers for X.509 certificates + * + * @var array + * @access private + * @link http://en.wikipedia.org/wiki/Object_identifier + */ + var $oids; + + /** + * The certificate authorities + * + * @var array + * @access private + */ + var $CAs; + + /** + * The currently loaded certificate + * + * @var array + * @access private + */ + var $currentCert; + + /** + * The signature subject + * + * There's no guarantee \phpseclib\File\X509 is going to re-encode an X.509 cert in the same way it was originally + * encoded so we take save the portion of the original cert that the signature would have made for. + * + * @var string + * @access private + */ + var $signatureSubject; + + /** + * Certificate Start Date + * + * @var string + * @access private + */ + var $startDate; + + /** + * Certificate End Date + * + * @var string + * @access private + */ + var $endDate; + + /** + * Serial Number + * + * @var string + * @access private + */ + var $serialNumber; + + /** + * Key Identifier + * + * See {@link http://tools.ietf.org/html/rfc5280#section-4.2.1.1 RFC5280#section-4.2.1.1} and + * {@link http://tools.ietf.org/html/rfc5280#section-4.2.1.2 RFC5280#section-4.2.1.2}. + * + * @var string + * @access private + */ + var $currentKeyIdentifier; + + /** + * CA Flag + * + * @var bool + * @access private + */ + var $caFlag = false; + + /** + * SPKAC Challenge + * + * @var string + * @access private + */ + var $challenge; + + /** + * Recursion Limit + * + * @var int + * @access private + */ + static $recur_limit = 5; + + /** + * URL fetch flag + * + * @var bool + * @access private + */ + static $disable_url_fetch = false; + + /** + * Default Constructor. + * + * @return \phpseclib\File\X509 + * @access public + */ + function __construct() + { + // Explicitly Tagged Module, 1988 Syntax + // http://tools.ietf.org/html/rfc5280#appendix-A.1 + + $this->DirectoryString = array( + 'type' => ASN1::TYPE_CHOICE, + 'children' => array( + 'teletexString' => array('type' => ASN1::TYPE_TELETEX_STRING), + 'printableString' => array('type' => ASN1::TYPE_PRINTABLE_STRING), + 'universalString' => array('type' => ASN1::TYPE_UNIVERSAL_STRING), + 'utf8String' => array('type' => ASN1::TYPE_UTF8_STRING), + 'bmpString' => array('type' => ASN1::TYPE_BMP_STRING) + ) + ); + + $this->PKCS9String = array( + 'type' => ASN1::TYPE_CHOICE, + 'children' => array( + 'ia5String' => array('type' => ASN1::TYPE_IA5_STRING), + 'directoryString' => $this->DirectoryString + ) + ); + + $this->AttributeValue = array('type' => ASN1::TYPE_ANY); + + $AttributeType = array('type' => ASN1::TYPE_OBJECT_IDENTIFIER); + + $AttributeTypeAndValue = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'type' => $AttributeType, + 'value'=> $this->AttributeValue + ) + ); + + /* + In practice, RDNs containing multiple name-value pairs (called "multivalued RDNs") are rare, + but they can be useful at times when either there is no unique attribute in the entry or you + want to ensure that the entry's DN contains some useful identifying information. + + - https://www.opends.org/wiki/page/DefinitionRelativeDistinguishedName + */ + $this->RelativeDistinguishedName = array( + 'type' => ASN1::TYPE_SET, + 'min' => 1, + 'max' => -1, + 'children' => $AttributeTypeAndValue + ); + + // http://tools.ietf.org/html/rfc5280#section-4.1.2.4 + $RDNSequence = array( + 'type' => ASN1::TYPE_SEQUENCE, + // RDNSequence does not define a min or a max, which means it doesn't have one + 'min' => 0, + 'max' => -1, + 'children' => $this->RelativeDistinguishedName + ); + + $this->Name = array( + 'type' => ASN1::TYPE_CHOICE, + 'children' => array( + 'rdnSequence' => $RDNSequence + ) + ); + + // http://tools.ietf.org/html/rfc5280#section-4.1.1.2 + $AlgorithmIdentifier = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'algorithm' => array('type' => ASN1::TYPE_OBJECT_IDENTIFIER), + 'parameters' => array( + 'type' => ASN1::TYPE_ANY, + 'optional' => true + ) + ) + ); + + /* + A certificate using system MUST reject the certificate if it encounters + a critical extension it does not recognize; however, a non-critical + extension may be ignored if it is not recognized. + + http://tools.ietf.org/html/rfc5280#section-4.2 + */ + $Extension = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'extnId' => array('type' => ASN1::TYPE_OBJECT_IDENTIFIER), + 'critical' => array( + 'type' => ASN1::TYPE_BOOLEAN, + 'optional' => true, + 'default' => false + ), + 'extnValue' => array('type' => ASN1::TYPE_OCTET_STRING) + ) + ); + + $this->Extensions = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'min' => 1, + // technically, it's MAX, but we'll assume anything < 0 is MAX + 'max' => -1, + // if 'children' isn't an array then 'min' and 'max' must be defined + 'children' => $Extension + ); + + $SubjectPublicKeyInfo = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'algorithm' => $AlgorithmIdentifier, + 'subjectPublicKey' => array('type' => ASN1::TYPE_BIT_STRING) + ) + ); + + $UniqueIdentifier = array('type' => ASN1::TYPE_BIT_STRING); + + $Time = array( + 'type' => ASN1::TYPE_CHOICE, + 'children' => array( + 'utcTime' => array('type' => ASN1::TYPE_UTC_TIME), + 'generalTime' => array('type' => ASN1::TYPE_GENERALIZED_TIME) + ) + ); + + // http://tools.ietf.org/html/rfc5280#section-4.1.2.5 + $Validity = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'notBefore' => $Time, + 'notAfter' => $Time + ) + ); + + $CertificateSerialNumber = array('type' => ASN1::TYPE_INTEGER); + + $Version = array( + 'type' => ASN1::TYPE_INTEGER, + 'mapping' => array('v1', 'v2', 'v3') + ); + + // assert($TBSCertificate['children']['signature'] == $Certificate['children']['signatureAlgorithm']) + $TBSCertificate = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + // technically, default implies optional, but we'll define it as being optional, none-the-less, just to + // reenforce that fact + 'version' => array( + 'constant' => 0, + 'optional' => true, + 'explicit' => true, + 'default' => 'v1' + ) + $Version, + 'serialNumber' => $CertificateSerialNumber, + 'signature' => $AlgorithmIdentifier, + 'issuer' => $this->Name, + 'validity' => $Validity, + 'subject' => $this->Name, + 'subjectPublicKeyInfo' => $SubjectPublicKeyInfo, + // implicit means that the T in the TLV structure is to be rewritten, regardless of the type + 'issuerUniqueID' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ) + $UniqueIdentifier, + 'subjectUniqueID' => array( + 'constant' => 2, + 'optional' => true, + 'implicit' => true + ) + $UniqueIdentifier, + // doesn't use the EXPLICIT keyword but if + // it's not IMPLICIT, it's EXPLICIT + 'extensions' => array( + 'constant' => 3, + 'optional' => true, + 'explicit' => true + ) + $this->Extensions + ) + ); + + $this->Certificate = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'tbsCertificate' => $TBSCertificate, + 'signatureAlgorithm' => $AlgorithmIdentifier, + 'signature' => array('type' => ASN1::TYPE_BIT_STRING) + ) + ); + + $this->KeyUsage = array( + 'type' => ASN1::TYPE_BIT_STRING, + 'mapping' => array( + 'digitalSignature', + 'nonRepudiation', + 'keyEncipherment', + 'dataEncipherment', + 'keyAgreement', + 'keyCertSign', + 'cRLSign', + 'encipherOnly', + 'decipherOnly' + ) + ); + + $this->BasicConstraints = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'cA' => array( + 'type' => ASN1::TYPE_BOOLEAN, + 'optional' => true, + 'default' => false + ), + 'pathLenConstraint' => array( + 'type' => ASN1::TYPE_INTEGER, + 'optional' => true + ) + ) + ); + + $this->KeyIdentifier = array('type' => ASN1::TYPE_OCTET_STRING); + + $OrganizationalUnitNames = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'min' => 1, + 'max' => 4, // ub-organizational-units + 'children' => array('type' => ASN1::TYPE_PRINTABLE_STRING) + ); + + $PersonalName = array( + 'type' => ASN1::TYPE_SET, + 'children' => array( + 'surname' => array( + 'type' => ASN1::TYPE_PRINTABLE_STRING, + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ), + 'given-name' => array( + 'type' => ASN1::TYPE_PRINTABLE_STRING, + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ), + 'initials' => array( + 'type' => ASN1::TYPE_PRINTABLE_STRING, + 'constant' => 2, + 'optional' => true, + 'implicit' => true + ), + 'generation-qualifier' => array( + 'type' => ASN1::TYPE_PRINTABLE_STRING, + 'constant' => 3, + 'optional' => true, + 'implicit' => true + ) + ) + ); + + $NumericUserIdentifier = array('type' => ASN1::TYPE_NUMERIC_STRING); + + $OrganizationName = array('type' => ASN1::TYPE_PRINTABLE_STRING); + + $PrivateDomainName = array( + 'type' => ASN1::TYPE_CHOICE, + 'children' => array( + 'numeric' => array('type' => ASN1::TYPE_NUMERIC_STRING), + 'printable' => array('type' => ASN1::TYPE_PRINTABLE_STRING) + ) + ); + + $TerminalIdentifier = array('type' => ASN1::TYPE_PRINTABLE_STRING); + + $NetworkAddress = array('type' => ASN1::TYPE_NUMERIC_STRING); + + $AdministrationDomainName = array( + 'type' => ASN1::TYPE_CHOICE, + // if class isn't present it's assumed to be \phpseclib\File\ASN1::CLASS_UNIVERSAL or + // (if constant is present) \phpseclib\File\ASN1::CLASS_CONTEXT_SPECIFIC + 'class' => ASN1::CLASS_APPLICATION, + 'cast' => 2, + 'children' => array( + 'numeric' => array('type' => ASN1::TYPE_NUMERIC_STRING), + 'printable' => array('type' => ASN1::TYPE_PRINTABLE_STRING) + ) + ); + + $CountryName = array( + 'type' => ASN1::TYPE_CHOICE, + // if class isn't present it's assumed to be \phpseclib\File\ASN1::CLASS_UNIVERSAL or + // (if constant is present) \phpseclib\File\ASN1::CLASS_CONTEXT_SPECIFIC + 'class' => ASN1::CLASS_APPLICATION, + 'cast' => 1, + 'children' => array( + 'x121-dcc-code' => array('type' => ASN1::TYPE_NUMERIC_STRING), + 'iso-3166-alpha2-code' => array('type' => ASN1::TYPE_PRINTABLE_STRING) + ) + ); + + $AnotherName = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'type-id' => array('type' => ASN1::TYPE_OBJECT_IDENTIFIER), + 'value' => array( + 'type' => ASN1::TYPE_ANY, + 'constant' => 0, + 'optional' => true, + 'explicit' => true + ) + ) + ); + + $ExtensionAttribute = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'extension-attribute-type' => array( + 'type' => ASN1::TYPE_PRINTABLE_STRING, + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ), + 'extension-attribute-value' => array( + 'type' => ASN1::TYPE_ANY, + 'constant' => 1, + 'optional' => true, + 'explicit' => true + ) + ) + ); + + $ExtensionAttributes = array( + 'type' => ASN1::TYPE_SET, + 'min' => 1, + 'max' => 256, // ub-extension-attributes + 'children' => $ExtensionAttribute + ); + + $BuiltInDomainDefinedAttribute = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'type' => array('type' => ASN1::TYPE_PRINTABLE_STRING), + 'value' => array('type' => ASN1::TYPE_PRINTABLE_STRING) + ) + ); + + $BuiltInDomainDefinedAttributes = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'min' => 1, + 'max' => 4, // ub-domain-defined-attributes + 'children' => $BuiltInDomainDefinedAttribute + ); + + $BuiltInStandardAttributes = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'country-name' => array('optional' => true) + $CountryName, + 'administration-domain-name' => array('optional' => true) + $AdministrationDomainName, + 'network-address' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ) + $NetworkAddress, + 'terminal-identifier' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ) + $TerminalIdentifier, + 'private-domain-name' => array( + 'constant' => 2, + 'optional' => true, + 'explicit' => true + ) + $PrivateDomainName, + 'organization-name' => array( + 'constant' => 3, + 'optional' => true, + 'implicit' => true + ) + $OrganizationName, + 'numeric-user-identifier' => array( + 'constant' => 4, + 'optional' => true, + 'implicit' => true + ) + $NumericUserIdentifier, + 'personal-name' => array( + 'constant' => 5, + 'optional' => true, + 'implicit' => true + ) + $PersonalName, + 'organizational-unit-names' => array( + 'constant' => 6, + 'optional' => true, + 'implicit' => true + ) + $OrganizationalUnitNames + ) + ); + + $ORAddress = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'built-in-standard-attributes' => $BuiltInStandardAttributes, + 'built-in-domain-defined-attributes' => array('optional' => true) + $BuiltInDomainDefinedAttributes, + 'extension-attributes' => array('optional' => true) + $ExtensionAttributes + ) + ); + + $EDIPartyName = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'nameAssigner' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ) + $this->DirectoryString, + // partyName is technically required but \phpseclib\File\ASN1 doesn't currently support non-optional constants and + // setting it to optional gets the job done in any event. + 'partyName' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ) + $this->DirectoryString + ) + ); + + $GeneralName = array( + 'type' => ASN1::TYPE_CHOICE, + 'children' => array( + 'otherName' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ) + $AnotherName, + 'rfc822Name' => array( + 'type' => ASN1::TYPE_IA5_STRING, + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ), + 'dNSName' => array( + 'type' => ASN1::TYPE_IA5_STRING, + 'constant' => 2, + 'optional' => true, + 'implicit' => true + ), + 'x400Address' => array( + 'constant' => 3, + 'optional' => true, + 'implicit' => true + ) + $ORAddress, + 'directoryName' => array( + 'constant' => 4, + 'optional' => true, + 'explicit' => true + ) + $this->Name, + 'ediPartyName' => array( + 'constant' => 5, + 'optional' => true, + 'implicit' => true + ) + $EDIPartyName, + 'uniformResourceIdentifier' => array( + 'type' => ASN1::TYPE_IA5_STRING, + 'constant' => 6, + 'optional' => true, + 'implicit' => true + ), + 'iPAddress' => array( + 'type' => ASN1::TYPE_OCTET_STRING, + 'constant' => 7, + 'optional' => true, + 'implicit' => true + ), + 'registeredID' => array( + 'type' => ASN1::TYPE_OBJECT_IDENTIFIER, + 'constant' => 8, + 'optional' => true, + 'implicit' => true + ) + ) + ); + + $GeneralNames = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => $GeneralName + ); + + $this->IssuerAltName = $GeneralNames; + + $ReasonFlags = array( + 'type' => ASN1::TYPE_BIT_STRING, + 'mapping' => array( + 'unused', + 'keyCompromise', + 'cACompromise', + 'affiliationChanged', + 'superseded', + 'cessationOfOperation', + 'certificateHold', + 'privilegeWithdrawn', + 'aACompromise' + ) + ); + + $DistributionPointName = array( + 'type' => ASN1::TYPE_CHOICE, + 'children' => array( + 'fullName' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ) + $GeneralNames, + 'nameRelativeToCRLIssuer' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ) + $this->RelativeDistinguishedName + ) + ); + + $DistributionPoint = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'distributionPoint' => array( + 'constant' => 0, + 'optional' => true, + 'explicit' => true + ) + $DistributionPointName, + 'reasons' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ) + $ReasonFlags, + 'cRLIssuer' => array( + 'constant' => 2, + 'optional' => true, + 'implicit' => true + ) + $GeneralNames + ) + ); + + $this->CRLDistributionPoints = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => $DistributionPoint + ); + + $this->AuthorityKeyIdentifier = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'keyIdentifier' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ) + $this->KeyIdentifier, + 'authorityCertIssuer' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ) + $GeneralNames, + 'authorityCertSerialNumber' => array( + 'constant' => 2, + 'optional' => true, + 'implicit' => true + ) + $CertificateSerialNumber + ) + ); + + $PolicyQualifierId = array('type' => ASN1::TYPE_OBJECT_IDENTIFIER); + + $PolicyQualifierInfo = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'policyQualifierId' => $PolicyQualifierId, + 'qualifier' => array('type' => ASN1::TYPE_ANY) + ) + ); + + $CertPolicyId = array('type' => ASN1::TYPE_OBJECT_IDENTIFIER); + + $PolicyInformation = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'policyIdentifier' => $CertPolicyId, + 'policyQualifiers' => array( + 'type' => ASN1::TYPE_SEQUENCE, + 'min' => 0, + 'max' => -1, + 'optional' => true, + 'children' => $PolicyQualifierInfo + ) + ) + ); + + $this->CertificatePolicies = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => $PolicyInformation + ); + + $this->PolicyMappings = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'issuerDomainPolicy' => $CertPolicyId, + 'subjectDomainPolicy' => $CertPolicyId + ) + ) + ); + + $KeyPurposeId = array('type' => ASN1::TYPE_OBJECT_IDENTIFIER); + + $this->ExtKeyUsageSyntax = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => $KeyPurposeId + ); + + $AccessDescription = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'accessMethod' => array('type' => ASN1::TYPE_OBJECT_IDENTIFIER), + 'accessLocation' => $GeneralName + ) + ); + + $this->AuthorityInfoAccessSyntax = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => $AccessDescription + ); + + $this->SubjectInfoAccessSyntax = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => $AccessDescription + ); + + $this->SubjectAltName = $GeneralNames; + + $this->PrivateKeyUsagePeriod = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'notBefore' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true, + 'type' => ASN1::TYPE_GENERALIZED_TIME), + 'notAfter' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true, + 'type' => ASN1::TYPE_GENERALIZED_TIME) + ) + ); + + $BaseDistance = array('type' => ASN1::TYPE_INTEGER); + + $GeneralSubtree = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'base' => $GeneralName, + 'minimum' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true, + 'default' => new BigInteger(0) + ) + $BaseDistance, + 'maximum' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true, + ) + $BaseDistance + ) + ); + + $GeneralSubtrees = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => $GeneralSubtree + ); + + $this->NameConstraints = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'permittedSubtrees' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ) + $GeneralSubtrees, + 'excludedSubtrees' => array( + 'constant' => 1, + 'optional' => true, + 'implicit' => true + ) + $GeneralSubtrees + ) + ); + + $this->CPSuri = array('type' => ASN1::TYPE_IA5_STRING); + + $DisplayText = array( + 'type' => ASN1::TYPE_CHOICE, + 'children' => array( + 'ia5String' => array('type' => ASN1::TYPE_IA5_STRING), + 'visibleString' => array('type' => ASN1::TYPE_VISIBLE_STRING), + 'bmpString' => array('type' => ASN1::TYPE_BMP_STRING), + 'utf8String' => array('type' => ASN1::TYPE_UTF8_STRING) + ) + ); + + $NoticeReference = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'organization' => $DisplayText, + 'noticeNumbers' => array( + 'type' => ASN1::TYPE_SEQUENCE, + 'min' => 1, + 'max' => 200, + 'children' => array('type' => ASN1::TYPE_INTEGER) + ) + ) + ); + + $this->UserNotice = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'noticeRef' => array( + 'optional' => true, + 'implicit' => true + ) + $NoticeReference, + 'explicitText' => array( + 'optional' => true, + 'implicit' => true + ) + $DisplayText + ) + ); + + // mapping is from + $this->netscape_cert_type = array( + 'type' => ASN1::TYPE_BIT_STRING, + 'mapping' => array( + 'SSLClient', + 'SSLServer', + 'Email', + 'ObjectSigning', + 'Reserved', + 'SSLCA', + 'EmailCA', + 'ObjectSigningCA' + ) + ); + + $this->netscape_comment = array('type' => ASN1::TYPE_IA5_STRING); + $this->netscape_ca_policy_url = array('type' => ASN1::TYPE_IA5_STRING); + + // attribute is used in RFC2986 but we're using the RFC5280 definition + + $Attribute = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'type' => $AttributeType, + 'value'=> array( + 'type' => ASN1::TYPE_SET, + 'min' => 1, + 'max' => -1, + 'children' => $this->AttributeValue + ) + ) + ); + + $this->SubjectDirectoryAttributes = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'min' => 1, + 'max' => -1, + 'children' => $Attribute + ); + + // adapted from + + $Attributes = array( + 'type' => ASN1::TYPE_SET, + 'min' => 1, + 'max' => -1, + 'children' => $Attribute + ); + + $CertificationRequestInfo = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'version' => array( + 'type' => ASN1::TYPE_INTEGER, + 'mapping' => array('v1') + ), + 'subject' => $this->Name, + 'subjectPKInfo' => $SubjectPublicKeyInfo, + 'attributes' => array( + 'constant' => 0, + 'optional' => true, + 'implicit' => true + ) + $Attributes, + ) + ); + + $this->CertificationRequest = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'certificationRequestInfo' => $CertificationRequestInfo, + 'signatureAlgorithm' => $AlgorithmIdentifier, + 'signature' => array('type' => ASN1::TYPE_BIT_STRING) + ) + ); + + $RevokedCertificate = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'userCertificate' => $CertificateSerialNumber, + 'revocationDate' => $Time, + 'crlEntryExtensions' => array( + 'optional' => true + ) + $this->Extensions + ) + ); + + $TBSCertList = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'version' => array( + 'optional' => true, + 'default' => 'v1' + ) + $Version, + 'signature' => $AlgorithmIdentifier, + 'issuer' => $this->Name, + 'thisUpdate' => $Time, + 'nextUpdate' => array( + 'optional' => true + ) + $Time, + 'revokedCertificates' => array( + 'type' => ASN1::TYPE_SEQUENCE, + 'optional' => true, + 'min' => 0, + 'max' => -1, + 'children' => $RevokedCertificate + ), + 'crlExtensions' => array( + 'constant' => 0, + 'optional' => true, + 'explicit' => true + ) + $this->Extensions + ) + ); + + $this->CertificateList = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'tbsCertList' => $TBSCertList, + 'signatureAlgorithm' => $AlgorithmIdentifier, + 'signature' => array('type' => ASN1::TYPE_BIT_STRING) + ) + ); + + $this->CRLNumber = array('type' => ASN1::TYPE_INTEGER); + + $this->CRLReason = array('type' => ASN1::TYPE_ENUMERATED, + 'mapping' => array( + 'unspecified', + 'keyCompromise', + 'cACompromise', + 'affiliationChanged', + 'superseded', + 'cessationOfOperation', + 'certificateHold', + // Value 7 is not used. + 8 => 'removeFromCRL', + 'privilegeWithdrawn', + 'aACompromise' + ) + ); + + $this->IssuingDistributionPoint = array('type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'distributionPoint' => array( + 'constant' => 0, + 'optional' => true, + 'explicit' => true + ) + $DistributionPointName, + 'onlyContainsUserCerts' => array( + 'type' => ASN1::TYPE_BOOLEAN, + 'constant' => 1, + 'optional' => true, + 'default' => false, + 'implicit' => true + ), + 'onlyContainsCACerts' => array( + 'type' => ASN1::TYPE_BOOLEAN, + 'constant' => 2, + 'optional' => true, + 'default' => false, + 'implicit' => true + ), + 'onlySomeReasons' => array( + 'constant' => 3, + 'optional' => true, + 'implicit' => true + ) + $ReasonFlags, + 'indirectCRL' => array( + 'type' => ASN1::TYPE_BOOLEAN, + 'constant' => 4, + 'optional' => true, + 'default' => false, + 'implicit' => true + ), + 'onlyContainsAttributeCerts' => array( + 'type' => ASN1::TYPE_BOOLEAN, + 'constant' => 5, + 'optional' => true, + 'default' => false, + 'implicit' => true + ) + ) + ); + + $this->InvalidityDate = array('type' => ASN1::TYPE_GENERALIZED_TIME); + + $this->CertificateIssuer = $GeneralNames; + + $this->HoldInstructionCode = array('type' => ASN1::TYPE_OBJECT_IDENTIFIER); + + $PublicKeyAndChallenge = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'spki' => $SubjectPublicKeyInfo, + 'challenge' => array('type' => ASN1::TYPE_IA5_STRING) + ) + ); + + $this->SignedPublicKeyAndChallenge = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'children' => array( + 'publicKeyAndChallenge' => $PublicKeyAndChallenge, + 'signatureAlgorithm' => $AlgorithmIdentifier, + 'signature' => array('type' => ASN1::TYPE_BIT_STRING) + ) + ); + + $this->PostalAddress = array( + 'type' => ASN1::TYPE_SEQUENCE, + 'optional' => true, + 'min' => 1, + 'max' => -1, + 'children' => $this->DirectoryString + ); + + // OIDs from RFC5280 and those RFCs mentioned in RFC5280#section-4.1.1.2 + $this->oids = array( + '1.3.6.1.5.5.7' => 'id-pkix', + '1.3.6.1.5.5.7.1' => 'id-pe', + '1.3.6.1.5.5.7.2' => 'id-qt', + '1.3.6.1.5.5.7.3' => 'id-kp', + '1.3.6.1.5.5.7.48' => 'id-ad', + '1.3.6.1.5.5.7.2.1' => 'id-qt-cps', + '1.3.6.1.5.5.7.2.2' => 'id-qt-unotice', + '1.3.6.1.5.5.7.48.1' =>'id-ad-ocsp', + '1.3.6.1.5.5.7.48.2' => 'id-ad-caIssuers', + '1.3.6.1.5.5.7.48.3' => 'id-ad-timeStamping', + '1.3.6.1.5.5.7.48.5' => 'id-ad-caRepository', + '2.5.4' => 'id-at', + '2.5.4.41' => 'id-at-name', + '2.5.4.4' => 'id-at-surname', + '2.5.4.42' => 'id-at-givenName', + '2.5.4.43' => 'id-at-initials', + '2.5.4.44' => 'id-at-generationQualifier', + '2.5.4.3' => 'id-at-commonName', + '2.5.4.7' => 'id-at-localityName', + '2.5.4.8' => 'id-at-stateOrProvinceName', + '2.5.4.10' => 'id-at-organizationName', + '2.5.4.11' => 'id-at-organizationalUnitName', + '2.5.4.12' => 'id-at-title', + '2.5.4.13' => 'id-at-description', + '2.5.4.46' => 'id-at-dnQualifier', + '2.5.4.6' => 'id-at-countryName', + '2.5.4.5' => 'id-at-serialNumber', + '2.5.4.65' => 'id-at-pseudonym', + '2.5.4.17' => 'id-at-postalCode', + '2.5.4.9' => 'id-at-streetAddress', + '2.5.4.45' => 'id-at-uniqueIdentifier', + '2.5.4.72' => 'id-at-role', + '2.5.4.16' => 'id-at-postalAddress', + + '0.9.2342.19200300.100.1.25' => 'id-domainComponent', + '1.2.840.113549.1.9' => 'pkcs-9', + '1.2.840.113549.1.9.1' => 'pkcs-9-at-emailAddress', + '2.5.29' => 'id-ce', + '2.5.29.35' => 'id-ce-authorityKeyIdentifier', + '2.5.29.14' => 'id-ce-subjectKeyIdentifier', + '2.5.29.15' => 'id-ce-keyUsage', + '2.5.29.16' => 'id-ce-privateKeyUsagePeriod', + '2.5.29.32' => 'id-ce-certificatePolicies', + '2.5.29.32.0' => 'anyPolicy', + + '2.5.29.33' => 'id-ce-policyMappings', + '2.5.29.17' => 'id-ce-subjectAltName', + '2.5.29.18' => 'id-ce-issuerAltName', + '2.5.29.9' => 'id-ce-subjectDirectoryAttributes', + '2.5.29.19' => 'id-ce-basicConstraints', + '2.5.29.30' => 'id-ce-nameConstraints', + '2.5.29.36' => 'id-ce-policyConstraints', + '2.5.29.31' => 'id-ce-cRLDistributionPoints', + '2.5.29.37' => 'id-ce-extKeyUsage', + '2.5.29.37.0' => 'anyExtendedKeyUsage', + '1.3.6.1.5.5.7.3.1' => 'id-kp-serverAuth', + '1.3.6.1.5.5.7.3.2' => 'id-kp-clientAuth', + '1.3.6.1.5.5.7.3.3' => 'id-kp-codeSigning', + '1.3.6.1.5.5.7.3.4' => 'id-kp-emailProtection', + '1.3.6.1.5.5.7.3.8' => 'id-kp-timeStamping', + '1.3.6.1.5.5.7.3.9' => 'id-kp-OCSPSigning', + '2.5.29.54' => 'id-ce-inhibitAnyPolicy', + '2.5.29.46' => 'id-ce-freshestCRL', + '1.3.6.1.5.5.7.1.1' => 'id-pe-authorityInfoAccess', + '1.3.6.1.5.5.7.1.11' => 'id-pe-subjectInfoAccess', + '2.5.29.20' => 'id-ce-cRLNumber', + '2.5.29.28' => 'id-ce-issuingDistributionPoint', + '2.5.29.27' => 'id-ce-deltaCRLIndicator', + '2.5.29.21' => 'id-ce-cRLReasons', + '2.5.29.29' => 'id-ce-certificateIssuer', + '2.5.29.23' => 'id-ce-holdInstructionCode', + '1.2.840.10040.2' => 'holdInstruction', + '1.2.840.10040.2.1' => 'id-holdinstruction-none', + '1.2.840.10040.2.2' => 'id-holdinstruction-callissuer', + '1.2.840.10040.2.3' => 'id-holdinstruction-reject', + '2.5.29.24' => 'id-ce-invalidityDate', + + '1.2.840.113549.2.2' => 'md2', + '1.2.840.113549.2.5' => 'md5', + '1.3.14.3.2.26' => 'id-sha1', + '1.2.840.10040.4.1' => 'id-dsa', + '1.2.840.10040.4.3' => 'id-dsa-with-sha1', + '1.2.840.113549.1.1' => 'pkcs-1', + '1.2.840.113549.1.1.1' => 'rsaEncryption', + '1.2.840.113549.1.1.2' => 'md2WithRSAEncryption', + '1.2.840.113549.1.1.4' => 'md5WithRSAEncryption', + '1.2.840.113549.1.1.5' => 'sha1WithRSAEncryption', + '1.2.840.10046.2.1' => 'dhpublicnumber', + '2.16.840.1.101.2.1.1.22' => 'id-keyExchangeAlgorithm', + '1.2.840.10045' => 'ansi-X9-62', + '1.2.840.10045.4' => 'id-ecSigType', + '1.2.840.10045.4.1' => 'ecdsa-with-SHA1', + '1.2.840.10045.1' => 'id-fieldType', + '1.2.840.10045.1.1' => 'prime-field', + '1.2.840.10045.1.2' => 'characteristic-two-field', + '1.2.840.10045.1.2.3' => 'id-characteristic-two-basis', + '1.2.840.10045.1.2.3.1' => 'gnBasis', + '1.2.840.10045.1.2.3.2' => 'tpBasis', + '1.2.840.10045.1.2.3.3' => 'ppBasis', + '1.2.840.10045.2' => 'id-publicKeyType', + '1.2.840.10045.2.1' => 'id-ecPublicKey', + '1.2.840.10045.3' => 'ellipticCurve', + '1.2.840.10045.3.0' => 'c-TwoCurve', + '1.2.840.10045.3.0.1' => 'c2pnb163v1', + '1.2.840.10045.3.0.2' => 'c2pnb163v2', + '1.2.840.10045.3.0.3' => 'c2pnb163v3', + '1.2.840.10045.3.0.4' => 'c2pnb176w1', + '1.2.840.10045.3.0.5' => 'c2pnb191v1', + '1.2.840.10045.3.0.6' => 'c2pnb191v2', + '1.2.840.10045.3.0.7' => 'c2pnb191v3', + '1.2.840.10045.3.0.8' => 'c2pnb191v4', + '1.2.840.10045.3.0.9' => 'c2pnb191v5', + '1.2.840.10045.3.0.10' => 'c2pnb208w1', + '1.2.840.10045.3.0.11' => 'c2pnb239v1', + '1.2.840.10045.3.0.12' => 'c2pnb239v2', + '1.2.840.10045.3.0.13' => 'c2pnb239v3', + '1.2.840.10045.3.0.14' => 'c2pnb239v4', + '1.2.840.10045.3.0.15' => 'c2pnb239v5', + '1.2.840.10045.3.0.16' => 'c2pnb272w1', + '1.2.840.10045.3.0.17' => 'c2pnb304w1', + '1.2.840.10045.3.0.18' => 'c2pnb359v1', + '1.2.840.10045.3.0.19' => 'c2pnb368w1', + '1.2.840.10045.3.0.20' => 'c2pnb431r1', + '1.2.840.10045.3.1' => 'primeCurve', + '1.2.840.10045.3.1.1' => 'prime192v1', + '1.2.840.10045.3.1.2' => 'prime192v2', + '1.2.840.10045.3.1.3' => 'prime192v3', + '1.2.840.10045.3.1.4' => 'prime239v1', + '1.2.840.10045.3.1.5' => 'prime239v2', + '1.2.840.10045.3.1.6' => 'prime239v3', + '1.2.840.10045.3.1.7' => 'prime256v1', + '1.2.840.113549.1.1.7' => 'id-RSAES-OAEP', + '1.2.840.113549.1.1.9' => 'id-pSpecified', + '1.2.840.113549.1.1.10' => 'id-RSASSA-PSS', + '1.2.840.113549.1.1.8' => 'id-mgf1', + '1.2.840.113549.1.1.14' => 'sha224WithRSAEncryption', + '1.2.840.113549.1.1.11' => 'sha256WithRSAEncryption', + '1.2.840.113549.1.1.12' => 'sha384WithRSAEncryption', + '1.2.840.113549.1.1.13' => 'sha512WithRSAEncryption', + '2.16.840.1.101.3.4.2.4' => 'id-sha224', + '2.16.840.1.101.3.4.2.1' => 'id-sha256', + '2.16.840.1.101.3.4.2.2' => 'id-sha384', + '2.16.840.1.101.3.4.2.3' => 'id-sha512', + '1.2.643.2.2.4' => 'id-GostR3411-94-with-GostR3410-94', + '1.2.643.2.2.3' => 'id-GostR3411-94-with-GostR3410-2001', + '1.2.643.2.2.20' => 'id-GostR3410-2001', + '1.2.643.2.2.19' => 'id-GostR3410-94', + // Netscape Object Identifiers from "Netscape Certificate Extensions" + '2.16.840.1.113730' => 'netscape', + '2.16.840.1.113730.1' => 'netscape-cert-extension', + '2.16.840.1.113730.1.1' => 'netscape-cert-type', + '2.16.840.1.113730.1.13' => 'netscape-comment', + '2.16.840.1.113730.1.8' => 'netscape-ca-policy-url', + // the following are X.509 extensions not supported by phpseclib + '1.3.6.1.5.5.7.1.12' => 'id-pe-logotype', + '1.2.840.113533.7.65.0' => 'entrustVersInfo', + '2.16.840.1.113733.1.6.9' => 'verisignPrivate', + // for Certificate Signing Requests + // see http://tools.ietf.org/html/rfc2985 + '1.2.840.113549.1.9.2' => 'pkcs-9-at-unstructuredName', // PKCS #9 unstructured name + '1.2.840.113549.1.9.7' => 'pkcs-9-at-challengePassword', // Challenge password for certificate revocations + '1.2.840.113549.1.9.14' => 'pkcs-9-at-extensionRequest' // Certificate extension request + ); + } + + /** + * Load X.509 certificate + * + * Returns an associative array describing the X.509 cert or a false if the cert failed to load + * + * @param string $cert + * @param int $mode + * @access public + * @return mixed + */ + function loadX509($cert, $mode = self::FORMAT_AUTO_DETECT) + { + if (is_array($cert) && isset($cert['tbsCertificate'])) { + unset($this->currentCert); + unset($this->currentKeyIdentifier); + $this->dn = $cert['tbsCertificate']['subject']; + if (!isset($this->dn)) { + return false; + } + $this->currentCert = $cert; + + $currentKeyIdentifier = $this->getExtension('id-ce-subjectKeyIdentifier'); + $this->currentKeyIdentifier = is_string($currentKeyIdentifier) ? $currentKeyIdentifier : null; + + unset($this->signatureSubject); + + return $cert; + } + + $asn1 = new ASN1(); + + if ($mode != self::FORMAT_DER) { + $newcert = $this->_extractBER($cert); + if ($mode == self::FORMAT_PEM && $cert == $newcert) { + return false; + } + $cert = $newcert; + } + + if ($cert === false) { + $this->currentCert = false; + return false; + } + + $asn1->loadOIDs($this->oids); + $decoded = $asn1->decodeBER($cert); + + if (!empty($decoded)) { + $x509 = $asn1->asn1map($decoded[0], $this->Certificate); + } + if (!isset($x509) || $x509 === false) { + $this->currentCert = false; + return false; + } + + $this->signatureSubject = substr($cert, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']); + + if ($this->_isSubArrayValid($x509, 'tbsCertificate/extensions')) { + $this->_mapInExtensions($x509, 'tbsCertificate/extensions', $asn1); + } + $this->_mapInDNs($x509, 'tbsCertificate/issuer/rdnSequence', $asn1); + $this->_mapInDNs($x509, 'tbsCertificate/subject/rdnSequence', $asn1); + + $key = &$x509['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']; + $key = $this->_reformatKey($x509['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'], $key); + + $this->currentCert = $x509; + $this->dn = $x509['tbsCertificate']['subject']; + + $currentKeyIdentifier = $this->getExtension('id-ce-subjectKeyIdentifier'); + $this->currentKeyIdentifier = is_string($currentKeyIdentifier) ? $currentKeyIdentifier : null; + + return $x509; + } + + /** + * Save X.509 certificate + * + * @param array $cert + * @param int $format optional + * @access public + * @return string + */ + function saveX509($cert, $format = self::FORMAT_PEM) + { + if (!is_array($cert) || !isset($cert['tbsCertificate'])) { + return false; + } + + switch (true) { + // "case !$a: case !$b: break; default: whatever();" is the same thing as "if ($a && $b) whatever()" + case !($algorithm = $this->_subArray($cert, 'tbsCertificate/subjectPublicKeyInfo/algorithm/algorithm')): + case is_object($cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']): + break; + default: + switch ($algorithm) { + case 'rsaEncryption': + $cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'] + = base64_encode("\0" . base64_decode(preg_replace('#-.+-|[\r\n]#', '', $cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']))); + /* "[For RSA keys] the parameters field MUST have ASN.1 type NULL for this algorithm identifier." + -- https://tools.ietf.org/html/rfc3279#section-2.3.1 + + given that and the fact that RSA keys appear ot be the only key type for which the parameters field can be blank, + it seems like perhaps the ASN.1 description ought not say the parameters field is OPTIONAL, but whatever. + */ + $cert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['parameters'] = null; + // https://tools.ietf.org/html/rfc3279#section-2.2.1 + $cert['signatureAlgorithm']['parameters'] = null; + $cert['tbsCertificate']['signature']['parameters'] = null; + } + } + + $asn1 = new ASN1(); + $asn1->loadOIDs($this->oids); + + $filters = array(); + $type_utf8_string = array('type' => ASN1::TYPE_UTF8_STRING); + $filters['tbsCertificate']['signature']['parameters'] = $type_utf8_string; + $filters['tbsCertificate']['signature']['issuer']['rdnSequence']['value'] = $type_utf8_string; + $filters['tbsCertificate']['issuer']['rdnSequence']['value'] = $type_utf8_string; + $filters['tbsCertificate']['subject']['rdnSequence']['value'] = $type_utf8_string; + $filters['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['parameters'] = $type_utf8_string; + $filters['signatureAlgorithm']['parameters'] = $type_utf8_string; + $filters['authorityCertIssuer']['directoryName']['rdnSequence']['value'] = $type_utf8_string; + //$filters['policyQualifiers']['qualifier'] = $type_utf8_string; + $filters['distributionPoint']['fullName']['directoryName']['rdnSequence']['value'] = $type_utf8_string; + $filters['directoryName']['rdnSequence']['value'] = $type_utf8_string; + + /* in the case of policyQualifiers/qualifier, the type has to be \phpseclib\File\ASN1::TYPE_IA5_STRING. + \phpseclib\File\ASN1::TYPE_PRINTABLE_STRING will cause OpenSSL's X.509 parser to spit out random + characters. + */ + $filters['policyQualifiers']['qualifier'] + = array('type' => ASN1::TYPE_IA5_STRING); + + $asn1->loadFilters($filters); + + $this->_mapOutExtensions($cert, 'tbsCertificate/extensions', $asn1); + $this->_mapOutDNs($cert, 'tbsCertificate/issuer/rdnSequence', $asn1); + $this->_mapOutDNs($cert, 'tbsCertificate/subject/rdnSequence', $asn1); + + $cert = $asn1->encodeDER($cert, $this->Certificate); + + switch ($format) { + case self::FORMAT_DER: + return $cert; + // case self::FORMAT_PEM: + default: + return "-----BEGIN CERTIFICATE-----\r\n" . chunk_split(base64_encode($cert), 64) . '-----END CERTIFICATE-----'; + } + } + + /** + * Map extension values from octet string to extension-specific internal + * format. + * + * @param array $root (by reference) + * @param string $path + * @param object $asn1 + * @access private + */ + function _mapInExtensions(&$root, $path, $asn1) + { + $extensions = &$this->_subArrayUnchecked($root, $path); + + if ($extensions) { + for ($i = 0; $i < count($extensions); $i++) { + $id = $extensions[$i]['extnId']; + $value = &$extensions[$i]['extnValue']; + $value = base64_decode($value); + $decoded = $asn1->decodeBER($value); + /* [extnValue] contains the DER encoding of an ASN.1 value + corresponding to the extension type identified by extnID */ + $map = $this->_getMapping($id); + if (!is_bool($map)) { + $decoder = $id == 'id-ce-nameConstraints' ? + array($this, '_decodeNameConstraintIP') : + array($this, '_decodeIP'); + $mapped = $asn1->asn1map($decoded[0], $map, array('iPAddress' => $decoder)); + $value = $mapped === false ? $decoded[0] : $mapped; + + if ($id == 'id-ce-certificatePolicies') { + for ($j = 0; $j < count($value); $j++) { + if (!isset($value[$j]['policyQualifiers'])) { + continue; + } + for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) { + $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId']; + $map = $this->_getMapping($subid); + $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier']; + if ($map !== false) { + $decoded = $asn1->decodeBER($subvalue); + $mapped = $asn1->asn1map($decoded[0], $map); + $subvalue = $mapped === false ? $decoded[0] : $mapped; + } + } + } + } + } else { + $value = base64_encode($value); + } + } + } + } + + /** + * Map extension values from extension-specific internal format to + * octet string. + * + * @param array $root (by reference) + * @param string $path + * @param object $asn1 + * @access private + */ + function _mapOutExtensions(&$root, $path, $asn1) + { + $extensions = &$this->_subArray($root, $path); + + if (is_array($extensions)) { + $size = count($extensions); + for ($i = 0; $i < $size; $i++) { + if ($extensions[$i] instanceof Element) { + continue; + } + + $id = $extensions[$i]['extnId']; + $value = &$extensions[$i]['extnValue']; + + switch ($id) { + case 'id-ce-certificatePolicies': + for ($j = 0; $j < count($value); $j++) { + if (!isset($value[$j]['policyQualifiers'])) { + continue; + } + for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) { + $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId']; + $map = $this->_getMapping($subid); + $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier']; + if ($map !== false) { + // by default \phpseclib\File\ASN1 will try to render qualifier as a \phpseclib\File\ASN1::TYPE_IA5_STRING since it's + // actual type is \phpseclib\File\ASN1::TYPE_ANY + $subvalue = new Element($asn1->encodeDER($subvalue, $map)); + } + } + } + break; + case 'id-ce-authorityKeyIdentifier': // use 00 as the serial number instead of an empty string + if (isset($value['authorityCertSerialNumber'])) { + if ($value['authorityCertSerialNumber']->toBytes() == '') { + $temp = chr((ASN1::CLASS_CONTEXT_SPECIFIC << 6) | 2) . "\1\0"; + $value['authorityCertSerialNumber'] = new Element($temp); + } + } + } + + /* [extnValue] contains the DER encoding of an ASN.1 value + corresponding to the extension type identified by extnID */ + $map = $this->_getMapping($id); + if (is_bool($map)) { + if (!$map) { + user_error($id . ' is not a currently supported extension'); + unset($extensions[$i]); + } + } else { + $temp = $asn1->encodeDER($value, $map, array('iPAddress' => array($this, '_encodeIP'))); + $value = base64_encode($temp); + } + } + } + } + + /** + * Map attribute values from ANY type to attribute-specific internal + * format. + * + * @param array $root (by reference) + * @param string $path + * @param object $asn1 + * @access private + */ + function _mapInAttributes(&$root, $path, $asn1) + { + $attributes = &$this->_subArray($root, $path); + + if (is_array($attributes)) { + for ($i = 0; $i < count($attributes); $i++) { + $id = $attributes[$i]['type']; + /* $value contains the DER encoding of an ASN.1 value + corresponding to the attribute type identified by type */ + $map = $this->_getMapping($id); + if (is_array($attributes[$i]['value'])) { + $values = &$attributes[$i]['value']; + for ($j = 0; $j < count($values); $j++) { + $value = $asn1->encodeDER($values[$j], $this->AttributeValue); + $decoded = $asn1->decodeBER($value); + if (!is_bool($map)) { + $mapped = $asn1->asn1map($decoded[0], $map); + if ($mapped !== false) { + $values[$j] = $mapped; + } + if ($id == 'pkcs-9-at-extensionRequest' && $this->_isSubArrayValid($values, $j)) { + $this->_mapInExtensions($values, $j, $asn1); + } + } elseif ($map) { + $values[$j] = base64_encode($value); + } + } + } + } + } + } + + /** + * Map attribute values from attribute-specific internal format to + * ANY type. + * + * @param array $root (by reference) + * @param string $path + * @param object $asn1 + * @access private + */ + function _mapOutAttributes(&$root, $path, $asn1) + { + $attributes = &$this->_subArray($root, $path); + + if (is_array($attributes)) { + $size = count($attributes); + for ($i = 0; $i < $size; $i++) { + /* [value] contains the DER encoding of an ASN.1 value + corresponding to the attribute type identified by type */ + $id = $attributes[$i]['type']; + $map = $this->_getMapping($id); + if ($map === false) { + user_error($id . ' is not a currently supported attribute', E_USER_NOTICE); + unset($attributes[$i]); + } elseif (is_array($attributes[$i]['value'])) { + $values = &$attributes[$i]['value']; + for ($j = 0; $j < count($values); $j++) { + switch ($id) { + case 'pkcs-9-at-extensionRequest': + $this->_mapOutExtensions($values, $j, $asn1); + break; + } + + if (!is_bool($map)) { + $temp = $asn1->encodeDER($values[$j], $map); + $decoded = $asn1->decodeBER($temp); + $values[$j] = $asn1->asn1map($decoded[0], $this->AttributeValue); + } + } + } + } + } + } + + /** + * Map DN values from ANY type to DN-specific internal + * format. + * + * @param array $root (by reference) + * @param string $path + * @param object $asn1 + * @access private + */ + function _mapInDNs(&$root, $path, $asn1) + { + $dns = &$this->_subArray($root, $path); + + if (is_array($dns)) { + for ($i = 0; $i < count($dns); $i++) { + for ($j = 0; $j < count($dns[$i]); $j++) { + $type = $dns[$i][$j]['type']; + $value = &$dns[$i][$j]['value']; + if (is_object($value) && $value instanceof Element) { + $map = $this->_getMapping($type); + if (!is_bool($map)) { + $decoded = $asn1->decodeBER($value); + $value = $asn1->asn1map($decoded[0], $map); + } + } + } + } + } + } + + /** + * Map DN values from DN-specific internal format to + * ANY type. + * + * @param array $root (by reference) + * @param string $path + * @param object $asn1 + * @access private + */ + function _mapOutDNs(&$root, $path, $asn1) + { + $dns = &$this->_subArray($root, $path); + + if (is_array($dns)) { + $size = count($dns); + for ($i = 0; $i < $size; $i++) { + for ($j = 0; $j < count($dns[$i]); $j++) { + $type = $dns[$i][$j]['type']; + $value = &$dns[$i][$j]['value']; + if (is_object($value) && $value instanceof Element) { + continue; + } + + $map = $this->_getMapping($type); + if (!is_bool($map)) { + $value = new Element($asn1->encodeDER($value, $map)); + } + } + } + } + } + + /** + * Associate an extension ID to an extension mapping + * + * @param string $extnId + * @access private + * @return mixed + */ + function _getMapping($extnId) + { + if (!is_string($extnId)) { // eg. if it's a \phpseclib\File\ASN1\Element object + return true; + } + + switch ($extnId) { + case 'id-ce-keyUsage': + return $this->KeyUsage; + case 'id-ce-basicConstraints': + return $this->BasicConstraints; + case 'id-ce-subjectKeyIdentifier': + return $this->KeyIdentifier; + case 'id-ce-cRLDistributionPoints': + return $this->CRLDistributionPoints; + case 'id-ce-authorityKeyIdentifier': + return $this->AuthorityKeyIdentifier; + case 'id-ce-certificatePolicies': + return $this->CertificatePolicies; + case 'id-ce-extKeyUsage': + return $this->ExtKeyUsageSyntax; + case 'id-pe-authorityInfoAccess': + return $this->AuthorityInfoAccessSyntax; + case 'id-pe-subjectInfoAccess': + return $this->SubjectInfoAccessSyntax; + case 'id-ce-subjectAltName': + return $this->SubjectAltName; + case 'id-ce-subjectDirectoryAttributes': + return $this->SubjectDirectoryAttributes; + case 'id-ce-privateKeyUsagePeriod': + return $this->PrivateKeyUsagePeriod; + case 'id-ce-issuerAltName': + return $this->IssuerAltName; + case 'id-ce-policyMappings': + return $this->PolicyMappings; + case 'id-ce-nameConstraints': + return $this->NameConstraints; + + case 'netscape-cert-type': + return $this->netscape_cert_type; + case 'netscape-comment': + return $this->netscape_comment; + case 'netscape-ca-policy-url': + return $this->netscape_ca_policy_url; + + // since id-qt-cps isn't a constructed type it will have already been decoded as a string by the time it gets + // back around to asn1map() and we don't want it decoded again. + //case 'id-qt-cps': + // return $this->CPSuri; + case 'id-qt-unotice': + return $this->UserNotice; + + // the following OIDs are unsupported but we don't want them to give notices when calling saveX509(). + case 'id-pe-logotype': // http://www.ietf.org/rfc/rfc3709.txt + case 'entrustVersInfo': + // http://support.microsoft.com/kb/287547 + case '1.3.6.1.4.1.311.20.2': // szOID_ENROLL_CERTTYPE_EXTENSION + case '1.3.6.1.4.1.311.21.1': // szOID_CERTSRV_CA_VERSION + // "SET Secure Electronic Transaction Specification" + // http://www.maithean.com/docs/set_bk3.pdf + case '2.23.42.7.0': // id-set-hashedRootKey + // "Certificate Transparency" + // https://tools.ietf.org/html/rfc6962 + case '1.3.6.1.4.1.11129.2.4.2': + // "Qualified Certificate statements" + // https://tools.ietf.org/html/rfc3739#section-3.2.6 + case '1.3.6.1.5.5.7.1.3': + return true; + + // CSR attributes + case 'pkcs-9-at-unstructuredName': + return $this->PKCS9String; + case 'pkcs-9-at-challengePassword': + return $this->DirectoryString; + case 'pkcs-9-at-extensionRequest': + return $this->Extensions; + + // CRL extensions. + case 'id-ce-cRLNumber': + return $this->CRLNumber; + case 'id-ce-deltaCRLIndicator': + return $this->CRLNumber; + case 'id-ce-issuingDistributionPoint': + return $this->IssuingDistributionPoint; + case 'id-ce-freshestCRL': + return $this->CRLDistributionPoints; + case 'id-ce-cRLReasons': + return $this->CRLReason; + case 'id-ce-invalidityDate': + return $this->InvalidityDate; + case 'id-ce-certificateIssuer': + return $this->CertificateIssuer; + case 'id-ce-holdInstructionCode': + return $this->HoldInstructionCode; + case 'id-at-postalAddress': + return $this->PostalAddress; + } + + return false; + } + + /** + * Load an X.509 certificate as a certificate authority + * + * @param string $cert + * @access public + * @return bool + */ + function loadCA($cert) + { + $olddn = $this->dn; + $oldcert = $this->currentCert; + $oldsigsubj = $this->signatureSubject; + $oldkeyid = $this->currentKeyIdentifier; + + $cert = $this->loadX509($cert); + if (!$cert) { + $this->dn = $olddn; + $this->currentCert = $oldcert; + $this->signatureSubject = $oldsigsubj; + $this->currentKeyIdentifier = $oldkeyid; + + return false; + } + + /* From RFC5280 "PKIX Certificate and CRL Profile": + + If the keyUsage extension is present, then the subject public key + MUST NOT be used to verify signatures on certificates or CRLs unless + the corresponding keyCertSign or cRLSign bit is set. */ + //$keyUsage = $this->getExtension('id-ce-keyUsage'); + //if ($keyUsage && !in_array('keyCertSign', $keyUsage)) { + // return false; + //} + + /* From RFC5280 "PKIX Certificate and CRL Profile": + + The cA boolean indicates whether the certified public key may be used + to verify certificate signatures. If the cA boolean is not asserted, + then the keyCertSign bit in the key usage extension MUST NOT be + asserted. If the basic constraints extension is not present in a + version 3 certificate, or the extension is present but the cA boolean + is not asserted, then the certified public key MUST NOT be used to + verify certificate signatures. */ + //$basicConstraints = $this->getExtension('id-ce-basicConstraints'); + //if (!$basicConstraints || !$basicConstraints['cA']) { + // return false; + //} + + $this->CAs[] = $cert; + + $this->dn = $olddn; + $this->currentCert = $oldcert; + $this->signatureSubject = $oldsigsubj; + + return true; + } + + /** + * Validate an X.509 certificate against a URL + * + * From RFC2818 "HTTP over TLS": + * + * Matching is performed using the matching rules specified by + * [RFC2459]. If more than one identity of a given type is present in + * the certificate (e.g., more than one dNSName name, a match in any one + * of the set is considered acceptable.) Names may contain the wildcard + * character * which is considered to match any single domain name + * component or component fragment. E.g., *.a.com matches foo.a.com but + * not bar.foo.a.com. f*.com matches foo.com but not bar.com. + * + * @param string $url + * @access public + * @return bool + */ + function validateURL($url) + { + if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) { + return false; + } + + $components = parse_url($url); + if (!isset($components['host'])) { + return false; + } + + if ($names = $this->getExtension('id-ce-subjectAltName')) { + foreach ($names as $name) { + foreach ($name as $key => $value) { + $value = str_replace(array('.', '*'), array('\.', '[^.]*'), $value); + switch ($key) { + case 'dNSName': + /* From RFC2818 "HTTP over TLS": + + If a subjectAltName extension of type dNSName is present, that MUST + be used as the identity. Otherwise, the (most specific) Common Name + field in the Subject field of the certificate MUST be used. Although + the use of the Common Name is existing practice, it is deprecated and + Certification Authorities are encouraged to use the dNSName instead. */ + if (preg_match('#^' . $value . '$#', $components['host'])) { + return true; + } + break; + case 'iPAddress': + /* From RFC2818 "HTTP over TLS": + + In some cases, the URI is specified as an IP address rather than a + hostname. In this case, the iPAddress subjectAltName must be present + in the certificate and must exactly match the IP in the URI. */ + if (preg_match('#(?:\d{1-3}\.){4}#', $components['host'] . '.') && preg_match('#^' . $value . '$#', $components['host'])) { + return true; + } + } + } + } + return false; + } + + if ($value = $this->getDNProp('id-at-commonName')) { + $value = str_replace(array('.', '*'), array('\.', '[^.]*'), $value[0]); + return preg_match('#^' . $value . '$#', $components['host']); + } + + return false; + } + + /** + * Validate a date + * + * If $date isn't defined it is assumed to be the current date. + * + * @param \DateTime|string $date optional + * @access public + */ + function validateDate($date = null) + { + if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) { + return false; + } + + if (!isset($date)) { + $date = new DateTime(null, new DateTimeZone(@date_default_timezone_get())); + } + + $notBefore = $this->currentCert['tbsCertificate']['validity']['notBefore']; + $notBefore = isset($notBefore['generalTime']) ? $notBefore['generalTime'] : $notBefore['utcTime']; + + $notAfter = $this->currentCert['tbsCertificate']['validity']['notAfter']; + $notAfter = isset($notAfter['generalTime']) ? $notAfter['generalTime'] : $notAfter['utcTime']; + + if (is_string($date)) { + $date = new DateTime($date, new DateTimeZone(@date_default_timezone_get())); + } + + $notBefore = new DateTime($notBefore, new DateTimeZone(@date_default_timezone_get())); + $notAfter = new DateTime($notAfter, new DateTimeZone(@date_default_timezone_get())); + + switch (true) { + case $date < $notBefore: + case $date > $notAfter: + return false; + } + + return true; + } + + /** + * Fetches a URL + * + * @param string $url + * @access private + * @return bool|string + */ + static function _fetchURL($url) + { + if (self::$disable_url_fetch) { + return false; + } + + $parts = parse_url($url); + $data = ''; + switch ($parts['scheme']) { + case 'http': + $fsock = @fsockopen($parts['host'], isset($parts['port']) ? $parts['port'] : 80); + if (!$fsock) { + return false; + } + fputs($fsock, "GET $parts[path] HTTP/1.0\r\n"); + fputs($fsock, "Host: $parts[host]\r\n\r\n"); + $line = fgets($fsock, 1024); + if (strlen($line) < 3) { + return false; + } + preg_match('#HTTP/1.\d (\d{3})#', $line, $temp); + if ($temp[1] != '200') { + return false; + } + + // skip the rest of the headers in the http response + while (!feof($fsock) && fgets($fsock, 1024) != "\r\n") { + } + + while (!feof($fsock)) { + $temp = fread($fsock, 1024); + if ($temp === false) { + return false; + } + $data.= $temp; + } + + break; + //case 'ftp': + //case 'ldap': + //default: + } + + return $data; + } + + /** + * Validates an intermediate cert as identified via authority info access extension + * + * See https://tools.ietf.org/html/rfc4325 for more info + * + * @param bool $caonly + * @param int $count + * @access private + * @return bool + */ + function _testForIntermediate($caonly, $count) + { + $opts = $this->getExtension('id-pe-authorityInfoAccess'); + if (!is_array($opts)) { + return false; + } + foreach ($opts as $opt) { + if ($opt['accessMethod'] == 'id-ad-caIssuers') { + // accessLocation is a GeneralName. GeneralName fields support stuff like email addresses, IP addresses, LDAP, + // etc, but we're only supporting URI's. URI's and LDAP are the only thing https://tools.ietf.org/html/rfc4325 + // discusses + if (isset($opt['accessLocation']['uniformResourceIdentifier'])) { + $url = $opt['accessLocation']['uniformResourceIdentifier']; + break; + } + } + } + + if (!isset($url)) { + return false; + } + + $cert = static::_fetchURL($url); + if (!is_string($cert)) { + return false; + } + + $parent = new static(); + $parent->CAs = $this->CAs; + /* + "Conforming applications that support HTTP or FTP for accessing + certificates MUST be able to accept .cer files and SHOULD be able + to accept .p7c files." -- https://tools.ietf.org/html/rfc4325 + + A .p7c file is 'a "certs-only" CMS message as specified in RFC 2797" + + These are currently unsupported + */ + if (!is_array($parent->loadX509($cert))) { + return false; + } + + if (!$parent->_validateSignatureCountable($caonly, ++$count)) { + return false; + } + + $this->CAs[] = $parent->currentCert; + //$this->loadCA($cert); + + return true; + } + + /** + * Validate a signature + * + * Works on X.509 certs, CSR's and CRL's. + * Returns true if the signature is verified, false if it is not correct or null on error + * + * By default returns false for self-signed certs. Call validateSignature(false) to make this support + * self-signed. + * + * The behavior of this function is inspired by {@link http://php.net/openssl-verify openssl_verify}. + * + * @param bool $caonly optional + * @access public + * @return mixed + */ + function validateSignature($caonly = true) + { + return $this->_validateSignatureCountable($caonly, 0); + } + + /** + * Validate a signature + * + * Performs said validation whilst keeping track of how many times validation method is called + * + * @param bool $caonly + * @param int $count + * @access private + * @return mixed + */ + function _validateSignatureCountable($caonly, $count) + { + if (!is_array($this->currentCert) || !isset($this->signatureSubject)) { + return null; + } + + if ($count == self::$recur_limit) { + return false; + } + + /* TODO: + "emailAddress attribute values are not case-sensitive (e.g., "subscriber@example.com" is the same as "SUBSCRIBER@EXAMPLE.COM")." + -- http://tools.ietf.org/html/rfc5280#section-4.1.2.6 + + implement pathLenConstraint in the id-ce-basicConstraints extension */ + + switch (true) { + case isset($this->currentCert['tbsCertificate']): + // self-signed cert + switch (true) { + case !defined('FILE_X509_IGNORE_TYPE') && $this->currentCert['tbsCertificate']['issuer'] === $this->currentCert['tbsCertificate']['subject']: + case defined('FILE_X509_IGNORE_TYPE') && $this->getIssuerDN(self::DN_STRING) === $this->getDN(self::DN_STRING): + $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier'); + $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier'); + switch (true) { + case !is_array($authorityKey): + case !$subjectKeyID: + case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID: + $signingCert = $this->currentCert; // working cert + } + } + + if (!empty($this->CAs)) { + for ($i = 0; $i < count($this->CAs); $i++) { + // even if the cert is a self-signed one we still want to see if it's a CA; + // if not, we'll conditionally return an error + $ca = $this->CAs[$i]; + switch (true) { + case !defined('FILE_X509_IGNORE_TYPE') && $this->currentCert['tbsCertificate']['issuer'] === $ca['tbsCertificate']['subject']: + case defined('FILE_X509_IGNORE_TYPE') && $this->getDN(self::DN_STRING, $this->currentCert['tbsCertificate']['issuer']) === $this->getDN(self::DN_STRING, $ca['tbsCertificate']['subject']): + $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier'); + $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca); + switch (true) { + case !is_array($authorityKey): + case !$subjectKeyID: + case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID: + if (is_array($authorityKey) && isset($authorityKey['authorityCertSerialNumber']) && !$authorityKey['authorityCertSerialNumber']->equals($ca['tbsCertificate']['serialNumber'])) { + break 2; // serial mismatch - check other ca + } + $signingCert = $ca; // working cert + break 3; + } + } + } + if (count($this->CAs) == $i && $caonly) { + return $this->_testForIntermediate($caonly, $count) && $this->validateSignature($caonly); + } + } elseif (!isset($signingCert) || $caonly) { + return $this->_testForIntermediate($caonly, $count) && $this->validateSignature($caonly); + } + return $this->_validateSignature( + $signingCert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'], + $signingCert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'], + $this->currentCert['signatureAlgorithm']['algorithm'], + substr(base64_decode($this->currentCert['signature']), 1), + $this->signatureSubject + ); + case isset($this->currentCert['certificationRequestInfo']): + return $this->_validateSignature( + $this->currentCert['certificationRequestInfo']['subjectPKInfo']['algorithm']['algorithm'], + $this->currentCert['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'], + $this->currentCert['signatureAlgorithm']['algorithm'], + substr(base64_decode($this->currentCert['signature']), 1), + $this->signatureSubject + ); + case isset($this->currentCert['publicKeyAndChallenge']): + return $this->_validateSignature( + $this->currentCert['publicKeyAndChallenge']['spki']['algorithm']['algorithm'], + $this->currentCert['publicKeyAndChallenge']['spki']['subjectPublicKey'], + $this->currentCert['signatureAlgorithm']['algorithm'], + substr(base64_decode($this->currentCert['signature']), 1), + $this->signatureSubject + ); + case isset($this->currentCert['tbsCertList']): + if (!empty($this->CAs)) { + for ($i = 0; $i < count($this->CAs); $i++) { + $ca = $this->CAs[$i]; + switch (true) { + case !defined('FILE_X509_IGNORE_TYPE') && $this->currentCert['tbsCertList']['issuer'] === $ca['tbsCertificate']['subject']: + case defined('FILE_X509_IGNORE_TYPE') && $this->getDN(self::DN_STRING, $this->currentCert['tbsCertList']['issuer']) === $this->getDN(self::DN_STRING, $ca['tbsCertificate']['subject']): + $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier'); + $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca); + switch (true) { + case !is_array($authorityKey): + case !$subjectKeyID: + case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID: + if (is_array($authorityKey) && isset($authorityKey['authorityCertSerialNumber']) && !$authorityKey['authorityCertSerialNumber']->equals($ca['tbsCertificate']['serialNumber'])) { + break 2; // serial mismatch - check other ca + } + $signingCert = $ca; // working cert + break 3; + } + } + } + } + if (!isset($signingCert)) { + return false; + } + return $this->_validateSignature( + $signingCert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'], + $signingCert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'], + $this->currentCert['signatureAlgorithm']['algorithm'], + substr(base64_decode($this->currentCert['signature']), 1), + $this->signatureSubject + ); + default: + return false; + } + } + + /** + * Validates a signature + * + * Returns true if the signature is verified, false if it is not correct or null on error + * + * @param string $publicKeyAlgorithm + * @param string $publicKey + * @param string $signatureAlgorithm + * @param string $signature + * @param string $signatureSubject + * @access private + * @return int + */ + function _validateSignature($publicKeyAlgorithm, $publicKey, $signatureAlgorithm, $signature, $signatureSubject) + { + switch ($publicKeyAlgorithm) { + case 'rsaEncryption': + $rsa = new RSA(); + $rsa->loadKey($publicKey); + + switch ($signatureAlgorithm) { + case 'md2WithRSAEncryption': + case 'md5WithRSAEncryption': + case 'sha1WithRSAEncryption': + case 'sha224WithRSAEncryption': + case 'sha256WithRSAEncryption': + case 'sha384WithRSAEncryption': + case 'sha512WithRSAEncryption': + $rsa->setHash(preg_replace('#WithRSAEncryption$#', '', $signatureAlgorithm)); + $rsa->setSignatureMode(RSA::SIGNATURE_PKCS1); + if (!@$rsa->verify($signatureSubject, $signature)) { + return false; + } + break; + default: + return null; + } + break; + default: + return null; + } + + return true; + } + + /** + * Sets the recursion limit + * + * When validating a signature it may be necessary to download intermediate certs from URI's. + * An intermediate cert that linked to itself would result in an infinite loop so to prevent + * that we set a recursion limit. A negative number means that there is no recursion limit. + * + * @param int $count + * @access public + */ + static function setRecurLimit($count) + { + self::$recur_limit = $count; + } + + /** + * Prevents URIs from being automatically retrieved + * + * @access public + */ + static function disableURLFetch() + { + self::$disable_url_fetch = true; + } + + /** + * Allows URIs to be automatically retrieved + * + * @access public + */ + static function enableURLFetch() + { + self::$disable_url_fetch = false; + } + + /** + * Reformat public keys + * + * Reformats a public key to a format supported by phpseclib (if applicable) + * + * @param string $algorithm + * @param string $key + * @access private + * @return string + */ + function _reformatKey($algorithm, $key) + { + switch ($algorithm) { + case 'rsaEncryption': + return + "-----BEGIN RSA PUBLIC KEY-----\r\n" . + // subjectPublicKey is stored as a bit string in X.509 certs. the first byte of a bit string represents how many bits + // in the last byte should be ignored. the following only supports non-zero stuff but as none of the X.509 certs Firefox + // uses as a cert authority actually use a non-zero bit I think it's safe to assume that none do. + chunk_split(base64_encode(substr(base64_decode($key), 1)), 64) . + '-----END RSA PUBLIC KEY-----'; + default: + return $key; + } + } + + /** + * Decodes an IP address + * + * Takes in a base64 encoded "blob" and returns a human readable IP address + * + * @param string $ip + * @access private + * @return string + */ + function _decodeIP($ip) + { + return inet_ntop(base64_decode($ip)); + } + + /** + * Decodes an IP address in a name constraints extension + * + * Takes in a base64 encoded "blob" and returns a human readable IP address / mask + * + * @param string $ip + * @access private + * @return array + */ + function _decodeNameConstraintIP($ip) + { + $ip = base64_decode($ip); + $size = strlen($ip) >> 1; + $mask = substr($ip, $size); + $ip = substr($ip, 0, $size); + return array(inet_ntop($ip), inet_ntop($mask)); + } + + /** + * Encodes an IP address + * + * Takes a human readable IP address into a base64-encoded "blob" + * + * @param string|array $ip + * @access private + * @return string + */ + function _encodeIP($ip) + { + return is_string($ip) ? + base64_encode(inet_pton($ip)) : + base64_encode(inet_pton($ip[0]) . inet_pton($ip[1])); + } + + /** + * "Normalizes" a Distinguished Name property + * + * @param string $propName + * @access private + * @return mixed + */ + function _translateDNProp($propName) + { + switch (strtolower($propName)) { + case 'id-at-countryname': + case 'countryname': + case 'c': + return 'id-at-countryName'; + case 'id-at-organizationname': + case 'organizationname': + case 'o': + return 'id-at-organizationName'; + case 'id-at-dnqualifier': + case 'dnqualifier': + return 'id-at-dnQualifier'; + case 'id-at-commonname': + case 'commonname': + case 'cn': + return 'id-at-commonName'; + case 'id-at-stateorprovincename': + case 'stateorprovincename': + case 'state': + case 'province': + case 'provincename': + case 'st': + return 'id-at-stateOrProvinceName'; + case 'id-at-localityname': + case 'localityname': + case 'l': + return 'id-at-localityName'; + case 'id-emailaddress': + case 'emailaddress': + return 'pkcs-9-at-emailAddress'; + case 'id-at-serialnumber': + case 'serialnumber': + return 'id-at-serialNumber'; + case 'id-at-postalcode': + case 'postalcode': + return 'id-at-postalCode'; + case 'id-at-streetaddress': + case 'streetaddress': + return 'id-at-streetAddress'; + case 'id-at-name': + case 'name': + return 'id-at-name'; + case 'id-at-givenname': + case 'givenname': + return 'id-at-givenName'; + case 'id-at-surname': + case 'surname': + case 'sn': + return 'id-at-surname'; + case 'id-at-initials': + case 'initials': + return 'id-at-initials'; + case 'id-at-generationqualifier': + case 'generationqualifier': + return 'id-at-generationQualifier'; + case 'id-at-organizationalunitname': + case 'organizationalunitname': + case 'ou': + return 'id-at-organizationalUnitName'; + case 'id-at-pseudonym': + case 'pseudonym': + return 'id-at-pseudonym'; + case 'id-at-title': + case 'title': + return 'id-at-title'; + case 'id-at-description': + case 'description': + return 'id-at-description'; + case 'id-at-role': + case 'role': + return 'id-at-role'; + case 'id-at-uniqueidentifier': + case 'uniqueidentifier': + case 'x500uniqueidentifier': + return 'id-at-uniqueIdentifier'; + case 'postaladdress': + case 'id-at-postaladdress': + return 'id-at-postalAddress'; + default: + return false; + } + } + + /** + * Set a Distinguished Name property + * + * @param string $propName + * @param mixed $propValue + * @param string $type optional + * @access public + * @return bool + */ + function setDNProp($propName, $propValue, $type = 'utf8String') + { + if (empty($this->dn)) { + $this->dn = array('rdnSequence' => array()); + } + + if (($propName = $this->_translateDNProp($propName)) === false) { + return false; + } + + foreach ((array) $propValue as $v) { + if (!is_array($v) && isset($type)) { + $v = array($type => $v); + } + $this->dn['rdnSequence'][] = array( + array( + 'type' => $propName, + 'value'=> $v + ) + ); + } + + return true; + } + + /** + * Remove Distinguished Name properties + * + * @param string $propName + * @access public + */ + function removeDNProp($propName) + { + if (empty($this->dn)) { + return; + } + + if (($propName = $this->_translateDNProp($propName)) === false) { + return; + } + + $dn = &$this->dn['rdnSequence']; + $size = count($dn); + for ($i = 0; $i < $size; $i++) { + if ($dn[$i][0]['type'] == $propName) { + unset($dn[$i]); + } + } + + $dn = array_values($dn); + // fix for https://bugs.php.net/75433 affecting PHP 7.2 + if (!isset($dn[0])) { + $dn = array_splice($dn, 0, 0); + } + } + + /** + * Get Distinguished Name properties + * + * @param string $propName + * @param array $dn optional + * @param bool $withType optional + * @return mixed + * @access public + */ + function getDNProp($propName, $dn = null, $withType = false) + { + if (!isset($dn)) { + $dn = $this->dn; + } + + if (empty($dn)) { + return false; + } + + if (($propName = $this->_translateDNProp($propName)) === false) { + return false; + } + + $asn1 = new ASN1(); + $asn1->loadOIDs($this->oids); + $filters = array(); + $filters['value'] = array('type' => ASN1::TYPE_UTF8_STRING); + $asn1->loadFilters($filters); + $this->_mapOutDNs($dn, 'rdnSequence', $asn1); + $dn = $dn['rdnSequence']; + $result = array(); + for ($i = 0; $i < count($dn); $i++) { + if ($dn[$i][0]['type'] == $propName) { + $v = $dn[$i][0]['value']; + if (!$withType) { + if (is_array($v)) { + foreach ($v as $type => $s) { + $type = array_search($type, $asn1->ANYmap, true); + if ($type !== false && isset($asn1->stringTypeSize[$type])) { + $s = $asn1->convert($s, $type); + if ($s !== false) { + $v = $s; + break; + } + } + } + if (is_array($v)) { + $v = array_pop($v); // Always strip data type. + } + } elseif (is_object($v) && $v instanceof Element) { + $map = $this->_getMapping($propName); + if (!is_bool($map)) { + $decoded = $asn1->decodeBER($v); + $v = $asn1->asn1map($decoded[0], $map); + } + } + } + $result[] = $v; + } + } + + return $result; + } + + /** + * Set a Distinguished Name + * + * @param mixed $dn + * @param bool $merge optional + * @param string $type optional + * @access public + * @return bool + */ + function setDN($dn, $merge = false, $type = 'utf8String') + { + if (!$merge) { + $this->dn = null; + } + + if (is_array($dn)) { + if (isset($dn['rdnSequence'])) { + $this->dn = $dn; // No merge here. + return true; + } + + // handles stuff generated by openssl_x509_parse() + foreach ($dn as $prop => $value) { + if (!$this->setDNProp($prop, $value, $type)) { + return false; + } + } + return true; + } + + // handles everything else + $results = preg_split('#((?:^|, *|/)(?:C=|O=|OU=|CN=|L=|ST=|SN=|postalCode=|streetAddress=|emailAddress=|serialNumber=|organizationalUnitName=|title=|description=|role=|x500UniqueIdentifier=|postalAddress=))#', $dn, -1, PREG_SPLIT_DELIM_CAPTURE); + for ($i = 1; $i < count($results); $i+=2) { + $prop = trim($results[$i], ', =/'); + $value = $results[$i + 1]; + if (!$this->setDNProp($prop, $value, $type)) { + return false; + } + } + + return true; + } + + /** + * Get the Distinguished Name for a certificates subject + * + * @param mixed $format optional + * @param array $dn optional + * @access public + * @return bool + */ + function getDN($format = self::DN_ARRAY, $dn = null) + { + if (!isset($dn)) { + $dn = isset($this->currentCert['tbsCertList']) ? $this->currentCert['tbsCertList']['issuer'] : $this->dn; + } + + switch ((int) $format) { + case self::DN_ARRAY: + return $dn; + case self::DN_ASN1: + $asn1 = new ASN1(); + $asn1->loadOIDs($this->oids); + $filters = array(); + $filters['rdnSequence']['value'] = array('type' => ASN1::TYPE_UTF8_STRING); + $asn1->loadFilters($filters); + $this->_mapOutDNs($dn, 'rdnSequence', $asn1); + return $asn1->encodeDER($dn, $this->Name); + case self::DN_CANON: + // No SEQUENCE around RDNs and all string values normalized as + // trimmed lowercase UTF-8 with all spacing as one blank. + // constructed RDNs will not be canonicalized + $asn1 = new ASN1(); + $asn1->loadOIDs($this->oids); + $filters = array(); + $filters['value'] = array('type' => ASN1::TYPE_UTF8_STRING); + $asn1->loadFilters($filters); + $result = ''; + $this->_mapOutDNs($dn, 'rdnSequence', $asn1); + foreach ($dn['rdnSequence'] as $rdn) { + foreach ($rdn as $i => $attr) { + $attr = &$rdn[$i]; + if (is_array($attr['value'])) { + foreach ($attr['value'] as $type => $v) { + $type = array_search($type, $asn1->ANYmap, true); + if ($type !== false && isset($asn1->stringTypeSize[$type])) { + $v = $asn1->convert($v, $type); + if ($v !== false) { + $v = preg_replace('/\s+/', ' ', $v); + $attr['value'] = strtolower(trim($v)); + break; + } + } + } + } + } + $result .= $asn1->encodeDER($rdn, $this->RelativeDistinguishedName); + } + return $result; + case self::DN_HASH: + $dn = $this->getDN(self::DN_CANON, $dn); + $hash = new Hash('sha1'); + $hash = $hash->hash($dn); + extract(unpack('Vhash', $hash)); + return strtolower(bin2hex(pack('N', $hash))); + } + + // Default is to return a string. + $start = true; + $output = ''; + + $result = array(); + $asn1 = new ASN1(); + $asn1->loadOIDs($this->oids); + $filters = array(); + $filters['rdnSequence']['value'] = array('type' => ASN1::TYPE_UTF8_STRING); + $asn1->loadFilters($filters); + $this->_mapOutDNs($dn, 'rdnSequence', $asn1); + + foreach ($dn['rdnSequence'] as $field) { + $prop = $field[0]['type']; + $value = $field[0]['value']; + + $delim = ', '; + switch ($prop) { + case 'id-at-countryName': + $desc = 'C'; + break; + case 'id-at-stateOrProvinceName': + $desc = 'ST'; + break; + case 'id-at-organizationName': + $desc = 'O'; + break; + case 'id-at-organizationalUnitName': + $desc = 'OU'; + break; + case 'id-at-commonName': + $desc = 'CN'; + break; + case 'id-at-localityName': + $desc = 'L'; + break; + case 'id-at-surname': + $desc = 'SN'; + break; + case 'id-at-uniqueIdentifier': + $delim = '/'; + $desc = 'x500UniqueIdentifier'; + break; + case 'id-at-postalAddress': + $delim = '/'; + $desc = 'postalAddress'; + break; + default: + $delim = '/'; + $desc = preg_replace('#.+-([^-]+)$#', '$1', $prop); + } + + if (!$start) { + $output.= $delim; + } + if (is_array($value)) { + foreach ($value as $type => $v) { + $type = array_search($type, $asn1->ANYmap, true); + if ($type !== false && isset($asn1->stringTypeSize[$type])) { + $v = $asn1->convert($v, $type); + if ($v !== false) { + $value = $v; + break; + } + } + } + if (is_array($value)) { + $value = array_pop($value); // Always strip data type. + } + } elseif (is_object($value) && $value instanceof Element) { + $callback = function ($x) { + return "\x" . bin2hex($x[0]); + }; + $value = strtoupper(preg_replace_callback('#[^\x20-\x7E]#', $callback, $value->element)); + } + $output.= $desc . '=' . $value; + $result[$desc] = isset($result[$desc]) ? + array_merge((array) $result[$desc], array($value)) : + $value; + $start = false; + } + + return $format == self::DN_OPENSSL ? $result : $output; + } + + /** + * Get the Distinguished Name for a certificate/crl issuer + * + * @param int $format optional + * @access public + * @return mixed + */ + function getIssuerDN($format = self::DN_ARRAY) + { + switch (true) { + case !isset($this->currentCert) || !is_array($this->currentCert): + break; + case isset($this->currentCert['tbsCertificate']): + return $this->getDN($format, $this->currentCert['tbsCertificate']['issuer']); + case isset($this->currentCert['tbsCertList']): + return $this->getDN($format, $this->currentCert['tbsCertList']['issuer']); + } + + return false; + } + + /** + * Get the Distinguished Name for a certificate/csr subject + * Alias of getDN() + * + * @param int $format optional + * @access public + * @return mixed + */ + function getSubjectDN($format = self::DN_ARRAY) + { + switch (true) { + case !empty($this->dn): + return $this->getDN($format); + case !isset($this->currentCert) || !is_array($this->currentCert): + break; + case isset($this->currentCert['tbsCertificate']): + return $this->getDN($format, $this->currentCert['tbsCertificate']['subject']); + case isset($this->currentCert['certificationRequestInfo']): + return $this->getDN($format, $this->currentCert['certificationRequestInfo']['subject']); + } + + return false; + } + + /** + * Get an individual Distinguished Name property for a certificate/crl issuer + * + * @param string $propName + * @param bool $withType optional + * @access public + * @return mixed + */ + function getIssuerDNProp($propName, $withType = false) + { + switch (true) { + case !isset($this->currentCert) || !is_array($this->currentCert): + break; + case isset($this->currentCert['tbsCertificate']): + return $this->getDNProp($propName, $this->currentCert['tbsCertificate']['issuer'], $withType); + case isset($this->currentCert['tbsCertList']): + return $this->getDNProp($propName, $this->currentCert['tbsCertList']['issuer'], $withType); + } + + return false; + } + + /** + * Get an individual Distinguished Name property for a certificate/csr subject + * + * @param string $propName + * @param bool $withType optional + * @access public + * @return mixed + */ + function getSubjectDNProp($propName, $withType = false) + { + switch (true) { + case !empty($this->dn): + return $this->getDNProp($propName, null, $withType); + case !isset($this->currentCert) || !is_array($this->currentCert): + break; + case isset($this->currentCert['tbsCertificate']): + return $this->getDNProp($propName, $this->currentCert['tbsCertificate']['subject'], $withType); + case isset($this->currentCert['certificationRequestInfo']): + return $this->getDNProp($propName, $this->currentCert['certificationRequestInfo']['subject'], $withType); + } + + return false; + } + + /** + * Get the certificate chain for the current cert + * + * @access public + * @return mixed + */ + function getChain() + { + $chain = array($this->currentCert); + + if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) { + return false; + } + if (empty($this->CAs)) { + return $chain; + } + while (true) { + $currentCert = $chain[count($chain) - 1]; + for ($i = 0; $i < count($this->CAs); $i++) { + $ca = $this->CAs[$i]; + if ($currentCert['tbsCertificate']['issuer'] === $ca['tbsCertificate']['subject']) { + $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier', $currentCert); + $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca); + switch (true) { + case !is_array($authorityKey): + case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID: + if ($currentCert === $ca) { + break 3; + } + $chain[] = $ca; + break 2; + } + } + } + if ($i == count($this->CAs)) { + break; + } + } + foreach ($chain as $key => $value) { + $chain[$key] = new X509(); + $chain[$key]->loadX509($value); + } + return $chain; + } + + /** + * Set public key + * + * Key needs to be a \phpseclib\Crypt\RSA object + * + * @param object $key + * @access public + * @return bool + */ + function setPublicKey($key) + { + $key->setPublicKey(); + $this->publicKey = $key; + } + + /** + * Set private key + * + * Key needs to be a \phpseclib\Crypt\RSA object + * + * @param object $key + * @access public + */ + function setPrivateKey($key) + { + $this->privateKey = $key; + } + + /** + * Set challenge + * + * Used for SPKAC CSR's + * + * @param string $challenge + * @access public + */ + function setChallenge($challenge) + { + $this->challenge = $challenge; + } + + /** + * Gets the public key + * + * Returns a \phpseclib\Crypt\RSA object or a false. + * + * @access public + * @return mixed + */ + function getPublicKey() + { + if (isset($this->publicKey)) { + return $this->publicKey; + } + + if (isset($this->currentCert) && is_array($this->currentCert)) { + foreach (array('tbsCertificate/subjectPublicKeyInfo', 'certificationRequestInfo/subjectPKInfo') as $path) { + $keyinfo = $this->_subArray($this->currentCert, $path); + if (!empty($keyinfo)) { + break; + } + } + } + if (empty($keyinfo)) { + return false; + } + + $key = $keyinfo['subjectPublicKey']; + + switch ($keyinfo['algorithm']['algorithm']) { + case 'rsaEncryption': + $publicKey = new RSA(); + $publicKey->loadKey($key); + $publicKey->setPublicKey(); + break; + default: + return false; + } + + return $publicKey; + } + + /** + * Load a Certificate Signing Request + * + * @param string|array $csr + * @param int $mode + * @access public + * @return mixed + */ + function loadCSR($csr, $mode = self::FORMAT_AUTO_DETECT) + { + if (is_array($csr) && isset($csr['certificationRequestInfo'])) { + unset($this->currentCert); + unset($this->currentKeyIdentifier); + unset($this->signatureSubject); + $this->dn = $csr['certificationRequestInfo']['subject']; + if (!isset($this->dn)) { + return false; + } + + $this->currentCert = $csr; + return $csr; + } + + // see http://tools.ietf.org/html/rfc2986 + + $asn1 = new ASN1(); + + if ($mode != self::FORMAT_DER) { + $newcsr = $this->_extractBER($csr); + if ($mode == self::FORMAT_PEM && $csr == $newcsr) { + return false; + } + $csr = $newcsr; + } + $orig = $csr; + + if ($csr === false) { + $this->currentCert = false; + return false; + } + + $asn1->loadOIDs($this->oids); + $decoded = $asn1->decodeBER($csr); + + if (empty($decoded)) { + $this->currentCert = false; + return false; + } + + $csr = $asn1->asn1map($decoded[0], $this->CertificationRequest); + if (!isset($csr) || $csr === false) { + $this->currentCert = false; + return false; + } + + $this->_mapInAttributes($csr, 'certificationRequestInfo/attributes', $asn1); + $this->_mapInDNs($csr, 'certificationRequestInfo/subject/rdnSequence', $asn1); + + $this->dn = $csr['certificationRequestInfo']['subject']; + + $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']); + + $algorithm = &$csr['certificationRequestInfo']['subjectPKInfo']['algorithm']['algorithm']; + $key = &$csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']; + $key = $this->_reformatKey($algorithm, $key); + + switch ($algorithm) { + case 'rsaEncryption': + $this->publicKey = new RSA(); + $this->publicKey->loadKey($key); + $this->publicKey->setPublicKey(); + break; + default: + $this->publicKey = null; + } + + $this->currentKeyIdentifier = null; + $this->currentCert = $csr; + + return $csr; + } + + /** + * Save CSR request + * + * @param array $csr + * @param int $format optional + * @access public + * @return string + */ + function saveCSR($csr, $format = self::FORMAT_PEM) + { + if (!is_array($csr) || !isset($csr['certificationRequestInfo'])) { + return false; + } + + switch (true) { + case !($algorithm = $this->_subArray($csr, 'certificationRequestInfo/subjectPKInfo/algorithm/algorithm')): + case is_object($csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']): + break; + default: + switch ($algorithm) { + case 'rsaEncryption': + $csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'] + = base64_encode("\0" . base64_decode(preg_replace('#-.+-|[\r\n]#', '', $csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']))); + $csr['certificationRequestInfo']['subjectPKInfo']['algorithm']['parameters'] = null; + $csr['signatureAlgorithm']['parameters'] = null; + $csr['certificationRequestInfo']['signature']['parameters'] = null; + } + } + + $asn1 = new ASN1(); + + $asn1->loadOIDs($this->oids); + + $filters = array(); + $filters['certificationRequestInfo']['subject']['rdnSequence']['value'] + = array('type' => ASN1::TYPE_UTF8_STRING); + + $asn1->loadFilters($filters); + + $this->_mapOutDNs($csr, 'certificationRequestInfo/subject/rdnSequence', $asn1); + $this->_mapOutAttributes($csr, 'certificationRequestInfo/attributes', $asn1); + $csr = $asn1->encodeDER($csr, $this->CertificationRequest); + + switch ($format) { + case self::FORMAT_DER: + return $csr; + // case self::FORMAT_PEM: + default: + return "-----BEGIN CERTIFICATE REQUEST-----\r\n" . chunk_split(base64_encode($csr), 64) . '-----END CERTIFICATE REQUEST-----'; + } + } + + /** + * Load a SPKAC CSR + * + * SPKAC's are produced by the HTML5 keygen element: + * + * https://developer.mozilla.org/en-US/docs/HTML/Element/keygen + * + * @param string|array $spkac + * @access public + * @return mixed + */ + function loadSPKAC($spkac) + { + if (is_array($spkac) && isset($spkac['publicKeyAndChallenge'])) { + unset($this->currentCert); + unset($this->currentKeyIdentifier); + unset($this->signatureSubject); + $this->currentCert = $spkac; + return $spkac; + } + + // see http://www.w3.org/html/wg/drafts/html/master/forms.html#signedpublickeyandchallenge + + $asn1 = new ASN1(); + + // OpenSSL produces SPKAC's that are preceded by the string SPKAC= + $temp = preg_replace('#(?:SPKAC=)|[ \r\n\\\]#', '', $spkac); + $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false; + if ($temp != false) { + $spkac = $temp; + } + $orig = $spkac; + + if ($spkac === false) { + $this->currentCert = false; + return false; + } + + $asn1->loadOIDs($this->oids); + $decoded = $asn1->decodeBER($spkac); + + if (empty($decoded)) { + $this->currentCert = false; + return false; + } + + $spkac = $asn1->asn1map($decoded[0], $this->SignedPublicKeyAndChallenge); + + if (!isset($spkac) || $spkac === false) { + $this->currentCert = false; + return false; + } + + $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']); + + $algorithm = &$spkac['publicKeyAndChallenge']['spki']['algorithm']['algorithm']; + $key = &$spkac['publicKeyAndChallenge']['spki']['subjectPublicKey']; + $key = $this->_reformatKey($algorithm, $key); + + switch ($algorithm) { + case 'rsaEncryption': + $this->publicKey = new RSA(); + $this->publicKey->loadKey($key); + $this->publicKey->setPublicKey(); + break; + default: + $this->publicKey = null; + } + + $this->currentKeyIdentifier = null; + $this->currentCert = $spkac; + + return $spkac; + } + + /** + * Save a SPKAC CSR request + * + * @param string|array $spkac + * @param int $format optional + * @access public + * @return string + */ + function saveSPKAC($spkac, $format = self::FORMAT_PEM) + { + if (!is_array($spkac) || !isset($spkac['publicKeyAndChallenge'])) { + return false; + } + + $algorithm = $this->_subArray($spkac, 'publicKeyAndChallenge/spki/algorithm/algorithm'); + switch (true) { + case !$algorithm: + case is_object($spkac['publicKeyAndChallenge']['spki']['subjectPublicKey']): + break; + default: + switch ($algorithm) { + case 'rsaEncryption': + $spkac['publicKeyAndChallenge']['spki']['subjectPublicKey'] + = base64_encode("\0" . base64_decode(preg_replace('#-.+-|[\r\n]#', '', $spkac['publicKeyAndChallenge']['spki']['subjectPublicKey']))); + } + } + + $asn1 = new ASN1(); + + $asn1->loadOIDs($this->oids); + $spkac = $asn1->encodeDER($spkac, $this->SignedPublicKeyAndChallenge); + + switch ($format) { + case self::FORMAT_DER: + return $spkac; + // case self::FORMAT_PEM: + default: + // OpenSSL's implementation of SPKAC requires the SPKAC be preceded by SPKAC= and since there are pretty much + // no other SPKAC decoders phpseclib will use that same format + return 'SPKAC=' . base64_encode($spkac); + } + } + + /** + * Load a Certificate Revocation List + * + * @param string $crl + * @param int $mode + * @access public + * @return mixed + */ + function loadCRL($crl, $mode = self::FORMAT_AUTO_DETECT) + { + if (is_array($crl) && isset($crl['tbsCertList'])) { + $this->currentCert = $crl; + unset($this->signatureSubject); + return $crl; + } + + $asn1 = new ASN1(); + + if ($mode != self::FORMAT_DER) { + $newcrl = $this->_extractBER($crl); + if ($mode == self::FORMAT_PEM && $crl == $newcrl) { + return false; + } + $crl = $newcrl; + } + $orig = $crl; + + if ($crl === false) { + $this->currentCert = false; + return false; + } + + $asn1->loadOIDs($this->oids); + $decoded = $asn1->decodeBER($crl); + + if (empty($decoded)) { + $this->currentCert = false; + return false; + } + + $crl = $asn1->asn1map($decoded[0], $this->CertificateList); + if (!isset($crl) || $crl === false) { + $this->currentCert = false; + return false; + } + + $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']); + + $this->_mapInDNs($crl, 'tbsCertList/issuer/rdnSequence', $asn1); + if ($this->_isSubArrayValid($crl, 'tbsCertList/crlExtensions')) { + $this->_mapInExtensions($crl, 'tbsCertList/crlExtensions', $asn1); + } + if ($this->_isSubArrayValid($crl, 'tbsCertList/revokedCertificates')) { + $rclist_ref = &$this->_subArrayUnchecked($crl, 'tbsCertList/revokedCertificates'); + if ($rclist_ref) { + $rclist = $crl['tbsCertList']['revokedCertificates']; + foreach ($rclist as $i => $extension) { + if ($this->_isSubArrayValid($rclist, "$i/crlEntryExtensions", $asn1)) { + $this->_mapInExtensions($rclist_ref, "$i/crlEntryExtensions", $asn1); + } + } + } + } + + $this->currentKeyIdentifier = null; + $this->currentCert = $crl; + + return $crl; + } + + /** + * Save Certificate Revocation List. + * + * @param array $crl + * @param int $format optional + * @access public + * @return string + */ + function saveCRL($crl, $format = self::FORMAT_PEM) + { + if (!is_array($crl) || !isset($crl['tbsCertList'])) { + return false; + } + + $asn1 = new ASN1(); + + $asn1->loadOIDs($this->oids); + + $filters = array(); + $filters['tbsCertList']['issuer']['rdnSequence']['value'] + = array('type' => ASN1::TYPE_UTF8_STRING); + $filters['tbsCertList']['signature']['parameters'] + = array('type' => ASN1::TYPE_UTF8_STRING); + $filters['signatureAlgorithm']['parameters'] + = array('type' => ASN1::TYPE_UTF8_STRING); + + if (empty($crl['tbsCertList']['signature']['parameters'])) { + $filters['tbsCertList']['signature']['parameters'] + = array('type' => ASN1::TYPE_NULL); + } + + if (empty($crl['signatureAlgorithm']['parameters'])) { + $filters['signatureAlgorithm']['parameters'] + = array('type' => ASN1::TYPE_NULL); + } + + $asn1->loadFilters($filters); + + $this->_mapOutDNs($crl, 'tbsCertList/issuer/rdnSequence', $asn1); + $this->_mapOutExtensions($crl, 'tbsCertList/crlExtensions', $asn1); + $rclist = &$this->_subArray($crl, 'tbsCertList/revokedCertificates'); + if (is_array($rclist)) { + foreach ($rclist as $i => $extension) { + $this->_mapOutExtensions($rclist, "$i/crlEntryExtensions", $asn1); + } + } + + $crl = $asn1->encodeDER($crl, $this->CertificateList); + + switch ($format) { + case self::FORMAT_DER: + return $crl; + // case self::FORMAT_PEM: + default: + return "-----BEGIN X509 CRL-----\r\n" . chunk_split(base64_encode($crl), 64) . '-----END X509 CRL-----'; + } + } + + /** + * Helper function to build a time field according to RFC 3280 section + * - 4.1.2.5 Validity + * - 5.1.2.4 This Update + * - 5.1.2.5 Next Update + * - 5.1.2.6 Revoked Certificates + * by choosing utcTime iff year of date given is before 2050 and generalTime else. + * + * @param string $date in format date('D, d M Y H:i:s O') + * @access private + * @return array + */ + function _timeField($date) + { + if ($date instanceof Element) { + return $date; + } + $dateObj = new DateTime($date, new DateTimeZone('GMT')); + $year = $dateObj->format('Y'); // the same way ASN1.php parses this + if ($year < 2050) { + return array('utcTime' => $date); + } else { + return array('generalTime' => $date); + } + } + + /** + * Sign an X.509 certificate + * + * $issuer's private key needs to be loaded. + * $subject can be either an existing X.509 cert (if you want to resign it), + * a CSR or something with the DN and public key explicitly set. + * + * @param \phpseclib\File\X509 $issuer + * @param \phpseclib\File\X509 $subject + * @param string $signatureAlgorithm optional + * @access public + * @return mixed + */ + function sign($issuer, $subject, $signatureAlgorithm = 'sha1WithRSAEncryption') + { + if (!is_object($issuer->privateKey) || empty($issuer->dn)) { + return false; + } + + if (isset($subject->publicKey) && !($subjectPublicKey = $subject->_formatSubjectPublicKey())) { + return false; + } + + $currentCert = isset($this->currentCert) ? $this->currentCert : null; + $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject: null; + + if (isset($subject->currentCert) && is_array($subject->currentCert) && isset($subject->currentCert['tbsCertificate'])) { + $this->currentCert = $subject->currentCert; + $this->currentCert['tbsCertificate']['signature']['algorithm'] = $signatureAlgorithm; + $this->currentCert['signatureAlgorithm']['algorithm'] = $signatureAlgorithm; + + if (!empty($this->startDate)) { + $this->currentCert['tbsCertificate']['validity']['notBefore'] = $this->_timeField($this->startDate); + } + if (!empty($this->endDate)) { + $this->currentCert['tbsCertificate']['validity']['notAfter'] = $this->_timeField($this->endDate); + } + if (!empty($this->serialNumber)) { + $this->currentCert['tbsCertificate']['serialNumber'] = $this->serialNumber; + } + if (!empty($subject->dn)) { + $this->currentCert['tbsCertificate']['subject'] = $subject->dn; + } + if (!empty($subject->publicKey)) { + $this->currentCert['tbsCertificate']['subjectPublicKeyInfo'] = $subjectPublicKey; + } + $this->removeExtension('id-ce-authorityKeyIdentifier'); + if (isset($subject->domains)) { + $this->removeExtension('id-ce-subjectAltName'); + } + } elseif (isset($subject->currentCert) && is_array($subject->currentCert) && isset($subject->currentCert['tbsCertList'])) { + return false; + } else { + if (!isset($subject->publicKey)) { + return false; + } + + $startDate = new DateTime('now', new DateTimeZone(@date_default_timezone_get())); + $startDate = !empty($this->startDate) ? $this->startDate : $startDate->format('D, d M Y H:i:s O'); + + $endDate = new DateTime('+1 year', new DateTimeZone(@date_default_timezone_get())); + $endDate = !empty($this->endDate) ? $this->endDate : $endDate->format('D, d M Y H:i:s O'); + + /* "The serial number MUST be a positive integer" + "Conforming CAs MUST NOT use serialNumber values longer than 20 octets." + -- https://tools.ietf.org/html/rfc5280#section-4.1.2.2 + + for the integer to be positive the leading bit needs to be 0 hence the + application of a bitmap + */ + $serialNumber = !empty($this->serialNumber) ? + $this->serialNumber : + new BigInteger(Random::string(20) & ("\x7F" . str_repeat("\xFF", 19)), 256); + + $this->currentCert = array( + 'tbsCertificate' => + array( + 'version' => 'v3', + 'serialNumber' => $serialNumber, // $this->setSerialNumber() + 'signature' => array('algorithm' => $signatureAlgorithm), + 'issuer' => false, // this is going to be overwritten later + 'validity' => array( + 'notBefore' => $this->_timeField($startDate), // $this->setStartDate() + 'notAfter' => $this->_timeField($endDate) // $this->setEndDate() + ), + 'subject' => $subject->dn, + 'subjectPublicKeyInfo' => $subjectPublicKey + ), + 'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm), + 'signature' => false // this is going to be overwritten later + ); + + // Copy extensions from CSR. + $csrexts = $subject->getAttribute('pkcs-9-at-extensionRequest', 0); + + if (!empty($csrexts)) { + $this->currentCert['tbsCertificate']['extensions'] = $csrexts; + } + } + + $this->currentCert['tbsCertificate']['issuer'] = $issuer->dn; + + if (isset($issuer->currentKeyIdentifier)) { + $this->setExtension('id-ce-authorityKeyIdentifier', array( + //'authorityCertIssuer' => array( + // array( + // 'directoryName' => $issuer->dn + // ) + //), + 'keyIdentifier' => $issuer->currentKeyIdentifier + )); + //$extensions = &$this->currentCert['tbsCertificate']['extensions']; + //if (isset($issuer->serialNumber)) { + // $extensions[count($extensions) - 1]['authorityCertSerialNumber'] = $issuer->serialNumber; + //} + //unset($extensions); + } + + if (isset($subject->currentKeyIdentifier)) { + $this->setExtension('id-ce-subjectKeyIdentifier', $subject->currentKeyIdentifier); + } + + $altName = array(); + + if (isset($subject->domains) && count($subject->domains)) { + $altName = array_map(array('\phpseclib\File\X509', '_dnsName'), $subject->domains); + } + + if (isset($subject->ipAddresses) && count($subject->ipAddresses)) { + // should an IP address appear as the CN if no domain name is specified? idk + //$ips = count($subject->domains) ? $subject->ipAddresses : array_slice($subject->ipAddresses, 1); + $ipAddresses = array(); + foreach ($subject->ipAddresses as $ipAddress) { + $encoded = $subject->_ipAddress($ipAddress); + if ($encoded !== false) { + $ipAddresses[] = $encoded; + } + } + if (count($ipAddresses)) { + $altName = array_merge($altName, $ipAddresses); + } + } + + if (!empty($altName)) { + $this->setExtension('id-ce-subjectAltName', $altName); + } + + if ($this->caFlag) { + $keyUsage = $this->getExtension('id-ce-keyUsage'); + if (!$keyUsage) { + $keyUsage = array(); + } + + $this->setExtension( + 'id-ce-keyUsage', + array_values(array_unique(array_merge($keyUsage, array('cRLSign', 'keyCertSign')))) + ); + + $basicConstraints = $this->getExtension('id-ce-basicConstraints'); + if (!$basicConstraints) { + $basicConstraints = array(); + } + + $this->setExtension( + 'id-ce-basicConstraints', + array_unique(array_merge(array('cA' => true), $basicConstraints)), + true + ); + + if (!isset($subject->currentKeyIdentifier)) { + $this->setExtension('id-ce-subjectKeyIdentifier', base64_encode($this->computeKeyIdentifier($this->currentCert)), false, false); + } + } + + // resync $this->signatureSubject + // save $tbsCertificate in case there are any \phpseclib\File\ASN1\Element objects in it + $tbsCertificate = $this->currentCert['tbsCertificate']; + $this->loadX509($this->saveX509($this->currentCert)); + + $result = $this->_sign($issuer->privateKey, $signatureAlgorithm); + $result['tbsCertificate'] = $tbsCertificate; + + $this->currentCert = $currentCert; + $this->signatureSubject = $signatureSubject; + + return $result; + } + + /** + * Sign a CSR + * + * @access public + * @return mixed + */ + function signCSR($signatureAlgorithm = 'sha1WithRSAEncryption') + { + if (!is_object($this->privateKey) || empty($this->dn)) { + return false; + } + + $origPublicKey = $this->publicKey; + $class = get_class($this->privateKey); + $this->publicKey = new $class(); + $this->publicKey->loadKey($this->privateKey->getPublicKey()); + $this->publicKey->setPublicKey(); + if (!($publicKey = $this->_formatSubjectPublicKey())) { + return false; + } + $this->publicKey = $origPublicKey; + + $currentCert = isset($this->currentCert) ? $this->currentCert : null; + $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject: null; + + if (isset($this->currentCert) && is_array($this->currentCert) && isset($this->currentCert['certificationRequestInfo'])) { + $this->currentCert['signatureAlgorithm']['algorithm'] = $signatureAlgorithm; + if (!empty($this->dn)) { + $this->currentCert['certificationRequestInfo']['subject'] = $this->dn; + } + $this->currentCert['certificationRequestInfo']['subjectPKInfo'] = $publicKey; + } else { + $this->currentCert = array( + 'certificationRequestInfo' => + array( + 'version' => 'v1', + 'subject' => $this->dn, + 'subjectPKInfo' => $publicKey + ), + 'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm), + 'signature' => false // this is going to be overwritten later + ); + } + + // resync $this->signatureSubject + // save $certificationRequestInfo in case there are any \phpseclib\File\ASN1\Element objects in it + $certificationRequestInfo = $this->currentCert['certificationRequestInfo']; + $this->loadCSR($this->saveCSR($this->currentCert)); + + $result = $this->_sign($this->privateKey, $signatureAlgorithm); + $result['certificationRequestInfo'] = $certificationRequestInfo; + + $this->currentCert = $currentCert; + $this->signatureSubject = $signatureSubject; + + return $result; + } + + /** + * Sign a SPKAC + * + * @access public + * @return mixed + */ + function signSPKAC($signatureAlgorithm = 'sha1WithRSAEncryption') + { + if (!is_object($this->privateKey)) { + return false; + } + + $origPublicKey = $this->publicKey; + $class = get_class($this->privateKey); + $this->publicKey = new $class(); + $this->publicKey->loadKey($this->privateKey->getPublicKey()); + $this->publicKey->setPublicKey(); + $publicKey = $this->_formatSubjectPublicKey(); + if (!$publicKey) { + return false; + } + $this->publicKey = $origPublicKey; + + $currentCert = isset($this->currentCert) ? $this->currentCert : null; + $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject: null; + + // re-signing a SPKAC seems silly but since everything else supports re-signing why not? + if (isset($this->currentCert) && is_array($this->currentCert) && isset($this->currentCert['publicKeyAndChallenge'])) { + $this->currentCert['signatureAlgorithm']['algorithm'] = $signatureAlgorithm; + $this->currentCert['publicKeyAndChallenge']['spki'] = $publicKey; + if (!empty($this->challenge)) { + // the bitwise AND ensures that the output is a valid IA5String + $this->currentCert['publicKeyAndChallenge']['challenge'] = $this->challenge & str_repeat("\x7F", strlen($this->challenge)); + } + } else { + $this->currentCert = array( + 'publicKeyAndChallenge' => + array( + 'spki' => $publicKey, + // quoting , + // "A challenge string that is submitted along with the public key. Defaults to an empty string if not specified." + // both Firefox and OpenSSL ("openssl spkac -key private.key") behave this way + // we could alternatively do this instead if we ignored the specs: + // Random::string(8) & str_repeat("\x7F", 8) + 'challenge' => !empty($this->challenge) ? $this->challenge : '' + ), + 'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm), + 'signature' => false // this is going to be overwritten later + ); + } + + // resync $this->signatureSubject + // save $publicKeyAndChallenge in case there are any \phpseclib\File\ASN1\Element objects in it + $publicKeyAndChallenge = $this->currentCert['publicKeyAndChallenge']; + $this->loadSPKAC($this->saveSPKAC($this->currentCert)); + + $result = $this->_sign($this->privateKey, $signatureAlgorithm); + $result['publicKeyAndChallenge'] = $publicKeyAndChallenge; + + $this->currentCert = $currentCert; + $this->signatureSubject = $signatureSubject; + + return $result; + } + + /** + * Sign a CRL + * + * $issuer's private key needs to be loaded. + * + * @param \phpseclib\File\X509 $issuer + * @param \phpseclib\File\X509 $crl + * @param string $signatureAlgorithm optional + * @access public + * @return mixed + */ + function signCRL($issuer, $crl, $signatureAlgorithm = 'sha1WithRSAEncryption') + { + if (!is_object($issuer->privateKey) || empty($issuer->dn)) { + return false; + } + + $currentCert = isset($this->currentCert) ? $this->currentCert : null; + $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject : null; + + $thisUpdate = new DateTime('now', new DateTimeZone(@date_default_timezone_get())); + $thisUpdate = !empty($this->startDate) ? $this->startDate : $thisUpdate->format('D, d M Y H:i:s O'); + + if (isset($crl->currentCert) && is_array($crl->currentCert) && isset($crl->currentCert['tbsCertList'])) { + $this->currentCert = $crl->currentCert; + $this->currentCert['tbsCertList']['signature']['algorithm'] = $signatureAlgorithm; + $this->currentCert['signatureAlgorithm']['algorithm'] = $signatureAlgorithm; + } else { + $this->currentCert = array( + 'tbsCertList' => + array( + 'version' => 'v2', + 'signature' => array('algorithm' => $signatureAlgorithm), + 'issuer' => false, // this is going to be overwritten later + 'thisUpdate' => $this->_timeField($thisUpdate) // $this->setStartDate() + ), + 'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm), + 'signature' => false // this is going to be overwritten later + ); + } + + $tbsCertList = &$this->currentCert['tbsCertList']; + $tbsCertList['issuer'] = $issuer->dn; + $tbsCertList['thisUpdate'] = $this->_timeField($thisUpdate); + + if (!empty($this->endDate)) { + $tbsCertList['nextUpdate'] = $this->_timeField($this->endDate); // $this->setEndDate() + } else { + unset($tbsCertList['nextUpdate']); + } + + if (!empty($this->serialNumber)) { + $crlNumber = $this->serialNumber; + } else { + $crlNumber = $this->getExtension('id-ce-cRLNumber'); + // "The CRL number is a non-critical CRL extension that conveys a + // monotonically increasing sequence number for a given CRL scope and + // CRL issuer. This extension allows users to easily determine when a + // particular CRL supersedes another CRL." + // -- https://tools.ietf.org/html/rfc5280#section-5.2.3 + $crlNumber = $crlNumber !== false ? $crlNumber->add(new BigInteger(1)) : null; + } + + $this->removeExtension('id-ce-authorityKeyIdentifier'); + $this->removeExtension('id-ce-issuerAltName'); + + // Be sure version >= v2 if some extension found. + $version = isset($tbsCertList['version']) ? $tbsCertList['version'] : 0; + if (!$version) { + if (!empty($tbsCertList['crlExtensions'])) { + $version = 1; // v2. + } elseif (!empty($tbsCertList['revokedCertificates'])) { + foreach ($tbsCertList['revokedCertificates'] as $cert) { + if (!empty($cert['crlEntryExtensions'])) { + $version = 1; // v2. + } + } + } + + if ($version) { + $tbsCertList['version'] = $version; + } + } + + // Store additional extensions. + if (!empty($tbsCertList['version'])) { // At least v2. + if (!empty($crlNumber)) { + $this->setExtension('id-ce-cRLNumber', $crlNumber); + } + + if (isset($issuer->currentKeyIdentifier)) { + $this->setExtension('id-ce-authorityKeyIdentifier', array( + //'authorityCertIssuer' => array( + // array( + // 'directoryName' => $issuer->dn + // ) + //), + 'keyIdentifier' => $issuer->currentKeyIdentifier + )); + //$extensions = &$tbsCertList['crlExtensions']; + //if (isset($issuer->serialNumber)) { + // $extensions[count($extensions) - 1]['authorityCertSerialNumber'] = $issuer->serialNumber; + //} + //unset($extensions); + } + + $issuerAltName = $this->getExtension('id-ce-subjectAltName', $issuer->currentCert); + + if ($issuerAltName !== false) { + $this->setExtension('id-ce-issuerAltName', $issuerAltName); + } + } + + if (empty($tbsCertList['revokedCertificates'])) { + unset($tbsCertList['revokedCertificates']); + } + + unset($tbsCertList); + + // resync $this->signatureSubject + // save $tbsCertList in case there are any \phpseclib\File\ASN1\Element objects in it + $tbsCertList = $this->currentCert['tbsCertList']; + $this->loadCRL($this->saveCRL($this->currentCert)); + + $result = $this->_sign($issuer->privateKey, $signatureAlgorithm); + $result['tbsCertList'] = $tbsCertList; + + $this->currentCert = $currentCert; + $this->signatureSubject = $signatureSubject; + + return $result; + } + + /** + * X.509 certificate signing helper function. + * + * @param \phpseclib\File\X509 $key + * @param string $signatureAlgorithm + * @access public + * @return mixed + */ + function _sign($key, $signatureAlgorithm) + { + if ($key instanceof RSA) { + switch ($signatureAlgorithm) { + case 'md2WithRSAEncryption': + case 'md5WithRSAEncryption': + case 'sha1WithRSAEncryption': + case 'sha224WithRSAEncryption': + case 'sha256WithRSAEncryption': + case 'sha384WithRSAEncryption': + case 'sha512WithRSAEncryption': + $key->setHash(preg_replace('#WithRSAEncryption$#', '', $signatureAlgorithm)); + $key->setSignatureMode(RSA::SIGNATURE_PKCS1); + + $this->currentCert['signature'] = base64_encode("\0" . $key->sign($this->signatureSubject)); + return $this->currentCert; + } + } + + return false; + } + + /** + * Set certificate start date + * + * @param string $date + * @access public + */ + function setStartDate($date) + { + if (!is_object($date) || !is_a($date, 'DateTime')) { + $date = new DateTime($date, new DateTimeZone(@date_default_timezone_get())); + } + + $this->startDate = $date->format('D, d M Y H:i:s O'); + } + + /** + * Set certificate end date + * + * @param string $date + * @access public + */ + function setEndDate($date) + { + /* + To indicate that a certificate has no well-defined expiration date, + the notAfter SHOULD be assigned the GeneralizedTime value of + 99991231235959Z. + + -- http://tools.ietf.org/html/rfc5280#section-4.1.2.5 + */ + if (strtolower($date) == 'lifetime') { + $temp = '99991231235959Z'; + $asn1 = new ASN1(); + $temp = chr(ASN1::TYPE_GENERALIZED_TIME) . $asn1->_encodeLength(strlen($temp)) . $temp; + $this->endDate = new Element($temp); + } else { + if (!is_object($date) || !is_a($date, 'DateTime')) { + $date = new DateTime($date, new DateTimeZone(@date_default_timezone_get())); + } + + $this->endDate = $date->format('D, d M Y H:i:s O'); + } + } + + /** + * Set Serial Number + * + * @param string $serial + * @param int $base optional + * @access public + */ + function setSerialNumber($serial, $base = -256) + { + $this->serialNumber = new BigInteger($serial, $base); + } + + /** + * Turns the certificate into a certificate authority + * + * @access public + */ + function makeCA() + { + $this->caFlag = true; + } + + /** + * Check for validity of subarray + * + * This is intended for use in conjunction with _subArrayUnchecked(), + * implementing the checks included in _subArray() but without copying + * a potentially large array by passing its reference by-value to is_array(). + * + * @param array $root + * @param string $path + * @return boolean + * @access private + */ + function _isSubArrayValid($root, $path) + { + if (!is_array($root)) { + return false; + } + + foreach (explode('/', $path) as $i) { + if (!is_array($root)) { + return false; + } + + if (!isset($root[$i])) { + return true; + } + + $root = $root[$i]; + } + + return true; + } + + /** + * Get a reference to a subarray + * + * This variant of _subArray() does no is_array() checking, + * so $root should be checked with _isSubArrayValid() first. + * + * This is here for performance reasons: + * Passing a reference (i.e. $root) by-value (i.e. to is_array()) + * creates a copy. If $root is an especially large array, this is expensive. + * + * @param array $root + * @param string $path absolute path with / as component separator + * @param bool $create optional + * @access private + * @return array|false + */ + function &_subArrayUnchecked(&$root, $path, $create = false) + { + $false = false; + + foreach (explode('/', $path) as $i) { + if (!isset($root[$i])) { + if (!$create) { + return $false; + } + + $root[$i] = array(); + } + + $root = &$root[$i]; + } + + return $root; + } + + /** + * Get a reference to a subarray + * + * @param array $root + * @param string $path absolute path with / as component separator + * @param bool $create optional + * @access private + * @return array|false + */ + function &_subArray(&$root, $path, $create = false) + { + $false = false; + + if (!is_array($root)) { + return $false; + } + + foreach (explode('/', $path) as $i) { + if (!is_array($root)) { + return $false; + } + + if (!isset($root[$i])) { + if (!$create) { + return $false; + } + + $root[$i] = array(); + } + + $root = &$root[$i]; + } + + return $root; + } + + /** + * Get a reference to an extension subarray + * + * @param array $root + * @param string $path optional absolute path with / as component separator + * @param bool $create optional + * @access private + * @return array|false + */ + function &_extensions(&$root, $path = null, $create = false) + { + if (!isset($root)) { + $root = $this->currentCert; + } + + switch (true) { + case !empty($path): + case !is_array($root): + break; + case isset($root['tbsCertificate']): + $path = 'tbsCertificate/extensions'; + break; + case isset($root['tbsCertList']): + $path = 'tbsCertList/crlExtensions'; + break; + case isset($root['certificationRequestInfo']): + $pth = 'certificationRequestInfo/attributes'; + $attributes = &$this->_subArray($root, $pth, $create); + + if (is_array($attributes)) { + foreach ($attributes as $key => $value) { + if ($value['type'] == 'pkcs-9-at-extensionRequest') { + $path = "$pth/$key/value/0"; + break 2; + } + } + if ($create) { + $key = count($attributes); + $attributes[] = array('type' => 'pkcs-9-at-extensionRequest', 'value' => array()); + $path = "$pth/$key/value/0"; + } + } + break; + } + + $extensions = &$this->_subArray($root, $path, $create); + + if (!is_array($extensions)) { + $false = false; + return $false; + } + + return $extensions; + } + + /** + * Remove an Extension + * + * @param string $id + * @param string $path optional + * @access private + * @return bool + */ + function _removeExtension($id, $path = null) + { + $extensions = &$this->_extensions($this->currentCert, $path); + + if (!is_array($extensions)) { + return false; + } + + $result = false; + foreach ($extensions as $key => $value) { + if ($value['extnId'] == $id) { + unset($extensions[$key]); + $result = true; + } + } + + $extensions = array_values($extensions); + // fix for https://bugs.php.net/75433 affecting PHP 7.2 + if (!isset($extensions[0])) { + $extensions = array_splice($extensions, 0, 0); + } + return $result; + } + + /** + * Get an Extension + * + * Returns the extension if it exists and false if not + * + * @param string $id + * @param array $cert optional + * @param string $path optional + * @access private + * @return mixed + */ + function _getExtension($id, $cert = null, $path = null) + { + $extensions = $this->_extensions($cert, $path); + + if (!is_array($extensions)) { + return false; + } + + foreach ($extensions as $key => $value) { + if ($value['extnId'] == $id) { + return $value['extnValue']; + } + } + + return false; + } + + /** + * Returns a list of all extensions in use + * + * @param array $cert optional + * @param string $path optional + * @access private + * @return array + */ + function _getExtensions($cert = null, $path = null) + { + $exts = $this->_extensions($cert, $path); + $extensions = array(); + + if (is_array($exts)) { + foreach ($exts as $extension) { + $extensions[] = $extension['extnId']; + } + } + + return $extensions; + } + + /** + * Set an Extension + * + * @param string $id + * @param mixed $value + * @param bool $critical optional + * @param bool $replace optional + * @param string $path optional + * @access private + * @return bool + */ + function _setExtension($id, $value, $critical = false, $replace = true, $path = null) + { + $extensions = &$this->_extensions($this->currentCert, $path, true); + + if (!is_array($extensions)) { + return false; + } + + $newext = array('extnId' => $id, 'critical' => $critical, 'extnValue' => $value); + + foreach ($extensions as $key => $value) { + if ($value['extnId'] == $id) { + if (!$replace) { + return false; + } + + $extensions[$key] = $newext; + return true; + } + } + + $extensions[] = $newext; + return true; + } + + /** + * Remove a certificate, CSR or CRL Extension + * + * @param string $id + * @access public + * @return bool + */ + function removeExtension($id) + { + return $this->_removeExtension($id); + } + + /** + * Get a certificate, CSR or CRL Extension + * + * Returns the extension if it exists and false if not + * + * @param string $id + * @param array $cert optional + * @access public + * @return mixed + */ + function getExtension($id, $cert = null) + { + return $this->_getExtension($id, $cert); + } + + /** + * Returns a list of all extensions in use in certificate, CSR or CRL + * + * @param array $cert optional + * @access public + * @return array + */ + function getExtensions($cert = null) + { + return $this->_getExtensions($cert); + } + + /** + * Set a certificate, CSR or CRL Extension + * + * @param string $id + * @param mixed $value + * @param bool $critical optional + * @param bool $replace optional + * @access public + * @return bool + */ + function setExtension($id, $value, $critical = false, $replace = true) + { + return $this->_setExtension($id, $value, $critical, $replace); + } + + /** + * Remove a CSR attribute. + * + * @param string $id + * @param int $disposition optional + * @access public + * @return bool + */ + function removeAttribute($id, $disposition = self::ATTR_ALL) + { + $attributes = &$this->_subArray($this->currentCert, 'certificationRequestInfo/attributes'); + + if (!is_array($attributes)) { + return false; + } + + $result = false; + foreach ($attributes as $key => $attribute) { + if ($attribute['type'] == $id) { + $n = count($attribute['value']); + switch (true) { + case $disposition == self::ATTR_APPEND: + case $disposition == self::ATTR_REPLACE: + return false; + case $disposition >= $n: + $disposition -= $n; + break; + case $disposition == self::ATTR_ALL: + case $n == 1: + unset($attributes[$key]); + $result = true; + break; + default: + unset($attributes[$key]['value'][$disposition]); + $attributes[$key]['value'] = array_values($attributes[$key]['value']); + $result = true; + break; + } + if ($result && $disposition != self::ATTR_ALL) { + break; + } + } + } + + $attributes = array_values($attributes); + return $result; + } + + /** + * Get a CSR attribute + * + * Returns the attribute if it exists and false if not + * + * @param string $id + * @param int $disposition optional + * @param array $csr optional + * @access public + * @return mixed + */ + function getAttribute($id, $disposition = self::ATTR_ALL, $csr = null) + { + if (empty($csr)) { + $csr = $this->currentCert; + } + + $attributes = $this->_subArray($csr, 'certificationRequestInfo/attributes'); + + if (!is_array($attributes)) { + return false; + } + + foreach ($attributes as $key => $attribute) { + if ($attribute['type'] == $id) { + $n = count($attribute['value']); + switch (true) { + case $disposition == self::ATTR_APPEND: + case $disposition == self::ATTR_REPLACE: + return false; + case $disposition == self::ATTR_ALL: + return $attribute['value']; + case $disposition >= $n: + $disposition -= $n; + break; + default: + return $attribute['value'][$disposition]; + } + } + } + + return false; + } + + /** + * Returns a list of all CSR attributes in use + * + * @param array $csr optional + * @access public + * @return array + */ + function getAttributes($csr = null) + { + if (empty($csr)) { + $csr = $this->currentCert; + } + + $attributes = $this->_subArray($csr, 'certificationRequestInfo/attributes'); + $attrs = array(); + + if (is_array($attributes)) { + foreach ($attributes as $attribute) { + $attrs[] = $attribute['type']; + } + } + + return $attrs; + } + + /** + * Set a CSR attribute + * + * @param string $id + * @param mixed $value + * @param bool $disposition optional + * @access public + * @return bool + */ + function setAttribute($id, $value, $disposition = self::ATTR_ALL) + { + $attributes = &$this->_subArray($this->currentCert, 'certificationRequestInfo/attributes', true); + + if (!is_array($attributes)) { + return false; + } + + switch ($disposition) { + case self::ATTR_REPLACE: + $disposition = self::ATTR_APPEND; + case self::ATTR_ALL: + $this->removeAttribute($id); + break; + } + + foreach ($attributes as $key => $attribute) { + if ($attribute['type'] == $id) { + $n = count($attribute['value']); + switch (true) { + case $disposition == self::ATTR_APPEND: + $last = $key; + break; + case $disposition >= $n: + $disposition -= $n; + break; + default: + $attributes[$key]['value'][$disposition] = $value; + return true; + } + } + } + + switch (true) { + case $disposition >= 0: + return false; + case isset($last): + $attributes[$last]['value'][] = $value; + break; + default: + $attributes[] = array('type' => $id, 'value' => $disposition == self::ATTR_ALL ? $value: array($value)); + break; + } + + return true; + } + + /** + * Sets the subject key identifier + * + * This is used by the id-ce-authorityKeyIdentifier and the id-ce-subjectKeyIdentifier extensions. + * + * @param string $value + * @access public + */ + function setKeyIdentifier($value) + { + if (empty($value)) { + unset($this->currentKeyIdentifier); + } else { + $this->currentKeyIdentifier = base64_encode($value); + } + } + + /** + * Compute a public key identifier. + * + * Although key identifiers may be set to any unique value, this function + * computes key identifiers from public key according to the two + * recommended methods (4.2.1.2 RFC 3280). + * Highly polymorphic: try to accept all possible forms of key: + * - Key object + * - \phpseclib\File\X509 object with public or private key defined + * - Certificate or CSR array + * - \phpseclib\File\ASN1\Element object + * - PEM or DER string + * + * @param mixed $key optional + * @param int $method optional + * @access public + * @return string binary key identifier + */ + function computeKeyIdentifier($key = null, $method = 1) + { + if (is_null($key)) { + $key = $this; + } + + switch (true) { + case is_string($key): + break; + case is_array($key) && isset($key['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']): + return $this->computeKeyIdentifier($key['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'], $method); + case is_array($key) && isset($key['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']): + return $this->computeKeyIdentifier($key['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'], $method); + case !is_object($key): + return false; + case $key instanceof Element: + // Assume the element is a bitstring-packed key. + $asn1 = new ASN1(); + $decoded = $asn1->decodeBER($key->element); + if (empty($decoded)) { + return false; + } + $raw = $asn1->asn1map($decoded[0], array('type' => ASN1::TYPE_BIT_STRING)); + if (empty($raw)) { + return false; + } + $raw = base64_decode($raw); + // If the key is private, compute identifier from its corresponding public key. + $key = new RSA(); + if (!$key->loadKey($raw)) { + return false; // Not an unencrypted RSA key. + } + if ($key->getPrivateKey() !== false) { // If private. + return $this->computeKeyIdentifier($key, $method); + } + $key = $raw; // Is a public key. + break; + case $key instanceof X509: + if (isset($key->publicKey)) { + return $this->computeKeyIdentifier($key->publicKey, $method); + } + if (isset($key->privateKey)) { + return $this->computeKeyIdentifier($key->privateKey, $method); + } + if (isset($key->currentCert['tbsCertificate']) || isset($key->currentCert['certificationRequestInfo'])) { + return $this->computeKeyIdentifier($key->currentCert, $method); + } + return false; + default: // Should be a key object (i.e.: \phpseclib\Crypt\RSA). + $key = $key->getPublicKey(RSA::PUBLIC_FORMAT_PKCS1); + break; + } + + // If in PEM format, convert to binary. + $key = $this->_extractBER($key); + + // Now we have the key string: compute its sha-1 sum. + $hash = new Hash('sha1'); + $hash = $hash->hash($key); + + if ($method == 2) { + $hash = substr($hash, -8); + $hash[0] = chr((ord($hash[0]) & 0x0F) | 0x40); + } + + return $hash; + } + + /** + * Format a public key as appropriate + * + * @access private + * @return array + */ + function _formatSubjectPublicKey() + { + if ($this->publicKey instanceof RSA) { + // the following two return statements do the same thing. i dunno.. i just prefer the later for some reason. + // the former is a good example of how to do fuzzing on the public key + //return new Element(base64_decode(preg_replace('#-.+-|[\r\n]#', '', $this->publicKey->getPublicKey()))); + return array( + 'algorithm' => array('algorithm' => 'rsaEncryption'), + 'subjectPublicKey' => $this->publicKey->getPublicKey(RSA::PUBLIC_FORMAT_PKCS1) + ); + } + + return false; + } + + /** + * Set the domain name's which the cert is to be valid for + * + * @access public + * @return array + */ + function setDomain() + { + $this->domains = func_get_args(); + $this->removeDNProp('id-at-commonName'); + $this->setDNProp('id-at-commonName', $this->domains[0]); + } + + /** + * Set the IP Addresses's which the cert is to be valid for + * + * @access public + */ + function setIPAddress() + { + $this->ipAddresses = func_get_args(); + /* + if (!isset($this->domains)) { + $this->removeDNProp('id-at-commonName'); + $this->setDNProp('id-at-commonName', $this->ipAddresses[0]); + } + */ + } + + /** + * Helper function to build domain array + * + * @access private + * @param string $domain + * @return array + */ + function _dnsName($domain) + { + return array('dNSName' => $domain); + } + + /** + * Helper function to build IP Address array + * + * (IPv6 is not currently supported) + * + * @access private + * @param string $address + * @return array + */ + function _iPAddress($address) + { + return array('iPAddress' => $address); + } + + /** + * Get the index of a revoked certificate. + * + * @param array $rclist + * @param string $serial + * @param bool $create optional + * @access private + * @return int|false + */ + function _revokedCertificate(&$rclist, $serial, $create = false) + { + $serial = new BigInteger($serial); + + foreach ($rclist as $i => $rc) { + if (!($serial->compare($rc['userCertificate']))) { + return $i; + } + } + + if (!$create) { + return false; + } + + $i = count($rclist); + $revocationDate = new DateTime('now', new DateTimeZone(@date_default_timezone_get())); + $rclist[] = array('userCertificate' => $serial, + 'revocationDate' => $this->_timeField($revocationDate->format('D, d M Y H:i:s O'))); + return $i; + } + + /** + * Revoke a certificate. + * + * @param string $serial + * @param string $date optional + * @access public + * @return bool + */ + function revoke($serial, $date = null) + { + if (isset($this->currentCert['tbsCertList'])) { + if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates', true))) { + if ($this->_revokedCertificate($rclist, $serial) === false) { // If not yet revoked + if (($i = $this->_revokedCertificate($rclist, $serial, true)) !== false) { + if (!empty($date)) { + $rclist[$i]['revocationDate'] = $this->_timeField($date); + } + + return true; + } + } + } + } + + return false; + } + + /** + * Unrevoke a certificate. + * + * @param string $serial + * @access public + * @return bool + */ + function unrevoke($serial) + { + if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) { + if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) { + unset($rclist[$i]); + $rclist = array_values($rclist); + return true; + } + } + + return false; + } + + /** + * Get a revoked certificate. + * + * @param string $serial + * @access public + * @return mixed + */ + function getRevoked($serial) + { + if (is_array($rclist = $this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) { + if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) { + return $rclist[$i]; + } + } + + return false; + } + + /** + * List revoked certificates + * + * @param array $crl optional + * @access public + * @return array + */ + function listRevoked($crl = null) + { + if (!isset($crl)) { + $crl = $this->currentCert; + } + + if (!isset($crl['tbsCertList'])) { + return false; + } + + $result = array(); + + if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) { + foreach ($rclist as $rc) { + $result[] = $rc['userCertificate']->toString(); + } + } + + return $result; + } + + /** + * Remove a Revoked Certificate Extension + * + * @param string $serial + * @param string $id + * @access public + * @return bool + */ + function removeRevokedCertificateExtension($serial, $id) + { + if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) { + if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) { + return $this->_removeExtension($id, "tbsCertList/revokedCertificates/$i/crlEntryExtensions"); + } + } + + return false; + } + + /** + * Get a Revoked Certificate Extension + * + * Returns the extension if it exists and false if not + * + * @param string $serial + * @param string $id + * @param array $crl optional + * @access public + * @return mixed + */ + function getRevokedCertificateExtension($serial, $id, $crl = null) + { + if (!isset($crl)) { + $crl = $this->currentCert; + } + + if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) { + if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) { + return $this->_getExtension($id, $crl, "tbsCertList/revokedCertificates/$i/crlEntryExtensions"); + } + } + + return false; + } + + /** + * Returns a list of all extensions in use for a given revoked certificate + * + * @param string $serial + * @param array $crl optional + * @access public + * @return array + */ + function getRevokedCertificateExtensions($serial, $crl = null) + { + if (!isset($crl)) { + $crl = $this->currentCert; + } + + if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) { + if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) { + return $this->_getExtensions($crl, "tbsCertList/revokedCertificates/$i/crlEntryExtensions"); + } + } + + return false; + } + + /** + * Set a Revoked Certificate Extension + * + * @param string $serial + * @param string $id + * @param mixed $value + * @param bool $critical optional + * @param bool $replace optional + * @access public + * @return bool + */ + function setRevokedCertificateExtension($serial, $id, $value, $critical = false, $replace = true) + { + if (isset($this->currentCert['tbsCertList'])) { + if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates', true))) { + if (($i = $this->_revokedCertificate($rclist, $serial, true)) !== false) { + return $this->_setExtension($id, $value, $critical, $replace, "tbsCertList/revokedCertificates/$i/crlEntryExtensions"); + } + } + } + + return false; + } + + /** + * Extract raw BER from Base64 encoding + * + * @access private + * @param string $str + * @return string + */ + function _extractBER($str) + { + /* X.509 certs are assumed to be base64 encoded but sometimes they'll have additional things in them + * above and beyond the ceritificate. + * ie. some may have the following preceding the -----BEGIN CERTIFICATE----- line: + * + * Bag Attributes + * localKeyID: 01 00 00 00 + * subject=/O=organization/OU=org unit/CN=common name + * issuer=/O=organization/CN=common name + */ + $temp = strlen($str) <= ini_get('pcre.backtrack_limit') ? + preg_replace('#.*?^-+[^-]+-+[\r\n ]*$#ms', '', $str, 1) : + $str; + // remove new lines + $temp = str_replace(array("\r", "\n", ' '), '', $temp); + // remove the -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- stuff + $temp = preg_replace('#^-+[^-]+-+|-+[^-]+-+$#', '', $temp); + $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false; + return $temp != false ? $temp : $str; + } + + /** + * Returns the OID corresponding to a name + * + * What's returned in the associative array returned by loadX509() (or load*()) is either a name or an OID if + * no OID to name mapping is available. The problem with this is that what may be an unmapped OID in one version + * of phpseclib may not be unmapped in the next version, so apps that are looking at this OID may not be able + * to work from version to version. + * + * This method will return the OID if a name is passed to it and if no mapping is avialable it'll assume that + * what's being passed to it already is an OID and return that instead. A few examples. + * + * getOID('2.16.840.1.101.3.4.2.1') == '2.16.840.1.101.3.4.2.1' + * getOID('id-sha256') == '2.16.840.1.101.3.4.2.1' + * getOID('zzz') == 'zzz' + * + * @access public + * @return string + */ + function getOID($name) + { + static $reverseMap; + if (!isset($reverseMap)) { + $reverseMap = array_flip($this->oids); + } + return isset($reverseMap[$name]) ? $reverseMap[$name] : $name; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php b/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php new file mode 100644 index 000000000..9df0bf0f2 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php @@ -0,0 +1,3787 @@ +> and << cannot be used, nor can the modulo operator %, + * which only supports integers. Although this fact will slow this library down, the fact that such a high + * base is being used should more than compensate. + * + * Numbers are stored in {@link http://en.wikipedia.org/wiki/Endianness little endian} format. ie. + * (new \phpseclib\Math\BigInteger(pow(2, 26)))->value = array(0, 1) + * + * Useful resources are as follows: + * + * - {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf Handbook of Applied Cryptography (HAC)} + * - {@link http://math.libtomcrypt.com/files/tommath.pdf Multi-Precision Math (MPM)} + * - Java's BigInteger classes. See /j2se/src/share/classes/java/math in jdk-1_5_0-src-jrl.zip + * + * Here's an example of how to use this library: + * + * add($b); + * + * echo $c->toString(); // outputs 5 + * ?> + * + * + * @category Math + * @package BigInteger + * @author Jim Wigginton + * @copyright 2006 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + */ + +namespace phpseclib\Math; + +use phpseclib\Crypt\Random; + +/** + * Pure-PHP arbitrary precision integer arithmetic library. Supports base-2, base-10, base-16, and base-256 + * numbers. + * + * @package BigInteger + * @author Jim Wigginton + * @access public + */ +class BigInteger +{ + /**#@+ + * Reduction constants + * + * @access private + * @see BigInteger::_reduce() + */ + /** + * @see BigInteger::_montgomery() + * @see BigInteger::_prepMontgomery() + */ + const MONTGOMERY = 0; + /** + * @see BigInteger::_barrett() + */ + const BARRETT = 1; + /** + * @see BigInteger::_mod2() + */ + const POWEROF2 = 2; + /** + * @see BigInteger::_remainder() + */ + const CLASSIC = 3; + /** + * @see BigInteger::__clone() + */ + const NONE = 4; + /**#@-*/ + + /**#@+ + * Array constants + * + * Rather than create a thousands and thousands of new BigInteger objects in repeated function calls to add() and + * multiply() or whatever, we'll just work directly on arrays, taking them in as parameters and returning them. + * + * @access private + */ + /** + * $result[self::VALUE] contains the value. + */ + const VALUE = 0; + /** + * $result[self::SIGN] contains the sign. + */ + const SIGN = 1; + /**#@-*/ + + /**#@+ + * @access private + * @see BigInteger::_montgomery() + * @see BigInteger::_barrett() + */ + /** + * Cache constants + * + * $cache[self::VARIABLE] tells us whether or not the cached data is still valid. + */ + const VARIABLE = 0; + /** + * $cache[self::DATA] contains the cached data. + */ + const DATA = 1; + /**#@-*/ + + /**#@+ + * Mode constants. + * + * @access private + * @see BigInteger::__construct() + */ + /** + * To use the pure-PHP implementation + */ + const MODE_INTERNAL = 1; + /** + * To use the BCMath library + * + * (if enabled; otherwise, the internal implementation will be used) + */ + const MODE_BCMATH = 2; + /** + * To use the GMP library + * + * (if present; otherwise, either the BCMath or the internal implementation will be used) + */ + const MODE_GMP = 3; + /**#@-*/ + + /** + * Karatsuba Cutoff + * + * At what point do we switch between Karatsuba multiplication and schoolbook long multiplication? + * + * @access private + */ + const KARATSUBA_CUTOFF = 25; + + /**#@+ + * Static properties used by the pure-PHP implementation. + * + * @see __construct() + */ + protected static $base; + protected static $baseFull; + protected static $maxDigit; + protected static $msb; + + /** + * $max10 in greatest $max10Len satisfying + * $max10 = 10**$max10Len <= 2**$base. + */ + protected static $max10; + + /** + * $max10Len in greatest $max10Len satisfying + * $max10 = 10**$max10Len <= 2**$base. + */ + protected static $max10Len; + protected static $maxDigit2; + /**#@-*/ + + /** + * Holds the BigInteger's value. + * + * @var array + * @access private + */ + var $value; + + /** + * Holds the BigInteger's magnitude. + * + * @var bool + * @access private + */ + var $is_negative = false; + + /** + * Precision + * + * @see self::setPrecision() + * @access private + */ + var $precision = -1; + + /** + * Precision Bitmask + * + * @see self::setPrecision() + * @access private + */ + var $bitmask = false; + + /** + * Mode independent value used for serialization. + * + * If the bcmath or gmp extensions are installed $this->value will be a non-serializable resource, hence the need for + * a variable that'll be serializable regardless of whether or not extensions are being used. Unlike $this->value, + * however, $this->hex is only calculated when $this->__sleep() is called. + * + * @see self::__sleep() + * @see self::__wakeup() + * @var string + * @access private + */ + var $hex; + + /** + * Converts base-2, base-10, base-16, and binary strings (base-256) to BigIntegers. + * + * If the second parameter - $base - is negative, then it will be assumed that the number's are encoded using + * two's compliment. The sole exception to this is -10, which is treated the same as 10 is. + * + * Here's an example: + * + * toString(); // outputs 50 + * ?> + * + * + * @param int|string|resource $x base-10 number or base-$base number if $base set. + * @param int $base + * @return \phpseclib\Math\BigInteger + * @access public + */ + function __construct($x = 0, $base = 10) + { + if (!defined('MATH_BIGINTEGER_MODE')) { + switch (true) { + case extension_loaded('gmp'): + define('MATH_BIGINTEGER_MODE', self::MODE_GMP); + break; + case extension_loaded('bcmath'): + define('MATH_BIGINTEGER_MODE', self::MODE_BCMATH); + break; + default: + define('MATH_BIGINTEGER_MODE', self::MODE_INTERNAL); + } + } + + if (extension_loaded('openssl') && !defined('MATH_BIGINTEGER_OPENSSL_DISABLE') && !defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) { + // some versions of XAMPP have mismatched versions of OpenSSL which causes it not to work + $versions = array(); + + // avoid generating errors (even with suppression) when phpinfo() is disabled (common in production systems) + if (strpos(ini_get('disable_functions'), 'phpinfo') === false) { + ob_start(); + @phpinfo(); + $content = ob_get_contents(); + ob_end_clean(); + + preg_match_all('#OpenSSL (Header|Library) Version(.*)#im', $content, $matches); + + if (!empty($matches[1])) { + for ($i = 0; $i < count($matches[1]); $i++) { + $fullVersion = trim(str_replace('=>', '', strip_tags($matches[2][$i]))); + + // Remove letter part in OpenSSL version + if (!preg_match('/(\d+\.\d+\.\d+)/i', $fullVersion, $m)) { + $versions[$matches[1][$i]] = $fullVersion; + } else { + $versions[$matches[1][$i]] = $m[0]; + } + } + } + } + + // it doesn't appear that OpenSSL versions were reported upon until PHP 5.3+ + switch (true) { + case !isset($versions['Header']): + case !isset($versions['Library']): + case $versions['Header'] == $versions['Library']: + case version_compare($versions['Header'], '1.0.0') >= 0 && version_compare($versions['Library'], '1.0.0') >= 0: + define('MATH_BIGINTEGER_OPENSSL_ENABLED', true); + break; + default: + define('MATH_BIGINTEGER_OPENSSL_DISABLE', true); + } + } + + if (!defined('PHP_INT_SIZE')) { + define('PHP_INT_SIZE', 4); + } + + if (empty(self::$base) && MATH_BIGINTEGER_MODE == self::MODE_INTERNAL) { + switch (PHP_INT_SIZE) { + case 8: // use 64-bit integers if int size is 8 bytes + self::$base = 31; + self::$baseFull = 0x80000000; + self::$maxDigit = 0x7FFFFFFF; + self::$msb = 0x40000000; + self::$max10 = 1000000000; + self::$max10Len = 9; + self::$maxDigit2 = pow(2, 62); + break; + //case 4: // use 64-bit floats if int size is 4 bytes + default: + self::$base = 26; + self::$baseFull = 0x4000000; + self::$maxDigit = 0x3FFFFFF; + self::$msb = 0x2000000; + self::$max10 = 10000000; + self::$max10Len = 7; + self::$maxDigit2 = pow(2, 52); // pow() prevents truncation + } + } + + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + switch (true) { + case is_resource($x) && get_resource_type($x) == 'GMP integer': + // PHP 5.6 switched GMP from using resources to objects + case $x instanceof \GMP: + $this->value = $x; + return; + } + $this->value = gmp_init(0); + break; + case self::MODE_BCMATH: + $this->value = '0'; + break; + default: + $this->value = array(); + } + + // '0' counts as empty() but when the base is 256 '0' is equal to ord('0') or 48 + // '0' is the only value like this per http://php.net/empty + if (empty($x) && (abs($base) != 256 || $x !== '0')) { + return; + } + + switch ($base) { + case -256: + if (ord($x[0]) & 0x80) { + $x = ~$x; + $this->is_negative = true; + } + case 256: + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + $this->value = function_exists('gmp_import') ? + gmp_import($x) : + gmp_init('0x' . bin2hex($x)); + if ($this->is_negative) { + $this->value = gmp_neg($this->value); + } + break; + case self::MODE_BCMATH: + // round $len to the nearest 4 (thanks, DavidMJ!) + $len = (strlen($x) + 3) & 0xFFFFFFFC; + + $x = str_pad($x, $len, chr(0), STR_PAD_LEFT); + + for ($i = 0; $i < $len; $i+= 4) { + $this->value = bcmul($this->value, '4294967296', 0); // 4294967296 == 2**32 + $this->value = bcadd($this->value, 0x1000000 * ord($x[$i]) + ((ord($x[$i + 1]) << 16) | (ord($x[$i + 2]) << 8) | ord($x[$i + 3])), 0); + } + + if ($this->is_negative) { + $this->value = '-' . $this->value; + } + + break; + // converts a base-2**8 (big endian / msb) number to base-2**26 (little endian / lsb) + default: + while (strlen($x)) { + $this->value[] = $this->_bytes2int($this->_base256_rshift($x, self::$base)); + } + } + + if ($this->is_negative) { + if (MATH_BIGINTEGER_MODE != self::MODE_INTERNAL) { + $this->is_negative = false; + } + $temp = $this->add(new static('-1')); + $this->value = $temp->value; + } + break; + case 16: + case -16: + if ($base > 0 && $x[0] == '-') { + $this->is_negative = true; + $x = substr($x, 1); + } + + $x = preg_replace('#^(?:0x)?([A-Fa-f0-9]*).*#', '$1', $x); + + $is_negative = false; + if ($base < 0 && hexdec($x[0]) >= 8) { + $this->is_negative = $is_negative = true; + $x = bin2hex(~pack('H*', $x)); + } + + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + $temp = $this->is_negative ? '-0x' . $x : '0x' . $x; + $this->value = gmp_init($temp); + $this->is_negative = false; + break; + case self::MODE_BCMATH: + $x = (strlen($x) & 1) ? '0' . $x : $x; + $temp = new static(pack('H*', $x), 256); + $this->value = $this->is_negative ? '-' . $temp->value : $temp->value; + $this->is_negative = false; + break; + default: + $x = (strlen($x) & 1) ? '0' . $x : $x; + $temp = new static(pack('H*', $x), 256); + $this->value = $temp->value; + } + + if ($is_negative) { + $temp = $this->add(new static('-1')); + $this->value = $temp->value; + } + break; + case 10: + case -10: + // (?value = gmp_init($x); + break; + case self::MODE_BCMATH: + // explicitly casting $x to a string is necessary, here, since doing $x[0] on -1 yields different + // results then doing it on '-1' does (modInverse does $x[0]) + $this->value = $x === '-' ? '0' : (string) $x; + break; + default: + $temp = new static(); + + $multiplier = new static(); + $multiplier->value = array(self::$max10); + + if ($x[0] == '-') { + $this->is_negative = true; + $x = substr($x, 1); + } + + $x = str_pad($x, strlen($x) + ((self::$max10Len - 1) * strlen($x)) % self::$max10Len, 0, STR_PAD_LEFT); + while (strlen($x)) { + $temp = $temp->multiply($multiplier); + $temp = $temp->add(new static($this->_int2bytes(substr($x, 0, self::$max10Len)), 256)); + $x = substr($x, self::$max10Len); + } + + $this->value = $temp->value; + } + break; + case 2: // base-2 support originally implemented by Lluis Pamies - thanks! + case -2: + if ($base > 0 && $x[0] == '-') { + $this->is_negative = true; + $x = substr($x, 1); + } + + $x = preg_replace('#^([01]*).*#', '$1', $x); + $x = str_pad($x, strlen($x) + (3 * strlen($x)) % 4, 0, STR_PAD_LEFT); + + $str = '0x'; + while (strlen($x)) { + $part = substr($x, 0, 4); + $str.= dechex(bindec($part)); + $x = substr($x, 4); + } + + if ($this->is_negative) { + $str = '-' . $str; + } + + $temp = new static($str, 8 * $base); // ie. either -16 or +16 + $this->value = $temp->value; + $this->is_negative = $temp->is_negative; + + break; + default: + // base not supported, so we'll let $this == 0 + } + } + + /** + * Converts a BigInteger to a byte string (eg. base-256). + * + * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're + * saved as two's compliment. + * + * Here's an example: + * + * toBytes(); // outputs chr(65) + * ?> + * + * + * @param bool $twos_compliment + * @return string + * @access public + * @internal Converts a base-2**26 number to base-2**8 + */ + function toBytes($twos_compliment = false) + { + if ($twos_compliment) { + $comparison = $this->compare(new static()); + if ($comparison == 0) { + return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : ''; + } + + $temp = $comparison < 0 ? $this->add(new static(1)) : $this->copy(); + $bytes = $temp->toBytes(); + + if (!strlen($bytes)) { // eg. if the number we're trying to convert is -1 + $bytes = chr(0); + } + + if ($this->precision <= 0 && (ord($bytes[0]) & 0x80)) { + $bytes = chr(0) . $bytes; + } + + return $comparison < 0 ? ~$bytes : $bytes; + } + + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + if (gmp_cmp($this->value, gmp_init(0)) == 0) { + return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : ''; + } + + if (function_exists('gmp_export')) { + $temp = gmp_export($this->value); + } else { + $temp = gmp_strval(gmp_abs($this->value), 16); + $temp = (strlen($temp) & 1) ? '0' . $temp : $temp; + $temp = pack('H*', $temp); + } + + return $this->precision > 0 ? + substr(str_pad($temp, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) : + ltrim($temp, chr(0)); + case self::MODE_BCMATH: + if ($this->value === '0') { + return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : ''; + } + + $value = ''; + $current = $this->value; + + if ($current[0] == '-') { + $current = substr($current, 1); + } + + while (bccomp($current, '0', 0) > 0) { + $temp = bcmod($current, '16777216'); + $value = chr($temp >> 16) . chr($temp >> 8) . chr($temp) . $value; + $current = bcdiv($current, '16777216', 0); + } + + return $this->precision > 0 ? + substr(str_pad($value, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) : + ltrim($value, chr(0)); + } + + if (!count($this->value)) { + return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : ''; + } + $result = $this->_int2bytes($this->value[count($this->value) - 1]); + + $temp = $this->copy(); + + for ($i = count($temp->value) - 2; $i >= 0; --$i) { + $temp->_base256_lshift($result, self::$base); + $result = $result | str_pad($temp->_int2bytes($temp->value[$i]), strlen($result), chr(0), STR_PAD_LEFT); + } + + return $this->precision > 0 ? + str_pad(substr($result, -(($this->precision + 7) >> 3)), ($this->precision + 7) >> 3, chr(0), STR_PAD_LEFT) : + $result; + } + + /** + * Converts a BigInteger to a hex string (eg. base-16)). + * + * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're + * saved as two's compliment. + * + * Here's an example: + * + * toHex(); // outputs '41' + * ?> + * + * + * @param bool $twos_compliment + * @return string + * @access public + * @internal Converts a base-2**26 number to base-2**8 + */ + function toHex($twos_compliment = false) + { + return bin2hex($this->toBytes($twos_compliment)); + } + + /** + * Converts a BigInteger to a bit string (eg. base-2). + * + * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're + * saved as two's compliment. + * + * Here's an example: + * + * toBits(); // outputs '1000001' + * ?> + * + * + * @param bool $twos_compliment + * @return string + * @access public + * @internal Converts a base-2**26 number to base-2**2 + */ + function toBits($twos_compliment = false) + { + $hex = $this->toHex($twos_compliment); + $bits = ''; + for ($i = strlen($hex) - 8, $start = strlen($hex) & 7; $i >= $start; $i-=8) { + $bits = str_pad(decbin(hexdec(substr($hex, $i, 8))), 32, '0', STR_PAD_LEFT) . $bits; + } + if ($start) { // hexdec('') == 0 + $bits = str_pad(decbin(hexdec(substr($hex, 0, $start))), 8, '0', STR_PAD_LEFT) . $bits; + } + $result = $this->precision > 0 ? substr($bits, -$this->precision) : ltrim($bits, '0'); + + if ($twos_compliment && $this->compare(new static()) > 0 && $this->precision <= 0) { + return '0' . $result; + } + + return $result; + } + + /** + * Converts a BigInteger to a base-10 number. + * + * Here's an example: + * + * toString(); // outputs 50 + * ?> + * + * + * @return string + * @access public + * @internal Converts a base-2**26 number to base-10**7 (which is pretty much base-10) + */ + function toString() + { + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + return gmp_strval($this->value); + case self::MODE_BCMATH: + if ($this->value === '0') { + return '0'; + } + + return ltrim($this->value, '0'); + } + + if (!count($this->value)) { + return '0'; + } + + $temp = $this->copy(); + $temp->bitmask = false; + $temp->is_negative = false; + + $divisor = new static(); + $divisor->value = array(self::$max10); + $result = ''; + while (count($temp->value)) { + list($temp, $mod) = $temp->divide($divisor); + $result = str_pad(isset($mod->value[0]) ? $mod->value[0] : '', self::$max10Len, '0', STR_PAD_LEFT) . $result; + } + $result = ltrim($result, '0'); + if (empty($result)) { + $result = '0'; + } + + if ($this->is_negative) { + $result = '-' . $result; + } + + return $result; + } + + /** + * Copy an object + * + * PHP5 passes objects by reference while PHP4 passes by value. As such, we need a function to guarantee + * that all objects are passed by value, when appropriate. More information can be found here: + * + * {@link http://php.net/language.oop5.basic#51624} + * + * @access public + * @see self::__clone() + * @return \phpseclib\Math\BigInteger + */ + function copy() + { + $temp = new static(); + $temp->value = $this->value; + $temp->is_negative = $this->is_negative; + $temp->precision = $this->precision; + $temp->bitmask = $this->bitmask; + return $temp; + } + + /** + * __toString() magic method + * + * Will be called, automatically, if you're supporting just PHP5. If you're supporting PHP4, you'll need to call + * toString(). + * + * @access public + * @internal Implemented per a suggestion by Techie-Michael - thanks! + */ + function __toString() + { + return $this->toString(); + } + + /** + * __clone() magic method + * + * Although you can call BigInteger::__toString() directly in PHP5, you cannot call BigInteger::__clone() directly + * in PHP5. You can in PHP4 since it's not a magic method, but in PHP5, you have to call it by using the PHP5 + * only syntax of $y = clone $x. As such, if you're trying to write an application that works on both PHP4 and + * PHP5, call BigInteger::copy(), instead. + * + * @access public + * @see self::copy() + * @return \phpseclib\Math\BigInteger + */ + function __clone() + { + return $this->copy(); + } + + /** + * __sleep() magic method + * + * Will be called, automatically, when serialize() is called on a BigInteger object. + * + * @see self::__wakeup() + * @access public + */ + function __sleep() + { + $this->hex = $this->toHex(true); + $vars = array('hex'); + if ($this->precision > 0) { + $vars[] = 'precision'; + } + return $vars; + } + + /** + * __wakeup() magic method + * + * Will be called, automatically, when unserialize() is called on a BigInteger object. + * + * @see self::__sleep() + * @access public + */ + function __wakeup() + { + $temp = new static($this->hex, -16); + $this->value = $temp->value; + $this->is_negative = $temp->is_negative; + if ($this->precision > 0) { + // recalculate $this->bitmask + $this->setPrecision($this->precision); + } + } + + /** + * __debugInfo() magic method + * + * Will be called, automatically, when print_r() or var_dump() are called + * + * @access public + */ + function __debugInfo() + { + $opts = array(); + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + $engine = 'gmp'; + break; + case self::MODE_BCMATH: + $engine = 'bcmath'; + break; + case self::MODE_INTERNAL: + $engine = 'internal'; + $opts[] = PHP_INT_SIZE == 8 ? '64-bit' : '32-bit'; + } + if (MATH_BIGINTEGER_MODE != self::MODE_GMP && defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) { + $opts[] = 'OpenSSL'; + } + if (!empty($opts)) { + $engine.= ' (' . implode('.', $opts) . ')'; + } + return array( + 'value' => '0x' . $this->toHex(true), + 'engine' => $engine + ); + } + + /** + * Adds two BigIntegers. + * + * Here's an example: + * + * add($b); + * + * echo $c->toString(); // outputs 30 + * ?> + * + * + * @param \phpseclib\Math\BigInteger $y + * @return \phpseclib\Math\BigInteger + * @access public + * @internal Performs base-2**52 addition + */ + function add($y) + { + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + $temp = new static(); + $temp->value = gmp_add($this->value, $y->value); + + return $this->_normalize($temp); + case self::MODE_BCMATH: + $temp = new static(); + $temp->value = bcadd($this->value, $y->value, 0); + + return $this->_normalize($temp); + } + + $temp = $this->_add($this->value, $this->is_negative, $y->value, $y->is_negative); + + $result = new static(); + $result->value = $temp[self::VALUE]; + $result->is_negative = $temp[self::SIGN]; + + return $this->_normalize($result); + } + + /** + * Performs addition. + * + * @param array $x_value + * @param bool $x_negative + * @param array $y_value + * @param bool $y_negative + * @return array + * @access private + */ + function _add($x_value, $x_negative, $y_value, $y_negative) + { + $x_size = count($x_value); + $y_size = count($y_value); + + if ($x_size == 0) { + return array( + self::VALUE => $y_value, + self::SIGN => $y_negative + ); + } elseif ($y_size == 0) { + return array( + self::VALUE => $x_value, + self::SIGN => $x_negative + ); + } + + // subtract, if appropriate + if ($x_negative != $y_negative) { + if ($x_value == $y_value) { + return array( + self::VALUE => array(), + self::SIGN => false + ); + } + + $temp = $this->_subtract($x_value, false, $y_value, false); + $temp[self::SIGN] = $this->_compare($x_value, false, $y_value, false) > 0 ? + $x_negative : $y_negative; + + return $temp; + } + + if ($x_size < $y_size) { + $size = $x_size; + $value = $y_value; + } else { + $size = $y_size; + $value = $x_value; + } + + $value[count($value)] = 0; // just in case the carry adds an extra digit + + $carry = 0; + for ($i = 0, $j = 1; $j < $size; $i+=2, $j+=2) { + $sum = $x_value[$j] * self::$baseFull + $x_value[$i] + $y_value[$j] * self::$baseFull + $y_value[$i] + $carry; + $carry = $sum >= self::$maxDigit2; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1 + $sum = $carry ? $sum - self::$maxDigit2 : $sum; + + $temp = self::$base === 26 ? intval($sum / 0x4000000) : ($sum >> 31); + + $value[$i] = (int) ($sum - self::$baseFull * $temp); // eg. a faster alternative to fmod($sum, 0x4000000) + $value[$j] = $temp; + } + + if ($j == $size) { // ie. if $y_size is odd + $sum = $x_value[$i] + $y_value[$i] + $carry; + $carry = $sum >= self::$baseFull; + $value[$i] = $carry ? $sum - self::$baseFull : $sum; + ++$i; // ie. let $i = $j since we've just done $value[$i] + } + + if ($carry) { + for (; $value[$i] == self::$maxDigit; ++$i) { + $value[$i] = 0; + } + ++$value[$i]; + } + + return array( + self::VALUE => $this->_trim($value), + self::SIGN => $x_negative + ); + } + + /** + * Subtracts two BigIntegers. + * + * Here's an example: + * + * subtract($b); + * + * echo $c->toString(); // outputs -10 + * ?> + * + * + * @param \phpseclib\Math\BigInteger $y + * @return \phpseclib\Math\BigInteger + * @access public + * @internal Performs base-2**52 subtraction + */ + function subtract($y) + { + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + $temp = new static(); + $temp->value = gmp_sub($this->value, $y->value); + + return $this->_normalize($temp); + case self::MODE_BCMATH: + $temp = new static(); + $temp->value = bcsub($this->value, $y->value, 0); + + return $this->_normalize($temp); + } + + $temp = $this->_subtract($this->value, $this->is_negative, $y->value, $y->is_negative); + + $result = new static(); + $result->value = $temp[self::VALUE]; + $result->is_negative = $temp[self::SIGN]; + + return $this->_normalize($result); + } + + /** + * Performs subtraction. + * + * @param array $x_value + * @param bool $x_negative + * @param array $y_value + * @param bool $y_negative + * @return array + * @access private + */ + function _subtract($x_value, $x_negative, $y_value, $y_negative) + { + $x_size = count($x_value); + $y_size = count($y_value); + + if ($x_size == 0) { + return array( + self::VALUE => $y_value, + self::SIGN => !$y_negative + ); + } elseif ($y_size == 0) { + return array( + self::VALUE => $x_value, + self::SIGN => $x_negative + ); + } + + // add, if appropriate (ie. -$x - +$y or +$x - -$y) + if ($x_negative != $y_negative) { + $temp = $this->_add($x_value, false, $y_value, false); + $temp[self::SIGN] = $x_negative; + + return $temp; + } + + $diff = $this->_compare($x_value, $x_negative, $y_value, $y_negative); + + if (!$diff) { + return array( + self::VALUE => array(), + self::SIGN => false + ); + } + + // switch $x and $y around, if appropriate. + if ((!$x_negative && $diff < 0) || ($x_negative && $diff > 0)) { + $temp = $x_value; + $x_value = $y_value; + $y_value = $temp; + + $x_negative = !$x_negative; + + $x_size = count($x_value); + $y_size = count($y_value); + } + + // at this point, $x_value should be at least as big as - if not bigger than - $y_value + + $carry = 0; + for ($i = 0, $j = 1; $j < $y_size; $i+=2, $j+=2) { + $sum = $x_value[$j] * self::$baseFull + $x_value[$i] - $y_value[$j] * self::$baseFull - $y_value[$i] - $carry; + $carry = $sum < 0; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1 + $sum = $carry ? $sum + self::$maxDigit2 : $sum; + + $temp = self::$base === 26 ? intval($sum / 0x4000000) : ($sum >> 31); + + $x_value[$i] = (int) ($sum - self::$baseFull * $temp); + $x_value[$j] = $temp; + } + + if ($j == $y_size) { // ie. if $y_size is odd + $sum = $x_value[$i] - $y_value[$i] - $carry; + $carry = $sum < 0; + $x_value[$i] = $carry ? $sum + self::$baseFull : $sum; + ++$i; + } + + if ($carry) { + for (; !$x_value[$i]; ++$i) { + $x_value[$i] = self::$maxDigit; + } + --$x_value[$i]; + } + + return array( + self::VALUE => $this->_trim($x_value), + self::SIGN => $x_negative + ); + } + + /** + * Multiplies two BigIntegers + * + * Here's an example: + * + * multiply($b); + * + * echo $c->toString(); // outputs 200 + * ?> + * + * + * @param \phpseclib\Math\BigInteger $x + * @return \phpseclib\Math\BigInteger + * @access public + */ + function multiply($x) + { + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + $temp = new static(); + $temp->value = gmp_mul($this->value, $x->value); + + return $this->_normalize($temp); + case self::MODE_BCMATH: + $temp = new static(); + $temp->value = bcmul($this->value, $x->value, 0); + + return $this->_normalize($temp); + } + + $temp = $this->_multiply($this->value, $this->is_negative, $x->value, $x->is_negative); + + $product = new static(); + $product->value = $temp[self::VALUE]; + $product->is_negative = $temp[self::SIGN]; + + return $this->_normalize($product); + } + + /** + * Performs multiplication. + * + * @param array $x_value + * @param bool $x_negative + * @param array $y_value + * @param bool $y_negative + * @return array + * @access private + */ + function _multiply($x_value, $x_negative, $y_value, $y_negative) + { + //if ( $x_value == $y_value ) { + // return array( + // self::VALUE => $this->_square($x_value), + // self::SIGN => $x_sign != $y_value + // ); + //} + + $x_length = count($x_value); + $y_length = count($y_value); + + if (!$x_length || !$y_length) { // a 0 is being multiplied + return array( + self::VALUE => array(), + self::SIGN => false + ); + } + + return array( + self::VALUE => min($x_length, $y_length) < 2 * self::KARATSUBA_CUTOFF ? + $this->_trim($this->_regularMultiply($x_value, $y_value)) : + $this->_trim($this->_karatsuba($x_value, $y_value)), + self::SIGN => $x_negative != $y_negative + ); + } + + /** + * Performs long multiplication on two BigIntegers + * + * Modeled after 'multiply' in MutableBigInteger.java. + * + * @param array $x_value + * @param array $y_value + * @return array + * @access private + */ + function _regularMultiply($x_value, $y_value) + { + $x_length = count($x_value); + $y_length = count($y_value); + + if (!$x_length || !$y_length) { // a 0 is being multiplied + return array(); + } + + if ($x_length < $y_length) { + $temp = $x_value; + $x_value = $y_value; + $y_value = $temp; + + $x_length = count($x_value); + $y_length = count($y_value); + } + + $product_value = $this->_array_repeat(0, $x_length + $y_length); + + // the following for loop could be removed if the for loop following it + // (the one with nested for loops) initially set $i to 0, but + // doing so would also make the result in one set of unnecessary adds, + // since on the outermost loops first pass, $product->value[$k] is going + // to always be 0 + + $carry = 0; + + for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0 + $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0 + $carry = self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31); + $product_value[$j] = (int) ($temp - self::$baseFull * $carry); + } + + $product_value[$j] = $carry; + + // the above for loop is what the previous comment was talking about. the + // following for loop is the "one with nested for loops" + for ($i = 1; $i < $y_length; ++$i) { + $carry = 0; + + for ($j = 0, $k = $i; $j < $x_length; ++$j, ++$k) { + $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry; + $carry = self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31); + $product_value[$k] = (int) ($temp - self::$baseFull * $carry); + } + + $product_value[$k] = $carry; + } + + return $product_value; + } + + /** + * Performs Karatsuba multiplication on two BigIntegers + * + * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=120 MPM 5.2.3}. + * + * @param array $x_value + * @param array $y_value + * @return array + * @access private + */ + function _karatsuba($x_value, $y_value) + { + $m = min(count($x_value) >> 1, count($y_value) >> 1); + + if ($m < self::KARATSUBA_CUTOFF) { + return $this->_regularMultiply($x_value, $y_value); + } + + $x1 = array_slice($x_value, $m); + $x0 = array_slice($x_value, 0, $m); + $y1 = array_slice($y_value, $m); + $y0 = array_slice($y_value, 0, $m); + + $z2 = $this->_karatsuba($x1, $y1); + $z0 = $this->_karatsuba($x0, $y0); + + $z1 = $this->_add($x1, false, $x0, false); + $temp = $this->_add($y1, false, $y0, false); + $z1 = $this->_karatsuba($z1[self::VALUE], $temp[self::VALUE]); + $temp = $this->_add($z2, false, $z0, false); + $z1 = $this->_subtract($z1, false, $temp[self::VALUE], false); + + $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2); + $z1[self::VALUE] = array_merge(array_fill(0, $m, 0), $z1[self::VALUE]); + + $xy = $this->_add($z2, false, $z1[self::VALUE], $z1[self::SIGN]); + $xy = $this->_add($xy[self::VALUE], $xy[self::SIGN], $z0, false); + + return $xy[self::VALUE]; + } + + /** + * Performs squaring + * + * @param array $x + * @return array + * @access private + */ + function _square($x = false) + { + return count($x) < 2 * self::KARATSUBA_CUTOFF ? + $this->_trim($this->_baseSquare($x)) : + $this->_trim($this->_karatsubaSquare($x)); + } + + /** + * Performs traditional squaring on two BigIntegers + * + * Squaring can be done faster than multiplying a number by itself can be. See + * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=7 HAC 14.2.4} / + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=141 MPM 5.3} for more information. + * + * @param array $value + * @return array + * @access private + */ + function _baseSquare($value) + { + if (empty($value)) { + return array(); + } + $square_value = $this->_array_repeat(0, 2 * count($value)); + + for ($i = 0, $max_index = count($value) - 1; $i <= $max_index; ++$i) { + $i2 = $i << 1; + + $temp = $square_value[$i2] + $value[$i] * $value[$i]; + $carry = self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31); + $square_value[$i2] = (int) ($temp - self::$baseFull * $carry); + + // note how we start from $i+1 instead of 0 as we do in multiplication. + for ($j = $i + 1, $k = $i2 + 1; $j <= $max_index; ++$j, ++$k) { + $temp = $square_value[$k] + 2 * $value[$j] * $value[$i] + $carry; + $carry = self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31); + $square_value[$k] = (int) ($temp - self::$baseFull * $carry); + } + + // the following line can yield values larger 2**15. at this point, PHP should switch + // over to floats. + $square_value[$i + $max_index + 1] = $carry; + } + + return $square_value; + } + + /** + * Performs Karatsuba "squaring" on two BigIntegers + * + * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=151 MPM 5.3.4}. + * + * @param array $value + * @return array + * @access private + */ + function _karatsubaSquare($value) + { + $m = count($value) >> 1; + + if ($m < self::KARATSUBA_CUTOFF) { + return $this->_baseSquare($value); + } + + $x1 = array_slice($value, $m); + $x0 = array_slice($value, 0, $m); + + $z2 = $this->_karatsubaSquare($x1); + $z0 = $this->_karatsubaSquare($x0); + + $z1 = $this->_add($x1, false, $x0, false); + $z1 = $this->_karatsubaSquare($z1[self::VALUE]); + $temp = $this->_add($z2, false, $z0, false); + $z1 = $this->_subtract($z1, false, $temp[self::VALUE], false); + + $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2); + $z1[self::VALUE] = array_merge(array_fill(0, $m, 0), $z1[self::VALUE]); + + $xx = $this->_add($z2, false, $z1[self::VALUE], $z1[self::SIGN]); + $xx = $this->_add($xx[self::VALUE], $xx[self::SIGN], $z0, false); + + return $xx[self::VALUE]; + } + + /** + * Divides two BigIntegers. + * + * Returns an array whose first element contains the quotient and whose second element contains the + * "common residue". If the remainder would be positive, the "common residue" and the remainder are the + * same. If the remainder would be negative, the "common residue" is equal to the sum of the remainder + * and the divisor (basically, the "common residue" is the first positive modulo). + * + * Here's an example: + * + * divide($b); + * + * echo $quotient->toString(); // outputs 0 + * echo "\r\n"; + * echo $remainder->toString(); // outputs 10 + * ?> + * + * + * @param \phpseclib\Math\BigInteger $y + * @return array + * @access public + * @internal This function is based off of {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=9 HAC 14.20}. + */ + function divide($y) + { + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + $quotient = new static(); + $remainder = new static(); + + list($quotient->value, $remainder->value) = gmp_div_qr($this->value, $y->value); + + if (gmp_sign($remainder->value) < 0) { + $remainder->value = gmp_add($remainder->value, gmp_abs($y->value)); + } + + return array($this->_normalize($quotient), $this->_normalize($remainder)); + case self::MODE_BCMATH: + $quotient = new static(); + $remainder = new static(); + + $quotient->value = bcdiv($this->value, $y->value, 0); + $remainder->value = bcmod($this->value, $y->value); + + if ($remainder->value[0] == '-') { + $remainder->value = bcadd($remainder->value, $y->value[0] == '-' ? substr($y->value, 1) : $y->value, 0); + } + + return array($this->_normalize($quotient), $this->_normalize($remainder)); + } + + if (count($y->value) == 1) { + list($q, $r) = $this->_divide_digit($this->value, $y->value[0]); + $quotient = new static(); + $remainder = new static(); + $quotient->value = $q; + $remainder->value = array($r); + $quotient->is_negative = $this->is_negative != $y->is_negative; + return array($this->_normalize($quotient), $this->_normalize($remainder)); + } + + static $zero; + if (!isset($zero)) { + $zero = new static(); + } + + $x = $this->copy(); + $y = $y->copy(); + + $x_sign = $x->is_negative; + $y_sign = $y->is_negative; + + $x->is_negative = $y->is_negative = false; + + $diff = $x->compare($y); + + if (!$diff) { + $temp = new static(); + $temp->value = array(1); + $temp->is_negative = $x_sign != $y_sign; + return array($this->_normalize($temp), $this->_normalize(new static())); + } + + if ($diff < 0) { + // if $x is negative, "add" $y. + if ($x_sign) { + $x = $y->subtract($x); + } + return array($this->_normalize(new static()), $this->_normalize($x)); + } + + // normalize $x and $y as described in HAC 14.23 / 14.24 + $msb = $y->value[count($y->value) - 1]; + for ($shift = 0; !($msb & self::$msb); ++$shift) { + $msb <<= 1; + } + $x->_lshift($shift); + $y->_lshift($shift); + $y_value = &$y->value; + + $x_max = count($x->value) - 1; + $y_max = count($y->value) - 1; + + $quotient = new static(); + $quotient_value = &$quotient->value; + $quotient_value = $this->_array_repeat(0, $x_max - $y_max + 1); + + static $temp, $lhs, $rhs; + if (!isset($temp)) { + $temp = new static(); + $lhs = new static(); + $rhs = new static(); + } + $temp_value = &$temp->value; + $rhs_value = &$rhs->value; + + // $temp = $y << ($x_max - $y_max-1) in base 2**26 + $temp_value = array_merge($this->_array_repeat(0, $x_max - $y_max), $y_value); + + while ($x->compare($temp) >= 0) { + // calculate the "common residue" + ++$quotient_value[$x_max - $y_max]; + $x = $x->subtract($temp); + $x_max = count($x->value) - 1; + } + + for ($i = $x_max; $i >= $y_max + 1; --$i) { + $x_value = &$x->value; + $x_window = array( + isset($x_value[$i]) ? $x_value[$i] : 0, + isset($x_value[$i - 1]) ? $x_value[$i - 1] : 0, + isset($x_value[$i - 2]) ? $x_value[$i - 2] : 0 + ); + $y_window = array( + $y_value[$y_max], + ($y_max > 0) ? $y_value[$y_max - 1] : 0 + ); + + $q_index = $i - $y_max - 1; + if ($x_window[0] == $y_window[0]) { + $quotient_value[$q_index] = self::$maxDigit; + } else { + $quotient_value[$q_index] = $this->_safe_divide( + $x_window[0] * self::$baseFull + $x_window[1], + $y_window[0] + ); + } + + $temp_value = array($y_window[1], $y_window[0]); + + $lhs->value = array($quotient_value[$q_index]); + $lhs = $lhs->multiply($temp); + + $rhs_value = array($x_window[2], $x_window[1], $x_window[0]); + + while ($lhs->compare($rhs) > 0) { + --$quotient_value[$q_index]; + + $lhs->value = array($quotient_value[$q_index]); + $lhs = $lhs->multiply($temp); + } + + $adjust = $this->_array_repeat(0, $q_index); + $temp_value = array($quotient_value[$q_index]); + $temp = $temp->multiply($y); + $temp_value = &$temp->value; + if (count($temp_value)) { + $temp_value = array_merge($adjust, $temp_value); + } + + $x = $x->subtract($temp); + + if ($x->compare($zero) < 0) { + $temp_value = array_merge($adjust, $y_value); + $x = $x->add($temp); + + --$quotient_value[$q_index]; + } + + $x_max = count($x_value) - 1; + } + + // unnormalize the remainder + $x->_rshift($shift); + + $quotient->is_negative = $x_sign != $y_sign; + + // calculate the "common residue", if appropriate + if ($x_sign) { + $y->_rshift($shift); + $x = $y->subtract($x); + } + + return array($this->_normalize($quotient), $this->_normalize($x)); + } + + /** + * Divides a BigInteger by a regular integer + * + * abc / x = a00 / x + b0 / x + c / x + * + * @param array $dividend + * @param array $divisor + * @return array + * @access private + */ + function _divide_digit($dividend, $divisor) + { + $carry = 0; + $result = array(); + + for ($i = count($dividend) - 1; $i >= 0; --$i) { + $temp = self::$baseFull * $carry + $dividend[$i]; + $result[$i] = $this->_safe_divide($temp, $divisor); + $carry = (int) ($temp - $divisor * $result[$i]); + } + + return array($result, $carry); + } + + /** + * Performs modular exponentiation. + * + * Here's an example: + * + * modPow($b, $c); + * + * echo $c->toString(); // outputs 10 + * ?> + * + * + * @param \phpseclib\Math\BigInteger $e + * @param \phpseclib\Math\BigInteger $n + * @return \phpseclib\Math\BigInteger + * @access public + * @internal The most naive approach to modular exponentiation has very unreasonable requirements, and + * and although the approach involving repeated squaring does vastly better, it, too, is impractical + * for our purposes. The reason being that division - by far the most complicated and time-consuming + * of the basic operations (eg. +,-,*,/) - occurs multiple times within it. + * + * Modular reductions resolve this issue. Although an individual modular reduction takes more time + * then an individual division, when performed in succession (with the same modulo), they're a lot faster. + * + * The two most commonly used modular reductions are Barrett and Montgomery reduction. Montgomery reduction, + * although faster, only works when the gcd of the modulo and of the base being used is 1. In RSA, when the + * base is a power of two, the modulo - a product of two primes - is always going to have a gcd of 1 (because + * the product of two odd numbers is odd), but what about when RSA isn't used? + * + * In contrast, Barrett reduction has no such constraint. As such, some bigint implementations perform a + * Barrett reduction after every operation in the modpow function. Others perform Barrett reductions when the + * modulo is even and Montgomery reductions when the modulo is odd. BigInteger.java's modPow method, however, + * uses a trick involving the Chinese Remainder Theorem to factor the even modulo into two numbers - one odd and + * the other, a power of two - and recombine them, later. This is the method that this modPow function uses. + * {@link http://islab.oregonstate.edu/papers/j34monex.pdf Montgomery Reduction with Even Modulus} elaborates. + */ + function modPow($e, $n) + { + $n = $this->bitmask !== false && $this->bitmask->compare($n) < 0 ? $this->bitmask : $n->abs(); + + if ($e->compare(new static()) < 0) { + $e = $e->abs(); + + $temp = $this->modInverse($n); + if ($temp === false) { + return false; + } + + return $this->_normalize($temp->modPow($e, $n)); + } + + if (MATH_BIGINTEGER_MODE == self::MODE_GMP) { + $temp = new static(); + $temp->value = gmp_powm($this->value, $e->value, $n->value); + + return $this->_normalize($temp); + } + + if ($this->compare(new static()) < 0 || $this->compare($n) > 0) { + list(, $temp) = $this->divide($n); + return $temp->modPow($e, $n); + } + + if (defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) { + $components = array( + 'modulus' => $n->toBytes(true), + 'publicExponent' => $e->toBytes(true) + ); + + $components = array( + 'modulus' => pack('Ca*a*', 2, $this->_encodeASN1Length(strlen($components['modulus'])), $components['modulus']), + 'publicExponent' => pack('Ca*a*', 2, $this->_encodeASN1Length(strlen($components['publicExponent'])), $components['publicExponent']) + ); + + $RSAPublicKey = pack( + 'Ca*a*a*', + 48, + $this->_encodeASN1Length(strlen($components['modulus']) + strlen($components['publicExponent'])), + $components['modulus'], + $components['publicExponent'] + ); + + $rsaOID = pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA + $RSAPublicKey = chr(0) . $RSAPublicKey; + $RSAPublicKey = chr(3) . $this->_encodeASN1Length(strlen($RSAPublicKey)) . $RSAPublicKey; + + $encapsulated = pack( + 'Ca*a*', + 48, + $this->_encodeASN1Length(strlen($rsaOID . $RSAPublicKey)), + $rsaOID . $RSAPublicKey + ); + + $RSAPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" . + chunk_split(base64_encode($encapsulated)) . + '-----END PUBLIC KEY-----'; + + $plaintext = str_pad($this->toBytes(), strlen($n->toBytes(true)) - 1, "\0", STR_PAD_LEFT); + + if (openssl_public_encrypt($plaintext, $result, $RSAPublicKey, OPENSSL_NO_PADDING)) { + return new static($result, 256); + } + } + + if (MATH_BIGINTEGER_MODE == self::MODE_BCMATH) { + $temp = new static(); + $temp->value = bcpowmod($this->value, $e->value, $n->value, 0); + + return $this->_normalize($temp); + } + + if (empty($e->value)) { + $temp = new static(); + $temp->value = array(1); + return $this->_normalize($temp); + } + + if ($e->value == array(1)) { + list(, $temp) = $this->divide($n); + return $this->_normalize($temp); + } + + if ($e->value == array(2)) { + $temp = new static(); + $temp->value = $this->_square($this->value); + list(, $temp) = $temp->divide($n); + return $this->_normalize($temp); + } + + return $this->_normalize($this->_slidingWindow($e, $n, self::BARRETT)); + + // the following code, although not callable, can be run independently of the above code + // although the above code performed better in my benchmarks the following could might + // perform better under different circumstances. in lieu of deleting it it's just been + // made uncallable + + // is the modulo odd? + if ($n->value[0] & 1) { + return $this->_normalize($this->_slidingWindow($e, $n, self::MONTGOMERY)); + } + // if it's not, it's even + + // find the lowest set bit (eg. the max pow of 2 that divides $n) + for ($i = 0; $i < count($n->value); ++$i) { + if ($n->value[$i]) { + $temp = decbin($n->value[$i]); + $j = strlen($temp) - strrpos($temp, '1') - 1; + $j+= 26 * $i; + break; + } + } + // at this point, 2^$j * $n/(2^$j) == $n + + $mod1 = $n->copy(); + $mod1->_rshift($j); + $mod2 = new static(); + $mod2->value = array(1); + $mod2->_lshift($j); + + $part1 = ($mod1->value != array(1)) ? $this->_slidingWindow($e, $mod1, self::MONTGOMERY) : new static(); + $part2 = $this->_slidingWindow($e, $mod2, self::POWEROF2); + + $y1 = $mod2->modInverse($mod1); + $y2 = $mod1->modInverse($mod2); + + $result = $part1->multiply($mod2); + $result = $result->multiply($y1); + + $temp = $part2->multiply($mod1); + $temp = $temp->multiply($y2); + + $result = $result->add($temp); + list(, $result) = $result->divide($n); + + return $this->_normalize($result); + } + + /** + * Performs modular exponentiation. + * + * Alias for modPow(). + * + * @param \phpseclib\Math\BigInteger $e + * @param \phpseclib\Math\BigInteger $n + * @return \phpseclib\Math\BigInteger + * @access public + */ + function powMod($e, $n) + { + return $this->modPow($e, $n); + } + + /** + * Sliding Window k-ary Modular Exponentiation + * + * Based on {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=27 HAC 14.85} / + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=210 MPM 7.7}. In a departure from those algorithims, + * however, this function performs a modular reduction after every multiplication and squaring operation. + * As such, this function has the same preconditions that the reductions being used do. + * + * @param \phpseclib\Math\BigInteger $e + * @param \phpseclib\Math\BigInteger $n + * @param int $mode + * @return \phpseclib\Math\BigInteger + * @access private + */ + function _slidingWindow($e, $n, $mode) + { + static $window_ranges = array(7, 25, 81, 241, 673, 1793); // from BigInteger.java's oddModPow function + //static $window_ranges = array(0, 7, 36, 140, 450, 1303, 3529); // from MPM 7.3.1 + + $e_value = $e->value; + $e_length = count($e_value) - 1; + $e_bits = decbin($e_value[$e_length]); + for ($i = $e_length - 1; $i >= 0; --$i) { + $e_bits.= str_pad(decbin($e_value[$i]), self::$base, '0', STR_PAD_LEFT); + } + + $e_length = strlen($e_bits); + + // calculate the appropriate window size. + // $window_size == 3 if $window_ranges is between 25 and 81, for example. + for ($i = 0, $window_size = 1; $i < count($window_ranges) && $e_length > $window_ranges[$i]; ++$window_size, ++$i) { + } + + $n_value = $n->value; + + // precompute $this^0 through $this^$window_size + $powers = array(); + $powers[1] = $this->_prepareReduce($this->value, $n_value, $mode); + $powers[2] = $this->_squareReduce($powers[1], $n_value, $mode); + + // we do every other number since substr($e_bits, $i, $j+1) (see below) is supposed to end + // in a 1. ie. it's supposed to be odd. + $temp = 1 << ($window_size - 1); + for ($i = 1; $i < $temp; ++$i) { + $i2 = $i << 1; + $powers[$i2 + 1] = $this->_multiplyReduce($powers[$i2 - 1], $powers[2], $n_value, $mode); + } + + $result = array(1); + $result = $this->_prepareReduce($result, $n_value, $mode); + + for ($i = 0; $i < $e_length;) { + if (!$e_bits[$i]) { + $result = $this->_squareReduce($result, $n_value, $mode); + ++$i; + } else { + for ($j = $window_size - 1; $j > 0; --$j) { + if (!empty($e_bits[$i + $j])) { + break; + } + } + + // eg. the length of substr($e_bits, $i, $j + 1) + for ($k = 0; $k <= $j; ++$k) { + $result = $this->_squareReduce($result, $n_value, $mode); + } + + $result = $this->_multiplyReduce($result, $powers[bindec(substr($e_bits, $i, $j + 1))], $n_value, $mode); + + $i += $j + 1; + } + } + + $temp = new static(); + $temp->value = $this->_reduce($result, $n_value, $mode); + + return $temp; + } + + /** + * Modular reduction + * + * For most $modes this will return the remainder. + * + * @see self::_slidingWindow() + * @access private + * @param array $x + * @param array $n + * @param int $mode + * @return array + */ + function _reduce($x, $n, $mode) + { + switch ($mode) { + case self::MONTGOMERY: + return $this->_montgomery($x, $n); + case self::BARRETT: + return $this->_barrett($x, $n); + case self::POWEROF2: + $lhs = new static(); + $lhs->value = $x; + $rhs = new static(); + $rhs->value = $n; + return $x->_mod2($n); + case self::CLASSIC: + $lhs = new static(); + $lhs->value = $x; + $rhs = new static(); + $rhs->value = $n; + list(, $temp) = $lhs->divide($rhs); + return $temp->value; + case self::NONE: + return $x; + default: + // an invalid $mode was provided + } + } + + /** + * Modular reduction preperation + * + * @see self::_slidingWindow() + * @access private + * @param array $x + * @param array $n + * @param int $mode + * @return array + */ + function _prepareReduce($x, $n, $mode) + { + if ($mode == self::MONTGOMERY) { + return $this->_prepMontgomery($x, $n); + } + return $this->_reduce($x, $n, $mode); + } + + /** + * Modular multiply + * + * @see self::_slidingWindow() + * @access private + * @param array $x + * @param array $y + * @param array $n + * @param int $mode + * @return array + */ + function _multiplyReduce($x, $y, $n, $mode) + { + if ($mode == self::MONTGOMERY) { + return $this->_montgomeryMultiply($x, $y, $n); + } + $temp = $this->_multiply($x, false, $y, false); + return $this->_reduce($temp[self::VALUE], $n, $mode); + } + + /** + * Modular square + * + * @see self::_slidingWindow() + * @access private + * @param array $x + * @param array $n + * @param int $mode + * @return array + */ + function _squareReduce($x, $n, $mode) + { + if ($mode == self::MONTGOMERY) { + return $this->_montgomeryMultiply($x, $x, $n); + } + return $this->_reduce($this->_square($x), $n, $mode); + } + + /** + * Modulos for Powers of Two + * + * Calculates $x%$n, where $n = 2**$e, for some $e. Since this is basically the same as doing $x & ($n-1), + * we'll just use this function as a wrapper for doing that. + * + * @see self::_slidingWindow() + * @access private + * @param \phpseclib\Math\BigInteger $n + * @return \phpseclib\Math\BigInteger + */ + function _mod2($n) + { + $temp = new static(); + $temp->value = array(1); + return $this->bitwise_and($n->subtract($temp)); + } + + /** + * Barrett Modular Reduction + * + * See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=14 HAC 14.3.3} / + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=165 MPM 6.2.5} for more information. Modified slightly, + * so as not to require negative numbers (initially, this script didn't support negative numbers). + * + * Employs "folding", as described at + * {@link http://www.cosic.esat.kuleuven.be/publications/thesis-149.pdf#page=66 thesis-149.pdf#page=66}. To quote from + * it, "the idea [behind folding] is to find a value x' such that x (mod m) = x' (mod m), with x' being smaller than x." + * + * Unfortunately, the "Barrett Reduction with Folding" algorithm described in thesis-149.pdf is not, as written, all that + * usable on account of (1) its not using reasonable radix points as discussed in + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=162 MPM 6.2.2} and (2) the fact that, even with reasonable + * radix points, it only works when there are an even number of digits in the denominator. The reason for (2) is that + * (x >> 1) + (x >> 1) != x / 2 + x / 2. If x is even, they're the same, but if x is odd, they're not. See the in-line + * comments for details. + * + * @see self::_slidingWindow() + * @access private + * @param array $n + * @param array $m + * @return array + */ + function _barrett($n, $m) + { + static $cache = array( + self::VARIABLE => array(), + self::DATA => array() + ); + + $m_length = count($m); + + // if ($this->_compare($n, $this->_square($m)) >= 0) { + if (count($n) > 2 * $m_length) { + $lhs = new static(); + $rhs = new static(); + $lhs->value = $n; + $rhs->value = $m; + list(, $temp) = $lhs->divide($rhs); + return $temp->value; + } + + // if (m.length >> 1) + 2 <= m.length then m is too small and n can't be reduced + if ($m_length < 5) { + return $this->_regularBarrett($n, $m); + } + + // n = 2 * m.length + + if (($key = array_search($m, $cache[self::VARIABLE])) === false) { + $key = count($cache[self::VARIABLE]); + $cache[self::VARIABLE][] = $m; + + $lhs = new static(); + $lhs_value = &$lhs->value; + $lhs_value = $this->_array_repeat(0, $m_length + ($m_length >> 1)); + $lhs_value[] = 1; + $rhs = new static(); + $rhs->value = $m; + + list($u, $m1) = $lhs->divide($rhs); + $u = $u->value; + $m1 = $m1->value; + + $cache[self::DATA][] = array( + 'u' => $u, // m.length >> 1 (technically (m.length >> 1) + 1) + 'm1'=> $m1 // m.length + ); + } else { + extract($cache[self::DATA][$key]); + } + + $cutoff = $m_length + ($m_length >> 1); + $lsd = array_slice($n, 0, $cutoff); // m.length + (m.length >> 1) + $msd = array_slice($n, $cutoff); // m.length >> 1 + $lsd = $this->_trim($lsd); + $temp = $this->_multiply($msd, false, $m1, false); + $n = $this->_add($lsd, false, $temp[self::VALUE], false); // m.length + (m.length >> 1) + 1 + + if ($m_length & 1) { + return $this->_regularBarrett($n[self::VALUE], $m); + } + + // (m.length + (m.length >> 1) + 1) - (m.length - 1) == (m.length >> 1) + 2 + $temp = array_slice($n[self::VALUE], $m_length - 1); + // if even: ((m.length >> 1) + 2) + (m.length >> 1) == m.length + 2 + // if odd: ((m.length >> 1) + 2) + (m.length >> 1) == (m.length - 1) + 2 == m.length + 1 + $temp = $this->_multiply($temp, false, $u, false); + // if even: (m.length + 2) - ((m.length >> 1) + 1) = m.length - (m.length >> 1) + 1 + // if odd: (m.length + 1) - ((m.length >> 1) + 1) = m.length - (m.length >> 1) + $temp = array_slice($temp[self::VALUE], ($m_length >> 1) + 1); + // if even: (m.length - (m.length >> 1) + 1) + m.length = 2 * m.length - (m.length >> 1) + 1 + // if odd: (m.length - (m.length >> 1)) + m.length = 2 * m.length - (m.length >> 1) + $temp = $this->_multiply($temp, false, $m, false); + + // at this point, if m had an odd number of digits, we'd be subtracting a 2 * m.length - (m.length >> 1) digit + // number from a m.length + (m.length >> 1) + 1 digit number. ie. there'd be an extra digit and the while loop + // following this comment would loop a lot (hence our calling _regularBarrett() in that situation). + + $result = $this->_subtract($n[self::VALUE], false, $temp[self::VALUE], false); + + while ($this->_compare($result[self::VALUE], $result[self::SIGN], $m, false) >= 0) { + $result = $this->_subtract($result[self::VALUE], $result[self::SIGN], $m, false); + } + + return $result[self::VALUE]; + } + + /** + * (Regular) Barrett Modular Reduction + * + * For numbers with more than four digits BigInteger::_barrett() is faster. The difference between that and this + * is that this function does not fold the denominator into a smaller form. + * + * @see self::_slidingWindow() + * @access private + * @param array $x + * @param array $n + * @return array + */ + function _regularBarrett($x, $n) + { + static $cache = array( + self::VARIABLE => array(), + self::DATA => array() + ); + + $n_length = count($n); + + if (count($x) > 2 * $n_length) { + $lhs = new static(); + $rhs = new static(); + $lhs->value = $x; + $rhs->value = $n; + list(, $temp) = $lhs->divide($rhs); + return $temp->value; + } + + if (($key = array_search($n, $cache[self::VARIABLE])) === false) { + $key = count($cache[self::VARIABLE]); + $cache[self::VARIABLE][] = $n; + $lhs = new static(); + $lhs_value = &$lhs->value; + $lhs_value = $this->_array_repeat(0, 2 * $n_length); + $lhs_value[] = 1; + $rhs = new static(); + $rhs->value = $n; + list($temp, ) = $lhs->divide($rhs); // m.length + $cache[self::DATA][] = $temp->value; + } + + // 2 * m.length - (m.length - 1) = m.length + 1 + $temp = array_slice($x, $n_length - 1); + // (m.length + 1) + m.length = 2 * m.length + 1 + $temp = $this->_multiply($temp, false, $cache[self::DATA][$key], false); + // (2 * m.length + 1) - (m.length - 1) = m.length + 2 + $temp = array_slice($temp[self::VALUE], $n_length + 1); + + // m.length + 1 + $result = array_slice($x, 0, $n_length + 1); + // m.length + 1 + $temp = $this->_multiplyLower($temp, false, $n, false, $n_length + 1); + // $temp == array_slice($temp->_multiply($temp, false, $n, false)->value, 0, $n_length + 1) + + if ($this->_compare($result, false, $temp[self::VALUE], $temp[self::SIGN]) < 0) { + $corrector_value = $this->_array_repeat(0, $n_length + 1); + $corrector_value[count($corrector_value)] = 1; + $result = $this->_add($result, false, $corrector_value, false); + $result = $result[self::VALUE]; + } + + // at this point, we're subtracting a number with m.length + 1 digits from another number with m.length + 1 digits + $result = $this->_subtract($result, false, $temp[self::VALUE], $temp[self::SIGN]); + while ($this->_compare($result[self::VALUE], $result[self::SIGN], $n, false) > 0) { + $result = $this->_subtract($result[self::VALUE], $result[self::SIGN], $n, false); + } + + return $result[self::VALUE]; + } + + /** + * Performs long multiplication up to $stop digits + * + * If you're going to be doing array_slice($product->value, 0, $stop), some cycles can be saved. + * + * @see self::_regularBarrett() + * @param array $x_value + * @param bool $x_negative + * @param array $y_value + * @param bool $y_negative + * @param int $stop + * @return array + * @access private + */ + function _multiplyLower($x_value, $x_negative, $y_value, $y_negative, $stop) + { + $x_length = count($x_value); + $y_length = count($y_value); + + if (!$x_length || !$y_length) { // a 0 is being multiplied + return array( + self::VALUE => array(), + self::SIGN => false + ); + } + + if ($x_length < $y_length) { + $temp = $x_value; + $x_value = $y_value; + $y_value = $temp; + + $x_length = count($x_value); + $y_length = count($y_value); + } + + $product_value = $this->_array_repeat(0, $x_length + $y_length); + + // the following for loop could be removed if the for loop following it + // (the one with nested for loops) initially set $i to 0, but + // doing so would also make the result in one set of unnecessary adds, + // since on the outermost loops first pass, $product->value[$k] is going + // to always be 0 + + $carry = 0; + + for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0, $k = $i + $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0 + $carry = self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31); + $product_value[$j] = (int) ($temp - self::$baseFull * $carry); + } + + if ($j < $stop) { + $product_value[$j] = $carry; + } + + // the above for loop is what the previous comment was talking about. the + // following for loop is the "one with nested for loops" + + for ($i = 1; $i < $y_length; ++$i) { + $carry = 0; + + for ($j = 0, $k = $i; $j < $x_length && $k < $stop; ++$j, ++$k) { + $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry; + $carry = self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31); + $product_value[$k] = (int) ($temp - self::$baseFull * $carry); + } + + if ($k < $stop) { + $product_value[$k] = $carry; + } + } + + return array( + self::VALUE => $this->_trim($product_value), + self::SIGN => $x_negative != $y_negative + ); + } + + /** + * Montgomery Modular Reduction + * + * ($x->_prepMontgomery($n))->_montgomery($n) yields $x % $n. + * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=170 MPM 6.3} provides insights on how this can be + * improved upon (basically, by using the comba method). gcd($n, 2) must be equal to one for this function + * to work correctly. + * + * @see self::_prepMontgomery() + * @see self::_slidingWindow() + * @access private + * @param array $x + * @param array $n + * @return array + */ + function _montgomery($x, $n) + { + static $cache = array( + self::VARIABLE => array(), + self::DATA => array() + ); + + if (($key = array_search($n, $cache[self::VARIABLE])) === false) { + $key = count($cache[self::VARIABLE]); + $cache[self::VARIABLE][] = $x; + $cache[self::DATA][] = $this->_modInverse67108864($n); + } + + $k = count($n); + + $result = array(self::VALUE => $x); + + for ($i = 0; $i < $k; ++$i) { + $temp = $result[self::VALUE][$i] * $cache[self::DATA][$key]; + $temp = $temp - self::$baseFull * (self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31)); + $temp = $this->_regularMultiply(array($temp), $n); + $temp = array_merge($this->_array_repeat(0, $i), $temp); + $result = $this->_add($result[self::VALUE], false, $temp, false); + } + + $result[self::VALUE] = array_slice($result[self::VALUE], $k); + + if ($this->_compare($result, false, $n, false) >= 0) { + $result = $this->_subtract($result[self::VALUE], false, $n, false); + } + + return $result[self::VALUE]; + } + + /** + * Montgomery Multiply + * + * Interleaves the montgomery reduction and long multiplication algorithms together as described in + * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=13 HAC 14.36} + * + * @see self::_prepMontgomery() + * @see self::_montgomery() + * @access private + * @param array $x + * @param array $y + * @param array $m + * @return array + */ + function _montgomeryMultiply($x, $y, $m) + { + $temp = $this->_multiply($x, false, $y, false); + return $this->_montgomery($temp[self::VALUE], $m); + + // the following code, although not callable, can be run independently of the above code + // although the above code performed better in my benchmarks the following could might + // perform better under different circumstances. in lieu of deleting it it's just been + // made uncallable + + static $cache = array( + self::VARIABLE => array(), + self::DATA => array() + ); + + if (($key = array_search($m, $cache[self::VARIABLE])) === false) { + $key = count($cache[self::VARIABLE]); + $cache[self::VARIABLE][] = $m; + $cache[self::DATA][] = $this->_modInverse67108864($m); + } + + $n = max(count($x), count($y), count($m)); + $x = array_pad($x, $n, 0); + $y = array_pad($y, $n, 0); + $m = array_pad($m, $n, 0); + $a = array(self::VALUE => $this->_array_repeat(0, $n + 1)); + for ($i = 0; $i < $n; ++$i) { + $temp = $a[self::VALUE][0] + $x[$i] * $y[0]; + $temp = $temp - self::$baseFull * (self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31)); + $temp = $temp * $cache[self::DATA][$key]; + $temp = $temp - self::$baseFull * (self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31)); + $temp = $this->_add($this->_regularMultiply(array($x[$i]), $y), false, $this->_regularMultiply(array($temp), $m), false); + $a = $this->_add($a[self::VALUE], false, $temp[self::VALUE], false); + $a[self::VALUE] = array_slice($a[self::VALUE], 1); + } + if ($this->_compare($a[self::VALUE], false, $m, false) >= 0) { + $a = $this->_subtract($a[self::VALUE], false, $m, false); + } + return $a[self::VALUE]; + } + + /** + * Prepare a number for use in Montgomery Modular Reductions + * + * @see self::_montgomery() + * @see self::_slidingWindow() + * @access private + * @param array $x + * @param array $n + * @return array + */ + function _prepMontgomery($x, $n) + { + $lhs = new static(); + $lhs->value = array_merge($this->_array_repeat(0, count($n)), $x); + $rhs = new static(); + $rhs->value = $n; + + list(, $temp) = $lhs->divide($rhs); + return $temp->value; + } + + /** + * Modular Inverse of a number mod 2**26 (eg. 67108864) + * + * Based off of the bnpInvDigit function implemented and justified in the following URL: + * + * {@link http://www-cs-students.stanford.edu/~tjw/jsbn/jsbn.js} + * + * The following URL provides more info: + * + * {@link http://groups.google.com/group/sci.crypt/msg/7a137205c1be7d85} + * + * As for why we do all the bitmasking... strange things can happen when converting from floats to ints. For + * instance, on some computers, var_dump((int) -4294967297) yields int(-1) and on others, it yields + * int(-2147483648). To avoid problems stemming from this, we use bitmasks to guarantee that ints aren't + * auto-converted to floats. The outermost bitmask is present because without it, there's no guarantee that + * the "residue" returned would be the so-called "common residue". We use fmod, in the last step, because the + * maximum possible $x is 26 bits and the maximum $result is 16 bits. Thus, we have to be able to handle up to + * 40 bits, which only 64-bit floating points will support. + * + * Thanks to Pedro Gimeno Fortea for input! + * + * @see self::_montgomery() + * @access private + * @param array $x + * @return int + */ + function _modInverse67108864($x) // 2**26 == 67,108,864 + { + $x = -$x[0]; + $result = $x & 0x3; // x**-1 mod 2**2 + $result = ($result * (2 - $x * $result)) & 0xF; // x**-1 mod 2**4 + $result = ($result * (2 - ($x & 0xFF) * $result)) & 0xFF; // x**-1 mod 2**8 + $result = ($result * ((2 - ($x & 0xFFFF) * $result) & 0xFFFF)) & 0xFFFF; // x**-1 mod 2**16 + $result = fmod($result * (2 - fmod($x * $result, self::$baseFull)), self::$baseFull); // x**-1 mod 2**26 + return $result & self::$maxDigit; + } + + /** + * Calculates modular inverses. + * + * Say you have (30 mod 17 * x mod 17) mod 17 == 1. x can be found using modular inverses. + * + * Here's an example: + * + * modInverse($b); + * echo $c->toString(); // outputs 4 + * + * echo "\r\n"; + * + * $d = $a->multiply($c); + * list(, $d) = $d->divide($b); + * echo $d; // outputs 1 (as per the definition of modular inverse) + * ?> + * + * + * @param \phpseclib\Math\BigInteger $n + * @return \phpseclib\Math\BigInteger|false + * @access public + * @internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=21 HAC 14.64} for more information. + */ + function modInverse($n) + { + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + $temp = new static(); + $temp->value = gmp_invert($this->value, $n->value); + + return ($temp->value === false) ? false : $this->_normalize($temp); + } + + static $zero, $one; + if (!isset($zero)) { + $zero = new static(); + $one = new static(1); + } + + // $x mod -$n == $x mod $n. + $n = $n->abs(); + + if ($this->compare($zero) < 0) { + $temp = $this->abs(); + $temp = $temp->modInverse($n); + return $this->_normalize($n->subtract($temp)); + } + + extract($this->extendedGCD($n)); + + if (!$gcd->equals($one)) { + return false; + } + + $x = $x->compare($zero) < 0 ? $x->add($n) : $x; + + return $this->compare($zero) < 0 ? $this->_normalize($n->subtract($x)) : $this->_normalize($x); + } + + /** + * Calculates the greatest common divisor and Bezout's identity. + * + * Say you have 693 and 609. The GCD is 21. Bezout's identity states that there exist integers x and y such that + * 693*x + 609*y == 21. In point of fact, there are actually an infinite number of x and y combinations and which + * combination is returned is dependent upon which mode is in use. See + * {@link http://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity Bezout's identity - Wikipedia} for more information. + * + * Here's an example: + * + * extendedGCD($b)); + * + * echo $gcd->toString() . "\r\n"; // outputs 21 + * echo $a->toString() * $x->toString() + $b->toString() * $y->toString(); // outputs 21 + * ?> + * + * + * @param \phpseclib\Math\BigInteger $n + * @return \phpseclib\Math\BigInteger + * @access public + * @internal Calculates the GCD using the binary xGCD algorithim described in + * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=19 HAC 14.61}. As the text above 14.61 notes, + * the more traditional algorithim requires "relatively costly multiple-precision divisions". + */ + function extendedGCD($n) + { + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + extract(gmp_gcdext($this->value, $n->value)); + + return array( + 'gcd' => $this->_normalize(new static($g)), + 'x' => $this->_normalize(new static($s)), + 'y' => $this->_normalize(new static($t)) + ); + case self::MODE_BCMATH: + // it might be faster to use the binary xGCD algorithim here, as well, but (1) that algorithim works + // best when the base is a power of 2 and (2) i don't think it'd make much difference, anyway. as is, + // the basic extended euclidean algorithim is what we're using. + + $u = $this->value; + $v = $n->value; + + $a = '1'; + $b = '0'; + $c = '0'; + $d = '1'; + + while (bccomp($v, '0', 0) != 0) { + $q = bcdiv($u, $v, 0); + + $temp = $u; + $u = $v; + $v = bcsub($temp, bcmul($v, $q, 0), 0); + + $temp = $a; + $a = $c; + $c = bcsub($temp, bcmul($a, $q, 0), 0); + + $temp = $b; + $b = $d; + $d = bcsub($temp, bcmul($b, $q, 0), 0); + } + + return array( + 'gcd' => $this->_normalize(new static($u)), + 'x' => $this->_normalize(new static($a)), + 'y' => $this->_normalize(new static($b)) + ); + } + + $y = $n->copy(); + $x = $this->copy(); + $g = new static(); + $g->value = array(1); + + while (!(($x->value[0] & 1)|| ($y->value[0] & 1))) { + $x->_rshift(1); + $y->_rshift(1); + $g->_lshift(1); + } + + $u = $x->copy(); + $v = $y->copy(); + + $a = new static(); + $b = new static(); + $c = new static(); + $d = new static(); + + $a->value = $d->value = $g->value = array(1); + $b->value = $c->value = array(); + + while (!empty($u->value)) { + while (!($u->value[0] & 1)) { + $u->_rshift(1); + if ((!empty($a->value) && ($a->value[0] & 1)) || (!empty($b->value) && ($b->value[0] & 1))) { + $a = $a->add($y); + $b = $b->subtract($x); + } + $a->_rshift(1); + $b->_rshift(1); + } + + while (!($v->value[0] & 1)) { + $v->_rshift(1); + if ((!empty($d->value) && ($d->value[0] & 1)) || (!empty($c->value) && ($c->value[0] & 1))) { + $c = $c->add($y); + $d = $d->subtract($x); + } + $c->_rshift(1); + $d->_rshift(1); + } + + if ($u->compare($v) >= 0) { + $u = $u->subtract($v); + $a = $a->subtract($c); + $b = $b->subtract($d); + } else { + $v = $v->subtract($u); + $c = $c->subtract($a); + $d = $d->subtract($b); + } + } + + return array( + 'gcd' => $this->_normalize($g->multiply($v)), + 'x' => $this->_normalize($c), + 'y' => $this->_normalize($d) + ); + } + + /** + * Calculates the greatest common divisor + * + * Say you have 693 and 609. The GCD is 21. + * + * Here's an example: + * + * extendedGCD($b); + * + * echo $gcd->toString() . "\r\n"; // outputs 21 + * ?> + * + * + * @param \phpseclib\Math\BigInteger $n + * @return \phpseclib\Math\BigInteger + * @access public + */ + function gcd($n) + { + extract($this->extendedGCD($n)); + return $gcd; + } + + /** + * Absolute value. + * + * @return \phpseclib\Math\BigInteger + * @access public + */ + function abs() + { + $temp = new static(); + + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + $temp->value = gmp_abs($this->value); + break; + case self::MODE_BCMATH: + $temp->value = (bccomp($this->value, '0', 0) < 0) ? substr($this->value, 1) : $this->value; + break; + default: + $temp->value = $this->value; + } + + return $temp; + } + + /** + * Compares two numbers. + * + * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite. The reason for this is + * demonstrated thusly: + * + * $x > $y: $x->compare($y) > 0 + * $x < $y: $x->compare($y) < 0 + * $x == $y: $x->compare($y) == 0 + * + * Note how the same comparison operator is used. If you want to test for equality, use $x->equals($y). + * + * @param \phpseclib\Math\BigInteger $y + * @return int that is < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal. + * @access public + * @see self::equals() + * @internal Could return $this->subtract($x), but that's not as fast as what we do do. + */ + function compare($y) + { + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + $r = gmp_cmp($this->value, $y->value); + if ($r < -1) { + $r = -1; + } + if ($r > 1) { + $r = 1; + } + return $r; + case self::MODE_BCMATH: + return bccomp($this->value, $y->value, 0); + } + + return $this->_compare($this->value, $this->is_negative, $y->value, $y->is_negative); + } + + /** + * Compares two numbers. + * + * @param array $x_value + * @param bool $x_negative + * @param array $y_value + * @param bool $y_negative + * @return int + * @see self::compare() + * @access private + */ + function _compare($x_value, $x_negative, $y_value, $y_negative) + { + if ($x_negative != $y_negative) { + return (!$x_negative && $y_negative) ? 1 : -1; + } + + $result = $x_negative ? -1 : 1; + + if (count($x_value) != count($y_value)) { + return (count($x_value) > count($y_value)) ? $result : -$result; + } + $size = max(count($x_value), count($y_value)); + + $x_value = array_pad($x_value, $size, 0); + $y_value = array_pad($y_value, $size, 0); + + for ($i = count($x_value) - 1; $i >= 0; --$i) { + if ($x_value[$i] != $y_value[$i]) { + return ($x_value[$i] > $y_value[$i]) ? $result : -$result; + } + } + + return 0; + } + + /** + * Tests the equality of two numbers. + * + * If you need to see if one number is greater than or less than another number, use BigInteger::compare() + * + * @param \phpseclib\Math\BigInteger $x + * @return bool + * @access public + * @see self::compare() + */ + function equals($x) + { + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + return gmp_cmp($this->value, $x->value) == 0; + default: + return $this->value === $x->value && $this->is_negative == $x->is_negative; + } + } + + /** + * Set Precision + * + * Some bitwise operations give different results depending on the precision being used. Examples include left + * shift, not, and rotates. + * + * @param int $bits + * @access public + */ + function setPrecision($bits) + { + $this->precision = $bits; + if (MATH_BIGINTEGER_MODE != self::MODE_BCMATH) { + $this->bitmask = new static(chr((1 << ($bits & 0x7)) - 1) . str_repeat(chr(0xFF), $bits >> 3), 256); + } else { + $this->bitmask = new static(bcpow('2', $bits, 0)); + } + + $temp = $this->_normalize($this); + $this->value = $temp->value; + } + + /** + * Logical And + * + * @param \phpseclib\Math\BigInteger $x + * @access public + * @internal Implemented per a request by Lluis Pamies i Juarez + * @return \phpseclib\Math\BigInteger + */ + function bitwise_and($x) + { + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + $temp = new static(); + $temp->value = gmp_and($this->value, $x->value); + + return $this->_normalize($temp); + case self::MODE_BCMATH: + $left = $this->toBytes(); + $right = $x->toBytes(); + + $length = max(strlen($left), strlen($right)); + + $left = str_pad($left, $length, chr(0), STR_PAD_LEFT); + $right = str_pad($right, $length, chr(0), STR_PAD_LEFT); + + return $this->_normalize(new static($left & $right, 256)); + } + + $result = $this->copy(); + + $length = min(count($x->value), count($this->value)); + + $result->value = array_slice($result->value, 0, $length); + + for ($i = 0; $i < $length; ++$i) { + $result->value[$i]&= $x->value[$i]; + } + + return $this->_normalize($result); + } + + /** + * Logical Or + * + * @param \phpseclib\Math\BigInteger $x + * @access public + * @internal Implemented per a request by Lluis Pamies i Juarez + * @return \phpseclib\Math\BigInteger + */ + function bitwise_or($x) + { + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + $temp = new static(); + $temp->value = gmp_or($this->value, $x->value); + + return $this->_normalize($temp); + case self::MODE_BCMATH: + $left = $this->toBytes(); + $right = $x->toBytes(); + + $length = max(strlen($left), strlen($right)); + + $left = str_pad($left, $length, chr(0), STR_PAD_LEFT); + $right = str_pad($right, $length, chr(0), STR_PAD_LEFT); + + return $this->_normalize(new static($left | $right, 256)); + } + + $length = max(count($this->value), count($x->value)); + $result = $this->copy(); + $result->value = array_pad($result->value, $length, 0); + $x->value = array_pad($x->value, $length, 0); + + for ($i = 0; $i < $length; ++$i) { + $result->value[$i]|= $x->value[$i]; + } + + return $this->_normalize($result); + } + + /** + * Logical Exclusive-Or + * + * @param \phpseclib\Math\BigInteger $x + * @access public + * @internal Implemented per a request by Lluis Pamies i Juarez + * @return \phpseclib\Math\BigInteger + */ + function bitwise_xor($x) + { + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + $temp = new static(); + $temp->value = gmp_xor(gmp_abs($this->value), gmp_abs($x->value)); + return $this->_normalize($temp); + case self::MODE_BCMATH: + $left = $this->toBytes(); + $right = $x->toBytes(); + + $length = max(strlen($left), strlen($right)); + + $left = str_pad($left, $length, chr(0), STR_PAD_LEFT); + $right = str_pad($right, $length, chr(0), STR_PAD_LEFT); + + return $this->_normalize(new static($left ^ $right, 256)); + } + + $length = max(count($this->value), count($x->value)); + $result = $this->copy(); + $result->is_negative = false; + $result->value = array_pad($result->value, $length, 0); + $x->value = array_pad($x->value, $length, 0); + + for ($i = 0; $i < $length; ++$i) { + $result->value[$i]^= $x->value[$i]; + } + + return $this->_normalize($result); + } + + /** + * Logical Not + * + * @access public + * @internal Implemented per a request by Lluis Pamies i Juarez + * @return \phpseclib\Math\BigInteger + */ + function bitwise_not() + { + // calculuate "not" without regard to $this->precision + // (will always result in a smaller number. ie. ~1 isn't 1111 1110 - it's 0) + $temp = $this->toBytes(); + if ($temp == '') { + return $this->_normalize(new static()); + } + $pre_msb = decbin(ord($temp[0])); + $temp = ~$temp; + $msb = decbin(ord($temp[0])); + if (strlen($msb) == 8) { + $msb = substr($msb, strpos($msb, '0')); + } + $temp[0] = chr(bindec($msb)); + + // see if we need to add extra leading 1's + $current_bits = strlen($pre_msb) + 8 * strlen($temp) - 8; + $new_bits = $this->precision - $current_bits; + if ($new_bits <= 0) { + return $this->_normalize(new static($temp, 256)); + } + + // generate as many leading 1's as we need to. + $leading_ones = chr((1 << ($new_bits & 0x7)) - 1) . str_repeat(chr(0xFF), $new_bits >> 3); + $this->_base256_lshift($leading_ones, $current_bits); + + $temp = str_pad($temp, strlen($leading_ones), chr(0), STR_PAD_LEFT); + + return $this->_normalize(new static($leading_ones | $temp, 256)); + } + + /** + * Logical Right Shift + * + * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift. + * + * @param int $shift + * @return \phpseclib\Math\BigInteger + * @access public + * @internal The only version that yields any speed increases is the internal version. + */ + function bitwise_rightShift($shift) + { + $temp = new static(); + + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + static $two; + + if (!isset($two)) { + $two = gmp_init('2'); + } + + $temp->value = gmp_div_q($this->value, gmp_pow($two, $shift)); + + break; + case self::MODE_BCMATH: + $temp->value = bcdiv($this->value, bcpow('2', $shift, 0), 0); + + break; + default: // could just replace _lshift with this, but then all _lshift() calls would need to be rewritten + // and I don't want to do that... + $temp->value = $this->value; + $temp->_rshift($shift); + } + + return $this->_normalize($temp); + } + + /** + * Logical Left Shift + * + * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift. + * + * @param int $shift + * @return \phpseclib\Math\BigInteger + * @access public + * @internal The only version that yields any speed increases is the internal version. + */ + function bitwise_leftShift($shift) + { + $temp = new static(); + + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + static $two; + + if (!isset($two)) { + $two = gmp_init('2'); + } + + $temp->value = gmp_mul($this->value, gmp_pow($two, $shift)); + + break; + case self::MODE_BCMATH: + $temp->value = bcmul($this->value, bcpow('2', $shift, 0), 0); + + break; + default: // could just replace _rshift with this, but then all _lshift() calls would need to be rewritten + // and I don't want to do that... + $temp->value = $this->value; + $temp->_lshift($shift); + } + + return $this->_normalize($temp); + } + + /** + * Logical Left Rotate + * + * Instead of the top x bits being dropped they're appended to the shifted bit string. + * + * @param int $shift + * @return \phpseclib\Math\BigInteger + * @access public + */ + function bitwise_leftRotate($shift) + { + $bits = $this->toBytes(); + + if ($this->precision > 0) { + $precision = $this->precision; + if (MATH_BIGINTEGER_MODE == self::MODE_BCMATH) { + $mask = $this->bitmask->subtract(new static(1)); + $mask = $mask->toBytes(); + } else { + $mask = $this->bitmask->toBytes(); + } + } else { + $temp = ord($bits[0]); + for ($i = 0; $temp >> $i; ++$i) { + } + $precision = 8 * strlen($bits) - 8 + $i; + $mask = chr((1 << ($precision & 0x7)) - 1) . str_repeat(chr(0xFF), $precision >> 3); + } + + if ($shift < 0) { + $shift+= $precision; + } + $shift%= $precision; + + if (!$shift) { + return $this->copy(); + } + + $left = $this->bitwise_leftShift($shift); + $left = $left->bitwise_and(new static($mask, 256)); + $right = $this->bitwise_rightShift($precision - $shift); + $result = MATH_BIGINTEGER_MODE != self::MODE_BCMATH ? $left->bitwise_or($right) : $left->add($right); + return $this->_normalize($result); + } + + /** + * Logical Right Rotate + * + * Instead of the bottom x bits being dropped they're prepended to the shifted bit string. + * + * @param int $shift + * @return \phpseclib\Math\BigInteger + * @access public + */ + function bitwise_rightRotate($shift) + { + return $this->bitwise_leftRotate(-$shift); + } + + /** + * Generates a random BigInteger + * + * Byte length is equal to $length. Uses \phpseclib\Crypt\Random if it's loaded and mt_rand if it's not. + * + * @param int $size + * @return \phpseclib\Math\BigInteger + * @access private + */ + function _random_number_helper($size) + { + if (class_exists('\phpseclib\Crypt\Random')) { + $random = Random::string($size); + } else { + $random = ''; + + if ($size & 1) { + $random.= chr(mt_rand(0, 255)); + } + + $blocks = $size >> 1; + for ($i = 0; $i < $blocks; ++$i) { + // mt_rand(-2147483648, 0x7FFFFFFF) always produces -2147483648 on some systems + $random.= pack('n', mt_rand(0, 0xFFFF)); + } + } + + return new static($random, 256); + } + + /** + * Generate a random number + * + * Returns a random number between $min and $max where $min and $max + * can be defined using one of the two methods: + * + * $min->random($max) + * $max->random($min) + * + * @param \phpseclib\Math\BigInteger $arg1 + * @param \phpseclib\Math\BigInteger $arg2 + * @return \phpseclib\Math\BigInteger + * @access public + * @internal The API for creating random numbers used to be $a->random($min, $max), where $a was a BigInteger object. + * That method is still supported for BC purposes. + */ + function random($arg1, $arg2 = false) + { + if ($arg1 === false) { + return false; + } + + if ($arg2 === false) { + $max = $arg1; + $min = $this; + } else { + $min = $arg1; + $max = $arg2; + } + + $compare = $max->compare($min); + + if (!$compare) { + return $this->_normalize($min); + } elseif ($compare < 0) { + // if $min is bigger then $max, swap $min and $max + $temp = $max; + $max = $min; + $min = $temp; + } + + static $one; + if (!isset($one)) { + $one = new static(1); + } + + $max = $max->subtract($min->subtract($one)); + $size = strlen(ltrim($max->toBytes(), chr(0))); + + /* + doing $random % $max doesn't work because some numbers will be more likely to occur than others. + eg. if $max is 140 and $random's max is 255 then that'd mean both $random = 5 and $random = 145 + would produce 5 whereas the only value of random that could produce 139 would be 139. ie. + not all numbers would be equally likely. some would be more likely than others. + + creating a whole new random number until you find one that is within the range doesn't work + because, for sufficiently small ranges, the likelihood that you'd get a number within that range + would be pretty small. eg. with $random's max being 255 and if your $max being 1 the probability + would be pretty high that $random would be greater than $max. + + phpseclib works around this using the technique described here: + + http://crypto.stackexchange.com/questions/5708/creating-a-small-number-from-a-cryptographically-secure-random-string + */ + $random_max = new static(chr(1) . str_repeat("\0", $size), 256); + $random = $this->_random_number_helper($size); + + list($max_multiple) = $random_max->divide($max); + $max_multiple = $max_multiple->multiply($max); + + while ($random->compare($max_multiple) >= 0) { + $random = $random->subtract($max_multiple); + $random_max = $random_max->subtract($max_multiple); + $random = $random->bitwise_leftShift(8); + $random = $random->add($this->_random_number_helper(1)); + $random_max = $random_max->bitwise_leftShift(8); + list($max_multiple) = $random_max->divide($max); + $max_multiple = $max_multiple->multiply($max); + } + list(, $random) = $random->divide($max); + + return $this->_normalize($random->add($min)); + } + + /** + * Generate a random prime number. + * + * If there's not a prime within the given range, false will be returned. + * If more than $timeout seconds have elapsed, give up and return false. + * + * @param \phpseclib\Math\BigInteger $arg1 + * @param \phpseclib\Math\BigInteger $arg2 + * @param int $timeout + * @return Math_BigInteger|false + * @access public + * @internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=15 HAC 4.44}. + */ + function randomPrime($arg1, $arg2 = false, $timeout = false) + { + if ($arg1 === false) { + return false; + } + + if ($arg2 === false) { + $max = $arg1; + $min = $this; + } else { + $min = $arg1; + $max = $arg2; + } + + $compare = $max->compare($min); + + if (!$compare) { + return $min->isPrime() ? $min : false; + } elseif ($compare < 0) { + // if $min is bigger then $max, swap $min and $max + $temp = $max; + $max = $min; + $min = $temp; + } + + static $one, $two; + if (!isset($one)) { + $one = new static(1); + $two = new static(2); + } + + $start = time(); + + $x = $this->random($min, $max); + + // gmp_nextprime() requires PHP 5 >= 5.2.0 per . + if (MATH_BIGINTEGER_MODE == self::MODE_GMP && extension_loaded('gmp')) { + $p = new static(); + $p->value = gmp_nextprime($x->value); + + if ($p->compare($max) <= 0) { + return $p; + } + + if (!$min->equals($x)) { + $x = $x->subtract($one); + } + + return $x->randomPrime($min, $x); + } + + if ($x->equals($two)) { + return $x; + } + + $x->_make_odd(); + if ($x->compare($max) > 0) { + // if $x > $max then $max is even and if $min == $max then no prime number exists between the specified range + if ($min->equals($max)) { + return false; + } + $x = $min->copy(); + $x->_make_odd(); + } + + $initial_x = $x->copy(); + + while (true) { + if ($timeout !== false && time() - $start > $timeout) { + return false; + } + + if ($x->isPrime()) { + return $x; + } + + $x = $x->add($two); + + if ($x->compare($max) > 0) { + $x = $min->copy(); + if ($x->equals($two)) { + return $x; + } + $x->_make_odd(); + } + + if ($x->equals($initial_x)) { + return false; + } + } + } + + /** + * Make the current number odd + * + * If the current number is odd it'll be unchanged. If it's even, one will be added to it. + * + * @see self::randomPrime() + * @access private + */ + function _make_odd() + { + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + gmp_setbit($this->value, 0); + break; + case self::MODE_BCMATH: + if ($this->value[strlen($this->value) - 1] % 2 == 0) { + $this->value = bcadd($this->value, '1'); + } + break; + default: + $this->value[0] |= 1; + } + } + + /** + * Checks a numer to see if it's prime + * + * Assuming the $t parameter is not set, this function has an error rate of 2**-80. The main motivation for the + * $t parameter is distributability. BigInteger::randomPrime() can be distributed across multiple pageloads + * on a website instead of just one. + * + * @param \phpseclib\Math\BigInteger $t + * @return bool + * @access public + * @internal Uses the + * {@link http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test Miller-Rabin primality test}. See + * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=8 HAC 4.24}. + */ + function isPrime($t = false) + { + $length = strlen($this->toBytes()); + + if (!$t) { + // see HAC 4.49 "Note (controlling the error probability)" + // @codingStandardsIgnoreStart + if ($length >= 163) { $t = 2; } // floor(1300 / 8) + else if ($length >= 106) { $t = 3; } // floor( 850 / 8) + else if ($length >= 81 ) { $t = 4; } // floor( 650 / 8) + else if ($length >= 68 ) { $t = 5; } // floor( 550 / 8) + else if ($length >= 56 ) { $t = 6; } // floor( 450 / 8) + else if ($length >= 50 ) { $t = 7; } // floor( 400 / 8) + else if ($length >= 43 ) { $t = 8; } // floor( 350 / 8) + else if ($length >= 37 ) { $t = 9; } // floor( 300 / 8) + else if ($length >= 31 ) { $t = 12; } // floor( 250 / 8) + else if ($length >= 25 ) { $t = 15; } // floor( 200 / 8) + else if ($length >= 18 ) { $t = 18; } // floor( 150 / 8) + else { $t = 27; } + // @codingStandardsIgnoreEnd + } + + // ie. gmp_testbit($this, 0) + // ie. isEven() or !isOdd() + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + return gmp_prob_prime($this->value, $t) != 0; + case self::MODE_BCMATH: + if ($this->value === '2') { + return true; + } + if ($this->value[strlen($this->value) - 1] % 2 == 0) { + return false; + } + break; + default: + if ($this->value == array(2)) { + return true; + } + if (~$this->value[0] & 1) { + return false; + } + } + + static $primes, $zero, $one, $two; + + if (!isset($primes)) { + $primes = array( + 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, + 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, + 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, + 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, + 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, + 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, + 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, + 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, + 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, + 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, + 953, 967, 971, 977, 983, 991, 997 + ); + + if (MATH_BIGINTEGER_MODE != self::MODE_INTERNAL) { + for ($i = 0; $i < count($primes); ++$i) { + $primes[$i] = new static($primes[$i]); + } + } + + $zero = new static(); + $one = new static(1); + $two = new static(2); + } + + if ($this->equals($one)) { + return false; + } + + // see HAC 4.4.1 "Random search for probable primes" + if (MATH_BIGINTEGER_MODE != self::MODE_INTERNAL) { + foreach ($primes as $prime) { + list(, $r) = $this->divide($prime); + if ($r->equals($zero)) { + return $this->equals($prime); + } + } + } else { + $value = $this->value; + foreach ($primes as $prime) { + list(, $r) = $this->_divide_digit($value, $prime); + if (!$r) { + return count($value) == 1 && $value[0] == $prime; + } + } + } + + $n = $this->copy(); + $n_1 = $n->subtract($one); + $n_2 = $n->subtract($two); + + $r = $n_1->copy(); + $r_value = $r->value; + // ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s)); + if (MATH_BIGINTEGER_MODE == self::MODE_BCMATH) { + $s = 0; + // if $n was 1, $r would be 0 and this would be an infinite loop, hence our $this->equals($one) check earlier + while ($r->value[strlen($r->value) - 1] % 2 == 0) { + $r->value = bcdiv($r->value, '2', 0); + ++$s; + } + } else { + for ($i = 0, $r_length = count($r_value); $i < $r_length; ++$i) { + $temp = ~$r_value[$i] & 0xFFFFFF; + for ($j = 1; ($temp >> $j) & 1; ++$j) { + } + if ($j != 25) { + break; + } + } + $s = 26 * $i + $j; + $r->_rshift($s); + } + + for ($i = 0; $i < $t; ++$i) { + $a = $this->random($two, $n_2); + $y = $a->modPow($r, $n); + + if (!$y->equals($one) && !$y->equals($n_1)) { + for ($j = 1; $j < $s && !$y->equals($n_1); ++$j) { + $y = $y->modPow($two, $n); + if ($y->equals($one)) { + return false; + } + } + + if (!$y->equals($n_1)) { + return false; + } + } + } + return true; + } + + /** + * Logical Left Shift + * + * Shifts BigInteger's by $shift bits. + * + * @param int $shift + * @access private + */ + function _lshift($shift) + { + if ($shift == 0) { + return; + } + + $num_digits = (int) ($shift / self::$base); + $shift %= self::$base; + $shift = 1 << $shift; + + $carry = 0; + + for ($i = 0; $i < count($this->value); ++$i) { + $temp = $this->value[$i] * $shift + $carry; + $carry = self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31); + $this->value[$i] = (int) ($temp - $carry * self::$baseFull); + } + + if ($carry) { + $this->value[count($this->value)] = $carry; + } + + while ($num_digits--) { + array_unshift($this->value, 0); + } + } + + /** + * Logical Right Shift + * + * Shifts BigInteger's by $shift bits. + * + * @param int $shift + * @access private + */ + function _rshift($shift) + { + if ($shift == 0) { + return; + } + + $num_digits = (int) ($shift / self::$base); + $shift %= self::$base; + $carry_shift = self::$base - $shift; + $carry_mask = (1 << $shift) - 1; + + if ($num_digits) { + $this->value = array_slice($this->value, $num_digits); + } + + $carry = 0; + + for ($i = count($this->value) - 1; $i >= 0; --$i) { + $temp = $this->value[$i] >> $shift | $carry; + $carry = ($this->value[$i] & $carry_mask) << $carry_shift; + $this->value[$i] = $temp; + } + + $this->value = $this->_trim($this->value); + } + + /** + * Normalize + * + * Removes leading zeros and truncates (if necessary) to maintain the appropriate precision + * + * @param \phpseclib\Math\BigInteger $result + * @return \phpseclib\Math\BigInteger + * @see self::_trim() + * @access private + */ + function _normalize($result) + { + $result->precision = $this->precision; + $result->bitmask = $this->bitmask; + + switch (MATH_BIGINTEGER_MODE) { + case self::MODE_GMP: + if ($this->bitmask !== false) { + $flip = gmp_cmp($result->value, gmp_init(0)) < 0; + if ($flip) { + $result->value = gmp_neg($result->value); + } + $result->value = gmp_and($result->value, $result->bitmask->value); + if ($flip) { + $result->value = gmp_neg($result->value); + } + } + + return $result; + case self::MODE_BCMATH: + if (!empty($result->bitmask->value)) { + $result->value = bcmod($result->value, $result->bitmask->value); + } + + return $result; + } + + $value = &$result->value; + + if (!count($value)) { + $result->is_negative = false; + return $result; + } + + $value = $this->_trim($value); + + if (!empty($result->bitmask->value)) { + $length = min(count($value), count($this->bitmask->value)); + $value = array_slice($value, 0, $length); + + for ($i = 0; $i < $length; ++$i) { + $value[$i] = $value[$i] & $this->bitmask->value[$i]; + } + } + + return $result; + } + + /** + * Trim + * + * Removes leading zeros + * + * @param array $value + * @return \phpseclib\Math\BigInteger + * @access private + */ + function _trim($value) + { + for ($i = count($value) - 1; $i >= 0; --$i) { + if ($value[$i]) { + break; + } + unset($value[$i]); + } + + return $value; + } + + /** + * Array Repeat + * + * @param array $input + * @param mixed $multiplier + * @return array + * @access private + */ + function _array_repeat($input, $multiplier) + { + return ($multiplier) ? array_fill(0, $multiplier, $input) : array(); + } + + /** + * Logical Left Shift + * + * Shifts binary strings $shift bits, essentially multiplying by 2**$shift. + * + * @param string $x (by reference) + * @param int $shift + * @return string + * @access private + */ + function _base256_lshift(&$x, $shift) + { + if ($shift == 0) { + return; + } + + $num_bytes = $shift >> 3; // eg. floor($shift/8) + $shift &= 7; // eg. $shift % 8 + + $carry = 0; + for ($i = strlen($x) - 1; $i >= 0; --$i) { + $temp = ord($x[$i]) << $shift | $carry; + $x[$i] = chr($temp); + $carry = $temp >> 8; + } + $carry = ($carry != 0) ? chr($carry) : ''; + $x = $carry . $x . str_repeat(chr(0), $num_bytes); + } + + /** + * Logical Right Shift + * + * Shifts binary strings $shift bits, essentially dividing by 2**$shift and returning the remainder. + * + * @param string $x (by referenc) + * @param int $shift + * @return string + * @access private + */ + function _base256_rshift(&$x, $shift) + { + if ($shift == 0) { + $x = ltrim($x, chr(0)); + return ''; + } + + $num_bytes = $shift >> 3; // eg. floor($shift/8) + $shift &= 7; // eg. $shift % 8 + + $remainder = ''; + if ($num_bytes) { + $start = $num_bytes > strlen($x) ? -strlen($x) : -$num_bytes; + $remainder = substr($x, $start); + $x = substr($x, 0, -$num_bytes); + } + + $carry = 0; + $carry_shift = 8 - $shift; + for ($i = 0; $i < strlen($x); ++$i) { + $temp = (ord($x[$i]) >> $shift) | $carry; + $carry = (ord($x[$i]) << $carry_shift) & 0xFF; + $x[$i] = chr($temp); + } + $x = ltrim($x, chr(0)); + + $remainder = chr($carry >> $carry_shift) . $remainder; + + return ltrim($remainder, chr(0)); + } + + // one quirk about how the following functions are implemented is that PHP defines N to be an unsigned long + // at 32-bits, while java's longs are 64-bits. + + /** + * Converts 32-bit integers to bytes. + * + * @param int $x + * @return string + * @access private + */ + function _int2bytes($x) + { + return ltrim(pack('N', $x), chr(0)); + } + + /** + * Converts bytes to 32-bit integers + * + * @param string $x + * @return int + * @access private + */ + function _bytes2int($x) + { + $temp = unpack('Nint', str_pad($x, 4, chr(0), STR_PAD_LEFT)); + return $temp['int']; + } + + /** + * DER-encode an integer + * + * The ability to DER-encode integers is needed to create RSA public keys for use with OpenSSL + * + * @see self::modPow() + * @access private + * @param int $length + * @return string + */ + function _encodeASN1Length($length) + { + if ($length <= 0x7F) { + return chr($length); + } + + $temp = ltrim(pack('N', $length), chr(0)); + return pack('Ca*', 0x80 | strlen($temp), $temp); + } + + /** + * Single digit division + * + * Even if int64 is being used the division operator will return a float64 value + * if the dividend is not evenly divisible by the divisor. Since a float64 doesn't + * have the precision of int64 this is a problem so, when int64 is being used, + * we'll guarantee that the dividend is divisible by first subtracting the remainder. + * + * @access private + * @param int $x + * @param int $y + * @return int + */ + function _safe_divide($x, $y) + { + if (self::$base === 26) { + return (int) ($x / $y); + } + + // self::$base === 31 + return ($x - ($x % $y)) / $y; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php b/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php new file mode 100644 index 000000000..cf13496cd --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php @@ -0,0 +1,342 @@ + + * login('username', 'password')) { + * exit('bad login'); + * } + * $scp = new \phpseclib\Net\SCP($ssh); + * + * $scp->put('abcd', str_repeat('x', 1024*1024)); + * ?> + * + * + * @category Net + * @package SCP + * @author Jim Wigginton + * @copyright 2010 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Net; + +/** + * Pure-PHP implementations of SCP. + * + * @package SCP + * @author Jim Wigginton + * @access public + */ +class SCP +{ + /**#@+ + * @access public + * @see \phpseclib\Net\SCP::put() + */ + /** + * Reads data from a local file. + */ + const SOURCE_LOCAL_FILE = 1; + /** + * Reads data from a string. + */ + const SOURCE_STRING = 2; + /**#@-*/ + + /**#@+ + * @access private + * @see \phpseclib\Net\SCP::_send() + * @see \phpseclib\Net\SCP::_receive() + */ + /** + * SSH1 is being used. + */ + const MODE_SSH1 = 1; + /** + * SSH2 is being used. + */ + const MODE_SSH2 = 2; + /**#@-*/ + + /** + * SSH Object + * + * @var object + * @access private + */ + var $ssh; + + /** + * Packet Size + * + * @var int + * @access private + */ + var $packet_size; + + /** + * Mode + * + * @var int + * @access private + */ + var $mode; + + /** + * Default Constructor. + * + * Connects to an SSH server + * + * @param \phpseclib\Net\SSH1|\phpseclib\Net\SSH2 $ssh + * @return \phpseclib\Net\SCP + * @access public + */ + function __construct($ssh) + { + if ($ssh instanceof SSH2) { + $this->mode = self::MODE_SSH2; + } elseif ($ssh instanceof SSH1) { + $this->packet_size = 50000; + $this->mode = self::MODE_SSH1; + } else { + return; + } + + $this->ssh = $ssh; + } + + /** + * Uploads a file to the SCP server. + * + * By default, \phpseclib\Net\SCP::put() does not read from the local filesystem. $data is dumped directly into $remote_file. + * So, for example, if you set $data to 'filename.ext' and then do \phpseclib\Net\SCP::get(), you will get a file, twelve bytes + * long, containing 'filename.ext' as its contents. + * + * Setting $mode to self::SOURCE_LOCAL_FILE will change the above behavior. With self::SOURCE_LOCAL_FILE, $remote_file will + * contain as many bytes as filename.ext does on your local filesystem. If your filename.ext is 1MB then that is how + * large $remote_file will be, as well. + * + * Currently, only binary mode is supported. As such, if the line endings need to be adjusted, you will need to take + * care of that, yourself. + * + * @param string $remote_file + * @param string $data + * @param int $mode + * @param callable $callback + * @return bool + * @access public + */ + function put($remote_file, $data, $mode = self::SOURCE_STRING, $callback = null) + { + if (!isset($this->ssh)) { + return false; + } + + if (empty($remote_file)) { + user_error('remote_file cannot be blank', E_USER_NOTICE); + return false; + } + + if (!$this->ssh->exec('scp -t ' . escapeshellarg($remote_file), false)) { // -t = to + return false; + } + + $temp = $this->_receive(); + if ($temp !== chr(0)) { + return false; + } + + if ($this->mode == self::MODE_SSH2) { + $this->packet_size = $this->ssh->packet_size_client_to_server[SSH2::CHANNEL_EXEC] - 4; + } + + $remote_file = basename($remote_file); + + if ($mode == self::SOURCE_STRING) { + $size = strlen($data); + } else { + if (!is_file($data)) { + user_error("$data is not a valid file", E_USER_NOTICE); + return false; + } + + $fp = @fopen($data, 'rb'); + if (!$fp) { + return false; + } + $size = filesize($data); + } + + $this->_send('C0644 ' . $size . ' ' . $remote_file . "\n"); + + $temp = $this->_receive(); + if ($temp !== chr(0)) { + return false; + } + + $sent = 0; + while ($sent < $size) { + $temp = $mode & self::SOURCE_STRING ? substr($data, $sent, $this->packet_size) : fread($fp, $this->packet_size); + $this->_send($temp); + $sent+= strlen($temp); + + if (is_callable($callback)) { + call_user_func($callback, $sent); + } + } + $this->_close(); + + if ($mode != self::SOURCE_STRING) { + fclose($fp); + } + + return true; + } + + /** + * Downloads a file from the SCP server. + * + * Returns a string containing the contents of $remote_file if $local_file is left undefined or a boolean false if + * the operation was unsuccessful. If $local_file is defined, returns true or false depending on the success of the + * operation + * + * @param string $remote_file + * @param string $local_file + * @return mixed + * @access public + */ + function get($remote_file, $local_file = false) + { + if (!isset($this->ssh)) { + return false; + } + + if (!$this->ssh->exec('scp -f ' . escapeshellarg($remote_file), false)) { // -f = from + return false; + } + + $this->_send("\0"); + + if (!preg_match('#(?[^ ]+) (?\d+) (?.+)#', rtrim($this->_receive()), $info)) { + return false; + } + + $this->_send("\0"); + + $size = 0; + + if ($local_file !== false) { + $fp = @fopen($local_file, 'wb'); + if (!$fp) { + return false; + } + } + + $content = ''; + while ($size < $info['size']) { + $data = $this->_receive(); + // SCP usually seems to split stuff out into 16k chunks + $size+= strlen($data); + + if ($local_file === false) { + $content.= $data; + } else { + fputs($fp, $data); + } + } + + $this->_close(); + + if ($local_file !== false) { + fclose($fp); + return true; + } + + return $content; + } + + /** + * Sends a packet to an SSH server + * + * @param string $data + * @access private + */ + function _send($data) + { + switch ($this->mode) { + case self::MODE_SSH2: + $this->ssh->_send_channel_packet(SSH2::CHANNEL_EXEC, $data); + break; + case self::MODE_SSH1: + $data = pack('CNa*', NET_SSH1_CMSG_STDIN_DATA, strlen($data), $data); + $this->ssh->_send_binary_packet($data); + } + } + + /** + * Receives a packet from an SSH server + * + * @return string + * @access private + */ + function _receive() + { + switch ($this->mode) { + case self::MODE_SSH2: + return $this->ssh->_get_channel_packet(SSH2::CHANNEL_EXEC, true); + case self::MODE_SSH1: + if (!$this->ssh->bitmap) { + return false; + } + while (true) { + $response = $this->ssh->_get_binary_packet(); + switch ($response[SSH1::RESPONSE_TYPE]) { + case NET_SSH1_SMSG_STDOUT_DATA: + if (strlen($response[SSH1::RESPONSE_DATA]) < 4) { + return false; + } + extract(unpack('Nlength', $response[SSH1::RESPONSE_DATA])); + return $this->ssh->_string_shift($response[SSH1::RESPONSE_DATA], $length); + case NET_SSH1_SMSG_STDERR_DATA: + break; + case NET_SSH1_SMSG_EXITSTATUS: + $this->ssh->_send_binary_packet(chr(NET_SSH1_CMSG_EXIT_CONFIRMATION)); + fclose($this->ssh->fsock); + $this->ssh->bitmap = 0; + return false; + default: + user_error('Unknown packet received', E_USER_NOTICE); + return false; + } + } + } + } + + /** + * Closes the connection to an SSH server + * + * @access private + */ + function _close() + { + switch ($this->mode) { + case self::MODE_SSH2: + $this->ssh->_close_channel(SSH2::CHANNEL_EXEC, true); + break; + case self::MODE_SSH1: + $this->ssh->disconnect(); + } + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php b/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php new file mode 100644 index 000000000..8ae43fa04 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php @@ -0,0 +1,3231 @@ + + * login('username', 'password')) { + * exit('Login Failed'); + * } + * + * echo $sftp->pwd() . "\r\n"; + * $sftp->put('filename.ext', 'hello, world!'); + * print_r($sftp->nlist()); + * ?> + * + * + * @category Net + * @package SFTP + * @author Jim Wigginton + * @copyright 2009 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Net; + +/** + * Pure-PHP implementations of SFTP. + * + * @package SFTP + * @author Jim Wigginton + * @access public + */ +class SFTP extends SSH2 +{ + /** + * SFTP channel constant + * + * \phpseclib\Net\SSH2::exec() uses 0 and \phpseclib\Net\SSH2::read() / \phpseclib\Net\SSH2::write() use 1. + * + * @see \phpseclib\Net\SSH2::_send_channel_packet() + * @see \phpseclib\Net\SSH2::_get_channel_packet() + * @access private + */ + const CHANNEL = 0x100; + + /**#@+ + * @access public + * @see \phpseclib\Net\SFTP::put() + */ + /** + * Reads data from a local file. + */ + const SOURCE_LOCAL_FILE = 1; + /** + * Reads data from a string. + */ + // this value isn't really used anymore but i'm keeping it reserved for historical reasons + const SOURCE_STRING = 2; + /** + * Reads data from callback: + * function callback($length) returns string to proceed, null for EOF + */ + const SOURCE_CALLBACK = 16; + /** + * Resumes an upload + */ + const RESUME = 4; + /** + * Append a local file to an already existing remote file + */ + const RESUME_START = 8; + /**#@-*/ + + /** + * Packet Types + * + * @see self::__construct() + * @var array + * @access private + */ + var $packet_types = array(); + + /** + * Status Codes + * + * @see self::__construct() + * @var array + * @access private + */ + var $status_codes = array(); + + /** + * The Request ID + * + * The request ID exists in the off chance that a packet is sent out-of-order. Of course, this library doesn't support + * concurrent actions, so it's somewhat academic, here. + * + * @var boolean + * @see self::_send_sftp_packet() + * @access private + */ + var $use_request_id = false; + + /** + * The Packet Type + * + * The request ID exists in the off chance that a packet is sent out-of-order. Of course, this library doesn't support + * concurrent actions, so it's somewhat academic, here. + * + * @var int + * @see self::_get_sftp_packet() + * @access private + */ + var $packet_type = -1; + + /** + * Packet Buffer + * + * @var string + * @see self::_get_sftp_packet() + * @access private + */ + var $packet_buffer = ''; + + /** + * Extensions supported by the server + * + * @var array + * @see self::_initChannel() + * @access private + */ + var $extensions = array(); + + /** + * Server SFTP version + * + * @var int + * @see self::_initChannel() + * @access private + */ + var $version; + + /** + * Current working directory + * + * @var string + * @see self::realpath() + * @see self::chdir() + * @access private + */ + var $pwd = false; + + /** + * Packet Type Log + * + * @see self::getLog() + * @var array + * @access private + */ + var $packet_type_log = array(); + + /** + * Packet Log + * + * @see self::getLog() + * @var array + * @access private + */ + var $packet_log = array(); + + /** + * Error information + * + * @see self::getSFTPErrors() + * @see self::getLastSFTPError() + * @var array + * @access private + */ + var $sftp_errors = array(); + + /** + * Stat Cache + * + * Rather than always having to open a directory and close it immediately there after to see if a file is a directory + * we'll cache the results. + * + * @see self::_update_stat_cache() + * @see self::_remove_from_stat_cache() + * @see self::_query_stat_cache() + * @var array + * @access private + */ + var $stat_cache = array(); + + /** + * Max SFTP Packet Size + * + * @see self::__construct() + * @see self::get() + * @var array + * @access private + */ + var $max_sftp_packet; + + /** + * Stat Cache Flag + * + * @see self::disableStatCache() + * @see self::enableStatCache() + * @var bool + * @access private + */ + var $use_stat_cache = true; + + /** + * Sort Options + * + * @see self::_comparator() + * @see self::setListOrder() + * @var array + * @access private + */ + var $sortOptions = array(); + + /** + * Canonicalization Flag + * + * Determines whether or not paths should be canonicalized before being + * passed on to the remote server. + * + * @see self::enablePathCanonicalization() + * @see self::disablePathCanonicalization() + * @see self::realpath() + * @var bool + * @access private + */ + var $canonicalize_paths = true; + + /** + * Request Buffers + * + * @see self::_get_sftp_packet() + * @var array + * @access private + */ + var $requestBuffer = array(); + + /** + * Preserve timestamps on file downloads / uploads + * + * @see self::get() + * @see self::put() + * @var bool + * @access private + */ + var $preserveTime = false; + + /** + * Default Constructor. + * + * Connects to an SFTP server + * + * @param string $host + * @param int $port + * @param int $timeout + * @return \phpseclib\Net\SFTP + * @access public + */ + function __construct($host, $port = 22, $timeout = 10) + { + parent::__construct($host, $port, $timeout); + + $this->max_sftp_packet = 1 << 15; + + $this->packet_types = array( + 1 => 'NET_SFTP_INIT', + 2 => 'NET_SFTP_VERSION', + /* the format of SSH_FXP_OPEN changed between SFTPv4 and SFTPv5+: + SFTPv5+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.1 + pre-SFTPv5 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3 */ + 3 => 'NET_SFTP_OPEN', + 4 => 'NET_SFTP_CLOSE', + 5 => 'NET_SFTP_READ', + 6 => 'NET_SFTP_WRITE', + 7 => 'NET_SFTP_LSTAT', + 9 => 'NET_SFTP_SETSTAT', + 11 => 'NET_SFTP_OPENDIR', + 12 => 'NET_SFTP_READDIR', + 13 => 'NET_SFTP_REMOVE', + 14 => 'NET_SFTP_MKDIR', + 15 => 'NET_SFTP_RMDIR', + 16 => 'NET_SFTP_REALPATH', + 17 => 'NET_SFTP_STAT', + /* the format of SSH_FXP_RENAME changed between SFTPv4 and SFTPv5+: + SFTPv5+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3 + pre-SFTPv5 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.5 */ + 18 => 'NET_SFTP_RENAME', + 19 => 'NET_SFTP_READLINK', + 20 => 'NET_SFTP_SYMLINK', + + 101=> 'NET_SFTP_STATUS', + 102=> 'NET_SFTP_HANDLE', + /* the format of SSH_FXP_NAME changed between SFTPv3 and SFTPv4+: + SFTPv4+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.4 + pre-SFTPv4 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-02#section-7 */ + 103=> 'NET_SFTP_DATA', + 104=> 'NET_SFTP_NAME', + 105=> 'NET_SFTP_ATTRS', + + 200=> 'NET_SFTP_EXTENDED' + ); + $this->status_codes = array( + 0 => 'NET_SFTP_STATUS_OK', + 1 => 'NET_SFTP_STATUS_EOF', + 2 => 'NET_SFTP_STATUS_NO_SUCH_FILE', + 3 => 'NET_SFTP_STATUS_PERMISSION_DENIED', + 4 => 'NET_SFTP_STATUS_FAILURE', + 5 => 'NET_SFTP_STATUS_BAD_MESSAGE', + 6 => 'NET_SFTP_STATUS_NO_CONNECTION', + 7 => 'NET_SFTP_STATUS_CONNECTION_LOST', + 8 => 'NET_SFTP_STATUS_OP_UNSUPPORTED', + 9 => 'NET_SFTP_STATUS_INVALID_HANDLE', + 10 => 'NET_SFTP_STATUS_NO_SUCH_PATH', + 11 => 'NET_SFTP_STATUS_FILE_ALREADY_EXISTS', + 12 => 'NET_SFTP_STATUS_WRITE_PROTECT', + 13 => 'NET_SFTP_STATUS_NO_MEDIA', + 14 => 'NET_SFTP_STATUS_NO_SPACE_ON_FILESYSTEM', + 15 => 'NET_SFTP_STATUS_QUOTA_EXCEEDED', + 16 => 'NET_SFTP_STATUS_UNKNOWN_PRINCIPAL', + 17 => 'NET_SFTP_STATUS_LOCK_CONFLICT', + 18 => 'NET_SFTP_STATUS_DIR_NOT_EMPTY', + 19 => 'NET_SFTP_STATUS_NOT_A_DIRECTORY', + 20 => 'NET_SFTP_STATUS_INVALID_FILENAME', + 21 => 'NET_SFTP_STATUS_LINK_LOOP', + 22 => 'NET_SFTP_STATUS_CANNOT_DELETE', + 23 => 'NET_SFTP_STATUS_INVALID_PARAMETER', + 24 => 'NET_SFTP_STATUS_FILE_IS_A_DIRECTORY', + 25 => 'NET_SFTP_STATUS_BYTE_RANGE_LOCK_CONFLICT', + 26 => 'NET_SFTP_STATUS_BYTE_RANGE_LOCK_REFUSED', + 27 => 'NET_SFTP_STATUS_DELETE_PENDING', + 28 => 'NET_SFTP_STATUS_FILE_CORRUPT', + 29 => 'NET_SFTP_STATUS_OWNER_INVALID', + 30 => 'NET_SFTP_STATUS_GROUP_INVALID', + 31 => 'NET_SFTP_STATUS_NO_MATCHING_BYTE_RANGE_LOCK' + ); + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-7.1 + // the order, in this case, matters quite a lot - see \phpseclib\Net\SFTP::_parseAttributes() to understand why + $this->attributes = array( + 0x00000001 => 'NET_SFTP_ATTR_SIZE', + 0x00000002 => 'NET_SFTP_ATTR_UIDGID', // defined in SFTPv3, removed in SFTPv4+ + 0x00000004 => 'NET_SFTP_ATTR_PERMISSIONS', + 0x00000008 => 'NET_SFTP_ATTR_ACCESSTIME', + // 0x80000000 will yield a floating point on 32-bit systems and converting floating points to integers + // yields inconsistent behavior depending on how php is compiled. so we left shift -1 (which, in + // two's compliment, consists of all 1 bits) by 31. on 64-bit systems this'll yield 0xFFFFFFFF80000000. + // that's not a problem, however, and 'anded' and a 32-bit number, as all the leading 1 bits are ignored. + (-1 << 31) & 0xFFFFFFFF => 'NET_SFTP_ATTR_EXTENDED' + ); + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3 + // the flag definitions change somewhat in SFTPv5+. if SFTPv5+ support is added to this library, maybe name + // the array for that $this->open5_flags and similarly alter the constant names. + $this->open_flags = array( + 0x00000001 => 'NET_SFTP_OPEN_READ', + 0x00000002 => 'NET_SFTP_OPEN_WRITE', + 0x00000004 => 'NET_SFTP_OPEN_APPEND', + 0x00000008 => 'NET_SFTP_OPEN_CREATE', + 0x00000010 => 'NET_SFTP_OPEN_TRUNCATE', + 0x00000020 => 'NET_SFTP_OPEN_EXCL' + ); + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2 + // see \phpseclib\Net\SFTP::_parseLongname() for an explanation + $this->file_types = array( + 1 => 'NET_SFTP_TYPE_REGULAR', + 2 => 'NET_SFTP_TYPE_DIRECTORY', + 3 => 'NET_SFTP_TYPE_SYMLINK', + 4 => 'NET_SFTP_TYPE_SPECIAL', + 5 => 'NET_SFTP_TYPE_UNKNOWN', + // the followin types were first defined for use in SFTPv5+ + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-05#section-5.2 + 6 => 'NET_SFTP_TYPE_SOCKET', + 7 => 'NET_SFTP_TYPE_CHAR_DEVICE', + 8 => 'NET_SFTP_TYPE_BLOCK_DEVICE', + 9 => 'NET_SFTP_TYPE_FIFO' + ); + $this->_define_array( + $this->packet_types, + $this->status_codes, + $this->attributes, + $this->open_flags, + $this->file_types + ); + + if (!defined('NET_SFTP_QUEUE_SIZE')) { + define('NET_SFTP_QUEUE_SIZE', 32); + } + if (!defined('NET_SFTP_UPLOAD_QUEUE_SIZE')) { + define('NET_SFTP_UPLOAD_QUEUE_SIZE', 1024); + } + } + + /** + * Login + * + * @param string $username + * @return bool + * @access public + */ + function login($username) + { + if (!call_user_func_array('parent::login', func_get_args())) { + return false; + } + + $this->window_size_server_to_client[self::CHANNEL] = $this->window_size; + + $packet = pack( + 'CNa*N3', + NET_SSH2_MSG_CHANNEL_OPEN, + strlen('session'), + 'session', + self::CHANNEL, + $this->window_size, + 0x4000 + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_OPEN; + + $response = $this->_get_channel_packet(self::CHANNEL, true); + if ($response === false) { + return false; + } + + $packet = pack( + 'CNNa*CNa*', + NET_SSH2_MSG_CHANNEL_REQUEST, + $this->server_channels[self::CHANNEL], + strlen('subsystem'), + 'subsystem', + 1, + strlen('sftp'), + 'sftp' + ); + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_REQUEST; + + $response = $this->_get_channel_packet(self::CHANNEL, true); + if ($response === false) { + // from PuTTY's psftp.exe + $command = "test -x /usr/lib/sftp-server && exec /usr/lib/sftp-server\n" . + "test -x /usr/local/lib/sftp-server && exec /usr/local/lib/sftp-server\n" . + "exec sftp-server"; + // we don't do $this->exec($command, false) because exec() operates on a different channel and plus the SSH_MSG_CHANNEL_OPEN that exec() does + // is redundant + $packet = pack( + 'CNNa*CNa*', + NET_SSH2_MSG_CHANNEL_REQUEST, + $this->server_channels[self::CHANNEL], + strlen('exec'), + 'exec', + 1, + strlen($command), + $command + ); + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_REQUEST; + + $response = $this->_get_channel_packet(self::CHANNEL, true); + if ($response === false) { + return false; + } + } + + $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_DATA; + + if (!$this->_send_sftp_packet(NET_SFTP_INIT, "\0\0\0\3")) { + return false; + } + + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_VERSION) { + user_error('Expected SSH_FXP_VERSION'); + return false; + } + + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nversion', $this->_string_shift($response, 4))); + $this->version = $version; + while (!empty($response)) { + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $key = $this->_string_shift($response, $length); + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $value = $this->_string_shift($response, $length); + $this->extensions[$key] = $value; + } + + /* + SFTPv4+ defines a 'newline' extension. SFTPv3 seems to have unofficial support for it via 'newline@vandyke.com', + however, I'm not sure what 'newline@vandyke.com' is supposed to do (the fact that it's unofficial means that it's + not in the official SFTPv3 specs) and 'newline@vandyke.com' / 'newline' are likely not drop-in substitutes for + one another due to the fact that 'newline' comes with a SSH_FXF_TEXT bitmask whereas it seems unlikely that + 'newline@vandyke.com' would. + */ + /* + if (isset($this->extensions['newline@vandyke.com'])) { + $this->extensions['newline'] = $this->extensions['newline@vandyke.com']; + unset($this->extensions['newline@vandyke.com']); + } + */ + + $this->use_request_id = true; + + /* + A Note on SFTPv4/5/6 support: + states the following: + + "If the client wishes to interoperate with servers that support noncontiguous version + numbers it SHOULD send '3'" + + Given that the server only sends its version number after the client has already done so, the above + seems to be suggesting that v3 should be the default version. This makes sense given that v3 is the + most popular. + + states the following; + + "If the server did not send the "versions" extension, or the version-from-list was not included, the + server MAY send a status response describing the failure, but MUST then close the channel without + processing any further requests." + + So what do you do if you have a client whose initial SSH_FXP_INIT packet says it implements v3 and + a server whose initial SSH_FXP_VERSION reply says it implements v4 and only v4? If it only implements + v4, the "versions" extension is likely not going to have been sent so version re-negotiation as discussed + in draft-ietf-secsh-filexfer-13 would be quite impossible. As such, what \phpseclib\Net\SFTP would do is close the + channel and reopen it with a new and updated SSH_FXP_INIT packet. + */ + switch ($this->version) { + case 2: + case 3: + break; + default: + return false; + } + + $this->pwd = $this->_realpath('.'); + + $this->_update_stat_cache($this->pwd, array()); + + return true; + } + + /** + * Disable the stat cache + * + * @access public + */ + function disableStatCache() + { + $this->use_stat_cache = false; + } + + /** + * Enable the stat cache + * + * @access public + */ + function enableStatCache() + { + $this->use_stat_cache = true; + } + + /** + * Clear the stat cache + * + * @access public + */ + function clearStatCache() + { + $this->stat_cache = array(); + } + + /** + * Enable path canonicalization + * + * @access public + */ + function enablePathCanonicalization() + { + $this->canonicalize_paths = true; + } + + /** + * Enable path canonicalization + * + * @access public + */ + function disablePathCanonicalization() + { + $this->canonicalize_paths = false; + } + + /** + * Returns the current directory name + * + * @return mixed + * @access public + */ + function pwd() + { + return $this->pwd; + } + + /** + * Logs errors + * + * @param string $response + * @param int $status + * @access public + */ + function _logError($response, $status = -1) + { + if ($status == -1) { + if (strlen($response) < 4) { + return; + } + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + } + + $error = $this->status_codes[$status]; + + if ($this->version > 2 || strlen($response) < 4) { + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->sftp_errors[] = $error . ': ' . $this->_string_shift($response, $length); + } else { + $this->sftp_errors[] = $error; + } + } + + /** + * Returns canonicalized absolute pathname + * + * realpath() expands all symbolic links and resolves references to '/./', '/../' and extra '/' characters in the input + * path and returns the canonicalized absolute pathname. + * + * @param string $path + * @return mixed + * @access public + */ + function realpath($path) + { + return $this->_realpath($path); + } + + /** + * Canonicalize the Server-Side Path Name + * + * SFTP doesn't provide a mechanism by which the current working directory can be changed, so we'll emulate it. Returns + * the absolute (canonicalized) path. + * + * If canonicalize_paths has been disabled using disablePathCanonicalization(), $path is returned as-is. + * + * @see self::chdir() + * @see self::disablePathCanonicalization() + * @param string $path + * @return mixed + * @access private + */ + function _realpath($path) + { + if (!$this->canonicalize_paths) { + return $path; + } + + if ($this->pwd === false) { + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.9 + if (!$this->_send_sftp_packet(NET_SFTP_REALPATH, pack('Na*', strlen($path), $path))) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_NAME: + // although SSH_FXP_NAME is implemented differently in SFTPv3 than it is in SFTPv4+, the following + // should work on all SFTP versions since the only part of the SSH_FXP_NAME packet the following looks + // at is the first part and that part is defined the same in SFTP versions 3 through 6. + $this->_string_shift($response, 4); // skip over the count - it should be 1, anyway + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + return $this->_string_shift($response, $length); + case NET_SFTP_STATUS: + $this->_logError($response); + return false; + default: + user_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS'); + return false; + } + } + + if (!strlen($path) || $path[0] != '/') { + $path = $this->pwd . '/' . $path; + } + + $path = explode('/', $path); + $new = array(); + foreach ($path as $dir) { + if (!strlen($dir)) { + continue; + } + switch ($dir) { + case '..': + array_pop($new); + case '.': + break; + default: + $new[] = $dir; + } + } + + return '/' . implode('/', $new); + } + + /** + * Changes the current directory + * + * @param string $dir + * @return bool + * @access public + */ + function chdir($dir) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + // assume current dir if $dir is empty + if ($dir === '') { + $dir = './'; + // suffix a slash if needed + } elseif ($dir[strlen($dir) - 1] != '/') { + $dir.= '/'; + } + + $dir = $this->_realpath($dir); + + // confirm that $dir is, in fact, a valid directory + if ($this->use_stat_cache && is_array($this->_query_stat_cache($dir))) { + $this->pwd = $dir; + return true; + } + + // we could do a stat on the alleged $dir to see if it's a directory but that doesn't tell us + // the currently logged in user has the appropriate permissions or not. maybe you could see if + // the file's uid / gid match the currently logged in user's uid / gid but how there's no easy + // way to get those with SFTP + + if (!$this->_send_sftp_packet(NET_SFTP_OPENDIR, pack('Na*', strlen($dir), $dir))) { + return false; + } + + // see \phpseclib\Net\SFTP::nlist() for a more thorough explanation of the following + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_HANDLE: + $handle = substr($response, 4); + break; + case NET_SFTP_STATUS: + $this->_logError($response); + return false; + default: + user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + return false; + } + + if (!$this->_close_handle($handle)) { + return false; + } + + $this->_update_stat_cache($dir, array()); + + $this->pwd = $dir; + return true; + } + + /** + * Returns a list of files in the given directory + * + * @param string $dir + * @param bool $recursive + * @return mixed + * @access public + */ + function nlist($dir = '.', $recursive = false) + { + return $this->_nlist_helper($dir, $recursive, ''); + } + + /** + * Helper method for nlist + * + * @param string $dir + * @param bool $recursive + * @param string $relativeDir + * @return mixed + * @access private + */ + function _nlist_helper($dir, $recursive, $relativeDir) + { + $files = $this->_list($dir, false); + + if (!$recursive || $files === false) { + return $files; + } + + $result = array(); + foreach ($files as $value) { + if ($value == '.' || $value == '..') { + if ($relativeDir == '') { + $result[] = $value; + } + continue; + } + if (is_array($this->_query_stat_cache($this->_realpath($dir . '/' . $value)))) { + $temp = $this->_nlist_helper($dir . '/' . $value, true, $relativeDir . $value . '/'); + $temp = is_array($temp) ? $temp : array(); + $result = array_merge($result, $temp); + } else { + $result[] = $relativeDir . $value; + } + } + + return $result; + } + + /** + * Returns a detailed list of files in the given directory + * + * @param string $dir + * @param bool $recursive + * @return mixed + * @access public + */ + function rawlist($dir = '.', $recursive = false) + { + $files = $this->_list($dir, true); + if (!$recursive || $files === false) { + return $files; + } + + static $depth = 0; + + foreach ($files as $key => $value) { + if ($depth != 0 && $key == '..') { + unset($files[$key]); + continue; + } + $is_directory = false; + if ($key != '.' && $key != '..') { + if ($this->use_stat_cache) { + $is_directory = is_array($this->_query_stat_cache($this->_realpath($dir . '/' . $key))); + } else { + $stat = $this->lstat($dir . '/' . $key); + $is_directory = $stat && $stat['type'] === NET_SFTP_TYPE_DIRECTORY; + } + } + + if ($is_directory) { + $depth++; + $files[$key] = $this->rawlist($dir . '/' . $key, true); + $depth--; + } else { + $files[$key] = (object) $value; + } + } + + return $files; + } + + /** + * Reads a list, be it detailed or not, of files in the given directory + * + * @param string $dir + * @param bool $raw + * @return mixed + * @access private + */ + function _list($dir, $raw = true) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + $dir = $this->_realpath($dir . '/'); + if ($dir === false) { + return false; + } + + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.2 + if (!$this->_send_sftp_packet(NET_SFTP_OPENDIR, pack('Na*', strlen($dir), $dir))) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_HANDLE: + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.2 + // since 'handle' is the last field in the SSH_FXP_HANDLE packet, we'll just remove the first four bytes that + // represent the length of the string and leave it at that + $handle = substr($response, 4); + break; + case NET_SFTP_STATUS: + // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED + $this->_logError($response); + return false; + default: + user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + return false; + } + + $this->_update_stat_cache($dir, array()); + + $contents = array(); + while (true) { + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.2 + // why multiple SSH_FXP_READDIR packets would be sent when the response to a single one can span arbitrarily many + // SSH_MSG_CHANNEL_DATA messages is not known to me. + if (!$this->_send_sftp_packet(NET_SFTP_READDIR, pack('Na*', strlen($handle), $handle))) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_NAME: + if (strlen($response) < 4) { + return false; + } + extract(unpack('Ncount', $this->_string_shift($response, 4))); + for ($i = 0; $i < $count; $i++) { + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $shortname = $this->_string_shift($response, $length); + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $longname = $this->_string_shift($response, $length); + $attributes = $this->_parseAttributes($response); + if (!isset($attributes['type'])) { + $fileType = $this->_parseLongname($longname); + if ($fileType) { + $attributes['type'] = $fileType; + } + } + $contents[$shortname] = $attributes + array('filename' => $shortname); + + if (isset($attributes['type']) && $attributes['type'] == NET_SFTP_TYPE_DIRECTORY && ($shortname != '.' && $shortname != '..')) { + $this->_update_stat_cache($dir . '/' . $shortname, array()); + } else { + if ($shortname == '..') { + $temp = $this->_realpath($dir . '/..') . '/.'; + } else { + $temp = $dir . '/' . $shortname; + } + $this->_update_stat_cache($temp, (object) array('lstat' => $attributes)); + } + // SFTPv6 has an optional boolean end-of-list field, but we'll ignore that, since the + // final SSH_FXP_STATUS packet should tell us that, already. + } + break; + case NET_SFTP_STATUS: + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_EOF) { + $this->_logError($response, $status); + return false; + } + break 2; + default: + user_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS'); + return false; + } + } + + if (!$this->_close_handle($handle)) { + return false; + } + + if (count($this->sortOptions)) { + uasort($contents, array(&$this, '_comparator')); + } + + return $raw ? $contents : array_keys($contents); + } + + /** + * Compares two rawlist entries using parameters set by setListOrder() + * + * Intended for use with uasort() + * + * @param array $a + * @param array $b + * @return int + * @access private + */ + function _comparator($a, $b) + { + switch (true) { + case $a['filename'] === '.' || $b['filename'] === '.': + if ($a['filename'] === $b['filename']) { + return 0; + } + return $a['filename'] === '.' ? -1 : 1; + case $a['filename'] === '..' || $b['filename'] === '..': + if ($a['filename'] === $b['filename']) { + return 0; + } + return $a['filename'] === '..' ? -1 : 1; + case isset($a['type']) && $a['type'] === NET_SFTP_TYPE_DIRECTORY: + if (!isset($b['type'])) { + return 1; + } + if ($b['type'] !== $a['type']) { + return -1; + } + break; + case isset($b['type']) && $b['type'] === NET_SFTP_TYPE_DIRECTORY: + return 1; + } + foreach ($this->sortOptions as $sort => $order) { + if (!isset($a[$sort]) || !isset($b[$sort])) { + if (isset($a[$sort])) { + return -1; + } + if (isset($b[$sort])) { + return 1; + } + return 0; + } + switch ($sort) { + case 'filename': + $result = strcasecmp($a['filename'], $b['filename']); + if ($result) { + return $order === SORT_DESC ? -$result : $result; + } + break; + case 'permissions': + case 'mode': + $a[$sort]&= 07777; + $b[$sort]&= 07777; + default: + if ($a[$sort] === $b[$sort]) { + break; + } + return $order === SORT_ASC ? $a[$sort] - $b[$sort] : $b[$sort] - $a[$sort]; + } + } + } + + /** + * Defines how nlist() and rawlist() will be sorted - if at all. + * + * If sorting is enabled directories and files will be sorted independently with + * directories appearing before files in the resultant array that is returned. + * + * Any parameter returned by stat is a valid sort parameter for this function. + * Filename comparisons are case insensitive. + * + * Examples: + * + * $sftp->setListOrder('filename', SORT_ASC); + * $sftp->setListOrder('size', SORT_DESC, 'filename', SORT_ASC); + * $sftp->setListOrder(true); + * Separates directories from files but doesn't do any sorting beyond that + * $sftp->setListOrder(); + * Don't do any sort of sorting + * + * @access public + */ + function setListOrder() + { + $this->sortOptions = array(); + $args = func_get_args(); + if (empty($args)) { + return; + } + $len = count($args) & 0x7FFFFFFE; + for ($i = 0; $i < $len; $i+=2) { + $this->sortOptions[$args[$i]] = $args[$i + 1]; + } + if (!count($this->sortOptions)) { + $this->sortOptions = array('bogus' => true); + } + } + + /** + * Returns the file size, in bytes, or false, on failure + * + * Files larger than 4GB will show up as being exactly 4GB. + * + * @param string $filename + * @return mixed + * @access public + */ + function size($filename) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + $result = $this->stat($filename); + if ($result === false) { + return false; + } + return isset($result['size']) ? $result['size'] : -1; + } + + /** + * Save files / directories to cache + * + * @param string $path + * @param mixed $value + * @access private + */ + function _update_stat_cache($path, $value) + { + if ($this->use_stat_cache === false) { + return; + } + + // preg_replace('#^/|/(?=/)|/$#', '', $dir) == str_replace('//', '/', trim($path, '/')) + $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $path)); + + $temp = &$this->stat_cache; + $max = count($dirs) - 1; + foreach ($dirs as $i => $dir) { + // if $temp is an object that means one of two things. + // 1. a file was deleted and changed to a directory behind phpseclib's back + // 2. it's a symlink. when lstat is done it's unclear what it's a symlink to + if (is_object($temp)) { + $temp = array(); + } + if (!isset($temp[$dir])) { + $temp[$dir] = array(); + } + if ($i === $max) { + if (is_object($temp[$dir]) && is_object($value)) { + if (!isset($value->stat) && isset($temp[$dir]->stat)) { + $value->stat = $temp[$dir]->stat; + } + if (!isset($value->lstat) && isset($temp[$dir]->lstat)) { + $value->lstat = $temp[$dir]->lstat; + } + } + $temp[$dir] = $value; + break; + } + $temp = &$temp[$dir]; + } + } + + /** + * Remove files / directories from cache + * + * @param string $path + * @return bool + * @access private + */ + function _remove_from_stat_cache($path) + { + $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $path)); + + $temp = &$this->stat_cache; + $max = count($dirs) - 1; + foreach ($dirs as $i => $dir) { + if (!is_array($temp)) { + return false; + } + if ($i === $max) { + unset($temp[$dir]); + return true; + } + if (!isset($temp[$dir])) { + return false; + } + $temp = &$temp[$dir]; + } + } + + /** + * Checks cache for path + * + * Mainly used by file_exists + * + * @param string $path + * @return mixed + * @access private + */ + function _query_stat_cache($path) + { + $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $path)); + + $temp = &$this->stat_cache; + foreach ($dirs as $dir) { + if (!is_array($temp)) { + return null; + } + if (!isset($temp[$dir])) { + return null; + } + $temp = &$temp[$dir]; + } + return $temp; + } + + /** + * Returns general information about a file. + * + * Returns an array on success and false otherwise. + * + * @param string $filename + * @return mixed + * @access public + */ + function stat($filename) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + $filename = $this->_realpath($filename); + if ($filename === false) { + return false; + } + + if ($this->use_stat_cache) { + $result = $this->_query_stat_cache($filename); + if (is_array($result) && isset($result['.']) && isset($result['.']->stat)) { + return $result['.']->stat; + } + if (is_object($result) && isset($result->stat)) { + return $result->stat; + } + } + + $stat = $this->_stat($filename, NET_SFTP_STAT); + if ($stat === false) { + $this->_remove_from_stat_cache($filename); + return false; + } + if (isset($stat['type'])) { + if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) { + $filename.= '/.'; + } + $this->_update_stat_cache($filename, (object) array('stat' => $stat)); + return $stat; + } + + $pwd = $this->pwd; + $stat['type'] = $this->chdir($filename) ? + NET_SFTP_TYPE_DIRECTORY : + NET_SFTP_TYPE_REGULAR; + $this->pwd = $pwd; + + if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) { + $filename.= '/.'; + } + $this->_update_stat_cache($filename, (object) array('stat' => $stat)); + + return $stat; + } + + /** + * Returns general information about a file or symbolic link. + * + * Returns an array on success and false otherwise. + * + * @param string $filename + * @return mixed + * @access public + */ + function lstat($filename) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + $filename = $this->_realpath($filename); + if ($filename === false) { + return false; + } + + if ($this->use_stat_cache) { + $result = $this->_query_stat_cache($filename); + if (is_array($result) && isset($result['.']) && isset($result['.']->lstat)) { + return $result['.']->lstat; + } + if (is_object($result) && isset($result->lstat)) { + return $result->lstat; + } + } + + $lstat = $this->_stat($filename, NET_SFTP_LSTAT); + if ($lstat === false) { + $this->_remove_from_stat_cache($filename); + return false; + } + if (isset($lstat['type'])) { + if ($lstat['type'] == NET_SFTP_TYPE_DIRECTORY) { + $filename.= '/.'; + } + $this->_update_stat_cache($filename, (object) array('lstat' => $lstat)); + return $lstat; + } + + $stat = $this->_stat($filename, NET_SFTP_STAT); + + if ($lstat != $stat) { + $lstat = array_merge($lstat, array('type' => NET_SFTP_TYPE_SYMLINK)); + $this->_update_stat_cache($filename, (object) array('lstat' => $lstat)); + return $stat; + } + + $pwd = $this->pwd; + $lstat['type'] = $this->chdir($filename) ? + NET_SFTP_TYPE_DIRECTORY : + NET_SFTP_TYPE_REGULAR; + $this->pwd = $pwd; + + if ($lstat['type'] == NET_SFTP_TYPE_DIRECTORY) { + $filename.= '/.'; + } + $this->_update_stat_cache($filename, (object) array('lstat' => $lstat)); + + return $lstat; + } + + /** + * Returns general information about a file or symbolic link + * + * Determines information without calling \phpseclib\Net\SFTP::realpath(). + * The second parameter can be either NET_SFTP_STAT or NET_SFTP_LSTAT. + * + * @param string $filename + * @param int $type + * @return mixed + * @access private + */ + function _stat($filename, $type) + { + // SFTPv4+ adds an additional 32-bit integer field - flags - to the following: + $packet = pack('Na*', strlen($filename), $filename); + if (!$this->_send_sftp_packet($type, $packet)) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_ATTRS: + return $this->_parseAttributes($response); + case NET_SFTP_STATUS: + $this->_logError($response); + return false; + } + + user_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS'); + return false; + } + + /** + * Truncates a file to a given length + * + * @param string $filename + * @param int $new_size + * @return bool + * @access public + */ + function truncate($filename, $new_size) + { + $attr = pack('N3', NET_SFTP_ATTR_SIZE, $new_size / 4294967296, $new_size); // 4294967296 == 0x100000000 == 1<<32 + + return $this->_setstat($filename, $attr, false); + } + + /** + * Sets access and modification time of file. + * + * If the file does not exist, it will be created. + * + * @param string $filename + * @param int $time + * @param int $atime + * @return bool + * @access public + */ + function touch($filename, $time = null, $atime = null) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + $filename = $this->_realpath($filename); + if ($filename === false) { + return false; + } + + if (!isset($time)) { + $time = time(); + } + if (!isset($atime)) { + $atime = $time; + } + + $flags = NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE | NET_SFTP_OPEN_EXCL; + $attr = pack('N3', NET_SFTP_ATTR_ACCESSTIME, $time, $atime); + $packet = pack('Na*Na*', strlen($filename), $filename, $flags, $attr); + if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_HANDLE: + return $this->_close_handle(substr($response, 4)); + case NET_SFTP_STATUS: + $this->_logError($response); + break; + default: + user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + return false; + } + + return $this->_setstat($filename, $attr, false); + } + + /** + * Changes file or directory owner + * + * Returns true on success or false on error. + * + * @param string $filename + * @param int $uid + * @param bool $recursive + * @return bool + * @access public + */ + function chown($filename, $uid, $recursive = false) + { + // quoting from , + // "if the owner or group is specified as -1, then that ID is not changed" + $attr = pack('N3', NET_SFTP_ATTR_UIDGID, $uid, -1); + + return $this->_setstat($filename, $attr, $recursive); + } + + /** + * Changes file or directory group + * + * Returns true on success or false on error. + * + * @param string $filename + * @param int $gid + * @param bool $recursive + * @return bool + * @access public + */ + function chgrp($filename, $gid, $recursive = false) + { + $attr = pack('N3', NET_SFTP_ATTR_UIDGID, -1, $gid); + + return $this->_setstat($filename, $attr, $recursive); + } + + /** + * Set permissions on a file. + * + * Returns the new file permissions on success or false on error. + * If $recursive is true than this just returns true or false. + * + * @param int $mode + * @param string $filename + * @param bool $recursive + * @return mixed + * @access public + */ + function chmod($mode, $filename, $recursive = false) + { + if (is_string($mode) && is_int($filename)) { + $temp = $mode; + $mode = $filename; + $filename = $temp; + } + + $attr = pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777); + if (!$this->_setstat($filename, $attr, $recursive)) { + return false; + } + if ($recursive) { + return true; + } + + $filename = $this->realpath($filename); + // rather than return what the permissions *should* be, we'll return what they actually are. this will also + // tell us if the file actually exists. + // incidentally, SFTPv4+ adds an additional 32-bit integer field - flags - to the following: + $packet = pack('Na*', strlen($filename), $filename); + if (!$this->_send_sftp_packet(NET_SFTP_STAT, $packet)) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_ATTRS: + $attrs = $this->_parseAttributes($response); + return $attrs['permissions']; + case NET_SFTP_STATUS: + $this->_logError($response); + return false; + } + + user_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS'); + return false; + } + + /** + * Sets information about a file + * + * @param string $filename + * @param string $attr + * @param bool $recursive + * @return bool + * @access private + */ + function _setstat($filename, $attr, $recursive) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + $filename = $this->_realpath($filename); + if ($filename === false) { + return false; + } + + $this->_remove_from_stat_cache($filename); + + if ($recursive) { + $i = 0; + $result = $this->_setstat_recursive($filename, $attr, $i); + $this->_read_put_responses($i); + return $result; + } + + // SFTPv4+ has an additional byte field - type - that would need to be sent, as well. setting it to + // SSH_FILEXFER_TYPE_UNKNOWN might work. if not, we'd have to do an SSH_FXP_STAT before doing an SSH_FXP_SETSTAT. + if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($filename), $filename, $attr))) { + return false; + } + + /* + "Because some systems must use separate system calls to set various attributes, it is possible that a failure + response will be returned, but yet some of the attributes may be have been successfully modified. If possible, + servers SHOULD avoid this situation; however, clients MUST be aware that this is possible." + + -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.6 + */ + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + user_error('Expected SSH_FXP_STATUS'); + return false; + } + + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + return false; + } + + return true; + } + + /** + * Recursively sets information on directories on the SFTP server + * + * Minimizes directory lookups and SSH_FXP_STATUS requests for speed. + * + * @param string $path + * @param string $attr + * @param int $i + * @return bool + * @access private + */ + function _setstat_recursive($path, $attr, &$i) + { + if (!$this->_read_put_responses($i)) { + return false; + } + $i = 0; + $entries = $this->_list($path, true); + + if ($entries === false) { + return $this->_setstat($path, $attr, false); + } + + // normally $entries would have at least . and .. but it might not if the directories + // permissions didn't allow reading + if (empty($entries)) { + return false; + } + + unset($entries['.'], $entries['..']); + foreach ($entries as $filename => $props) { + if (!isset($props['type'])) { + return false; + } + + $temp = $path . '/' . $filename; + if ($props['type'] == NET_SFTP_TYPE_DIRECTORY) { + if (!$this->_setstat_recursive($temp, $attr, $i)) { + return false; + } + } else { + if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($temp), $temp, $attr))) { + return false; + } + + $i++; + + if ($i >= NET_SFTP_QUEUE_SIZE) { + if (!$this->_read_put_responses($i)) { + return false; + } + $i = 0; + } + } + } + + if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($path), $path, $attr))) { + return false; + } + + $i++; + + if ($i >= NET_SFTP_QUEUE_SIZE) { + if (!$this->_read_put_responses($i)) { + return false; + } + $i = 0; + } + + return true; + } + + /** + * Return the target of a symbolic link + * + * @param string $link + * @return mixed + * @access public + */ + function readlink($link) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + $link = $this->_realpath($link); + + if (!$this->_send_sftp_packet(NET_SFTP_READLINK, pack('Na*', strlen($link), $link))) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_NAME: + break; + case NET_SFTP_STATUS: + $this->_logError($response); + return false; + default: + user_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS'); + return false; + } + + if (strlen($response) < 4) { + return false; + } + extract(unpack('Ncount', $this->_string_shift($response, 4))); + // the file isn't a symlink + if (!$count) { + return false; + } + + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + return $this->_string_shift($response, $length); + } + + /** + * Create a symlink + * + * symlink() creates a symbolic link to the existing target with the specified name link. + * + * @param string $target + * @param string $link + * @return bool + * @access public + */ + function symlink($target, $link) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + //$target = $this->_realpath($target); + $link = $this->_realpath($link); + + $packet = pack('Na*Na*', strlen($target), $target, strlen($link), $link); + if (!$this->_send_sftp_packet(NET_SFTP_SYMLINK, $packet)) { + return false; + } + + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + user_error('Expected SSH_FXP_STATUS'); + return false; + } + + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + return false; + } + + return true; + } + + /** + * Creates a directory. + * + * @param string $dir + * @param int $mode + * @param bool $recursive + * @return bool + * @access public + */ + function mkdir($dir, $mode = -1, $recursive = false) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + $dir = $this->_realpath($dir); + + if ($recursive) { + $dirs = explode('/', preg_replace('#/(?=/)|/$#', '', $dir)); + if (empty($dirs[0])) { + array_shift($dirs); + $dirs[0] = '/' . $dirs[0]; + } + for ($i = 0; $i < count($dirs); $i++) { + $temp = array_slice($dirs, 0, $i + 1); + $temp = implode('/', $temp); + $result = $this->_mkdir_helper($temp, $mode); + } + return $result; + } + + return $this->_mkdir_helper($dir, $mode); + } + + /** + * Helper function for directory creation + * + * @param string $dir + * @param int $mode + * @return bool + * @access private + */ + function _mkdir_helper($dir, $mode) + { + // send SSH_FXP_MKDIR without any attributes (that's what the \0\0\0\0 is doing) + if (!$this->_send_sftp_packet(NET_SFTP_MKDIR, pack('Na*a*', strlen($dir), $dir, "\0\0\0\0"))) { + return false; + } + + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + user_error('Expected SSH_FXP_STATUS'); + return false; + } + + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + return false; + } + + if ($mode !== -1) { + $this->chmod($mode, $dir); + } + + return true; + } + + /** + * Removes a directory. + * + * @param string $dir + * @return bool + * @access public + */ + function rmdir($dir) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + $dir = $this->_realpath($dir); + if ($dir === false) { + return false; + } + + if (!$this->_send_sftp_packet(NET_SFTP_RMDIR, pack('Na*', strlen($dir), $dir))) { + return false; + } + + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + user_error('Expected SSH_FXP_STATUS'); + return false; + } + + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED? + $this->_logError($response, $status); + return false; + } + + $this->_remove_from_stat_cache($dir); + // the following will do a soft delete, which would be useful if you deleted a file + // and then tried to do a stat on the deleted file. the above, in contrast, does + // a hard delete + //$this->_update_stat_cache($dir, false); + + return true; + } + + /** + * Uploads a file to the SFTP server. + * + * By default, \phpseclib\Net\SFTP::put() does not read from the local filesystem. $data is dumped directly into $remote_file. + * So, for example, if you set $data to 'filename.ext' and then do \phpseclib\Net\SFTP::get(), you will get a file, twelve bytes + * long, containing 'filename.ext' as its contents. + * + * Setting $mode to self::SOURCE_LOCAL_FILE will change the above behavior. With self::SOURCE_LOCAL_FILE, $remote_file will + * contain as many bytes as filename.ext does on your local filesystem. If your filename.ext is 1MB then that is how + * large $remote_file will be, as well. + * + * Setting $mode to self::SOURCE_CALLBACK will use $data as callback function, which gets only one parameter -- number of bytes to return, and returns a string if there is some data or null if there is no more data + * + * If $data is a resource then it'll be used as a resource instead. + * + * Currently, only binary mode is supported. As such, if the line endings need to be adjusted, you will need to take + * care of that, yourself. + * + * $mode can take an additional two parameters - self::RESUME and self::RESUME_START. These are bitwise AND'd with + * $mode. So if you want to resume upload of a 300mb file on the local file system you'd set $mode to the following: + * + * self::SOURCE_LOCAL_FILE | self::RESUME + * + * If you wanted to simply append the full contents of a local file to the full contents of a remote file you'd replace + * self::RESUME with self::RESUME_START. + * + * If $mode & (self::RESUME | self::RESUME_START) then self::RESUME_START will be assumed. + * + * $start and $local_start give you more fine grained control over this process and take precident over self::RESUME + * when they're non-negative. ie. $start could let you write at the end of a file (like self::RESUME) or in the middle + * of one. $local_start could let you start your reading from the end of a file (like self::RESUME_START) or in the + * middle of one. + * + * Setting $local_start to > 0 or $mode | self::RESUME_START doesn't do anything unless $mode | self::SOURCE_LOCAL_FILE. + * + * @param string $remote_file + * @param string|resource $data + * @param int $mode + * @param int $start + * @param int $local_start + * @param callable|null $progressCallback + * @return bool + * @access public + * @internal ASCII mode for SFTPv4/5/6 can be supported by adding a new function - \phpseclib\Net\SFTP::setMode(). + */ + function put($remote_file, $data, $mode = self::SOURCE_STRING, $start = -1, $local_start = -1, $progressCallback = null) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + $remote_file = $this->_realpath($remote_file); + if ($remote_file === false) { + return false; + } + + $this->_remove_from_stat_cache($remote_file); + + $flags = NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE; + // according to the SFTP specs, NET_SFTP_OPEN_APPEND should "force all writes to append data at the end of the file." + // in practice, it doesn't seem to do that. + //$flags|= ($mode & self::RESUME) ? NET_SFTP_OPEN_APPEND : NET_SFTP_OPEN_TRUNCATE; + + if ($start >= 0) { + $offset = $start; + } elseif ($mode & self::RESUME) { + // if NET_SFTP_OPEN_APPEND worked as it should _size() wouldn't need to be called + $size = $this->size($remote_file); + $offset = $size !== false ? $size : 0; + } else { + $offset = 0; + $flags|= NET_SFTP_OPEN_TRUNCATE; + } + + $packet = pack('Na*N2', strlen($remote_file), $remote_file, $flags, 0); + if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_HANDLE: + $handle = substr($response, 4); + break; + case NET_SFTP_STATUS: + $this->_logError($response); + return false; + default: + user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + return false; + } + + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.3 + $dataCallback = false; + switch (true) { + case $mode & self::SOURCE_CALLBACK: + if (!is_callable($data)) { + user_error("\$data should be is_callable() if you specify SOURCE_CALLBACK flag"); + } + $dataCallback = $data; + // do nothing + break; + case is_resource($data): + $mode = $mode & ~self::SOURCE_LOCAL_FILE; + $info = stream_get_meta_data($data); + if ($info['wrapper_type'] == 'PHP' && $info['stream_type'] == 'Input') { + $fp = fopen('php://memory', 'w+'); + stream_copy_to_stream($data, $fp); + rewind($fp); + } else { + $fp = $data; + } + break; + case $mode & self::SOURCE_LOCAL_FILE: + if (!is_file($data)) { + user_error("$data is not a valid file"); + return false; + } + $fp = @fopen($data, 'rb'); + if (!$fp) { + return false; + } + } + + if (isset($fp)) { + $stat = fstat($fp); + $size = !empty($stat) ? $stat['size'] : 0; + + if ($local_start >= 0) { + fseek($fp, $local_start); + $size-= $local_start; + } + } elseif ($dataCallback) { + $size = 0; + } else { + $size = strlen($data); + } + + $sent = 0; + $size = $size < 0 ? ($size & 0x7FFFFFFF) + 0x80000000 : $size; + + $sftp_packet_size = $this->max_sftp_packet; + // make the SFTP packet be exactly the SFTP packet size by including the bytes in the NET_SFTP_WRITE packets "header" + $sftp_packet_size-= strlen($handle) + 25; + $i = $j = 0; + while ($dataCallback || ($size === 0 || $sent < $size)) { + if ($dataCallback) { + $temp = call_user_func($dataCallback, $sftp_packet_size); + if (is_null($temp)) { + break; + } + } else { + $temp = isset($fp) ? fread($fp, $sftp_packet_size) : substr($data, $sent, $sftp_packet_size); + if ($temp === false || $temp === '') { + break; + } + } + + $subtemp = $offset + $sent; + $packet = pack('Na*N3a*', strlen($handle), $handle, $subtemp / 4294967296, $subtemp, strlen($temp), $temp); + if (!$this->_send_sftp_packet(NET_SFTP_WRITE, $packet, $j)) { + if ($mode & self::SOURCE_LOCAL_FILE) { + fclose($fp); + } + return false; + } + $sent+= strlen($temp); + if (is_callable($progressCallback)) { + call_user_func($progressCallback, $sent); + } + + $i++; + $j++; + + if ($i == NET_SFTP_UPLOAD_QUEUE_SIZE) { + if (!$this->_read_put_responses($i)) { + $i = 0; + break; + } + $i = 0; + } + } + + if (!$this->_read_put_responses($i)) { + if ($mode & self::SOURCE_LOCAL_FILE) { + fclose($fp); + } + $this->_close_handle($handle); + return false; + } + + if ($mode & self::SOURCE_LOCAL_FILE) { + if ($this->preserveTime) { + $stat = fstat($fp); + $this->touch($remote_file, $stat['mtime'], $stat['atime']); + } + + if (isset($fp) && is_resource($fp)) { + fclose($fp); + } + } + + return $this->_close_handle($handle); + } + + /** + * Reads multiple successive SSH_FXP_WRITE responses + * + * Sending an SSH_FXP_WRITE packet and immediately reading its response isn't as efficient as blindly sending out $i + * SSH_FXP_WRITEs, in succession, and then reading $i responses. + * + * @param int $i + * @return bool + * @access private + */ + function _read_put_responses($i) + { + while ($i--) { + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + user_error('Expected SSH_FXP_STATUS'); + return false; + } + + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + break; + } + } + + return $i < 0; + } + + /** + * Close handle + * + * @param string $handle + * @return bool + * @access private + */ + function _close_handle($handle) + { + if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) { + return false; + } + + // "The client MUST release all resources associated with the handle regardless of the status." + // -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.3 + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + user_error('Expected SSH_FXP_STATUS'); + return false; + } + + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + return false; + } + + return true; + } + + /** + * Downloads a file from the SFTP server. + * + * Returns a string containing the contents of $remote_file if $local_file is left undefined or a boolean false if + * the operation was unsuccessful. If $local_file is defined, returns true or false depending on the success of the + * operation. + * + * $offset and $length can be used to download files in chunks. + * + * @param string $remote_file + * @param string $local_file + * @param int $offset + * @param int $length + * @param callable|null $progressCallback + * @return mixed + * @access public + */ + function get($remote_file, $local_file = false, $offset = 0, $length = -1, $progressCallback = null) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + $remote_file = $this->_realpath($remote_file); + if ($remote_file === false) { + return false; + } + + $packet = pack('Na*N2', strlen($remote_file), $remote_file, NET_SFTP_OPEN_READ, 0); + if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_HANDLE: + $handle = substr($response, 4); + break; + case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED + $this->_logError($response); + return false; + default: + user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + return false; + } + + if (is_resource($local_file)) { + $fp = $local_file; + $stat = fstat($fp); + $res_offset = $stat['size']; + } else { + $res_offset = 0; + if ($local_file !== false && !is_callable($local_file)) { + $fp = fopen($local_file, 'wb'); + if (!$fp) { + return false; + } + } else { + $content = ''; + } + } + + $fclose_check = $local_file !== false && !is_callable($local_file) && !is_resource($local_file); + + $start = $offset; + $read = 0; + while (true) { + $i = 0; + + while ($i < NET_SFTP_QUEUE_SIZE && ($length < 0 || $read < $length)) { + $tempoffset = $start + $read; + + $packet_size = $length > 0 ? min($this->max_sftp_packet, $length - $read) : $this->max_sftp_packet; + + $packet = pack('Na*N3', strlen($handle), $handle, $tempoffset / 4294967296, $tempoffset, $packet_size); + if (!$this->_send_sftp_packet(NET_SFTP_READ, $packet, $i)) { + if ($fclose_check) { + fclose($fp); + } + return false; + } + $packet = null; + $read+= $packet_size; + $i++; + } + + if (!$i) { + break; + } + + $packets_sent = $i - 1; + + $clear_responses = false; + while ($i > 0) { + $i--; + + if ($clear_responses) { + $this->_get_sftp_packet($packets_sent - $i); + continue; + } else { + $response = $this->_get_sftp_packet($packets_sent - $i); + } + + switch ($this->packet_type) { + case NET_SFTP_DATA: + $temp = substr($response, 4); + $offset+= strlen($temp); + if ($local_file === false) { + $content.= $temp; + } elseif (is_callable($local_file)) { + $local_file($temp); + } else { + fputs($fp, $temp); + } + if (is_callable($progressCallback)) { + call_user_func($progressCallback, $offset); + } + $temp = null; + break; + case NET_SFTP_STATUS: + // could, in theory, return false if !strlen($content) but we'll hold off for the time being + $this->_logError($response); + $clear_responses = true; // don't break out of the loop yet, so we can read the remaining responses + break; + default: + if ($fclose_check) { + fclose($fp); + } + user_error('Expected SSH_FX_DATA or SSH_FXP_STATUS'); + } + $response = null; + } + + if ($clear_responses) { + break; + } + } + + if ($length > 0 && $length <= $offset - $start) { + if ($local_file === false) { + $content = substr($content, 0, $length); + } else { + ftruncate($fp, $length + $res_offset); + } + } + + if ($fclose_check) { + fclose($fp); + + if ($this->preserveTime) { + $stat = $this->stat($remote_file); + touch($local_file, $stat['mtime'], $stat['atime']); + } + } + + if (!$this->_close_handle($handle)) { + return false; + } + + // if $content isn't set that means a file was written to + return isset($content) ? $content : true; + } + + /** + * Deletes a file on the SFTP server. + * + * @param string $path + * @param bool $recursive + * @return bool + * @access public + */ + function delete($path, $recursive = true) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + if (is_object($path)) { + // It's an object. Cast it as string before we check anything else. + $path = (string) $path; + } + + if (!is_string($path) || $path == '') { + return false; + } + + $path = $this->_realpath($path); + if ($path === false) { + return false; + } + + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3 + if (!$this->_send_sftp_packet(NET_SFTP_REMOVE, pack('Na*', strlen($path), $path))) { + return false; + } + + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + user_error('Expected SSH_FXP_STATUS'); + return false; + } + + // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + if (!$recursive) { + return false; + } + $i = 0; + $result = $this->_delete_recursive($path, $i); + $this->_read_put_responses($i); + return $result; + } + + $this->_remove_from_stat_cache($path); + + return true; + } + + /** + * Recursively deletes directories on the SFTP server + * + * Minimizes directory lookups and SSH_FXP_STATUS requests for speed. + * + * @param string $path + * @param int $i + * @return bool + * @access private + */ + function _delete_recursive($path, &$i) + { + if (!$this->_read_put_responses($i)) { + return false; + } + $i = 0; + $entries = $this->_list($path, true); + + // normally $entries would have at least . and .. but it might not if the directories + // permissions didn't allow reading + if (empty($entries)) { + return false; + } + + unset($entries['.'], $entries['..']); + foreach ($entries as $filename => $props) { + if (!isset($props['type'])) { + return false; + } + + $temp = $path . '/' . $filename; + if ($props['type'] == NET_SFTP_TYPE_DIRECTORY) { + if (!$this->_delete_recursive($temp, $i)) { + return false; + } + } else { + if (!$this->_send_sftp_packet(NET_SFTP_REMOVE, pack('Na*', strlen($temp), $temp))) { + return false; + } + $this->_remove_from_stat_cache($temp); + + $i++; + + if ($i >= NET_SFTP_QUEUE_SIZE) { + if (!$this->_read_put_responses($i)) { + return false; + } + $i = 0; + } + } + } + + if (!$this->_send_sftp_packet(NET_SFTP_RMDIR, pack('Na*', strlen($path), $path))) { + return false; + } + $this->_remove_from_stat_cache($path); + + $i++; + + if ($i >= NET_SFTP_QUEUE_SIZE) { + if (!$this->_read_put_responses($i)) { + return false; + } + $i = 0; + } + + return true; + } + + /** + * Checks whether a file or directory exists + * + * @param string $path + * @return bool + * @access public + */ + function file_exists($path) + { + if ($this->use_stat_cache) { + $path = $this->_realpath($path); + + $result = $this->_query_stat_cache($path); + + if (isset($result)) { + // return true if $result is an array or if it's an stdClass object + return $result !== false; + } + } + + return $this->stat($path) !== false; + } + + /** + * Tells whether the filename is a directory + * + * @param string $path + * @return bool + * @access public + */ + function is_dir($path) + { + $result = $this->_get_stat_cache_prop($path, 'type'); + if ($result === false) { + return false; + } + return $result === NET_SFTP_TYPE_DIRECTORY; + } + + /** + * Tells whether the filename is a regular file + * + * @param string $path + * @return bool + * @access public + */ + function is_file($path) + { + $result = $this->_get_stat_cache_prop($path, 'type'); + if ($result === false) { + return false; + } + return $result === NET_SFTP_TYPE_REGULAR; + } + + /** + * Tells whether the filename is a symbolic link + * + * @param string $path + * @return bool + * @access public + */ + function is_link($path) + { + $result = $this->_get_lstat_cache_prop($path, 'type'); + if ($result === false) { + return false; + } + return $result === NET_SFTP_TYPE_SYMLINK; + } + + /** + * Tells whether a file exists and is readable + * + * @param string $path + * @return bool + * @access public + */ + function is_readable($path) + { + $path = $this->_realpath($path); + + $packet = pack('Na*N2', strlen($path), $path, NET_SFTP_OPEN_READ, 0); + if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_HANDLE: + return true; + case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED + return false; + default: + user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + return false; + } + } + + /** + * Tells whether the filename is writable + * + * @param string $path + * @return bool + * @access public + */ + function is_writable($path) + { + $path = $this->_realpath($path); + + $packet = pack('Na*N2', strlen($path), $path, NET_SFTP_OPEN_WRITE, 0); + if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) { + return false; + } + + $response = $this->_get_sftp_packet(); + switch ($this->packet_type) { + case NET_SFTP_HANDLE: + return true; + case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED + return false; + default: + user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS'); + return false; + } + } + + /** + * Tells whether the filename is writeable + * + * Alias of is_writable + * + * @param string $path + * @return bool + * @access public + */ + function is_writeable($path) + { + return $this->is_writable($path); + } + + /** + * Gets last access time of file + * + * @param string $path + * @return mixed + * @access public + */ + function fileatime($path) + { + return $this->_get_stat_cache_prop($path, 'atime'); + } + + /** + * Gets file modification time + * + * @param string $path + * @return mixed + * @access public + */ + function filemtime($path) + { + return $this->_get_stat_cache_prop($path, 'mtime'); + } + + /** + * Gets file permissions + * + * @param string $path + * @return mixed + * @access public + */ + function fileperms($path) + { + return $this->_get_stat_cache_prop($path, 'permissions'); + } + + /** + * Gets file owner + * + * @param string $path + * @return mixed + * @access public + */ + function fileowner($path) + { + return $this->_get_stat_cache_prop($path, 'uid'); + } + + /** + * Gets file group + * + * @param string $path + * @return mixed + * @access public + */ + function filegroup($path) + { + return $this->_get_stat_cache_prop($path, 'gid'); + } + + /** + * Gets file size + * + * @param string $path + * @return mixed + * @access public + */ + function filesize($path) + { + return $this->_get_stat_cache_prop($path, 'size'); + } + + /** + * Gets file type + * + * @param string $path + * @return mixed + * @access public + */ + function filetype($path) + { + $type = $this->_get_stat_cache_prop($path, 'type'); + if ($type === false) { + return false; + } + + switch ($type) { + case NET_SFTP_TYPE_BLOCK_DEVICE: + return 'block'; + case NET_SFTP_TYPE_CHAR_DEVICE: + return 'char'; + case NET_SFTP_TYPE_DIRECTORY: + return 'dir'; + case NET_SFTP_TYPE_FIFO: + return 'fifo'; + case NET_SFTP_TYPE_REGULAR: + return 'file'; + case NET_SFTP_TYPE_SYMLINK: + return 'link'; + default: + return false; + } + } + + /** + * Return a stat properity + * + * Uses cache if appropriate. + * + * @param string $path + * @param string $prop + * @return mixed + * @access private + */ + function _get_stat_cache_prop($path, $prop) + { + return $this->_get_xstat_cache_prop($path, $prop, 'stat'); + } + + /** + * Return an lstat properity + * + * Uses cache if appropriate. + * + * @param string $path + * @param string $prop + * @return mixed + * @access private + */ + function _get_lstat_cache_prop($path, $prop) + { + return $this->_get_xstat_cache_prop($path, $prop, 'lstat'); + } + + /** + * Return a stat or lstat properity + * + * Uses cache if appropriate. + * + * @param string $path + * @param string $prop + * @param mixed $type + * @return mixed + * @access private + */ + function _get_xstat_cache_prop($path, $prop, $type) + { + if ($this->use_stat_cache) { + $path = $this->_realpath($path); + + $result = $this->_query_stat_cache($path); + + if (is_object($result) && isset($result->$type)) { + return $result->{$type}[$prop]; + } + } + + $result = $this->$type($path); + + if ($result === false || !isset($result[$prop])) { + return false; + } + + return $result[$prop]; + } + + /** + * Renames a file or a directory on the SFTP server + * + * @param string $oldname + * @param string $newname + * @return bool + * @access public + */ + function rename($oldname, $newname) + { + if (!($this->bitmap & SSH2::MASK_LOGIN)) { + return false; + } + + $oldname = $this->_realpath($oldname); + $newname = $this->_realpath($newname); + if ($oldname === false || $newname === false) { + return false; + } + + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3 + $packet = pack('Na*Na*', strlen($oldname), $oldname, strlen($newname), $newname); + if (!$this->_send_sftp_packet(NET_SFTP_RENAME, $packet)) { + return false; + } + + $response = $this->_get_sftp_packet(); + if ($this->packet_type != NET_SFTP_STATUS) { + user_error('Expected SSH_FXP_STATUS'); + return false; + } + + // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nstatus', $this->_string_shift($response, 4))); + if ($status != NET_SFTP_STATUS_OK) { + $this->_logError($response, $status); + return false; + } + + // don't move the stat cache entry over since this operation could very well change the + // atime and mtime attributes + //$this->_update_stat_cache($newname, $this->_query_stat_cache($oldname)); + $this->_remove_from_stat_cache($oldname); + $this->_remove_from_stat_cache($newname); + + return true; + } + + /** + * Parse Attributes + * + * See '7. File Attributes' of draft-ietf-secsh-filexfer-13 for more info. + * + * @param string $response + * @return array + * @access private + */ + function _parseAttributes(&$response) + { + $attr = array(); + if (strlen($response) < 4) { + user_error('Malformed file attributes'); + return array(); + } + extract(unpack('Nflags', $this->_string_shift($response, 4))); + // SFTPv4+ have a type field (a byte) that follows the above flag field + foreach ($this->attributes as $key => $value) { + switch ($flags & $key) { + case NET_SFTP_ATTR_SIZE: // 0x00000001 + // The size attribute is defined as an unsigned 64-bit integer. + // The following will use floats on 32-bit platforms, if necessary. + // As can be seen in the BigInteger class, floats are generally + // IEEE 754 binary64 "double precision" on such platforms and + // as such can represent integers of at least 2^50 without loss + // of precision. Interpreted in filesize, 2^50 bytes = 1024 TiB. + $attr['size'] = hexdec(bin2hex($this->_string_shift($response, 8))); + break; + case NET_SFTP_ATTR_UIDGID: // 0x00000002 (SFTPv3 only) + if (strlen($response) < 8) { + user_error('Malformed file attributes'); + return $attr; + } + $attr+= unpack('Nuid/Ngid', $this->_string_shift($response, 8)); + break; + case NET_SFTP_ATTR_PERMISSIONS: // 0x00000004 + if (strlen($response) < 4) { + user_error('Malformed file attributes'); + return $attr; + } + $attr+= unpack('Npermissions', $this->_string_shift($response, 4)); + // mode == permissions; permissions was the original array key and is retained for bc purposes. + // mode was added because that's the more industry standard terminology + $attr+= array('mode' => $attr['permissions']); + $fileType = $this->_parseMode($attr['permissions']); + if ($fileType !== false) { + $attr+= array('type' => $fileType); + } + break; + case NET_SFTP_ATTR_ACCESSTIME: // 0x00000008 + if (strlen($response) < 8) { + user_error('Malformed file attributes'); + return $attr; + } + $attr+= unpack('Natime/Nmtime', $this->_string_shift($response, 8)); + break; + case NET_SFTP_ATTR_EXTENDED: // 0x80000000 + if (strlen($response) < 4) { + user_error('Malformed file attributes'); + return $attr; + } + extract(unpack('Ncount', $this->_string_shift($response, 4))); + for ($i = 0; $i < $count; $i++) { + if (strlen($response) < 4) { + user_error('Malformed file attributes'); + return $attr; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $key = $this->_string_shift($response, $length); + if (strlen($response) < 4) { + user_error('Malformed file attributes'); + return $attr; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $attr[$key] = $this->_string_shift($response, $length); + } + } + } + return $attr; + } + + /** + * Attempt to identify the file type + * + * Quoting the SFTP RFC, "Implementations MUST NOT send bits that are not defined" but they seem to anyway + * + * @param int $mode + * @return int + * @access private + */ + function _parseMode($mode) + { + // values come from http://lxr.free-electrons.com/source/include/uapi/linux/stat.h#L12 + // see, also, http://linux.die.net/man/2/stat + switch ($mode & 0170000) {// ie. 1111 0000 0000 0000 + case 0000000: // no file type specified - figure out the file type using alternative means + return false; + case 0040000: + return NET_SFTP_TYPE_DIRECTORY; + case 0100000: + return NET_SFTP_TYPE_REGULAR; + case 0120000: + return NET_SFTP_TYPE_SYMLINK; + // new types introduced in SFTPv5+ + // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-05#section-5.2 + case 0010000: // named pipe (fifo) + return NET_SFTP_TYPE_FIFO; + case 0020000: // character special + return NET_SFTP_TYPE_CHAR_DEVICE; + case 0060000: // block special + return NET_SFTP_TYPE_BLOCK_DEVICE; + case 0140000: // socket + return NET_SFTP_TYPE_SOCKET; + case 0160000: // whiteout + // "SPECIAL should be used for files that are of + // a known type which cannot be expressed in the protocol" + return NET_SFTP_TYPE_SPECIAL; + default: + return NET_SFTP_TYPE_UNKNOWN; + } + } + + /** + * Parse Longname + * + * SFTPv3 doesn't provide any easy way of identifying a file type. You could try to open + * a file as a directory and see if an error is returned or you could try to parse the + * SFTPv3-specific longname field of the SSH_FXP_NAME packet. That's what this function does. + * The result is returned using the + * {@link http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2 SFTPv4 type constants}. + * + * If the longname is in an unrecognized format bool(false) is returned. + * + * @param string $longname + * @return mixed + * @access private + */ + function _parseLongname($longname) + { + // http://en.wikipedia.org/wiki/Unix_file_types + // http://en.wikipedia.org/wiki/Filesystem_permissions#Notation_of_traditional_Unix_permissions + if (preg_match('#^[^/]([r-][w-][xstST-]){3}#', $longname)) { + switch ($longname[0]) { + case '-': + return NET_SFTP_TYPE_REGULAR; + case 'd': + return NET_SFTP_TYPE_DIRECTORY; + case 'l': + return NET_SFTP_TYPE_SYMLINK; + default: + return NET_SFTP_TYPE_SPECIAL; + } + } + + return false; + } + + /** + * Sends SFTP Packets + * + * See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info. + * + * @param int $type + * @param string $data + * @param int $request_id + * @see self::_get_sftp_packet() + * @see self::_send_channel_packet() + * @return bool + * @access private + */ + function _send_sftp_packet($type, $data, $request_id = 1) + { + // in SSH2.php the timeout is cumulative per function call. eg. exec() will + // timeout after 10s. but for SFTP.php it's cumulative per packet + $this->curTimeout = $this->timeout; + + $packet = $this->use_request_id ? + pack('NCNa*', strlen($data) + 5, $type, $request_id, $data) : + pack('NCa*', strlen($data) + 1, $type, $data); + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 + $result = $this->_send_channel_packet(self::CHANNEL, $packet); + $stop = strtok(microtime(), ' ') + strtok(''); + + if (defined('NET_SFTP_LOGGING')) { + $packet_type = '-> ' . $this->packet_types[$type] . + ' (' . round($stop - $start, 4) . 's)'; + if (NET_SFTP_LOGGING == self::LOG_REALTIME) { + echo "
        \r\n" . $this->_format_log(array($data), array($packet_type)) . "\r\n
        \r\n"; + flush(); + ob_flush(); + } else { + $this->packet_type_log[] = $packet_type; + if (NET_SFTP_LOGGING == self::LOG_COMPLEX) { + $this->packet_log[] = $data; + } + } + } + + return $result; + } + + /** + * Resets a connection for re-use + * + * @param int $reason + * @access private + */ + function _reset_connection($reason) + { + parent::_reset_connection($reason); + $this->use_request_id = false; + $this->pwd = false; + $this->requestBuffer = array(); + } + + /** + * Receives SFTP Packets + * + * See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info. + * + * Incidentally, the number of SSH_MSG_CHANNEL_DATA messages has no bearing on the number of SFTP packets present. + * There can be one SSH_MSG_CHANNEL_DATA messages containing two SFTP packets or there can be two SSH_MSG_CHANNEL_DATA + * messages containing one SFTP packet. + * + * @see self::_send_sftp_packet() + * @return string + * @access private + */ + function _get_sftp_packet($request_id = null) + { + if (isset($request_id) && isset($this->requestBuffer[$request_id])) { + $this->packet_type = $this->requestBuffer[$request_id]['packet_type']; + $temp = $this->requestBuffer[$request_id]['packet']; + unset($this->requestBuffer[$request_id]); + return $temp; + } + + // in SSH2.php the timeout is cumulative per function call. eg. exec() will + // timeout after 10s. but for SFTP.php it's cumulative per packet + $this->curTimeout = $this->timeout; + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 + + // SFTP packet length + while (strlen($this->packet_buffer) < 4) { + $temp = $this->_get_channel_packet(self::CHANNEL, true); + if (is_bool($temp)) { + $this->packet_type = false; + $this->packet_buffer = ''; + return false; + } + $this->packet_buffer.= $temp; + } + if (strlen($this->packet_buffer) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($this->packet_buffer, 4))); + $tempLength = $length; + $tempLength-= strlen($this->packet_buffer); + + + // 256 * 1024 is what SFTP_MAX_MSG_LENGTH is set to in OpenSSH's sftp-common.h + if ($tempLength > 256 * 1024) { + user_error('Invalid SFTP packet size'); + return false; + } + + // SFTP packet type and data payload + while ($tempLength > 0) { + $temp = $this->_get_channel_packet(self::CHANNEL, true); + if (is_bool($temp)) { + $this->packet_type = false; + $this->packet_buffer = ''; + return false; + } + $this->packet_buffer.= $temp; + $tempLength-= strlen($temp); + } + + $stop = strtok(microtime(), ' ') + strtok(''); + + $this->packet_type = ord($this->_string_shift($this->packet_buffer)); + + if ($this->use_request_id) { + extract(unpack('Npacket_id', $this->_string_shift($this->packet_buffer, 4))); // remove the request id + $length-= 5; // account for the request id and the packet type + } else { + $length-= 1; // account for the packet type + } + + $packet = $this->_string_shift($this->packet_buffer, $length); + + if (defined('NET_SFTP_LOGGING')) { + $packet_type = '<- ' . $this->packet_types[$this->packet_type] . + ' (' . round($stop - $start, 4) . 's)'; + if (NET_SFTP_LOGGING == self::LOG_REALTIME) { + echo "
        \r\n" . $this->_format_log(array($packet), array($packet_type)) . "\r\n
        \r\n"; + flush(); + ob_flush(); + } else { + $this->packet_type_log[] = $packet_type; + if (NET_SFTP_LOGGING == self::LOG_COMPLEX) { + $this->packet_log[] = $packet; + } + } + } + + if (isset($request_id) && $this->use_request_id && $packet_id != $request_id) { + $this->requestBuffer[$packet_id] = array( + 'packet_type' => $this->packet_type, + 'packet' => $packet + ); + return $this->_get_sftp_packet($request_id); + } + + return $packet; + } + + /** + * Returns a log of the packets that have been sent and received. + * + * Returns a string if NET_SFTP_LOGGING == NET_SFTP_LOG_COMPLEX, an array if NET_SFTP_LOGGING == NET_SFTP_LOG_SIMPLE and false if !defined('NET_SFTP_LOGGING') + * + * @access public + * @return string or Array + */ + function getSFTPLog() + { + if (!defined('NET_SFTP_LOGGING')) { + return false; + } + + switch (NET_SFTP_LOGGING) { + case self::LOG_COMPLEX: + return $this->_format_log($this->packet_log, $this->packet_type_log); + break; + //case self::LOG_SIMPLE: + default: + return $this->packet_type_log; + } + } + + /** + * Returns all errors + * + * @return array + * @access public + */ + function getSFTPErrors() + { + return $this->sftp_errors; + } + + /** + * Returns the last error + * + * @return string + * @access public + */ + function getLastSFTPError() + { + return count($this->sftp_errors) ? $this->sftp_errors[count($this->sftp_errors) - 1] : ''; + } + + /** + * Get supported SFTP versions + * + * @return array + * @access public + */ + function getSupportedVersions() + { + $temp = array('version' => $this->version); + if (isset($this->extensions['versions'])) { + $temp['extensions'] = $this->extensions['versions']; + } + return $temp; + } + + /** + * Disconnect + * + * @param int $reason + * @return bool + * @access private + */ + function _disconnect($reason) + { + $this->pwd = false; + parent::_disconnect($reason); + } + + /** + * Enable Date Preservation + * + * @access public + */ + function enableDatePreservation() + { + $this->preserveTime = true; + } + + /** + * Disable Date Preservation + * + * @access public + */ + function disableDatePreservation() + { + $this->preserveTime = false; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php b/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php new file mode 100644 index 000000000..1a44b10a0 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php @@ -0,0 +1,794 @@ + + * @copyright 2013 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Net\SFTP; + +use phpseclib\Crypt\RSA; +use phpseclib\Net\SFTP; + +/** + * SFTP Stream Wrapper + * + * @package SFTP + * @author Jim Wigginton + * @access public + */ +class Stream +{ + /** + * SFTP instances + * + * Rather than re-create the connection we re-use instances if possible + * + * @var array + */ + static $instances; + + /** + * SFTP instance + * + * @var object + * @access private + */ + var $sftp; + + /** + * Path + * + * @var string + * @access private + */ + var $path; + + /** + * Mode + * + * @var string + * @access private + */ + var $mode; + + /** + * Position + * + * @var int + * @access private + */ + var $pos; + + /** + * Size + * + * @var int + * @access private + */ + var $size; + + /** + * Directory entries + * + * @var array + * @access private + */ + var $entries; + + /** + * EOF flag + * + * @var bool + * @access private + */ + var $eof; + + /** + * Context resource + * + * Technically this needs to be publically accessible so PHP can set it directly + * + * @var resource + * @access public + */ + var $context; + + /** + * Notification callback function + * + * @var callable + * @access public + */ + var $notification; + + /** + * Registers this class as a URL wrapper. + * + * @param string $protocol The wrapper name to be registered. + * @return bool True on success, false otherwise. + * @access public + */ + static function register($protocol = 'sftp') + { + if (in_array($protocol, stream_get_wrappers(), true)) { + return false; + } + return stream_wrapper_register($protocol, get_called_class()); + } + + /** + * The Constructor + * + * @access public + */ + function __construct() + { + if (defined('NET_SFTP_STREAM_LOGGING')) { + echo "__construct()\r\n"; + } + } + + /** + * Path Parser + * + * Extract a path from a URI and actually connect to an SSH server if appropriate + * + * If "notification" is set as a context parameter the message code for successful login is + * NET_SSH2_MSG_USERAUTH_SUCCESS. For a failed login it's NET_SSH2_MSG_USERAUTH_FAILURE. + * + * @param string $path + * @return string + * @access private + */ + function _parse_path($path) + { + $orig = $path; + extract(parse_url($path) + array('port' => 22)); + if (isset($query)) { + $path.= '?' . $query; + } elseif (preg_match('/(\?|\?#)$/', $orig)) { + $path.= '?'; + } + if (isset($fragment)) { + $path.= '#' . $fragment; + } elseif ($orig[strlen($orig) - 1] == '#') { + $path.= '#'; + } + + if (!isset($host)) { + return false; + } + + if (isset($this->context)) { + $context = stream_context_get_params($this->context); + if (isset($context['notification'])) { + $this->notification = $context['notification']; + } + } + + if ($host[0] == '$') { + $host = substr($host, 1); + global ${$host}; + if (($$host instanceof SFTP) === false) { + return false; + } + $this->sftp = $$host; + } else { + if (isset($this->context)) { + $context = stream_context_get_options($this->context); + } + if (isset($context[$scheme]['session'])) { + $sftp = $context[$scheme]['session']; + } + if (isset($context[$scheme]['sftp'])) { + $sftp = $context[$scheme]['sftp']; + } + if (isset($sftp) && $sftp instanceof SFTP) { + $this->sftp = $sftp; + return $path; + } + if (isset($context[$scheme]['username'])) { + $user = $context[$scheme]['username']; + } + if (isset($context[$scheme]['password'])) { + $pass = $context[$scheme]['password']; + } + if (isset($context[$scheme]['privkey']) && $context[$scheme]['privkey'] instanceof RSA) { + $pass = $context[$scheme]['privkey']; + } + + if (!isset($user) || !isset($pass)) { + return false; + } + + // casting $pass to a string is necessary in the event that it's a \phpseclib\Crypt\RSA object + if (isset(self::$instances[$host][$port][$user][(string) $pass])) { + $this->sftp = self::$instances[$host][$port][$user][(string) $pass]; + } else { + $this->sftp = new SFTP($host, $port); + $this->sftp->disableStatCache(); + if (isset($this->notification) && is_callable($this->notification)) { + /* if !is_callable($this->notification) we could do this: + + user_error('fopen(): failed to call user notifier', E_USER_WARNING); + + the ftp wrapper gives errors like that when the notifier isn't callable. + i've opted not to do that, however, since the ftp wrapper gives the line + on which the fopen occurred as the line number - not the line that the + user_error is on. + */ + call_user_func($this->notification, STREAM_NOTIFY_CONNECT, STREAM_NOTIFY_SEVERITY_INFO, '', 0, 0, 0); + call_user_func($this->notification, STREAM_NOTIFY_AUTH_REQUIRED, STREAM_NOTIFY_SEVERITY_INFO, '', 0, 0, 0); + if (!$this->sftp->login($user, $pass)) { + call_user_func($this->notification, STREAM_NOTIFY_AUTH_RESULT, STREAM_NOTIFY_SEVERITY_ERR, 'Login Failure', NET_SSH2_MSG_USERAUTH_FAILURE, 0, 0); + return false; + } + call_user_func($this->notification, STREAM_NOTIFY_AUTH_RESULT, STREAM_NOTIFY_SEVERITY_INFO, 'Login Success', NET_SSH2_MSG_USERAUTH_SUCCESS, 0, 0); + } else { + if (!$this->sftp->login($user, $pass)) { + return false; + } + } + self::$instances[$host][$port][$user][(string) $pass] = $this->sftp; + } + } + + return $path; + } + + /** + * Opens file or URL + * + * @param string $path + * @param string $mode + * @param int $options + * @param string $opened_path + * @return bool + * @access public + */ + function _stream_open($path, $mode, $options, &$opened_path) + { + $path = $this->_parse_path($path); + + if ($path === false) { + return false; + } + $this->path = $path; + + $this->size = $this->sftp->size($path); + $this->mode = preg_replace('#[bt]$#', '', $mode); + $this->eof = false; + + if ($this->size === false) { + if ($this->mode[0] == 'r') { + return false; + } else { + $this->sftp->touch($path); + $this->size = 0; + } + } else { + switch ($this->mode[0]) { + case 'x': + return false; + case 'w': + $this->sftp->truncate($path, 0); + $this->size = 0; + } + } + + $this->pos = $this->mode[0] != 'a' ? 0 : $this->size; + + return true; + } + + /** + * Read from stream + * + * @param int $count + * @return mixed + * @access public + */ + function _stream_read($count) + { + switch ($this->mode) { + case 'w': + case 'a': + case 'x': + case 'c': + return false; + } + + // commented out because some files - eg. /dev/urandom - will say their size is 0 when in fact it's kinda infinite + //if ($this->pos >= $this->size) { + // $this->eof = true; + // return false; + //} + + $result = $this->sftp->get($this->path, false, $this->pos, $count); + if (isset($this->notification) && is_callable($this->notification)) { + if ($result === false) { + call_user_func($this->notification, STREAM_NOTIFY_FAILURE, STREAM_NOTIFY_SEVERITY_ERR, $this->sftp->getLastSFTPError(), NET_SFTP_OPEN, 0, 0); + return 0; + } + // seems that PHP calls stream_read in 8k chunks + call_user_func($this->notification, STREAM_NOTIFY_PROGRESS, STREAM_NOTIFY_SEVERITY_INFO, '', 0, strlen($result), $this->size); + } + + if (empty($result)) { // ie. false or empty string + $this->eof = true; + return false; + } + $this->pos+= strlen($result); + + return $result; + } + + /** + * Write to stream + * + * @param string $data + * @return mixed + * @access public + */ + function _stream_write($data) + { + switch ($this->mode) { + case 'r': + return false; + } + + $result = $this->sftp->put($this->path, $data, SFTP::SOURCE_STRING, $this->pos); + if (isset($this->notification) && is_callable($this->notification)) { + if (!$result) { + call_user_func($this->notification, STREAM_NOTIFY_FAILURE, STREAM_NOTIFY_SEVERITY_ERR, $this->sftp->getLastSFTPError(), NET_SFTP_OPEN, 0, 0); + return 0; + } + // seems that PHP splits up strings into 8k blocks before calling stream_write + call_user_func($this->notification, STREAM_NOTIFY_PROGRESS, STREAM_NOTIFY_SEVERITY_INFO, '', 0, strlen($data), strlen($data)); + } + + if ($result === false) { + return false; + } + $this->pos+= strlen($data); + if ($this->pos > $this->size) { + $this->size = $this->pos; + } + $this->eof = false; + return strlen($data); + } + + /** + * Retrieve the current position of a stream + * + * @return int + * @access public + */ + function _stream_tell() + { + return $this->pos; + } + + /** + * Tests for end-of-file on a file pointer + * + * In my testing there are four classes functions that normally effect the pointer: + * fseek, fputs / fwrite, fgets / fread and ftruncate. + * + * Only fgets / fread, however, results in feof() returning true. do fputs($fp, 'aaa') on a blank file and feof() + * will return false. do fread($fp, 1) and feof() will then return true. do fseek($fp, 10) on ablank file and feof() + * will return false. do fread($fp, 1) and feof() will then return true. + * + * @return bool + * @access public + */ + function _stream_eof() + { + return $this->eof; + } + + /** + * Seeks to specific location in a stream + * + * @param int $offset + * @param int $whence + * @return bool + * @access public + */ + function _stream_seek($offset, $whence) + { + switch ($whence) { + case SEEK_SET: + if ($offset >= $this->size || $offset < 0) { + return false; + } + break; + case SEEK_CUR: + $offset+= $this->pos; + break; + case SEEK_END: + $offset+= $this->size; + } + + $this->pos = $offset; + $this->eof = false; + return true; + } + + /** + * Change stream options + * + * @param string $path + * @param int $option + * @param mixed $var + * @return bool + * @access public + */ + function _stream_metadata($path, $option, $var) + { + $path = $this->_parse_path($path); + if ($path === false) { + return false; + } + + // stream_metadata was introduced in PHP 5.4.0 but as of 5.4.11 the constants haven't been defined + // see http://www.php.net/streamwrapper.stream-metadata and https://bugs.php.net/64246 + // and https://github.com/php/php-src/blob/master/main/php_streams.h#L592 + switch ($option) { + case 1: // PHP_STREAM_META_TOUCH + return $this->sftp->touch($path, $var[0], $var[1]); + case 2: // PHP_STREAM_OWNER_NAME + case 3: // PHP_STREAM_GROUP_NAME + return false; + case 4: // PHP_STREAM_META_OWNER + return $this->sftp->chown($path, $var); + case 5: // PHP_STREAM_META_GROUP + return $this->sftp->chgrp($path, $var); + case 6: // PHP_STREAM_META_ACCESS + return $this->sftp->chmod($path, $var) !== false; + } + } + + /** + * Retrieve the underlaying resource + * + * @param int $cast_as + * @return resource + * @access public + */ + function _stream_cast($cast_as) + { + return $this->sftp->fsock; + } + + /** + * Advisory file locking + * + * @param int $operation + * @return bool + * @access public + */ + function _stream_lock($operation) + { + return false; + } + + /** + * Renames a file or directory + * + * Attempts to rename oldname to newname, moving it between directories if necessary. + * If newname exists, it will be overwritten. This is a departure from what \phpseclib\Net\SFTP + * does. + * + * @param string $path_from + * @param string $path_to + * @return bool + * @access public + */ + function _rename($path_from, $path_to) + { + $path1 = parse_url($path_from); + $path2 = parse_url($path_to); + unset($path1['path'], $path2['path']); + if ($path1 != $path2) { + return false; + } + + $path_from = $this->_parse_path($path_from); + $path_to = parse_url($path_to); + if ($path_from === false) { + return false; + } + + $path_to = $path_to['path']; // the $component part of parse_url() was added in PHP 5.1.2 + // "It is an error if there already exists a file with the name specified by newpath." + // -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-02#section-6.5 + if (!$this->sftp->rename($path_from, $path_to)) { + if ($this->sftp->stat($path_to)) { + return $this->sftp->delete($path_to, true) && $this->sftp->rename($path_from, $path_to); + } + return false; + } + + return true; + } + + /** + * Open directory handle + * + * The only $options is "whether or not to enforce safe_mode (0x04)". Since safe mode was deprecated in 5.3 and + * removed in 5.4 I'm just going to ignore it. + * + * Also, nlist() is the best that this function is realistically going to be able to do. When an SFTP client + * sends a SSH_FXP_READDIR packet you don't generally get info on just one file but on multiple files. Quoting + * the SFTP specs: + * + * The SSH_FXP_NAME response has the following format: + * + * uint32 id + * uint32 count + * repeats count times: + * string filename + * string longname + * ATTRS attrs + * + * @param string $path + * @param int $options + * @return bool + * @access public + */ + function _dir_opendir($path, $options) + { + $path = $this->_parse_path($path); + if ($path === false) { + return false; + } + $this->pos = 0; + $this->entries = $this->sftp->nlist($path); + return $this->entries !== false; + } + + /** + * Read entry from directory handle + * + * @return mixed + * @access public + */ + function _dir_readdir() + { + if (isset($this->entries[$this->pos])) { + return $this->entries[$this->pos++]; + } + return false; + } + + /** + * Rewind directory handle + * + * @return bool + * @access public + */ + function _dir_rewinddir() + { + $this->pos = 0; + return true; + } + + /** + * Close directory handle + * + * @return bool + * @access public + */ + function _dir_closedir() + { + return true; + } + + /** + * Create a directory + * + * Only valid $options is STREAM_MKDIR_RECURSIVE + * + * @param string $path + * @param int $mode + * @param int $options + * @return bool + * @access public + */ + function _mkdir($path, $mode, $options) + { + $path = $this->_parse_path($path); + if ($path === false) { + return false; + } + + return $this->sftp->mkdir($path, $mode, $options & STREAM_MKDIR_RECURSIVE); + } + + /** + * Removes a directory + * + * Only valid $options is STREAM_MKDIR_RECURSIVE per , however, + * does not have a $recursive parameter as mkdir() does so I don't know how + * STREAM_MKDIR_RECURSIVE is supposed to be set. Also, when I try it out with rmdir() I get 8 as + * $options. What does 8 correspond to? + * + * @param string $path + * @param int $options + * @return bool + * @access public + */ + function _rmdir($path, $options) + { + $path = $this->_parse_path($path); + if ($path === false) { + return false; + } + + return $this->sftp->rmdir($path); + } + + /** + * Flushes the output + * + * See . Always returns true because \phpseclib\Net\SFTP doesn't cache stuff before writing + * + * @return bool + * @access public + */ + function _stream_flush() + { + return true; + } + + /** + * Retrieve information about a file resource + * + * @return mixed + * @access public + */ + function _stream_stat() + { + $results = $this->sftp->stat($this->path); + if ($results === false) { + return false; + } + return $results; + } + + /** + * Delete a file + * + * @param string $path + * @return bool + * @access public + */ + function _unlink($path) + { + $path = $this->_parse_path($path); + if ($path === false) { + return false; + } + + return $this->sftp->delete($path, false); + } + + /** + * Retrieve information about a file + * + * Ignores the STREAM_URL_STAT_QUIET flag because the entirety of \phpseclib\Net\SFTP\Stream is quiet by default + * might be worthwhile to reconstruct bits 12-16 (ie. the file type) if mode doesn't have them but we'll + * cross that bridge when and if it's reached + * + * @param string $path + * @param int $flags + * @return mixed + * @access public + */ + function _url_stat($path, $flags) + { + $path = $this->_parse_path($path); + if ($path === false) { + return false; + } + + $results = $flags & STREAM_URL_STAT_LINK ? $this->sftp->lstat($path) : $this->sftp->stat($path); + if ($results === false) { + return false; + } + + return $results; + } + + /** + * Truncate stream + * + * @param int $new_size + * @return bool + * @access public + */ + function _stream_truncate($new_size) + { + if (!$this->sftp->truncate($this->path, $new_size)) { + return false; + } + + $this->eof = false; + $this->size = $new_size; + + return true; + } + + /** + * Change stream options + * + * STREAM_OPTION_WRITE_BUFFER isn't supported for the same reason stream_flush isn't. + * The other two aren't supported because of limitations in \phpseclib\Net\SFTP. + * + * @param int $option + * @param int $arg1 + * @param int $arg2 + * @return bool + * @access public + */ + function _stream_set_option($option, $arg1, $arg2) + { + return false; + } + + /** + * Close an resource + * + * @access public + */ + function _stream_close() + { + } + + /** + * __call Magic Method + * + * When you're utilizing an SFTP stream you're not calling the methods in this class directly - PHP is calling them for you. + * Which kinda begs the question... what methods is PHP calling and what parameters is it passing to them? This function + * lets you figure that out. + * + * If NET_SFTP_STREAM_LOGGING is defined all calls will be output on the screen and then (regardless of whether or not + * NET_SFTP_STREAM_LOGGING is enabled) the parameters will be passed through to the appropriate method. + * + * @param string $name + * @param array $arguments + * @return mixed + * @access public + */ + function __call($name, $arguments) + { + if (defined('NET_SFTP_STREAM_LOGGING')) { + echo $name . '('; + $last = count($arguments) - 1; + foreach ($arguments as $i => $argument) { + var_export($argument); + if ($i != $last) { + echo ','; + } + } + echo ")\r\n"; + } + $name = '_' . $name; + if (!method_exists($this, $name)) { + return false; + } + return call_user_func_array(array($this, $name), $arguments); + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Net/SSH1.php b/vendor/phpseclib/phpseclib/phpseclib/Net/SSH1.php new file mode 100644 index 000000000..e372b8b92 --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Net/SSH1.php @@ -0,0 +1,1646 @@ + + * login('username', 'password')) { + * exit('Login Failed'); + * } + * + * echo $ssh->exec('ls -la'); + * ?> + * + * + * Here's another short example: + * + * login('username', 'password')) { + * exit('Login Failed'); + * } + * + * echo $ssh->read('username@username:~$'); + * $ssh->write("ls -la\n"); + * echo $ssh->read('username@username:~$'); + * ?> + * + * + * More information on the SSHv1 specification can be found by reading + * {@link http://www.snailbook.com/docs/protocol-1.5.txt protocol-1.5.txt}. + * + * @category Net + * @package SSH1 + * @author Jim Wigginton + * @copyright 2007 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Net; + +use phpseclib\Crypt\DES; +use phpseclib\Crypt\Random; +use phpseclib\Crypt\TripleDES; +use phpseclib\Math\BigInteger; + +/** + * Pure-PHP implementation of SSHv1. + * + * @package SSH1 + * @author Jim Wigginton + * @access public + */ +class SSH1 +{ + /**#@+ + * Encryption Methods + * + * @see \phpseclib\Net\SSH1::getSupportedCiphers() + * @access public + */ + /** + * No encryption + * + * Not supported. + */ + const CIPHER_NONE = 0; + /** + * IDEA in CFB mode + * + * Not supported. + */ + const CIPHER_IDEA = 1; + /** + * DES in CBC mode + */ + const CIPHER_DES = 2; + /** + * Triple-DES in CBC mode + * + * All implementations are required to support this + */ + const CIPHER_3DES = 3; + /** + * TRI's Simple Stream encryption CBC + * + * Not supported nor is it defined in the official SSH1 specs. OpenSSH, however, does define it (see cipher.h), + * although it doesn't use it (see cipher.c) + */ + const CIPHER_BROKEN_TSS = 4; + /** + * RC4 + * + * Not supported. + * + * @internal According to the SSH1 specs: + * + * "The first 16 bytes of the session key are used as the key for + * the server to client direction. The remaining 16 bytes are used + * as the key for the client to server direction. This gives + * independent 128-bit keys for each direction." + * + * This library currently only supports encryption when the same key is being used for both directions. This is + * because there's only one $crypto object. Two could be added ($encrypt and $decrypt, perhaps). + */ + const CIPHER_RC4 = 5; + /** + * Blowfish + * + * Not supported nor is it defined in the official SSH1 specs. OpenSSH, however, defines it (see cipher.h) and + * uses it (see cipher.c) + */ + const CIPHER_BLOWFISH = 6; + /**#@-*/ + + /**#@+ + * Authentication Methods + * + * @see \phpseclib\Net\SSH1::getSupportedAuthentications() + * @access public + */ + /** + * .rhosts or /etc/hosts.equiv + */ + const AUTH_RHOSTS = 1; + /** + * pure RSA authentication + */ + const AUTH_RSA = 2; + /** + * password authentication + * + * This is the only method that is supported by this library. + */ + const AUTH_PASSWORD = 3; + /** + * .rhosts with RSA host authentication + */ + const AUTH_RHOSTS_RSA = 4; + /**#@-*/ + + /**#@+ + * Terminal Modes + * + * @link http://3sp.com/content/developer/maverick-net/docs/Maverick.SSH.PseudoTerminalModesMembers.html + * @access private + */ + const TTY_OP_END = 0; + /**#@-*/ + + /** + * The Response Type + * + * @see \phpseclib\Net\SSH1::_get_binary_packet() + * @access private + */ + const RESPONSE_TYPE = 1; + + /** + * The Response Data + * + * @see \phpseclib\Net\SSH1::_get_binary_packet() + * @access private + */ + const RESPONSE_DATA = 2; + + /**#@+ + * Execution Bitmap Masks + * + * @see \phpseclib\Net\SSH1::bitmap + * @access private + */ + const MASK_CONSTRUCTOR = 0x00000001; + const MASK_CONNECTED = 0x00000002; + const MASK_LOGIN = 0x00000004; + const MASK_SHELL = 0x00000008; + /**#@-*/ + + /**#@+ + * @access public + * @see \phpseclib\Net\SSH1::getLog() + */ + /** + * Returns the message numbers + */ + const LOG_SIMPLE = 1; + /** + * Returns the message content + */ + const LOG_COMPLEX = 2; + /** + * Outputs the content real-time + */ + const LOG_REALTIME = 3; + /** + * Dumps the content real-time to a file + */ + const LOG_REALTIME_FILE = 4; + /**#@-*/ + + /**#@+ + * @access public + * @see \phpseclib\Net\SSH1::read() + */ + /** + * Returns when a string matching $expect exactly is found + */ + const READ_SIMPLE = 1; + /** + * Returns when a string matching the regular expression $expect is found + */ + const READ_REGEX = 2; + /**#@-*/ + + /** + * The SSH identifier + * + * @var string + * @access private + */ + var $identifier = 'SSH-1.5-phpseclib'; + + /** + * The Socket Object + * + * @var object + * @access private + */ + var $fsock; + + /** + * The cryptography object + * + * @var object + * @access private + */ + var $crypto = false; + + /** + * Execution Bitmap + * + * The bits that are set represent functions that have been called already. This is used to determine + * if a requisite function has been successfully executed. If not, an error should be thrown. + * + * @var int + * @access private + */ + var $bitmap = 0; + + /** + * The Server Key Public Exponent + * + * Logged for debug purposes + * + * @see self::getServerKeyPublicExponent() + * @var string + * @access private + */ + var $server_key_public_exponent; + + /** + * The Server Key Public Modulus + * + * Logged for debug purposes + * + * @see self::getServerKeyPublicModulus() + * @var string + * @access private + */ + var $server_key_public_modulus; + + /** + * The Host Key Public Exponent + * + * Logged for debug purposes + * + * @see self::getHostKeyPublicExponent() + * @var string + * @access private + */ + var $host_key_public_exponent; + + /** + * The Host Key Public Modulus + * + * Logged for debug purposes + * + * @see self::getHostKeyPublicModulus() + * @var string + * @access private + */ + var $host_key_public_modulus; + + /** + * Supported Ciphers + * + * Logged for debug purposes + * + * @see self::getSupportedCiphers() + * @var array + * @access private + */ + var $supported_ciphers = array( + self::CIPHER_NONE => 'No encryption', + self::CIPHER_IDEA => 'IDEA in CFB mode', + self::CIPHER_DES => 'DES in CBC mode', + self::CIPHER_3DES => 'Triple-DES in CBC mode', + self::CIPHER_BROKEN_TSS => 'TRI\'s Simple Stream encryption CBC', + self::CIPHER_RC4 => 'RC4', + self::CIPHER_BLOWFISH => 'Blowfish' + ); + + /** + * Supported Authentications + * + * Logged for debug purposes + * + * @see self::getSupportedAuthentications() + * @var array + * @access private + */ + var $supported_authentications = array( + self::AUTH_RHOSTS => '.rhosts or /etc/hosts.equiv', + self::AUTH_RSA => 'pure RSA authentication', + self::AUTH_PASSWORD => 'password authentication', + self::AUTH_RHOSTS_RSA => '.rhosts with RSA host authentication' + ); + + /** + * Server Identification + * + * @see self::getServerIdentification() + * @var string + * @access private + */ + var $server_identification = ''; + + /** + * Protocol Flags + * + * @see self::__construct() + * @var array + * @access private + */ + var $protocol_flags = array(); + + /** + * Protocol Flag Log + * + * @see self::getLog() + * @var array + * @access private + */ + var $protocol_flag_log = array(); + + /** + * Message Log + * + * @see self::getLog() + * @var array + * @access private + */ + var $message_log = array(); + + /** + * Real-time log file pointer + * + * @see self::_append_log() + * @var resource + * @access private + */ + var $realtime_log_file; + + /** + * Real-time log file size + * + * @see self::_append_log() + * @var int + * @access private + */ + var $realtime_log_size; + + /** + * Real-time log file wrap boolean + * + * @see self::_append_log() + * @var bool + * @access private + */ + var $realtime_log_wrap; + + /** + * Interactive Buffer + * + * @see self::read() + * @var array + * @access private + */ + var $interactiveBuffer = ''; + + /** + * Timeout + * + * @see self::setTimeout() + * @access private + */ + var $timeout; + + /** + * Current Timeout + * + * @see self::_get_channel_packet() + * @access private + */ + var $curTimeout; + + /** + * Log Boundary + * + * @see self::_format_log() + * @access private + */ + var $log_boundary = ':'; + + /** + * Log Long Width + * + * @see self::_format_log() + * @access private + */ + var $log_long_width = 65; + + /** + * Log Short Width + * + * @see self::_format_log() + * @access private + */ + var $log_short_width = 16; + + /** + * Hostname + * + * @see self::__construct() + * @see self::_connect() + * @var string + * @access private + */ + var $host; + + /** + * Port Number + * + * @see self::__construct() + * @see self::_connect() + * @var int + * @access private + */ + var $port; + + /** + * Timeout for initial connection + * + * Set by the constructor call. Calling setTimeout() is optional. If it's not called functions like + * exec() won't timeout unless some PHP setting forces it too. The timeout specified in the constructor, + * however, is non-optional. There will be a timeout, whether or not you set it. If you don't it'll be + * 10 seconds. It is used by fsockopen() in that function. + * + * @see self::__construct() + * @see self::_connect() + * @var int + * @access private + */ + var $connectionTimeout; + + /** + * Default cipher + * + * @see self::__construct() + * @see self::_connect() + * @var int + * @access private + */ + var $cipher; + + /** + * Default Constructor. + * + * Connects to an SSHv1 server + * + * @param string $host + * @param int $port + * @param int $timeout + * @param int $cipher + * @return \phpseclib\Net\SSH1 + * @access public + */ + function __construct($host, $port = 22, $timeout = 10, $cipher = self::CIPHER_3DES) + { + $this->protocol_flags = array( + 1 => 'NET_SSH1_MSG_DISCONNECT', + 2 => 'NET_SSH1_SMSG_PUBLIC_KEY', + 3 => 'NET_SSH1_CMSG_SESSION_KEY', + 4 => 'NET_SSH1_CMSG_USER', + 9 => 'NET_SSH1_CMSG_AUTH_PASSWORD', + 10 => 'NET_SSH1_CMSG_REQUEST_PTY', + 12 => 'NET_SSH1_CMSG_EXEC_SHELL', + 13 => 'NET_SSH1_CMSG_EXEC_CMD', + 14 => 'NET_SSH1_SMSG_SUCCESS', + 15 => 'NET_SSH1_SMSG_FAILURE', + 16 => 'NET_SSH1_CMSG_STDIN_DATA', + 17 => 'NET_SSH1_SMSG_STDOUT_DATA', + 18 => 'NET_SSH1_SMSG_STDERR_DATA', + 19 => 'NET_SSH1_CMSG_EOF', + 20 => 'NET_SSH1_SMSG_EXITSTATUS', + 33 => 'NET_SSH1_CMSG_EXIT_CONFIRMATION' + ); + + $this->_define_array($this->protocol_flags); + + $this->host = $host; + $this->port = $port; + $this->connectionTimeout = $timeout; + $this->cipher = $cipher; + } + + /** + * Connect to an SSHv1 server + * + * @return bool + * @access private + */ + function _connect() + { + $this->fsock = @fsockopen($this->host, $this->port, $errno, $errstr, $this->connectionTimeout); + if (!$this->fsock) { + user_error(rtrim("Cannot connect to {$this->host}:{$this->port}. Error $errno. $errstr")); + return false; + } + + $this->server_identification = $init_line = fgets($this->fsock, 255); + + if (defined('NET_SSH1_LOGGING')) { + $this->_append_log('<-', $this->server_identification); + $this->_append_log('->', $this->identifier . "\r\n"); + } + + if (!preg_match('#SSH-([0-9\.]+)-(.+)#', $init_line, $parts)) { + user_error('Can only connect to SSH servers'); + return false; + } + if ($parts[1][0] != 1) { + user_error("Cannot connect to SSH $parts[1] servers"); + return false; + } + + fputs($this->fsock, $this->identifier."\r\n"); + + $response = $this->_get_binary_packet(); + if ($response[self::RESPONSE_TYPE] != NET_SSH1_SMSG_PUBLIC_KEY) { + user_error('Expected SSH_SMSG_PUBLIC_KEY'); + return false; + } + + $anti_spoofing_cookie = $this->_string_shift($response[self::RESPONSE_DATA], 8); + + $this->_string_shift($response[self::RESPONSE_DATA], 4); + + if (strlen($response[self::RESPONSE_DATA]) < 2) { + return false; + } + $temp = unpack('nlen', $this->_string_shift($response[self::RESPONSE_DATA], 2)); + $server_key_public_exponent = new BigInteger($this->_string_shift($response[self::RESPONSE_DATA], ceil($temp['len'] / 8)), 256); + $this->server_key_public_exponent = $server_key_public_exponent; + + if (strlen($response[self::RESPONSE_DATA]) < 2) { + return false; + } + $temp = unpack('nlen', $this->_string_shift($response[self::RESPONSE_DATA], 2)); + $server_key_public_modulus = new BigInteger($this->_string_shift($response[self::RESPONSE_DATA], ceil($temp['len'] / 8)), 256); + + $this->server_key_public_modulus = $server_key_public_modulus; + + $this->_string_shift($response[self::RESPONSE_DATA], 4); + + if (strlen($response[self::RESPONSE_DATA]) < 2) { + return false; + } + $temp = unpack('nlen', $this->_string_shift($response[self::RESPONSE_DATA], 2)); + $host_key_public_exponent = new BigInteger($this->_string_shift($response[self::RESPONSE_DATA], ceil($temp['len'] / 8)), 256); + $this->host_key_public_exponent = $host_key_public_exponent; + + if (strlen($response[self::RESPONSE_DATA]) < 2) { + return false; + } + $temp = unpack('nlen', $this->_string_shift($response[self::RESPONSE_DATA], 2)); + $host_key_public_modulus = new BigInteger($this->_string_shift($response[self::RESPONSE_DATA], ceil($temp['len'] / 8)), 256); + + $this->host_key_public_modulus = $host_key_public_modulus; + + $this->_string_shift($response[self::RESPONSE_DATA], 4); + + // get a list of the supported ciphers + if (strlen($response[self::RESPONSE_DATA]) < 4) { + return false; + } + extract(unpack('Nsupported_ciphers_mask', $this->_string_shift($response[self::RESPONSE_DATA], 4))); + + foreach ($this->supported_ciphers as $mask => $name) { + if (($supported_ciphers_mask & (1 << $mask)) == 0) { + unset($this->supported_ciphers[$mask]); + } + } + + // get a list of the supported authentications + if (strlen($response[self::RESPONSE_DATA]) < 4) { + return false; + } + extract(unpack('Nsupported_authentications_mask', $this->_string_shift($response[self::RESPONSE_DATA], 4))); + foreach ($this->supported_authentications as $mask => $name) { + if (($supported_authentications_mask & (1 << $mask)) == 0) { + unset($this->supported_authentications[$mask]); + } + } + + $session_id = pack('H*', md5($host_key_public_modulus->toBytes() . $server_key_public_modulus->toBytes() . $anti_spoofing_cookie)); + + $session_key = Random::string(32); + $double_encrypted_session_key = $session_key ^ str_pad($session_id, 32, chr(0)); + + if ($server_key_public_modulus->compare($host_key_public_modulus) < 0) { + $double_encrypted_session_key = $this->_rsa_crypt( + $double_encrypted_session_key, + array( + $server_key_public_exponent, + $server_key_public_modulus + ) + ); + $double_encrypted_session_key = $this->_rsa_crypt( + $double_encrypted_session_key, + array( + $host_key_public_exponent, + $host_key_public_modulus + ) + ); + } else { + $double_encrypted_session_key = $this->_rsa_crypt( + $double_encrypted_session_key, + array( + $host_key_public_exponent, + $host_key_public_modulus + ) + ); + $double_encrypted_session_key = $this->_rsa_crypt( + $double_encrypted_session_key, + array( + $server_key_public_exponent, + $server_key_public_modulus + ) + ); + } + + $cipher = isset($this->supported_ciphers[$this->cipher]) ? $this->cipher : self::CIPHER_3DES; + $data = pack('C2a*na*N', NET_SSH1_CMSG_SESSION_KEY, $cipher, $anti_spoofing_cookie, 8 * strlen($double_encrypted_session_key), $double_encrypted_session_key, 0); + + if (!$this->_send_binary_packet($data)) { + user_error('Error sending SSH_CMSG_SESSION_KEY'); + return false; + } + + switch ($cipher) { + //case self::CIPHER_NONE: + // $this->crypto = new \phpseclib\Crypt\Null(); + // break; + case self::CIPHER_DES: + $this->crypto = new DES(); + $this->crypto->disablePadding(); + $this->crypto->enableContinuousBuffer(); + $this->crypto->setKey(substr($session_key, 0, 8)); + break; + case self::CIPHER_3DES: + $this->crypto = new TripleDES(TripleDES::MODE_3CBC); + $this->crypto->disablePadding(); + $this->crypto->enableContinuousBuffer(); + $this->crypto->setKey(substr($session_key, 0, 24)); + break; + //case self::CIPHER_RC4: + // $this->crypto = new RC4(); + // $this->crypto->enableContinuousBuffer(); + // $this->crypto->setKey(substr($session_key, 0, 16)); + // break; + } + + $response = $this->_get_binary_packet(); + + if ($response[self::RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) { + user_error('Expected SSH_SMSG_SUCCESS'); + return false; + } + + $this->bitmap = self::MASK_CONNECTED; + + return true; + } + + /** + * Login + * + * @param string $username + * @param string $password + * @return bool + * @access public + */ + function login($username, $password = '') + { + if (!($this->bitmap & self::MASK_CONSTRUCTOR)) { + $this->bitmap |= self::MASK_CONSTRUCTOR; + if (!$this->_connect()) { + return false; + } + } + + if (!($this->bitmap & self::MASK_CONNECTED)) { + return false; + } + + $data = pack('CNa*', NET_SSH1_CMSG_USER, strlen($username), $username); + + if (!$this->_send_binary_packet($data)) { + user_error('Error sending SSH_CMSG_USER'); + return false; + } + + $response = $this->_get_binary_packet(); + + if ($response === true) { + return false; + } + if ($response[self::RESPONSE_TYPE] == NET_SSH1_SMSG_SUCCESS) { + $this->bitmap |= self::MASK_LOGIN; + return true; + } elseif ($response[self::RESPONSE_TYPE] != NET_SSH1_SMSG_FAILURE) { + user_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE'); + return false; + } + + $data = pack('CNa*', NET_SSH1_CMSG_AUTH_PASSWORD, strlen($password), $password); + + if (!$this->_send_binary_packet($data)) { + user_error('Error sending SSH_CMSG_AUTH_PASSWORD'); + return false; + } + + // remove the username and password from the last logged packet + if (defined('NET_SSH1_LOGGING') && NET_SSH1_LOGGING == self::LOG_COMPLEX) { + $data = pack('CNa*', NET_SSH1_CMSG_AUTH_PASSWORD, strlen('password'), 'password'); + $this->message_log[count($this->message_log) - 1] = $data; + } + + $response = $this->_get_binary_packet(); + + if ($response === true) { + return false; + } + if ($response[self::RESPONSE_TYPE] == NET_SSH1_SMSG_SUCCESS) { + $this->bitmap |= self::MASK_LOGIN; + return true; + } elseif ($response[self::RESPONSE_TYPE] == NET_SSH1_SMSG_FAILURE) { + return false; + } else { + user_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE'); + return false; + } + } + + /** + * Set Timeout + * + * $ssh->exec('ping 127.0.0.1'); on a Linux host will never return and will run indefinitely. setTimeout() makes it so it'll timeout. + * Setting $timeout to false or 0 will mean there is no timeout. + * + * @param mixed $timeout + */ + function setTimeout($timeout) + { + $this->timeout = $this->curTimeout = $timeout; + } + + /** + * Executes a command on a non-interactive shell, returns the output, and quits. + * + * An SSH1 server will close the connection after a command has been executed on a non-interactive shell. SSH2 + * servers don't, however, this isn't an SSH2 client. The way this works, on the server, is by initiating a + * shell with the -s option, as discussed in the following links: + * + * {@link http://www.faqs.org/docs/bashman/bashref_65.html http://www.faqs.org/docs/bashman/bashref_65.html} + * {@link http://www.faqs.org/docs/bashman/bashref_62.html http://www.faqs.org/docs/bashman/bashref_62.html} + * + * To execute further commands, a new \phpseclib\Net\SSH1 object will need to be created. + * + * Returns false on failure and the output, otherwise. + * + * @see self::interactiveRead() + * @see self::interactiveWrite() + * @param string $cmd + * @param bool $block + * @return mixed + * @access public + */ + function exec($cmd, $block = true) + { + if (!($this->bitmap & self::MASK_LOGIN)) { + user_error('Operation disallowed prior to login()'); + return false; + } + + $data = pack('CNa*', NET_SSH1_CMSG_EXEC_CMD, strlen($cmd), $cmd); + + if (!$this->_send_binary_packet($data)) { + user_error('Error sending SSH_CMSG_EXEC_CMD'); + return false; + } + + if (!$block) { + return true; + } + + $output = ''; + $response = $this->_get_binary_packet(); + + if ($response !== false) { + do { + $output.= substr($response[self::RESPONSE_DATA], 4); + $response = $this->_get_binary_packet(); + } while (is_array($response) && $response[self::RESPONSE_TYPE] != NET_SSH1_SMSG_EXITSTATUS); + } + + $data = pack('C', NET_SSH1_CMSG_EXIT_CONFIRMATION); + + // i don't think it's really all that important if this packet gets sent or not. + $this->_send_binary_packet($data); + + fclose($this->fsock); + + // reset the execution bitmap - a new \phpseclib\Net\SSH1 object needs to be created. + $this->bitmap = 0; + + return $output; + } + + /** + * Creates an interactive shell + * + * @see self::interactiveRead() + * @see self::interactiveWrite() + * @return bool + * @access private + */ + function _initShell() + { + // connect using the sample parameters in protocol-1.5.txt. + // according to wikipedia.org's entry on text terminals, "the fundamental type of application running on a text + // terminal is a command line interpreter or shell". thus, opening a terminal session to run the shell. + $data = pack('CNa*N4C', NET_SSH1_CMSG_REQUEST_PTY, strlen('vt100'), 'vt100', 24, 80, 0, 0, self::TTY_OP_END); + + if (!$this->_send_binary_packet($data)) { + user_error('Error sending SSH_CMSG_REQUEST_PTY'); + return false; + } + + $response = $this->_get_binary_packet(); + + if ($response === true) { + return false; + } + if ($response[self::RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) { + user_error('Expected SSH_SMSG_SUCCESS'); + return false; + } + + $data = pack('C', NET_SSH1_CMSG_EXEC_SHELL); + + if (!$this->_send_binary_packet($data)) { + user_error('Error sending SSH_CMSG_EXEC_SHELL'); + return false; + } + + $this->bitmap |= self::MASK_SHELL; + + //stream_set_blocking($this->fsock, 0); + + return true; + } + + /** + * Inputs a command into an interactive shell. + * + * @see self::interactiveWrite() + * @param string $cmd + * @return bool + * @access public + */ + function write($cmd) + { + return $this->interactiveWrite($cmd); + } + + /** + * Returns the output of an interactive shell when there's a match for $expect + * + * $expect can take the form of a string literal or, if $mode == self::READ_REGEX, + * a regular expression. + * + * @see self::write() + * @param string $expect + * @param int $mode + * @return bool + * @access public + */ + function read($expect, $mode = self::READ_SIMPLE) + { + if (!($this->bitmap & self::MASK_LOGIN)) { + user_error('Operation disallowed prior to login()'); + return false; + } + + if (!($this->bitmap & self::MASK_SHELL) && !$this->_initShell()) { + user_error('Unable to initiate an interactive shell session'); + return false; + } + + $match = $expect; + while (true) { + if ($mode == self::READ_REGEX) { + preg_match($expect, $this->interactiveBuffer, $matches); + $match = isset($matches[0]) ? $matches[0] : ''; + } + $pos = strlen($match) ? strpos($this->interactiveBuffer, $match) : false; + if ($pos !== false) { + return $this->_string_shift($this->interactiveBuffer, $pos + strlen($match)); + } + $response = $this->_get_binary_packet(); + + if ($response === true) { + return $this->_string_shift($this->interactiveBuffer, strlen($this->interactiveBuffer)); + } + $this->interactiveBuffer.= substr($response[self::RESPONSE_DATA], 4); + } + } + + /** + * Inputs a command into an interactive shell. + * + * @see self::interactiveRead() + * @param string $cmd + * @return bool + * @access public + */ + function interactiveWrite($cmd) + { + if (!($this->bitmap & self::MASK_LOGIN)) { + user_error('Operation disallowed prior to login()'); + return false; + } + + if (!($this->bitmap & self::MASK_SHELL) && !$this->_initShell()) { + user_error('Unable to initiate an interactive shell session'); + return false; + } + + $data = pack('CNa*', NET_SSH1_CMSG_STDIN_DATA, strlen($cmd), $cmd); + + if (!$this->_send_binary_packet($data)) { + user_error('Error sending SSH_CMSG_STDIN'); + return false; + } + + return true; + } + + /** + * Returns the output of an interactive shell when no more output is available. + * + * Requires PHP 4.3.0 or later due to the use of the stream_select() function. If you see stuff like + * "^[[00m", you're seeing ANSI escape codes. According to + * {@link http://support.microsoft.com/kb/101875 How to Enable ANSI.SYS in a Command Window}, "Windows NT + * does not support ANSI escape sequences in Win32 Console applications", so if you're a Windows user, + * there's not going to be much recourse. + * + * @see self::interactiveRead() + * @return string + * @access public + */ + function interactiveRead() + { + if (!($this->bitmap & self::MASK_LOGIN)) { + user_error('Operation disallowed prior to login()'); + return false; + } + + if (!($this->bitmap & self::MASK_SHELL) && !$this->_initShell()) { + user_error('Unable to initiate an interactive shell session'); + return false; + } + + $read = array($this->fsock); + $write = $except = null; + if (stream_select($read, $write, $except, 0)) { + $response = $this->_get_binary_packet(); + return substr($response[self::RESPONSE_DATA], 4); + } else { + return ''; + } + } + + /** + * Disconnect + * + * @access public + */ + function disconnect() + { + $this->_disconnect(); + } + + /** + * Destructor. + * + * Will be called, automatically, if you're supporting just PHP5. If you're supporting PHP4, you'll need to call + * disconnect(). + * + * @access public + */ + function __destruct() + { + $this->_disconnect(); + } + + /** + * Disconnect + * + * @param string $msg + * @access private + */ + function _disconnect($msg = 'Client Quit') + { + if ($this->bitmap) { + $data = pack('C', NET_SSH1_CMSG_EOF); + $this->_send_binary_packet($data); + /* + $response = $this->_get_binary_packet(); + if ($response === true) { + $response = array(self::RESPONSE_TYPE => -1); + } + switch ($response[self::RESPONSE_TYPE]) { + case NET_SSH1_SMSG_EXITSTATUS: + $data = pack('C', NET_SSH1_CMSG_EXIT_CONFIRMATION); + break; + default: + $data = pack('CNa*', NET_SSH1_MSG_DISCONNECT, strlen($msg), $msg); + } + */ + $data = pack('CNa*', NET_SSH1_MSG_DISCONNECT, strlen($msg), $msg); + + $this->_send_binary_packet($data); + fclose($this->fsock); + $this->bitmap = 0; + } + } + + /** + * Gets Binary Packets + * + * See 'The Binary Packet Protocol' of protocol-1.5.txt for more info. + * + * Also, this function could be improved upon by adding detection for the following exploit: + * http://www.securiteam.com/securitynews/5LP042K3FY.html + * + * @see self::_send_binary_packet() + * @return array + * @access private + */ + function _get_binary_packet() + { + if (feof($this->fsock)) { + //user_error('connection closed prematurely'); + return false; + } + + if ($this->curTimeout) { + $read = array($this->fsock); + $write = $except = null; + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 + $sec = floor($this->curTimeout); + $usec = 1000000 * ($this->curTimeout - $sec); + // on windows this returns a "Warning: Invalid CRT parameters detected" error + if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) { + //$this->_disconnect('Timeout'); + return true; + } + $elapsed = strtok(microtime(), ' ') + strtok('') - $start; + $this->curTimeout-= $elapsed; + } + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 + $data = fread($this->fsock, 4); + if (strlen($data) < 4) { + return false; + } + $temp = unpack('Nlength', $data); + + $padding_length = 8 - ($temp['length'] & 7); + $length = $temp['length'] + $padding_length; + $raw = ''; + + while ($length > 0) { + $temp = fread($this->fsock, $length); + if (strlen($temp) != $length) { + return false; + } + $raw.= $temp; + $length-= strlen($temp); + } + $stop = strtok(microtime(), ' ') + strtok(''); + + if (strlen($raw) && $this->crypto !== false) { + $raw = $this->crypto->decrypt($raw); + } + + $padding = substr($raw, 0, $padding_length); + $type = $raw[$padding_length]; + $data = substr($raw, $padding_length + 1, -4); + + if (strlen($raw) < 4) { + return false; + } + $temp = unpack('Ncrc', substr($raw, -4)); + + //if ( $temp['crc'] != $this->_crc($padding . $type . $data) ) { + // user_error('Bad CRC in packet from server'); + // return false; + //} + + $type = ord($type); + + if (defined('NET_SSH1_LOGGING')) { + $temp = isset($this->protocol_flags[$type]) ? $this->protocol_flags[$type] : 'UNKNOWN'; + $temp = '<- ' . $temp . + ' (' . round($stop - $start, 4) . 's)'; + $this->_append_log($temp, $data); + } + + return array( + self::RESPONSE_TYPE => $type, + self::RESPONSE_DATA => $data + ); + } + + /** + * Sends Binary Packets + * + * Returns true on success, false on failure. + * + * @see self::_get_binary_packet() + * @param string $data + * @return bool + * @access private + */ + function _send_binary_packet($data) + { + if (feof($this->fsock)) { + //user_error('connection closed prematurely'); + return false; + } + + $length = strlen($data) + 4; + + $padding = Random::string(8 - ($length & 7)); + + $orig = $data; + $data = $padding . $data; + $data.= pack('N', $this->_crc($data)); + + if ($this->crypto !== false) { + $data = $this->crypto->encrypt($data); + } + + $packet = pack('Na*', $length, $data); + + $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838 + $result = strlen($packet) == fputs($this->fsock, $packet); + $stop = strtok(microtime(), ' ') + strtok(''); + + if (defined('NET_SSH1_LOGGING')) { + $temp = isset($this->protocol_flags[ord($orig[0])]) ? $this->protocol_flags[ord($orig[0])] : 'UNKNOWN'; + $temp = '-> ' . $temp . + ' (' . round($stop - $start, 4) . 's)'; + $this->_append_log($temp, $orig); + } + + return $result; + } + + /** + * Cyclic Redundancy Check (CRC) + * + * PHP's crc32 function is implemented slightly differently than the one that SSH v1 uses, so + * we've reimplemented it. A more detailed discussion of the differences can be found after + * $crc_lookup_table's initialization. + * + * @see self::_get_binary_packet() + * @see self::_send_binary_packet() + * @param string $data + * @return int + * @access private + */ + function _crc($data) + { + static $crc_lookup_table = array( + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, + 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, + 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, + 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, + 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, + 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, + 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, + 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, + 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, + 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, + 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, + 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, + 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, + 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, + 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, + 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, + 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, + 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, + 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, + 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, + 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, + 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, + 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, + 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, + 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, + 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, + 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, + 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, + 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, + 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, + 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, + 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, + 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, + 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, + 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, + 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, + 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, + 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, + 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, + 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D + ); + + // For this function to yield the same output as PHP's crc32 function, $crc would have to be + // set to 0xFFFFFFFF, initially - not 0x00000000 as it currently is. + $crc = 0x00000000; + $length = strlen($data); + + for ($i=0; $i<$length; $i++) { + // We AND $crc >> 8 with 0x00FFFFFF because we want the eight newly added bits to all + // be zero. PHP, unfortunately, doesn't always do this. 0x80000000 >> 8, as an example, + // yields 0xFF800000 - not 0x00800000. The following link elaborates: + // http://www.php.net/manual/en/language.operators.bitwise.php#57281 + $crc = (($crc >> 8) & 0x00FFFFFF) ^ $crc_lookup_table[($crc & 0xFF) ^ ord($data[$i])]; + } + + // In addition to having to set $crc to 0xFFFFFFFF, initially, the return value must be XOR'd with + // 0xFFFFFFFF for this function to return the same thing that PHP's crc32 function would. + return $crc; + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param string $string + * @param int $index + * @return string + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } + + /** + * RSA Encrypt + * + * Returns mod(pow($m, $e), $n), where $n should be the product of two (large) primes $p and $q and where $e + * should be a number with the property that gcd($e, ($p - 1) * ($q - 1)) == 1. Could just make anything that + * calls this call modexp, instead, but I think this makes things clearer, maybe... + * + * @see self::__construct() + * @param BigInteger $m + * @param array $key + * @return BigInteger + * @access private + */ + function _rsa_crypt($m, $key) + { + /* + $rsa = new RSA(); + $rsa->loadKey($key, RSA::PUBLIC_FORMAT_RAW); + $rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1); + return $rsa->encrypt($m); + */ + + // To quote from protocol-1.5.txt: + // The most significant byte (which is only partial as the value must be + // less than the public modulus, which is never a power of two) is zero. + // + // The next byte contains the value 2 (which stands for public-key + // encrypted data in the PKCS standard [PKCS#1]). Then, there are non- + // zero random bytes to fill any unused space, a zero byte, and the data + // to be encrypted in the least significant bytes, the last byte of the + // data in the least significant byte. + + // Presumably the part of PKCS#1 they're refering to is "Section 7.2.1 Encryption Operation", + // under "7.2 RSAES-PKCS1-v1.5" and "7 Encryption schemes" of the following URL: + // ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf + $modulus = $key[1]->toBytes(); + $length = strlen($modulus) - strlen($m) - 3; + $random = ''; + while (strlen($random) != $length) { + $block = Random::string($length - strlen($random)); + $block = str_replace("\x00", '', $block); + $random.= $block; + } + $temp = chr(0) . chr(2) . $random . chr(0) . $m; + + $m = new BigInteger($temp, 256); + $m = $m->modPow($key[0], $key[1]); + + return $m->toBytes(); + } + + /** + * Define Array + * + * Takes any number of arrays whose indices are integers and whose values are strings and defines a bunch of + * named constants from it, using the value as the name of the constant and the index as the value of the constant. + * If any of the constants that would be defined already exists, none of the constants will be defined. + * + * @access private + */ + function _define_array() + { + $args = func_get_args(); + foreach ($args as $arg) { + foreach ($arg as $key => $value) { + if (!defined($value)) { + define($value, $key); + } else { + break 2; + } + } + } + } + + /** + * Returns a log of the packets that have been sent and received. + * + * Returns a string if NET_SSH1_LOGGING == self::LOG_COMPLEX, an array if NET_SSH1_LOGGING == self::LOG_SIMPLE and false if !defined('NET_SSH1_LOGGING') + * + * @access public + * @return array|false|string + */ + function getLog() + { + if (!defined('NET_SSH1_LOGGING')) { + return false; + } + + switch (NET_SSH1_LOGGING) { + case self::LOG_SIMPLE: + return $this->message_number_log; + break; + case self::LOG_COMPLEX: + return $this->_format_log($this->message_log, $this->protocol_flags_log); + break; + default: + return false; + } + } + + /** + * Formats a log for printing + * + * @param array $message_log + * @param array $message_number_log + * @access private + * @return string + */ + function _format_log($message_log, $message_number_log) + { + $output = ''; + for ($i = 0; $i < count($message_log); $i++) { + $output.= $message_number_log[$i] . "\r\n"; + $current_log = $message_log[$i]; + $j = 0; + do { + if (strlen($current_log)) { + $output.= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0 '; + } + $fragment = $this->_string_shift($current_log, $this->log_short_width); + $hex = substr(preg_replace_callback('#.#s', array($this, '_format_log_helper'), $fragment), strlen($this->log_boundary)); + // replace non ASCII printable characters with dots + // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters + // also replace < with a . since < messes up the output on web browsers + $raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment); + $output.= str_pad($hex, $this->log_long_width - $this->log_short_width, ' ') . $raw . "\r\n"; + $j++; + } while (strlen($current_log)); + $output.= "\r\n"; + } + + return $output; + } + + /** + * Helper function for _format_log + * + * For use with preg_replace_callback() + * + * @param array $matches + * @access private + * @return string + */ + function _format_log_helper($matches) + { + return $this->log_boundary . str_pad(dechex(ord($matches[0])), 2, '0', STR_PAD_LEFT); + } + + /** + * Return the server key public exponent + * + * Returns, by default, the base-10 representation. If $raw_output is set to true, returns, instead, + * the raw bytes. This behavior is similar to PHP's md5() function. + * + * @param bool $raw_output + * @return string + * @access public + */ + function getServerKeyPublicExponent($raw_output = false) + { + return $raw_output ? $this->server_key_public_exponent->toBytes() : $this->server_key_public_exponent->toString(); + } + + /** + * Return the server key public modulus + * + * Returns, by default, the base-10 representation. If $raw_output is set to true, returns, instead, + * the raw bytes. This behavior is similar to PHP's md5() function. + * + * @param bool $raw_output + * @return string + * @access public + */ + function getServerKeyPublicModulus($raw_output = false) + { + return $raw_output ? $this->server_key_public_modulus->toBytes() : $this->server_key_public_modulus->toString(); + } + + /** + * Return the host key public exponent + * + * Returns, by default, the base-10 representation. If $raw_output is set to true, returns, instead, + * the raw bytes. This behavior is similar to PHP's md5() function. + * + * @param bool $raw_output + * @return string + * @access public + */ + function getHostKeyPublicExponent($raw_output = false) + { + return $raw_output ? $this->host_key_public_exponent->toBytes() : $this->host_key_public_exponent->toString(); + } + + /** + * Return the host key public modulus + * + * Returns, by default, the base-10 representation. If $raw_output is set to true, returns, instead, + * the raw bytes. This behavior is similar to PHP's md5() function. + * + * @param bool $raw_output + * @return string + * @access public + */ + function getHostKeyPublicModulus($raw_output = false) + { + return $raw_output ? $this->host_key_public_modulus->toBytes() : $this->host_key_public_modulus->toString(); + } + + /** + * Return a list of ciphers supported by SSH1 server. + * + * Just because a cipher is supported by an SSH1 server doesn't mean it's supported by this library. If $raw_output + * is set to true, returns, instead, an array of constants. ie. instead of array('Triple-DES in CBC mode'), you'll + * get array(self::CIPHER_3DES). + * + * @param bool $raw_output + * @return array + * @access public + */ + function getSupportedCiphers($raw_output = false) + { + return $raw_output ? array_keys($this->supported_ciphers) : array_values($this->supported_ciphers); + } + + /** + * Return a list of authentications supported by SSH1 server. + * + * Just because a cipher is supported by an SSH1 server doesn't mean it's supported by this library. If $raw_output + * is set to true, returns, instead, an array of constants. ie. instead of array('password authentication'), you'll + * get array(self::AUTH_PASSWORD). + * + * @param bool $raw_output + * @return array + * @access public + */ + function getSupportedAuthentications($raw_output = false) + { + return $raw_output ? array_keys($this->supported_authentications) : array_values($this->supported_authentications); + } + + /** + * Return the server identification. + * + * @return string + * @access public + */ + function getServerIdentification() + { + return rtrim($this->server_identification); + } + + /** + * Logs data packets + * + * Makes sure that only the last 1MB worth of packets will be logged + * + * @param int $protocol_flags + * @param string $message + * @access private + */ + function _append_log($protocol_flags, $message) + { + switch (NET_SSH1_LOGGING) { + // useful for benchmarks + case self::LOG_SIMPLE: + $this->protocol_flags_log[] = $protocol_flags; + break; + // the most useful log for SSH1 + case self::LOG_COMPLEX: + $this->protocol_flags_log[] = $protocol_flags; + $this->_string_shift($message); + $this->log_size+= strlen($message); + $this->message_log[] = $message; + while ($this->log_size > self::LOG_MAX_SIZE) { + $this->log_size-= strlen(array_shift($this->message_log)); + array_shift($this->protocol_flags_log); + } + break; + // dump the output out realtime; packets may be interspersed with non packets, + // passwords won't be filtered out and select other packets may not be correctly + // identified + case self::LOG_REALTIME: + echo "
        \r\n" . $this->_format_log(array($message), array($protocol_flags)) . "\r\n
        \r\n"; + @flush(); + @ob_flush(); + break; + // basically the same thing as self::LOG_REALTIME with the caveat that self::LOG_REALTIME_FILE + // needs to be defined and that the resultant log file will be capped out at self::LOG_MAX_SIZE. + // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily + // at the beginning of the file + case self::LOG_REALTIME_FILE: + if (!isset($this->realtime_log_file)) { + // PHP doesn't seem to like using constants in fopen() + $filename = self::LOG_REALTIME_FILE; + $fp = fopen($filename, 'w'); + $this->realtime_log_file = $fp; + } + if (!is_resource($this->realtime_log_file)) { + break; + } + $entry = $this->_format_log(array($message), array($protocol_flags)); + if ($this->realtime_log_wrap) { + $temp = "<<< START >>>\r\n"; + $entry.= $temp; + fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp)); + } + $this->realtime_log_size+= strlen($entry); + if ($this->realtime_log_size > self::LOG_MAX_SIZE) { + fseek($this->realtime_log_file, 0); + $this->realtime_log_size = strlen($entry); + $this->realtime_log_wrap = true; + } + fputs($this->realtime_log_file, $entry); + } + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php b/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php new file mode 100644 index 000000000..e2571190b --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php @@ -0,0 +1,5153 @@ + + * login('username', 'password')) { + * exit('Login Failed'); + * } + * + * echo $ssh->exec('pwd'); + * echo $ssh->exec('ls -la'); + * ?> + * + * + * + * setPassword('whatever'); + * $key->loadKey(file_get_contents('privatekey')); + * + * $ssh = new \phpseclib\Net\SSH2('www.domain.tld'); + * if (!$ssh->login('username', $key)) { + * exit('Login Failed'); + * } + * + * echo $ssh->read('username@username:~$'); + * $ssh->write("ls -la\n"); + * echo $ssh->read('username@username:~$'); + * ?> + * + * + * @category Net + * @package SSH2 + * @author Jim Wigginton + * @copyright 2007 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + */ + +namespace phpseclib\Net; + +use phpseclib\Crypt\Base; +use phpseclib\Crypt\Blowfish; +use phpseclib\Crypt\Hash; +use phpseclib\Crypt\Random; +use phpseclib\Crypt\RC4; +use phpseclib\Crypt\Rijndael; +use phpseclib\Crypt\RSA; +use phpseclib\Crypt\TripleDES; +use phpseclib\Crypt\Twofish; +use phpseclib\Math\BigInteger; // Used to do Diffie-Hellman key exchange and DSA/RSA signature verification. +use phpseclib\System\SSH\Agent; + +/** + * Pure-PHP implementation of SSHv2. + * + * @package SSH2 + * @author Jim Wigginton + * @access public + */ +class SSH2 +{ + /**#@+ + * Execution Bitmap Masks + * + * @see \phpseclib\Net\SSH2::bitmap + * @access private + */ + const MASK_CONSTRUCTOR = 0x00000001; + const MASK_CONNECTED = 0x00000002; + const MASK_LOGIN_REQ = 0x00000004; + const MASK_LOGIN = 0x00000008; + const MASK_SHELL = 0x00000010; + const MASK_WINDOW_ADJUST = 0x00000020; + /**#@-*/ + + /**#@+ + * Channel constants + * + * RFC4254 refers not to client and server channels but rather to sender and recipient channels. we don't refer + * to them in that way because RFC4254 toggles the meaning. the client sends a SSH_MSG_CHANNEL_OPEN message with + * a sender channel and the server sends a SSH_MSG_CHANNEL_OPEN_CONFIRMATION in response, with a sender and a + * recepient channel. at first glance, you might conclude that SSH_MSG_CHANNEL_OPEN_CONFIRMATION's sender channel + * would be the same thing as SSH_MSG_CHANNEL_OPEN's sender channel, but it's not, per this snipet: + * The 'recipient channel' is the channel number given in the original + * open request, and 'sender channel' is the channel number allocated by + * the other side. + * + * @see \phpseclib\Net\SSH2::_send_channel_packet() + * @see \phpseclib\Net\SSH2::_get_channel_packet() + * @access private + */ + const CHANNEL_EXEC = 1; // PuTTy uses 0x100 + const CHANNEL_SHELL = 2; + const CHANNEL_SUBSYSTEM = 3; + const CHANNEL_AGENT_FORWARD = 4; + const CHANNEL_KEEP_ALIVE = 5; + /**#@-*/ + + /**#@+ + * @access public + * @see \phpseclib\Net\SSH2::getLog() + */ + /** + * Returns the message numbers + */ + const LOG_SIMPLE = 1; + /** + * Returns the message content + */ + const LOG_COMPLEX = 2; + /** + * Outputs the content real-time + */ + const LOG_REALTIME = 3; + /** + * Dumps the content real-time to a file + */ + const LOG_REALTIME_FILE = 4; + /** + * Make sure that the log never gets larger than this + */ + const LOG_MAX_SIZE = 1048576; // 1024 * 1024 + /**#@-*/ + + /**#@+ + * @access public + * @see \phpseclib\Net\SSH2::read() + */ + /** + * Returns when a string matching $expect exactly is found + */ + const READ_SIMPLE = 1; + /** + * Returns when a string matching the regular expression $expect is found + */ + const READ_REGEX = 2; + /** + * Returns whenever a data packet is received. + * + * Some data packets may only contain a single character so it may be necessary + * to call read() multiple times when using this option + */ + const READ_NEXT = 3; + /**#@-*/ + + /** + * The SSH identifier + * + * @var string + * @access private + */ + var $identifier; + + /** + * The Socket Object + * + * @var object + * @access private + */ + var $fsock; + + /** + * Execution Bitmap + * + * The bits that are set represent functions that have been called already. This is used to determine + * if a requisite function has been successfully executed. If not, an error should be thrown. + * + * @var int + * @access private + */ + var $bitmap = 0; + + /** + * Error information + * + * @see self::getErrors() + * @see self::getLastError() + * @var string + * @access private + */ + var $errors = array(); + + /** + * Server Identifier + * + * @see self::getServerIdentification() + * @var array|false + * @access private + */ + var $server_identifier = false; + + /** + * Key Exchange Algorithms + * + * @see self::getKexAlgorithims() + * @var array|false + * @access private + */ + var $kex_algorithms = false; + + /** + * Key Exchange Algorithm + * + * @see self::getMethodsNegotiated() + * @var string|false + * @access private + */ + var $kex_algorithm = false; + + /** + * Minimum Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods + * + * @see self::_key_exchange() + * @var int + * @access private + */ + var $kex_dh_group_size_min = 1536; + + /** + * Preferred Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods + * + * @see self::_key_exchange() + * @var int + * @access private + */ + var $kex_dh_group_size_preferred = 2048; + + /** + * Maximum Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods + * + * @see self::_key_exchange() + * @var int + * @access private + */ + var $kex_dh_group_size_max = 4096; + + /** + * Server Host Key Algorithms + * + * @see self::getServerHostKeyAlgorithms() + * @var array|false + * @access private + */ + var $server_host_key_algorithms = false; + + /** + * Encryption Algorithms: Client to Server + * + * @see self::getEncryptionAlgorithmsClient2Server() + * @var array|false + * @access private + */ + var $encryption_algorithms_client_to_server = false; + + /** + * Encryption Algorithms: Server to Client + * + * @see self::getEncryptionAlgorithmsServer2Client() + * @var array|false + * @access private + */ + var $encryption_algorithms_server_to_client = false; + + /** + * MAC Algorithms: Client to Server + * + * @see self::getMACAlgorithmsClient2Server() + * @var array|false + * @access private + */ + var $mac_algorithms_client_to_server = false; + + /** + * MAC Algorithms: Server to Client + * + * @see self::getMACAlgorithmsServer2Client() + * @var array|false + * @access private + */ + var $mac_algorithms_server_to_client = false; + + /** + * Compression Algorithms: Client to Server + * + * @see self::getCompressionAlgorithmsClient2Server() + * @var array|false + * @access private + */ + var $compression_algorithms_client_to_server = false; + + /** + * Compression Algorithms: Server to Client + * + * @see self::getCompressionAlgorithmsServer2Client() + * @var array|false + * @access private + */ + var $compression_algorithms_server_to_client = false; + + /** + * Languages: Server to Client + * + * @see self::getLanguagesServer2Client() + * @var array|false + * @access private + */ + var $languages_server_to_client = false; + + /** + * Languages: Client to Server + * + * @see self::getLanguagesClient2Server() + * @var array|false + * @access private + */ + var $languages_client_to_server = false; + + /** + * Preferred Algorithms + * + * @see self::setPreferredAlgorithms() + * @var array + * @access private + */ + var $preferred = array(); + + /** + * Block Size for Server to Client Encryption + * + * "Note that the length of the concatenation of 'packet_length', + * 'padding_length', 'payload', and 'random padding' MUST be a multiple + * of the cipher block size or 8, whichever is larger. This constraint + * MUST be enforced, even when using stream ciphers." + * + * -- http://tools.ietf.org/html/rfc4253#section-6 + * + * @see self::__construct() + * @see self::_send_binary_packet() + * @var int + * @access private + */ + var $encrypt_block_size = 8; + + /** + * Block Size for Client to Server Encryption + * + * @see self::__construct() + * @see self::_get_binary_packet() + * @var int + * @access private + */ + var $decrypt_block_size = 8; + + /** + * Server to Client Encryption Object + * + * @see self::_get_binary_packet() + * @var object + * @access private + */ + var $decrypt = false; + + /** + * Client to Server Encryption Object + * + * @see self::_send_binary_packet() + * @var object + * @access private + */ + var $encrypt = false; + + /** + * Client to Server HMAC Object + * + * @see self::_send_binary_packet() + * @var object + * @access private + */ + var $hmac_create = false; + + /** + * Server to Client HMAC Object + * + * @see self::_get_binary_packet() + * @var object + * @access private + */ + var $hmac_check = false; + + /** + * Size of server to client HMAC + * + * We need to know how big the HMAC will be for the server to client direction so that we know how many bytes to read. + * For the client to server side, the HMAC object will make the HMAC as long as it needs to be. All we need to do is + * append it. + * + * @see self::_get_binary_packet() + * @var int + * @access private + */ + var $hmac_size = false; + + /** + * Server Public Host Key + * + * @see self::getServerPublicHostKey() + * @var string + * @access private + */ + var $server_public_host_key; + + /** + * Session identifier + * + * "The exchange hash H from the first key exchange is additionally + * used as the session identifier, which is a unique identifier for + * this connection." + * + * -- http://tools.ietf.org/html/rfc4253#section-7.2 + * + * @see self::_key_exchange() + * @var string + * @access private + */ + var $session_id = false; + + /** + * Exchange hash + * + * The current exchange hash + * + * @see self::_key_exchange() + * @var string + * @access private + */ + var $exchange_hash = false; + + /** + * Message Numbers + * + * @see self::__construct() + * @var array + * @access private + */ + var $message_numbers = array(); + + /** + * Disconnection Message 'reason codes' defined in RFC4253 + * + * @see self::__construct() + * @var array + * @access private + */ + var $disconnect_reasons = array(); + + /** + * SSH_MSG_CHANNEL_OPEN_FAILURE 'reason codes', defined in RFC4254 + * + * @see self::__construct() + * @var array + * @access private + */ + var $channel_open_failure_reasons = array(); + + /** + * Terminal Modes + * + * @link http://tools.ietf.org/html/rfc4254#section-8 + * @see self::__construct() + * @var array + * @access private + */ + var $terminal_modes = array(); + + /** + * SSH_MSG_CHANNEL_EXTENDED_DATA's data_type_codes + * + * @link http://tools.ietf.org/html/rfc4254#section-5.2 + * @see self::__construct() + * @var array + * @access private + */ + var $channel_extended_data_type_codes = array(); + + /** + * Send Sequence Number + * + * See 'Section 6.4. Data Integrity' of rfc4253 for more info. + * + * @see self::_send_binary_packet() + * @var int + * @access private + */ + var $send_seq_no = 0; + + /** + * Get Sequence Number + * + * See 'Section 6.4. Data Integrity' of rfc4253 for more info. + * + * @see self::_get_binary_packet() + * @var int + * @access private + */ + var $get_seq_no = 0; + + /** + * Server Channels + * + * Maps client channels to server channels + * + * @see self::_get_channel_packet() + * @see self::exec() + * @var array + * @access private + */ + var $server_channels = array(); + + /** + * Channel Buffers + * + * If a client requests a packet from one channel but receives two packets from another those packets should + * be placed in a buffer + * + * @see self::_get_channel_packet() + * @see self::exec() + * @var array + * @access private + */ + var $channel_buffers = array(); + + /** + * Channel Status + * + * Contains the type of the last sent message + * + * @see self::_get_channel_packet() + * @var array + * @access private + */ + var $channel_status = array(); + + /** + * Packet Size + * + * Maximum packet size indexed by channel + * + * @see self::_send_channel_packet() + * @var array + * @access private + */ + var $packet_size_client_to_server = array(); + + /** + * Message Number Log + * + * @see self::getLog() + * @var array + * @access private + */ + var $message_number_log = array(); + + /** + * Message Log + * + * @see self::getLog() + * @var array + * @access private + */ + var $message_log = array(); + + /** + * The Window Size + * + * Bytes the other party can send before it must wait for the window to be adjusted (0x7FFFFFFF = 2GB) + * + * @var int + * @see self::_send_channel_packet() + * @see self::exec() + * @access private + */ + var $window_size = 0x7FFFFFFF; + + /** + * What we resize the window to + * + * When PuTTY resizes the window it doesn't add an additional 0x7FFFFFFF bytes - it adds 0x40000000 bytes. + * Some SFTP clients (GoAnywhere) don't support adding 0x7FFFFFFF to the window size after the fact so + * we'll just do what PuTTY does + * + * @var int + * @see self::_send_channel_packet() + * @see self::exec() + * @access private + */ + var $window_resize = 0x40000000; + + /** + * Window size, server to client + * + * Window size indexed by channel + * + * @see self::_send_channel_packet() + * @var array + * @access private + */ + var $window_size_server_to_client = array(); + + /** + * Window size, client to server + * + * Window size indexed by channel + * + * @see self::_get_channel_packet() + * @var array + * @access private + */ + var $window_size_client_to_server = array(); + + /** + * Server signature + * + * Verified against $this->session_id + * + * @see self::getServerPublicHostKey() + * @var string + * @access private + */ + var $signature = ''; + + /** + * Server signature format + * + * ssh-rsa or ssh-dss. + * + * @see self::getServerPublicHostKey() + * @var string + * @access private + */ + var $signature_format = ''; + + /** + * Interactive Buffer + * + * @see self::read() + * @var array + * @access private + */ + var $interactiveBuffer = ''; + + /** + * Current log size + * + * Should never exceed self::LOG_MAX_SIZE + * + * @see self::_send_binary_packet() + * @see self::_get_binary_packet() + * @var int + * @access private + */ + var $log_size; + + /** + * Timeout + * + * @see self::setTimeout() + * @access private + */ + var $timeout; + + /** + * Current Timeout + * + * @see self::_get_channel_packet() + * @access private + */ + var $curTimeout; + + /** + * Keep Alive Interval + * + * @see self::setKeepAlive() + * @access private + */ + var $keepAlive; + + /** + * Real-time log file pointer + * + * @see self::_append_log() + * @var resource + * @access private + */ + var $realtime_log_file; + + /** + * Real-time log file size + * + * @see self::_append_log() + * @var int + * @access private + */ + var $realtime_log_size; + + /** + * Has the signature been validated? + * + * @see self::getServerPublicHostKey() + * @var bool + * @access private + */ + var $signature_validated = false; + + /** + * Real-time log file wrap boolean + * + * @see self::_append_log() + * @access private + */ + var $realtime_log_wrap; + + /** + * Flag to suppress stderr from output + * + * @see self::enableQuietMode() + * @access private + */ + var $quiet_mode = false; + + /** + * Time of first network activity + * + * @var int + * @access private + */ + var $last_packet; + + /** + * Exit status returned from ssh if any + * + * @var int + * @access private + */ + var $exit_status; + + /** + * Flag to request a PTY when using exec() + * + * @var bool + * @see self::enablePTY() + * @access private + */ + var $request_pty = false; + + /** + * Flag set while exec() is running when using enablePTY() + * + * @var bool + * @access private + */ + var $in_request_pty_exec = false; + + /** + * Flag set after startSubsystem() is called + * + * @var bool + * @access private + */ + var $in_subsystem; + + /** + * Contents of stdError + * + * @var string + * @access private + */ + var $stdErrorLog; + + /** + * The Last Interactive Response + * + * @see self::_keyboard_interactive_process() + * @var string + * @access private + */ + var $last_interactive_response = ''; + + /** + * Keyboard Interactive Request / Responses + * + * @see self::_keyboard_interactive_process() + * @var array + * @access private + */ + var $keyboard_requests_responses = array(); + + /** + * Banner Message + * + * Quoting from the RFC, "in some jurisdictions, sending a warning message before + * authentication may be relevant for getting legal protection." + * + * @see self::_filter() + * @see self::getBannerMessage() + * @var string + * @access private + */ + var $banner_message = ''; + + /** + * Did read() timeout or return normally? + * + * @see self::isTimeout() + * @var bool + * @access private + */ + var $is_timeout = false; + + /** + * Log Boundary + * + * @see self::_format_log() + * @var string + * @access private + */ + var $log_boundary = ':'; + + /** + * Log Long Width + * + * @see self::_format_log() + * @var int + * @access private + */ + var $log_long_width = 65; + + /** + * Log Short Width + * + * @see self::_format_log() + * @var int + * @access private + */ + var $log_short_width = 16; + + /** + * Hostname + * + * @see self::__construct() + * @see self::_connect() + * @var string + * @access private + */ + var $host; + + /** + * Port Number + * + * @see self::__construct() + * @see self::_connect() + * @var int + * @access private + */ + var $port; + + /** + * Number of columns for terminal window size + * + * @see self::getWindowColumns() + * @see self::setWindowColumns() + * @see self::setWindowSize() + * @var int + * @access private + */ + var $windowColumns = 80; + + /** + * Number of columns for terminal window size + * + * @see self::getWindowRows() + * @see self::setWindowRows() + * @see self::setWindowSize() + * @var int + * @access private + */ + var $windowRows = 24; + + /** + * Crypto Engine + * + * @see self::setCryptoEngine() + * @see self::_key_exchange() + * @var int + * @access private + */ + var $crypto_engine = false; + + /** + * A System_SSH_Agent for use in the SSH2 Agent Forwarding scenario + * + * @var System_SSH_Agent + * @access private + */ + var $agent; + + /** + * Send the identification string first? + * + * @var bool + * @access private + */ + var $send_id_string_first = true; + + /** + * Send the key exchange initiation packet first? + * + * @var bool + * @access private + */ + var $send_kex_first = true; + + /** + * Some versions of OpenSSH incorrectly calculate the key size + * + * @var bool + * @access private + */ + var $bad_key_size_fix = false; + + /** + * Should we try to re-connect to re-establish keys? + * + * @var bool + * @access private + */ + var $retry_connect = false; + + /** + * Binary Packet Buffer + * + * @var string|false + * @access private + */ + var $binary_packet_buffer = false; + + /** + * Preferred Signature Format + * + * @var string|false + * @access private + */ + var $preferred_signature_format = false; + + /** + * Authentication Credentials + * + * @var array + * @access private + */ + var $auth = array(); + + /** + * Default Constructor. + * + * $host can either be a string, representing the host, or a stream resource. + * + * @param mixed $host + * @param int $port + * @param int $timeout + * @see self::login() + * @return \phpseclib\Net\SSH2 + * @access public + */ + function __construct($host, $port = 22, $timeout = 10) + { + $this->message_numbers = array( + 1 => 'NET_SSH2_MSG_DISCONNECT', + 2 => 'NET_SSH2_MSG_IGNORE', + 3 => 'NET_SSH2_MSG_UNIMPLEMENTED', + 4 => 'NET_SSH2_MSG_DEBUG', + 5 => 'NET_SSH2_MSG_SERVICE_REQUEST', + 6 => 'NET_SSH2_MSG_SERVICE_ACCEPT', + 20 => 'NET_SSH2_MSG_KEXINIT', + 21 => 'NET_SSH2_MSG_NEWKEYS', + 30 => 'NET_SSH2_MSG_KEXDH_INIT', + 31 => 'NET_SSH2_MSG_KEXDH_REPLY', + 50 => 'NET_SSH2_MSG_USERAUTH_REQUEST', + 51 => 'NET_SSH2_MSG_USERAUTH_FAILURE', + 52 => 'NET_SSH2_MSG_USERAUTH_SUCCESS', + 53 => 'NET_SSH2_MSG_USERAUTH_BANNER', + + 80 => 'NET_SSH2_MSG_GLOBAL_REQUEST', + 81 => 'NET_SSH2_MSG_REQUEST_SUCCESS', + 82 => 'NET_SSH2_MSG_REQUEST_FAILURE', + 90 => 'NET_SSH2_MSG_CHANNEL_OPEN', + 91 => 'NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION', + 92 => 'NET_SSH2_MSG_CHANNEL_OPEN_FAILURE', + 93 => 'NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST', + 94 => 'NET_SSH2_MSG_CHANNEL_DATA', + 95 => 'NET_SSH2_MSG_CHANNEL_EXTENDED_DATA', + 96 => 'NET_SSH2_MSG_CHANNEL_EOF', + 97 => 'NET_SSH2_MSG_CHANNEL_CLOSE', + 98 => 'NET_SSH2_MSG_CHANNEL_REQUEST', + 99 => 'NET_SSH2_MSG_CHANNEL_SUCCESS', + 100 => 'NET_SSH2_MSG_CHANNEL_FAILURE' + ); + $this->disconnect_reasons = array( + 1 => 'NET_SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT', + 2 => 'NET_SSH2_DISCONNECT_PROTOCOL_ERROR', + 3 => 'NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED', + 4 => 'NET_SSH2_DISCONNECT_RESERVED', + 5 => 'NET_SSH2_DISCONNECT_MAC_ERROR', + 6 => 'NET_SSH2_DISCONNECT_COMPRESSION_ERROR', + 7 => 'NET_SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE', + 8 => 'NET_SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED', + 9 => 'NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE', + 10 => 'NET_SSH2_DISCONNECT_CONNECTION_LOST', + 11 => 'NET_SSH2_DISCONNECT_BY_APPLICATION', + 12 => 'NET_SSH2_DISCONNECT_TOO_MANY_CONNECTIONS', + 13 => 'NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER', + 14 => 'NET_SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE', + 15 => 'NET_SSH2_DISCONNECT_ILLEGAL_USER_NAME' + ); + $this->channel_open_failure_reasons = array( + 1 => 'NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED' + ); + $this->terminal_modes = array( + 0 => 'NET_SSH2_TTY_OP_END' + ); + $this->channel_extended_data_type_codes = array( + 1 => 'NET_SSH2_EXTENDED_DATA_STDERR' + ); + + $this->_define_array( + $this->message_numbers, + $this->disconnect_reasons, + $this->channel_open_failure_reasons, + $this->terminal_modes, + $this->channel_extended_data_type_codes, + array(60 => 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ'), + array(60 => 'NET_SSH2_MSG_USERAUTH_PK_OK'), + array(60 => 'NET_SSH2_MSG_USERAUTH_INFO_REQUEST', + 61 => 'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE'), + // RFC 4419 - diffie-hellman-group-exchange-sha{1,256} + array(30 => 'NET_SSH2_MSG_KEXDH_GEX_REQUEST_OLD', + 31 => 'NET_SSH2_MSG_KEXDH_GEX_GROUP', + 32 => 'NET_SSH2_MSG_KEXDH_GEX_INIT', + 33 => 'NET_SSH2_MSG_KEXDH_GEX_REPLY', + 34 => 'NET_SSH2_MSG_KEXDH_GEX_REQUEST'), + // RFC 5656 - Elliptic Curves (for curve25519-sha256@libssh.org) + array(30 => 'NET_SSH2_MSG_KEX_ECDH_INIT', + 31 => 'NET_SSH2_MSG_KEX_ECDH_REPLY') + ); + + if (is_resource($host)) { + $this->fsock = $host; + return; + } + + if (is_string($host)) { + $this->host = $host; + $this->port = $port; + $this->timeout = $timeout; + } + } + + /** + * Set Crypto Engine Mode + * + * Possible $engine values: + * CRYPT_MODE_INTERNAL, CRYPT_MODE_MCRYPT + * + * @param int $engine + * @access public + */ + function setCryptoEngine($engine) + { + $this->crypto_engine = $engine; + } + + /** + * Send Identification String First + * + * https://tools.ietf.org/html/rfc4253#section-4.2 says "when the connection has been established, + * both sides MUST send an identification string". It does not say which side sends it first. In + * theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy + * + * @access public + */ + function sendIdentificationStringFirst() + { + $this->send_id_string_first = true; + } + + /** + * Send Identification String Last + * + * https://tools.ietf.org/html/rfc4253#section-4.2 says "when the connection has been established, + * both sides MUST send an identification string". It does not say which side sends it first. In + * theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy + * + * @access public + */ + function sendIdentificationStringLast() + { + $this->send_id_string_first = false; + } + + /** + * Send SSH_MSG_KEXINIT First + * + * https://tools.ietf.org/html/rfc4253#section-7.1 says "key exchange begins by each sending + * sending the [SSH_MSG_KEXINIT] packet". It does not say which side sends it first. In theory + * it shouldn't matter but it is a fact of life that some SSH servers are simply buggy + * + * @access public + */ + function sendKEXINITFirst() + { + $this->send_kex_first = true; + } + + /** + * Send SSH_MSG_KEXINIT Last + * + * https://tools.ietf.org/html/rfc4253#section-7.1 says "key exchange begins by each sending + * sending the [SSH_MSG_KEXINIT] packet". It does not say which side sends it first. In theory + * it shouldn't matter but it is a fact of life that some SSH servers are simply buggy + * + * @access public + */ + function sendKEXINITLast() + { + $this->send_kex_first = false; + } + + /** + * Connect to an SSHv2 server + * + * @return bool + * @access private + */ + function _connect() + { + if ($this->bitmap & self::MASK_CONSTRUCTOR) { + return false; + } + + $this->bitmap |= self::MASK_CONSTRUCTOR; + + $this->curTimeout = $this->timeout; + + $this->last_packet = microtime(true); + + if (!is_resource($this->fsock)) { + $start = microtime(true); + // with stream_select a timeout of 0 means that no timeout takes place; + // with fsockopen a timeout of 0 means that you instantly timeout + // to resolve this incompatibility a timeout of 100,000 will be used for fsockopen if timeout is 0 + $this->fsock = @fsockopen($this->host, $this->port, $errno, $errstr, $this->curTimeout == 0 ? 100000 : $this->curTimeout); + if (!$this->fsock) { + $host = $this->host . ':' . $this->port; + user_error(rtrim("Cannot connect to $host. Error $errno. $errstr")); + return false; + } + $elapsed = microtime(true) - $start; + + if ($this->curTimeout) { + $this->curTimeout-= $elapsed; + if ($this->curTimeout < 0) { + $this->is_timeout = true; + return false; + } + } + } + + $this->identifier = $this->_generate_identifier(); + + if ($this->send_id_string_first) { + fputs($this->fsock, $this->identifier . "\r\n"); + } + + /* According to the SSH2 specs, + + "The server MAY send other lines of data before sending the version + string. Each line SHOULD be terminated by a Carriage Return and Line + Feed. Such lines MUST NOT begin with "SSH-", and SHOULD be encoded + in ISO-10646 UTF-8 [RFC3629] (language is not specified). Clients + MUST be able to process such lines." */ + $data = ''; + while (!feof($this->fsock) && !preg_match('#(.*)^(SSH-(\d\.\d+).*)#ms', $data, $matches)) { + $line = ''; + while (true) { + if ($this->curTimeout) { + if ($this->curTimeout < 0) { + $this->is_timeout = true; + return false; + } + $read = array($this->fsock); + $write = $except = null; + $start = microtime(true); + $sec = floor($this->curTimeout); + $usec = 1000000 * ($this->curTimeout - $sec); + // on windows this returns a "Warning: Invalid CRT parameters detected" error + // the !count() is done as a workaround for + if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) { + $this->is_timeout = true; + return false; + } + $elapsed = microtime(true) - $start; + $this->curTimeout-= $elapsed; + } + + $temp = stream_get_line($this->fsock, 255, "\n"); + if (strlen($temp) == 255) { + continue; + } + if ($temp === false) { + return false; + } + + $line.= "$temp\n"; + + // quoting RFC4253, "Implementers who wish to maintain + // compatibility with older, undocumented versions of this protocol may + // want to process the identification string without expecting the + // presence of the carriage return character for reasons described in + // Section 5 of this document." + + //if (substr($line, -2) == "\r\n") { + // break; + //} + + break; + } + + $data.= $line; + } + + if (feof($this->fsock)) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + + $extra = $matches[1]; + + if (defined('NET_SSH2_LOGGING')) { + $this->_append_log('<-', $matches[0]); + $this->_append_log('->', $this->identifier . "\r\n"); + } + + $this->server_identifier = trim($temp, "\r\n"); + if (strlen($extra)) { + $this->errors[] = $data; + } + + if (version_compare($matches[3], '1.99', '<')) { + user_error("Cannot connect to SSH $matches[3] servers"); + return false; + } + + if (!$this->send_id_string_first) { + fputs($this->fsock, $this->identifier . "\r\n"); + } + + if (!$this->send_kex_first) { + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + + if (!strlen($response) || ord($response[0]) != NET_SSH2_MSG_KEXINIT) { + user_error('Expected SSH_MSG_KEXINIT'); + return false; + } + + if (!$this->_key_exchange($response)) { + return false; + } + } + + if ($this->send_kex_first && !$this->_key_exchange()) { + return false; + } + + $this->bitmap|= self::MASK_CONNECTED; + + return true; + } + + /** + * Generates the SSH identifier + * + * You should overwrite this method in your own class if you want to use another identifier + * + * @access protected + * @return string + */ + function _generate_identifier() + { + $identifier = 'SSH-2.0-phpseclib_2.0'; + + $ext = array(); + if (function_exists('sodium_crypto_box_publickey_from_secretkey')) { + $ext[] = 'libsodium'; + } + + if (extension_loaded('openssl')) { + $ext[] = 'openssl'; + } elseif (extension_loaded('mcrypt')) { + $ext[] = 'mcrypt'; + } + + if (extension_loaded('gmp')) { + $ext[] = 'gmp'; + } elseif (extension_loaded('bcmath')) { + $ext[] = 'bcmath'; + } + + if (!empty($ext)) { + $identifier .= ' (' . implode(', ', $ext) . ')'; + } + + return $identifier; + } + + /** + * Key Exchange + * + * @param string $kexinit_payload_server optional + * @access private + */ + function _key_exchange($kexinit_payload_server = false) + { + $preferred = $this->preferred; + + $kex_algorithms = isset($preferred['kex']) ? + $preferred['kex'] : + $this->getSupportedKEXAlgorithms(); + $server_host_key_algorithms = isset($preferred['hostkey']) ? + $preferred['hostkey'] : + $this->getSupportedHostKeyAlgorithms(); + $s2c_encryption_algorithms = isset($preferred['server_to_client']['crypt']) ? + $preferred['server_to_client']['crypt'] : + $this->getSupportedEncryptionAlgorithms(); + $c2s_encryption_algorithms = isset($preferred['client_to_server']['crypt']) ? + $preferred['client_to_server']['crypt'] : + $this->getSupportedEncryptionAlgorithms(); + $s2c_mac_algorithms = isset($preferred['server_to_client']['mac']) ? + $preferred['server_to_client']['mac'] : + $this->getSupportedMACAlgorithms(); + $c2s_mac_algorithms = isset($preferred['client_to_server']['mac']) ? + $preferred['client_to_server']['mac'] : + $this->getSupportedMACAlgorithms(); + $s2c_compression_algorithms = isset($preferred['server_to_client']['comp']) ? + $preferred['server_to_client']['comp'] : + $this->getSupportedCompressionAlgorithms(); + $c2s_compression_algorithms = isset($preferred['client_to_server']['comp']) ? + $preferred['client_to_server']['comp'] : + $this->getSupportedCompressionAlgorithms(); + + // some SSH servers have buggy implementations of some of the above algorithms + switch (true) { + case $this->server_identifier == 'SSH-2.0-SSHD': + case substr($this->server_identifier, 0, 13) == 'SSH-2.0-DLINK': + if (!isset($preferred['server_to_client']['mac'])) { + $s2c_mac_algorithms = array_values(array_diff( + $s2c_mac_algorithms, + array('hmac-sha1-96', 'hmac-md5-96') + )); + } + if (!isset($preferred['client_to_server']['mac'])) { + $c2s_mac_algorithms = array_values(array_diff( + $c2s_mac_algorithms, + array('hmac-sha1-96', 'hmac-md5-96') + )); + } + } + + $str_kex_algorithms = implode(',', $kex_algorithms); + $str_server_host_key_algorithms = implode(',', $server_host_key_algorithms); + $encryption_algorithms_server_to_client = implode(',', $s2c_encryption_algorithms); + $encryption_algorithms_client_to_server = implode(',', $c2s_encryption_algorithms); + $mac_algorithms_server_to_client = implode(',', $s2c_mac_algorithms); + $mac_algorithms_client_to_server = implode(',', $c2s_mac_algorithms); + $compression_algorithms_server_to_client = implode(',', $s2c_compression_algorithms); + $compression_algorithms_client_to_server = implode(',', $c2s_compression_algorithms); + + $client_cookie = Random::string(16); + + $kexinit_payload_client = pack( + 'Ca*Na*Na*Na*Na*Na*Na*Na*Na*Na*Na*CN', + NET_SSH2_MSG_KEXINIT, + $client_cookie, + strlen($str_kex_algorithms), + $str_kex_algorithms, + strlen($str_server_host_key_algorithms), + $str_server_host_key_algorithms, + strlen($encryption_algorithms_client_to_server), + $encryption_algorithms_client_to_server, + strlen($encryption_algorithms_server_to_client), + $encryption_algorithms_server_to_client, + strlen($mac_algorithms_client_to_server), + $mac_algorithms_client_to_server, + strlen($mac_algorithms_server_to_client), + $mac_algorithms_server_to_client, + strlen($compression_algorithms_client_to_server), + $compression_algorithms_client_to_server, + strlen($compression_algorithms_server_to_client), + $compression_algorithms_server_to_client, + 0, + '', + 0, + '', + 0, + 0 + ); + + if ($this->send_kex_first) { + if (!$this->_send_binary_packet($kexinit_payload_client)) { + return false; + } + + $kexinit_payload_server = $this->_get_binary_packet(); + if ($kexinit_payload_server === false) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + + if (!strlen($kexinit_payload_server) || ord($kexinit_payload_server[0]) != NET_SSH2_MSG_KEXINIT) { + user_error('Expected SSH_MSG_KEXINIT'); + return false; + } + } + + $response = $kexinit_payload_server; + $this->_string_shift($response, 1); // skip past the message number (it should be SSH_MSG_KEXINIT) + $server_cookie = $this->_string_shift($response, 16); + + if (strlen($response) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->kex_algorithms = explode(',', $this->_string_shift($response, $temp['length'])); + + if (strlen($response) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->server_host_key_algorithms = explode(',', $this->_string_shift($response, $temp['length'])); + + if (strlen($response) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->encryption_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length'])); + + if (strlen($response) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->encryption_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length'])); + + if (strlen($response) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->mac_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length'])); + + if (strlen($response) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->mac_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length'])); + + if (strlen($response) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->compression_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length'])); + + if (strlen($response) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->compression_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length'])); + + if (strlen($response) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->languages_client_to_server = explode(',', $this->_string_shift($response, $temp['length'])); + + if (strlen($response) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->languages_server_to_client = explode(',', $this->_string_shift($response, $temp['length'])); + + if (!strlen($response)) { + return false; + } + extract(unpack('Cfirst_kex_packet_follows', $this->_string_shift($response, 1))); + $first_kex_packet_follows = $first_kex_packet_follows != 0; + + if (!$this->send_kex_first && !$this->_send_binary_packet($kexinit_payload_client)) { + return false; + } + + // we need to decide upon the symmetric encryption algorithms before we do the diffie-hellman key exchange + // we don't initialize any crypto-objects, yet - we do that, later. for now, we need the lengths to make the + // diffie-hellman key exchange as fast as possible + $decrypt = $this->_array_intersect_first($s2c_encryption_algorithms, $this->encryption_algorithms_server_to_client); + $decryptKeyLength = $this->_encryption_algorithm_to_key_size($decrypt); + if ($decryptKeyLength === null) { + user_error('No compatible server to client encryption algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $encrypt = $this->_array_intersect_first($c2s_encryption_algorithms, $this->encryption_algorithms_client_to_server); + $encryptKeyLength = $this->_encryption_algorithm_to_key_size($encrypt); + if ($encryptKeyLength === null) { + user_error('No compatible client to server encryption algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + // through diffie-hellman key exchange a symmetric key is obtained + $this->kex_algorithm = $kex_algorithm = $this->_array_intersect_first($kex_algorithms, $this->kex_algorithms); + if ($kex_algorithm === false) { + user_error('No compatible key exchange algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $server_host_key_algorithm = $this->_array_intersect_first($server_host_key_algorithms, $this->server_host_key_algorithms); + if ($server_host_key_algorithm === false) { + user_error('No compatible server host key algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $mac_algorithm_in = $this->_array_intersect_first($s2c_mac_algorithms, $this->mac_algorithms_server_to_client); + if ($mac_algorithm_in === false) { + user_error('No compatible server to client message authentication algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $compression_algorithm_out = $this->_array_intersect_first($c2s_compression_algorithms, $this->compression_algorithms_client_to_server); + if ($compression_algorithm_out === false) { + user_error('No compatible client to server compression algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + //$this->decompress = $compression_algorithm_out == 'zlib'; + + $compression_algorithm_in = $this->_array_intersect_first($s2c_compression_algorithms, $this->compression_algorithms_client_to_server); + if ($compression_algorithm_in === false) { + user_error('No compatible server to client compression algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + //$this->compress = $compression_algorithm_in == 'zlib'; + + // Only relevant in diffie-hellman-group-exchange-sha{1,256}, otherwise empty. + $exchange_hash_rfc4419 = ''; + + if ($kex_algorithm === 'curve25519-sha256@libssh.org') { + $x = Random::string(32); + $eBytes = sodium_crypto_box_publickey_from_secretkey($x); + $clientKexInitMessage = 'NET_SSH2_MSG_KEX_ECDH_INIT'; + $serverKexReplyMessage = 'NET_SSH2_MSG_KEX_ECDH_REPLY'; + $kexHash = new Hash('sha256'); + } else { + if (strpos($kex_algorithm, 'diffie-hellman-group-exchange') === 0) { + $dh_group_sizes_packed = pack( + 'NNN', + $this->kex_dh_group_size_min, + $this->kex_dh_group_size_preferred, + $this->kex_dh_group_size_max + ); + $packet = pack( + 'Ca*', + NET_SSH2_MSG_KEXDH_GEX_REQUEST, + $dh_group_sizes_packed + ); + if (!$this->_send_binary_packet($packet)) { + return false; + } + $this->_updateLogHistory('UNKNOWN (34)', 'NET_SSH2_MSG_KEXDH_GEX_REQUEST'); + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + extract(unpack('Ctype', $this->_string_shift($response, 1))); + if ($type != NET_SSH2_MSG_KEXDH_GEX_GROUP) { + user_error('Expected SSH_MSG_KEX_DH_GEX_GROUP'); + return false; + } + $this->_updateLogHistory('NET_SSH2_MSG_KEXDH_REPLY', 'NET_SSH2_MSG_KEXDH_GEX_GROUP'); + + if (strlen($response) < 4) { + return false; + } + extract(unpack('NprimeLength', $this->_string_shift($response, 4))); + $primeBytes = $this->_string_shift($response, $primeLength); + $prime = new BigInteger($primeBytes, -256); + + if (strlen($response) < 4) { + return false; + } + extract(unpack('NgLength', $this->_string_shift($response, 4))); + $gBytes = $this->_string_shift($response, $gLength); + $g = new BigInteger($gBytes, -256); + + $exchange_hash_rfc4419 = pack( + 'a*Na*Na*', + $dh_group_sizes_packed, + $primeLength, + $primeBytes, + $gLength, + $gBytes + ); + + $clientKexInitMessage = 'NET_SSH2_MSG_KEXDH_GEX_INIT'; + $serverKexReplyMessage = 'NET_SSH2_MSG_KEXDH_GEX_REPLY'; + } else { + switch ($kex_algorithm) { + // see http://tools.ietf.org/html/rfc2409#section-6.2 and + // http://tools.ietf.org/html/rfc2412, appendex E + case 'diffie-hellman-group1-sha1': + $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' . + '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' . + '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' . + 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF'; + break; + // see http://tools.ietf.org/html/rfc3526#section-3 + case 'diffie-hellman-group14-sha1': + $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' . + '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' . + '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' . + 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' . + '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' . + '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' . + 'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' . + '3995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF'; + break; + } + // For both diffie-hellman-group1-sha1 and diffie-hellman-group14-sha1 + // the generator field element is 2 (decimal) and the hash function is sha1. + $g = new BigInteger(2); + $prime = new BigInteger($prime, 16); + $clientKexInitMessage = 'NET_SSH2_MSG_KEXDH_INIT'; + $serverKexReplyMessage = 'NET_SSH2_MSG_KEXDH_REPLY'; + } + + switch ($kex_algorithm) { + case 'diffie-hellman-group-exchange-sha256': + $kexHash = new Hash('sha256'); + break; + default: + $kexHash = new Hash('sha1'); + } + + /* To increase the speed of the key exchange, both client and server may + reduce the size of their private exponents. It should be at least + twice as long as the key material that is generated from the shared + secret. For more details, see the paper by van Oorschot and Wiener + [VAN-OORSCHOT]. + + -- http://tools.ietf.org/html/rfc4419#section-6.2 */ + $one = new BigInteger(1); + $keyLength = min($kexHash->getLength(), max($encryptKeyLength, $decryptKeyLength)); + $max = $one->bitwise_leftShift(16 * $keyLength); // 2 * 8 * $keyLength + $max = $max->subtract($one); + + $x = $one->random($one, $max); + $e = $g->modPow($x, $prime); + + $eBytes = $e->toBytes(true); + } + $data = pack('CNa*', constant($clientKexInitMessage), strlen($eBytes), $eBytes); + + if (!$this->_send_binary_packet($data)) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + switch ($clientKexInitMessage) { + case 'NET_SSH2_MSG_KEX_ECDH_INIT': + $this->_updateLogHistory('NET_SSH2_MSG_KEXDH_INIT', 'NET_SSH2_MSG_KEX_ECDH_INIT'); + break; + case 'NET_SSH2_MSG_KEXDH_GEX_INIT': + $this->_updateLogHistory('UNKNOWN (32)', 'NET_SSH2_MSG_KEXDH_GEX_INIT'); + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + if (!strlen($response)) { + return false; + } + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + if ($type != constant($serverKexReplyMessage)) { + user_error("Expected $serverKexReplyMessage"); + return false; + } + switch ($serverKexReplyMessage) { + case 'NET_SSH2_MSG_KEX_ECDH_REPLY': + $this->_updateLogHistory('NET_SSH2_MSG_KEXDH_REPLY', 'NET_SSH2_MSG_KEX_ECDH_REPLY'); + break; + case 'NET_SSH2_MSG_KEXDH_GEX_REPLY': + $this->_updateLogHistory('UNKNOWN (33)', 'NET_SSH2_MSG_KEXDH_GEX_REPLY'); + } + + if (strlen($response) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->server_public_host_key = $server_public_host_key = $this->_string_shift($response, $temp['length']); + + if (strlen($server_public_host_key) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); + $public_key_format = $this->_string_shift($server_public_host_key, $temp['length']); + + if (strlen($response) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $fBytes = $this->_string_shift($response, $temp['length']); + + if (strlen($response) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($response, 4)); + $this->signature = $this->_string_shift($response, $temp['length']); + + if (strlen($this->signature) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($this->signature, 4)); + $this->signature_format = $this->_string_shift($this->signature, $temp['length']); + + if ($kex_algorithm === 'curve25519-sha256@libssh.org') { + if (strlen($fBytes) !== 32) { + user_error('Received curve25519 public key of invalid length.'); + return false; + } + $key = new BigInteger(sodium_crypto_scalarmult($x, $fBytes), 256); + // sodium_compat doesn't emulate sodium_memzero + // also, with v1 of libsodium API the extension identifies itself as + // libsodium whereas v2 of the libsodium API (what PHP 7.2+ includes) + // identifies itself as sodium. sodium_compat uses the v1 API to + // emulate the v2 API if it's the v1 API that's available + if (extension_loaded('sodium') || extension_loaded('libsodium')) { + sodium_memzero($x); + } + } else { + $f = new BigInteger($fBytes, -256); + $key = $f->modPow($x, $prime); + } + $keyBytes = $key->toBytes(true); + + $this->exchange_hash = pack( + 'Na*Na*Na*Na*Na*a*Na*Na*Na*', + strlen($this->identifier), + $this->identifier, + strlen($this->server_identifier), + $this->server_identifier, + strlen($kexinit_payload_client), + $kexinit_payload_client, + strlen($kexinit_payload_server), + $kexinit_payload_server, + strlen($this->server_public_host_key), + $this->server_public_host_key, + $exchange_hash_rfc4419, + strlen($eBytes), + $eBytes, + strlen($fBytes), + $fBytes, + strlen($keyBytes), + $keyBytes + ); + + $this->exchange_hash = $kexHash->hash($this->exchange_hash); + + if ($this->session_id === false) { + $this->session_id = $this->exchange_hash; + } + + switch ($server_host_key_algorithm) { + case 'ssh-dss': + $expected_key_format = 'ssh-dss'; + break; + //case 'rsa-sha2-256': + //case 'rsa-sha2-512': + //case 'ssh-rsa': + default: + $expected_key_format = 'ssh-rsa'; + } + + if ($public_key_format != $expected_key_format || $this->signature_format != $server_host_key_algorithm) { + switch (true) { + case $this->signature_format == $server_host_key_algorithm: + case $server_host_key_algorithm != 'rsa-sha2-256' && $server_host_key_algorithm != 'rsa-sha2-512': + case $this->signature_format != 'ssh-rsa': + user_error('Server Host Key Algorithm Mismatch'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + } + + $packet = pack( + 'C', + NET_SSH2_MSG_NEWKEYS + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $response = $this->_get_binary_packet(); + + if ($response === false) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + + if (!strlen($response)) { + return false; + } + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + if ($type != NET_SSH2_MSG_NEWKEYS) { + user_error('Expected SSH_MSG_NEWKEYS'); + return false; + } + + $keyBytes = pack('Na*', strlen($keyBytes), $keyBytes); + + $this->encrypt = $this->_encryption_algorithm_to_crypt_instance($encrypt); + if ($this->encrypt) { + if ($this->crypto_engine) { + $this->encrypt->setPreferredEngine($this->crypto_engine); + } + if ($this->encrypt->block_size) { + $this->encrypt_block_size = $this->encrypt->block_size; + } + $this->encrypt->enableContinuousBuffer(); + $this->encrypt->disablePadding(); + + if ($this->encrypt->getBlockLength()) { + $this->encrypt_block_size = $this->encrypt->getBlockLength() >> 3; + } + + $iv = $kexHash->hash($keyBytes . $this->exchange_hash . 'A' . $this->session_id); + while ($this->encrypt_block_size > strlen($iv)) { + $iv.= $kexHash->hash($keyBytes . $this->exchange_hash . $iv); + } + $this->encrypt->setIV(substr($iv, 0, $this->encrypt_block_size)); + + $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'C' . $this->session_id); + while ($encryptKeyLength > strlen($key)) { + $key.= $kexHash->hash($keyBytes . $this->exchange_hash . $key); + } + $this->encrypt->setKey(substr($key, 0, $encryptKeyLength)); + + $this->encrypt->name = $decrypt; + } + + $this->decrypt = $this->_encryption_algorithm_to_crypt_instance($decrypt); + if ($this->decrypt) { + if ($this->crypto_engine) { + $this->decrypt->setPreferredEngine($this->crypto_engine); + } + if ($this->decrypt->block_size) { + $this->decrypt_block_size = $this->decrypt->block_size; + } + $this->decrypt->enableContinuousBuffer(); + $this->decrypt->disablePadding(); + + if ($this->decrypt->getBlockLength()) { + $this->decrypt_block_size = $this->decrypt->getBlockLength() >> 3; + } + + $iv = $kexHash->hash($keyBytes . $this->exchange_hash . 'B' . $this->session_id); + while ($this->decrypt_block_size > strlen($iv)) { + $iv.= $kexHash->hash($keyBytes . $this->exchange_hash . $iv); + } + $this->decrypt->setIV(substr($iv, 0, $this->decrypt_block_size)); + + $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'D' . $this->session_id); + while ($decryptKeyLength > strlen($key)) { + $key.= $kexHash->hash($keyBytes . $this->exchange_hash . $key); + } + $this->decrypt->setKey(substr($key, 0, $decryptKeyLength)); + + $this->decrypt->name = $decrypt; + } + + /* The "arcfour128" algorithm is the RC4 cipher, as described in + [SCHNEIER], using a 128-bit key. The first 1536 bytes of keystream + generated by the cipher MUST be discarded, and the first byte of the + first encrypted packet MUST be encrypted using the 1537th byte of + keystream. + + -- http://tools.ietf.org/html/rfc4345#section-4 */ + if ($encrypt == 'arcfour128' || $encrypt == 'arcfour256') { + $this->encrypt->encrypt(str_repeat("\0", 1536)); + } + if ($decrypt == 'arcfour128' || $decrypt == 'arcfour256') { + $this->decrypt->decrypt(str_repeat("\0", 1536)); + } + + $mac_algorithm_out = $this->_array_intersect_first($c2s_mac_algorithms, $this->mac_algorithms_client_to_server); + if ($mac_algorithm_out === false) { + user_error('No compatible client to server message authentication algorithms found'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $createKeyLength = 0; // ie. $mac_algorithm == 'none' + switch ($mac_algorithm_out) { + case 'hmac-sha2-256': + $this->hmac_create = new Hash('sha256'); + $createKeyLength = 32; + break; + case 'hmac-sha1': + $this->hmac_create = new Hash('sha1'); + $createKeyLength = 20; + break; + case 'hmac-sha1-96': + $this->hmac_create = new Hash('sha1-96'); + $createKeyLength = 20; + break; + case 'hmac-md5': + $this->hmac_create = new Hash('md5'); + $createKeyLength = 16; + break; + case 'hmac-md5-96': + $this->hmac_create = new Hash('md5-96'); + $createKeyLength = 16; + } + $this->hmac_create->name = $mac_algorithm_out; + + $checkKeyLength = 0; + $this->hmac_size = 0; + switch ($mac_algorithm_in) { + case 'hmac-sha2-256': + $this->hmac_check = new Hash('sha256'); + $checkKeyLength = 32; + $this->hmac_size = 32; + break; + case 'hmac-sha1': + $this->hmac_check = new Hash('sha1'); + $checkKeyLength = 20; + $this->hmac_size = 20; + break; + case 'hmac-sha1-96': + $this->hmac_check = new Hash('sha1-96'); + $checkKeyLength = 20; + $this->hmac_size = 12; + break; + case 'hmac-md5': + $this->hmac_check = new Hash('md5'); + $checkKeyLength = 16; + $this->hmac_size = 16; + break; + case 'hmac-md5-96': + $this->hmac_check = new Hash('md5-96'); + $checkKeyLength = 16; + $this->hmac_size = 12; + } + $this->hmac_check->name = $mac_algorithm_in; + + $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'E' . $this->session_id); + while ($createKeyLength > strlen($key)) { + $key.= $kexHash->hash($keyBytes . $this->exchange_hash . $key); + } + $this->hmac_create->setKey(substr($key, 0, $createKeyLength)); + + $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'F' . $this->session_id); + while ($checkKeyLength > strlen($key)) { + $key.= $kexHash->hash($keyBytes . $this->exchange_hash . $key); + } + $this->hmac_check->setKey(substr($key, 0, $checkKeyLength)); + + return true; + } + + /** + * Maps an encryption algorithm name to the number of key bytes. + * + * @param string $algorithm Name of the encryption algorithm + * @return int|null Number of bytes as an integer or null for unknown + * @access private + */ + function _encryption_algorithm_to_key_size($algorithm) + { + if ($this->bad_key_size_fix && $this->_bad_algorithm_candidate($algorithm)) { + return 16; + } + + switch ($algorithm) { + case 'none': + return 0; + case 'aes128-cbc': + case 'aes128-ctr': + case 'arcfour': + case 'arcfour128': + case 'blowfish-cbc': + case 'blowfish-ctr': + case 'twofish128-cbc': + case 'twofish128-ctr': + return 16; + case '3des-cbc': + case '3des-ctr': + case 'aes192-cbc': + case 'aes192-ctr': + case 'twofish192-cbc': + case 'twofish192-ctr': + return 24; + case 'aes256-cbc': + case 'aes256-ctr': + case 'arcfour256': + case 'twofish-cbc': + case 'twofish256-cbc': + case 'twofish256-ctr': + return 32; + } + return null; + } + + /** + * Maps an encryption algorithm name to an instance of a subclass of + * \phpseclib\Crypt\Base. + * + * @param string $algorithm Name of the encryption algorithm + * @return mixed Instance of \phpseclib\Crypt\Base or null for unknown + * @access private + */ + function _encryption_algorithm_to_crypt_instance($algorithm) + { + switch ($algorithm) { + case '3des-cbc': + return new TripleDES(); + case '3des-ctr': + return new TripleDES(Base::MODE_CTR); + case 'aes256-cbc': + case 'aes192-cbc': + case 'aes128-cbc': + return new Rijndael(); + case 'aes256-ctr': + case 'aes192-ctr': + case 'aes128-ctr': + return new Rijndael(Base::MODE_CTR); + case 'blowfish-cbc': + return new Blowfish(); + case 'blowfish-ctr': + return new Blowfish(Base::MODE_CTR); + case 'twofish128-cbc': + case 'twofish192-cbc': + case 'twofish256-cbc': + case 'twofish-cbc': + return new Twofish(); + case 'twofish128-ctr': + case 'twofish192-ctr': + case 'twofish256-ctr': + return new Twofish(Base::MODE_CTR); + case 'arcfour': + case 'arcfour128': + case 'arcfour256': + return new RC4(); + } + return null; + } + + /** + * Tests whether or not proposed algorithm has a potential for issues + * + * @link https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/ssh2-aesctr-openssh.html + * @link https://bugzilla.mindrot.org/show_bug.cgi?id=1291 + * @param string $algorithm Name of the encryption algorithm + * @return bool + * @access private + */ + function _bad_algorithm_candidate($algorithm) + { + switch ($algorithm) { + case 'arcfour256': + case 'aes192-ctr': + case 'aes256-ctr': + return true; + } + + return false; + } + + /** + * Login + * + * The $password parameter can be a plaintext password, a \phpseclib\Crypt\RSA object or an array + * + * @param string $username + * @return bool + * @see self::_login() + * @access public + */ + function login($username) + { + $args = func_get_args(); + $this->auth[] = $args; + + // try logging with 'none' as an authentication method first since that's what + // PuTTY does + if (substr($this->server_identifier, 0, 13) != 'SSH-2.0-CoreFTP') { + if ($this->_login($username)) { + return true; + } + if (count($args) == 1) { + return false; + } + } + return call_user_func_array(array(&$this, '_login'), $args); + } + + /** + * Login Helper + * + * @param string $username + * @return bool + * @see self::_login_helper() + * @access private + */ + function _login($username) + { + if (!($this->bitmap & self::MASK_CONSTRUCTOR)) { + if (!$this->_connect()) { + return false; + } + } + + $args = array_slice(func_get_args(), 1); + if (empty($args)) { + return $this->_login_helper($username); + } + + foreach ($args as $arg) { + if ($this->_login_helper($username, $arg)) { + return true; + } + } + return false; + } + + /** + * Login Helper + * + * @param string $username + * @param string $password + * @return bool + * @access private + * @internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis} + * by sending dummy SSH_MSG_IGNORE messages. + */ + function _login_helper($username, $password = null) + { + if (!($this->bitmap & self::MASK_CONNECTED)) { + return false; + } + + if (!($this->bitmap & self::MASK_LOGIN_REQ)) { + $packet = pack( + 'CNa*', + NET_SSH2_MSG_SERVICE_REQUEST, + strlen('ssh-userauth'), + 'ssh-userauth' + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + if ($this->retry_connect) { + $this->retry_connect = false; + if (!$this->_connect()) { + return false; + } + return $this->_login_helper($username, $password); + } + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + + if (strlen($response) < 4) { + return false; + } + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + if ($type != NET_SSH2_MSG_SERVICE_ACCEPT) { + user_error('Expected SSH_MSG_SERVICE_ACCEPT'); + return false; + } + $this->bitmap |= self::MASK_LOGIN_REQ; + } + + if (strlen($this->last_interactive_response)) { + return !is_string($password) && !is_array($password) ? false : $this->_keyboard_interactive_process($password); + } + + if ($password instanceof RSA) { + return $this->_privatekey_login($username, $password); + } elseif ($password instanceof Agent) { + return $this->_ssh_agent_login($username, $password); + } + + if (is_array($password)) { + if ($this->_keyboard_interactive_login($username, $password)) { + $this->bitmap |= self::MASK_LOGIN; + return true; + } + return false; + } + + if (!isset($password)) { + $packet = pack( + 'CNa*Na*Na*', + NET_SSH2_MSG_USERAUTH_REQUEST, + strlen($username), + $username, + strlen('ssh-connection'), + 'ssh-connection', + strlen('none'), + 'none' + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + + if (!strlen($response)) { + return false; + } + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + switch ($type) { + case NET_SSH2_MSG_USERAUTH_SUCCESS: + $this->bitmap |= self::MASK_LOGIN; + return true; + //case NET_SSH2_MSG_USERAUTH_FAILURE: + default: + return false; + } + } + + $packet = pack( + 'CNa*Na*Na*CNa*', + NET_SSH2_MSG_USERAUTH_REQUEST, + strlen($username), + $username, + strlen('ssh-connection'), + 'ssh-connection', + strlen('password'), + 'password', + 0, + strlen($password), + $password + ); + + // remove the username and password from the logged packet + if (!defined('NET_SSH2_LOGGING')) { + $logged = null; + } else { + $logged = pack( + 'CNa*Na*Na*CNa*', + NET_SSH2_MSG_USERAUTH_REQUEST, + strlen('username'), + 'username', + strlen('ssh-connection'), + 'ssh-connection', + strlen('password'), + 'password', + 0, + strlen('password'), + 'password' + ); + } + + if (!$this->_send_binary_packet($packet, $logged)) { + return false; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + + if (!strlen($response)) { + return false; + } + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + switch ($type) { + case NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ: // in theory, the password can be changed + $this->_updateLogHistory('UNKNOWN (60)', 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ'); + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->errors[] = 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ: ' . $this->_string_shift($response, $length); + return $this->_disconnect(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER); + case NET_SSH2_MSG_USERAUTH_FAILURE: + // can we use keyboard-interactive authentication? if not then either the login is bad or the server employees + // multi-factor authentication + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $auth_methods = explode(',', $this->_string_shift($response, $length)); + if (!strlen($response)) { + return false; + } + extract(unpack('Cpartial_success', $this->_string_shift($response, 1))); + $partial_success = $partial_success != 0; + + if (!$partial_success && in_array('keyboard-interactive', $auth_methods)) { + if ($this->_keyboard_interactive_login($username, $password)) { + $this->bitmap |= self::MASK_LOGIN; + return true; + } + return false; + } + return false; + case NET_SSH2_MSG_USERAUTH_SUCCESS: + $this->bitmap |= self::MASK_LOGIN; + return true; + } + + return false; + } + + /** + * Login via keyboard-interactive authentication + * + * See {@link http://tools.ietf.org/html/rfc4256 RFC4256} for details. This is not a full-featured keyboard-interactive authenticator. + * + * @param string $username + * @param string $password + * @return bool + * @access private + */ + function _keyboard_interactive_login($username, $password) + { + $packet = pack( + 'CNa*Na*Na*Na*Na*', + NET_SSH2_MSG_USERAUTH_REQUEST, + strlen($username), + $username, + strlen('ssh-connection'), + 'ssh-connection', + strlen('keyboard-interactive'), + 'keyboard-interactive', + 0, + '', + 0, + '' + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + return $this->_keyboard_interactive_process($password); + } + + /** + * Handle the keyboard-interactive requests / responses. + * + * @return bool + * @access private + */ + function _keyboard_interactive_process() + { + $responses = func_get_args(); + + if (strlen($this->last_interactive_response)) { + $response = $this->last_interactive_response; + } else { + $orig = $response = $this->_get_binary_packet(); + if ($response === false) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + } + + if (!strlen($response)) { + return false; + } + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + switch ($type) { + case NET_SSH2_MSG_USERAUTH_INFO_REQUEST: + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->_string_shift($response, $length); // name; may be empty + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->_string_shift($response, $length); // instruction; may be empty + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->_string_shift($response, $length); // language tag; may be empty + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nnum_prompts', $this->_string_shift($response, 4))); + + for ($i = 0; $i < count($responses); $i++) { + if (is_array($responses[$i])) { + foreach ($responses[$i] as $key => $value) { + $this->keyboard_requests_responses[$key] = $value; + } + unset($responses[$i]); + } + } + $responses = array_values($responses); + + if (isset($this->keyboard_requests_responses)) { + for ($i = 0; $i < $num_prompts; $i++) { + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + // prompt - ie. "Password: "; must not be empty + $prompt = $this->_string_shift($response, $length); + //$echo = $this->_string_shift($response) != chr(0); + foreach ($this->keyboard_requests_responses as $key => $value) { + if (substr($prompt, 0, strlen($key)) == $key) { + $responses[] = $value; + break; + } + } + } + } + + // see http://tools.ietf.org/html/rfc4256#section-3.2 + if (strlen($this->last_interactive_response)) { + $this->last_interactive_response = ''; + } else { + $this->_updateLogHistory('UNKNOWN (60)', 'NET_SSH2_MSG_USERAUTH_INFO_REQUEST'); + } + + if (!count($responses) && $num_prompts) { + $this->last_interactive_response = $orig; + return false; + } + + /* + After obtaining the requested information from the user, the client + MUST respond with an SSH_MSG_USERAUTH_INFO_RESPONSE message. + */ + // see http://tools.ietf.org/html/rfc4256#section-3.4 + $packet = $logged = pack('CN', NET_SSH2_MSG_USERAUTH_INFO_RESPONSE, count($responses)); + for ($i = 0; $i < count($responses); $i++) { + $packet.= pack('Na*', strlen($responses[$i]), $responses[$i]); + $logged.= pack('Na*', strlen('dummy-answer'), 'dummy-answer'); + } + + if (!$this->_send_binary_packet($packet, $logged)) { + return false; + } + + $this->_updateLogHistory('UNKNOWN (61)', 'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE'); + + /* + After receiving the response, the server MUST send either an + SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, or another + SSH_MSG_USERAUTH_INFO_REQUEST message. + */ + // maybe phpseclib should force close the connection after x request / responses? unless something like that is done + // there could be an infinite loop of request / responses. + return $this->_keyboard_interactive_process(); + case NET_SSH2_MSG_USERAUTH_SUCCESS: + return true; + case NET_SSH2_MSG_USERAUTH_FAILURE: + return false; + } + + return false; + } + + /** + * Login with an ssh-agent provided key + * + * @param string $username + * @param \phpseclib\System\SSH\Agent $agent + * @return bool + * @access private + */ + function _ssh_agent_login($username, $agent) + { + $this->agent = $agent; + $keys = $agent->requestIdentities(); + foreach ($keys as $key) { + if ($this->_privatekey_login($username, $key)) { + return true; + } + } + + return false; + } + + /** + * Login with an RSA private key + * + * @param string $username + * @param \phpseclib\Crypt\RSA $privatekey + * @return bool + * @access private + * @internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis} + * by sending dummy SSH_MSG_IGNORE messages. + */ + function _privatekey_login($username, $privatekey) + { + // see http://tools.ietf.org/html/rfc4253#page-15 + $publickey = $privatekey->getPublicKey(RSA::PUBLIC_FORMAT_RAW); + if ($publickey === false) { + return false; + } + + $publickey = array( + 'e' => $publickey['e']->toBytes(true), + 'n' => $publickey['n']->toBytes(true) + ); + $publickey = pack( + 'Na*Na*Na*', + strlen('ssh-rsa'), + 'ssh-rsa', + strlen($publickey['e']), + $publickey['e'], + strlen($publickey['n']), + $publickey['n'] + ); + + switch ($this->signature_format) { + case 'rsa-sha2-512': + $hash = 'sha512'; + $signatureType = 'rsa-sha2-512'; + break; + case 'rsa-sha2-256': + $hash = 'sha256'; + $signatureType = 'rsa-sha2-256'; + break; + //case 'ssh-rsa': + default: + $hash = 'sha1'; + $signatureType = 'ssh-rsa'; + } + + $part1 = pack( + 'CNa*Na*Na*', + NET_SSH2_MSG_USERAUTH_REQUEST, + strlen($username), + $username, + strlen('ssh-connection'), + 'ssh-connection', + strlen('publickey'), + 'publickey' + ); + $part2 = pack('Na*Na*', strlen($signatureType), $signatureType, strlen($publickey), $publickey); + + $packet = $part1 . chr(0) . $part2; + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + + if (!strlen($response)) { + return false; + } + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + switch ($type) { + case NET_SSH2_MSG_USERAUTH_FAILURE: + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->errors[] = 'SSH_MSG_USERAUTH_FAILURE: ' . $this->_string_shift($response, $length); + return false; + case NET_SSH2_MSG_USERAUTH_PK_OK: + // we'll just take it on faith that the public key blob and the public key algorithm name are as + // they should be + $this->_updateLogHistory('UNKNOWN (60)', 'NET_SSH2_MSG_USERAUTH_PK_OK'); + } + + $packet = $part1 . chr(1) . $part2; + $privatekey->setSignatureMode(RSA::SIGNATURE_PKCS1); + $privatekey->setHash($hash); + $signature = $privatekey->sign(pack('Na*a*', strlen($this->session_id), $this->session_id, $packet)); + $signature = pack('Na*Na*', strlen($signatureType), $signatureType, strlen($signature), $signature); + $packet.= pack('Na*', strlen($signature), $signature); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + + if (!strlen($response)) { + return false; + } + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + switch ($type) { + case NET_SSH2_MSG_USERAUTH_FAILURE: + // either the login is bad or the server employs multi-factor authentication + return false; + case NET_SSH2_MSG_USERAUTH_SUCCESS: + $this->bitmap |= self::MASK_LOGIN; + return true; + } + + return false; + } + + /** + * Set Timeout + * + * $ssh->exec('ping 127.0.0.1'); on a Linux host will never return and will run indefinitely. setTimeout() makes it so it'll timeout. + * Setting $timeout to false or 0 will mean there is no timeout. + * + * @param mixed $timeout + * @access public + */ + function setTimeout($timeout) + { + $this->timeout = $this->curTimeout = $timeout; + } + + /** + * Set Keep Alive + * + * Sends an SSH2_MSG_IGNORE message every x seconds, if x is a positive non-zero number. + * + * @param mixed $timeout + * @access public + */ + function setKeepAlive($interval) + { + $this->keepAlive = $interval; + } + + /** + * Get the output from stdError + * + * @access public + */ + function getStdError() + { + return $this->stdErrorLog; + } + + /** + * Execute Command + * + * If $callback is set to false then \phpseclib\Net\SSH2::_get_channel_packet(self::CHANNEL_EXEC) will need to be called manually. + * In all likelihood, this is not a feature you want to be taking advantage of. + * + * @param string $command + * @param Callback $callback + * @return string + * @access public + */ + function exec($command, $callback = null) + { + $this->curTimeout = $this->timeout; + $this->is_timeout = false; + $this->stdErrorLog = ''; + + if (!$this->isAuthenticated()) { + return false; + } + + if ($this->in_request_pty_exec) { + user_error('If you want to run multiple exec()\'s you will need to disable (and re-enable if appropriate) a PTY for each one.'); + return false; + } + + // RFC4254 defines the (client) window size as "bytes the other party can send before it must wait for the window to + // be adjusted". 0x7FFFFFFF is, at 2GB, the max size. technically, it should probably be decremented, but, + // honestly, if you're transferring more than 2GB, you probably shouldn't be using phpseclib, anyway. + // see http://tools.ietf.org/html/rfc4254#section-5.2 for more info + $this->window_size_server_to_client[self::CHANNEL_EXEC] = $this->window_size; + // 0x8000 is the maximum max packet size, per http://tools.ietf.org/html/rfc4253#section-6.1, although since PuTTy + // uses 0x4000, that's what will be used here, as well. + $packet_size = 0x4000; + + $packet = pack( + 'CNa*N3', + NET_SSH2_MSG_CHANNEL_OPEN, + strlen('session'), + 'session', + self::CHANNEL_EXEC, + $this->window_size_server_to_client[self::CHANNEL_EXEC], + $packet_size + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_OPEN; + + $response = $this->_get_channel_packet(self::CHANNEL_EXEC); + if ($response === false) { + return false; + } + + if ($this->request_pty === true) { + $terminal_modes = pack('C', NET_SSH2_TTY_OP_END); + $packet = pack( + 'CNNa*CNa*N5a*', + NET_SSH2_MSG_CHANNEL_REQUEST, + $this->server_channels[self::CHANNEL_EXEC], + strlen('pty-req'), + 'pty-req', + 1, + strlen('vt100'), + 'vt100', + $this->windowColumns, + $this->windowRows, + 0, + 0, + strlen($terminal_modes), + $terminal_modes + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + + if (!strlen($response)) { + return false; + } + list(, $type) = unpack('C', $this->_string_shift($response, 1)); + + switch ($type) { + case NET_SSH2_MSG_CHANNEL_SUCCESS: + break; + case NET_SSH2_MSG_CHANNEL_FAILURE: + default: + user_error('Unable to request pseudo-terminal'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + $this->in_request_pty_exec = true; + } + + // sending a pty-req SSH_MSG_CHANNEL_REQUEST message is unnecessary and, in fact, in most cases, slows things + // down. the one place where it might be desirable is if you're doing something like \phpseclib\Net\SSH2::exec('ping localhost &'). + // with a pty-req SSH_MSG_CHANNEL_REQUEST, exec() will return immediately and the ping process will then + // then immediately terminate. without such a request exec() will loop indefinitely. the ping process won't end but + // neither will your script. + + // although, in theory, the size of SSH_MSG_CHANNEL_REQUEST could exceed the maximum packet size established by + // SSH_MSG_CHANNEL_OPEN_CONFIRMATION, RFC4254#section-5.1 states that the "maximum packet size" refers to the + // "maximum size of an individual data packet". ie. SSH_MSG_CHANNEL_DATA. RFC4254#section-5.2 corroborates. + $packet = pack( + 'CNNa*CNa*', + NET_SSH2_MSG_CHANNEL_REQUEST, + $this->server_channels[self::CHANNEL_EXEC], + strlen('exec'), + 'exec', + 1, + strlen($command), + $command + ); + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_REQUEST; + + $response = $this->_get_channel_packet(self::CHANNEL_EXEC); + if ($response === false) { + return false; + } + + $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_DATA; + + if ($callback === false || $this->in_request_pty_exec) { + return true; + } + + $output = ''; + while (true) { + $temp = $this->_get_channel_packet(self::CHANNEL_EXEC); + switch (true) { + case $temp === true: + return is_callable($callback) ? true : $output; + case $temp === false: + return false; + default: + if (is_callable($callback)) { + if (call_user_func($callback, $temp) === true) { + $this->_close_channel(self::CHANNEL_EXEC); + return true; + } + } else { + $output.= $temp; + } + } + } + } + + /** + * Creates an interactive shell + * + * @see self::read() + * @see self::write() + * @return bool + * @access private + */ + function _initShell() + { + if ($this->in_request_pty_exec === true) { + return true; + } + + $this->window_size_server_to_client[self::CHANNEL_SHELL] = $this->window_size; + $packet_size = 0x4000; + + $packet = pack( + 'CNa*N3', + NET_SSH2_MSG_CHANNEL_OPEN, + strlen('session'), + 'session', + self::CHANNEL_SHELL, + $this->window_size_server_to_client[self::CHANNEL_SHELL], + $packet_size + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_OPEN; + + $response = $this->_get_channel_packet(self::CHANNEL_SHELL); + if ($response === false) { + return false; + } + + $terminal_modes = pack('C', NET_SSH2_TTY_OP_END); + $packet = pack( + 'CNNa*CNa*N5a*', + NET_SSH2_MSG_CHANNEL_REQUEST, + $this->server_channels[self::CHANNEL_SHELL], + strlen('pty-req'), + 'pty-req', + 1, + strlen('vt100'), + 'vt100', + $this->windowColumns, + $this->windowRows, + 0, + 0, + strlen($terminal_modes), + $terminal_modes + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $response = $this->_get_binary_packet(); + if ($response === false) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + + if (!strlen($response)) { + return false; + } + list(, $type) = unpack('C', $this->_string_shift($response, 1)); + + switch ($type) { + case NET_SSH2_MSG_CHANNEL_SUCCESS: + // if a pty can't be opened maybe commands can still be executed + case NET_SSH2_MSG_CHANNEL_FAILURE: + break; + default: + user_error('Unable to request pseudo-terminal'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + + $packet = pack( + 'CNNa*C', + NET_SSH2_MSG_CHANNEL_REQUEST, + $this->server_channels[self::CHANNEL_SHELL], + strlen('shell'), + 'shell', + 1 + ); + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_REQUEST; + + $response = $this->_get_channel_packet(self::CHANNEL_SHELL); + if ($response === false) { + return false; + } + + $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_DATA; + + $this->bitmap |= self::MASK_SHELL; + + return true; + } + + /** + * Return the channel to be used with read() / write() + * + * @see self::read() + * @see self::write() + * @return int + * @access public + */ + function _get_interactive_channel() + { + switch (true) { + case $this->in_subsystem: + return self::CHANNEL_SUBSYSTEM; + case $this->in_request_pty_exec: + return self::CHANNEL_EXEC; + default: + return self::CHANNEL_SHELL; + } + } + + /** + * Return an available open channel + * + * @return int + * @access public + */ + function _get_open_channel() + { + $channel = self::CHANNEL_EXEC; + do { + if (isset($this->channel_status[$channel]) && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_OPEN) { + return $channel; + } + } while ($channel++ < self::CHANNEL_SUBSYSTEM); + + return false; + } + + /** + * Returns the output of an interactive shell + * + * Returns when there's a match for $expect, which can take the form of a string literal or, + * if $mode == self::READ_REGEX, a regular expression. + * + * @see self::write() + * @param string $expect + * @param int $mode + * @return string|bool + * @access public + */ + function read($expect = '', $mode = self::READ_SIMPLE) + { + $this->curTimeout = $this->timeout; + $this->is_timeout = false; + + if (!$this->isAuthenticated()) { + user_error('Operation disallowed prior to login()'); + return false; + } + + if (!($this->bitmap & self::MASK_SHELL) && !$this->_initShell()) { + user_error('Unable to initiate an interactive shell session'); + return false; + } + + $channel = $this->_get_interactive_channel(); + + if ($mode == self::READ_NEXT) { + return $this->_get_channel_packet($channel); + } + + $match = $expect; + while (true) { + if ($mode == self::READ_REGEX) { + preg_match($expect, substr($this->interactiveBuffer, -1024), $matches); + $match = isset($matches[0]) ? $matches[0] : ''; + } + $pos = strlen($match) ? strpos($this->interactiveBuffer, $match) : false; + if ($pos !== false) { + return $this->_string_shift($this->interactiveBuffer, $pos + strlen($match)); + } + $response = $this->_get_channel_packet($channel); + if (is_bool($response)) { + $this->in_request_pty_exec = false; + return $response ? $this->_string_shift($this->interactiveBuffer, strlen($this->interactiveBuffer)) : false; + } + + $this->interactiveBuffer.= $response; + } + } + + /** + * Inputs a command into an interactive shell. + * + * @see self::read() + * @param string $cmd + * @return bool + * @access public + */ + function write($cmd) + { + if (!$this->isAuthenticated()) { + user_error('Operation disallowed prior to login()'); + return false; + } + + if (!($this->bitmap & self::MASK_SHELL) && !$this->_initShell()) { + user_error('Unable to initiate an interactive shell session'); + return false; + } + + return $this->_send_channel_packet($this->_get_interactive_channel(), $cmd); + } + + /** + * Start a subsystem. + * + * Right now only one subsystem at a time is supported. To support multiple subsystem's stopSubsystem() could accept + * a string that contained the name of the subsystem, but at that point, only one subsystem of each type could be opened. + * To support multiple subsystem's of the same name maybe it'd be best if startSubsystem() generated a new channel id and + * returns that and then that that was passed into stopSubsystem() but that'll be saved for a future date and implemented + * if there's sufficient demand for such a feature. + * + * @see self::stopSubsystem() + * @param string $subsystem + * @return bool + * @access public + */ + function startSubsystem($subsystem) + { + $this->window_size_server_to_client[self::CHANNEL_SUBSYSTEM] = $this->window_size; + + $packet = pack( + 'CNa*N3', + NET_SSH2_MSG_CHANNEL_OPEN, + strlen('session'), + 'session', + self::CHANNEL_SUBSYSTEM, + $this->window_size, + 0x4000 + ); + + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[self::CHANNEL_SUBSYSTEM] = NET_SSH2_MSG_CHANNEL_OPEN; + + $response = $this->_get_channel_packet(self::CHANNEL_SUBSYSTEM); + if ($response === false) { + return false; + } + + $packet = pack( + 'CNNa*CNa*', + NET_SSH2_MSG_CHANNEL_REQUEST, + $this->server_channels[self::CHANNEL_SUBSYSTEM], + strlen('subsystem'), + 'subsystem', + 1, + strlen($subsystem), + $subsystem + ); + if (!$this->_send_binary_packet($packet)) { + return false; + } + + $this->channel_status[self::CHANNEL_SUBSYSTEM] = NET_SSH2_MSG_CHANNEL_REQUEST; + + $response = $this->_get_channel_packet(self::CHANNEL_SUBSYSTEM); + + if ($response === false) { + return false; + } + + $this->channel_status[self::CHANNEL_SUBSYSTEM] = NET_SSH2_MSG_CHANNEL_DATA; + + $this->bitmap |= self::MASK_SHELL; + $this->in_subsystem = true; + + return true; + } + + /** + * Stops a subsystem. + * + * @see self::startSubsystem() + * @return bool + * @access public + */ + function stopSubsystem() + { + $this->in_subsystem = false; + $this->_close_channel(self::CHANNEL_SUBSYSTEM); + return true; + } + + /** + * Closes a channel + * + * If read() timed out you might want to just close the channel and have it auto-restart on the next read() call + * + * @access public + */ + function reset() + { + $this->_close_channel($this->_get_interactive_channel()); + } + + /** + * Is timeout? + * + * Did exec() or read() return because they timed out or because they encountered the end? + * + * @access public + */ + function isTimeout() + { + return $this->is_timeout; + } + + /** + * Disconnect + * + * @access public + */ + function disconnect() + { + $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + if (isset($this->realtime_log_file) && is_resource($this->realtime_log_file)) { + fclose($this->realtime_log_file); + } + } + + /** + * Destructor. + * + * Will be called, automatically, if you're supporting just PHP5. If you're supporting PHP4, you'll need to call + * disconnect(). + * + * @access public + */ + function __destruct() + { + $this->disconnect(); + } + + /** + * Is the connection still active? + * + * @return bool + * @access public + */ + function isConnected() + { + return (bool) ($this->bitmap & self::MASK_CONNECTED); + } + + /** + * Have you successfully been logged in? + * + * @return bool + * @access public + */ + function isAuthenticated() + { + return (bool) ($this->bitmap & self::MASK_LOGIN); + } + + /** + * Pings a server connection, or tries to reconnect if the connection has gone down + * + * Inspired by http://php.net/manual/en/mysqli.ping.php + * + * @return bool + * @access public + */ + function ping() + { + if (!$this->isAuthenticated()) { + if (!empty($this->auth)) { + return $this->_reconnect(); + } + return false; + } + + $this->window_size_server_to_client[self::CHANNEL_KEEP_ALIVE] = $this->window_size; + $packet_size = 0x4000; + $packet = pack( + 'CNa*N3', + NET_SSH2_MSG_CHANNEL_OPEN, + strlen('session'), + 'session', + self::CHANNEL_KEEP_ALIVE, + $this->window_size_server_to_client[self::CHANNEL_KEEP_ALIVE], + $packet_size + ); + + if (!@$this->_send_binary_packet($packet)) { + return $this->_reconnect(); + } + + $this->channel_status[self::CHANNEL_KEEP_ALIVE] = NET_SSH2_MSG_CHANNEL_OPEN; + + $response = @$this->_get_channel_packet(self::CHANNEL_KEEP_ALIVE); + if ($response !== false) { + $this->_close_channel(self::CHANNEL_KEEP_ALIVE); + return true; + } + + return $this->_reconnect(); + } + + /** + * In situ reconnect method + * + * @return boolean + * @access private + */ + function _reconnect() + { + $this->_reset_connection(NET_SSH2_DISCONNECT_CONNECTION_LOST); + $this->retry_connect = true; + if (!$this->_connect()) { + return false; + } + foreach ($this->auth as $auth) { + $result = call_user_func_array(array(&$this, 'login'), $auth); + } + return $result; + } + + /** + * Resets a connection for re-use + * + * @param int $reason + * @access private + */ + function _reset_connection($reason) + { + $this->_disconnect($reason); + $this->decrypt = $this->encrypt = false; + $this->decrypt_block_size = $this->encrypt_block_size = 8; + $this->hmac_check = $this->hmac_create = false; + $this->hmac_size = false; + $this->session_id = false; + $this->retry_connect = true; + $this->get_seq_no = $this->send_seq_no = 0; + } + + /** + * Gets Binary Packets + * + * See '6. Binary Packet Protocol' of rfc4253 for more info. + * + * @see self::_send_binary_packet() + * @return string + * @access private + */ + function _get_binary_packet($skip_channel_filter = false) + { + if ($skip_channel_filter) { + $read = array($this->fsock); + $write = $except = null; + + if ($this->curTimeout <= 0) { + if ($this->keepAlive <= 0) { + @stream_select($read, $write, $except, null); + } else { + if (!@stream_select($read, $write, $except, $this->keepAlive) && !count($read)) { + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_IGNORE, 0)); + return $this->_get_binary_packet(true); + } + } + } else { + if ($this->curTimeout < 0) { + $this->is_timeout = true; + return true; + } + + $read = array($this->fsock); + $write = $except = null; + + $start = microtime(true); + + if ($this->keepAlive > 0 && $this->keepAlive < $this->curTimeout) { + if (!@stream_select($read, $write, $except, $this->keepAlive) && !count($read)) { + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_IGNORE, 0)); + $elapsed = microtime(true) - $start; + $this->curTimeout-= $elapsed; + return $this->_get_binary_packet(true); + } + $elapsed = microtime(true) - $start; + $this->curTimeout-= $elapsed; + } + + $sec = floor($this->curTimeout); + $usec = 1000000 * ($this->curTimeout - $sec); + + // on windows this returns a "Warning: Invalid CRT parameters detected" error + if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) { + $this->is_timeout = true; + return true; + } + $elapsed = microtime(true) - $start; + $this->curTimeout-= $elapsed; + } + } + + if (!is_resource($this->fsock) || feof($this->fsock)) { + $this->bitmap = 0; + user_error('Connection closed prematurely'); + return false; + } + + $start = microtime(true); + $raw = stream_get_contents($this->fsock, $this->decrypt_block_size); + + if (!strlen($raw)) { + return ''; + } + + if ($this->decrypt !== false) { + $raw = $this->decrypt->decrypt($raw); + } + if ($raw === false) { + user_error('Unable to decrypt content'); + return false; + } + + if (strlen($raw) < 5) { + return false; + } + extract(unpack('Npacket_length/Cpadding_length', $this->_string_shift($raw, 5))); + + $remaining_length = $packet_length + 4 - $this->decrypt_block_size; + + // quoting , + // "implementations SHOULD check that the packet length is reasonable" + // PuTTY uses 0x9000 as the actual max packet size and so to shall we + if ($remaining_length < -$this->decrypt_block_size || $remaining_length > 0x9000 || $remaining_length % $this->decrypt_block_size != 0) { + if (!$this->bad_key_size_fix && $this->_bad_algorithm_candidate($this->decrypt->name) && !($this->bitmap & SSH2::MASK_LOGIN)) { + $this->bad_key_size_fix = true; + $this->_reset_connection(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + return false; + } + user_error('Invalid size'); + return false; + } + + $buffer = ''; + while ($remaining_length > 0) { + $temp = stream_get_contents($this->fsock, $remaining_length); + if ($temp === false || feof($this->fsock)) { + $this->bitmap = 0; + user_error('Error reading from socket'); + return false; + } + $buffer.= $temp; + $remaining_length-= strlen($temp); + } + + $stop = microtime(true); + if (strlen($buffer)) { + $raw.= $this->decrypt !== false ? $this->decrypt->decrypt($buffer) : $buffer; + } + + $payload = $this->_string_shift($raw, $packet_length - $padding_length - 1); + $padding = $this->_string_shift($raw, $padding_length); // should leave $raw empty + + if ($this->hmac_check !== false) { + $hmac = stream_get_contents($this->fsock, $this->hmac_size); + if ($hmac === false || strlen($hmac) != $this->hmac_size) { + $this->bitmap = 0; + user_error('Error reading socket'); + return false; + } elseif ($hmac != $this->hmac_check->hash(pack('NNCa*', $this->get_seq_no, $packet_length, $padding_length, $payload . $padding))) { + user_error('Invalid HMAC'); + return false; + } + } + + //if ($this->decompress) { + // $payload = gzinflate(substr($payload, 2)); + //} + + $this->get_seq_no++; + + if (defined('NET_SSH2_LOGGING')) { + $current = microtime(true); + $message_number = isset($this->message_numbers[ord($payload[0])]) ? $this->message_numbers[ord($payload[0])] : 'UNKNOWN (' . ord($payload[0]) . ')'; + $message_number = '<- ' . $message_number . + ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)'; + $this->_append_log($message_number, $payload); + $this->last_packet = $current; + } + + return $this->_filter($payload, $skip_channel_filter); + } + + /** + * Filter Binary Packets + * + * Because some binary packets need to be ignored... + * + * @see self::_get_binary_packet() + * @return string + * @access private + */ + function _filter($payload, $skip_channel_filter) + { + switch (ord($payload[0])) { + case NET_SSH2_MSG_DISCONNECT: + $this->_string_shift($payload, 1); + if (strlen($payload) < 8) { + return false; + } + extract(unpack('Nreason_code/Nlength', $this->_string_shift($payload, 8))); + $this->errors[] = 'SSH_MSG_DISCONNECT: ' . $this->disconnect_reasons[$reason_code] . "\r\n" . $this->_string_shift($payload, $length); + $this->bitmap = 0; + return false; + case NET_SSH2_MSG_IGNORE: + $payload = $this->_get_binary_packet($skip_channel_filter); + break; + case NET_SSH2_MSG_DEBUG: + $this->_string_shift($payload, 2); + if (strlen($payload) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($payload, 4))); + $this->errors[] = 'SSH_MSG_DEBUG: ' . $this->_string_shift($payload, $length); + $payload = $this->_get_binary_packet($skip_channel_filter); + break; + case NET_SSH2_MSG_UNIMPLEMENTED: + return false; + case NET_SSH2_MSG_KEXINIT: + if ($this->session_id !== false) { + $this->send_kex_first = false; + if (!$this->_key_exchange($payload)) { + $this->bitmap = 0; + return false; + } + $payload = $this->_get_binary_packet($skip_channel_filter); + } + } + + // see http://tools.ietf.org/html/rfc4252#section-5.4; only called when the encryption has been activated and when we haven't already logged in + if (($this->bitmap & self::MASK_CONNECTED) && !$this->isAuthenticated() && ord($payload[0]) == NET_SSH2_MSG_USERAUTH_BANNER) { + $this->_string_shift($payload, 1); + if (strlen($payload) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($payload, 4))); + $this->banner_message = $this->_string_shift($payload, $length); + $payload = $this->_get_binary_packet(); + } + + // only called when we've already logged in + if (($this->bitmap & self::MASK_CONNECTED) && $this->isAuthenticated()) { + switch (ord($payload[0])) { + case NET_SSH2_MSG_CHANNEL_REQUEST: + if (strlen($payload) == 31) { + extract(unpack('cpacket_type/Nchannel/Nlength', $payload)); + if (substr($payload, 9, $length) == 'keepalive@openssh.com' && isset($this->server_channels[$channel])) { + if (ord(substr($payload, 9 + $length))) { // want reply + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_SUCCESS, $this->server_channels[$channel])); + } + $payload = $this->_get_binary_packet($skip_channel_filter); + } + } + break; + case NET_SSH2_MSG_CHANNEL_DATA: + case NET_SSH2_MSG_CHANNEL_EXTENDED_DATA: + case NET_SSH2_MSG_CHANNEL_CLOSE: + case NET_SSH2_MSG_CHANNEL_EOF: + if (!$skip_channel_filter && !empty($this->server_channels)) { + $this->binary_packet_buffer = $payload; + $this->_get_channel_packet(true); + $payload = $this->_get_binary_packet(); + } + break; + case NET_SSH2_MSG_GLOBAL_REQUEST: // see http://tools.ietf.org/html/rfc4254#section-4 + if (strlen($payload) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($payload, 4))); + $this->errors[] = 'SSH_MSG_GLOBAL_REQUEST: ' . $this->_string_shift($payload, $length); + + if (!$this->_send_binary_packet(pack('C', NET_SSH2_MSG_REQUEST_FAILURE))) { + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + + $payload = $this->_get_binary_packet($skip_channel_filter); + break; + case NET_SSH2_MSG_CHANNEL_OPEN: // see http://tools.ietf.org/html/rfc4254#section-5.1 + $this->_string_shift($payload, 1); + if (strlen($payload) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($payload, 4))); + $data = $this->_string_shift($payload, $length); + if (strlen($payload) < 4) { + return false; + } + extract(unpack('Nserver_channel', $this->_string_shift($payload, 4))); + switch ($data) { + case 'auth-agent': + case 'auth-agent@openssh.com': + if (isset($this->agent)) { + $new_channel = self::CHANNEL_AGENT_FORWARD; + + if (strlen($payload) < 8) { + return false; + } + extract(unpack('Nremote_window_size', $this->_string_shift($payload, 4))); + extract(unpack('Nremote_maximum_packet_size', $this->_string_shift($payload, 4))); + + $this->packet_size_client_to_server[$new_channel] = $remote_window_size; + $this->window_size_server_to_client[$new_channel] = $remote_maximum_packet_size; + $this->window_size_client_to_server[$new_channel] = $this->window_size; + + $packet_size = 0x4000; + + $packet = pack( + 'CN4', + NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, + $server_channel, + $new_channel, + $packet_size, + $packet_size + ); + + $this->server_channels[$new_channel] = $server_channel; + $this->channel_status[$new_channel] = NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION; + if (!$this->_send_binary_packet($packet)) { + return false; + } + } + break; + default: + $packet = pack( + 'CN3a*Na*', + NET_SSH2_MSG_REQUEST_FAILURE, + $server_channel, + NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED, + 0, + '', + 0, + '' + ); + + if (!$this->_send_binary_packet($packet)) { + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + } + $payload = $this->_get_binary_packet($skip_channel_filter); + break; + case NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST: + $this->_string_shift($payload, 1); + if (strlen($payload) < 8) { + return false; + } + extract(unpack('Nchannel', $this->_string_shift($payload, 4))); + extract(unpack('Nwindow_size', $this->_string_shift($payload, 4))); + $this->window_size_client_to_server[$channel]+= $window_size; + + $payload = ($this->bitmap & self::MASK_WINDOW_ADJUST) ? true : $this->_get_binary_packet($skip_channel_filter); + } + } + + return $payload; + } + + /** + * Enable Quiet Mode + * + * Suppress stderr from output + * + * @access public + */ + function enableQuietMode() + { + $this->quiet_mode = true; + } + + /** + * Disable Quiet Mode + * + * Show stderr in output + * + * @access public + */ + function disableQuietMode() + { + $this->quiet_mode = false; + } + + /** + * Returns whether Quiet Mode is enabled or not + * + * @see self::enableQuietMode() + * @see self::disableQuietMode() + * @access public + * @return bool + */ + function isQuietModeEnabled() + { + return $this->quiet_mode; + } + + /** + * Enable request-pty when using exec() + * + * @access public + */ + function enablePTY() + { + $this->request_pty = true; + } + + /** + * Disable request-pty when using exec() + * + * @access public + */ + function disablePTY() + { + if ($this->in_request_pty_exec) { + $this->_close_channel(self::CHANNEL_EXEC); + $this->in_request_pty_exec = false; + } + $this->request_pty = false; + } + + /** + * Returns whether request-pty is enabled or not + * + * @see self::enablePTY() + * @see self::disablePTY() + * @access public + * @return bool + */ + function isPTYEnabled() + { + return $this->request_pty; + } + + /** + * Gets channel data + * + * Returns the data as a string if it's available and false if not. + * + * @param int $client_channel + * @param bool $skip_extended + * @return mixed|bool + * @access private + */ + function _get_channel_packet($client_channel, $skip_extended = false) + { + if (!empty($this->channel_buffers[$client_channel])) { + return array_shift($this->channel_buffers[$client_channel]); + } + + while (true) { + if ($this->binary_packet_buffer !== false) { + $response = $this->binary_packet_buffer; + $this->binary_packet_buffer = false; + } else { + $response = $this->_get_binary_packet(true); + if ($response === true && $this->is_timeout) { + if ($client_channel == self::CHANNEL_EXEC && !$this->request_pty) { + $this->_close_channel($client_channel); + } + return true; + } + if ($response === false) { + $this->bitmap = 0; + user_error('Connection closed by server'); + return false; + } + } + + if ($client_channel == -1 && $response === true) { + return true; + } + if (!strlen($response)) { + return false; + } + extract(unpack('Ctype', $this->_string_shift($response, 1))); + + if (strlen($response) < 4) { + return false; + } + if ($type == NET_SSH2_MSG_CHANNEL_OPEN) { + extract(unpack('Nlength', $this->_string_shift($response, 4))); + } else { + extract(unpack('Nchannel', $this->_string_shift($response, 4))); + } + + // will not be setup yet on incoming channel open request + if (isset($channel) && isset($this->channel_status[$channel]) && isset($this->window_size_server_to_client[$channel])) { + $this->window_size_server_to_client[$channel]-= strlen($response); + + // resize the window, if appropriate + if ($this->window_size_server_to_client[$channel] < 0) { + // PuTTY does something more analogous to the following: + //if ($this->window_size_server_to_client[$channel] < 0x3FFFFFFF) { + $packet = pack('CNN', NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST, $this->server_channels[$channel], $this->window_resize); + if (!$this->_send_binary_packet($packet)) { + return false; + } + $this->window_size_server_to_client[$channel]+= $this->window_resize; + } + + switch ($type) { + case NET_SSH2_MSG_CHANNEL_EXTENDED_DATA: + /* + if ($client_channel == self::CHANNEL_EXEC) { + $this->_send_channel_packet($client_channel, chr(0)); + } + */ + // currently, there's only one possible value for $data_type_code: NET_SSH2_EXTENDED_DATA_STDERR + if (strlen($response) < 8) { + return false; + } + extract(unpack('Ndata_type_code/Nlength', $this->_string_shift($response, 8))); + $data = $this->_string_shift($response, $length); + $this->stdErrorLog.= $data; + if ($skip_extended || $this->quiet_mode) { + continue 2; + } + if ($client_channel == $channel && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA) { + return $data; + } + if (!isset($this->channel_buffers[$channel])) { + $this->channel_buffers[$channel] = array(); + } + $this->channel_buffers[$channel][] = $data; + + continue 2; + case NET_SSH2_MSG_CHANNEL_REQUEST: + if ($this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_CLOSE) { + continue 2; + } + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $value = $this->_string_shift($response, $length); + switch ($value) { + case 'exit-signal': + $this->_string_shift($response, 1); + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $this->errors[] = 'SSH_MSG_CHANNEL_REQUEST (exit-signal): ' . $this->_string_shift($response, $length); + $this->_string_shift($response, 1); + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + if ($length) { + $this->errors[count($this->errors)].= "\r\n" . $this->_string_shift($response, $length); + } + + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel])); + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel])); + + $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_EOF; + + continue 3; + case 'exit-status': + if (strlen($response) < 5) { + return false; + } + extract(unpack('Cfalse/Nexit_status', $this->_string_shift($response, 5))); + $this->exit_status = $exit_status; + + // "The client MAY ignore these messages." + // -- http://tools.ietf.org/html/rfc4254#section-6.10 + + continue 3; + default: + // "Some systems may not implement signals, in which case they SHOULD ignore this message." + // -- http://tools.ietf.org/html/rfc4254#section-6.9 + continue 3; + } + } + + switch ($this->channel_status[$channel]) { + case NET_SSH2_MSG_CHANNEL_OPEN: + switch ($type) { + case NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION: + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nserver_channel', $this->_string_shift($response, 4))); + $this->server_channels[$channel] = $server_channel; + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nwindow_size', $this->_string_shift($response, 4))); + if ($window_size < 0) { + $window_size&= 0x7FFFFFFF; + $window_size+= 0x80000000; + } + $this->window_size_client_to_server[$channel] = $window_size; + if (strlen($response) < 4) { + return false; + } + $temp = unpack('Npacket_size_client_to_server', $this->_string_shift($response, 4)); + $this->packet_size_client_to_server[$channel] = $temp['packet_size_client_to_server']; + $result = $client_channel == $channel ? true : $this->_get_channel_packet($client_channel, $skip_extended); + $this->_on_channel_open(); + return $result; + //case NET_SSH2_MSG_CHANNEL_OPEN_FAILURE: + default: + user_error('Unable to open channel'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + break; + case NET_SSH2_MSG_CHANNEL_REQUEST: + switch ($type) { + case NET_SSH2_MSG_CHANNEL_SUCCESS: + return true; + case NET_SSH2_MSG_CHANNEL_FAILURE: + return false; + default: + user_error('Unable to fulfill channel request'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + case NET_SSH2_MSG_CHANNEL_CLOSE: + return $type == NET_SSH2_MSG_CHANNEL_CLOSE ? true : $this->_get_channel_packet($client_channel, $skip_extended); + } + } + + // ie. $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA + + switch ($type) { + case NET_SSH2_MSG_CHANNEL_DATA: + /* + if ($channel == self::CHANNEL_EXEC) { + // SCP requires null packets, such as this, be sent. further, in the case of the ssh.com SSH server + // this actually seems to make things twice as fast. more to the point, the message right after + // SSH_MSG_CHANNEL_DATA (usually SSH_MSG_IGNORE) won't block for as long as it would have otherwise. + // in OpenSSH it slows things down but only by a couple thousandths of a second. + $this->_send_channel_packet($channel, chr(0)); + } + */ + if (strlen($response) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($response, 4))); + $data = $this->_string_shift($response, $length); + + if ($channel == self::CHANNEL_AGENT_FORWARD) { + $agent_response = $this->agent->_forward_data($data); + if (!is_bool($agent_response)) { + $this->_send_channel_packet($channel, $agent_response); + } + break; + } + + if ($client_channel == $channel) { + return $data; + } + if (!isset($this->channel_buffers[$channel])) { + $this->channel_buffers[$channel] = array(); + } + $this->channel_buffers[$channel][] = $data; + break; + case NET_SSH2_MSG_CHANNEL_CLOSE: + $this->curTimeout = 5; + + if ($this->bitmap & self::MASK_SHELL) { + $this->bitmap&= ~self::MASK_SHELL; + } + if ($this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_EOF) { + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel])); + } + + $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_CLOSE; + if ($client_channel == $channel) { + return true; + } + case NET_SSH2_MSG_CHANNEL_EOF: + break; + default: + user_error('Error reading channel data'); + return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION); + } + } + } + + /** + * Sends Binary Packets + * + * See '6. Binary Packet Protocol' of rfc4253 for more info. + * + * @param string $data + * @param string $logged + * @see self::_get_binary_packet() + * @return bool + * @access private + */ + function _send_binary_packet($data, $logged = null) + { + if (!is_resource($this->fsock) || feof($this->fsock)) { + $this->bitmap = 0; + user_error('Connection closed prematurely'); + return false; + } + + //if ($this->compress) { + // // the -4 removes the checksum: + // // http://php.net/function.gzcompress#57710 + // $data = substr(gzcompress($data), 0, -4); + //} + + // 4 (packet length) + 1 (padding length) + 4 (minimal padding amount) == 9 + $packet_length = strlen($data) + 9; + // round up to the nearest $this->encrypt_block_size + $packet_length+= (($this->encrypt_block_size - 1) * $packet_length) % $this->encrypt_block_size; + // subtracting strlen($data) is obvious - subtracting 5 is necessary because of packet_length and padding_length + $padding_length = $packet_length - strlen($data) - 5; + $padding = Random::string($padding_length); + + // we subtract 4 from packet_length because the packet_length field isn't supposed to include itself + $packet = pack('NCa*', $packet_length - 4, $padding_length, $data . $padding); + + $hmac = $this->hmac_create !== false ? $this->hmac_create->hash(pack('Na*', $this->send_seq_no, $packet)) : ''; + $this->send_seq_no++; + + if ($this->encrypt !== false) { + $packet = $this->encrypt->encrypt($packet); + } + + $packet.= $hmac; + + $start = microtime(true); + $result = strlen($packet) == @fputs($this->fsock, $packet); + $stop = microtime(true); + + if (defined('NET_SSH2_LOGGING')) { + $current = microtime(true); + $message_number = isset($this->message_numbers[ord($data[0])]) ? $this->message_numbers[ord($data[0])] : 'UNKNOWN (' . ord($data[0]) . ')'; + $message_number = '-> ' . $message_number . + ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)'; + $this->_append_log($message_number, isset($logged) ? $logged : $data); + $this->last_packet = $current; + } + + return $result; + } + + /** + * Logs data packets + * + * Makes sure that only the last 1MB worth of packets will be logged + * + * @param string $message_number + * @param string $message + * @access private + */ + function _append_log($message_number, $message) + { + // remove the byte identifying the message type from all but the first two messages (ie. the identification strings) + if (strlen($message_number) > 2) { + $this->_string_shift($message); + } + + switch (NET_SSH2_LOGGING) { + // useful for benchmarks + case self::LOG_SIMPLE: + $this->message_number_log[] = $message_number; + break; + // the most useful log for SSH2 + case self::LOG_COMPLEX: + $this->message_number_log[] = $message_number; + $this->log_size+= strlen($message); + $this->message_log[] = $message; + while ($this->log_size > self::LOG_MAX_SIZE) { + $this->log_size-= strlen(array_shift($this->message_log)); + array_shift($this->message_number_log); + } + break; + // dump the output out realtime; packets may be interspersed with non packets, + // passwords won't be filtered out and select other packets may not be correctly + // identified + case self::LOG_REALTIME: + switch (PHP_SAPI) { + case 'cli': + $start = $stop = "\r\n"; + break; + default: + $start = '
        ';
        +                        $stop = '
        '; + } + echo $start . $this->_format_log(array($message), array($message_number)) . $stop; + @flush(); + @ob_flush(); + break; + // basically the same thing as self::LOG_REALTIME with the caveat that self::LOG_REALTIME_FILE + // needs to be defined and that the resultant log file will be capped out at self::LOG_MAX_SIZE. + // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily + // at the beginning of the file + case self::LOG_REALTIME_FILE: + if (!isset($this->realtime_log_file)) { + // PHP doesn't seem to like using constants in fopen() + $filename = self::LOG_REALTIME_FILENAME; + $fp = fopen($filename, 'w'); + $this->realtime_log_file = $fp; + } + if (!is_resource($this->realtime_log_file)) { + break; + } + $entry = $this->_format_log(array($message), array($message_number)); + if ($this->realtime_log_wrap) { + $temp = "<<< START >>>\r\n"; + $entry.= $temp; + fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp)); + } + $this->realtime_log_size+= strlen($entry); + if ($this->realtime_log_size > self::LOG_MAX_SIZE) { + fseek($this->realtime_log_file, 0); + $this->realtime_log_size = strlen($entry); + $this->realtime_log_wrap = true; + } + fputs($this->realtime_log_file, $entry); + } + } + + /** + * Sends channel data + * + * Spans multiple SSH_MSG_CHANNEL_DATAs if appropriate + * + * @param int $client_channel + * @param string $data + * @return bool + * @access private + */ + function _send_channel_packet($client_channel, $data) + { + while (strlen($data)) { + if (!$this->window_size_client_to_server[$client_channel]) { + $this->bitmap^= self::MASK_WINDOW_ADJUST; + // using an invalid channel will let the buffers be built up for the valid channels + $this->_get_channel_packet(-1); + $this->bitmap^= self::MASK_WINDOW_ADJUST; + } + + /* The maximum amount of data allowed is determined by the maximum + packet size for the channel, and the current window size, whichever + is smaller. + -- http://tools.ietf.org/html/rfc4254#section-5.2 */ + $max_size = min( + $this->packet_size_client_to_server[$client_channel], + $this->window_size_client_to_server[$client_channel] + ); + + $temp = $this->_string_shift($data, $max_size); + $packet = pack( + 'CN2a*', + NET_SSH2_MSG_CHANNEL_DATA, + $this->server_channels[$client_channel], + strlen($temp), + $temp + ); + $this->window_size_client_to_server[$client_channel]-= strlen($temp); + if (!$this->_send_binary_packet($packet)) { + return false; + } + } + + return true; + } + + /** + * Closes and flushes a channel + * + * \phpseclib\Net\SSH2 doesn't properly close most channels. For exec() channels are normally closed by the server + * and for SFTP channels are presumably closed when the client disconnects. This functions is intended + * for SCP more than anything. + * + * @param int $client_channel + * @param bool $want_reply + * @return bool + * @access private + */ + function _close_channel($client_channel, $want_reply = false) + { + // see http://tools.ietf.org/html/rfc4254#section-5.3 + + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel])); + + if (!$want_reply) { + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$client_channel])); + } + + $this->channel_status[$client_channel] = NET_SSH2_MSG_CHANNEL_CLOSE; + + $this->curTimeout = 5; + + while (!is_bool($this->_get_channel_packet($client_channel))) { + } + + if ($this->is_timeout) { + $this->disconnect(); + } + + if ($want_reply) { + $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$client_channel])); + } + + if ($this->bitmap & self::MASK_SHELL) { + $this->bitmap&= ~self::MASK_SHELL; + } + } + + /** + * Disconnect + * + * @param int $reason + * @return bool + * @access private + */ + function _disconnect($reason) + { + if ($this->bitmap & self::MASK_CONNECTED) { + $data = pack('CNNa*Na*', NET_SSH2_MSG_DISCONNECT, $reason, 0, '', 0, ''); + $this->_send_binary_packet($data); + } + + $this->bitmap = 0; + if (is_resource($this->fsock) && get_resource_type($this->fsock) == 'stream') { + fclose($this->fsock); + } + + return false; + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param string $string + * @param int $index + * @return string + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } + + /** + * Define Array + * + * Takes any number of arrays whose indices are integers and whose values are strings and defines a bunch of + * named constants from it, using the value as the name of the constant and the index as the value of the constant. + * If any of the constants that would be defined already exists, none of the constants will be defined. + * + * @access private + */ + function _define_array() + { + $args = func_get_args(); + foreach ($args as $arg) { + foreach ($arg as $key => $value) { + if (!defined($value)) { + define($value, $key); + } else { + break 2; + } + } + } + } + + /** + * Returns a log of the packets that have been sent and received. + * + * Returns a string if NET_SSH2_LOGGING == self::LOG_COMPLEX, an array if NET_SSH2_LOGGING == self::LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING') + * + * @access public + * @return array|false|string + */ + function getLog() + { + if (!defined('NET_SSH2_LOGGING')) { + return false; + } + + switch (NET_SSH2_LOGGING) { + case self::LOG_SIMPLE: + return $this->message_number_log; + case self::LOG_COMPLEX: + $log = $this->_format_log($this->message_log, $this->message_number_log); + return PHP_SAPI == 'cli' ? $log : '
        ' . $log . '
        '; + default: + return false; + } + } + + /** + * Formats a log for printing + * + * @param array $message_log + * @param array $message_number_log + * @access private + * @return string + */ + function _format_log($message_log, $message_number_log) + { + $output = ''; + for ($i = 0; $i < count($message_log); $i++) { + $output.= $message_number_log[$i] . "\r\n"; + $current_log = $message_log[$i]; + $j = 0; + do { + if (strlen($current_log)) { + $output.= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0 '; + } + $fragment = $this->_string_shift($current_log, $this->log_short_width); + $hex = substr(preg_replace_callback('#.#s', array($this, '_format_log_helper'), $fragment), strlen($this->log_boundary)); + // replace non ASCII printable characters with dots + // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters + // also replace < with a . since < messes up the output on web browsers + $raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment); + $output.= str_pad($hex, $this->log_long_width - $this->log_short_width, ' ') . $raw . "\r\n"; + $j++; + } while (strlen($current_log)); + $output.= "\r\n"; + } + + return $output; + } + + /** + * Helper function for _format_log + * + * For use with preg_replace_callback() + * + * @param array $matches + * @access private + * @return string + */ + function _format_log_helper($matches) + { + return $this->log_boundary . str_pad(dechex(ord($matches[0])), 2, '0', STR_PAD_LEFT); + } + + /** + * Helper function for agent->_on_channel_open() + * + * Used when channels are created to inform agent + * of said channel opening. Must be called after + * channel open confirmation received + * + * @access private + */ + function _on_channel_open() + { + if (isset($this->agent)) { + $this->agent->_on_channel_open($this); + } + } + + /** + * Returns the first value of the intersection of two arrays or false if + * the intersection is empty. The order is defined by the first parameter. + * + * @param array $array1 + * @param array $array2 + * @return mixed False if intersection is empty, else intersected value. + * @access private + */ + function _array_intersect_first($array1, $array2) + { + foreach ($array1 as $value) { + if (in_array($value, $array2)) { + return $value; + } + } + return false; + } + + /** + * Returns all errors + * + * @return string[] + * @access public + */ + function getErrors() + { + return $this->errors; + } + + /** + * Returns the last error + * + * @return string + * @access public + */ + function getLastError() + { + $count = count($this->errors); + + if ($count > 0) { + return $this->errors[$count - 1]; + } + } + + /** + * Return the server identification. + * + * @return string + * @access public + */ + function getServerIdentification() + { + $this->_connect(); + + return $this->server_identifier; + } + + /** + * Return a list of the key exchange algorithms the server supports. + * + * @return array + * @access public + */ + function getKexAlgorithms() + { + $this->_connect(); + + return $this->kex_algorithms; + } + + /** + * Return a list of the host key (public key) algorithms the server supports. + * + * @return array + * @access public + */ + function getServerHostKeyAlgorithms() + { + $this->_connect(); + + return $this->server_host_key_algorithms; + } + + /** + * Return a list of the (symmetric key) encryption algorithms the server supports, when receiving stuff from the client. + * + * @return array + * @access public + */ + function getEncryptionAlgorithmsClient2Server() + { + $this->_connect(); + + return $this->encryption_algorithms_client_to_server; + } + + /** + * Return a list of the (symmetric key) encryption algorithms the server supports, when sending stuff to the client. + * + * @return array + * @access public + */ + function getEncryptionAlgorithmsServer2Client() + { + $this->_connect(); + + return $this->encryption_algorithms_server_to_client; + } + + /** + * Return a list of the MAC algorithms the server supports, when receiving stuff from the client. + * + * @return array + * @access public + */ + function getMACAlgorithmsClient2Server() + { + $this->_connect(); + + return $this->mac_algorithms_client_to_server; + } + + /** + * Return a list of the MAC algorithms the server supports, when sending stuff to the client. + * + * @return array + * @access public + */ + function getMACAlgorithmsServer2Client() + { + $this->_connect(); + + return $this->mac_algorithms_server_to_client; + } + + /** + * Return a list of the compression algorithms the server supports, when receiving stuff from the client. + * + * @return array + * @access public + */ + function getCompressionAlgorithmsClient2Server() + { + $this->_connect(); + + return $this->compression_algorithms_client_to_server; + } + + /** + * Return a list of the compression algorithms the server supports, when sending stuff to the client. + * + * @return array + * @access public + */ + function getCompressionAlgorithmsServer2Client() + { + $this->_connect(); + + return $this->compression_algorithms_server_to_client; + } + + /** + * Return a list of the languages the server supports, when sending stuff to the client. + * + * @return array + * @access public + */ + function getLanguagesServer2Client() + { + $this->_connect(); + + return $this->languages_server_to_client; + } + + /** + * Return a list of the languages the server supports, when receiving stuff from the client. + * + * @return array + * @access public + */ + function getLanguagesClient2Server() + { + $this->_connect(); + + return $this->languages_client_to_server; + } + + /** + * Returns a list of algorithms the server supports + * + * @return array + * @access public + */ + function getServerAlgorithms() + { + $this->_connect(); + + return array( + 'kex' => $this->kex_algorithms, + 'hostkey' => $this->server_host_key_algorithms, + 'client_to_server' => array( + 'crypt' => $this->encryption_algorithms_client_to_server, + 'mac' => $this->mac_algorithms_client_to_server, + 'comp' => $this->compression_algorithms_client_to_server, + 'lang' => $this->languages_client_to_server + ), + 'server_to_client' => array( + 'crypt' => $this->encryption_algorithms_server_to_client, + 'mac' => $this->mac_algorithms_server_to_client, + 'comp' => $this->compression_algorithms_server_to_client, + 'lang' => $this->languages_server_to_client + ) + ); + } + + /** + * Returns a list of KEX algorithms that phpseclib supports + * + * @return array + * @access public + */ + function getSupportedKEXAlgorithms() + { + $kex_algorithms = array( + // Elliptic Curve Diffie-Hellman Key Agreement (ECDH) using + // Curve25519. See doc/curve25519-sha256@libssh.org.txt in the + // libssh repository for more information. + 'curve25519-sha256@libssh.org', + + 'diffie-hellman-group-exchange-sha256',// RFC 4419 + 'diffie-hellman-group-exchange-sha1', // RFC 4419 + + // Diffie-Hellman Key Agreement (DH) using integer modulo prime + // groups. + 'diffie-hellman-group14-sha1', // REQUIRED + 'diffie-hellman-group1-sha1', // REQUIRED + ); + + if (!function_exists('sodium_crypto_box_publickey_from_secretkey')) { + $kex_algorithms = array_diff( + $kex_algorithms, + array('curve25519-sha256@libssh.org') + ); + } + + return $kex_algorithms; + } + + /** + * Returns a list of host key algorithms that phpseclib supports + * + * @return array + * @access public + */ + function getSupportedHostKeyAlgorithms() + { + return array( + 'rsa-sha2-256', // RFC 8332 + 'rsa-sha2-512', // RFC 8332 + 'ssh-rsa', // RECOMMENDED sign Raw RSA Key + 'ssh-dss' // REQUIRED sign Raw DSS Key + ); + } + + /** + * Returns a list of symmetric key algorithms that phpseclib supports + * + * @return array + * @access public + */ + function getSupportedEncryptionAlgorithms() + { + $algos = array( + // from : + 'arcfour256', + 'arcfour128', + + //'arcfour', // OPTIONAL the ARCFOUR stream cipher with a 128-bit key + + // CTR modes from : + 'aes128-ctr', // RECOMMENDED AES (Rijndael) in SDCTR mode, with 128-bit key + 'aes192-ctr', // RECOMMENDED AES with 192-bit key + 'aes256-ctr', // RECOMMENDED AES with 256-bit key + + 'twofish128-ctr', // OPTIONAL Twofish in SDCTR mode, with 128-bit key + 'twofish192-ctr', // OPTIONAL Twofish with 192-bit key + 'twofish256-ctr', // OPTIONAL Twofish with 256-bit key + + 'aes128-cbc', // RECOMMENDED AES with a 128-bit key + 'aes192-cbc', // OPTIONAL AES with a 192-bit key + 'aes256-cbc', // OPTIONAL AES in CBC mode, with a 256-bit key + + 'twofish128-cbc', // OPTIONAL Twofish with a 128-bit key + 'twofish192-cbc', // OPTIONAL Twofish with a 192-bit key + 'twofish256-cbc', + 'twofish-cbc', // OPTIONAL alias for "twofish256-cbc" + // (this is being retained for historical reasons) + + 'blowfish-ctr', // OPTIONAL Blowfish in SDCTR mode + + 'blowfish-cbc', // OPTIONAL Blowfish in CBC mode + + '3des-ctr', // RECOMMENDED Three-key 3DES in SDCTR mode + + '3des-cbc', // REQUIRED three-key 3DES in CBC mode + + //'none' // OPTIONAL no encryption; NOT RECOMMENDED + ); + + if ($this->crypto_engine) { + $engines = array($this->crypto_engine); + } else { + $engines = array( + Base::ENGINE_OPENSSL, + Base::ENGINE_MCRYPT, + Base::ENGINE_INTERNAL + ); + } + + $ciphers = array(); + foreach ($engines as $engine) { + foreach ($algos as $algo) { + $obj = $this->_encryption_algorithm_to_crypt_instance($algo); + if ($obj instanceof Rijndael) { + $obj->setKeyLength(preg_replace('#[^\d]#', '', $algo)); + } + switch ($algo) { + case 'arcfour128': + case 'arcfour256': + if ($engine != Base::ENGINE_INTERNAL) { + continue 2; + } + } + if ($obj->isValidEngine($engine)) { + $algos = array_diff($algos, array($algo)); + $ciphers[] = $algo; + } + } + } + + return $ciphers; + } + + /** + * Returns a list of MAC algorithms that phpseclib supports + * + * @return array + * @access public + */ + function getSupportedMACAlgorithms() + { + return array( + // from : + 'hmac-sha2-256',// RECOMMENDED HMAC-SHA256 (digest length = key length = 32) + + 'hmac-sha1-96', // RECOMMENDED first 96 bits of HMAC-SHA1 (digest length = 12, key length = 20) + 'hmac-sha1', // REQUIRED HMAC-SHA1 (digest length = key length = 20) + 'hmac-md5-96', // OPTIONAL first 96 bits of HMAC-MD5 (digest length = 12, key length = 16) + 'hmac-md5', // OPTIONAL HMAC-MD5 (digest length = key length = 16) + //'none' // OPTIONAL no MAC; NOT RECOMMENDED + ); + } + + /** + * Returns a list of compression algorithms that phpseclib supports + * + * @return array + * @access public + */ + function getSupportedCompressionAlgorithms() + { + return array( + 'none' // REQUIRED no compression + //'zlib' // OPTIONAL ZLIB (LZ77) compression + ); + } + + /** + * Return list of negotiated algorithms + * + * Uses the same format as https://www.php.net/ssh2-methods-negotiated + * + * @return array + * @access public + */ + function getAlgorithmsNegotiated() + { + $this->_connect(); + + return array( + 'kex' => $this->kex_algorithm, + 'hostkey' => $this->signature_format, + 'client_to_server' => array( + 'crypt' => $this->encrypt->name, + 'mac' => $this->hmac_create->name, + 'comp' => 'none', + ), + 'server_to_client' => array( + 'crypt' => $this->decrypt->name, + 'mac' => $this->hmac_check->name, + 'comp' => 'none', + ) + ); + } + + /** + * Accepts an associative array with up to four parameters as described at + * + * + * @param array $methods + * @access public + */ + function setPreferredAlgorithms($methods) + { + $preferred = $methods; + + if (isset($preferred['kex'])) { + $preferred['kex'] = array_intersect( + $preferred['kex'], + $this->getSupportedKEXAlgorithms() + ); + } + + if (isset($preferred['hostkey'])) { + $preferred['hostkey'] = array_intersect( + $preferred['hostkey'], + $this->getSupportedHostKeyAlgorithms() + ); + } + + $keys = array('client_to_server', 'server_to_client'); + foreach ($keys as $key) { + if (isset($preferred[$key])) { + $a = &$preferred[$key]; + if (isset($a['crypt'])) { + $a['crypt'] = array_intersect( + $a['crypt'], + $this->getSupportedEncryptionAlgorithms() + ); + } + if (isset($a['comp'])) { + $a['comp'] = array_intersect( + $a['comp'], + $this->getSupportedCompressionAlgorithms() + ); + } + if (isset($a['mac'])) { + $a['mac'] = array_intersect( + $a['mac'], + $this->getSupportedMACAlgorithms() + ); + } + } + } + + $keys = array( + 'kex', + 'hostkey', + 'client_to_server/crypt', + 'client_to_server/comp', + 'client_to_server/mac', + 'server_to_client/crypt', + 'server_to_client/comp', + 'server_to_client/mac', + ); + foreach ($keys as $key) { + $p = $preferred; + $m = $methods; + + $subkeys = explode('/', $key); + foreach ($subkeys as $subkey) { + if (!isset($p[$subkey])) { + continue 2; + } + $p = $p[$subkey]; + $m = $m[$subkey]; + } + + if (count($p) != count($m)) { + $diff = array_diff($m, $p); + $msg = count($diff) == 1 ? + ' is not a supported algorithm' : + ' are not supported algorithms'; + user_error(implode(', ', $diff) . $msg); + return false; + } + } + + $this->preferred = $preferred; + } + + /** + * Returns the banner message. + * + * Quoting from the RFC, "in some jurisdictions, sending a warning message before + * authentication may be relevant for getting legal protection." + * + * @return string + * @access public + */ + function getBannerMessage() + { + return $this->banner_message; + } + + /** + * Returns the server public host key. + * + * Caching this the first time you connect to a server and checking the result on subsequent connections + * is recommended. Returns false if the server signature is not signed correctly with the public host key. + * + * @return mixed + * @access public + */ + function getServerPublicHostKey() + { + if (!($this->bitmap & self::MASK_CONSTRUCTOR)) { + if (!$this->_connect()) { + return false; + } + } + + $signature = $this->signature; + $server_public_host_key = $this->server_public_host_key; + + if (strlen($server_public_host_key) < 4) { + return false; + } + extract(unpack('Nlength', $this->_string_shift($server_public_host_key, 4))); + $this->_string_shift($server_public_host_key, $length); + + if ($this->signature_validated) { + return $this->bitmap ? + $this->signature_format . ' ' . base64_encode($this->server_public_host_key) : + false; + } + + $this->signature_validated = true; + + switch ($this->signature_format) { + case 'ssh-dss': + $zero = new BigInteger(); + + if (strlen($server_public_host_key) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); + $p = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + + if (strlen($server_public_host_key) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); + $q = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + + if (strlen($server_public_host_key) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); + $g = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + + if (strlen($server_public_host_key) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); + $y = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + + /* The value for 'dss_signature_blob' is encoded as a string containing + r, followed by s (which are 160-bit integers, without lengths or + padding, unsigned, and in network byte order). */ + $temp = unpack('Nlength', $this->_string_shift($signature, 4)); + if ($temp['length'] != 40) { + user_error('Invalid signature'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $r = new BigInteger($this->_string_shift($signature, 20), 256); + $s = new BigInteger($this->_string_shift($signature, 20), 256); + + switch (true) { + case $r->equals($zero): + case $r->compare($q) >= 0: + case $s->equals($zero): + case $s->compare($q) >= 0: + user_error('Invalid signature'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $w = $s->modInverse($q); + + $u1 = $w->multiply(new BigInteger(sha1($this->exchange_hash), 16)); + list(, $u1) = $u1->divide($q); + + $u2 = $w->multiply($r); + list(, $u2) = $u2->divide($q); + + $g = $g->modPow($u1, $p); + $y = $y->modPow($u2, $p); + + $v = $g->multiply($y); + list(, $v) = $v->divide($p); + list(, $v) = $v->divide($q); + + if (!$v->equals($r)) { + user_error('Bad server signature'); + return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE); + } + + break; + case 'ssh-rsa': + case 'rsa-sha2-256': + case 'rsa-sha2-512': + if (strlen($server_public_host_key) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); + $e = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256); + + if (strlen($server_public_host_key) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4)); + $rawN = $this->_string_shift($server_public_host_key, $temp['length']); + $n = new BigInteger($rawN, -256); + $nLength = strlen(ltrim($rawN, "\0")); + + /* + if (strlen($signature) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($signature, 4)); + $signature = $this->_string_shift($signature, $temp['length']); + + $rsa = new RSA(); + switch ($this->signature_format) { + case 'rsa-sha2-512': + $hash = 'sha512'; + break; + case 'rsa-sha2-256': + $hash = 'sha256'; + break; + //case 'ssh-rsa': + default: + $hash = 'sha1'; + } + $rsa->setHash($hash); + $rsa->setSignatureMode(RSA::SIGNATURE_PKCS1); + $rsa->loadKey(array('e' => $e, 'n' => $n), RSA::PUBLIC_FORMAT_RAW); + + if (!$rsa->verify($this->exchange_hash, $signature)) { + user_error('Bad server signature'); + return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE); + } + */ + + if (strlen($signature) < 4) { + return false; + } + $temp = unpack('Nlength', $this->_string_shift($signature, 4)); + $s = new BigInteger($this->_string_shift($signature, $temp['length']), 256); + + // validate an RSA signature per "8.2 RSASSA-PKCS1-v1_5", "5.2.2 RSAVP1", and "9.1 EMSA-PSS" in the + // following URL: + // ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf + + // also, see SSHRSA.c (rsa2_verifysig) in PuTTy's source. + + if ($s->compare(new BigInteger()) < 0 || $s->compare($n->subtract(new BigInteger(1))) > 0) { + user_error('Invalid signature'); + return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED); + } + + $s = $s->modPow($e, $n); + $s = $s->toBytes(); + + switch ($this->signature_format) { + case 'rsa-sha2-512': + $hash = 'sha512'; + break; + case 'rsa-sha2-256': + $hash = 'sha256'; + break; + //case 'ssh-rsa': + default: + $hash = 'sha1'; + } + $hashObj = new Hash($hash); + switch ($this->signature_format) { + case 'rsa-sha2-512': + $h = pack('N5a*', 0x00305130, 0x0D060960, 0x86480165, 0x03040203, 0x05000440, $hashObj->hash($this->exchange_hash)); + break; + case 'rsa-sha2-256': + $h = pack('N5a*', 0x00303130, 0x0D060960, 0x86480165, 0x03040201, 0x05000420, $hashObj->hash($this->exchange_hash)); + break; + //case 'ssh-rsa': + default: + $hash = 'sha1'; + $h = pack('N4a*', 0x00302130, 0x0906052B, 0x0E03021A, 0x05000414, $hashObj->hash($this->exchange_hash)); + } + $h = chr(0x01) . str_repeat(chr(0xFF), $nLength - 2 - strlen($h)) . $h; + + if ($s != $h) { + user_error('Bad server signature'); + return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE); + } + break; + default: + user_error('Unsupported signature format'); + return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE); + } + + return $this->signature_format . ' ' . base64_encode($this->server_public_host_key); + } + + /** + * Returns the exit status of an SSH command or false. + * + * @return false|int + * @access public + */ + function getExitStatus() + { + if (is_null($this->exit_status)) { + return false; + } + return $this->exit_status; + } + + /** + * Returns the number of columns for the terminal window size. + * + * @return int + * @access public + */ + function getWindowColumns() + { + return $this->windowColumns; + } + + /** + * Returns the number of rows for the terminal window size. + * + * @return int + * @access public + */ + function getWindowRows() + { + return $this->windowRows; + } + + /** + * Sets the number of columns for the terminal window size. + * + * @param int $value + * @access public + */ + function setWindowColumns($value) + { + $this->windowColumns = $value; + } + + /** + * Sets the number of rows for the terminal window size. + * + * @param int $value + * @access public + */ + function setWindowRows($value) + { + $this->windowRows = $value; + } + + /** + * Sets the number of columns and rows for the terminal window size. + * + * @param int $columns + * @param int $rows + * @access public + */ + function setWindowSize($columns = 80, $rows = 24) + { + $this->windowColumns = $columns; + $this->windowRows = $rows; + } + + /** + * Update packet types in log history + * + * @param string $old + * @param string $new + * @access private + */ + function _updateLogHistory($old, $new) + { + if (defined('NET_SSH2_LOGGING') && NET_SSH2_LOGGING == self::LOG_COMPLEX) { + $this->message_number_log[count($this->message_number_log) - 1] = str_replace( + $old, + $new, + $this->message_number_log[count($this->message_number_log) - 1] + ); + } + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php b/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php new file mode 100644 index 000000000..2b25250bd --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php @@ -0,0 +1,351 @@ + + * login('username', $agent)) { + * exit('Login Failed'); + * } + * + * echo $ssh->exec('pwd'); + * echo $ssh->exec('ls -la'); + * ?> + * + * + * @category System + * @package SSH\Agent + * @author Jim Wigginton + * @copyright 2014 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + * @internal See http://api.libssh.org/rfc/PROTOCOL.agent + */ + +namespace phpseclib\System\SSH; + +use phpseclib\Crypt\RSA; +use phpseclib\System\SSH\Agent\Identity; + +/** + * Pure-PHP ssh-agent client identity factory + * + * requestIdentities() method pumps out \phpseclib\System\SSH\Agent\Identity objects + * + * @package SSH\Agent + * @author Jim Wigginton + * @access public + */ +class Agent +{ + /**#@+ + * Message numbers + * + * @access private + */ + // to request SSH1 keys you have to use SSH_AGENTC_REQUEST_RSA_IDENTITIES (1) + const SSH_AGENTC_REQUEST_IDENTITIES = 11; + // this is the SSH2 response; the SSH1 response is SSH_AGENT_RSA_IDENTITIES_ANSWER (2). + const SSH_AGENT_IDENTITIES_ANSWER = 12; + // the SSH1 request is SSH_AGENTC_RSA_CHALLENGE (3) + const SSH_AGENTC_SIGN_REQUEST = 13; + // the SSH1 response is SSH_AGENT_RSA_RESPONSE (4) + const SSH_AGENT_SIGN_RESPONSE = 14; + /**#@-*/ + + /**@+ + * Agent forwarding status + * + * @access private + */ + // no forwarding requested and not active + const FORWARD_NONE = 0; + // request agent forwarding when opportune + const FORWARD_REQUEST = 1; + // forwarding has been request and is active + const FORWARD_ACTIVE = 2; + /**#@-*/ + + /** + * Unused + */ + const SSH_AGENT_FAILURE = 5; + + /** + * Socket Resource + * + * @var resource + * @access private + */ + var $fsock; + + /** + * Agent forwarding status + * + * @access private + */ + var $forward_status = self::FORWARD_NONE; + + /** + * Buffer for accumulating forwarded authentication + * agent data arriving on SSH data channel destined + * for agent unix socket + * + * @access private + */ + var $socket_buffer = ''; + + /** + * Tracking the number of bytes we are expecting + * to arrive for the agent socket on the SSH data + * channel + */ + var $expected_bytes = 0; + + /** + * Default Constructor + * + * @return \phpseclib\System\SSH\Agent + * @access public + */ + function __construct($address = null) + { + if (!$address) { + switch (true) { + case isset($_SERVER['SSH_AUTH_SOCK']): + $address = $_SERVER['SSH_AUTH_SOCK']; + break; + case isset($_ENV['SSH_AUTH_SOCK']): + $address = $_ENV['SSH_AUTH_SOCK']; + break; + default: + user_error('SSH_AUTH_SOCK not found'); + return false; + } + } + + $this->fsock = fsockopen('unix://' . $address, 0, $errno, $errstr); + if (!$this->fsock) { + user_error("Unable to connect to ssh-agent (Error $errno: $errstr)"); + } + } + + /** + * Request Identities + * + * See "2.5.2 Requesting a list of protocol 2 keys" + * Returns an array containing zero or more \phpseclib\System\SSH\Agent\Identity objects + * + * @return array + * @access public + */ + function requestIdentities() + { + if (!$this->fsock) { + return array(); + } + + $packet = pack('NC', 1, self::SSH_AGENTC_REQUEST_IDENTITIES); + if (strlen($packet) != fputs($this->fsock, $packet)) { + user_error('Connection closed while requesting identities'); + return array(); + } + + $temp = fread($this->fsock, 4); + if (strlen($temp) != 4) { + user_error('Connection closed while requesting identities'); + return array(); + } + $length = current(unpack('N', $temp)); + $type = ord(fread($this->fsock, 1)); + if ($type != self::SSH_AGENT_IDENTITIES_ANSWER) { + user_error('Unable to request identities'); + return array(); + } + + $identities = array(); + $temp = fread($this->fsock, 4); + if (strlen($temp) != 4) { + user_error('Connection closed while requesting identities'); + return array(); + } + $keyCount = current(unpack('N', $temp)); + for ($i = 0; $i < $keyCount; $i++) { + $temp = fread($this->fsock, 4); + if (strlen($temp) != 4) { + user_error('Connection closed while requesting identities'); + return array(); + } + $length = current(unpack('N', $temp)); + $key_blob = fread($this->fsock, $length); + if (strlen($key_blob) != $length) { + user_error('Connection closed while requesting identities'); + return array(); + } + $key_str = 'ssh-rsa ' . base64_encode($key_blob); + $temp = fread($this->fsock, 4); + if (strlen($temp) != 4) { + user_error('Connection closed while requesting identities'); + return array(); + } + $length = current(unpack('N', $temp)); + if ($length) { + $temp = fread($this->fsock, $length); + if (strlen($temp) != $length) { + user_error('Connection closed while requesting identities'); + return array(); + } + $key_str.= ' ' . $temp; + } + $length = current(unpack('N', substr($key_blob, 0, 4))); + $key_type = substr($key_blob, 4, $length); + switch ($key_type) { + case 'ssh-rsa': + $key = new RSA(); + $key->loadKey($key_str); + break; + case 'ssh-dss': + // not currently supported + break; + } + // resources are passed by reference by default + if (isset($key)) { + $identity = new Identity($this->fsock); + $identity->setPublicKey($key); + $identity->setPublicKeyBlob($key_blob); + $identities[] = $identity; + unset($key); + } + } + + return $identities; + } + + /** + * Signal that agent forwarding should + * be requested when a channel is opened + * + * @param Net_SSH2 $ssh + * @return bool + * @access public + */ + function startSSHForwarding($ssh) + { + if ($this->forward_status == self::FORWARD_NONE) { + $this->forward_status = self::FORWARD_REQUEST; + } + } + + /** + * Request agent forwarding of remote server + * + * @param Net_SSH2 $ssh + * @return bool + * @access private + */ + function _request_forwarding($ssh) + { + $request_channel = $ssh->_get_open_channel(); + if ($request_channel === false) { + return false; + } + + $packet = pack( + 'CNNa*C', + NET_SSH2_MSG_CHANNEL_REQUEST, + $ssh->server_channels[$request_channel], + strlen('auth-agent-req@openssh.com'), + 'auth-agent-req@openssh.com', + 1 + ); + + $ssh->channel_status[$request_channel] = NET_SSH2_MSG_CHANNEL_REQUEST; + + if (!$ssh->_send_binary_packet($packet)) { + return false; + } + + $response = $ssh->_get_channel_packet($request_channel); + if ($response === false) { + return false; + } + + $ssh->channel_status[$request_channel] = NET_SSH2_MSG_CHANNEL_OPEN; + $this->forward_status = self::FORWARD_ACTIVE; + + return true; + } + + /** + * On successful channel open + * + * This method is called upon successful channel + * open to give the SSH Agent an opportunity + * to take further action. i.e. request agent forwarding + * + * @param Net_SSH2 $ssh + * @access private + */ + function _on_channel_open($ssh) + { + if ($this->forward_status == self::FORWARD_REQUEST) { + $this->_request_forwarding($ssh); + } + } + + /** + * Forward data to SSH Agent and return data reply + * + * @param string $data + * @return data from SSH Agent + * @access private + */ + function _forward_data($data) + { + if ($this->expected_bytes > 0) { + $this->socket_buffer.= $data; + $this->expected_bytes -= strlen($data); + } else { + $agent_data_bytes = current(unpack('N', $data)); + $current_data_bytes = strlen($data); + $this->socket_buffer = $data; + if ($current_data_bytes != $agent_data_bytes + 4) { + $this->expected_bytes = ($agent_data_bytes + 4) - $current_data_bytes; + return false; + } + } + + if (strlen($this->socket_buffer) != fwrite($this->fsock, $this->socket_buffer)) { + user_error('Connection closed attempting to forward data to SSH agent'); + return false; + } + + $this->socket_buffer = ''; + $this->expected_bytes = 0; + + $temp = fread($this->fsock, 4); + if (strlen($temp) != 4) { + user_error('Connection closed while reading data response'); + return false; + } + $agent_reply_bytes = current(unpack('N', $temp)); + + $agent_reply_data = fread($this->fsock, $agent_reply_bytes); + if (strlen($agent_reply_data) != $agent_reply_bytes) { + user_error('Connection closed while reading data response'); + return false; + } + $agent_reply_data = current(unpack('a*', $agent_reply_data)); + + return pack('Na*', $agent_reply_bytes, $agent_reply_data); + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php b/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php new file mode 100644 index 000000000..68b6bfdfa --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php @@ -0,0 +1,241 @@ + + * @copyright 2009 Jim Wigginton + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link http://phpseclib.sourceforge.net + * @internal See http://api.libssh.org/rfc/PROTOCOL.agent + */ + +namespace phpseclib\System\SSH\Agent; + +use phpseclib\System\SSH\Agent; + +/** + * Pure-PHP ssh-agent client identity object + * + * Instantiation should only be performed by \phpseclib\System\SSH\Agent class. + * This could be thought of as implementing an interface that phpseclib\Crypt\RSA + * implements. ie. maybe a Net_SSH_Auth_PublicKey interface or something. + * The methods in this interface would be getPublicKey and sign since those are the + * methods phpseclib looks for to perform public key authentication. + * + * @package SSH\Agent + * @author Jim Wigginton + * @access internal + */ +class Identity +{ + /**@+ + * Signature Flags + * + * See https://tools.ietf.org/html/draft-miller-ssh-agent-00#section-5.3 + * + * @access private + */ + const SSH_AGENT_RSA2_256 = 2; + const SSH_AGENT_RSA2_512 = 4; + /**#@-*/ + + /** + * Key Object + * + * @var \phpseclib\Crypt\RSA + * @access private + * @see self::getPublicKey() + */ + var $key; + + /** + * Key Blob + * + * @var string + * @access private + * @see self::sign() + */ + var $key_blob; + + /** + * Socket Resource + * + * @var resource + * @access private + * @see self::sign() + */ + var $fsock; + + /** + * Signature flags + * + * @var int + * @access private + * @see self::sign() + * @see self::setHash() + */ + var $flags = 0; + + /** + * Default Constructor. + * + * @param resource $fsock + * @return \phpseclib\System\SSH\Agent\Identity + * @access private + */ + function __construct($fsock) + { + $this->fsock = $fsock; + } + + /** + * Set Public Key + * + * Called by \phpseclib\System\SSH\Agent::requestIdentities() + * + * @param \phpseclib\Crypt\RSA $key + * @access private + */ + function setPublicKey($key) + { + $this->key = $key; + $this->key->setPublicKey(); + } + + /** + * Set Public Key + * + * Called by \phpseclib\System\SSH\Agent::requestIdentities(). The key blob could be extracted from $this->key + * but this saves a small amount of computation. + * + * @param string $key_blob + * @access private + */ + function setPublicKeyBlob($key_blob) + { + $this->key_blob = $key_blob; + } + + /** + * Get Public Key + * + * Wrapper for $this->key->getPublicKey() + * + * @param int $format optional + * @return mixed + * @access public + */ + function getPublicKey($format = null) + { + return !isset($format) ? $this->key->getPublicKey() : $this->key->getPublicKey($format); + } + + /** + * Set Signature Mode + * + * Doesn't do anything as ssh-agent doesn't let you pick and choose the signature mode. ie. + * ssh-agent's only supported mode is \phpseclib\Crypt\RSA::SIGNATURE_PKCS1 + * + * @param int $mode + * @access public + */ + function setSignatureMode($mode) + { + } + + /** + * Set Hash + * + * ssh-agent doesn't support using hashes for RSA other than SHA1 + * + * @param string $hash + * @access public + */ + function setHash($hash) + { + $this->flags = 0; + switch ($hash) { + case 'sha1': + break; + case 'sha256': + $this->flags = self::SSH_AGENT_RSA2_256; + break; + case 'sha512': + $this->flags = self::SSH_AGENT_RSA2_512; + break; + default: + user_error('The only supported hashes for RSA are sha1, sha256 and sha512'); + } + } + + /** + * Create a signature + * + * See "2.6.2 Protocol 2 private key signature request" + * + * @param string $message + * @return string + * @access public + */ + function sign($message) + { + // the last parameter (currently 0) is for flags and ssh-agent only defines one flag (for ssh-dss): SSH_AGENT_OLD_SIGNATURE + $packet = pack('CNa*Na*N', Agent::SSH_AGENTC_SIGN_REQUEST, strlen($this->key_blob), $this->key_blob, strlen($message), $message, $this->flags); + $packet = pack('Na*', strlen($packet), $packet); + if (strlen($packet) != fputs($this->fsock, $packet)) { + user_error('Connection closed during signing'); + return false; + } + + $temp = fread($this->fsock, 4); + if (strlen($temp) != 4) { + user_error('Connection closed during signing'); + return false; + } + $length = current(unpack('N', $temp)); + $type = ord(fread($this->fsock, 1)); + if ($type != Agent::SSH_AGENT_SIGN_RESPONSE) { + user_error('Unable to retrieve signature'); + return false; + } + + $signature_blob = fread($this->fsock, $length - 1); + if (strlen($signature_blob) != $length - 1) { + user_error('Connection closed during signing'); + return false; + } + $length = current(unpack('N', $this->_string_shift($signature_blob, 4))); + if ($length != strlen($signature_blob)) { + user_error('Malformed signature blob'); + } + $length = current(unpack('N', $this->_string_shift($signature_blob, 4))); + if ($length > strlen($signature_blob) + 4) { + user_error('Malformed signature blob'); + } + $type = $this->_string_shift($signature_blob, $length); + $this->_string_shift($signature_blob, 4); + + return $signature_blob; + } + + /** + * String Shift + * + * Inspired by array_shift + * + * @param string $string + * @param int $index + * @return string + * @access private + */ + function _string_shift(&$string, $index = 1) + { + $substr = substr($string, 0, $index); + $string = substr($string, $index); + return $substr; + } +} diff --git a/vendor/phpseclib/phpseclib/phpseclib/bootstrap.php b/vendor/phpseclib/phpseclib/phpseclib/bootstrap.php new file mode 100644 index 000000000..0da0999fd --- /dev/null +++ b/vendor/phpseclib/phpseclib/phpseclib/bootstrap.php @@ -0,0 +1,16 @@ +ramsey/collection -[![Source Code][badge-source]][source] -[![Latest Version][badge-release]][packagist] -[![Software License][badge-license]][license] -[![PHP Version][badge-php]][php] -[![Build Status][badge-build]][build] -[![Coverage Status][badge-coverage]][coverage] -[![Total Downloads][badge-downloads]][downloads] +

        + A PHP library for representing and manipulating collections. +

        + +

        + Source Code + Download Package + PHP Programming Language + Build Status + Codecov Code Coverage + Psalm Type Coverage + Read License + Package downloads on Packagist + Chat with the maintainers +

        + +## About ramsey/collection is a PHP 7.2+ library for representing and manipulating collections. @@ -16,7 +26,6 @@ This project adheres to a [code of conduct](CODE_OF_CONDUCT.md). By participating in this project and its community, you are expected to uphold this code. - ## Installation Install this package as a dependency using [Composer](https://getcomposer.org). @@ -27,8 +36,6 @@ composer require ramsey/collection ## Usage -The [latest class API documentation][apidocs] is available online. - Examples of how to use this framework can be found in the [Wiki pages](https://github.com/ramsey/collection/wiki/Examples). @@ -49,99 +56,22 @@ composer install Now, you are ready to develop! -### Tooling +## Coordinated Disclosure -This project uses [CaptainHook](https://github.com/CaptainHookPhp/captainhook) -to validate all staged changes prior to commit. +Keeping user information safe and secure is a top priority, and we welcome the +contribution of external security researchers. If you believe you've found a +security issue in software that is maintained in this repository, please read +[SECURITY.md][] for instructions on submitting a vulnerability report. -#### Composer Commands +## ramsey/collection for Enterprise -To see all the commands available in the project `br` namespace for -Composer, type: +Available as part of the Tidelift Subscription. -``` bash -composer list br -``` - -##### Composer Command Autocompletion - -If you'd like to have Composer command auto-completion, you may use -[bamarni/symfony-console-autocomplete](https://github.com/bamarni/symfony-console-autocomplete). -Install it globally with Composer: - -``` bash -composer global require bamarni/symfony-console-autocomplete -``` - -Then, in your shell configuration file — usually `~/.bash_profile` or `~/.zshrc`, -but it could be different depending on your settings — ensure that your global -Composer `bin` directory is in your `PATH`, and evaluate the -`symfony-autocomplete` command. This will look like this: - -``` bash -export PATH="$(composer config home)/vendor/bin:$PATH" -eval "$(symfony-autocomplete)" -``` - -Now, you can use the `tab` key to auto-complete Composer commands: - -``` bash -composer br:[TAB][TAB] -``` - -#### Coding Standards - -This project follows a superset of [PSR-12](https://www.php-fig.org/psr/psr-12/) -coding standards, enforced by [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer). -The project PHP_CodeSniffer configuration may be found in `phpcs.xml.dist`. - -CaptainHook will run PHP_CodeSniffer before committing. It will attempt to fix -any errors it can, and it will reject the commit if there are any un-fixable -issues. Many issues can be fixed automatically and will be done so pre-commit. - -You may lint the entire codebase using PHP_CodeSniffer with the following -commands: - -``` bash -# Lint -composer br:lint - -# Lint and autofix -composer br:lint:fix -``` - -#### Static Analysis - -This project uses a combination of [PHPStan](https://github.com/phpstan/phpstan) -and [Psalm](https://github.com/vimeo/psalm) to provide static analysis of PHP -code. Configurations for these are in `phpstan.neon.dist` and `psalm.xml`, -respectively. - -CaptainHook will run PHPStan and Psalm before committing. The pre-commit hook -does not attempt to fix any static analysis errors. Instead, the commit will -fail, and you must fix the errors manually. - -You may run static analysis manually across the whole codebase with the -following command: - -``` bash -# Static analysis -composer br:analyze -``` - -### Project Structure - -This project uses [pds/skeleton](https://github.com/php-pds/skeleton) as its -base folder structure and layout. - -| Name | Description | -| ------------------| ---------------------------------------------- | -| **bin/** | Commands and scripts for this project | -| **build/** | Cache, logs, reports, etc. for project builds | -| **docs/** | Project-specific documentation | -| **resources/** | Additional resources for this project | -| **src/** | Project library and application source code | -| **tests/** | Tests for this project | +The maintainers of ramsey/collection and thousands of other packages are working +with Tidelift to deliver commercial support and maintenance for the open source +packages you use to build your applications. Save time, reduce risk, and improve +code health, while paying the maintainers of the exact packages you use. +[Learn more.](https://tidelift.com/subscription/pkg/packagist-ramsey-collection?utm_source=undefined&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) ## Copyright and License @@ -151,20 +81,4 @@ MIT License (MIT). Please see [LICENSE](LICENSE) for more information. [java]: http://docs.oracle.com/javase/8/docs/technotes/guides/collections/index.html -[apidocs]: https://docs.benramsey.com/ramsey-collection/latest/ - -[badge-source]: http://img.shields.io/badge/source-ramsey/collection-blue.svg?style=flat-square -[badge-release]: https://img.shields.io/packagist/v/ramsey/collection.svg?style=flat-square&label=release -[badge-license]: https://img.shields.io/packagist/l/ramsey/collection.svg?style=flat-square -[badge-php]: https://img.shields.io/packagist/php-v/ramsey/collection.svg?style=flat-square -[badge-build]: https://img.shields.io/travis/ramsey/collection/master.svg?style=flat-square -[badge-coverage]: https://img.shields.io/coveralls/github/ramsey/collection/master.svg?style=flat-square -[badge-downloads]: https://img.shields.io/packagist/dt/ramsey/collection.svg?style=flat-square&colorB=mediumvioletred - -[source]: https://github.com/ramsey/collection -[packagist]: https://packagist.org/packages/ramsey/collection -[license]: https://github.com/ramsey/collection/blob/master/LICENSE -[php]: https://php.net -[build]: https://travis-ci.org/ramsey/collection -[coverage]: https://coveralls.io/r/ramsey/collection?branch=master -[downloads]: https://packagist.org/packages/ramsey/collection +[security.md]: https://github.com/ramsey/collection/blob/master/SECURITY.md diff --git a/vendor/ramsey/collection/SECURITY.md b/vendor/ramsey/collection/SECURITY.md new file mode 100644 index 000000000..b052f3b65 --- /dev/null +++ b/vendor/ramsey/collection/SECURITY.md @@ -0,0 +1,113 @@ + + +# Vulnerability Disclosure Policy + +Keeping user information safe and secure is a top priority, and we welcome the +contribution of external security researchers. + +## Scope + +If you believe you've found a security issue in software that is maintained in +this repository, we encourage you to notify us. + +| Version | In scope | Source code | +| :-----: | :------: | :---------- | +| latest | ✅ | https://github.com/ramsey/collection | + +## How to Submit a Report + +To submit a vulnerability report, please contact us at . +Your submission will be reviewed and validated by a member of our team. + +## Safe Harbor + +We support safe harbor for security researchers who: + +* Make a good faith effort to avoid privacy violations, destruction of data, and + interruption or degradation of our services. +* Only interact with accounts you own or with explicit permission of the account + holder. If you do encounter Personally Identifiable Information (PII) contact + us immediately, do not proceed with access, and immediately purge any local + information. +* Provide us with a reasonable amount of time to resolve vulnerabilities prior + to any disclosure to the public or a third-party. + +We will consider activities conducted consistent with this policy to constitute +"authorized" conduct and will not pursue civil action or initiate a complaint to +law enforcement. We will help to the extent we can if legal action is initiated +by a third party against you. + +Please submit a report to us before engaging in conduct that may be inconsistent +with or unaddressed by this policy. + +## Preferences + +* Please provide detailed reports with reproducible steps and a clearly defined + impact. +* Include the version number of the vulnerable package in your report +* Social engineering (e.g. phishing, vishing, smishing) is prohibited. + +## Encryption Key for security@ramsey.dev + +For increased privacy when reporting sensitive issues, you may encrypt your +messages using the following key: + +``` +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +nmgawbBHA02D5xEqB5SU3WJu +=eJNx +-----END PGP PUBLIC KEY BLOCK----- +``` diff --git a/vendor/ramsey/collection/composer.json b/vendor/ramsey/collection/composer.json index 9e443d93c..0c5d09578 100644 --- a/vendor/ramsey/collection/composer.json +++ b/vendor/ramsey/collection/composer.json @@ -25,19 +25,19 @@ "captainhook/captainhook": "^5.3", "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "ergebnis/composer-normalize": "^2.6", - "fzaninotto/faker": "^1.5", + "fakerphp/faker": "^1.5", "hamcrest/hamcrest-php": "^2", - "jangregor/phpstan-prophecy": "^0.6", + "jangregor/phpstan-prophecy": "^0.8", "mockery/mockery": "^1.3", "phpstan/extension-installer": "^1", "phpstan/phpstan": "^0.12.32", "phpstan/phpstan-mockery": "^0.12.5", "phpstan/phpstan-phpunit": "^0.12.11", - "phpunit/phpunit": "^8.5", + "phpunit/phpunit": "^8.5 || ^9", "psy/psysh": "^0.10.4", "slevomat/coding-standard": "^6.3", "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^3.12.2" + "vimeo/psalm": "^4.4" }, "config": { "sort-packages": true @@ -63,7 +63,7 @@ "@br:analyze:psalm" ], "br:analyze:phpstan": "phpstan --memory-limit=1G analyse", - "br:analyze:psalm": "psalm --diff --diff-methods --config=psalm.xml", + "br:analyze:psalm": "psalm --diff --config=psalm.xml", "br:build:clean": "git clean -fX build/.", "br:build:clear-cache": "git clean -fX build/cache/.", "br:lint": "phpcs --cache=build/cache/phpcs.cache", diff --git a/vendor/ramsey/collection/src/AbstractArray.php b/vendor/ramsey/collection/src/AbstractArray.php index f8b4be2ce..2c6e0dedd 100644 --- a/vendor/ramsey/collection/src/AbstractArray.php +++ b/vendor/ramsey/collection/src/AbstractArray.php @@ -23,20 +23,23 @@ use function unserialize; /** * This class provides a basic implementation of `ArrayInterface`, to minimize * the effort required to implement this interface. + * + * @template T + * @template-implements ArrayInterface */ abstract class AbstractArray implements ArrayInterface { /** * The items of this array. * - * @var mixed[] + * @var array */ protected $data = []; /** * Constructs a new array object. * - * @param mixed[] $data The initial items to add to this array. + * @param array $data The initial items to add to this array. */ public function __construct(array $data = []) { @@ -51,8 +54,6 @@ abstract class AbstractArray implements ArrayInterface * Returns an iterator for this array. * * @link http://php.net/manual/en/iteratoraggregate.getiterator.php IteratorAggregate::getIterator() - * - * @return ArrayIterator */ public function getIterator(): Traversable { @@ -64,7 +65,7 @@ abstract class AbstractArray implements ArrayInterface * * @link http://php.net/manual/en/arrayaccess.offsetexists.php ArrayAccess::offsetExists() * - * @param mixed $offset The offset to check. + * @param array-key $offset The offset to check. */ public function offsetExists($offset): bool { @@ -76,9 +77,9 @@ abstract class AbstractArray implements ArrayInterface * * @link http://php.net/manual/en/arrayaccess.offsetget.php ArrayAccess::offsetGet() * - * @param mixed $offset The offset for which a value should be returned. + * @param array-key $offset The offset for which a value should be returned. * - * @return mixed|null the value stored at the offset, or null if the offset + * @return T|null the value stored at the offset, or null if the offset * does not exist. */ public function offsetGet($offset) @@ -91,10 +92,11 @@ abstract class AbstractArray implements ArrayInterface * * @link http://php.net/manual/en/arrayaccess.offsetset.php ArrayAccess::offsetSet() * - * @param mixed|null $offset The offset to set. If `null`, the value may be + * @param array-key|null $offset The offset to set. If `null`, the value may be * set at a numerically-indexed offset. - * @param mixed $value The value to set at the given offset. + * @param T $value The value to set at the given offset. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function offsetSet($offset, $value): void { if ($offset === null) { @@ -109,7 +111,7 @@ abstract class AbstractArray implements ArrayInterface * * @link http://php.net/manual/en/arrayaccess.offsetunset.php ArrayAccess::offsetUnset() * - * @param mixed $offset The offset to remove from the array. + * @param array-key $offset The offset to remove from the array. */ public function offsetUnset($offset): void { @@ -139,7 +141,10 @@ abstract class AbstractArray implements ArrayInterface */ public function unserialize($serialized): void { - $this->data = unserialize($serialized, ['allowed_classes' => false]); + /** @var array $data */ + $data = unserialize($serialized, ['allowed_classes' => false]); + + $this->data = $data; } /** @@ -152,27 +157,19 @@ abstract class AbstractArray implements ArrayInterface return count($this->data); } - /** - * Removes all items from this array. - */ public function clear(): void { $this->data = []; } /** - * Returns a native PHP array representation of this array object. - * - * @return mixed[] + * @inheritDoc */ public function toArray(): array { return $this->data; } - /** - * Returns `true` if this array is empty. - */ public function isEmpty(): bool { return count($this->data) === 0; diff --git a/vendor/ramsey/collection/src/AbstractCollection.php b/vendor/ramsey/collection/src/AbstractCollection.php index 546f1adba..2facf0e89 100644 --- a/vendor/ramsey/collection/src/AbstractCollection.php +++ b/vendor/ramsey/collection/src/AbstractCollection.php @@ -14,11 +14,11 @@ declare(strict_types=1); namespace Ramsey\Collection; +use Closure; use Ramsey\Collection\Exception\CollectionMismatchException; use Ramsey\Collection\Exception\InvalidArgumentException; use Ramsey\Collection\Exception\InvalidSortOrderException; use Ramsey\Collection\Exception\OutOfBoundsException; -use Ramsey\Collection\Exception\ValueExtractionException; use Ramsey\Collection\Tool\TypeTrait; use Ramsey\Collection\Tool\ValueExtractorTrait; use Ramsey\Collection\Tool\ValueToStringTrait; @@ -40,6 +40,10 @@ use function usort; /** * This class provides a basic implementation of `CollectionInterface`, to * minimize the effort required to implement this interface + * + * @template T + * @template-extends AbstractArray + * @template-implements CollectionInterface */ abstract class AbstractCollection extends AbstractArray implements CollectionInterface { @@ -48,14 +52,7 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt use ValueExtractorTrait; /** - * Ensures that this collection contains the specified element. - * - * @param mixed $element The element to add to the collection. - * - * @return bool `true` if this collection changed as a result of the call. - * - * @throws InvalidArgumentException when the element does not match the - * specified type for this collection. + * @inheritDoc */ public function add($element): bool { @@ -65,10 +62,7 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt } /** - * Returns `true` if this collection contains the specified element. - * - * @param mixed $element The element to check whether the collection contains. - * @param bool $strict Whether to perform a strict type check on the value. + * @inheritDoc */ public function contains($element, bool $strict = true): bool { @@ -76,14 +70,7 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt } /** - * Sets the given value to the given offset in the array. - * - * @param mixed|null $offset The position to set the value in the array, or - * `null` to append the value to the array. - * @param mixed $value The value to set at the given offset. - * - * @throws InvalidArgumentException when the value does not match the - * specified type for this collection. + * @inheritDoc */ public function offsetSet($offset, $value): void { @@ -102,12 +89,7 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt } /** - * Removes a single instance of the specified element from this collection, - * if it is present. - * - * @param mixed $element The element to remove from the collection. - * - * @return bool `true` if an element was removed as a result of this call. + * @inheritDoc */ public function remove($element): bool { @@ -121,31 +103,25 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt } /** - * Returns the values from given property or method. - * - * @param string $propertyOrMethod The property or method name to filter by. - * - * @return mixed[] - * - * @throws ValueExtractionException if property or method is not defined. + * @inheritDoc */ public function column(string $propertyOrMethod): array { $temp = []; foreach ($this->data as $item) { - $temp[] = $this->extractValue($item, $propertyOrMethod); + /** @var mixed $value */ + $value = $this->extractValue($item, $propertyOrMethod); + + /** @psalm-suppress MixedAssignment */ + $temp[] = $value; } return $temp; } /** - * Returns the first item of the collection. - * - * @return mixed - * - * @throws OutOfBoundsException when the collection is empty. + * @inheritDoc */ public function first() { @@ -155,15 +131,14 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt reset($this->data); - return current($this->data); + /** @var T $first */ + $first = current($this->data); + + return $first; } /** - * Returns the last item of the collection. - * - * @return mixed - * - * @throws OutOfBoundsException when the collection is empty. + * @inheritDoc */ public function last() { @@ -171,27 +146,13 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt throw new OutOfBoundsException('Can\'t determine last item. Collection is empty'); } + /** @var T $item */ $item = end($this->data); reset($this->data); return $item; } - /** - * Returns a sorted collection. - * - * {@inheritdoc} - * - * @param string $propertyOrMethod The property or method to sort by. - * @param string $order The sort order for the resulting collection (one of - * this interface's `SORT_*` constants). - * - * @return CollectionInterface - * - * @throws InvalidSortOrderException if neither "asc" nor "desc" was given - * as the order. - * @throws ValueExtractionException if property or method is not defined. - */ public function sort(string $propertyOrMethod, string $order = self::SORT_ASC): CollectionInterface { if (!in_array($order, [self::SORT_ASC, self::SORT_DESC], true)) { @@ -200,25 +161,26 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt $collection = clone $this; - usort($collection->data, function ($a, $b) use ($propertyOrMethod, $order) { - $aValue = $this->extractValue($a, $propertyOrMethod); - $bValue = $this->extractValue($b, $propertyOrMethod); + usort( + $collection->data, + /** + * @param T $a + * @param T $b + */ + function ($a, $b) use ($propertyOrMethod, $order): int { + /** @var mixed $aValue */ + $aValue = $this->extractValue($a, $propertyOrMethod); - return ($aValue <=> $bValue) * ($order === self::SORT_DESC ? -1 : 1); - }); + /** @var mixed $bValue */ + $bValue = $this->extractValue($b, $propertyOrMethod); + + return ($aValue <=> $bValue) * ($order === self::SORT_DESC ? -1 : 1); + } + ); return $collection; } - /** - * Returns a filtered collection. - * - * {@inheritdoc} - * - * @param callable $callback A callable to use for filtering elements. - * - * @return CollectionInterface - */ public function filter(callable $callback): CollectionInterface { $collection = clone $this; @@ -228,84 +190,31 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt } /** - * Returns a collection of matching items. - * * {@inheritdoc} - * - * @param string $propertyOrMethod The property or method to evaluate. - * @param mixed $value The value to match. - * - * @return CollectionInterface - * - * @throws ValueExtractionException if property or method is not defined. */ public function where(string $propertyOrMethod, $value): CollectionInterface { return $this->filter(function ($item) use ($propertyOrMethod, $value) { + /** @var mixed $accessorValue */ $accessorValue = $this->extractValue($item, $propertyOrMethod); return $accessorValue === $value; }); } - /** - * Applies a callback to each item of the collection. - * - * {@inheritdoc} - * - * @param callable $callback A callable to apply to each item of the - * collection. - * - * @return CollectionInterface - */ public function map(callable $callback): CollectionInterface { - $collection = clone $this; - $collection->data = array_map($callback, $collection->data); - - return $collection; + return new Collection('mixed', array_map($callback, $this->data)); } - /** - * Create a new collection with divergent items between current and given - * collection. - * - * @param CollectionInterface $other The collection to check for divergent - * items. - * - * @return CollectionInterface - * - * @throws CollectionMismatchException if the given collection is not of the - * same type. - */ public function diff(CollectionInterface $other): CollectionInterface { - if (!$other instanceof static) { - throw new CollectionMismatchException('Collection must be of type ' . static::class); - } + $this->compareCollectionTypes($other); - // When using generics (Collection.php, Set.php, etc), - // we also need to make sure that the internal types match each other - if ($other->getType() !== $this->getType()) { - throw new CollectionMismatchException('Collection items must be of type ' . $this->getType()); - } + $diffAtoB = array_udiff($this->data, $other->toArray(), $this->getComparator()); + $diffBtoA = array_udiff($other->toArray(), $this->data, $this->getComparator()); - $comparator = function ($a, $b): int { - // If the two values are object, we convert them to unique scalars. - // If the collection contains mixed values (unlikely) where some are objects - // and some are not, we leave them as they are. - // The comparator should still work and the result of $a < $b should - // be consistent but unpredictable since not documented. - if (is_object($a) && is_object($b)) { - $a = spl_object_id($a); - $b = spl_object_id($b); - } - - return $a === $b ? 0 : ($a < $b ? 1 : -1); - }; - - $diffAtoB = array_udiff($this->data, $other->data, $comparator); - $diffBtoA = array_udiff($other->data, $this->data, $comparator); + /** @var array $diff */ $diff = array_merge($diffAtoB, $diffBtoA); $collection = clone $this; @@ -314,45 +223,12 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt return $collection; } - /** - * Create a new collection with intersecting item between current and given - * collection. - * - * @param CollectionInterface $other The collection to check for - * intersecting items. - * - * @return CollectionInterface - * - * @throws CollectionMismatchException if the given collection is not of the - * same type. - */ public function intersect(CollectionInterface $other): CollectionInterface { - if (!$other instanceof static) { - throw new CollectionMismatchException('Collection must be of type ' . static::class); - } + $this->compareCollectionTypes($other); - // When using generics (Collection.php, Set.php, etc), - // we also need to make sure that the internal types match each other - if ($other->getType() !== $this->getType()) { - throw new CollectionMismatchException('Collection items must be of type ' . $this->getType()); - } - - $comparator = function ($a, $b): int { - // If the two values are object, we convert them to unique scalars. - // If the collection contains mixed values (unlikely) where some are objects - // and some are not, we leave them as they are. - // The comparator should still work and the result of $a < $b should - // be consistent but unpredictable since not documented. - if (is_object($a) && is_object($b)) { - $a = spl_object_id($a); - $b = spl_object_id($b); - } - - return $a === $b ? 0 : ($a < $b ? 1 : -1); - }; - - $intersect = array_uintersect($this->data, $other->data, $comparator); + /** @var array $intersect */ + $intersect = array_uintersect($this->data, $other->toArray(), $this->getComparator()); $collection = clone $this; $collection->data = $intersect; @@ -360,15 +236,6 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt return $collection; } - /** - * Merge current items and items of given collections into a new one. - * - * @param CollectionInterface ...$collections The collections to merge. - * - * @return CollectionInterface - * - * @throws CollectionMismatchException if any of the given collections are not of the same type. - */ public function merge(CollectionInterface ...$collections): CollectionInterface { $temp = [$this->data]; @@ -391,6 +258,7 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt $temp[] = $collection->toArray(); } + /** @var array $merge */ $merge = array_merge(...$temp); $collection = clone $this; @@ -404,6 +272,46 @@ abstract class AbstractCollection extends AbstractArray implements CollectionInt */ public function unserialize($serialized): void { - $this->data = unserialize($serialized, ['allowed_classes' => [$this->getType()]]); + /** @var array $data */ + $data = unserialize($serialized, ['allowed_classes' => [$this->getType()]]); + + $this->data = $data; + } + + /** + * @param CollectionInterface $other + */ + private function compareCollectionTypes(CollectionInterface $other): void + { + if (!$other instanceof static) { + throw new CollectionMismatchException('Collection must be of type ' . static::class); + } + + // When using generics (Collection.php, Set.php, etc), + // we also need to make sure that the internal types match each other + if ($other->getType() !== $this->getType()) { + throw new CollectionMismatchException('Collection items must be of type ' . $this->getType()); + } + } + + private function getComparator(): Closure + { + return /** + * @param T $a + * @param T $b + */ + function ($a, $b): int { + // If the two values are object, we convert them to unique scalars. + // If the collection contains mixed values (unlikely) where some are objects + // and some are not, we leave them as they are. + // The comparator should still work and the result of $a < $b should + // be consistent but unpredictable since not documented. + if (is_object($a) && is_object($b)) { + $a = spl_object_id($a); + $b = spl_object_id($b); + } + + return $a === $b ? 0 : ($a < $b ? 1 : -1); + }; } } diff --git a/vendor/ramsey/collection/src/AbstractSet.php b/vendor/ramsey/collection/src/AbstractSet.php index 674fda03d..3bd22965f 100644 --- a/vendor/ramsey/collection/src/AbstractSet.php +++ b/vendor/ramsey/collection/src/AbstractSet.php @@ -14,25 +14,18 @@ declare(strict_types=1); namespace Ramsey\Collection; -use Ramsey\Collection\Exception\InvalidArgumentException; - /** * This class contains the basic implementation of a collection that does not * allow duplicated values (a set), to minimize the effort required to implement * this specific type of collection. + * + * @template T + * @template-extends AbstractCollection */ abstract class AbstractSet extends AbstractCollection { /** - * Adds the specified element to this set, if it is not already present. - * - * @param mixed $element The element to add to the set. - * - * @return bool `true` if this set did not already contain the specified - * element. - * - * @throws InvalidArgumentException when the element does not match the - * specified type for this set. + * @inheritDoc */ public function add($element): bool { @@ -44,14 +37,7 @@ abstract class AbstractSet extends AbstractCollection } /** - * Sets the given value to the given offset in this set, if it is not - * already present. - * - * @param mixed|null $offset The offset is ignored and is treated as `null`. - * @param mixed $value The value to set at the given offset. - * - * @throws InvalidArgumentException when the value does not match the - * specified type for this set. + * @inheritDoc */ public function offsetSet($offset, $value): void { diff --git a/vendor/ramsey/collection/src/ArrayInterface.php b/vendor/ramsey/collection/src/ArrayInterface.php index 81835cc80..19fbff336 100644 --- a/vendor/ramsey/collection/src/ArrayInterface.php +++ b/vendor/ramsey/collection/src/ArrayInterface.php @@ -21,6 +21,8 @@ use Serializable; /** * `ArrayInterface` provides traversable array functionality to data types. + * + * @template T */ interface ArrayInterface extends ArrayAccess, @@ -36,7 +38,7 @@ interface ArrayInterface extends /** * Returns a native PHP array representation of this array object. * - * @return mixed[] + * @return array */ public function toArray(): array; diff --git a/vendor/ramsey/collection/src/Collection.php b/vendor/ramsey/collection/src/Collection.php index e4db68dfe..2f8deddaa 100644 --- a/vendor/ramsey/collection/src/Collection.php +++ b/vendor/ramsey/collection/src/Collection.php @@ -69,6 +69,9 @@ namespace Ramsey\Collection; * // the collection is a collection of My\Foo objects * } * ``` + * + * @template T + * @template-extends AbstractCollection */ class Collection extends AbstractCollection { @@ -88,7 +91,7 @@ class Collection extends AbstractCollection * * @param string $collectionType The type (FQCN) associated with this * collection. - * @param mixed[] $data The initial items to store in the collection. + * @param array $data The initial items to store in the collection. */ public function __construct(string $collectionType, array $data = []) { @@ -96,9 +99,6 @@ class Collection extends AbstractCollection parent::__construct($data); } - /** - * Returns the type associated with this collection. - */ public function getType(): string { return $this->collectionType; diff --git a/vendor/ramsey/collection/src/CollectionInterface.php b/vendor/ramsey/collection/src/CollectionInterface.php index c865fa9f5..dfef6ca86 100644 --- a/vendor/ramsey/collection/src/CollectionInterface.php +++ b/vendor/ramsey/collection/src/CollectionInterface.php @@ -19,6 +19,9 @@ namespace Ramsey\Collection; * * Some collections allow duplicate elements and others do not. Some are ordered * and others unordered. + * + * @template T + * @template-extends ArrayInterface */ interface CollectionInterface extends ArrayInterface { @@ -52,18 +55,20 @@ interface CollectionInterface extends ArrayInterface * (rather than returning `false`). This preserves the invariant that a * collection always contains the specified element after this call returns. * - * @param mixed $element The element to add to the collection. + * @param T $element The element to add to the collection. * * @return bool `true` if this collection changed as a result of the call. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function add($element): bool; /** * Returns `true` if this collection contains the specified element. * - * @param mixed $element The element to check whether the collection contains. + * @param T $element The element to check whether the collection contains. * @param bool $strict Whether to perform a strict type check on the value. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function contains($element, bool $strict = true): bool; /** @@ -75,10 +80,11 @@ interface CollectionInterface extends ArrayInterface * Removes a single instance of the specified element from this collection, * if it is present. * - * @param mixed $element The element to remove from the collection. + * @param T $element The element to remove from the collection. * * @return bool `true` if an element was removed as a result of this call. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function remove($element): bool; /** @@ -86,21 +92,21 @@ interface CollectionInterface extends ArrayInterface * * @param string $propertyOrMethod The property or method name to filter by. * - * @return mixed[] + * @return list */ public function column(string $propertyOrMethod): array; /** * Returns the first item of the collection. * - * @return mixed + * @return T */ public function first(); /** * Returns the last item of the collection. * - * @return mixed + * @return T */ public function last(); @@ -114,7 +120,7 @@ interface CollectionInterface extends ArrayInterface * @param string $order The sort order for the resulting collection (one of * this interface's `SORT_*` constants). * - * @return CollectionInterface + * @return CollectionInterface */ public function sort(string $propertyOrMethod, string $order = self::SORT_ASC): self; @@ -128,9 +134,9 @@ interface CollectionInterface extends ArrayInterface * See the {@link http://php.net/manual/en/function.array-filter.php PHP array_filter() documentation} * for examples of how the `$callback` parameter works. * - * @param callable $callback A callable to use for filtering elements. + * @param callable(T):bool $callback A callable to use for filtering elements. * - * @return CollectionInterface + * @return CollectionInterface */ public function filter(callable $callback): self; @@ -141,25 +147,28 @@ interface CollectionInterface extends ArrayInterface * a new one. * * @param string $propertyOrMethod The property or method to evaluate. - * @param mixed $value The value to match. + * @param mixed $value The value to match. * - * @return CollectionInterface + * @return CollectionInterface */ public function where(string $propertyOrMethod, $value): self; /** * Apply a given callback method on each item of the collection. * - * This will always leave the original collection untouched and will return - * a new one. + * This will always leave the original collection untouched. The new + * collection is created by mapping the callback to each item of the + * original collection. * * See the {@link http://php.net/manual/en/function.array-map.php PHP array_map() documentation} * for examples of how the `$callback` parameter works. * - * @param callable $callback A callable to apply to each item of the - * collection. + * @param callable(T):TCallbackReturn $callback A callable to apply to each + * item of the collection. * - * @return CollectionInterface + * @return CollectionInterface + * + * @template TCallbackReturn */ public function map(callable $callback): self; @@ -167,10 +176,10 @@ interface CollectionInterface extends ArrayInterface * Create a new collection with divergent items between current and given * collection. * - * @param CollectionInterface $other The collection to check for divergent + * @param CollectionInterface $other The collection to check for divergent * items. * - * @return CollectionInterface + * @return CollectionInterface */ public function diff(CollectionInterface $other): self; @@ -178,19 +187,19 @@ interface CollectionInterface extends ArrayInterface * Create a new collection with intersecting item between current and given * collection. * - * @param CollectionInterface $other The collection to check for + * @param CollectionInterface $other The collection to check for * intersecting items. * - * @return CollectionInterface + * @return CollectionInterface */ public function intersect(CollectionInterface $other): self; /** * Merge current items and items of given collections into a new one. * - * @param CollectionInterface ...$collections The collections to merge. + * @param CollectionInterface ...$collections The collections to merge. * - * @return CollectionInterface + * @return CollectionInterface */ public function merge(CollectionInterface ...$collections): self; } diff --git a/vendor/ramsey/collection/src/DoubleEndedQueue.php b/vendor/ramsey/collection/src/DoubleEndedQueue.php index 4eb4dbeab..6ebdca5ad 100644 --- a/vendor/ramsey/collection/src/DoubleEndedQueue.php +++ b/vendor/ramsey/collection/src/DoubleEndedQueue.php @@ -20,6 +20,10 @@ use Ramsey\Collection\Exception\NoSuchElementException; /** * This class provides a basic implementation of `DoubleEndedQueueInterface`, to * minimize the effort required to implement this interface. + * + * @template T + * @template-extends Queue + * @template-implements DoubleEndedQueueInterface */ class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface { @@ -31,19 +35,7 @@ class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface private $tail = -1; /** - * Sets the given value to the given offset in the queue. - * - * Since arbitrary offsets may not be manipulated in a queue, this method - * serves only to fulfill the `ArrayAccess` interface requirements. It is - * invoked by other operations when adding values to the queue. - * - * @link http://php.net/manual/en/arrayaccess.offsetset.php ArrayAccess::offsetSet() - * - * @param mixed|null $offset The offset is ignored and is treated as `null`. - * @param mixed $value The value to set at the given offset. - * - * @throws InvalidArgumentException when the value does not match the - * specified type for this queue. + * @inheritDoc */ public function offsetSet($offset, $value): void { @@ -60,16 +52,7 @@ class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface } /** - * Ensures that the specified element is inserted at the front of this queue. - * - * @see self::offerFirst() - * - * @param mixed $element The element to add to this queue. - * - * @return bool `true` if this queue changed as a result of the call. - * - * @throws InvalidArgumentException when the value does not match the - * specified type for this queue. + * @inheritDoc */ public function addFirst($element): bool { @@ -88,16 +71,7 @@ class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface } /** - * Ensures that the specified element in inserted at the end of this queue. - * - * @see Queue::add() - * - * @param mixed $element The element to add to this queue. - * - * @return bool `true` if this queue changed as a result of the call. - * - * @throws InvalidArgumentException when the value does not match the - * specified type for this queue. + * @inheritDoc */ public function addLast($element): bool { @@ -105,13 +79,7 @@ class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface } /** - * Inserts the specified element at the front this queue. - * - * @see self::addFirst() - * - * @param mixed $element The element to add to this queue. - * - * @return bool `true` if the element was added to this queue, else `false`. + * @inheritDoc */ public function offerFirst($element): bool { @@ -123,14 +91,7 @@ class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface } /** - * Inserts the specified element at the end this queue. - * - * @see self::addLast() - * @see Queue::offer() - * - * @param mixed $element The element to add to this queue. - * - * @return bool `true` if the element was added to this queue, else `false`. + * @inheritDoc */ public function offerLast($element): bool { @@ -138,17 +99,7 @@ class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface } /** - * Retrieves and removes the head of this queue. - * - * This method differs from `pollFirst()` only in that it throws an - * exception if this queue is empty. - * - * @see self::pollFirst() - * @see Queue::remove() - * - * @return mixed the head of this queue. - * - * @throws NoSuchElementException if this queue is empty. + * @inheritDoc */ public function removeFirst() { @@ -156,38 +107,21 @@ class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface } /** - * Retrieves and removes the tail of this queue. - * - * This method differs from `pollLast()` only in that it throws an exception - * if this queue is empty. - * - * @see self::pollLast() - * - * @return mixed the tail of this queue. - * - * @throws NoSuchElementException if this queue is empty. + * @inheritDoc */ public function removeLast() { - if ($this->count() === 0) { + $tail = $this->pollLast(); + + if ($tail === null) { throw new NoSuchElementException('Can\'t return element from Queue. Queue is empty.'); } - $tail = $this[$this->tail]; - - unset($this[$this->tail]); - $this->tail--; - return $tail; } /** - * Retrieves and removes the head of this queue, or returns `null` if this - * queue is empty. - * - * @see self::removeFirst() - * - * @return mixed|null the head of this queue, or `null` if this queue is empty. + * @inheritDoc */ public function pollFirst() { @@ -195,12 +129,7 @@ class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface } /** - * Retrieves and removes the tail of this queue, or returns `null` if this - * queue is empty. - * - * @see self::removeLast() - * - * @return mixed|null the tail of this queue, or `null` if this queue is empty. + * @inheritDoc */ public function pollLast() { @@ -217,17 +146,7 @@ class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface } /** - * Retrieves, but does not remove, the head of this queue. - * - * This method differs from `peekFirst()` only in that it throws an - * exception if this queue is empty. - * - * @see self::peekFirst() - * @see Queue::element() - * - * @return mixed the head of this queue. - * - * @throws NoSuchElementException if this queue is empty. + * @inheritDoc */ public function firstElement() { @@ -235,16 +154,7 @@ class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface } /** - * Retrieves, but does not remove, the tail of this queue. - * - * This method differs from `peekLast()` only in that it throws an exception - * if this queue is empty. - * - * @see self::peekLast() - * - * @return mixed the tail of this queue. - * - * @throws NoSuchElementException if this queue is empty. + * @inheritDoc */ public function lastElement() { @@ -256,13 +166,7 @@ class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface } /** - * Retrieves, but does not remove, the head of this queue, or returns `null` - * if this queue is empty. - * - * @see self::firstElement() - * @see Queue::peek() - * - * @return mixed|null the head of this queue, or `null` if this queue is empty. + * @inheritDoc */ public function peekFirst() { @@ -270,12 +174,7 @@ class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface } /** - * Retrieves, but does not remove, the tail of this queue, or returns `null` - * if this queue is empty. - * - * @see self::lastElement() - * - * @return mixed|null the tail of this queue, or `null` if this queue is empty + * @inheritDoc */ public function peekLast() { diff --git a/vendor/ramsey/collection/src/DoubleEndedQueueInterface.php b/vendor/ramsey/collection/src/DoubleEndedQueueInterface.php index 6b23cf553..67aae5e2e 100644 --- a/vendor/ramsey/collection/src/DoubleEndedQueueInterface.php +++ b/vendor/ramsey/collection/src/DoubleEndedQueueInterface.php @@ -158,6 +158,9 @@ use Ramsey\Collection\Exception\NoSuchElementException; * ability to insert nulls. This is so because `null` is used as a special * return value by various methods to indicated that the double-ended queue is * empty. + * + * @template T + * @template-extends QueueInterface */ interface DoubleEndedQueueInterface extends QueueInterface { @@ -168,7 +171,7 @@ interface DoubleEndedQueueInterface extends QueueInterface * When using a capacity-restricted double-ended queue, it is generally * preferable to use the `offerFirst()` method. * - * @param mixed $element The element to add to the front of this queue. + * @param T $element The element to add to the front of this queue. * * @return bool `true` if this queue changed as a result of the call. * @@ -177,6 +180,7 @@ interface DoubleEndedQueueInterface extends QueueInterface * Implementations should use a more-specific exception that extends * `\RuntimeException`. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function addFirst($element): bool; /** @@ -188,7 +192,7 @@ interface DoubleEndedQueueInterface extends QueueInterface * * This method is equivalent to `add()`. * - * @param mixed $element The element to add to the end of this queue. + * @param T $element The element to add to the end of this queue. * * @return bool `true` if this queue changed as a result of the call. * @@ -197,6 +201,7 @@ interface DoubleEndedQueueInterface extends QueueInterface * Implementations should use a more-specific exception that extends * `\RuntimeException`. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function addLast($element): bool; /** @@ -207,10 +212,11 @@ interface DoubleEndedQueueInterface extends QueueInterface * preferable to `addFirst()`, which can fail to insert an element only by * throwing an exception. * - * @param mixed $element The element to add to the front of this queue. + * @param T $element The element to add to the front of this queue. * * @return bool `true` if the element was added to this queue, else `false`. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function offerFirst($element): bool; /** @@ -221,10 +227,11 @@ interface DoubleEndedQueueInterface extends QueueInterface * preferable to `addLast()` which can fail to insert an element only by * throwing an exception. * - * @param mixed $element The element to add to the end of this queue. + * @param T $element The element to add to the end of this queue. * * @return bool `true` if the element was added to this queue, else `false`. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function offerLast($element): bool; /** @@ -233,7 +240,7 @@ interface DoubleEndedQueueInterface extends QueueInterface * This method differs from `pollFirst()` only in that it throws an * exception if this queue is empty. * - * @return mixed the first element in this queue. + * @return T the first element in this queue. * * @throws NoSuchElementException if this queue is empty. */ @@ -245,7 +252,7 @@ interface DoubleEndedQueueInterface extends QueueInterface * This method differs from `pollLast()` only in that it throws an exception * if this queue is empty. * - * @return mixed the last element in this queue. + * @return T the last element in this queue. * * @throws NoSuchElementException if this queue is empty. */ @@ -255,7 +262,7 @@ interface DoubleEndedQueueInterface extends QueueInterface * Retrieves and removes the head of this queue, or returns `null` if this * queue is empty. * - * @return mixed|null the head of this queue, or `null` if this queue is empty. + * @return T|null the head of this queue, or `null` if this queue is empty. */ public function pollFirst(); @@ -263,7 +270,7 @@ interface DoubleEndedQueueInterface extends QueueInterface * Retrieves and removes the tail of this queue, or returns `null` if this * queue is empty. * - * @return mixed|null the tail of this queue, or `null` if this queue is empty. + * @return T|null the tail of this queue, or `null` if this queue is empty. */ public function pollLast(); @@ -273,7 +280,7 @@ interface DoubleEndedQueueInterface extends QueueInterface * This method differs from `peekFirst()` only in that it throws an * exception if this queue is empty. * - * @return mixed the head of this queue. + * @return T the head of this queue. * * @throws NoSuchElementException if this queue is empty. */ @@ -285,7 +292,7 @@ interface DoubleEndedQueueInterface extends QueueInterface * This method differs from `peekLast()` only in that it throws an exception * if this queue is empty. * - * @return mixed the tail of this queue. + * @return T the tail of this queue. * * @throws NoSuchElementException if this queue is empty. */ @@ -295,7 +302,7 @@ interface DoubleEndedQueueInterface extends QueueInterface * Retrieves, but does not remove, the head of this queue, or returns `null` * if this queue is empty. * - * @return mixed|null the head of this queue, or `null` if this queue is empty. + * @return T|null the head of this queue, or `null` if this queue is empty. */ public function peekFirst(); @@ -303,7 +310,7 @@ interface DoubleEndedQueueInterface extends QueueInterface * Retrieves, but does not remove, the tail of this queue, or returns `null` * if this queue is empty. * - * @return mixed|null the tail of this queue, or `null` if this queue is empty. + * @return T|null the tail of this queue, or `null` if this queue is empty. */ public function peekLast(); } diff --git a/vendor/ramsey/collection/src/GenericArray.php b/vendor/ramsey/collection/src/GenericArray.php index 2f9ab7677..9b95df387 100644 --- a/vendor/ramsey/collection/src/GenericArray.php +++ b/vendor/ramsey/collection/src/GenericArray.php @@ -16,6 +16,8 @@ namespace Ramsey\Collection; /** * `GenericArray` represents a standard array object. + * + * @template-extends AbstractArray */ class GenericArray extends AbstractArray { diff --git a/vendor/ramsey/collection/src/Map/AbstractMap.php b/vendor/ramsey/collection/src/Map/AbstractMap.php index 6b2e97a08..70f71160c 100644 --- a/vendor/ramsey/collection/src/Map/AbstractMap.php +++ b/vendor/ramsey/collection/src/Map/AbstractMap.php @@ -24,23 +24,22 @@ use function in_array; /** * This class provides a basic implementation of `MapInterface`, to minimize the * effort required to implement this interface. + * + * @template T + * @template-extends AbstractArray + * @template-implements MapInterface */ abstract class AbstractMap extends AbstractArray implements MapInterface { /** - * Sets the given value to the given offset in the map. - * - * @param mixed $offset The offset to set. - * @param mixed $value The value to set at the given offset. - * - * @throws InvalidArgumentException if the offset provided is `null`. + * @inheritDoc */ public function offsetSet($offset, $value): void { if ($offset === null) { throw new InvalidArgumentException( 'Map elements are key/value pairs; a key must be provided for ' - . 'value ' . $value + . 'value ' . var_export($value, true) ); } @@ -48,9 +47,7 @@ abstract class AbstractMap extends AbstractArray implements MapInterface } /** - * Returns `true` if this map contains a mapping for the specified key. - * - * @param mixed $key The key to check in the map. + * @inheritDoc */ public function containsKey($key): bool { @@ -58,11 +55,7 @@ abstract class AbstractMap extends AbstractArray implements MapInterface } /** - * Returns `true` if this map maps one or more keys to the specified value. - * - * This performs a strict type check on the value. - * - * @param mixed $value The value to check in the map. + * @inheritDoc */ public function containsValue($value): bool { @@ -70,9 +63,7 @@ abstract class AbstractMap extends AbstractArray implements MapInterface } /** - * Return an array of the keys contained in this map. - * - * @return mixed[] + * @inheritDoc */ public function keys(): array { @@ -80,14 +71,7 @@ abstract class AbstractMap extends AbstractArray implements MapInterface } /** - * Returns the value to which the specified key is mapped, `null` if this - * map contains no mapping for the key, or (optionally) `$defaultValue` if - * this map contains no mapping for the key. - * - * @param mixed $key The key to return from the map. - * @param mixed $defaultValue The default value to use if `$key` is not found. - * - * @return mixed|null the value or `null` if the key could not be found. + * @inheritDoc */ public function get($key, $defaultValue = null) { @@ -99,16 +83,7 @@ abstract class AbstractMap extends AbstractArray implements MapInterface } /** - * Associates the specified value with the specified key in this map. - * - * If the map previously contained a mapping for the key, the old value is - * replaced by the specified value. - * - * @param mixed $key The key to put or replace in the map. - * @param mixed $value The value to store at `$key`. - * - * @return mixed|null the previous value associated with key, or `null` if - * there was no mapping for `$key`. + * @inheritDoc */ public function put($key, $value) { @@ -119,17 +94,7 @@ abstract class AbstractMap extends AbstractArray implements MapInterface } /** - * Associates the specified value with the specified key in this map only if - * it is not already set. - * - * If there is already a value associated with `$key`, this returns that - * value without replacing it. - * - * @param mixed $key The key to put in the map. - * @param mixed $value The value to store at `$key`. - * - * @return mixed|null the previous value associated with key, or `null` if - * there was no mapping for `$key`. + * @inheritDoc */ public function putIfAbsent($key, $value) { @@ -143,12 +108,7 @@ abstract class AbstractMap extends AbstractArray implements MapInterface } /** - * Removes the mapping for a key from this map if it is present. - * - * @param mixed $key The key to remove from the map. - * - * @return mixed|null the previous value associated with key, or `null` if - * there was no mapping for `$key`. + * @inheritDoc */ public function remove($key) { @@ -159,15 +119,7 @@ abstract class AbstractMap extends AbstractArray implements MapInterface } /** - * Removes the entry for the specified key only if it is currently mapped to - * the specified value. - * - * This performs a strict type check on the value. - * - * @param mixed $key The key to remove from the map. - * @param mixed $value The value to match. - * - * @return bool true if the value was removed. + * @inheritDoc */ public function removeIf($key, $value): bool { @@ -181,14 +133,7 @@ abstract class AbstractMap extends AbstractArray implements MapInterface } /** - * Replaces the entry for the specified key only if it is currently mapped - * to some value. - * - * @param mixed $key The key to replace. - * @param mixed $value The value to set at `$key`. - * - * @return mixed|null the previous value associated with key, or `null` if - * there was no mapping for `$key`. + * @inheritDoc */ public function replace($key, $value) { @@ -202,16 +147,7 @@ abstract class AbstractMap extends AbstractArray implements MapInterface } /** - * Replaces the entry for the specified key only if currently mapped to the - * specified value. - * - * This performs a strict type check on the value. - * - * @param mixed $key The key to remove from the map. - * @param mixed $oldValue The value to match. - * @param mixed $newValue The value to use as a replacement. - * - * @return bool true if the value was replaced. + * @inheritDoc */ public function replaceIf($key, $oldValue, $newValue): bool { diff --git a/vendor/ramsey/collection/src/Map/AbstractTypedMap.php b/vendor/ramsey/collection/src/Map/AbstractTypedMap.php index 80cec2e22..ff9f69177 100644 --- a/vendor/ramsey/collection/src/Map/AbstractTypedMap.php +++ b/vendor/ramsey/collection/src/Map/AbstractTypedMap.php @@ -21,6 +21,12 @@ use Ramsey\Collection\Tool\ValueToStringTrait; /** * This class provides a basic implementation of `TypedMapInterface`, to * minimize the effort required to implement this interface. + * + * @phpstan-ignore-next-line + * @template K as array-key + * @template T + * @template-extends AbstractMap + * @template-implements TypedMapInterface */ abstract class AbstractTypedMap extends AbstractMap implements TypedMapInterface { @@ -28,16 +34,22 @@ abstract class AbstractTypedMap extends AbstractMap implements TypedMapInterface use ValueToStringTrait; /** - * Sets the given value to the given offset in the map. + * @param K|null $offset + * @param T $value * - * @param mixed $offset The offset to set. - * @param mixed $value The value to set at the given offset. + * @inheritDoc * - * @throws InvalidArgumentException if the offset or value do not match the - * expected types. + * @psalm-suppress MoreSpecificImplementedParamType */ public function offsetSet($offset, $value): void { + if ($offset === null) { + throw new InvalidArgumentException( + 'Map elements are key/value pairs; a key must be provided for ' + . 'value ' . var_export($value, true) + ); + } + if ($this->checkType($this->getKeyType(), $offset) === false) { throw new InvalidArgumentException( 'Key must be of type ' . $this->getKeyType() . '; key is ' diff --git a/vendor/ramsey/collection/src/Map/AssociativeArrayMap.php b/vendor/ramsey/collection/src/Map/AssociativeArrayMap.php index f97e21728..3274dc9de 100644 --- a/vendor/ramsey/collection/src/Map/AssociativeArrayMap.php +++ b/vendor/ramsey/collection/src/Map/AssociativeArrayMap.php @@ -16,6 +16,9 @@ namespace Ramsey\Collection\Map; /** * `AssociativeArrayMap` represents a standard associative array object. + * + * @template T + * @template-extends AbstractMap */ class AssociativeArrayMap extends AbstractMap { diff --git a/vendor/ramsey/collection/src/Map/MapInterface.php b/vendor/ramsey/collection/src/Map/MapInterface.php index 500bdb2d0..04e52a238 100644 --- a/vendor/ramsey/collection/src/Map/MapInterface.php +++ b/vendor/ramsey/collection/src/Map/MapInterface.php @@ -20,13 +20,16 @@ use Ramsey\Collection\ArrayInterface; * An object that maps keys to values. * * A map cannot contain duplicate keys; each key can map to at most one value. + * + * @template T + * @template-extends ArrayInterface */ interface MapInterface extends ArrayInterface { /** * Returns `true` if this map contains a mapping for the specified key. * - * @param mixed $key The key to check in the map. + * @param array-key $key The key to check in the map. */ public function containsKey($key): bool; @@ -35,14 +38,15 @@ interface MapInterface extends ArrayInterface * * This performs a strict type check on the value. * - * @param mixed $value The value to check in the map. + * @param T $value The value to check in the map. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function containsValue($value): bool; /** * Return an array of the keys contained in this map. * - * @return mixed[] + * @return list */ public function keys(): array; @@ -51,11 +55,12 @@ interface MapInterface extends ArrayInterface * map contains no mapping for the key, or (optionally) `$defaultValue` if * this map contains no mapping for the key. * - * @param mixed $key The key to return from the map. - * @param mixed $defaultValue The default value to use if `$key` is not found. + * @param array-key $key The key to return from the map. + * @param T|null $defaultValue The default value to use if `$key` is not found. * - * @return mixed|null the value or `null` if the key could not be found. + * @return T|null the value or `null` if the key could not be found. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function get($key, $defaultValue = null); /** @@ -64,12 +69,13 @@ interface MapInterface extends ArrayInterface * If the map previously contained a mapping for the key, the old value is * replaced by the specified value. * - * @param mixed $key The key to put or replace in the map. - * @param mixed $value The value to store at `$key`. + * @param array-key $key The key to put or replace in the map. + * @param T $value The value to store at `$key`. * - * @return mixed|null the previous value associated with key, or `null` if + * @return T|null the previous value associated with key, or `null` if * there was no mapping for `$key`. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function put($key, $value); /** @@ -79,22 +85,24 @@ interface MapInterface extends ArrayInterface * If there is already a value associated with `$key`, this returns that * value without replacing it. * - * @param mixed $key The key to put in the map. - * @param mixed $value The value to store at `$key`. + * @param array-key $key The key to put in the map. + * @param T $value The value to store at `$key`. * - * @return mixed|null the previous value associated with key, or `null` if + * @return T|null the previous value associated with key, or `null` if * there was no mapping for `$key`. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function putIfAbsent($key, $value); /** * Removes the mapping for a key from this map if it is present. * - * @param mixed $key The key to remove from the map. + * @param array-key $key The key to remove from the map. * - * @return mixed|null the previous value associated with key, or `null` if + * @return T|null the previous value associated with key, or `null` if * there was no mapping for `$key`. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function remove($key); /** @@ -103,23 +111,25 @@ interface MapInterface extends ArrayInterface * * This performs a strict type check on the value. * - * @param mixed $key The key to remove from the map. - * @param mixed $value The value to match. + * @param array-key $key The key to remove from the map. + * @param T $value The value to match. * * @return bool true if the value was removed. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function removeIf($key, $value): bool; /** * Replaces the entry for the specified key only if it is currently mapped * to some value. * - * @param mixed $key The key to replace. - * @param mixed $value The value to set at `$key`. + * @param array-key $key The key to replace. + * @param T $value The value to set at `$key`. * - * @return mixed|null the previous value associated with key, or `null` if + * @return T|null the previous value associated with key, or `null` if * there was no mapping for `$key`. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function replace($key, $value); /** @@ -128,11 +138,12 @@ interface MapInterface extends ArrayInterface * * This performs a strict type check on the value. * - * @param mixed $key The key to remove from the map. - * @param mixed $oldValue The value to match. - * @param mixed $newValue The value to use as a replacement. + * @param array-key $key The key to remove from the map. + * @param T $oldValue The value to match. + * @param T $newValue The value to use as a replacement. * * @return bool true if the value was replaced. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function replaceIf($key, $oldValue, $newValue): bool; } diff --git a/vendor/ramsey/collection/src/Map/NamedParameterMap.php b/vendor/ramsey/collection/src/Map/NamedParameterMap.php index 7adfa0afd..ecc52f73a 100644 --- a/vendor/ramsey/collection/src/Map/NamedParameterMap.php +++ b/vendor/ramsey/collection/src/Map/NamedParameterMap.php @@ -25,6 +25,8 @@ use function is_int; /** * `NamedParameterMap` represents a mapping of values to a set of named keys * that may optionally be typed + * + * @template-extends AbstractMap */ class NamedParameterMap extends AbstractMap { @@ -34,15 +36,15 @@ class NamedParameterMap extends AbstractMap /** * Named parameters defined for this map. * - * @var array + * @var array */ protected $namedParameters; /** * Constructs a new `NamedParameterMap`. * - * @param array $namedParameters The named parameters defined for this map. - * @param mixed[] $data An initial set of data to set on this map. + * @param array $namedParameters The named parameters defined for this map. + * @param array $data An initial set of data to set on this map. */ public function __construct(array $namedParameters, array $data = []) { @@ -53,7 +55,7 @@ class NamedParameterMap extends AbstractMap /** * Returns named parameters set for this `NamedParameterMap`. * - * @return array + * @return array */ public function getNamedParameters(): array { @@ -61,17 +63,17 @@ class NamedParameterMap extends AbstractMap } /** - * Sets the given value to the given offset in the map. - * - * @param mixed $offset The offset to set. - * @param mixed $value The value to set at the given offset. - * - * @throws InvalidArgumentException if the offset provided is not a - * defined named parameter, or if the value is not of the type defined - * for the given named parameter. + * @inheritDoc */ public function offsetSet($offset, $value): void { + if ($offset === null) { + throw new InvalidArgumentException( + 'Map elements are key/value pairs; a key must be provided for ' + . 'value ' . var_export($value, true) + ); + } + if (!array_key_exists($offset, $this->namedParameters)) { throw new InvalidArgumentException( 'Attempting to set value for unconfigured parameter \'' @@ -94,9 +96,9 @@ class NamedParameterMap extends AbstractMap * Given an array of named parameters, constructs a proper mapping of * named parameters to types. * - * @param array $namedParameters The named parameters to filter. + * @param array $namedParameters The named parameters to filter. * - * @return array + * @return array */ protected function filterNamedParameters(array $namedParameters): array { @@ -105,11 +107,11 @@ class NamedParameterMap extends AbstractMap foreach ($namedParameters as $key => $value) { if (is_int($key)) { - $names[] = (string) $value; + $names[] = $value; $types[] = 'mixed'; } else { $names[] = $key; - $types[] = (string) $value; + $types[] = $value; } } diff --git a/vendor/ramsey/collection/src/Map/TypedMap.php b/vendor/ramsey/collection/src/Map/TypedMap.php index 84d075f80..752475fee 100644 --- a/vendor/ramsey/collection/src/Map/TypedMap.php +++ b/vendor/ramsey/collection/src/Map/TypedMap.php @@ -79,6 +79,11 @@ use Ramsey\Collection\Tool\TypeTrait; * } * } * ``` + * + * @phpstan-ignore-next-line + * @template K as array-key + * @template T + * @template-extends AbstractTypedMap */ class TypedMap extends AbstractTypedMap { @@ -97,7 +102,7 @@ class TypedMap extends AbstractTypedMap /** * The data type of values stored in this collection. * - * A map values's type is immutable once it is set. For this reason, this + * A map value's type is immutable once it is set. For this reason, this * property is set private. * * @var string data type of the map value. @@ -110,7 +115,7 @@ class TypedMap extends AbstractTypedMap * * @param string $keyType The data type of the map's keys. * @param string $valueType The data type of the map's values. - * @param mixed[] $data The initial data to set for this map. + * @param array $data The initial data to set for this map. */ public function __construct(string $keyType, string $valueType, array $data = []) { @@ -119,17 +124,11 @@ class TypedMap extends AbstractTypedMap parent::__construct($data); } - /** - * Return the type used on the key. - */ public function getKeyType(): string { return $this->keyType; } - /** - * Return the type forced on the values. - */ public function getValueType(): string { return $this->valueType; diff --git a/vendor/ramsey/collection/src/Map/TypedMapInterface.php b/vendor/ramsey/collection/src/Map/TypedMapInterface.php index 54c783695..51b6a81a2 100644 --- a/vendor/ramsey/collection/src/Map/TypedMapInterface.php +++ b/vendor/ramsey/collection/src/Map/TypedMapInterface.php @@ -17,6 +17,9 @@ namespace Ramsey\Collection\Map; /** * A `TypedMapInterface` represents a map of elements where key and value are * typed. + * + * @template T + * @template-extends MapInterface */ interface TypedMapInterface extends MapInterface { diff --git a/vendor/ramsey/collection/src/Queue.php b/vendor/ramsey/collection/src/Queue.php index 4f53ff5e6..4af2fdf76 100644 --- a/vendor/ramsey/collection/src/Queue.php +++ b/vendor/ramsey/collection/src/Queue.php @@ -22,6 +22,10 @@ use Ramsey\Collection\Tool\ValueToStringTrait; /** * This class provides a basic implementation of `QueueInterface`, to minimize * the effort required to implement this interface. + * + * @template T + * @template-extends AbstractArray + * @template-implements QueueInterface */ class Queue extends AbstractArray implements QueueInterface { @@ -50,7 +54,7 @@ class Queue extends AbstractArray implements QueueInterface * specified data. * * @param string $queueType The type (FQCN) associated with this queue. - * @param mixed[] $data The initial items to store in the collection. + * @param array $data The initial items to store in the collection. */ public function __construct(string $queueType, array $data = []) { @@ -59,19 +63,11 @@ class Queue extends AbstractArray implements QueueInterface } /** - * Sets the given value to the given offset in the queue. + * {@inheritDoc} * * Since arbitrary offsets may not be manipulated in a queue, this method * serves only to fulfill the `ArrayAccess` interface requirements. It is * invoked by other operations when adding values to the queue. - * - * @link http://php.net/manual/en/arrayaccess.offsetset.php ArrayAccess::offsetSet() - * - * @param mixed|null $offset The offset is ignored and is treated as `null`. - * @param mixed $value The value to set at the given offset. - * - * @throws InvalidArgumentException when the value does not match the - * specified type for this queue. */ public function offsetSet($offset, $value): void { @@ -86,19 +82,7 @@ class Queue extends AbstractArray implements QueueInterface } /** - * Ensures that this queue contains the specified element. - * - * This method differs from `offer()` only in that it throws an exception if - * it cannot add the element to the queue. - * - * @see self::offer() - * - * @param mixed $element The element to add to this queue. - * - * @return bool `true` if this queue changed as a result of the call. - * - * @throws InvalidArgumentException when the element does not match the - * specified type for this queue. + * @inheritDoc */ public function add($element): bool { @@ -108,39 +92,23 @@ class Queue extends AbstractArray implements QueueInterface } /** - * Retrieves, but does not remove, the head of this queue. - * - * This method differs from `peek()` only in that it throws an exception if - * this queue is empty. - * - * @see self::peek() - * - * @return mixed the head of this queue. - * - * @throws NoSuchElementException if this queue is empty. + * @inheritDoc */ public function element() { - if ($this->count() === 0) { + $element = $this->peek(); + + if ($element === null) { throw new NoSuchElementException( 'Can\'t return element from Queue. Queue is empty.' ); } - return $this[$this->index]; + return $element; } /** - * Inserts the specified element into this queue. - * - * This method differs from `add()` only in that it does not throw an - * exception if it cannot add the element to the queue. - * - * @see self::add() - * - * @param mixed $element The element to add to this queue. - * - * @return bool `true` if the element was added to this queue, else `false`. + * @inheritDoc */ public function offer($element): bool { @@ -152,12 +120,7 @@ class Queue extends AbstractArray implements QueueInterface } /** - * Retrieves, but does not remove, the head of this queue, or returns `null` - * if this queue is empty. - * - * @see self::element() - * - * @return mixed|null the head of this queue, or `null` if this queue is empty. + * @inheritDoc */ public function peek() { @@ -169,12 +132,7 @@ class Queue extends AbstractArray implements QueueInterface } /** - * Retrieves and removes the head of this queue, or returns `null` - * if this queue is empty. - * - * @see self::remove() - * - * @return mixed|null the head of this queue, or `null` if this queue is empty. + * @inheritDoc */ public function poll() { @@ -191,34 +149,19 @@ class Queue extends AbstractArray implements QueueInterface } /** - * Retrieves and removes the head of this queue. - * - * This method differs from `poll()` only in that it throws an exception if - * this queue is empty. - * - * @see self::poll() - * - * @return mixed the head of this queue. - * - * @throws NoSuchElementException if this queue is empty. + * @inheritDoc */ public function remove() { - if ($this->count() === 0) { + $head = $this->poll(); + + if ($head === null) { throw new NoSuchElementException('Can\'t return element from Queue. Queue is empty.'); } - $head = $this[$this->index]; - - unset($this[$this->index]); - $this->index++; - return $head; } - /** - * Returns the type associated with this queue. - */ public function getType(): string { return $this->queueType; diff --git a/vendor/ramsey/collection/src/QueueInterface.php b/vendor/ramsey/collection/src/QueueInterface.php index 6c7f2ac2c..7ebbb5d06 100644 --- a/vendor/ramsey/collection/src/QueueInterface.php +++ b/vendor/ramsey/collection/src/QueueInterface.php @@ -92,6 +92,9 @@ use Ramsey\Collection\Exception\NoSuchElementException; * Even in the implementations that permit it, `null` should not be inserted * into a queue, as `null` is also used as a special return value by the * `poll()` method to indicate that the queue contains no elements. + * + * @template T + * @template-extends ArrayInterface */ interface QueueInterface extends ArrayInterface { @@ -116,7 +119,7 @@ interface QueueInterface extends ArrayInterface * * @see self::offer() * - * @param mixed $element The element to add to this queue. + * @param T $element The element to add to this queue. * * @return bool `true` if this queue changed as a result of the call. * @@ -125,6 +128,7 @@ interface QueueInterface extends ArrayInterface * Implementations should use a more-specific exception that extends * `\RuntimeException`. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function add($element): bool; /** @@ -135,7 +139,7 @@ interface QueueInterface extends ArrayInterface * * @see self::peek() * - * @return mixed the head of this queue. + * @return T the head of this queue. * * @throws NoSuchElementException if this queue is empty. */ @@ -151,10 +155,11 @@ interface QueueInterface extends ArrayInterface * * @see self::add() * - * @param mixed $element The element to add to this queue. + * @param T $element The element to add to this queue. * * @return bool `true` if the element was added to this queue, else `false`. */ + // phpcs:ignore SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint public function offer($element): bool; /** @@ -163,7 +168,7 @@ interface QueueInterface extends ArrayInterface * * @see self::element() * - * @return mixed|null the head of this queue, or `null` if this queue is empty. + * @return T|null the head of this queue, or `null` if this queue is empty. */ public function peek(); @@ -173,7 +178,7 @@ interface QueueInterface extends ArrayInterface * * @see self::remove() * - * @return mixed|null the head of this queue, or `null` if this queue is empty. + * @return T|null the head of this queue, or `null` if this queue is empty. */ public function poll(); @@ -185,7 +190,7 @@ interface QueueInterface extends ArrayInterface * * @see self::poll() * - * @return mixed the head of this queue. + * @return T the head of this queue. * * @throws NoSuchElementException if this queue is empty. */ diff --git a/vendor/ramsey/collection/src/Set.php b/vendor/ramsey/collection/src/Set.php index 42fb66c36..ac1c5cbf0 100644 --- a/vendor/ramsey/collection/src/Set.php +++ b/vendor/ramsey/collection/src/Set.php @@ -34,6 +34,9 @@ namespace Ramsey\Collection; * $bar = new \My\Foo(); * $set->add($bar); // returns TRUE, $bar !== $foo * ``` + * + * @template T + * @template-extends AbstractSet */ class Set extends AbstractSet { @@ -51,7 +54,7 @@ class Set extends AbstractSet * specified data. * * @param string $setType The type (FQCN) associated with this set. - * @param mixed[] $data The initial items to store in the set. + * @param array $data The initial items to store in the set. */ public function __construct(string $setType, array $data = []) { @@ -59,9 +62,6 @@ class Set extends AbstractSet parent::__construct($data); } - /** - * Returns the type associated with this set. - */ public function getType(): string { return $this->setType; diff --git a/vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php b/vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php index 7bc4878db..f9be1be28 100644 --- a/vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php +++ b/vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php @@ -29,7 +29,7 @@ trait ValueExtractorTrait /** * Extracts the value of the given property or method from the object. * - * @param object $object The object to extract the value from. + * @param mixed $object The object to extract the value from. * @param string $propertyOrMethod The property or method for which the * value should be extracted. * @@ -37,8 +37,12 @@ trait ValueExtractorTrait * * @throws ValueExtractionException if the method or property is not defined. */ - protected function extractValue(object $object, string $propertyOrMethod) + protected function extractValue($object, string $propertyOrMethod) { + if (!is_object($object)) { + throw new ValueExtractionException('Unable to extract a value from a non-object'); + } + if (property_exists($object, $propertyOrMethod)) { return $object->$propertyOrMethod; } diff --git a/vendor/ramsey/collection/src/Tool/ValueToStringTrait.php b/vendor/ramsey/collection/src/Tool/ValueToStringTrait.php index 34a9a0a68..721ade002 100644 --- a/vendor/ramsey/collection/src/Tool/ValueToStringTrait.php +++ b/vendor/ramsey/collection/src/Tool/ValueToStringTrait.php @@ -71,7 +71,12 @@ trait ValueToStringTrait return '(' . get_resource_type($value) . ' resource #' . (int) $value . ')'; } - // after this line $value is an object since is not null, scalar, array or resource + // If we don't know what it is, use var_export(). + if (!is_object($value)) { + return '(' . var_export($value, true) . ')'; + } + + // From here, $value should be an object. // __toString() is implemented if (is_callable([$value, '__toString'])) { diff --git a/vendor/sabre/dav/.gitignore b/vendor/sabre/dav/.gitignore deleted file mode 100644 index f287cca1a..000000000 --- a/vendor/sabre/dav/.gitignore +++ /dev/null @@ -1,40 +0,0 @@ -# Unit tests -tests/temp -tests/.sabredav -tests/cov - -# Custom settings for tests -tests/config.user.php - -# PHPUnit test Cache -.phpunit.result.cache - -# ViM -*.swp - -# Composer -composer.lock -vendor - -# Composer binaries -bin/vobject -bin/generate_vcards -bin/phpdocmd - -# Assuming every .php file in the root is for testing -/*.php - -# Other testing stuff -/tmpdata -/data -/public - -# Build -build -build.properties - -# Docs -docs/api -docs/wikidocs - -.php_cs.cache diff --git a/vendor/sabre/dav/.travis.yml b/vendor/sabre/dav/.travis.yml index 95331ac0d..6214d80b3 100644 --- a/vendor/sabre/dav/.travis.yml +++ b/vendor/sabre/dav/.travis.yml @@ -27,7 +27,7 @@ matrix: include: - name: 'PHP8' dist: bionic - php: nightly + php: 8.0 env: - RUN_PHPCSFIXER="FALSE" - REPORT_COVERAGE="FALSE" diff --git a/vendor/sabre/dav/CHANGELOG.md b/vendor/sabre/dav/CHANGELOG.md deleted file mode 100644 index 9db36f927..000000000 --- a/vendor/sabre/dav/CHANGELOG.md +++ /dev/null @@ -1,2526 +0,0 @@ -ChangeLog -========= - -4.1.3 (2020-11-09) -------------------------- -* #1306: Return 409 when trying to PUT a file into a non-existent collection - -4.1.2 (2020-10-04) -------------------------- -* #1296: Add experimental support for PHP 8.0 - -4.1.1 (2020-07-13) -------------------------- -* Fix PHPdoc of Tree:move method -* Allow using custom SAPI implementations -* Include baseUri in lock responses - -4.1.0 (2020-03-20) -------------------------- -* Support PHP 7.4 -* Drop support for PHP 7.0 -* CalDAV: send MIME-Version header in scheduling emails - -4.0.3 (2020-01-10) -------------------------- -* DAV: Streaming PROPFIND server implementation -* DAVACL: Fix uppercase of NotAuthenticated class -* CalDAV: Return only calendar objects owned by principal itself -* CalDAV: Convert scheduling object data from resource to string -* Browser Plugin: Fix content type guessing if setBaseUri is set to a folder - - -4.0.2 (2019-10-18) -------------------------- -* Fix error with PHP 7.4 -* CardDAV: Fix content-type for Thunderbird - - -4.0.1 (2019-08-20) -------------------------- -* TemporaryFileFilterPlugin: Fix Strict Error -* CalDAV\Plugin: Fix null path - - -4.0.0 (2019-07-01) -------------------------- -* Lock: Support lock timeout value Infinity -* Lock: Hide lock token in lock discovery when not set -* BrowserPlugin: Show display name of nodes -* FSExt: Fix folder (file) move issue if rename fails -* IMipPlugin: Add sender name in invite mail headers -* IMipPlugin: Fix email subject and recipient -* Fix issues with empty content-type header -* Apply new code style -* Fix for litmus test suite - test case: props propfind_invalid2 -* Depend on sabre/xml 2.0.1 -* Depend on sabre/http 5.0 -* Now supports PHP 7.3 -* Now requires PHP 7. -* Using `strict_types` in every php file. -* #896: Using the [sabre/event][evnt] `WildcardEmitter`. This allows event - handlers to listen to events using a wildcard. -* #896: Event listeners that in the past listened to `beforeMethod` or `method` - no longer get called. They must listen to `beforeMethod:*` and `method:*` now. -* #322: Imap authentication backend. (@c0d3z3r0). -* #889: Support for selective property querying in CardDAV's addressbook-query. - (@DeepDiver1975). -* #982: Make sure that files that are siblings of directories, are reported - as files (@nickvergessen) - - -4.0.0-beta1 (2019-05-08) -------------------------- -* Lock: Support lock timeout value Infinity -* Lock: Hide lock token in lock discovery when not set -* BrowserPlugin: Show display name of nodes -* FSExt: Fix folder (file) move issue if rename fails -* IMipPlugin: Add sender name in invite mail headers -* IMipPlugin: Fix email subject and recipient - - -4.0.0-alpha5 (2018-10-15) -------------------------- -* Fix issues with empty content-type header - - -4.0.0-alpha4 (2018-10-12) -------------------------- -* Apply new code style -* Fix for litmus test suite - test case: props propfind_invalid2 -* Depend on sabre/xml 2.0.1 - - -4.0.0-alpha3 (2018-10-05) -------------------------- -* Fixes for PHP 7.3 -* Depend on sabre/http 5.0 - - -4.0.0-alpha2 (2018-09-27) -------------------------- -* Now supports PHP 7.3 - - -4.0.0-alpha1 (2018-06-05) -------------------------- - -* Now requires PHP 7. -* Using `strict_types` in every php file. -* #896: Using the [sabre/event][evnt] `WildcardEmitter`. This allows event - handlers to listen to events using a wildcard. -* #896: Event listeners that in the past listened to `beforeMethod` or `method` - no longer get called. They must listen to `beforeMethod:*` and `method:*` now. -* #322: Imap authentication backend. (@c0d3z3r0). -* #889: Support for selective property querying in CardDAV's addressbook-query. - (@DeepDiver1975). -* #982: Make sure that files that are siblings of directories, are reported - as files (@nickvergessen) - - -3.3.0-alpha1 (2018-06-04) -------------------------- - -* SimpleCollection can now take arrays and strings as argument for super - simple tree creation. -* Added `Sabre\DAV\Server::start()`. This replaces `::exec()`. `::exec()` - is now deprecated, but we're keeping it around for a year or two to make - the transition easier. -* `getChildren()` function in any collection may now return an iterator - instead of an array. This can result in memory savings for large - collections. -* `Tree::getChildren()` now returns an Iterator instead of an array. -* Added `$overrideName` to all `Sabre\DAV\FS` and `Sabre\DAV\FSExt` classes, - so users can specify under what name these nodes show up in the tree. -* #889 Added support for filtering vCard properties in the addressbook-query - REPORT (@DeepDiver1975). -* #918: Add a lot of sqlite indexes. This should speed up sqlite-based - installations quite a bit. -* #982: Make sure that files that are siblings of directories, are reported - as files (@nickvergessen) -* #1058: Don't open file resource on HEAD request (@icewind1991) -* #1031: Fix copyNode for case of file named 0 (@phil-davis) - - -3.2.3 (????-??-??) ------------------- - -* #982: Make sure that files that are siblings of directories, are reported - as files (@nickvergessen) - - -3.2.2 (2017-02-14) ------------------- - -* #943: Fix CardDAV XML reporting bug, which was affecting several CardDAV - clients. Bug was introduced in 3.2.1. -* The zip release ships with [sabre/vobject 4.1.2][vobj], - [sabre/http 4.2.2][http], [sabre/event 3.0.0][evnt], - [sabre/uri 1.2.0][uri] and [sabre/xml 1.5.0][xml]. - - -3.2.1 (2017-01-28) ------------------- - -* #877: Fix for syncing large calendars when using the Sqlite PDO backend. - (@theseer). -* #889 Added support for filtering vCard properties in the addressbook-query - REPORT (@DeepDiver1975). -* The zip release ships with [sabre/vobject 4.1.2][vobj], - [sabre/http 4.2.2][http], [sabre/event 3.0.0][evnt], - [sabre/uri 1.2.0][uri] and [sabre/xml 1.5.0][xml]. - - -3.2.0 (2016-06-27) ------------------- - -* The default ACL rules allow an unauthenticated user to read information - about nodes that don't have their own ACL defined. This was a security - problem. -* The zip release ships with [sabre/vobject 4.1.0][vobj], - [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt], - [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.2][xml]. - - -3.2.0-beta1 (2016-05-20) ------------------------- - -* #833: Calendars throw exceptions when the sharing plugin is not enabled. -* #834: Return vCards exactly as they were stored if we don't need to convert - in between versions. -* The zip release ships with [sabre/vobject 4.1.0][vobj], - [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt], - [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.1][xml]. - - -3.2.0-alpha1 (2016-05-09) -------------------------- - -* Database changes for CalDAV. If you are using the CalDAV PDO backends, you - must migrate. Run `./bin/migrateto32.php` for more info. -* Support for WebDAV Resource Sharing, an upcoming standard. -* Added support for sharing in the CalDAV PDO backend! Users can now invite - others to their calendar and give them read/read-write access! -* #397: Support for PSR-3. You can now log exceptions with your favourite - psr3-compatible logging tool. -* #825: Actual proper, tested support for PostgreSQL. We require version 9.5. -* Removed database migration script for sabre/dav 1.7. To update from that - version you now first need to update to sabre/dav 3.1. -* Removed deprecated function: `Sabre\DAV\Auth\Plugin::getCurrentUser()`. -* #774: Fixes for getting free disk space on Windows. -* #803: Major changes in the sharing API. If you were using an old sabre/dav - sharing api, head to the website for more detailed migration notes. -* #657: Support for optional auth using `{DAV:}unauthorized` and `{DAV:}all` - privileges. This allows you to assign a privilege to a resource, allowing - non-authenticated users to access it. For instance, this could allow you - to create a public read-only collection. -* #812 #814: ICS/VCF exporter now includes a more useful filename in its - `Content-Disposition` header. (@Xenopathic). -* #801: BC break: If you were using the `Href` object before, it's behavior - now changed a bit, and `LocalHref` was added to replace the old, default - behavior of `Href`. See the migration doc for more info. -* Removed `Sabre\DAVACL\Plugin::$allowAccessToNodesWithoutACL` setting. - Instead, you can provide a set of default ACL rules with - `Sabre\DAVACL\Plugin::setDefaultAcl()`. -* Introduced `Sabre\DAVACL\ACLTrait` which contains a default implementation - of `Sabre\DAV\IACL` with some sane defaults. We're using this trait all over - the place now, reducing the amount of boilerplate. -* Plugins can now control the "Supported Privilege Set". -* Added Sharing, ICSExport and VCFExport plugins to `groupwareserver.php` - example. -* The `{DAV:}all` privilege is now no longer abstract, so it can be assigned - directly. We're using the `{DAV:}all` privilege now in a lot of cases where - we before assigned both `{DAV:}read` and `{DAV:}write`. -* Resources that are not collections no longer support the `{DAV:}bind` and - `{DAV:}unbind` privileges. -* Corrected the CalDAV-scheduling related privileges. -* Doing an `UNLOCK` no longer requires the `{DAV:}write-content` privilege. -* Added a new `getPrincipalByUri` plugin event. Allowing plugins to request - quickly where a principal lives on a server. -* Renamed `phpunit.xml` to `phpunit.xml.dist` to make local modifications easy. -* Functionality from `IShareableCalendar` is merged into `ISharedCalendar`. -* #751: Fixed XML responses from failing `MKCOL` requests. -* #600: Support for `principal-match` ACL `REPORT`. -* #599: Support for `acl-principal-prop-set` ACL `REPORT`. -* #798: Added an index on `firstoccurence` field in MySQL CalDAV backend. This - should speed up common calendar-query requests. -* #759: DAV\Client is now able to actually correctly resolve relative urls. -* #671: We are no longer checking the `read-free-busy` privilege on individual - calendars during freebusy operations in the scheduling plugin. Instead, we - check the `schedule-query-freebusy` privilege on the target users' inbox, - which validates access for the entire account, per the spec. -* The zip release ships with [sabre/vobject 4.1.0][vobj], - [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt], - [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.1][xml]. - - -3.1.5 (2018-10-19) ------------------- - -* Fixed: Creating a new calendar on some MySQL configurations caused an error. -* #889 Added support for filtering vCard properties in the addressbook-query - REPORT (@DeepDiver1975). - - - -3.1.4 (2016-05-28) ------------------- - -* #834: Backport from `master`: Return vCards exactly as they were stored if - we don't need to convert in between versions. This should speed up many - large addressbook syncs sometimes up to 50%. -* The zip release ships with [sabre/vobject 4.1.0][vobj], - [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt], - [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.2][xml]. - - -3.1.3 (2016-04-06) ------------------- - -* Set minimum libxml version to 2.7.0 in `composer.json`. -* #805: It wasn't possible to create calendars that hold events, journals and - todos using MySQL, because the `components` column was 1 byte too small. -* The zip release ships with [sabre/vobject 4.1.0][vobj], - [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt], - [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.1][xml]. - - -3.1.2 (2016-03-12) ------------------- - -* #784: Sync logs for address books were not correctly cleaned up after - deleting them. -* #787: Cannot use non-seekable stream-wrappers with range requests. -* Faster XML parsing and generating due to sabre/xml update. -* #793: The Sqlite schema is now more strict and more similar to the MySQL - schema. This solves a problem within Baikal. -* The zip release ships with [sabre/vobject 4.0.3][vobj], - [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt], - [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.1][xml]. - - -3.1.1 (2016-01-25) ------------------- - -* #755: The brower plugin and some operations would break when scheduling and - delegation would both be enabled. -* #757: A bunch of unittest improvements (@jakobsack). -* The zip release ships with [sabre/vobject 4.0.2][vobj], - [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.3.0][xml]. - - -3.1.0 (2016-01-06) ------------------- - -* Better error message when the browser plugin is not enabled. -* Added a super minimal server example. -* #730: Switched all mysql tables to `utf8mb4` character set, allowing you to - use emoji in some tables where you couldn't before. -* #710: Provide an Auth backend that acts as a helper for people implementing - OAuth2 Bearer token. (@fkooman). -* #729: Not all calls to `Sabre\DAV\Tree::getChildren()` were properly cached. -* #727: Added another workaround to make CalDAV work for Windows 10 clients. -* #742: Fixes to make sure that vobject 4 is correctly supported. -* #726: Better error reporting in `Client::propPatch`. We're now throwing - exceptions. -* #608: When a HTTP error is triggered during `Client:propFind`, we're now - throwing `Sabre\HTTP\ClientHttpException` instead of `Sabre\DAV\Exception`. - This new exception contains a LOT more information about the problem. -* #721: Events are now handled in the correct order for `COPY` requests. - Before this subtle bugs could appear that could cause data-loss. -* #747: Now throwing exceptions and setting the HTTP status to 500 in subtle - cases where no other plugin set a correct HTTP status. -* #686: Corrected PDO principal backend's findByURI for email addresses that - don't match the exact capitalization. -* #512: The client now has it's own `User-Agent`. -* #720: Some browser improvements. -* The zip release ships with [sabre/vobject 4.0.1][vobj], - [sabre/http 4.2.1][http], [sabre/event 3.0.0][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.3.0][xml]. - - -3.1.0-alpha2 (2015-09-05) -------------------------- - -* Massive calendars and addressbooks should see a big drop in peak memory - usage. -* Fixed a privilege bug in the availability system. -* #697: Added a "tableName" member to the PropertyStorage PDO backend. (@Frzk). -* #699: PostgreSQL fix for the Locks PDO backend. (@TCKnet) -* Removed the `simplefsserver.php` example file. It's not simple enough. -* #703: PropPatch in client is not correctly encoded. -* #709: Throw exception when running into empty - `supported-calendar-component-set`. -* #711: Don't trigger deserializers for empty elements in `{DAV:}prop`. This - fixes issues when using sabre/dav as a client. -* The zip release ships with [sabre/vobject 4.0.0-alpha2][vobj], - [sabre/http 4.1.0][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.2.0][xml]. - - -3.1.0-alpha1 (2015-07-19) -------------------------- - -* Now requires PHP 5.5 -* Upgraded to vobject 4, which is a lot faster. -* Support for PHP 7. -* #690: Support for `calendar-availability`, draft 05. - [reference][calendar-availability]. -* #691: Workaround for broken Windows Phone client. -* The zip release ships with [sabre/vobject 4.0.0-alpha1][vobj], - [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.1.0][xml]. - - -3.0.10 (2016-??-??) ------------------- - -* #889 Added support for filtering vCard properties in the addressbook-query - REPORT (@DeepDiver1975). - - -3.0.9 (2016-04-06) ------------------- - -* Set minimum libxml version to 2.7.0 in `composer.json`. -* #727: Added another workaround to make CalDAV work for Windows 10 clients. -* #805: It wasn't possible to create calendars that hold events, journals and - todos using MySQL, because the `components` column was 1 byte too small. -* The zip release ships with [sabre/vobject 3.5.1][vobj], - [sabre/http 4.2.1][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.1][xml]. - - -3.0.8 (2016-03-12) ------------------- - -* #784: Sync logs for address books were not correctly cleaned up after - deleting them. -* #787: Cannot use non-seekable stream-wrappers with range requests. -* Faster XML parsing and generating due to sabre/xml update. -* The zip release ships with [sabre/vobject 3.5.0][vobj], - [sabre/http 4.2.1][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.1.0][uri] and [sabre/xml 1.4.1][xml]. - - -3.0.7 (2016-01-12) ------------------- - -* #752: PHP 7 support for 3.0 branch. (@DeepDiver1975) -* The zip release ships with [sabre/vobject 3.5.0][vobj], - [sabre/http 4.2.1][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.3.0][xml]. - - -3.0.6 (2016-01-04) ------------------- - -* #730: Switched all mysql tables to `utf8mb4` character set, allowing you to - use emoji in some tables where you couldn't before. -* #729: Not all calls to `Sabre\DAV\Tree::getChildren()` were properly cached. -* #734: Return `418 I'm a Teapot` when generating a multistatus response that - has resources with no returned properties. -* #740: Bugs in `migrate20.php` script. -* The zip release ships with [sabre/vobject 3.4.8][vobj], - [sabre/http 4.1.0][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.3.0][xml]. - - -3.0.5 (2015-09-15) ------------------- - -* #704: Fixed broken uri encoding in multistatus responses. This affected - at least CyberDuck, but probably also others. -* The zip release ships with [sabre/vobject 3.4.7][vobj], -* The zip release ships with [sabre/vobject 3.4.7][vobj], - [sabre/http 4.1.0][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.2.0][xml]. - - -3.0.4 (2015-09-06) ------------------- - -* #703: PropPatch in client is not correctly encoded. -* #709: Throw exception when running into empty - `supported-calendar-component-set`. -* #711: Don't trigger deserializers for empty elements in `{DAV:}prop`. This - fixes issues when using sabre/dav as a client. -* #705: A `MOVE` request that gets prevented from deleting the source resource - will still remove the target resource. Now all events are triggered before - any destructive operations. -* The zip release ships with [sabre/vobject 3.4.7][vobj], - [sabre/http 4.1.0][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.2.0][xml]. - - -3.0.3 (2015-08-06) ------------------- - -* #700: Digest Auth fails on `HEAD` requests. -* Fixed example files to no longer use now-deprecated realm argument. -* The zip release ships with [sabre/vobject 3.4.6][vobj], - [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.1.0][xml]. - - -3.0.2 (2015-07-21) ------------------- - -* #657: Migration script would break when coming a cross an iCalendar object - with no UID. -* #691: Workaround for broken Windows Phone client. -* Fixed a whole bunch of incorrect php docblocks. -* The zip release ships with [sabre/vobject 3.4.5][vobj], - [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.1.0][xml]. - - -3.0.1 (2015-07-02) ------------------- - -* #674: Postgres sql file fixes. (@davesouthey) -* #677: Resources with the name '0' would not get retrieved when using - `Depth: infinity` in a `PROPFIND` request. -* #680: Fix 'autoprefixing' of dead `{DAV:}href` properties. -* #675: NTLM support in DAV\Client. (@k42b3) -* The zip release ships with [sabre/vobject 3.4.5][vobj], - [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.1.0][xml]. - - -3.0.0 (2015-06-02) ------------------- - -* No changes since last beta. -* The zip release ships with [sabre/vobject 3.4.5][vobj], - [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.0.0][xml]. - - -3.0.0-beta3 (2015-05-29) ------------------------- - -* Fixed deserializing href properties with no value. -* Fixed deserializing `{DAV:}propstat` without a `{DAV:}prop`. -* #668: More information about vcf-export-plugin in browser plugin. -* #669: Add export button to browser plugin for address books. (@mgee) -* #670: multiget report hrefs were not decoded. -* The zip release ships with [sabre/vobject 3.4.4][vobj], - [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.0.0][xml]. - - -3.0.0-beta2 (2015-05-27) ------------------------- - -* A node's properties should not overwrite properties that were already set. -* Some uris were not correctly encoded in notifications. -* The zip release ships with [sabre/vobject 3.4.4][vobj], - [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.0.0][xml]. - - -3.0.0-beta1 (2015-05-25) ------------------------- - -* `migrate22.php` is now called `migrate30.php`. -* Using php-cs-fixer for automated coding standards enforcement and fixing. -* #660: principals could break html output. -* #662: Fixed several bugs in the `share` request parser. -* #665: Fix a bug in serialization of complex properties in the proppatch - request in the client. -* #666: expand-property report did not correctly prepend the base uri when - generating uris, this caused delegation to break. -* #659: Don't throw errors when when etag-related checks are done on - collections. -* Fully supporting the updated `Prefer` header syntax, as defined in - [rfc7240][rfc7240]. -* The zip release ships with [sabre/vobject 3.4.3][vobj], - [sabre/http 4.0.0][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 1.0.0][xml]. - - -3.0.0-alpha1 (2015-05-19) -------------------------- - -* It's now possible to get all property information from files using the - browser plugin. -* Browser plugin will now show a 'calendar export' button when the - ics-export plugin is enabled. -* Some nodes that by default showed the current time as their last - modification time, now no longer has a last modification time. -* CardDAV namespace was missing from default namespaceMap. -* #646: Properties can now control their own HTML output in the browser plugin. -* #646: Nicer HTML output for the `{DAV:}acl` property. -* Browser plugin no longer shows a few properties that take up a lot of space, - but are likely not really interesting for most users. -* #654: Added a collection, `Sabre\DAVACL\FS\HomeCollection` for automatically - creating a private home collection per-user. -* Changed all MySQL columns from `VARCHAR` to `VARBINARY` where possible. -* Improved older migration scripts a bit to allow easier testing. -* The zip release ships with [sabre/vobject 3.4.3][vobj], - [sabre/http 4.0.0-alpha3][http], [sabre/event 2.0.2][evnt], - [sabre/uri 1.0.1][uri] and [sabre/xml 0.4.3][xml]. - - -2.2.0-alpha4 (2015-04-13) -------------------------- - -* Complete rewrite of the XML system. We now use our own [sabre/xml][xml], - which has a much smarter XML Reader and Writer. -* BC Break: It's no longer possible to instantiate the Locks plugin without - a locks backend. I'm not sure why this ever made sense. -* Simplified the Locking system and fixed a bug related to if tokens checking - locks unrelated to the current request. -* `FSExt` Directory and File no longer do custom property storage. This - functionality is already covered pretty well by the `PropertyStorage` plugin, - so please switch. -* Renamed `Sabre\CardDAV\UserAddressBooks` to `Sabre\CardDAV\AddressBookHome` - to be more consistent with `CalendarHome` as well as the CardDAV - specification. -* `Sabre\DAV\IExtendedCollection` now receives a `Sabre\DAV\MkCol` object as - its second argument, and no longer receives seperate properties and - resourcetype arguments. -* `MKCOL` now integrates better with propertystorage plugins. -* #623: Remove need of temporary files when working with Range requests. - (@dratini0) -* The zip release ships with [sabre/vobject 3.4.2][vobj], - [sabre/http 4.0.0-alpha1][http], [sabre/event 2.0.1][evnt], - [sabre/uri 1.0.0][uri] and [sabre/xml 0.4.3][xml]. - - -2.2.0-alpha3 (2015-02-25) -------------------------- - -* Contains all the changes introduced between 2.1.2 and 2.1.3. -* The zip release ships with [sabre/vobject 3.4.2][vobj], - [sabre/http 4.0.0-alpha1][http], [sabre/event 2.0.1][evnt] and - [sabre/uri 1.0.0][uri]. - - -2.2.0-alpha2 (2015-01-09) -------------------------- - -* Renamed `Sabre\DAV\Auth\Backend\BackendInterface::requireAuth` to - `challenge`, which is a more correct and better sounding name. -* The zip release ships with [sabre/vobject 3.3.5][vobj], - [sabre/http 3.0.4][http], [sabre/event 2.0.1][evnt]. - - -2.2.0-alpha1 (2014-12-10) -------------------------- - -* The browser plugin now has a new page with information about your sabredav - server, and shows information about every plugin that's loaded in the - system. -* #191: The Authentication system can now support multiple authentication - backends. -* Removed: all `$tableName` arguments from every PDO backend. This was already - deprecated, but has now been fully removed. All of these have been replaced - with public properties. -* Deleted several classes that were already deprecated much earlier: - * `Sabre\CalDAV\CalendarRootNode` - * `Sabre\CalDAV\UserCalendars` - * `Sabre\DAV\Exception\FileNotFound` - * `Sabre\DAV\Locks\Backend\FS` - * `Sabre\DAV\PartialUpdate\IFile` - * `Sabre\DAV\URLUtil` -* Removed: `Sabre\DAV\Client::addTrustedCertificates` and - `Sabre\DAV\Client::setVerifyPeer`. -* Removed: `Sabre\DAV\Plugin::getPlugin()` can now no longer return plugins - based on its class name. -* Removed: `Sabre\DAVACL\Plugin::getPrincipalByEmail()`. -* #560: GuessContentType plugin will now set content-type to - `application/octet-stream` if a better content-type could not be determined. -* #568: Added a `componentType` argument to `ICSExportPlugin`, allowing you to - specifically fetch `VEVENT`, `VTODO` or `VJOURNAL`. -* #582: Authentication backend interface changed to be stateless. If you - implemented your own authentication backend, make sure you upgrade your class - to the latest API! -* #582: `Sabre\DAV\Auth\Plugin::getCurrentUser()` is now deprecated. Use - `Sabre\DAV\Auth\Plugin::getCurrentPrincipal()` instead. -* #193: Fix `Sabre\DAV\FSExt\Directory::getQuotaInfo()` on windows. - - -2.1.11 (2016-10-06) -------------------- - -* #805: It wasn't possible to create calendars that hold events, journals and - todos using MySQL, because the `components` column was 1 byte too small. -* The zip release ships with [sabre/vobject 3.5.3][vobj], - [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt]. - - -2.1.10 (2016-03-10) -------------------- - -* #784: Sync logs for address books were not correctly cleaned up after - deleting them. -* The zip release ships with [sabre/vobject 3.5.0][vobj], - [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt]. - - -2.1.9 (2016-01-25) ------------------- - -* #674: PHP7 support (@DeepDiver1975). -* The zip release ships with [sabre/vobject 3.5.0][vobj], - [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt]. - - -2.1.8 (2016-01-04) ------------------- - -* #729: Fixed a caching problem in the Tree object. -* #740: Bugs in `migrate20.php` script. -* The zip release ships with [sabre/vobject 3.4.8][vobj], - [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt]. - - -2.1.7 (2015-09-05) ------------------- - -* #705: A `MOVE` request that gets prevented from deleting the source resource - will still remove the target resource. Now all events are triggered before - any destructive operations. -* The zip release ships with [sabre/vobject 3.4.7][vobj], - [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt]. - - -2.1.6 (2015-07-21) ------------------- - -* #657: Migration script would break when coming a cross an iCalendar object - with no UID. -* #691: Workaround for broken Windows Phone client. -* The zip release ships with [sabre/vobject 3.4.5][vobj], - [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt]. - - -2.1.5 (2015-07-11) ------------------- - -* #677: Resources with the name '0' would not get retrieved when using - `Depth: infinity` in a `PROPFIND` request. -* The zip release ships with [sabre/vobject 3.4.5][vobj], - [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt]. - - -2.1.4 (2015-05-25) ------------------- - -* #651: Double-encoded path in the browser plugin. Should fix a few broken - links in some setups. -* #650: Correctly cleaning up change info after deleting calendars (@ErrOrnAmE). -* #658: Updating `schedule-calendar-default-URL` does not work well, so we're - disabling it until there's a better fix. -* The zip release ships with [sabre/vobject 3.4.3][vobj], - [sabre/http 3.0.5][http], and [sabre/event 2.0.2][evnt]. - - -2.1.3 (2015-02-25) ------------------- - -* #586: `SCHEDULE-STATUS` should not contain a reason-phrase. -* #539: Fixed a bug related to scheduling in shared calendars. -* #595: Support for calendar-timezone in iCalendar exports. -* #581: findByUri would send empty prefixes to the principal backend (@soydeedo) -* #611: Escaping a bit more HTML output in the browser plugin. (@LukasReschke) -* #610: Don't allow discovery of arbitrary files using `..` in the browser - plugin (@LukasReschke). -* Browser plugin now shows quota properties. -* #612: PropertyStorage didn't delete properties from nodes when a node's - parents get deleted. -* #581: Fixed problems related to finding attendee information during - scheduling. -* The zip release ships with [sabre/vobject 3.4.2][vobj], - [sabre/http 3.0.4][http], and [sabre/event 2.0.1][evnt]. - - -2.1.2 (2014-12-10) ------------------- - -* #566: Another issue related to the migration script, which would cause - scheduling to not work well for events that were already added before the - migration. -* #567: Doing freebusy requests on accounts that had 0 calendars would throw - a `E_NOTICE`. -* #572: `HEAD` requests trigger a PHP warning. -* #579: Browser plugin can throw exception for a few resourcetypes that didn't - have an icon defined. -* The zip release ships with [sabre/vobject 3.3.4][vobj], - [sabre/http 3.0.4][http], and [sabre/event 2.0.1][evnt]. - - -2.1.1 (2014-11-22) ------------------- - -* #561: IMip Plugin didn't strip mailto: from email addresses. -* #566: Migration process had 2 problems related to adding the `uid` field - to the `calendarobjects` table. -* The zip release ships with [sabre/vobject 3.3.4][vobj], - [sabre/http 3.0.2][http], and [sabre/event 2.0.1][evnt]. - - -2.1.0 (2014-11-19) ------------------- - -* #541: CalDAV PDO backend didn't respect overridden PDO table names. -* #550: Scheduling invites are no longer delivered into shared calendars. -* #554: `calendar-multiget` `REPORT` did not work on inbox items. -* #555: The `calendar-timezone` property is now respected for floating times - and all-day events in the `calendar-query`, `calendar-multiget` and - `free-busy-query` REPORTs. -* #555: The `calendar-timezone` property is also respected for scheduling - free-busy requests. -* #547: CalDAV system too aggressively 'corrects' incoming iCalendar data, and - as a result doesn't return an etag for common cases. -* The zip release ships with [sabre/vobject 3.3.4][vobj], - [sabre/http 3.0.2][http], and [sabre/event 2.0.1][evnt]. - - -2.1.0-alpha2 (2014-10-23) -------------------------- - -* Added: calendar-user-address-set to default principal search properties - list. This should fix iOS attendee autocomplete support. -* Changed: Moved all 'notifications' functionality from `Sabre\CalDAV\Plugin` - to a new plugin: `Sabre\CalDAV\Notifications\Plugin`. If you want to use - notifications-related functionality, just add this plugin. -* Changed: Accessing the caldav inbox, outbox or notification collection no - longer triggers getCalendarsForUser() on backends. -* #533: New invites are no longer delivered to taks-only calendars. -* #538: Added `calendarObjectChange` event. -* Scheduling speedups. -* #539: added `afterResponse` event. (@joserobleda) -* Deprecated: All the "tableName" constructor arguments for all the PDO - backends are now deprecated. They still work, but will be removed in the - next major sabredav version. Every argument that is now deprecated can now - be accessed as a public property on the respective backends. -* #529: Added getCalendarObjectByUID to PDO backend, speeding up scheduling - operations on large calendars. -* The zip release ships with [sabre/vobject 3.3.3][vobj], - [sabre/http 3.0.2][http], and [sabre/event 2.0.1][evnt]. - - -2.1.0-alpha1 (2014-09-23) -------------------------- - -* Added: Support for [rfc6638][rfc6638], also known as CalDAV Scheduling. -* Added: Automatically converting between vCard 3, 4 and jCard using the - `Accept:` header, in CardDAV reports, and automatically converting from - jCard to vCard upon `PUT`. It's important to note that your backends _may_ - now receive both vCard 3.0 and 4.0. -* Added: #444. Collections can now opt-in to support high-speed `MOVE`. -* Changed: PropertyStorage backends now have a `move` method. -* Added: `beforeMove`, and `afterMove` events. -* Changed: A few database changes for the CalDAV PDO backend. Make sure you - run `bin/migrate21.php` to upgrade your database schema. -* Changed: CalDAV backends have a new method: `getCalendarObjectByUID`. This - method MUST be implemented by all backends, but the `AbstractBackend` has a - simple default implementation for this. -* Changed: `Sabre\CalDAV\UserCalendars` has been renamed to - `Sabre\CalDAV\CalendarHome`. -* Changed: `Sabre\CalDAV\CalendarRootNode` has been renamed to - `Sabre\CalDAV\CalendarRoot`. -* Changed: The IMipHandler has been completely removed. With CalDAV scheduling - support, it is no longer needed. It's functionality has been replaced by - `Sabre\CalDAV\Schedule\IMipPlugin`, which can now send emails for clients - other than iCal. -* Removed: `Sabre\DAV\ObjectTree` and `Sabre\DAV\Tree\FileSystem`. All this - functionality has been merged into `Sabre\DAV\Tree`. -* Changed: PrincipalBackend now has a findByUri method. -* Changed: `PrincipalBackend::searchPrincipals` has a new optional `test` - argument. -* Added: Support for the `{http://calendarserver.org/ns/}email-address-set` - property. -* #460: PropertyStorage must move properties during `MOVE` requests. -* Changed: Restructured the zip distribution to be a little bit more lean - and consistent. -* #524: Full support for the `test="anyof"` attribute in principal-search - `REPORT`. -* #472: Always returning lock tokens in the lockdiscovery property. -* Directory entries in the Browser plugin are sorted by type and name. - (@aklomp) -* #486: It's now possible to return additional properties when an 'allprop' - PROPFIND request is being done. (@aklomp) -* Changed: Now return HTTP errors when an addressbook-query REPORT is done - on a uri that's not a vcard. This should help with debugging this common - mistake. -* Changed: `PUT` requests with a `Content-Range` header now emit a 400 status - instead of 501, as per RFC7231. -* Added: Browser plugin can now display the contents of the - `{DAV:}supported-privilege-set` property. -* Added: Now reporting `CALDAV:max-resource-size`, but we're not actively - restricting it yet. -* Changed: CalDAV plugin is now responsible for reporting - `CALDAV:supported-collation-set` and `CALDAV:supported-calendar-data` - properties. -* Added: Now reporting `CARDDAV:max-resource-size`, but we're not actively - restricting it yet. -* Added: Support for `CARDDAV:supported-collation-set`. -* Changed: CardDAV plugin is now responsible for reporting - `CARDDAV:supported-address-data`. This functionality has been removed from - the CardDAV PDO backend. -* When a REPORT is not supported, we now emit HTTP error 415, instead of 403. -* #348: `HEAD` requests now work wherever `GET` also works. -* Changed: Lower priority for the iMip plugins `schedule` event listener. -* Added: #523 Custom CalDAV backends can now mark any calendar as read-only. -* The zip release ships with [sabre/vobject 3.3.3][vobj], - [sabre/http 3.0.0][http], and [sabre/event 2.0.0][evnt]. - - -2.0.9 (2015-09-04) ------------------- - -* #705: A `MOVE` request that gets prevented from deleting the source resource - will still remove the target resource. Now all events are triggered before - any destructive operations. -* The zip release ships with [sabre/vobject 3.4.6][vobj], - [sabre/http 2.0.4][http], and [sabre/event 1.0.1][evnt]. - - - -2.0.8 (2015-07-11) ------------------- - -* #677: Resources with the name '0' would not get retrieved when using - `Depth: infinity` in a `PROPFIND` request. -* The zip release ships with [sabre/vobject 3.3.5][vobj], - [sabre/http 2.0.4][http], and [sabre/event 1.0.1][evnt]. - - -2.0.7 (2015-05-25) ------------------- - -* #650: Correctly cleaning up change info after deleting calendars (@ErrOrnAmE). -* The zip release ships with [sabre/vobject 3.3.4][vobj], - [sabre/http 2.0.4][http], and [sabre/event 1.0.1][evnt]. - - -2.0.6 (2014-12-10) ------------------- - -* Added `Sabre\CalDAV\CalendarRoot` as an alias for - `Sabre\CalDAV\CalendarRootNode`. The latter is going to be deprecated in 2.1, - so this makes it slightly easier to write code that works in both branches. -* #497: Making sure we're initializing the sync-token field with a value after - migration. -* The zip release ships with [sabre/vobject 3.3.4][vobj], - [sabre/http 2.0.4][http], and [sabre/event 1.0.1][evnt]. - - -2.0.5 (2014-10-14) ------------------- - -* #514: CalDAV PDO backend didn't work when overriding the 'calendar changes' - database table name. -* #515: 304 status code was not being sent when checking preconditions. -* The zip release ships with [sabre/vobject 3.3.3][vobj], - [sabre/http 2.0.4][http], and [sabre/event 1.0.1][evnt]. - - -2.0.4 (2014-08-27) ------------------- - -* #483: typo in calendars creation for PostgreSQL. -* #487: Locks are now automatically removed after a node has been deleted. -* #496: Improve CalDAV and CardDAV sync when there is no webdav-sync support. -* Added: Automatically mapping internal sync-tokens to getctag. -* The zip release ships with [sabre/vobject 3.3.1][vobj], - [sabre/http 2.0.4][http], and [sabre/event 1.0.1][evnt]. - - -2.0.3 (2014-07-14) ------------------- - -* #474: Fixed PropertyStorage `pathFilter()`. -* #476: CSP policy incorrect, causing stylesheets to not load in the browser - plugin. -* #475: Href properties in the browser plugin sometimes included a backslash. -* #478: `TooMuchMatches` exception never worked. This was fixed, and we also - took this opportunity to rename it to `TooManyMatches`. -* The zip release ships with [sabre/vobject 3.2.4][vobj], - [sabre/http 2.0.4][http], and [sabre/event 1.0.1][evnt]. - - -2.0.2 (2014-06-12) ------------------- - -* #470: Fixed compatibility with PHP < 5.4.14. -* #467: Fixed a problem in `examples/calendarserver.php`. -* #466: All the postgresql sample files have been updated. -* Fixed: An error would be thrown if a client did a propfind on a node the - user didn't have access to. -* Removed: Old and broken example code from the `examples/` directory. -* The zip release ships with [sabre/vobject 3.2.3][vobj], - [sabre/http 2.0.3][http], and [sabre/event 1.0.1][evnt]. - - -2.0.1 (2014-05-28) ------------------- - -* #459: PROPFIND requests on Files with no Depth header would return a fatal - error. -* #464: A PROPFIND allprops request should not return properties with status - 404. -* The zip release ships with [sabre/vobject 3.2.2][vobj], - [sabre/http 2.0.3][http], and [sabre/event 1.0.0][evnt]. - - -2.0.0 (2014-05-22) ------------------- - -* The zip release ships with [sabre/vobject 3.2.2][vobj], - [sabre/http 2.0.3][http], and [sabre/event 1.0.0][evnt]. -* Fixed: #456: Issue in sqlite migration script. -* Updated: MySQL database schema optimized by using more efficient column types. -* Cleaned up browser design. - - -2.0.0-beta1 (2014-05-15) -------------------------- - -* The zip release ships with [sabre/vobject 3.2.2][vobj], - [sabre/http 2.0.3][http], and [sabre/event 1.0.0][evnt]. -* BC Break: Property updating and fetching got refactored. Read the [migration - document][mi20] for more information. This allows for creation of a generic - property storage, and other property-related functionality that was not - possible before. -* BC Break: Removed `propertyUpdate`, `beforeGetProperties` and - `afterGetProperties` events. -* Fixed: #413: Memory optimizations for the CardDAV PDO backend. -* Updated: Brand new browser plugin with more debugging features and a design - that is slightly less painful. -* Added: Support for the `{DAV:}supported-method-set` property server-wide. -* Making it easier for implementors to override how the CardDAV addressbook - home is located. -* Fixed: Issue #422 Preconditions were not being set on PUT on non-existent - files. Not really a chance for data-loss, but incorrect nevertheless. -* Fixed: Issue #428: Etag check with `If:` fails if the target is a collection. -* Fixed: Issues #430, #431, #433: Locks plugin didn't not properly release - filesystem based locks. -* Fixed: #443. Support for creating new calendar subscriptions for OS X 10.9.2 - and up. -* Removed: `Sabre\DAV\Server::NODE_*` constants. -* Moved all precondition checking into a central place, instead of having to - think about it on a per-method basis. -* jCal transformation for calendar-query REPORT now works again. -* Switched to PSR-4 -* Fixed: #175. Returning ETag header upon a failed `If-Match` or - `If-None-Match` check. -* Removed: `lib/Sabre/autoload.php`. Use `vendor/autoload.php` instead. -* Removed: all the rfc documentation from the sabre/dav source. This made the - package needlessly larger. -* Updated: Issue #439. Lots of updates in PATCH support. The - Sabre_DAV_PartialUpdate_IFile interface is now deprecated and will be - removed in a future version. -* Added: `Sabre\DAV\Exception\LengthRequired`. - -1.9.0-alpha2 (2014-01-14) -------------------------- - -* The zip release ships with sabre/vobject 3.1.3, sabre/http 2.0.1, and - sabre/event 1.0.0. -* Added: Browser can now inspect any node, if ?sabreaction=browser is appended. -* Fixed: Issue #178. Support for multiple items in the Timeout header. -* Fixed: Issue #382. Stricter checking if calendar-query is allowed to run. -* Added: Depth: Infinity support for PROPFIND request. Thanks Thomas Müller and - Markus Goetz. - - -1.9.0-alpha1 (2013-11-07) -------------------------- - -* The zip release ships with sabre/vobject 3.1.3, sabre/http 2.0.0alpha5, and - sabre/event 1.0.0. -* BC Break: The CardDAV and CalDAV BackendInterface each have a new method: - getMultipleCards and getMultipleCalendarObjects. The Abstract and PDO backends - have default implementations, but if you implement that interface directly, - this method is now required. -* BC Break: XML property classes now receive an extra argument in their - unserialize method ($propertyMap). This allows for recursively parsing - properties, if needed. -* BC Break: Now using sabre/event for event emitting/subscription. For plugin - authors this means Server::subscribeEvent is now Server::on, and - Server::broadcastEvent is now Server::emit. -* BC Break: Almost all core functionality moved into a CorePlugin. -* BC Break: Most events triggered by the server got an overhaul. -* Changed: Sabre\HTTP now moved into a dedicated sabre/http package. -* Added: Support for WebDAV-sync (rfc6578). -* Added: Support for caldav-subscriptions, which is an easy way for caldav - clients to manage a list of subscriptions on the server. -* Added: Support for emitting and receiving jCal instead of iCalendar for - CalDAV. -* Added: BasicCallback authenticaton backend, for creating simple authentication - systems without having to define any classes. -* Added: A $transactionType property on the server class. This can be used for - logging and performance measuring purposes. -* Fixed: If event handlers modify the request body from a PUT request, an ETag - is no longer sent back. -* Added: Sabre\DAV\IMultiGet to optimize requests that retrieve information - about lists of resources. -* Added: MultiGet support to default CalDAV and CardDAV backends, speeding up - the multiget and sync reports quite a bit! -* Added: ICSExportPlugin can now generate jCal, filter on time-ranges and expand - recurrences. -* Fixed: Read-only access to calendars still allows the sharee to modify basic - calendar properties, such as the displayname and color. -* Changed: The default supportedPrivilegeSet has changed. Most privileges are no - longer marked as abstract. -* Changed: More elegant ACL management for CalendarObject and Card nodes. -* Added: Browser plugin now marks a carddav directory as type Directory, and a - shared calendar as 'Shared'. -* Added: When debugExceptions is turned on, all previous exceptions are also - traversed. -* Removed: Got rid of the Version classes for CalDAV, CardDAV, HTTP, and DAVACL. - Now that there's no separate packages anymore, this makes a bit more sense. -* Added: Generalized the multistatus response parser a bit more, for better - re-use. -* Added: Sabre\DAV\Client now has support for complex properties for PROPPATCH. - (Issue #299). -* Added: Sabre\DAV\Client has support for gzip and deflate encoding. -* Added: Sabre\DAV\Client now has support for sending objects as streams. -* Added: Deserializer for {DAV:}current-user-privilege-set. -* Added: Addressbooks or backends can now specify custom acl rules when creating - cards. -* Added: The ability for plugins to validate custom tokens in If: headers. -* Changed: Completely refactored the Lock plugin to deal with the new If: header - system. -* Added: Checking preconditions for MOVE, COPY, DELETE and PROPPATCH methods. -* Added: has() method on DAV\Property\SupportedReportSet. -* Added: If header now gets checked (with ETag) all the time. Before the dealing - with the If-header was a responsibility of the Locking plugin. -* Fixed: Outbox access for delegates. -* Added: Issue 333: It's now possible to override the calendar-home in the - CalDAV plugin. -* Added: A negotiateContentType to HTTP\Request. A convenience method. -* Fixed: Issue 349: Denying copying or moving a resource into it's own subtree. -* Fixed: SabreDAV catches every exception again. -* Added: Issue #358, adding a component=vevent parameter to the content-types - for calendar objects, if the caldav backend provides this info. - - -1.8.12-stable (2015-01-21) --------------------------- - -* The zip release ships with sabre/vobject 2.1.7. -* #568: Support empty usernames and passwords in basic auth. - - -1.8.11 (2014-12-10) -------------------- - -* The zip release ships with sabre/vobject 2.1.6. -* Updated: MySQL database schema optimized by using more efficient column types. -* #516: The DAV client will now only redirect to HTTP and HTTPS urls. - - -1.8.10 (2014-05-15) -------------------- - -* The zip release ships with sabre/vobject 2.1.4. -* includes changes from version 1.7.12. - - -1.8.9 (2014-02-26) ------------------- - -* The zip release ships with sabre/vobject 2.1.3. -* includes changes from version 1.7.11. - - -1.8.8 (2014-02-09) ------------------- - -* includes changes from version 1.7.10. -* The zip release ships with sabre/vobject 2.1.3. - -1.8.7 (2013-10-02) ------------------- - -* the zip release ships with sabre/vobject 2.1.3. -* includes changes from version 1.7.9. - - -1.8.6 (2013-06-18) ------------------- - -* The zip release ships with sabre/vobject 2.1.0. -* Includes changes from version 1.7.8. - - -1.8.5 (2013-04-11) ------------------- - -* The zip release ships with sabre/vobject 2.0.7. -* Includes changes from version 1.7.7. - - -1.8.4 (2013-04-08) ------------------- - -* The zip release ships with sabre/vobject 2.0.7. -* Includes changes from version 1.7.6. - - -1.8.3 (2013-03-01) ------------------- - -* The zip release ships with sabre/vobject 2.0.6. -* Includes changes from version 1.7.5. -* Fixed: organizer email-address for shared calendars is now prefixed with - mailto:, as it should. - - -1.8.2 (2013-01-19) ------------------- - -* The zip release ships with sabre/vobject 2.0.5. -* Includes changes from version 1.7.4. - - -1.8.1 (2012-12-01) ------------------- - -* The zip release ships with sabre/vobject 2.0.5. -* Includes changes from version 1.7.3. -* Fixed: Typo in 1.7 migration script caused it to fail. - - -1.8.0 (2012-11-08) ------------------- - -* The zip release ships with sabre/vobject 2.0.5. -* BC Break: Moved the entire codebase to PHP namespaces. -* BC Break: Every backend package (CalDAV, CardDAV, Auth, Locks, Principals) now - has consistent naming conventions. There's a BackendInterface, and an - AbstractBackend class. -* BC Break: Changed a bunch of constructor signatures in the CalDAV package, to - reduce dependencies on the ACL package. -* BC Break: Sabre_CalDAV_ISharedCalendar now also has a getShares method, so - sharees can figure out who is also on a shared calendar. -* Added: Sabre_DAVACL_IPrincipalCollection interface, to advertise support for - principal-property-search on any node. -* Added: Simple console script to fire up a fileserver in the current directory - using PHP 5.4's built-in webserver. -* Added: Sharee's can now also read out the list of invites for a shared - calendar. -* Added: The Proxy principal classes now both implement an interface, for - greater flexibility. - - -1.7.13 (2014-07-28) -------------------- - -* The zip release ships with sabre/vobject 2.1.4. -* Changed: Removed phing and went with a custom build script for now. - - -1.7.12 (2014-05-15) -------------------- - -* The zip release ships with sabre/vobject 2.1.4. -* Updated: Issue #439. Lots of updates in PATCH support. The - Sabre_DAV_PartialUpdate_IFile interface is now deprecated and will be removed - in a future version. -* Fixed: Restoring old setting after changing libxml_disable_entity_loader. -* Fixed: Issue #422: Preconditions were not being set on PUT on non-existent - files. Not really a chance for data-loss, but incorrect nevertheless. -* Fixed: Issue #427: Now checking preconditions on DELETE requests. -* Fixed: Issue #428: Etag check with If: fails if the target is a collection. -* Fixed: Issue #393: PATCH request with missing end-range was handled - incorrectly. -* Added: Sabre_DAV_Exception_LengthRequired to omit 411 errors. - - -1.7.11 (2014-02-26) -------------------- - -* The zip release ships with sabre/vobject 2.1.3. -* Fixed: Issue #407: large downloads failed. -* Fixed: Issue #414: XXE security problem on older PHP versions. - - -1.7.10 (2014-02-09) -------------------- - -* Fixed: Issue #374: Don't urlescape colon (:) when it's not required. -* Fixed: Potential security vulnerability in the http client. - - -1.7.9 (2013-10-02) ------------------- - -* The zip release ships with sabre/vobject 2.1.3. -* Fixed: Issue #365. Incorrect output when principal urls have spaces in them. -* Added: Issue #367: Automatically adding a UID to vcards that don't have them. - - -1.7.8 (2013-06-17) ------------------- - -* The zip release ships with sabre/vobject 2.1.0. -* Changed: Sabre\DAV\Client::verifyPeer is now a protected property (instead of - private). -* Fixed: Text was incorrectly escaped in the Href and HrefList properties, - disallowing urls with ampersands (&) in them. -* Added: deserializer for Sabre\DAVACL\Property\CurrentUserPrivilegeSet. -* Fixed: Issue 335: Client only deserializes properties with status 200. -* Fixed: Issue 341: Escaping xml in 423 Locked error responses. -* Added: Issue 339: beforeGetPropertiesForPath event. - - -1.7.7 (2013-04-11) ------------------- - -* The zip release ships with sabre/vobject 2.0.7. -* Fixed: Assets in the browser plugins were not being served on windows - machines. - - -1.7.6 (2013-04-08) ------------------- - -* The zip release ships with sabre/vobject 2.0.7. -* Fixed: vcardurl in database schema can now hold 255 characters instead of 80 - (which is often way to small). -* Fixed: The browser plugin potentially allowed people to open any arbitrary - file on windows servers (CVE-2013-1939). - - -1.7.5 (2013-03-01) ------------------- - -* The zip release ships with sabre/vobject 2.0.6. -* Change: No longer advertising support for 4.0 vcards. iOS and OS X address - book don't handle this well, and just advertising 3.0 support seems like the - most logical course of action. -* Added: ->setVerifyPeers to Sabre_DAV_Client (greatly resisting against it, - don't use this..). - - -1.7.4 (2013-01-19) ------------------- - -* The zip release ships with sabre/vobject 2.0.5. -* Changed: To be compatible with MS Office 2011 for Mac, a workaround was - removed that was added to support old versions of Windows XP (pre-SP3). - Indeed! We needed a crazy workaround to work with one MS product in the past, - and we can't keep that workaround to be compatible with another MS product. -* Fixed: expand-properties REPORT had incorrect values for the href element. -* Fixed: Range requests now work for non-seekable streams. (Thanks Alfred - Klomp). -* Fixed: Changed serialization of {DAV:}getlastmodified and {DAV:}supportedlock - to improve compatibility with MS Office 2011 for Mac. -* Changed: reverted the automatic translation of 'DAV:' xml namespaces to - 'urn:DAV' when parsing files. Issues were reported with libxml 2.6.32, on a - relatively recent debian release, so we'll wait till 2015 to take this one out - again. -* Added: Sabre_DAV_Exception_ServiceUnavailable, for emitting 503's. - - -1.7.3 (2012-12-01) ------------------- - -* The zip release ships with sabre/vobject 2.0.5. -* Fixed: Removing double slashes from getPropertiesForPath. -* Change: Marked a few more properties in the CardDAV as protected, instead of - private. -* Fixed: SharingPlugin now plays nicer with other plugins with similar - functionality. -* Fixed: Issue 174. Sending back HTTP/1.0 for requests with this version. - - -1.7.2 (2012-11-08) ------------------- - -* The zip release ships with sabre/vobject 2.0.5. -* Added: ACL plugin advertises support for 'calendarserver-principal- - property-search'. -* Fixed: [#153] Allowing for relative http principals in iMip requests. -* Added: Support for cs:first-name and cs:last-name properties in sharing - invites. -* Fixed: Made a bunch of properties protected, where they were private before. -* Added: Some non-standard properties for sharing to improve compatibility. -* Fixed: some bugfixes in postgres sql script. -* Fixed: When requesting some properties using PROPFIND, they could show up as - both '200 Ok' and '403 Forbidden'. -* Fixed: calendar-proxy principals were not checked for deeper principal - membership than 1 level. -* Fixed: setGroupMemberSet argument now correctly receives relative principal - urls, instead of the absolute ones. -* Fixed: Server class will filter out any bonus properties if any extra were - returned. This means the implementor of the IProperty class can be a bit - lazier when implementing. Note: bug numbers after this line refer to Google - Code tickets. We're using github now. - - -1.7.1 (2012-10-07) ------------------- - -* Fixed: include path problem in the migration script. - - -1.7.0 (2012-10-06) ------------------- - -* BC Break: The calendarobjects database table has a bunch of new fields, and a - migration script is required to ensure everything will keep working. Read the - wiki for more details. -* BC Break: The ICalendar interface now has a new method: calendarQuery. -* BC Break: In this version a number of classes have been deleted, that have - been previously deprecated. Namely: - Sabre_DAV_Directory (now: - Sabre_DAV_Collection) - Sabre_DAV_SimpleDirectory (now: - Sabre_DAV_SimpleCollection) -* BC Break: Sabre_CalDAV_Schedule_IMip::sendMessage now has an extra argument. - If you extended this class, you should fix this method. It's only used for - informational purposes. -* BC Break: The DAV: namespace is no longer converted to urn:DAV. This was a - workaround for a bug in older PHP versions (pre-5.3). -* Removed: Sabre.includes.php was deprecated, and is now removed. -* Removed: Sabre_CalDAV_Server was deprecated, and is now removed. Please use - Sabre_DAV_Server and check the examples in the examples/ directory. -* Changed: The Sabre_VObject library now spawned into it's own project! The - VObject library is still included in the SabreDAV zip package. -* Added: Experimental interfaces to allow implementation of caldav-sharing. Note - that no implementation is provided yet, just the api hooks. -* Added: Free-busy reporting compliant with the caldav-scheduling standard. This - allows iCal and other clients to fetch other users' free-busy data. -* Added: Experimental NotificationSupport interface to add caldav notifications. -* Added: VCF Export plugin. If enabled, it can generate an export of an entire - addressbook. -* Added: Support for PATCH using a SabreDAV format, to live-patch files. -* Added: Support for Prefer: return-minimal and Brief: t headers for PROPFIND - and PROPPATCH requests. -* Changed: Responsibility for dealing with the calendar-query is now moved from - the CalDAV plugin to the CalDAV backends. This allows for heavy optimizations. -* Changed: The CalDAV PDO backend is now a lot faster for common calendar - queries. -* Changed: We are now using the composer autoloader. -* Changed: The CalDAV backend now all implement an interface. -* Changed: Instead of Sabre_DAV_Property, Sabre_DAV_PropertyInterface is now the - basis of every property class. -* Update: Caching results for principal lookups. This should cut down queries - and performance for a number of heavy requests. -* Update: ObjectTree caches lookups much more aggresively, which will help - especially speeding up a bunch of REPORT queries. -* Added: Support for the schedule-calendar-transp property. -* Fixed: Marking both the text/calendar and text/x-vcard as UTF-8 encoded. -* Fixed: Workaround for the SOGO connector, as it doesn't understand receiving - "text/x-vcard; charset=utf-8" for a contenttype. -* Added: Sabre_DAV_Client now throws more specific exceptions in cases where we - already has an exception class. -* Added: Sabre_DAV_PartialUpdate. This plugin allows you to use the PATCH method - to update parts of a file. -* Added: Tons of timezone name mappings for Microsoft Exchange. -* Added: Support for an 'exception' event in the server class. -* Fixed: Uploaded VCards without a UID are now rejected. (thanks Dominik!) -* Fixed: Rejecting calendar objects if they are not in the - supported-calendar-component list. (thanks Armin!) -* Fixed: Issue 219: serialize() now reorders correctly. -* Fixed: Sabre_DAV_XMLUtil no longer returns empty $dom->childNodes if there is - whitespace in $dom. -* Fixed: Returning 409 Conflict instead of 500 when an attempt is made to create - a file as a child of something that's not a collection. -* Fixed: Issue 237: xml-encoding values in SabreDAV error responses. -* Fixed: Returning 403, instead of 501 when an unknown REPORT is requested. -* Fixed: Postfixing slash on {DAV:}owner properties. -* Fixed: Several embarrassing spelling mistakes in docblocks. - - -1.6.10 (2013-06-17) -------------------- - -* Fixed: Text was incorrectly escaped in the Href and HrefList properties, - disallowing urls with ampersands (&) in them. -* Fixed: Issue 341: Escaping xml in 423 Locked error responses. - - -1.6.9 (2013-04-11) ------------------- - -* Fixed: Assets in the browser plugins were not being served on windows - machines. - - -1.6.8 (2013-04-08) ------------------- - -* Fixed: vcardurl in database schema can now hold 255 characters instead of 80 - (which is often way to small). -* Fixed: The browser plugin potentially allowed people to open any arbitrary - file on windows servers. (CVE-2013-1939). - - -1.6.7 (2013-03-01) ------------------- - -* Change: No longer advertising support for 4.0 vcards. iOS and OS X address - book don't handle this well, and just advertising 3.0 support seems like the - most logical course of action. -* Added: ->setVerifyPeers to Sabre_DAV_Client (greatly resisting against it, - don't use this..). - - -1.6.6 (2013-01-19) ------------------- - -* Fixed: Backported a fix for broken XML serialization in error responses. - (Thanks @DeepDiver1975!) - - -1.6.5 (2012-10-04) ------------------- - -* Fixed: Workaround for line-ending bug OS X 10.8 addressbook has. -* Added: Ability to allow users to set SSL certificates for the Client class. - (Thanks schiesbn!). -* Fixed: Directory indexes with lots of nodes should be a lot faster. -* Fixed: Issue 235: E_NOTICE thrown when doing a propfind request with - Sabre_DAV_Client, and no valid properties are returned. -* Fixed: Issue with filtering on alarms in tasks. - - -1.6.4 (2012-08-02) ------------------- - -* Fixed: Issue 220: Calendar-query filters may fail when filtering on alarms, if - an overridden event has it's alarm removed. -* Fixed: Compatibility for OS/X 10.8 iCal in the IMipHandler. -* Fixed: Issue 222: beforeWriteContent shouldn't be called for lock requests. -* Fixed: Problem with POST requests to the outbox if mailto: was not lower - cased. -* Fixed: Yearly recurrence rule expansion on leap-days no behaves correctly. -* Fixed: Correctly checking if recurring, all-day events with no dtstart fall in - a timerange if the start of the time-range exceeds the start of the instance - of an event, but not the end. -* Fixed: All-day recurring events wouldn't match if an occurence ended exactly - on the start of a time-range. -* Fixed: HTTP basic auth did not correctly deal with passwords containing colons - on some servers. -* Fixed: Issue 228: DTEND is now non-inclusive for all-day events in the - calendar-query REPORT and free-busy calculations. - - -1.6.3 (2012-06-12) ------------------- - -* Added: It's now possible to specify in Sabre_DAV_Client which type of - authentication is to be used. -* Fixed: Issue 206: Sabre_DAV_Client PUT requests are fixed. -* Fixed: Issue 205: Parsing an iCalendar 0-second date interval. -* Fixed: Issue 112: Stronger validation of iCalendar objects. Now making sure - every iCalendar object only contains 1 component, and disallowing vcards, - forcing every component to have a UID. -* Fixed: Basic validation for vcards in the CardDAV plugin. -* Fixed: Issue 213: Workaround for an Evolution bug, that prevented it from - updating events. -* Fixed: Issue 211: A time-limit query on a non-relative alarm trigger in a - recurring event could result in an endless loop. -* Fixed: All uri fields are now a maximum of 200 characters. The Bynari outlook - plugin used much longer strings so this should improve compatibility. -* Fixed: Added a workaround for a bug in KDE 4.8.2 contact syncing. See - https://bugs.kde.org/show_bug.cgi?id=300047 -* Fixed: Issue 217: Sabre_DAV_Tree_FileSystem was pretty broken. - - -1.6.2 (2012-04-16) ------------------- - -* Fixed: Sabre_VObject_Node::$parent should have been public. -* Fixed: Recurrence rules of events are now taken into consideration when doing - time-range queries on alarms. -* Fixed: Added a workaround for the fact that php's DateInterval cannot parse - weeks and days at the same time. -* Added: Sabre_DAV_Server::$exposeVersion, allowing you to hide SabreDAV's - version number from various outputs. -* Fixed: DTSTART values would be incorrect when expanding events. -* Fixed: DTSTART and DTEND would be incorrect for expansion of WEEKLY BYDAY - recurrences. -* Fixed: Issue 203: A problem with overridden events hitting the exact date and - time of a subsequent event in the recurrence set. -* Fixed: There was a problem with recurrence rules, for example the 5th tuesday - of the month, if this day did not exist. -* Added: New HTTP status codes from draft-nottingham-http-new-status-04. - - -1.6.1 (2012-03-05) ------------------- - -* Added: createFile and put() can now return an ETag. -* Added: Sending back an ETag on for operations on CardDAV backends. This should - help with OS X 10.6 Addressbook compatibility. -* Fixed: Fixed a bug where an infinite loop could occur in the recurrence - iterator if the recurrence was YEARLY, with a BYMONTH rule, and either BYDAY - or BYMONTHDAY match the first day of the month. -* Fixed: Events that are excluded using EXDATE are still counted in the COUNT= - parameter in the RRULE property. -* Added: Support for time-range filters on VALARM components. -* Fixed: Correctly filtering all-day events. -* Fixed: Sending back correct mimetypes from the browser plugin (thanks - Jürgen). -* Fixed: Issue 195: Sabre_CardDAV pear package had an incorrect dependency. -* Fixed: Calendardata would be destroyed when performing a MOVE request. - - -1.6.0 (2012-02-22) ------------------- - -* BC Break: Now requires PHP 5.3 -* BC Break: Any node that implemented Sabre_DAVACL_IACL must now also implement - the getSupportedPrivilegeSet method. See website for details. -* BC Break: Moved functions from Sabre_CalDAV_XMLUtil to - Sabre_VObject_DateTimeParser. -* BC Break: The Sabre_DAVACL_IPrincipalCollection now has two new methods: - 'searchPrincipals' and 'updatePrincipal'. -* BC Break: Sabre_DAV_ILockable is removed and all related per-node locking - functionality. -* BC Break: Sabre_DAV_Exception_FileNotFound is now deprecated in favor of - Sabre_DAV_Exception_NotFound. The former will be removed in a later version. -* BC Break: Removed Sabre_CalDAV_ICalendarUtil, use Sabre_VObject instead. -* BC Break: Sabre_CalDAV_Server is now deprecated, check out the documentation - on how to setup a caldav server with just Sabre_DAV_Server. -* BC Break: Default Principals PDO backend now needs a new field in the - 'principals' table. See the website for details. -* Added: Ability to create new calendars and addressbooks from within the - browser plugin. -* Added: Browser plugin: icons for various nodes. -* Added: Support for FREEBUSY reports! -* Added: Support for creating principals with admin-level privileges. -* Added: Possibility to let server send out invitation emails on behalf of - CalDAV client, using Sabre_CalDAV_Schedule_IMip. -* Changed: beforeCreateFile event now passes data argument by reference. -* Changed: The 'propertyMap' property from Sabre_VObject_Reader, must now be - specified in Sabre_VObject_Property::$classMap. -* Added: Ability for plugins to tell the ACL plugin which principal plugins are - searchable. -* Added: [DAVACL] Per-node overriding of supported privileges. This allows for - custom privileges where needed. -* Added: [DAVACL] Public 'principalSearch' method on the DAVACL plugin, which - allows for easy searching for principals, based on their properties. -* Added: Sabre_VObject_Component::getComponents() to return a list of only - components and not properties. -* Added: An includes.php file in every sub-package (CalDAV, CardDAV, DAV, - DAVACL, HTTP, VObject) as an alternative to the autoloader. This often works - much faster. -* Added: Support for the 'Me card', which allows Addressbook.app users specify - which vcard is their own. -* Added: Support for updating principal properties in the DAVACL principal - backends. -* Changed: Major refactoring in the calendar-query REPORT code. Should make - things more flexible and correct. -* Changed: The calendar-proxy-[read|write] principals will now only appear in - the tree, if they actually exist in the Principal backend. This should reduce - some problems people have been having with this. -* Changed: Sabre_VObject_Element_* classes are now renamed to - Sabre_VObject_Property. Old classes are retained for backwards compatibility, - but this will be removed in the future. -* Added: Sabre_VObject_FreeBusyGenerator to generate free-busy reports based on - lists of events. -* Added: Sabre_VObject_RecurrenceIterator to find all the dates and times for - recurring events. -* Fixed: Issue 97: Correctly handling RRULE for the calendar-query REPORT. -* Fixed: Issue 154: Encoding of VObject parameters with no value was incorrect. -* Added: Support for {DAV:}acl-restrictions property from RFC3744. -* Added: The contentlength for calendar objects can now be supplied by a CalDAV - backend, allowing for more optimizations. -* Fixed: Much faster implementation of Sabre_DAV_URLUtil::encodePath. -* Fixed: {DAV:}getcontentlength may now be not specified. -* Fixed: Issue 66: Using rawurldecode instead of urldecode to decode paths from - clients. This means that + will now be treated as a literal rather than a - space, and this should improve compatibility with the Windows built-in client. -* Added: Sabre_DAV_Exception_PaymentRequired exception, to emit HTTP 402 status - codes. -* Added: Some mysql unique constraints to example files. -* Fixed: Correctly formatting HTTP dates. -* Fixed: Issue 94: Sending back Last-Modified header for 304 responses. -* Added: Sabre_VObject_Component_VEvent, Sabre_VObject_Component_VJournal, - Sabre_VObject_Component_VTodo and Sabre_VObject_Component_VCalendar. -* Changed: Properties are now also automatically mapped to their appropriate - classes, if they are created using the add() or __set() methods. -* Changed: Cloning VObject objects now clones the entire tree, rather than just - the default shallow copy. -* Added: Support for recurrence expansion in the CALDAV:calendar-multiget and - CALDAV:calendar-query REPORTS. -* Changed: CalDAV PDO backend now sorts calendars based on the internal - 'calendarorder' field. -* Added: Issue 181: Carddav backends may no optionally not supply the carddata - in getCards, if etag and size are specified. This may speed up certain - requests. -* Added: More arguments to beforeWriteContent and beforeCreateFile (see - WritingPlugins wiki document). -* Added: Hook for iCalendar validation. This allows us to validate iCalendar - objects when they're uploaded. At the moment we're just validating syntax. -* Added: VObject now support Windows Timezone names correctly (thanks mrpace2). -* Added: If a timezonename could not be detected, we fall back on the default - PHP timezone. -* Added: Now a Composer package (thanks willdurand). -* Fixed: Support for \N as a newline character in the VObject reader. -* Added: afterWriteContent, afterCreateFile and afterUnbind events. -* Added: Postgresql example files. Not part of the unittests though, so use at - your own risk. -* Fixed: Issue 182: Removed backticks from sql queries, so it will work with - Postgres. - - -1.5.9 (2012-04-16) ------------------- - -* Fixed: Issue with parsing timezone identifiers that were surrounded by quotes. - (Fixes emClient compatibility). - - -1.5.8 (2012-02-22) ------------------- - -* Fixed: Issue 95: Another timezone parsing issue, this time in calendar-query. - - -1.5.7 (2012-02-19) ------------------- - -* Fixed: VObject properties are now always encoded before components. -* Fixed: Sabre_DAVACL had issues with multiple levels of privilege aggregration. -* Changed: Added 'GuessContentType' plugin to fileserver.php example. -* Fixed: The Browser plugin will now trigger the correct events when creating - files. -* Fixed: The ICSExportPlugin now considers ACL's. -* Added: Made it optional to supply carddata from an Addressbook backend when - requesting getCards. This can make some operations much faster, and could - result in much lower memory use. -* Fixed: Issue 187: Sabre_DAV_UUIDUtil was missing from includes file. -* Fixed: Issue 191: beforeUnlock was triggered twice. - - -1.5.6 (2012-01-07) ------------------- - -* Fixed: Issue 174: VObject could break UTF-8 characters. -* Fixed: pear package installation issues. - - -1.5.5 (2011-12-16) ------------------- - -* Fixed: CalDAV time-range filter workaround for recurring events. -* Fixed: Bug in Sabre_DAV_Locks_Backend_File that didn't allow multiple files to - be locked at the same time. - - -1.5.4 (2011-10-28) ------------------- - -* Fixed: GuessContentType plugin now supports mixed case file extensions. -* Fixed: DATE-TIME encoding was wrong in VObject. (we used 'DATETIME'). -* Changed: Sending back HTTP 204 after a PUT request on an existing resource - instead of HTTP 200. This should fix Evolution CardDAV client compatibility. -* Fixed: Issue 95: Parsing X-LIC-LOCATION if it's available. -* Added: All VObject elements now have a reference to their parent node. - - -1.5.3 (2011-09-28) ------------------- - -* Fixed: Sabre_DAV_Collection was missing from the includes file. -* Fixed: Issue 152. iOS 1.4.2 apparantly requires HTTP/1.1 200 OK to be in - uppercase. -* Fixed: Issue 153: Support for files with mixed newline styles in - Sabre_VObject. -* Fixed: Issue 159: Automatically converting any vcard and icalendardata to - UTF-8. -* Added: Sabre_DAV_SimpleFile class for easy static file creation. -* Added: Issue 158: Support for the CARDDAV:supported-address-data property. - - -1.5.2 (2011-09-21) ------------------- - -* Fixed: carddata and calendardata MySQL fields are now of type 'mediumblob'. - 'TEXT' was too small sometimes to hold all the data. -* Fixed: {DAV:}supported-report-set is now correctly reporting the reports for - IAddressBook. -* Added: Sabre_VObject_Property::add() to add duplicate parameters to - properties. -* Added: Issue 151: Sabre_CalDAV_ICalendar and Sabre_CalDAV_ICalendarObject - interfaces. -* Fixed: Issue 140: Not returning 201 Created if an event cancelled the creation - of a file. -* Fixed: Issue 150: Faster URLUtil::encodePath() implementation. -* Fixed: Issue 144: Browser plugin could interfere with - TemporaryFileFilterPlugin if it was loaded first. -* Added: It's not possible to specify more 'alternate uris' in principal - backends. - - -1.5.1 (2011-08-24) ------------------- - -* Fixed: Issue 137. Hiding action interface in HTML browser for non-collections. -* Fixed: addressbook-query is now correctly returned from the - {DAV:}supported-report-set property. -* Fixed: Issue 142: Bugs in groupwareserver.php example. -* Fixed: Issue 139: Rejecting PUT requests with Content-Range. - - -1.5.0 (2011-08-12) ------------------- - -* Added: CardDAV support. -* Added: An experimental WebDAV client. -* Added: MIME-Directory grouping support in the VObject library. This is very - useful for people attempting to parse vcards. -* BC Break: Adding parameters with the VObject libraries now overwrites the - previous parameter, rather than just add it. This makes more sense for 99% of - the cases. -* BC Break: lib/Sabre.autoload.php is now removed in favor of - lib/Sabre/autoload.php. -* Deprecated: Sabre_DAV_Directory is now deprecated and will be removed in a - future version. Use Sabre_DAV_Collection instead. -* Deprecated: Sabre_DAV_SimpleDirectory is now deprecated and will be removed in - a future version. Use Sabre_DAV_SimpleCollection instead. -* Fixed: Problem with overriding tablenames for the CalDAV backend. -* Added: Clark-notation parser to XML utility. -* Added: unset() support to VObject components. -* Fixed: Refactored CalDAV property fetching to be faster and simpler. -* Added: Central string-matcher for CalDAV and CardDAV plugins. -* Added: i;unicode-casemap support -* Fixed: VObject bug: wouldn't parse parameters if they weren't specified in - uppercase. -* Fixed: VObject bug: Parameters now behave more like Properties. -* Fixed: VObject bug: Parameters with no value are now correctly parsed. -* Changed: If calendars don't specify which components they allow, 'all' - components are assumed (e.g.: VEVENT, VTODO, VJOURNAL). -* Changed: Browser plugin now uses POST variable 'sabreAction' instead of - 'action' to reduce the chance of collisions. - - -1.4.4 (2011-07-07) ------------------- - -* Fixed: Issue 131: Custom CalDAV backends could break in certain cases. -* Added: The option to override the default tablename all PDO backends use. - (Issue 60). -* Fixed: Issue 124: 'File' authentication backend now takes realm into - consideration. -* Fixed: Sabre_DAV_Property_HrefList now properly deserializes. This allows - users to update the {DAV:}group-member-set property. -* Added: Helper functions for DateTime-values in Sabre_VObject package. -* Added: VObject library can now automatically map iCalendar properties to - custom classes. - - -1.4.3 (2011-04-25) ------------------- - -* Fixed: Issue 123: Added workaround for Windows 7 UNLOCK bug. -* Fixed: datatype of lastmodified field in mysql.calendars.sql. Please change - the DATETIME field to an INT to ensure this field will work correctly. -* Change: Sabre_DAV_Property_Principal is now renamed to - Sabre_DAVACL_Property_Principal. -* Added: API level support for ACL HTTP method. -* Fixed: Bug in serializing {DAV:}acl property. -* Added: deserializer for {DAV:}resourcetype property. -* Added: deserializer for {DAV:}acl property. -* Added: deserializer for {DAV:}principal property. - - -1.4.2-beta (2011-04-01) ------------------------ - -* Added: It's not possible to disable listing of nodes that are denied read - access by ACL. -* Fixed: Changed a few properties in CalDAV classes from private to protected. -* Fixed: Issue 119: Terrible things could happen when relying on guessBaseUri, - the server was running on the root of the domain and a user tried to access a - file ending in .php. This is a slight BC break. -* Fixed: Issue 118: Lock tokens in If headers without a uri should be treated as - the request uri, not 'all relevant uri's. -* Fixed: Issue 120: PDO backend was incorrectly fetching too much locks in cases - where there were similar named locked files in a directory. - - -1.4.1-beta (2011-02-26) ------------------------ - -* Fixed: Sabre_DAV_Locks_Backend_PDO returned too many locks. -* Fixed: Sabre_HTTP_Request::getHeader didn't return Content-Type when running - on apache, so a few workarounds were added. -* Change: Slightly changed CalDAV Backend API's, to allow for heavy - optimizations. This is non-bc breaking. - - -1.4.0-beta (2011-02-12) ------------------------ - -* Added: Partly RFC3744 ACL support. -* Added: Calendar-delegation (caldav-proxy) support. -* BC break: In order to fix Issue 99, a new argument had to be added to - Sabre_DAV_Locks_Backend_*::getLocks classes. Consult the classes for details. -* Deprecated: Sabre_DAV_Locks_Backend_FS is now deprecated and will be removed - in a later version. Use PDO or the new File class instead. -* Deprecated: The Sabre_CalDAV_ICalendarUtil class is now marked deprecated, and - will be removed in a future version. Please use Sabre_VObject instead. -* Removed: All principal-related functionality has been removed from the - Sabre_DAV_Auth_Plugin, and moved to the Sabre_DAVACL_Plugin. -* Added: VObject library, for easy vcard/icalendar parsing using a natural - interface. -* Added: Ability to automatically generate full .ics feeds off calendars. To - use: Add the Sabre_CalDAV_ICSExportPlugin, and add ?export to your calendar - url. -* Added: Plugins can now specify a pluginname, for easy access using - Sabre_DAV_Server::getPlugin(). -* Added: beforeGetProperties event. -* Added: updateProperties event. -* Added: Principal listings and calendar-access can now be done privately, - disallowing users from accessing or modifying other users' data. -* Added: You can now pass arrays to the Sabre_DAV_Server constructor. If it's an - array with node-objects, a Root collection will automatically be created, and - the nodes are used as top-level children. -* Added: The principal base uri is now customizable. It used to be hardcoded to - 'principals/[user]'. -* Added: getSupportedReportSet method in ServerPlugin class. This allows you to - easily specify which reports you're implementing. -* Added: A '..' link to the HTML browser. -* Fixed: Issue 99: Locks on child elements were ignored when their parent nodes - were deleted. -* Fixed: Issue 90: lockdiscovery property and LOCK response now include a - {DAV}lockroot element. -* Fixed: Issue 96: support for 'default' collation in CalDAV text-match filters. -* Fixed: Issue 102: Ensuring that copy and move with identical source and - destination uri's fails. -* Fixed: Issue 105: Supporting MKCALENDAR with no body. -* Fixed: Issue 109: Small fixes in Sabre_HTTP_Util. -* Fixed: Issue 111: Properly catching the ownername in a lock (if it's a string) -* Fixed: Sabre_DAV_ObjectTree::nodeExist always returned false for the root - node. -* Added: Global way to easily supply new resourcetypes for certain node classes. -* Fixed: Issue 59: Allowing the user to override the authentication realm in - Sabre_CalDAV_Server. -* Update: Issue 97: Looser time-range checking if there's a recurrence rule in - an event. This fixes 'missing recurring events'. - - -1.3.0 (2010-10-14) ------------------- - -* Added: childExists method to Sabre_DAV_ICollection. This is an api break, so - if you implement Sabre_DAV_ICollection directly, add the method. -* Changed: Almost all HTTP method implementations now take a uri argument, - including events. This allows for internal rerouting of certain calls. If you - have custom plugins, make sure they use this argument. If they don't, they - will likely still work, but it might get in the way of future changes. -* Changed: All getETag methods MUST now surround the etag with double-quotes. - This was a mistake made in all previous SabreDAV versions. If you don't do - this, any If-Match, If-None-Match and If: headers using Etags will work - incorrectly. (Issue 85). -* Added: Sabre_DAV_Auth_Backend_AbstractBasic class, which can be used to easily - implement basic authentication. -* Removed: Sabre_DAV_PermissionDenied class. Use Sabre_DAV_Forbidden instead. -* Removed: Sabre_DAV_IDirectory interface, use Sabre_DAV_ICollection instead. -* Added: Browser plugin now uses {DAV:}displayname if this property is - available. -* Added: Cache layer in the ObjectTree. -* Added: Tree classes now have a delete and getChildren method. -* Fixed: If-Modified-Since and If-Unmodified-Since would be incorrect if the - date is an exact match. -* Fixed: Support for multiple ETags in If-Match and If-None-Match headers. -* Fixed: Improved baseUrl handling. -* Fixed: Issue 67: Non-seekable stream support in ::put()/::get(). -* Fixed: Issue 65: Invalid dates are now ignored. -* Updated: Refactoring in Sabre_CalDAV to make everything a bit more ledgable. -* Fixed: Issue 88, Issue 89: Fixed compatibility for running SabreDAV on - Windows. -* Fixed: Issue 86: Fixed Content-Range top-boundary from 'file size' to 'file - size'-1. - - -1.2.5 (2010-08-18) ------------------- - -* Fixed: Issue 73: guessBaseUrl fails for some servers. -* Fixed: Issue 67: SabreDAV works better with non-seekable streams. -* Fixed: If-Modified-Since and If-Unmodified-Since would be incorrect if - the date is an exact match. - - -1.2.4 (2010-07-13) ------------------- - -* Fixed: Issue 62: Guessing baseUrl fails when url contains a query-string. -* Added: Apache configuration sample for CGI/FastCGI setups. -* Fixed: Issue 64: Only returning calendar-data when it was actually requested. - - -1.2.3 (2010-06-26) ------------------- - -* Fixed: Issue 57: Supporting quotes around etags in If-Match and If-None-Match - - -1.2.2 (2010-06-21) ------------------- - -* Updated: SabreDAV now attempts to guess the BaseURI if it's not set. -* Updated: Better compatibility with BitKinex -* Fixed: Issue 56: Incorrect behaviour for If-None-Match headers and GET - requests. -* Fixed: Issue with certain encoded paths in Browser Plugin. - - -1.2.1 (2010-06-07) ------------------- - -* Fixed: Issue 50, patch by Mattijs Hoitink. -* Fixed: Issue 51, Adding windows 7 lockfiles to TemporaryFileFilter. -* Fixed: Issue 38, Allowing custom filters to be added to TemporaryFileFilter. -* Fixed: Issue 53, ETags in the If: header were always failing. This behaviour - is now corrected. -* Added: Apache Authentication backend, in case authentication through .htaccess - is desired. -* Updated: Small improvements to example files. - - -1.2.0 (2010-05-24) ------------------- - -* Fixed: Browser plugin now displays international characters. -* Changed: More properties in CalDAV classes are now protected instead of - private. - - -1.2.0beta3 (2010-05-14) ------------------------ - -* Fixed: Custom properties were not properly sent back for allprops requests. -* Fixed: Issue 49, incorrect parsing of PROPPATCH, affecting Office 2007. -* Changed: Removed CalDAV items from includes.php, and added a few missing ones. - - -1.2.0beta2 (2010-05-04) ------------------------ - -* Fixed: Issue 46: Fatal error for some non-existent nodes. -* Updated: some example sql to include email address. -* Added: 208 and 508 statuscodes from RFC5842. -* Added: Apache2 configuration examples - - -1.2.0beta1 (2010-04-28) ------------------------ - -* Fixed: redundant namespace declaration in resourcetypes. -* Fixed: 2 locking bugs triggered by litmus when no Sabre_DAV_ILockable - interface is used. -* Changed: using http://sabredav.org/ns for all custom xml properties. -* Added: email address property to principals. -* Updated: CalendarObject validation. - - -1.2.0alpha4 (2010-04-24) ------------------------- - -* Added: Support for If-Range, If-Match, If-None-Match, If-Modified-Since, - If-Unmodified-Since. -* Changed: Brand new build system. Functionality is split up between Sabre, - Sabre_HTTP, Sabre_DAV and Sabre_CalDAV packages. In addition to that a new - non-pear package will be created with all this functionality combined. -* Changed: Autoloader moved to Sabre/autoload.php. -* Changed: The Allow: header is now more accurate, with appropriate HTTP methods - per uri. -* Changed: Now throwing back Sabre_DAV_Exception_MethodNotAllowed on a few - places where Sabre_DAV_Exception_NotImplemented was used. - - -1.2.0alpha3 (2010-04-20) ------------------------- - -* Update: Complete rewrite of property updating. Now easier to use and atomic. -* Fixed: Issue 16, automatically adding trailing / to baseUri. -* Added: text/plain is used for .txt files in GuessContentType plugin. -* Added: support for principal-property-search and principal-search-property-set - reports. -* Added: Issue 31: Hiding exception information by default. Can be turned on - with the Sabre_DAV_Server::$debugExceptions property. - - -1.2.0alpha2 (2010-04-08) ------------------------- - -* Added: Calendars are now private and can only be read by the owner. -* Fixed: double namespace declaration in multistatus responses. -* Added: MySQL database dumps. MySQL is now also supported next to SQLite. -* Added: expand-properties REPORT from RFC 3253. -* Added: Sabre_DAV_Property_IHref interface for properties exposing urls. -* Added: Issue 25: Throwing error on broken Finder behaviour. -* Changed: Authentication backend is now aware of current user. - - -1.2.0alpha1 (2010-03-31) ------------------------- - -* Fixed: Issue 26: Workaround for broken GVFS behaviour with encoded special - characters. -* Fixed: Issue 34: Incorrect Lock-Token response header for LOCK. Fixes Office - 2010 compatibility. -* Added: Issue 35: SabreDAV version to header to OPTIONS response to ease - debugging. -* Fixed: Issue 36: Incorrect variable name, throwing error in some requests. -* Fixed: Issue 37: Incorrect smultron regex in temporary filefilter. -* Fixed: Issue 33: Converting ISO-8859-1 characters to UTF-8. -* Fixed: Issue 39 & Issue 40: Basename fails on non-utf-8 locales. -* Added: More unittests. -* Added: SabreDAV version to all error responses. -* Added: URLUtil class for decoding urls. -* Changed: Now using pear.sabredav.org pear channel. -* Changed: Sabre_DAV_Server::getCopyAndMoveInfo is now a public method. - - -1.1.2-alpha (2010-03-18) ------------------------- - -* Added: RFC5397 - current-user-principal support. -* Fixed: Issue 27: encoding entities in property responses. -* Added: naturalselection script now allows the user to specify a 'minimum - number of bytes' for deletion. This should reduce load due to less crawling -* Added: Full support for the calendar-query report. -* Added: More unittests. -* Added: Support for complex property deserialization through the static - ::unserialize() method. -* Added: Support for modifying calendar-component-set -* Fixed: Issue 29: Added TIMEOUT_INFINITE constant - - -1.1.1-alpha (2010-03-11) ------------------------- - -* Added: RFC5689 - Extended MKCOL support. -* Fixed: Evolution support for CalDAV. -* Fixed: PDO-locks backend was pretty much completely broken. This is 100% - unittested now. -* Added: support for ctags. -* Fixed: Comma's between HTTP methods in 'Allow' method. -* Changed: default argument for Sabre_DAV_Locks_Backend_FS. This means a - datadirectory must always be specified from now on. -* Changed: Moved Sabre_DAV_Server::parseProps to - Sabre_DAV_XMLUtil::parseProperties. -* Changed: Sabre_DAV_IDirectory is now Sabre_DAV_ICollection. -* Changed: Sabre_DAV_Exception_PermissionDenied is now - Sabre_DAV_Exception_Forbidden. -* Changed: Sabre_CalDAV_ICalendarCollection is removed. -* Added: Sabre_DAV_IExtendedCollection. -* Added: Many more unittests. -* Added: support for calendar-timezone property. - - -1.1.0-alpha (2010-03-01) ------------------------- - -* Note: This version is forked from version 1.0.5, so release dates may be out - of order. -* Added: CalDAV - RFC 4791 -* Removed: Sabre_PHP_Exception. PHP has a built-in ErrorException for this. -* Added: PDO authentication backend. -* Added: Example sql for auth, caldav, locks for sqlite. -* Added: Sabre_DAV_Browser_GuessContentType plugin -* Changed: Authentication plugin refactored, making it possible to implement - non-digest authentication. -* Fixed: Better error display in browser plugin. -* Added: Support for {DAV:}supported-report-set -* Added: XML utility class with helper functions for the WebDAV protocol. -* Added: Tons of unittests -* Added: PrincipalCollection and Principal classes -* Added: Sabre_DAV_Server::getProperties for easy property retrieval -* Changed: {DAV:}resourceType defaults to 0 -* Changed: Any non-null resourceType now gets a / appended to the href value. - Before this was just for {DAV:}collection's, but this is now also the case for - for example {DAV:}principal. -* Changed: The Href property class can now optionally create non-relative uri's. -* Changed: Sabre_HTTP_Response now returns false if headers are already sent and - header-methods are called. -* Fixed: Issue 19: HEAD requests on Collections -* Fixed: Issue 21: Typo in Sabre_DAV_Property_Response -* Fixed: Issue 18: Doesn't work with Evolution Contacts - - -1.0.15 (2010-05-28) -------------------- - -* Added: Issue 31: Hiding exception information by default. Can be turned on - with the Sabre_DAV_Server::$debugExceptions property. -* Added: Moved autoload from lib/ to lib/Sabre/autoload.php. This is also the - case in the upcoming 1.2.0, so it will improve future compatibility. - - -1.0.14 (2010-04-15) -------------------- - -* Fixed: double namespace declaration in multistatus responses. - - -1.0.13 (2010-03-30) -------------------- - -* Fixed: Issue 40: Last references to basename/dirname - - -1.0.12 (2010-03-30) -------------------- - -* Fixed: Issue 37: Incorrect smultron regex in temporary filefilter. -* Fixed: Issue 26: Workaround for broken GVFS behaviour with encoded special - characters. -* Fixed: Issue 33: Converting ISO-8859-1 characters to UTF-8. -* Fixed: Issue 39: Basename fails on non-utf-8 locales. -* Added: More unittests. -* Added: SabreDAV version to all error responses. -* Added: URLUtil class for decoding urls. -* Updated: Now using pear.sabredav.org pear channel. - - -1.0.11 (2010-03-23) -------------------- - -* Non-public release. This release is identical to 1.0.10, but it is used to - test releasing packages to pear.sabredav.org. - - -1.0.10 (2010-03-22) -------------------- - -* Fixed: Issue 34: Invalid Lock-Token header response. -* Added: Issue 35: Adding SabreDAV version to HTTP OPTIONS responses. - - -1.0.9 (2010-03-19) ------------------- - -* Fixed: Issue 27: Entities not being encoded in PROPFIND responses. -* Fixed: Issue 29: Added missing TIMEOUT_INFINITE constant. - - -1.0.8 (2010-03-03) ------------------- - -* Fixed: Issue 21: typos causing errors -* Fixed: Issue 23: Comma's between methods in Allow header. -* Added: Sabre_DAV_ICollection interface, to aid in future compatibility. -* Added: Sabre_DAV_Exception_Forbidden exception. This will replace - Sabre_DAV_Exception_PermissionDenied in the future, and can already be used to - ensure future compatibility. - - -1.0.7 (2010-02-24) ------------------- - -* Fixed: Issue 19 regression for MS Office - - -1.0.6 (2010-02-23) ------------------- - -* Fixed: Issue 19: HEAD requests on Collections - - -1.0.5 (2010-01-22) ------------------- - -* Fixed: Fatal error when a malformed url was used for unlocking, in conjuction - with Sabre.autoload.php due to a incorrect filename. -* Fixed: Improved unittests and build system - - -1.0.4 (2010-01-11) ------------------- - -* Fixed: needed 2 different releases. One for googlecode and one for pearfarm. - This is to retain the old method to install SabreDAV until pearfarm becomes - the standard installation method. - - -1.0.3 (2010-01-11) ------------------- - -* Added: RFC4709 support (davmount) -* Added: 6 unittests -* Added: naturalselection. A tool to keep cache directories below a specified - theshold. -* Changed: Now using pearfarm.org channel server. - - -1.0.1 (2009-12-22) ------------------- - -* Fixed: Issue 15: typos in examples -* Fixed: Minor pear installation issues - - -1.0.0 (2009-11-02) ------------------- - -* Added: SimpleDirectory class. This class allows creating static directory - structures with ease. -* Changed: Custom complex properties and exceptions now get an instance of - Sabre_DAV_Server as their first argument in serialize() -* Changed: Href complex property now prepends server's baseUri -* Changed: delete before an overwriting copy/move is now handles by server class - instead of tree classes -* Changed: events must now explicitly return false to stop execution. Before, - execution would be stopped by anything loosely evaluating to false. -* Changed: the getPropertiesForPath method now takes a different set of - arguments, and returns a different response. This allows plugin developers to - return statuses for properties other than 200 and 404. The hrefs are now also - always calculated relative to the baseUri, and not the uri of the request. -* Changed: generatePropFindResponse is renamed to generateMultiStatus, and now - takes a list of properties similar to the response of getPropertiesForPath. - This was also needed to improve flexibility for plugin development. -* Changed: Auth plugins are no longer included. They were not yet stable - quality, so they will probably be reintroduced in a later version. -* Changed: PROPPATCH also used generateMultiStatus now. -* Removed: unknownProperties event. This is replaced by the afterGetProperties - event, which should provide more flexibility. -* Fixed: Only calling getSize() on IFile instances in httpHead() -* Added: beforeBind event. This is invoked upon file or directory creation -* Added: beforeWriteContent event, this is invoked by PUT and LOCK on an - existing resource. -* Added: beforeUnbind event. This is invoked right before deletion of any - resource. -* Added: afterGetProperties event. This event can be used to make modifications - to property responses. -* Added: beforeLock and beforeUnlock events. -* Added: afterBind event. -* Fixed: Copy and Move could fail in the root directory. This is now fixed. -* Added: Plugins can now be retrieved by their classname. This is useful for - inter-plugin communication. -* Added: The Auth backend can now return usernames and user-id's. -* Added: The Auth backend got a getUsers method -* Added: Sabre_DAV_FSExt_Directory now returns quota info - - -0.12.1-beta (2009-09-11) ------------------------- - -* Fixed: UNLOCK bug. Unlock didn't work at all - - -0.12-beta (2009-09-10) ----------------------- - -* Updated: Browser plugin now shows multiple {DAV:}resourcetype values if - available. -* Added: Experimental PDO backend for Locks Manager -* Fixed: Sending Content-Length: 0 for every empty response. This improves NGinx - compatibility. -* Fixed: Last modification time is reported in UTC timezone. This improves - Finder compatibility. - - -0.11-beta (2009-08-11) ----------------------- - -* Updated: Now in Beta -* Updated: Pear package no longer includes docs/ directory. These just contained - rfc's, which are publicly available. This reduces the package from ~800k to - ~60k -* Added: generatePropfindResponse now takes a baseUri argument -* Added: ResourceType property can now contain multiple resourcetypes. -* Fixed: Issue 13. - - -0.10-alpha (2009-08-03) ------------------------ - -* Added: Plugin to automatically map GET requests to non-files to PROPFIND - (Sabre_DAV_Browser_MapGetToPropFind). This should allow easier debugging of - complicated WebDAV setups. -* Added: Sabre_DAV_Property_Href class. For future use. -* Added: Ability to choose to use auth-int, auth or both for HTTP Digest - authentication. (Issue 11) -* Changed: Made more methods in Sabre_DAV_Server public. -* Fixed: TemporaryFileFilter plugin now intercepts HTTP LOCK requests to - non-existent files. (Issue 12) -* Added: Central list of defined xml namespace prefixes. This can reduce - Bandwidth and legibility for xml bodies with user-defined namespaces. -* Added: now a PEAR-compatible package again, thanks to Michael Gauthier -* Changed: moved default copy and move logic from ObjectTree to Tree class - -0.9a-alpha (2009-07-21) ----------------------- - -* Fixed: Broken release - -0.9-alpha (2009-07-21) ----------------------- - -* Changed: Major refactoring, removed most of the logic from the Tree objects. - The Server class now directly works with the INode, IFile and IDirectory - objects. If you created your own Tree objects, this will most likely break in - this release. -* Changed: Moved all the Locking logic from the Tree and Server classes into a - separate plugin. -* Changed: TemporaryFileFilter is now a plugin. -* Added: Comes with an autoloader script. This can be used instead of the - includer script, and is preferred by some people. -* Added: AWS Authentication class. -* Added: simpleserversetup.py script. This will quickly get a fileserver up and - running. -* Added: When subscribing to events, it is now possible to supply a priority. - This is for example needed to ensure that the Authentication Plugin is used - before any other Plugin. -* Added: 22 new tests. -* Added: Users-manager plugin for .htdigest files. Experimental and subject to - change. -* Added: RFC 2324 HTTP 418 status code -* Fixed: Exclusive locks could in some cases be picked up as shared locks -* Fixed: Digest auth for non-apache servers had a bug (still not actually tested - this well). - - -0.8-alpha (2009-05-30) ----------------------- - -* Changed: Renamed all exceptions! This is a compatibility break. Every - Exception now follows Sabre_DAV_Exception_FileNotFound convention instead of - Sabre_DAV_FileNotFoundException. -* Added: Browser plugin now allows uploading and creating directories straight - from the browser. -* Added: 12 more unittests -* Fixed: Locking bug, which became prevalent on Windows Vista. -* Fixed: Netdrive support -* Fixed: TemporaryFileFilter filtered out too many files. Fixed some of the - regexes. -* Fixed: Added README and ChangeLog to package - - -0.7-alpha (2009-03-29) ----------------------- - -* Added: System to return complex properties from PROPFIND. -* Added: support for {DAV:}supportedlock. -* Added: support for {DAV:}lockdiscovery. -* Added: 6 new tests. -* Added: New plugin system. -* Added: Simple HTML directory plugin, for browser access. -* Added: Server class now sends back standard pre-condition error xml bodies. - This was new since RFC4918. -* Added: Sabre_DAV_Tree_Aggregate, which can 'host' multiple Tree objects into - one. -* Added: simple basis for HTTP REPORT method. This method is not used yet, but - can be used by plugins to add reports. -* Changed: ->getSize is only called for files, no longer for collections. r303 -* Changed: Sabre_DAV_FilterTree is now Sabre_DAV_Tree_Filter -* Changed: Sabre_DAV_TemporaryFileFilter is now called - Sabre_DAV_Tree_TemporaryFileFilter. -* Changed: removed functions (get(/set)HTTPRequest(/Response)) from Server - class, and using a public property instead. -* Fixed: bug related to parsing proppatch and propfind requests. Didn't show up - in most clients, but it needed fixing regardless. (r255) -* Fixed: auth-int is now properly supported within HTTP Digest. -* Fixed: Using application/xml for a mimetype vs. text/xml as per RFC4918 sec - 8.2. -* Fixed: TemporaryFileFilter now lets through GET's if they actually exist on - the backend. (r274) -* Fixed: Some methods didn't get passed through in the FilterTree (r283). -* Fixed: LockManager is now slightly more complex, Tree classes slightly less. - (r287) - - -0.6-alpha (2009-02-16) ----------------------- - -* Added: Now uses streams for files, instead of strings. This means it won't - require to hold entire files in memory, which can be an issue if you're - dealing with big files. Note that this breaks compatibility for put() and - createFile methods. -* Added: HTTP Digest Authentication helper class. -* Added: Support for HTTP Range header -* Added: Support for ETags within If: headers -* Added: The API can now return ETags and override the default Content-Type -* Added: starting with basic framework for unittesting, using PHPUnit. -* Added: 49 unittests. -* Added: Abstraction for the HTTP request. -* Updated: Using Clark Notation for tags in properties. This means tags are - serialized as {namespace}tagName instead of namespace#tagName -* Fixed: HTTP_BasicAuth class now works as expected. -* Fixed: DAV_Server uses / for a default baseUrl. -* Fixed: Last modification date is no longer ignored in PROPFIND. -* Fixed: PROPFIND now sends back information about the requestUri even when - "Depth: 1" is specified. - - -0.5-alpha (2009-01-14) ----------------------- - -* Added: Added a very simple example for implementing a mapping to PHP file - streams. This should allow easy implementation of for example a WebDAV to FTP - proxy. -* Added: HTTP Basic Authentication helper class. -* Added: Sabre_HTTP_Response class. This centralizes HTTP operations and will be - a start towards the creating of a testing framework. -* Updated: Backwards compatibility break: all require_once() statements are - removed from all the files. It is now recommended to use autoloading of - classes, or just including lib/Sabre.includes.php. This fix was made to allow - easier integration into applications not using this standard inclusion model. -* Updated: Better in-file documentation. -* Updated: Sabre_DAV_Tree can now work with Sabre_DAV_LockManager. -* Updated: Fixes a shared-lock bug. -* Updated: Removed ?> from the bottom of each php file. -* Updated: Split up some operations from Sabre_DAV_Server to - Sabre_HTTP_Response. -* Fixed: examples are now actually included in the pear package. - - -0.4-alpha (2008-11-05) ----------------------- - -* Passes all litmus tests! -* Added: more examples -* Added: Custom property support -* Added: Shared lock support -* Added: Depth support to locks -* Added: Locking on unmapped urls (non-existent nodes) -* Fixed: Advertising as WebDAV class 3 support - - -0.3-alpha (2008-06-29) ----------------------- - -* Fully working in MS Windows clients. -* Added: temporary file filter: support for smultron files. -* Added: Phing build scripts -* Added: PEAR package -* Fixed: MOVE bug identified using finder. -* Fixed: Using gzuncompress instead of gzdecode in the temporary file filter. - This seems more common. - - -0.2-alpha (2008-05-27) ----------------------- - -* Somewhat working in Windows clients -* Added: Working PROPPATCH method (doesn't support custom properties yet) -* Added: Temporary filename handling system -* Added: Sabre_DAV_IQuota to return quota information -* Added: PROPFIND now reads the request body and only supplies the requested - properties - - -0.1-alpha (2008-04-04) ----------------------- - -* First release! -* Passes litmus: basic, http and copymove test. -* Fully working in Finder and DavFS2. - -Project started: 2007-12-13 - -[vobj]: http://sabre.io/vobject/ -[evnt]: http://sabre.io/event/ -[http]: http://sabre.io/http/ -[uri]: http://sabre.io/uri/ -[xml]: http://sabre.io/xml/ -[mi20]: http://sabre.io/dav/upgrade/1.8-to-2.0/ -[rfc6638]: http://tools.ietf.org/html/rfc6638 "CalDAV Scheduling" -[rfc7240]: http://tools.ietf.org/html/rfc7240 -[calendar-availability]: https://tools.ietf.org/html/draft-daboo-calendar-availability-05 diff --git a/vendor/sabre/dav/CONTRIBUTING.md b/vendor/sabre/dav/CONTRIBUTING.md deleted file mode 100644 index b937db64f..000000000 --- a/vendor/sabre/dav/CONTRIBUTING.md +++ /dev/null @@ -1,109 +0,0 @@ -Contributing to sabre projects -============================== - -Want to contribute to sabre/dav? Here are some guidelines to ensure your patch -gets accepted. - - -Building a new feature? Contact us first ----------------------------------------- - -We may not want to accept every feature that comes our way. Sometimes -features are out of scope for our projects. - -We don't want to waste your time, so by having a quick chat with us first, -you may find out quickly if the feature makes sense to us, and we can give -some tips on how to best build the feature. - -If we don't accept the feature, it could be for a number of reasons. For -instance, we've rejected features in the past because we felt uncomfortable -assuming responsibility for maintaining the feature. - -In those cases, it's often possible to keep the feature separate from the -sabre projects. sabre/dav for instance has a plugin system, and there's no -reason the feature can't live in a project you own. - -In that case, definitely let us know about your plugin as well, so we can -feature it on [sabre.io][4]. - -We are often on [IRC][5], in the #sabredav channel on freenode. If there's -no one there, post a message on the [mailing list][6]. - - -Coding standards ----------------- - -sabre projects follow: - -1. [PSR-1][1] -2. [PSR-4][2] - -sabre projects don't follow [PSR-2][3]. - -In addition to that, here's a list of basic rules: - -1. PHP 5.4 array syntax must be used every where. This means you use `[` and - `]` instead of `array(` and `)`. -2. Use PHP namespaces everywhere. -3. Use 4 spaces for indentation. -4. Try to keep your lines under 80 characters. This is not a hard rule, as - there are many places in the source where it felt more sensibile to not - do so. In particular, function declarations are never split over multiple - lines. -5. Opening braces (`{`) are _always_ on the same line as the `class`, `if`, - `function`, etc. they belong to. -6. `public` must be omitted from method declarations. It must also be omitted - for static properties. -7. All files should use unix-line endings (`\n`). -8. Files must omit the closing php tag (`?>`). -9. `true`, `false` and `null` are always lower-case. -10. Constants are always upper-case. -11. Any of the rules stated before may be broken where this is the pragmatic - thing to do. - - -Unit test requirements ----------------------- - -Any new feature or change requires unittests. We use [PHPUnit][7] for all our -tests. - -Adding unittests will greatly increase the likelyhood of us quickly accepting -your pull request. If unittests are not included though for whatever reason, -we'd still _love_ your pull request. - -We may have to write the tests ourselves, which can increase the time it takes -to accept the patch, but we'd still really like your contribution! - -To run the testsuite jump into the directory `cd tests` and trigger `phpunit`. -Make sure you did a `composer install` beforehand. - -Release process ---------------- - -Generally, these are the steps taken to do releases. - -1. Update the changelog. Every repo will have a `CHANGELOG.md` file. This file - should have a new version, and contain all the changes since the last - release. I generally run a `git diff` to figure out if I missed any changes. - This file should also have the current date. -2. If there were BC breaks, this usually now means a major version bump. -3. Ensure that `lib/Version.php` or `lib/DAV/Version.php` also matches this - version number. -4. Tag the release (Example `git tag 3.0.1` and push the tag (`git push --tags`). -5. (only for the sabre/dav project), create a zip distribution. Run - `php bin/build.php`. -6. For the relevant project, go to github and click the 'releases' tab. On this - tab I create the release with the relevant version. I also set the - description of the release to the same information of the changelog. In the - case of the `sabre/dav` project I also upload the zip distribution here. -7. Write a blog post on sabre.io. This also automatically updates twitter. - - -[1]: http://www.php-fig.org/psr/psr-1/ -[2]: http://www.php-fig.org/psr/psr-4/ -[3]: http://www.php-fig.org/psr/psr-2/ -[4]: http://sabre.io/ -[5]: irc://freenode.net/#sabredav -[6]: http://groups.google.com/group/sabredav-discuss -[7]: http://phpunit.de/ diff --git a/vendor/sabre/dav/bin/build.php b/vendor/sabre/dav/bin/build.php index 54174a777..4dd25d9c9 100755 --- a/vendor/sabre/dav/bin/build.php +++ b/vendor/sabre/dav/bin/build.php @@ -32,7 +32,7 @@ if ($argc > 2) { if (!isset($tasks[$currentTask])) { echo 'Task not found: ', $currentTask, "\n"; - die(1); + exit(1); } // Creating the dependency graph @@ -43,7 +43,7 @@ while (count($oldTaskList) > 0) { foreach ($oldTaskList as $task => $foo) { if (!isset($tasks[$task])) { echo 'Dependency not found: '.$task, "\n"; - die(1); + exit(1); } $dependencies = $tasks[$task]; @@ -107,7 +107,7 @@ function test() system(__DIR__.'/phpunit --configuration '.$baseDir.'/tests/phpunit.xml.dist --stop-on-failure', $code); if (0 != $code) { echo "PHPUnit reported error code $code\n"; - die(1); + exit(1); } } @@ -139,7 +139,7 @@ function buildzip() system('cd build/SabreDAV; composer install -n', $code); if (0 !== $code) { echo "Composer reported error code $code\n"; - die(1); + exit(1); } echo " Removing pointless files\n"; diff --git a/vendor/sabre/dav/bin/migrateto20.php b/vendor/sabre/dav/bin/migrateto20.php index c7a8d9e35..fb24fe599 100755 --- a/vendor/sabre/dav/bin/migrateto20.php +++ b/vendor/sabre/dav/bin/migrateto20.php @@ -72,7 +72,7 @@ switch ($driver) { break; default: echo 'Error: unsupported driver: '.$driver."\n"; - die(-1); + exit(-1); } foreach (['calendar', 'addressbook'] as $itemType) { @@ -130,7 +130,6 @@ foreach (['calendar', 'addressbook'] as $itemType) { break; case 'sqlite': - $pdo->exec("ALTER TABLE $tableName RENAME TO $tableNameOld"); switch ($itemType) { @@ -370,7 +369,6 @@ CREATE TABLE cards ( break; case 'sqlite': - $pdo->exec(' CREATE TABLE cards ( id integer primary key asc, @@ -395,7 +393,6 @@ CREATE TABLE cards ( break; case 'sqlite': - $pdo->exec(' ALTER TABLE cards ADD etag text; ALTER TABLE cards ADD size integer; diff --git a/vendor/sabre/dav/bin/migrateto21.php b/vendor/sabre/dav/bin/migrateto21.php index 909643583..2c15b0a21 100755 --- a/vendor/sabre/dav/bin/migrateto21.php +++ b/vendor/sabre/dav/bin/migrateto21.php @@ -73,7 +73,7 @@ switch ($driver) { break; default: echo 'Error: unsupported driver: '.$driver."\n"; - die(-1); + exit(-1); } echo "Upgrading 'calendarobjects'\n"; diff --git a/vendor/sabre/dav/bin/migrateto30.php b/vendor/sabre/dav/bin/migrateto30.php index 25e544c2a..9798cadd2 100755 --- a/vendor/sabre/dav/bin/migrateto30.php +++ b/vendor/sabre/dav/bin/migrateto30.php @@ -72,7 +72,7 @@ switch ($driver) { break; default: echo 'Error: unsupported driver: '.$driver."\n"; - die(-1); + exit(-1); } echo "Upgrading 'propertystorage'\n"; diff --git a/vendor/sabre/dav/bin/migrateto32.php b/vendor/sabre/dav/bin/migrateto32.php index 57fd35507..09ac55d13 100755 --- a/vendor/sabre/dav/bin/migrateto32.php +++ b/vendor/sabre/dav/bin/migrateto32.php @@ -75,7 +75,7 @@ switch ($driver) { break; default: echo 'Error: unsupported driver: '.$driver."\n"; - die(-1); + exit(-1); } echo "Creating 'calendarinstances'\n"; diff --git a/vendor/sabre/dav/bin/sabredav.php b/vendor/sabre/dav/bin/sabredav.php index 28341b587..71047b8f8 100755 --- a/vendor/sabre/dav/bin/sabredav.php +++ b/vendor/sabre/dav/bin/sabredav.php @@ -20,7 +20,7 @@ class CliLog $log = new CliLog(); if ('cli-server' !== php_sapi_name()) { - die('This script is intended to run on the built-in php webserver'); + exit('This script is intended to run on the built-in php webserver'); } // Finding composer diff --git a/vendor/sabre/dav/composer.json b/vendor/sabre/dav/composer.json index fa912faf5..7c9596d21 100644 --- a/vendor/sabre/dav/composer.json +++ b/vendor/sabre/dav/composer.json @@ -33,7 +33,7 @@ "ext-json": "*" }, "require-dev" : { - "friendsofphp/php-cs-fixer": "^2.16.7", + "friendsofphp/php-cs-fixer": "^2.17.1", "phpstan/phpstan": "^0.12", "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.0", "evert/phpdoc-md" : "~0.1.0", diff --git a/vendor/sabre/dav/lib/CalDAV/Backend/PDO.php b/vendor/sabre/dav/lib/CalDAV/Backend/PDO.php index 7a07724b3..0d5df3968 100644 --- a/vendor/sabre/dav/lib/CalDAV/Backend/PDO.php +++ b/vendor/sabre/dav/lib/CalDAV/Backend/PDO.php @@ -7,6 +7,7 @@ namespace Sabre\CalDAV\Backend; use Sabre\CalDAV; use Sabre\DAV; use Sabre\DAV\Exception\Forbidden; +use Sabre\DAV\PropPatch; use Sabre\DAV\Xml\Element\Sharee; use Sabre\VObject; @@ -289,7 +290,7 @@ SQL * * @param mixed $calendarId */ - public function updateCalendar($calendarId, \Sabre\DAV\PropPatch $propPatch) + public function updateCalendar($calendarId, PropPatch $propPatch) { if (!is_array($calendarId)) { throw new \InvalidArgumentException('The value passed to $calendarId is expected to be an array with a calendarId and an instanceId'); @@ -779,17 +780,20 @@ SQL $componentType = $filters['comp-filters'][0]['name']; // Checking if we need post-filters - if (!$filters['prop-filters'] && !$filters['comp-filters'][0]['comp-filters'] && !$filters['comp-filters'][0]['time-range'] && !$filters['comp-filters'][0]['prop-filters']) { + $has_time_range = array_key_exists('time-range', $filters['comp-filters'][0]) && $filters['comp-filters'][0]['time-range']; + if (!$filters['prop-filters'] && !$filters['comp-filters'][0]['comp-filters'] && !$has_time_range && !$filters['comp-filters'][0]['prop-filters']) { $requirePostFilter = false; } // There was a time-range filter - if ('VEVENT' == $componentType && isset($filters['comp-filters'][0]['time-range'])) { + if ('VEVENT' == $componentType && $has_time_range) { $timeRange = $filters['comp-filters'][0]['time-range']; // If start time OR the end time is not specified, we can do a // 100% accurate mysql query. - if (!$filters['prop-filters'] && !$filters['comp-filters'][0]['comp-filters'] && !$filters['comp-filters'][0]['prop-filters'] && (!$timeRange['start'] || !$timeRange['end'])) { - $requirePostFilter = false; + if (!$filters['prop-filters'] && !$filters['comp-filters'][0]['comp-filters'] && !$filters['comp-filters'][0]['prop-filters'] && $timeRange) { + if ((array_key_exists('start', $timeRange) && !$timeRange['start']) || (array_key_exists('end', $timeRange) && !$timeRange['end'])) { + $requirePostFilter = false; + } } } } @@ -809,11 +813,11 @@ SQL $values['componenttype'] = $componentType; } - if ($timeRange && $timeRange['start']) { + if ($timeRange && array_key_exists('start', $timeRange) && $timeRange['start']) { $query .= ' AND lastoccurence > :startdate'; $values['startdate'] = $timeRange['start']->getTimeStamp(); } - if ($timeRange && $timeRange['end']) { + if ($timeRange && array_key_exists('end', $timeRange) && $timeRange['end']) { $query .= ' AND firstoccurence < :enddate'; $values['enddate'] = $timeRange['end']->getTimeStamp(); } @@ -1153,10 +1157,9 @@ SQL; * * Read the PropPatch documentation for more info and examples. * - * @param mixed $subscriptionId - * @param \Sabre\DAV\PropPatch $propPatch + * @param mixed $subscriptionId */ - public function updateSubscription($subscriptionId, DAV\PropPatch $propPatch) + public function updateSubscription($subscriptionId, PropPatch $propPatch) { $supportedProperties = array_keys($this->subscriptionPropertyMap); $supportedProperties[] = '{http://calendarserver.org/ns/}source'; diff --git a/vendor/sabre/dav/lib/CalDAV/CalendarQueryValidator.php b/vendor/sabre/dav/lib/CalDAV/CalendarQueryValidator.php index 7ce1c05b7..ee525da7a 100644 --- a/vendor/sabre/dav/lib/CalDAV/CalendarQueryValidator.php +++ b/vendor/sabre/dav/lib/CalDAV/CalendarQueryValidator.php @@ -67,9 +67,17 @@ class CalendarQueryValidator return false; } - if ($filter['time-range']) { + if (array_key_exists('time-range', $filter) && $filter['time-range']) { foreach ($parent->{$filter['name']} as $subComponent) { - if ($this->validateTimeRange($subComponent, $filter['time-range']['start'], $filter['time-range']['end'])) { + $start = null; + $end = null; + if (array_key_exists('start', $filter['time-range'])) { + $start = $filter['time-range']['start']; + } + if (array_key_exists('end', $filter['time-range'])) { + $end = $filter['time-range']['end']; + } + if ($this->validateTimeRange($subComponent, $start, $end)) { continue 2; } } @@ -128,9 +136,17 @@ class CalendarQueryValidator return false; } - if ($filter['time-range']) { + if (array_key_exists('time-range', $filter) && $filter['time-range']) { foreach ($parent->{$filter['name']} as $subComponent) { - if ($this->validateTimeRange($subComponent, $filter['time-range']['start'], $filter['time-range']['end'])) { + $start = null; + $end = null; + if (array_key_exists('start', $filter['time-range'])) { + $start = $filter['time-range']['start']; + } + if (array_key_exists('end', $filter['time-range'])) { + $end = $filter['time-range']['end']; + } + if ($this->validateTimeRange($subComponent, $start, $end)) { continue 2; } } @@ -258,11 +274,9 @@ class CalendarQueryValidator case 'VEVENT': case 'VTODO': case 'VJOURNAL': - return $component->isInTimeRange($start, $end); case 'VALARM': - // If the valarm is wrapped in a recurring event, we need to // expand the recursions, and validate each. // diff --git a/vendor/sabre/dav/lib/CalDAV/Schedule/Plugin.php b/vendor/sabre/dav/lib/CalDAV/Schedule/Plugin.php index a1f8202ec..38a7ca96f 100644 --- a/vendor/sabre/dav/lib/CalDAV/Schedule/Plugin.php +++ b/vendor/sabre/dav/lib/CalDAV/Schedule/Plugin.php @@ -486,6 +486,7 @@ class Plugin extends ServerPlugin $currentObject = null; $objectNode = null; + $oldICalendarData = null; $isNewNode = false; $result = $home->getCalendarObjectByUID($uid); diff --git a/vendor/sabre/dav/lib/CalDAV/SharingPlugin.php b/vendor/sabre/dav/lib/CalDAV/SharingPlugin.php index 090cc34bf..f7dca9be6 100644 --- a/vendor/sabre/dav/lib/CalDAV/SharingPlugin.php +++ b/vendor/sabre/dav/lib/CalDAV/SharingPlugin.php @@ -213,7 +213,6 @@ class SharingPlugin extends DAV\ServerPlugin // Both the DAV:share-resource and CALENDARSERVER:share requests // behave identically. case '{'.Plugin::NS_CALENDARSERVER.'}share': - $sharingPlugin = $this->server->getPlugin('sharing'); $sharingPlugin->shareResource($path, $message->sharees); @@ -228,7 +227,6 @@ class SharingPlugin extends DAV\ServerPlugin // The invite-reply document is sent when the user replies to an // invitation of a calendar share. case '{'.Plugin::NS_CALENDARSERVER.'}invite-reply': - // This only works on the calendar-home-root node. if (!$node instanceof CalendarHome) { return; @@ -272,7 +270,6 @@ class SharingPlugin extends DAV\ServerPlugin return false; case '{'.Plugin::NS_CALENDARSERVER.'}publish-calendar': - // We can only deal with IShareableCalendar objects if (!$node instanceof ISharedCalendar) { return; @@ -300,7 +297,6 @@ class SharingPlugin extends DAV\ServerPlugin return false; case '{'.Plugin::NS_CALENDARSERVER.'}unpublish-calendar': - // We can only deal with IShareableCalendar objects if (!$node instanceof ISharedCalendar) { return; diff --git a/vendor/sabre/dav/lib/CalDAV/Xml/Filter/CalendarData.php b/vendor/sabre/dav/lib/CalDAV/Xml/Filter/CalendarData.php index baa4250ab..c9656d8a3 100644 --- a/vendor/sabre/dav/lib/CalDAV/Xml/Filter/CalendarData.php +++ b/vendor/sabre/dav/lib/CalDAV/Xml/Filter/CalendarData.php @@ -60,7 +60,6 @@ class CalendarData implements XmlDeserializable foreach ($elems as $elem) { switch ($elem['name']) { case '{'.Plugin::NS_CALDAV.'}expand': - $result['expand'] = [ 'start' => isset($elem['attributes']['start']) ? DateTimeParser::parseDateTime($elem['attributes']['start']) : null, 'end' => isset($elem['attributes']['end']) ? DateTimeParser::parseDateTime($elem['attributes']['end']) : null, diff --git a/vendor/sabre/dav/lib/CardDAV/Backend/PDO.php b/vendor/sabre/dav/lib/CardDAV/Backend/PDO.php index a33de48de..966d7ba09 100644 --- a/vendor/sabre/dav/lib/CardDAV/Backend/PDO.php +++ b/vendor/sabre/dav/lib/CardDAV/Backend/PDO.php @@ -6,6 +6,7 @@ namespace Sabre\CardDAV\Backend; use Sabre\CardDAV; use Sabre\DAV; +use Sabre\DAV\PropPatch; /** * PDO CardDAV backend. @@ -93,7 +94,7 @@ class PDO extends AbstractBackend implements SyncSupport * * @param string $addressBookId */ - public function updateAddressBook($addressBookId, \Sabre\DAV\PropPatch $propPatch) + public function updateAddressBook($addressBookId, PropPatch $propPatch) { $supportedProperties = [ '{DAV:}displayname', diff --git a/vendor/sabre/dav/lib/CardDAV/Plugin.php b/vendor/sabre/dav/lib/CardDAV/Plugin.php index 09d1f593d..c2d31d9df 100644 --- a/vendor/sabre/dav/lib/CardDAV/Plugin.php +++ b/vendor/sabre/dav/lib/CardDAV/Plugin.php @@ -587,14 +587,21 @@ class Plugin extends DAV\ServerPlugin foreach ($vProperties as $vProperty) { // If we got all the way here, we'll need to validate the // text-match filter. - $success = DAV\StringUtil::textMatch($vProperty[$filter['name']]->getValue(), $filter['text-match']['value'], $filter['text-match']['collation'], $filter['text-match']['match-type']); + if (isset($vProperty[$filter['name']])) { + $success = DAV\StringUtil::textMatch( + $vProperty[$filter['name']]->getValue(), + $filter['text-match']['value'], + $filter['text-match']['collation'], + $filter['text-match']['match-type'] + ); + if ($filter['text-match']['negate-condition']) { + $success = !$success; + } + } if ($success) { break; } } - if ($filter['text-match']['negate-condition']) { - $success = !$success; - } } // else // There are two conditions where we can already determine whether @@ -628,15 +635,15 @@ class Plugin extends DAV\ServerPlugin $success = false; foreach ($texts as $haystack) { $success = DAV\StringUtil::textMatch($haystack, $filter['value'], $filter['collation'], $filter['match-type']); + if ($filter['negate-condition']) { + $success = !$success; + } // Breaking on the first match if ($success) { break; } } - if ($filter['negate-condition']) { - $success = !$success; - } if ($success && 'anyof' === $test) { return true; diff --git a/vendor/sabre/dav/lib/CardDAV/Xml/Request/AddressBookQueryReport.php b/vendor/sabre/dav/lib/CardDAV/Xml/Request/AddressBookQueryReport.php index d3651ae61..e1096fe28 100644 --- a/vendor/sabre/dav/lib/CardDAV/Xml/Request/AddressBookQueryReport.php +++ b/vendor/sabre/dav/lib/CardDAV/Xml/Request/AddressBookQueryReport.php @@ -146,7 +146,6 @@ class AddressBookQueryReport implements XmlDeserializable } break; case '{'.Plugin::NS_CARDDAV.'}filter': - if (!is_null($newProps['filters'])) { throw new BadRequest('You can only include 1 {'.Plugin::NS_CARDDAV.'}filter element'); } diff --git a/vendor/sabre/dav/lib/DAV/Browser/Plugin.php b/vendor/sabre/dav/lib/DAV/Browser/Plugin.php index 915f2895b..2f155d9ea 100644 --- a/vendor/sabre/dav/lib/DAV/Browser/Plugin.php +++ b/vendor/sabre/dav/lib/DAV/Browser/Plugin.php @@ -157,6 +157,9 @@ class Plugin extends DAV\ServerPlugin public function httpPOST(RequestInterface $request, ResponseInterface $response) { $contentType = $request->getHeader('Content-Type'); + if (!\is_string($contentType)) { + return; + } list($contentType) = explode(';', $contentType); if ('application/x-www-form-urlencoded' !== $contentType && 'multipart/form-data' !== $contentType) { @@ -209,7 +212,6 @@ class Plugin extends DAV\ServerPlugin // @codeCoverageIgnoreStart case 'put': - if ($_FILES) { $file = current($_FILES); } else { diff --git a/vendor/sabre/dav/lib/DAV/Exception/MethodNotAllowed.php b/vendor/sabre/dav/lib/DAV/Exception/MethodNotAllowed.php index d1ac349bd..dbf42ed9f 100644 --- a/vendor/sabre/dav/lib/DAV/Exception/MethodNotAllowed.php +++ b/vendor/sabre/dav/lib/DAV/Exception/MethodNotAllowed.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace Sabre\DAV\Exception; use Sabre\DAV; +use Sabre\DAV\Server; /** * MethodNotAllowed. @@ -34,7 +35,7 @@ class MethodNotAllowed extends DAV\Exception * * @return array */ - public function getHTTPHeaders(\Sabre\DAV\Server $server) + public function getHTTPHeaders(Server $server) { $methods = $server->getAllowedMethods($server->getRequestUri()); diff --git a/vendor/sabre/dav/lib/DAV/FSExt/File.php b/vendor/sabre/dav/lib/DAV/FSExt/File.php index 060ef5a48..74849b564 100644 --- a/vendor/sabre/dav/lib/DAV/FSExt/File.php +++ b/vendor/sabre/dav/lib/DAV/FSExt/File.php @@ -41,7 +41,7 @@ class File extends Node implements DAV\PartialUpdate\IPatchSupport * * The second argument is the type of update we're doing. * This is either: - * * 1. append + * * 1. append (default) * * 2. update based on a start byte * * 3. update based on an end byte *; @@ -75,6 +75,9 @@ class File extends Node implements DAV\PartialUpdate\IPatchSupport $f = fopen($this->path, 'c'); fseek($f, $offset, SEEK_END); break; + default: + $f = fopen($this->path, 'a'); + break; } if (is_string($data)) { fwrite($f, $data); diff --git a/vendor/sabre/dav/lib/DAV/Server.php b/vendor/sabre/dav/lib/DAV/Server.php index 4c213c1bd..de663d0c1 100644 --- a/vendor/sabre/dav/lib/DAV/Server.php +++ b/vendor/sabre/dav/lib/DAV/Server.php @@ -25,8 +25,8 @@ use Sabre\Xml\Writer; */ class Server implements LoggerAwareInterface, EmitterInterface { - use WildcardEmitterTrait; use LoggerAwareTrait; + use WildcardEmitterTrait; /** * Infinity is used for some request supporting the HTTP Depth header and indicates that the operation should traverse the entire tree. diff --git a/vendor/sabre/dav/lib/DAV/Sharing/Plugin.php b/vendor/sabre/dav/lib/DAV/Sharing/Plugin.php index 3a41e67b4..e7adbeee6 100644 --- a/vendor/sabre/dav/lib/DAV/Sharing/Plugin.php +++ b/vendor/sabre/dav/lib/DAV/Sharing/Plugin.php @@ -179,7 +179,6 @@ class Plugin extends ServerPlugin switch ($documentType) { case '{DAV:}share-resource': - $this->shareResource($path, $message->sharees); $response->setStatus(200); // Adding this because sending a response body may cause issues, diff --git a/vendor/sabre/dav/lib/DAV/Tree.php b/vendor/sabre/dav/lib/DAV/Tree.php index aedc0155d..2417979a6 100644 --- a/vendor/sabre/dav/lib/DAV/Tree.php +++ b/vendor/sabre/dav/lib/DAV/Tree.php @@ -292,6 +292,8 @@ class Tree $destinationName = $source->getName(); } + $destination = null; + if ($source instanceof IFile) { $data = $source->get(); diff --git a/vendor/sabre/dav/lib/DAV/Version.php b/vendor/sabre/dav/lib/DAV/Version.php index 70948305e..b25d6c07a 100644 --- a/vendor/sabre/dav/lib/DAV/Version.php +++ b/vendor/sabre/dav/lib/DAV/Version.php @@ -16,5 +16,5 @@ class Version /** * Full version number. */ - public const VERSION = '4.1.3'; + public const VERSION = '4.1.5'; } diff --git a/vendor/sabre/dav/lib/DAV/Xml/Property/GetLastModified.php b/vendor/sabre/dav/lib/DAV/Xml/Property/GetLastModified.php index c6f6d421c..efc15c293 100644 --- a/vendor/sabre/dav/lib/DAV/Xml/Property/GetLastModified.php +++ b/vendor/sabre/dav/lib/DAV/Xml/Property/GetLastModified.php @@ -98,7 +98,6 @@ class GetLastModified implements Element */ public static function xmlDeserialize(Reader $reader) { - return - new self(new DateTime($reader->parseInnerTree())); + return new self(new DateTime($reader->parseInnerTree())); } } diff --git a/vendor/sabre/dav/lib/DAV/Xml/Property/Href.php b/vendor/sabre/dav/lib/DAV/Xml/Property/Href.php index 0ed14dcf3..f88ce814a 100644 --- a/vendor/sabre/dav/lib/DAV/Xml/Property/Href.php +++ b/vendor/sabre/dav/lib/DAV/Xml/Property/Href.php @@ -39,9 +39,6 @@ class Href implements Element, HtmlOutput * * You must either pass a string for a single href, or an array of hrefs. * - * If auto-prefix is set to false, the hrefs will be treated as absolute - * and not relative to the servers base uri. - * * @param string|string[] $hrefs */ public function __construct($hrefs) diff --git a/vendor/sabre/dav/lib/DAV/Xml/Property/ResourceType.php b/vendor/sabre/dav/lib/DAV/Xml/Property/ResourceType.php index 6532b70c9..75ddcba3f 100644 --- a/vendor/sabre/dav/lib/DAV/Xml/Property/ResourceType.php +++ b/vendor/sabre/dav/lib/DAV/Xml/Property/ResourceType.php @@ -94,8 +94,7 @@ class ResourceType extends Element\Elements implements HtmlOutput */ public static function xmlDeserialize(Reader $reader) { - return - new self(parent::xmlDeserialize($reader)); + return new self(parent::xmlDeserialize($reader)); } /** diff --git a/vendor/sabre/dav/phpstan.neon b/vendor/sabre/dav/phpstan.neon deleted file mode 100644 index 5335bc651..000000000 --- a/vendor/sabre/dav/phpstan.neon +++ /dev/null @@ -1,2 +0,0 @@ -parameters: - level: 0 diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Backend/AbstractPDOTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Backend/AbstractPDOTest.php deleted file mode 100644 index 9460b8922..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Backend/AbstractPDOTest.php +++ /dev/null @@ -1,1397 +0,0 @@ -dropTables([ - 'calendarobjects', - 'calendars', - 'calendarinstances', - 'calendarchanges', - 'calendarsubscriptions', - 'schedulingobjects', - ]); - $this->createSchema('calendars'); - - $this->pdo = $this->getDb(); - } - - public function testConstruct() - { - $backend = new PDO($this->pdo); - $this->assertTrue($backend instanceof PDO); - } - - /** - * @depends testConstruct - */ - public function testGetCalendarsForUserNoCalendars() - { - $backend = new PDO($this->pdo); - $calendars = $backend->getCalendarsForUser('principals/user2'); - $this->assertEquals([], $calendars); - } - - /** - * @depends testConstruct - */ - public function testCreateCalendarAndFetch() - { - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', [ - '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new CalDAV\Xml\Property\SupportedCalendarComponentSet(['VEVENT']), - '{DAV:}displayname' => 'Hello!', - '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp' => new CalDAV\Xml\Property\ScheduleCalendarTransp('transparent'), - ]); - $calendars = $backend->getCalendarsForUser('principals/user2'); - - $elementCheck = [ - 'uri' => 'somerandomid', - '{DAV:}displayname' => 'Hello!', - '{urn:ietf:params:xml:ns:caldav}calendar-description' => '', - '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp' => new CalDAV\Xml\Property\ScheduleCalendarTransp('transparent'), - 'share-access' => \Sabre\DAV\Sharing\Plugin::ACCESS_SHAREDOWNER, - ]; - - $this->assertIsArray($calendars); - $this->assertEquals(1, count($calendars)); - - foreach ($elementCheck as $name => $value) { - $this->assertArrayHasKey($name, $calendars[0]); - $this->assertEquals($value, $calendars[0][$name]); - } - } - - /** - * @depends testConstruct - */ - public function testUpdateCalendarAndFetch() - { - $backend = new PDO($this->pdo); - - //Creating a new calendar - $newId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $propPatch = new PropPatch([ - '{DAV:}displayname' => 'myCalendar', - '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp' => new CalDAV\Xml\Property\ScheduleCalendarTransp('transparent'), - ]); - - // Updating the calendar - $backend->updateCalendar($newId, $propPatch); - $result = $propPatch->commit(); - - // Verifying the result of the update - $this->assertTrue($result); - - // Fetching all calendars from this user - $calendars = $backend->getCalendarsForUser('principals/user2'); - - // Checking if all the information is still correct - $elementCheck = [ - 'id' => $newId, - 'uri' => 'somerandomid', - '{DAV:}displayname' => 'myCalendar', - '{urn:ietf:params:xml:ns:caldav}calendar-description' => '', - '{urn:ietf:params:xml:ns:caldav}calendar-timezone' => '', - '{http://calendarserver.org/ns/}getctag' => 'http://sabre.io/ns/sync/2', - '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp' => new CalDAV\Xml\Property\ScheduleCalendarTransp('transparent'), - ]; - - $this->assertIsArray($calendars); - $this->assertEquals(1, count($calendars)); - - foreach ($elementCheck as $name => $value) { - $this->assertArrayHasKey($name, $calendars[0]); - $this->assertEquals($value, $calendars[0][$name]); - } - } - - /** - * @depends testConstruct - */ - public function testUpdateCalendarBadId() - { - $this->expectException('InvalidArgumentException'); - $backend = new PDO($this->pdo); - - //Creating a new calendar - $newId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $propPatch = new PropPatch([ - '{DAV:}displayname' => 'myCalendar', - '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp' => new CalDAV\Xml\Property\ScheduleCalendarTransp('transparent'), - ]); - - // Updating the calendar - $backend->updateCalendar('raaaa', $propPatch); - } - - /** - * @depends testUpdateCalendarAndFetch - */ - public function testUpdateCalendarUnknownProperty() - { - $backend = new PDO($this->pdo); - - //Creating a new calendar - $newId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $propPatch = new PropPatch([ - '{DAV:}displayname' => 'myCalendar', - '{DAV:}yourmom' => 'wittycomment', - ]); - - // Updating the calendar - $backend->updateCalendar($newId, $propPatch); - $propPatch->commit(); - - // Verifying the result of the update - $this->assertEquals([ - '{DAV:}yourmom' => 403, - '{DAV:}displayname' => 424, - ], $propPatch->getResult()); - } - - /** - * @depends testCreateCalendarAndFetch - */ - public function testDeleteCalendar() - { - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', [ - '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new CalDAV\Xml\Property\SupportedCalendarComponentSet(['VEVENT']), - '{DAV:}displayname' => 'Hello!', - ]); - - $backend->deleteCalendar($returnedId); - - $calendars = $backend->getCalendarsForUser('principals/user2'); - $this->assertEquals([], $calendars); - } - - /** - * @depends testCreateCalendarAndFetch - */ - public function testDeleteCalendarBadID() - { - $this->expectException('InvalidArgumentException'); - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', [ - '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new CalDAV\Xml\Property\SupportedCalendarComponentSet(['VEVENT']), - '{DAV:}displayname' => 'Hello!', - ]); - - $backend->deleteCalendar('bad-id'); - } - - /** - * @depends testCreateCalendarAndFetch - */ - public function testCreateCalendarIncorrectComponentSet() - { - $this->expectException('Sabre\DAV\Exception'); - $backend = new PDO($this->pdo); - - //Creating a new calendar - $newId = $backend->createCalendar('principals/user2', 'somerandomid', [ - '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => 'blabla', - ]); - } - - public function testCreateCalendarObject() - { - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; - - $backend->createCalendarObject($returnedId, 'random-id', $object); - - $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = \'random-id\''); - - $row = $result->fetch(\PDO::FETCH_ASSOC); - if (is_resource($row['calendardata'])) { - $row['calendardata'] = stream_get_contents($row['calendardata']); - } - - $this->assertEquals([ - 'etag' => md5($object), - 'size' => strlen($object), - 'calendardata' => $object, - 'firstoccurence' => strtotime('20120101'), - 'lastoccurence' => strtotime('20120101') + (3600 * 24), - 'componenttype' => 'VEVENT', - ], $row); - } - - public function testGetMultipleObjects() - { - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; - - $backend->createCalendarObject($returnedId, 'id-1', $object); - $backend->createCalendarObject($returnedId, 'id-2', $object); - - $check = [ - [ - 'id' => 1, - 'etag' => '"'.md5($object).'"', - 'uri' => 'id-1', - 'size' => strlen($object), - 'calendardata' => $object, - 'lastmodified' => null, - ], - [ - 'id' => 2, - 'etag' => '"'.md5($object).'"', - 'uri' => 'id-2', - 'size' => strlen($object), - 'calendardata' => $object, - 'lastmodified' => null, - ], - ]; - - $result = $backend->getMultipleCalendarObjects($returnedId, ['id-1', 'id-2']); - - foreach ($check as $index => $props) { - foreach ($props as $key => $expected) { - $actual = $result[$index][$key]; - - switch ($key) { - case 'lastmodified': - $this->assertIsInt($actual); - break; - case 'calendardata': - if (is_resource($actual)) { - $actual = stream_get_contents($actual); - } - // no break intentional - default: - $this->assertEquals($expected, $actual); - } - } - } - } - - /** - * @depends testGetMultipleObjects - */ - public function testGetMultipleObjectsBadId() - { - $this->expectException('InvalidArgumentException'); - $backend = new PDO($this->pdo); - $backend->getMultipleCalendarObjects('bad-id', ['foo-bar']); - } - - /** - * @depends testCreateCalendarObject - */ - public function testCreateCalendarObjectNoComponent() - { - $this->expectException('Sabre\DAV\Exception\BadRequest'); - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nEND:VCALENDAR\r\n"; - - $backend->createCalendarObject($returnedId, 'random-id', $object); - } - - /** - * @depends testCreateCalendarObject - */ - public function testCreateCalendarObjectDuration() - { - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nDURATION:P2D\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; - - $backend->createCalendarObject($returnedId, 'random-id', $object); - - $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = \'random-id\''); - - $row = $result->fetch(\PDO::FETCH_ASSOC); - if (is_resource($row['calendardata'])) { - $row['calendardata'] = stream_get_contents($row['calendardata']); - } - - $this->assertEquals([ - 'etag' => md5($object), - 'size' => strlen($object), - 'calendardata' => $object, - 'firstoccurence' => strtotime('20120101'), - 'lastoccurence' => strtotime('20120101') + (3600 * 48), - 'componenttype' => 'VEVENT', - ], $row); - } - - /** - * @depends testCreateCalendarObject - */ - public function testCreateCalendarObjectBadId() - { - $this->expectException('InvalidArgumentException'); - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nDURATION:P2D\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; - - $backend->createCalendarObject('bad-id', 'random-id', $object); - } - - /** - * @depends testCreateCalendarObject - */ - public function testCreateCalendarObjectNoDTEND() - { - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; - - $backend->createCalendarObject($returnedId, 'random-id', $object); - - $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = \'random-id\''); - $row = $result->fetch(\PDO::FETCH_ASSOC); - if (is_resource($row['calendardata'])) { - $row['calendardata'] = stream_get_contents($row['calendardata']); - } - - $this->assertEquals([ - 'etag' => md5($object), - 'size' => strlen($object), - 'calendardata' => $object, - 'firstoccurence' => strtotime('2012-01-01 10:00:00'), - 'lastoccurence' => strtotime('2012-01-01 10:00:00'), - 'componenttype' => 'VEVENT', - ], $row); - } - - /** - * @depends testCreateCalendarObject - */ - public function testCreateCalendarObjectWithDTEND() - { - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nDTEND:20120101T110000Z\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; - - $backend->createCalendarObject($returnedId, 'random-id', $object); - - $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = \'random-id\''); - $row = $result->fetch(\PDO::FETCH_ASSOC); - if (is_resource($row['calendardata'])) { - $row['calendardata'] = stream_get_contents($row['calendardata']); - } - - $this->assertEquals([ - 'etag' => md5($object), - 'size' => strlen($object), - 'calendardata' => $object, - 'firstoccurence' => strtotime('2012-01-01 10:00:00'), - 'lastoccurence' => strtotime('2012-01-01 11:00:00'), - 'componenttype' => 'VEVENT', - ], $row); - } - - /** - * @depends testCreateCalendarObject - */ - public function testCreateCalendarObjectInfiniteRecurrence() - { - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nRRULE:FREQ=DAILY\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; - - $backend->createCalendarObject($returnedId, 'random-id', $object); - - $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = \'random-id\''); - $row = $result->fetch(\PDO::FETCH_ASSOC); - if (is_resource($row['calendardata'])) { - $row['calendardata'] = stream_get_contents($row['calendardata']); - } - - $this->assertEquals([ - 'etag' => md5($object), - 'size' => strlen($object), - 'calendardata' => $object, - 'firstoccurence' => strtotime('2012-01-01 10:00:00'), - 'lastoccurence' => strtotime(PDO::MAX_DATE), - 'componenttype' => 'VEVENT', - ], $row); - } - - /** - * @depends testCreateCalendarObject - */ - public function testCreateCalendarObjectEndingRecurrence() - { - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE-TIME:20120101T100000Z\r\nDTEND;VALUE=DATE-TIME:20120101T110000Z\r\nUID:foo\r\nRRULE:FREQ=DAILY;COUNT=1000\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; - - $backend->createCalendarObject($returnedId, 'random-id', $object); - - $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = \'random-id\''); - $row = $result->fetch(\PDO::FETCH_ASSOC); - if (is_resource($row['calendardata'])) { - $row['calendardata'] = stream_get_contents($row['calendardata']); - } - - $this->assertEquals([ - 'etag' => md5($object), - 'size' => strlen($object), - 'calendardata' => $object, - 'firstoccurence' => strtotime('2012-01-01 10:00:00'), - 'lastoccurence' => strtotime('2012-01-01 11:00:00') + (3600 * 24 * 999), - 'componenttype' => 'VEVENT', - ], $row); - } - - /** - * @depends testCreateCalendarObject - */ - public function testCreateCalendarObjectTask() - { - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nDUE;VALUE=DATE-TIME:20120101T100000Z\r\nEND:VTODO\r\nEND:VCALENDAR\r\n"; - - $backend->createCalendarObject($returnedId, 'random-id', $object); - - $result = $this->pdo->query('SELECT etag, size, calendardata, firstoccurence, lastoccurence, componenttype FROM calendarobjects WHERE uri = \'random-id\''); - $row = $result->fetch(\PDO::FETCH_ASSOC); - if (is_resource($row['calendardata'])) { - $row['calendardata'] = stream_get_contents($row['calendardata']); - } - - $this->assertEquals([ - 'etag' => md5($object), - 'size' => strlen($object), - 'calendardata' => $object, - 'firstoccurence' => null, - 'lastoccurence' => null, - 'componenttype' => 'VTODO', - ], $row); - } - - /** - * @depends testCreateCalendarObject - */ - public function testGetCalendarObjects() - { - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; - $backend->createCalendarObject($returnedId, 'random-id', $object); - - $data = $backend->getCalendarObjects($returnedId); - - $this->assertEquals(1, count($data)); - $data = $data[0]; - - $this->assertEquals('random-id', $data['uri']); - $this->assertEquals(strlen($object), $data['size']); - } - - /** - * @depends testGetCalendarObjects - */ - public function testGetCalendarObjectsBadId() - { - $this->expectException('InvalidArgumentException'); - $backend = new PDO($this->pdo); - $backend->getCalendarObjects('bad-id'); - } - - /** - * @depends testGetCalendarObjects - */ - public function testGetCalendarObjectBadId() - { - $this->expectException('InvalidArgumentException'); - $backend = new PDO($this->pdo); - $backend->getCalendarObject('bad-id', 'foo-bar'); - } - - /** - * @depends testCreateCalendarObject - */ - public function testGetCalendarObjectByUID() - { - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:foo\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; - $backend->createCalendarObject($returnedId, 'random-id', $object); - - $this->assertNull( - $backend->getCalendarObjectByUID('principals/user2', 'bar') - ); - $this->assertEquals( - 'somerandomid/random-id', - $backend->getCalendarObjectByUID('principals/user2', 'foo') - ); - } - - /** - * @depends testCreateCalendarObject - */ - public function testUpdateCalendarObject() - { - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; - $object2 = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20130101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; - $backend->createCalendarObject($returnedId, 'random-id', $object); - $backend->updateCalendarObject($returnedId, 'random-id', $object2); - - $data = $backend->getCalendarObject($returnedId, 'random-id'); - - if (is_resource($data['calendardata'])) { - $data['calendardata'] = stream_get_contents($data['calendardata']); - } - - $this->assertEquals($object2, $data['calendardata']); - $this->assertEquals('random-id', $data['uri']); - } - - /** - * @depends testUpdateCalendarObject - */ - public function testUpdateCalendarObjectBadId() - { - $this->expectException('InvalidArgumentException'); - $backend = new PDO($this->pdo); - $backend->updateCalendarObject('bad-id', 'object-id', 'objectdata'); - } - - /** - * @depends testCreateCalendarObject - */ - public function testDeleteCalendarObject() - { - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; - $backend->createCalendarObject($returnedId, 'random-id', $object); - $backend->deleteCalendarObject($returnedId, 'random-id'); - - $data = $backend->getCalendarObject($returnedId, 'random-id'); - $this->assertNull($data); - } - - /** - * @depends testDeleteCalendarObject - */ - public function testDeleteCalendarObjectBadId() - { - $this->expectException('InvalidArgumentException'); - $backend = new PDO($this->pdo); - $returnedId = $backend->createCalendar('principals/user2', 'somerandomid', []); - - $object = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"; - $backend->createCalendarObject($returnedId, 'random-id', $object); - $backend->deleteCalendarObject('bad-id', 'random-id'); - } - - public function testCalendarQueryNoResult() - { - $abstract = new PDO($this->pdo); - $filters = [ - 'name' => 'VCALENDAR', - 'comp-filters' => [ - [ - 'name' => 'VJOURNAL', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ], - ], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ]; - - $this->assertEquals([ - ], $abstract->calendarQuery([1, 1], $filters)); - } - - /** - * @depends testCalendarQueryNoResult - */ - public function testCalendarQueryBadId() - { - $this->expectException('InvalidArgumentException'); - $abstract = new PDO($this->pdo); - $filters = [ - 'name' => 'VCALENDAR', - 'comp-filters' => [ - [ - 'name' => 'VJOURNAL', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ], - ], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ]; - - $abstract->calendarQuery('bad-id', $filters); - } - - public function testCalendarQueryTodo() - { - $backend = new PDO($this->pdo); - $backend->createCalendarObject([1, 1], 'todo', "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n"); - $backend->createCalendarObject([1, 1], 'event', "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); - - $filters = [ - 'name' => 'VCALENDAR', - 'comp-filters' => [ - [ - 'name' => 'VTODO', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ], - ], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ]; - - $this->assertEquals([ - 'todo', - ], $backend->calendarQuery([1, 1], $filters)); - } - - public function testCalendarQueryTodoNotMatch() - { - $backend = new PDO($this->pdo); - $backend->createCalendarObject([1, 1], 'todo', "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n"); - $backend->createCalendarObject([1, 1], 'event', "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); - - $filters = [ - 'name' => 'VCALENDAR', - 'comp-filters' => [ - [ - 'name' => 'VTODO', - 'comp-filters' => [], - 'prop-filters' => [ - [ - 'name' => 'summary', - 'text-match' => null, - 'time-range' => null, - 'param-filters' => [], - 'is-not-defined' => false, - ], - ], - 'is-not-defined' => false, - 'time-range' => null, - ], - ], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ]; - - $this->assertEquals([ - ], $backend->calendarQuery([1, 1], $filters)); - } - - public function testCalendarQueryNoFilter() - { - $backend = new PDO($this->pdo); - $backend->createCalendarObject([1, 1], 'todo', "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n"); - $backend->createCalendarObject([1, 1], 'event', "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); - - $filters = [ - 'name' => 'VCALENDAR', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ]; - - $result = $backend->calendarQuery([1, 1], $filters); - $this->assertTrue(in_array('todo', $result)); - $this->assertTrue(in_array('event', $result)); - } - - public function testCalendarQueryTimeRange() - { - $backend = new PDO($this->pdo); - $backend->createCalendarObject([1, 1], 'todo', "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n"); - $backend->createCalendarObject([1, 1], 'event', "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); - $backend->createCalendarObject([1, 1], 'event2', "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART;VALUE=DATE:20120103\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); - - $filters = [ - 'name' => 'VCALENDAR', - 'comp-filters' => [ - [ - 'name' => 'VEVENT', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => [ - 'start' => new \DateTime('20120103'), - 'end' => new \DateTime('20120104'), - ], - ], - ], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ]; - - $this->assertEquals([ - 'event2', - ], $backend->calendarQuery([1, 1], $filters)); - } - - public function testCalendarQueryTimeRangeNoEnd() - { - $backend = new PDO($this->pdo); - $backend->createCalendarObject([1, 1], 'todo', "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n"); - $backend->createCalendarObject([1, 1], 'event', "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120101\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); - $backend->createCalendarObject([1, 1], 'event2', "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDTSTART:20120103\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); - - $filters = [ - 'name' => 'VCALENDAR', - 'comp-filters' => [ - [ - 'name' => 'VEVENT', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => [ - 'start' => new \DateTime('20120102'), - 'end' => null, - ], - ], - ], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ]; - - $this->assertEquals([ - 'event2', - ], $backend->calendarQuery([1, 1], $filters)); - } - - public function testGetChanges() - { - $backend = new PDO($this->pdo); - $id = $backend->createCalendar( - 'principals/user1', - 'bla', - [] - ); - $result = $backend->getChangesForCalendar($id, null, 1); - - $this->assertEquals([ - 'syncToken' => 1, - 'modified' => [], - 'deleted' => [], - 'added' => [], - ], $result); - - $currentToken = $result['syncToken']; - - $dummyTodo = "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n"; - - $backend->createCalendarObject($id, 'todo1.ics', $dummyTodo); - $backend->createCalendarObject($id, 'todo2.ics', $dummyTodo); - $backend->createCalendarObject($id, 'todo3.ics', $dummyTodo); - $backend->updateCalendarObject($id, 'todo1.ics', $dummyTodo); - $backend->deleteCalendarObject($id, 'todo2.ics'); - - $result = $backend->getChangesForCalendar($id, $currentToken, 1); - - $this->assertEquals([ - 'syncToken' => 6, - 'modified' => ['todo1.ics'], - 'deleted' => ['todo2.ics'], - 'added' => ['todo3.ics'], - ], $result); - - $result = $backend->getChangesForCalendar($id, null, 1); - - $this->assertEquals([ - 'syncToken' => 6, - 'modified' => [], - 'deleted' => [], - 'added' => ['todo1.ics', 'todo3.ics'], - ], $result); - } - - /** - * @depends testGetChanges - */ - public function testGetChangesBadId() - { - $this->expectException('InvalidArgumentException'); - $backend = new PDO($this->pdo); - $id = $backend->createCalendar( - 'principals/user1', - 'bla', - [] - ); - $backend->getChangesForCalendar('bad-id', null, 1); - } - - public function testCreateSubscriptions() - { - $props = [ - '{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href('http://example.org/cal.ics', false), - '{DAV:}displayname' => 'cal', - '{http://apple.com/ns/ical/}refreshrate' => 'P1W', - '{http://apple.com/ns/ical/}calendar-color' => '#FF00FFFF', - '{http://calendarserver.org/ns/}subscribed-strip-todos' => true, - //'{http://calendarserver.org/ns/}subscribed-strip-alarms' => true, - '{http://calendarserver.org/ns/}subscribed-strip-attachments' => true, - ]; - - $backend = new PDO($this->pdo); - $backend->createSubscription('principals/user1', 'sub1', $props); - - $subs = $backend->getSubscriptionsForUser('principals/user1'); - - $expected = $props; - $expected['id'] = 1; - $expected['uri'] = 'sub1'; - $expected['principaluri'] = 'principals/user1'; - - unset($expected['{http://calendarserver.org/ns/}source']); - $expected['source'] = 'http://example.org/cal.ics'; - - $this->assertEquals(1, count($subs)); - foreach ($expected as $k => $v) { - $this->assertEquals($subs[0][$k], $expected[$k]); - } - } - - public function testCreateSubscriptionFail() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $props = [ - ]; - - $backend = new PDO($this->pdo); - $backend->createSubscription('principals/user1', 'sub1', $props); - } - - public function testUpdateSubscriptions() - { - $props = [ - '{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href('http://example.org/cal.ics', false), - '{DAV:}displayname' => 'cal', - '{http://apple.com/ns/ical/}refreshrate' => 'P1W', - '{http://apple.com/ns/ical/}calendar-color' => '#FF00FFFF', - '{http://calendarserver.org/ns/}subscribed-strip-todos' => true, - //'{http://calendarserver.org/ns/}subscribed-strip-alarms' => true, - '{http://calendarserver.org/ns/}subscribed-strip-attachments' => true, - ]; - - $backend = new PDO($this->pdo); - $backend->createSubscription('principals/user1', 'sub1', $props); - - $newProps = [ - '{DAV:}displayname' => 'new displayname', - '{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href('http://example.org/cal2.ics', false), - ]; - - $propPatch = new DAV\PropPatch($newProps); - $backend->updateSubscription(1, $propPatch); - $result = $propPatch->commit(); - - $this->assertTrue($result); - - $subs = $backend->getSubscriptionsForUser('principals/user1'); - - $expected = array_merge($props, $newProps); - $expected['id'] = 1; - $expected['uri'] = 'sub1'; - $expected['principaluri'] = 'principals/user1'; - - unset($expected['{http://calendarserver.org/ns/}source']); - $expected['source'] = 'http://example.org/cal2.ics'; - - $this->assertEquals(1, count($subs)); - foreach ($expected as $k => $v) { - $this->assertEquals($subs[0][$k], $expected[$k]); - } - } - - public function testUpdateSubscriptionsFail() - { - $props = [ - '{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href('http://example.org/cal.ics', false), - '{DAV:}displayname' => 'cal', - '{http://apple.com/ns/ical/}refreshrate' => 'P1W', - '{http://apple.com/ns/ical/}calendar-color' => '#FF00FFFF', - '{http://calendarserver.org/ns/}subscribed-strip-todos' => true, - //'{http://calendarserver.org/ns/}subscribed-strip-alarms' => true, - '{http://calendarserver.org/ns/}subscribed-strip-attachments' => true, - ]; - - $backend = new PDO($this->pdo); - $backend->createSubscription('principals/user1', 'sub1', $props); - - $propPatch = new DAV\PropPatch([ - '{DAV:}displayname' => 'new displayname', - '{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href('http://example.org/cal2.ics', false), - '{DAV:}unknown' => 'foo', - ]); - - $backend->updateSubscription(1, $propPatch); - $propPatch->commit(); - - $this->assertEquals([ - '{DAV:}unknown' => 403, - '{DAV:}displayname' => 424, - '{http://calendarserver.org/ns/}source' => 424, - ], $propPatch->getResult()); - } - - public function testDeleteSubscriptions() - { - $props = [ - '{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href('http://example.org/cal.ics', false), - '{DAV:}displayname' => 'cal', - '{http://apple.com/ns/ical/}refreshrate' => 'P1W', - '{http://apple.com/ns/ical/}calendar-color' => '#FF00FFFF', - '{http://calendarserver.org/ns/}subscribed-strip-todos' => true, - //'{http://calendarserver.org/ns/}subscribed-strip-alarms' => true, - '{http://calendarserver.org/ns/}subscribed-strip-attachments' => true, - ]; - - $backend = new PDO($this->pdo); - $backend->createSubscription('principals/user1', 'sub1', $props); - - $newProps = [ - '{DAV:}displayname' => 'new displayname', - '{http://calendarserver.org/ns/}source' => new \Sabre\DAV\Xml\Property\Href('http://example.org/cal2.ics', false), - ]; - - $backend->deleteSubscription(1); - - $subs = $backend->getSubscriptionsForUser('principals/user1'); - $this->assertEquals(0, count($subs)); - } - - public function testSchedulingMethods() - { - $backend = new PDO($this->pdo); - - $calData = "BEGIN:VCALENDAR\r\nEND:VCALENDAR\r\n"; - - $backend->createSchedulingObject( - 'principals/user1', - 'schedule1.ics', - $calData - ); - - $calDataResource = "BEGIN:VCALENDAR\r\nEND:VCALENDAR\r\n"; - $stream = fopen('data://text/plain,'.$calData, 'r'); - - $backend->createSchedulingObject( - 'principals/user1', - 'schedule1-resource.ics', - $stream - ); - - $expected = [ - 'calendardata' => $calData, - 'uri' => 'schedule1.ics', - 'etag' => '"'.md5($calData).'"', - 'size' => strlen($calData), - ]; - - $expectedResource = [ - 'calendardata' => $calDataResource, - 'uri' => 'schedule1-resource.ics', - 'etag' => '"'.md5($calDataResource).'"', - 'size' => strlen($calDataResource), - ]; - - $result = $backend->getSchedulingObject('principals/user1', 'schedule1.ics'); - foreach ($expected as $k => $v) { - $this->assertArrayHasKey($k, $result); - if (is_resource($result[$k])) { - $result[$k] = stream_get_contents($result[$k]); - } - $this->assertEquals($v, $result[$k]); - } - - $resultResource = $backend->getSchedulingObject('principals/user1', 'schedule1-resource.ics'); - foreach ($expected as $k => $v) { - $this->assertArrayHasKey($k, $result); - if (is_resource($result[$k])) { - $result[$k] = stream_get_contents($result[$k]); - } - $this->assertEquals($v, $result[$k]); - } - - $backend->deleteSchedulingObject('principals/user1', 'schedule1-resource.ics'); - - $results = $backend->getSchedulingObjects('principals/user1'); - - $this->assertEquals(1, count($results)); - $result = $results[0]; - foreach ($expected as $k => $v) { - if (is_resource($result[$k])) { - $result[$k] = stream_get_contents($result[$k]); - } - $this->assertEquals($v, $result[$k]); - } - - $backend->deleteSchedulingObject('principals/user1', 'schedule1.ics'); - $result = $backend->getSchedulingObject('principals/user1', 'schedule1.ics'); - - $this->assertNull($result); - } - - public function testGetInvites() - { - $backend = new PDO($this->pdo); - - // creating a new calendar - $backend->createCalendar('principals/user1', 'somerandomid', []); - $calendar = $backend->getCalendarsForUser('principals/user1')[0]; - - $result = $backend->getInvites($calendar['id']); - $expected = [ - new Sharee([ - 'href' => 'principals/user1', - 'principal' => 'principals/user1', - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_SHAREDOWNER, - 'inviteStatus' => \Sabre\DAV\Sharing\Plugin::INVITE_ACCEPTED, - ]), - ]; - - $this->assertEquals($expected, $result); - } - - /** - * @depends testGetInvites - */ - public function testGetInvitesBadId() - { - $this->expectException('InvalidArgumentException'); - $backend = new PDO($this->pdo); - - // creating a new calendar - $backend->createCalendar('principals/user1', 'somerandomid', []); - $calendar = $backend->getCalendarsForUser('principals/user1')[0]; - - $backend->getInvites('bad-id'); - } - - /** - * @depends testCreateCalendarAndFetch - */ - public function testUpdateInvites() - { - $backend = new PDO($this->pdo); - - // creating a new calendar - $backend->createCalendar('principals/user1', 'somerandomid', []); - $calendar = $backend->getCalendarsForUser('principals/user1')[0]; - - $ownerSharee = new Sharee([ - 'href' => 'principals/user1', - 'principal' => 'principals/user1', - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_SHAREDOWNER, - 'inviteStatus' => \Sabre\DAV\Sharing\Plugin::INVITE_ACCEPTED, - ]); - - // Add a new invite - $backend->updateInvites( - $calendar['id'], - [ - new Sharee([ - 'href' => 'mailto:user@example.org', - 'principal' => 'principals/user2', - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_READ, - 'inviteStatus' => \Sabre\DAV\Sharing\Plugin::INVITE_ACCEPTED, - 'properties' => ['{DAV:}displayname' => 'User 2'], - ]), - ] - ); - - $result = $backend->getInvites($calendar['id']); - $expected = [ - $ownerSharee, - new Sharee([ - 'href' => 'mailto:user@example.org', - 'principal' => 'principals/user2', - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_READ, - 'inviteStatus' => \Sabre\DAV\Sharing\Plugin::INVITE_ACCEPTED, - 'properties' => [ - '{DAV:}displayname' => 'User 2', - ], - ]), - ]; - $this->assertEquals($expected, $result); - - // Checking calendar_instances too - $expectedCalendar = [ - 'id' => [1, 2], - 'principaluri' => 'principals/user2', - '{http://calendarserver.org/ns/}getctag' => 'http://sabre.io/ns/sync/1', - '{http://sabredav.org/ns}sync-token' => '1', - 'share-access' => \Sabre\DAV\Sharing\Plugin::ACCESS_READ, - 'read-only' => true, - 'share-resource-uri' => '/ns/share/1', - ]; - $calendars = $backend->getCalendarsForUser('principals/user2'); - - foreach ($expectedCalendar as $k => $v) { - $this->assertEquals( - $v, - $calendars[0][$k], - 'Key '.$k.' in calendars array did not have the expected value.' - ); - } - - // Updating an invite - $backend->updateInvites( - $calendar['id'], - [ - new Sharee([ - 'href' => 'mailto:user@example.org', - 'principal' => 'principals/user2', - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_READWRITE, - 'inviteStatus' => \Sabre\DAV\Sharing\Plugin::INVITE_ACCEPTED, - ]), - ] - ); - - $result = $backend->getInvites($calendar['id']); - $expected = [ - $ownerSharee, - new Sharee([ - 'href' => 'mailto:user@example.org', - 'principal' => 'principals/user2', - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_READWRITE, - 'inviteStatus' => \Sabre\DAV\Sharing\Plugin::INVITE_ACCEPTED, - 'properties' => [ - '{DAV:}displayname' => 'User 2', - ], - ]), - ]; - $this->assertEquals($expected, $result); - - // Removing an invite - $backend->updateInvites( - $calendar['id'], - [ - new Sharee([ - 'href' => 'mailto:user@example.org', - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_NOACCESS, - ]), - ] - ); - - $result = $backend->getInvites($calendar['id']); - $expected = [ - $ownerSharee, - ]; - $this->assertEquals($expected, $result); - - // Preventing the owner share from being removed - $backend->updateInvites( - $calendar['id'], - [ - new Sharee([ - 'href' => 'principals/user2', - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_NOACCESS, - ]), - ] - ); - - $result = $backend->getInvites($calendar['id']); - $expected = [ - new Sharee([ - 'href' => 'principals/user1', - 'principal' => 'principals/user1', - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_SHAREDOWNER, - 'inviteStatus' => \Sabre\DAV\Sharing\Plugin::INVITE_ACCEPTED, - ]), - ]; - $this->assertEquals($expected, $result); - } - - /** - * @depends testUpdateInvites - */ - public function testUpdateInvitesBadId() - { - $this->expectException('InvalidArgumentException'); - $backend = new PDO($this->pdo); - // Add a new invite - $backend->updateInvites( - 'bad-id', - [] - ); - } - - /** - * @depends testUpdateInvites - */ - public function testUpdateInvitesNoPrincipal() - { - $backend = new PDO($this->pdo); - - // creating a new calendar - $backend->createCalendar('principals/user1', 'somerandomid', []); - $calendar = $backend->getCalendarsForUser('principals/user1')[0]; - - $ownerSharee = new Sharee([ - 'href' => 'principals/user1', - 'principal' => 'principals/user1', - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_SHAREDOWNER, - 'inviteStatus' => \Sabre\DAV\Sharing\Plugin::INVITE_ACCEPTED, - ]); - - // Add a new invite - $backend->updateInvites( - $calendar['id'], - [ - new Sharee([ - 'href' => 'mailto:user@example.org', - 'principal' => null, - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_READ, - 'inviteStatus' => \Sabre\DAV\Sharing\Plugin::INVITE_ACCEPTED, - 'properties' => ['{DAV:}displayname' => 'User 2'], - ]), - ] - ); - - $result = $backend->getInvites($calendar['id']); - $expected = [ - $ownerSharee, - new Sharee([ - 'href' => 'mailto:user@example.org', - 'principal' => null, - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_READ, - 'inviteStatus' => \Sabre\DAV\Sharing\Plugin::INVITE_INVALID, - 'properties' => [ - '{DAV:}displayname' => 'User 2', - ], - ]), - ]; - $this->assertEqualsCanonicalizing($expected, $result); - } - - /** - * @depends testUpdateInvites - */ - public function testDeleteSharedCalendar() - { - $backend = new PDO($this->pdo); - - // creating a new calendar - $backend->createCalendar('principals/user1', 'somerandomid', []); - $calendar = $backend->getCalendarsForUser('principals/user1')[0]; - - $ownerSharee = new Sharee([ - 'href' => 'principals/user1', - 'principal' => 'principals/user1', - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_SHAREDOWNER, - 'inviteStatus' => \Sabre\DAV\Sharing\Plugin::INVITE_ACCEPTED, - ]); - - // Add a new invite - $backend->updateInvites( - $calendar['id'], - [ - new Sharee([ - 'href' => 'mailto:user@example.org', - 'principal' => 'principals/user2', - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_READ, - 'inviteStatus' => \Sabre\DAV\Sharing\Plugin::INVITE_ACCEPTED, - 'properties' => ['{DAV:}displayname' => 'User 2'], - ]), - ] - ); - - $expectedCalendar = [ - 'id' => [1, 2], - 'principaluri' => 'principals/user2', - '{http://calendarserver.org/ns/}getctag' => 'http://sabre.io/ns/sync/1', - '{http://sabredav.org/ns}sync-token' => '1', - 'share-access' => \Sabre\DAV\Sharing\Plugin::ACCESS_READ, - 'read-only' => true, - 'share-resource-uri' => '/ns/share/1', - ]; - $calendars = $backend->getCalendarsForUser('principals/user2'); - - foreach ($expectedCalendar as $k => $v) { - $this->assertEquals( - $v, - $calendars[0][$k], - 'Key '.$k.' in calendars array did not have the expected value.' - ); - } - - // Removing the shared calendar. - $backend->deleteCalendar($calendars[0]['id']); - - $this->assertEquals( - [], - $backend->getCalendarsForUser('principals/user2') - ); - - $result = $backend->getInvites($calendar['id']); - $expected = [ - new Sharee([ - 'href' => 'principals/user1', - 'principal' => 'principals/user1', - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_SHAREDOWNER, - 'inviteStatus' => \Sabre\DAV\Sharing\Plugin::INVITE_ACCEPTED, - ]), - ]; - $this->assertEquals($expected, $result); - } - - public function testSetPublishStatus() - { - $this->expectException('Sabre\DAV\Exception\NotImplemented'); - $backend = new PDO($this->pdo); - $backend->setPublishStatus([1, 1], true); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Backend/AbstractTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Backend/AbstractTest.php deleted file mode 100644 index 166de1dab..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Backend/AbstractTest.php +++ /dev/null @@ -1,184 +0,0 @@ - 'anything']); - - $abstract->updateCalendar('randomid', $propPatch); - $result = $propPatch->commit(); - - $this->assertFalse($result); - } - - public function testCalendarQuery() - { - $abstract = new AbstractMock(); - $filters = [ - 'name' => 'VCALENDAR', - 'comp-filters' => [ - [ - 'name' => 'VEVENT', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ], - ], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ]; - - $this->assertEquals([ - 'event1.ics', - ], $abstract->calendarQuery(1, $filters)); - } - - public function testGetCalendarObjectByUID() - { - $abstract = new AbstractMock(); - $this->assertNull( - $abstract->getCalendarObjectByUID('principal1', 'zim') - ); - $this->assertEquals( - 'cal1/event1.ics', - $abstract->getCalendarObjectByUID('principal1', 'foo') - ); - $this->assertNull( - $abstract->getCalendarObjectByUID('principal3', 'foo') - ); - $this->assertNull( - $abstract->getCalendarObjectByUID('principal1', 'shared') - ); - } - - public function testGetMultipleCalendarObjects() - { - $abstract = new AbstractMock(); - $result = $abstract->getMultipleCalendarObjects(1, [ - 'event1.ics', - 'task1.ics', - ]); - - $expected = [ - [ - 'id' => 1, - 'calendarid' => 1, - 'uri' => 'event1.ics', - 'calendardata' => "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n", - ], - [ - 'id' => 2, - 'calendarid' => 1, - 'uri' => 'task1.ics', - 'calendardata' => "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n", - ], - ]; - - $this->assertEquals($expected, $result); - } -} - -class AbstractMock extends AbstractBackend -{ - public function getCalendarsForUser($principalUri) - { - return [ - [ - 'id' => 1, - 'principaluri' => 'principal1', - 'uri' => 'cal1', - ], - [ - 'id' => 2, - 'principaluri' => 'principal1', - '{http://sabredav.org/ns}owner-principal' => 'principal2', - 'uri' => 'cal1', - ], - ]; - } - - public function createCalendar($principalUri, $calendarUri, array $properties) - { - } - - public function deleteCalendar($calendarId) - { - } - - public function getCalendarObjects($calendarId) - { - switch ($calendarId) { - case 1: - return [ - [ - 'id' => 1, - 'calendarid' => 1, - 'uri' => 'event1.ics', - ], - [ - 'id' => 2, - 'calendarid' => 1, - 'uri' => 'task1.ics', - ], - ]; - case 2: - return [ - [ - 'id' => 3, - 'calendarid' => 2, - 'uri' => 'shared-event.ics', - ], - ]; - } - } - - public function getCalendarObject($calendarId, $objectUri) - { - switch ($objectUri) { - case 'event1.ics': - return [ - 'id' => 1, - 'calendarid' => 1, - 'uri' => 'event1.ics', - 'calendardata' => "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n", - ]; - case 'task1.ics': - return [ - 'id' => 2, - 'calendarid' => 1, - 'uri' => 'task1.ics', - 'calendardata' => "BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n", - ]; - case 'shared-event.ics': - return [ - 'id' => 3, - 'calendarid' => 2, - 'uri' => 'event1.ics', - 'calendardata' => "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:shared\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n", - ]; - } - } - - public function createCalendarObject($calendarId, $objectUri, $calendarData) - { - } - - public function updateCalendarObject($calendarId, $objectUri, $calendarData) - { - } - - public function deleteCalendarObject($calendarId, $objectUri) - { - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Backend/Mock.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Backend/Mock.php deleted file mode 100644 index 01ac1b39e..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Backend/Mock.php +++ /dev/null @@ -1,247 +0,0 @@ -calendars = $calendars; - $this->calendarData = $calendarData; - } - - /** - * Returns a list of calendars for a principal. - * - * Every project is an array with the following keys: - * * id, a unique id that will be used by other functions to modify the - * calendar. This can be the same as the uri or a database key. - * * uri, which the basename of the uri with which the calendar is - * accessed. - * * principalUri. The owner of the calendar. Almost always the same as - * principalUri passed to this method. - * - * Furthermore it can contain webdav properties in clark notation. A very - * common one is '{DAV:}displayname'. - * - * @param string $principalUri - * - * @return array - */ - public function getCalendarsForUser($principalUri) - { - $r = []; - foreach ($this->calendars as $row) { - if ($row['principaluri'] == $principalUri) { - $r[] = $row; - } - } - - return $r; - } - - /** - * Creates a new calendar for a principal. - * - * If the creation was a success, an id must be returned that can be used to reference - * this calendar in other methods, such as updateCalendar. - * - * This function must return a server-wide unique id that can be used - * later to reference the calendar. - * - * @param string $principalUri - * @param string $calendarUri - * - * @return string|int - */ - public function createCalendar($principalUri, $calendarUri, array $properties) - { - $id = DAV\UUIDUtil::getUUID(); - $this->calendars[] = array_merge([ - 'id' => $id, - 'principaluri' => $principalUri, - 'uri' => $calendarUri, - '{'.CalDAV\Plugin::NS_CALDAV.'}supported-calendar-component-set' => new CalDAV\Xml\Property\SupportedCalendarComponentSet(['VEVENT', 'VTODO']), - ], $properties); - - return $id; - } - - /** - * Updates properties for a calendar. - * - * The list of mutations is stored in a Sabre\DAV\PropPatch object. - * To do the actual updates, you must tell this object which properties - * you're going to process with the handle() method. - * - * Calling the handle method is like telling the PropPatch object "I - * promise I can handle updating this property". - * - * Read the PropPatch documentation for more info and examples. - * - * @param mixed $calendarId - */ - public function updateCalendar($calendarId, \Sabre\DAV\PropPatch $propPatch) - { - $propPatch->handleRemaining(function ($props) use ($calendarId) { - foreach ($this->calendars as $k => $calendar) { - if ($calendar['id'] === $calendarId) { - foreach ($props as $propName => $propValue) { - if (is_null($propValue)) { - unset($this->calendars[$k][$propName]); - } else { - $this->calendars[$k][$propName] = $propValue; - } - } - - return true; - } - } - }); - } - - /** - * Delete a calendar and all it's objects. - * - * @param string $calendarId - */ - public function deleteCalendar($calendarId) - { - foreach ($this->calendars as $k => $calendar) { - if ($calendar['id'] === $calendarId) { - unset($this->calendars[$k]); - } - } - } - - /** - * Returns all calendar objects within a calendar object. - * - * Every item contains an array with the following keys: - * * id - unique identifier which will be used for subsequent updates - * * calendardata - The iCalendar-compatible calendar data - * * uri - a unique key which will be used to construct the uri. This can be any arbitrary string. - * * lastmodified - a timestamp of the last modification time - * * etag - An arbitrary string, surrounded by double-quotes. (e.g.: - * ' "abcdef"') - * * calendarid - The calendarid as it was passed to this function. - * - * Note that the etag is optional, but it's highly encouraged to return for - * speed reasons. - * - * The calendardata is also optional. If it's not returned - * 'getCalendarObject' will be called later, which *is* expected to return - * calendardata. - * - * @param string $calendarId - * - * @return array - */ - public function getCalendarObjects($calendarId) - { - if (!isset($this->calendarData[$calendarId])) { - return []; - } - - $objects = $this->calendarData[$calendarId]; - - foreach ($objects as $uri => &$object) { - $object['calendarid'] = $calendarId; - $object['uri'] = $uri; - $object['lastmodified'] = null; - } - - return $objects; - } - - /** - * Returns information from a single calendar object, based on it's object - * uri. - * - * The object uri is only the basename, or filename and not a full path. - * - * The returned array must have the same keys as getCalendarObjects. The - * 'calendardata' object is required here though, while it's not required - * for getCalendarObjects. - * - * This method must return null if the object did not exist. - * - * @param mixed $calendarId - * @param string $objectUri - * - * @return array|null - */ - public function getCalendarObject($calendarId, $objectUri) - { - if (!isset($this->calendarData[$calendarId][$objectUri])) { - return null; - } - $object = $this->calendarData[$calendarId][$objectUri]; - $object['calendarid'] = $calendarId; - $object['uri'] = $objectUri; - $object['lastmodified'] = null; - - return $object; - } - - /** - * Creates a new calendar object. - * - * @param string $calendarId - * @param string $objectUri - * @param string $calendarData - */ - public function createCalendarObject($calendarId, $objectUri, $calendarData) - { - $this->calendarData[$calendarId][$objectUri] = [ - 'calendardata' => $calendarData, - 'calendarid' => $calendarId, - 'uri' => $objectUri, - ]; - - return '"'.md5($calendarData).'"'; - } - - /** - * Updates an existing calendarobject, based on it's uri. - * - * @param string $calendarId - * @param string $objectUri - * @param string $calendarData - */ - public function updateCalendarObject($calendarId, $objectUri, $calendarData) - { - $this->calendarData[$calendarId][$objectUri] = [ - 'calendardata' => $calendarData, - 'calendarid' => $calendarId, - 'uri' => $objectUri, - ]; - - return '"'.md5($calendarData).'"'; - } - - /** - * Deletes an existing calendar object. - * - * @param string $calendarId - * @param string $objectUri - */ - public function deleteCalendarObject($calendarId, $objectUri) - { - unset($this->calendarData[$calendarId][$objectUri]); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Backend/PDOMySQLTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Backend/PDOMySQLTest.php deleted file mode 100644 index 66388def4..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Backend/PDOMySQLTest.php +++ /dev/null @@ -1,10 +0,0 @@ -backend = TestUtil::getBackend(); - - $calendars = $this->backend->getCalendarsForUser('principals/user1'); - $this->assertEquals(2, count($calendars)); - $this->calendar = new Calendar($this->backend, $calendars[0]); - } - - public function teardown(): void - { - unset($this->calendar); - unset($this->backend); - } - - public function testSetup() - { - $children = $this->calendar->getChildren(); - $this->assertTrue($children[0] instanceof CalendarObject); - - $this->assertIsString($children[0]->getName()); - $this->assertIsString($children[0]->get()); - $this->assertIsString($children[0]->getETag()); - $this->assertEquals('text/calendar; charset=utf-8', $children[0]->getContentType()); - } - - public function testInvalidArg1() - { - $this->expectException('InvalidArgumentException'); - $obj = new CalendarObject( - new Backend\Mock([], []), - [], - [] - ); - } - - public function testInvalidArg2() - { - $this->expectException('InvalidArgumentException'); - $obj = new CalendarObject( - new Backend\Mock([], []), - [], - ['calendarid' => '1'] - ); - } - - /** - * @depends testSetup - */ - public function testPut() - { - $children = $this->calendar->getChildren(); - $this->assertTrue($children[0] instanceof CalendarObject); - $newData = TestUtil::getTestCalendarData(); - - $children[0]->put($newData); - $this->assertEquals($newData, $children[0]->get()); - } - - /** - * @depends testSetup - */ - public function testPutStream() - { - $children = $this->calendar->getChildren(); - $this->assertTrue($children[0] instanceof CalendarObject); - $newData = TestUtil::getTestCalendarData(); - - $stream = fopen('php://temp', 'r+'); - fwrite($stream, $newData); - rewind($stream); - $children[0]->put($stream); - $this->assertEquals($newData, $children[0]->get()); - } - - /** - * @depends testSetup - */ - public function testDelete() - { - $children = $this->calendar->getChildren(); - $this->assertTrue($children[0] instanceof CalendarObject); - - $obj = $children[0]; - $obj->delete(); - - $children2 = $this->calendar->getChildren(); - $this->assertEquals(count($children) - 1, count($children2)); - } - - /** - * @depends testSetup - */ - public function testGetLastModified() - { - $children = $this->calendar->getChildren(); - $this->assertTrue($children[0] instanceof CalendarObject); - - $obj = $children[0]; - - $lastMod = $obj->getLastModified(); - $this->assertTrue(is_int($lastMod) || ctype_digit($lastMod) || is_null($lastMod)); - } - - /** - * @depends testSetup - */ - public function testGetSize() - { - $children = $this->calendar->getChildren(); - $this->assertTrue($children[0] instanceof CalendarObject); - - $obj = $children[0]; - - $size = $obj->getSize(); - $this->assertIsInt($size); - } - - public function testGetOwner() - { - $children = $this->calendar->getChildren(); - $this->assertTrue($children[0] instanceof CalendarObject); - - $obj = $children[0]; - $this->assertEquals('principals/user1', $obj->getOwner()); - } - - public function testGetGroup() - { - $children = $this->calendar->getChildren(); - $this->assertTrue($children[0] instanceof CalendarObject); - - $obj = $children[0]; - $this->assertNull($obj->getGroup()); - } - - public function testGetACL() - { - $expected = [ - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/user1', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/user1/calendar-proxy-write', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/user1/calendar-proxy-read', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}write', - 'principal' => 'principals/user1', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}write', - 'principal' => 'principals/user1/calendar-proxy-write', - 'protected' => true, - ], - ]; - - $children = $this->calendar->getChildren(); - $this->assertTrue($children[0] instanceof CalendarObject); - - $obj = $children[0]; - $this->assertEquals($expected, $obj->getACL()); - } - - public function testDefaultACL() - { - $backend = new Backend\Mock([], []); - $calendarObject = new CalendarObject($backend, ['principaluri' => 'principals/user1'], ['calendarid' => 1, 'uri' => 'foo']); - $expected = [ - [ - 'privilege' => '{DAV:}all', - 'principal' => 'principals/user1', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}all', - 'principal' => 'principals/user1/calendar-proxy-write', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/user1/calendar-proxy-read', - 'protected' => true, - ], - ]; - $this->assertEquals($expected, $calendarObject->getACL()); - } - - public function testSetACL() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $children = $this->calendar->getChildren(); - $this->assertTrue($children[0] instanceof CalendarObject); - - $obj = $children[0]; - $obj->setACL([]); - } - - public function testGet() - { - $children = $this->calendar->getChildren(); - $this->assertTrue($children[0] instanceof CalendarObject); - - $obj = $children[0]; - - $expected = 'BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//Apple Inc.//iCal 4.0.1//EN -CALSCALE:GREGORIAN -BEGIN:VTIMEZONE -TZID:Asia/Seoul -BEGIN:DAYLIGHT -TZOFFSETFROM:+0900 -RRULE:FREQ=YEARLY;UNTIL=19880507T150000Z;BYMONTH=5;BYDAY=2SU -DTSTART:19870510T000000 -TZNAME:GMT+09:00 -TZOFFSETTO:+1000 -END:DAYLIGHT -BEGIN:STANDARD -TZOFFSETFROM:+1000 -DTSTART:19881009T000000 -TZNAME:GMT+09:00 -TZOFFSETTO:+0900 -END:STANDARD -END:VTIMEZONE -BEGIN:VEVENT -CREATED:20100225T154229Z -UID:39A6B5ED-DD51-4AFE-A683-C35EE3749627 -TRANSP:TRANSPARENT -SUMMARY:Something here -DTSTAMP:20100228T130202Z -DTSTART;TZID=Asia/Seoul:20100223T060000 -DTEND;TZID=Asia/Seoul:20100223T070000 -ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com -SEQUENCE:2 -END:VEVENT -END:VCALENDAR'; - - $this->assertEquals($expected, $obj->get()); - } - - public function testGetRefetch() - { - $backend = new Backend\Mock([], [ - 1 => [ - 'foo' => [ - 'calendardata' => 'foo', - 'uri' => 'foo', - ], - ], - ]); - $obj = new CalendarObject($backend, ['id' => 1], ['uri' => 'foo']); - - $this->assertEquals('foo', $obj->get()); - } - - public function testGetEtag1() - { - $objectInfo = [ - 'calendardata' => 'foo', - 'uri' => 'foo', - 'etag' => 'bar', - 'calendarid' => 1, - ]; - - $backend = new Backend\Mock([], []); - $obj = new CalendarObject($backend, [], $objectInfo); - - $this->assertEquals('bar', $obj->getETag()); - } - - public function testGetEtag2() - { - $objectInfo = [ - 'calendardata' => 'foo', - 'uri' => 'foo', - 'calendarid' => 1, - ]; - - $backend = new Backend\Mock([], []); - $obj = new CalendarObject($backend, [], $objectInfo); - - $this->assertEquals('"'.md5('foo').'"', $obj->getETag()); - } - - public function testGetSupportedPrivilegesSet() - { - $objectInfo = [ - 'calendardata' => 'foo', - 'uri' => 'foo', - 'calendarid' => 1, - ]; - - $backend = new Backend\Mock([], []); - $obj = new CalendarObject($backend, [], $objectInfo); - $this->assertNull($obj->getSupportedPrivilegeSet()); - } - - public function testGetSize1() - { - $objectInfo = [ - 'calendardata' => 'foo', - 'uri' => 'foo', - 'calendarid' => 1, - ]; - - $backend = new Backend\Mock([], []); - $obj = new CalendarObject($backend, [], $objectInfo); - $this->assertEquals(3, $obj->getSize()); - } - - public function testGetSize2() - { - $objectInfo = [ - 'uri' => 'foo', - 'calendarid' => 1, - 'size' => 4, - ]; - - $backend = new Backend\Mock([], []); - $obj = new CalendarObject($backend, [], $objectInfo); - $this->assertEquals(4, $obj->getSize()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryVAlarmTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryVAlarmTest.php deleted file mode 100644 index 660832ba4..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryVAlarmTest.php +++ /dev/null @@ -1,121 +0,0 @@ -createComponent('VEVENT'); - $vevent->RRULE = 'FREQ=MONTHLY'; - $vevent->DTSTART = '20120101T120000Z'; - $vevent->UID = 'bla'; - - $valarm = $vcalendar->createComponent('VALARM'); - $valarm->TRIGGER = '-P15D'; - $vevent->add($valarm); - - $vcalendar->add($vevent); - - $filter = [ - 'name' => 'VCALENDAR', - 'is-not-defined' => false, - 'time-range' => null, - 'prop-filters' => [], - 'comp-filters' => [ - [ - 'name' => 'VEVENT', - 'is-not-defined' => false, - 'time-range' => null, - 'prop-filters' => [], - 'comp-filters' => [ - [ - 'name' => 'VALARM', - 'is-not-defined' => false, - 'prop-filters' => [], - 'comp-filters' => [], - 'time-range' => [ - 'start' => new \DateTime('2012-05-10'), - 'end' => new \DateTime('2012-05-20'), - ], - ], - ], - ], - ], - ]; - - $validator = new CalendarQueryValidator(); - $this->assertTrue($validator->validate($vcalendar, $filter)); - - $vcalendar = new VObject\Component\VCalendar(); - - // A limited recurrence rule, should return false - $vevent = $vcalendar->createComponent('VEVENT'); - $vevent->RRULE = 'FREQ=MONTHLY;COUNT=1'; - $vevent->DTSTART = '20120101T120000Z'; - $vevent->UID = 'bla'; - - $valarm = $vcalendar->createComponent('VALARM'); - $valarm->TRIGGER = '-P15D'; - $vevent->add($valarm); - - $vcalendar->add($vevent); - - $this->assertFalse($validator->validate($vcalendar, $filter)); - } - - public function testAlarmWayBefore() - { - $vcalendar = new VObject\Component\VCalendar(); - - $vevent = $vcalendar->createComponent('VEVENT'); - $vevent->DTSTART = '20120101T120000Z'; - $vevent->UID = 'bla'; - - $valarm = $vcalendar->createComponent('VALARM'); - $valarm->TRIGGER = '-P2W1D'; - $vevent->add($valarm); - - $vcalendar->add($vevent); - - $filter = [ - 'name' => 'VCALENDAR', - 'is-not-defined' => false, - 'time-range' => null, - 'prop-filters' => [], - 'comp-filters' => [ - [ - 'name' => 'VEVENT', - 'is-not-defined' => false, - 'time-range' => null, - 'prop-filters' => [], - 'comp-filters' => [ - [ - 'name' => 'VALARM', - 'is-not-defined' => false, - 'prop-filters' => [], - 'comp-filters' => [], - 'time-range' => [ - 'start' => new \DateTime('2011-12-10'), - 'end' => new \DateTime('2011-12-20'), - ], - ], - ], - ], - ], - ]; - - $validator = new CalendarQueryValidator(); - $this->assertTrue($validator->validate($vcalendar, $filter)); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryValidatorTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryValidatorTest.php deleted file mode 100644 index 9dc8ce188..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryValidatorTest.php +++ /dev/null @@ -1,823 +0,0 @@ -assertFalse($validator->validate($vcal, ['name' => 'VFOO'])); - } - - /** - * @param string $icalObject - * @param array $filters - * @param int $outcome - * @dataProvider provider - */ - public function testValid($icalObject, $filters, $outcome) - { - $validator = new CalendarQueryValidator(); - - // Wrapping filter in a VCALENDAR component filter, as this is always - // there anyway. - $filters = [ - 'name' => 'VCALENDAR', - 'comp-filters' => [$filters], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ]; - - $vObject = VObject\Reader::read($icalObject); - - switch ($outcome) { - case 0: - $this->assertFalse($validator->validate($vObject, $filters)); - break; - case 1: - $this->assertTrue($validator->validate($vObject, $filters)); - break; - case -1: - try { - $validator->validate($vObject, $filters); - $this->fail('This test was supposed to fail'); - } catch (\Exception $e) { - // We need to test something to be valid for phpunit strict - // mode. - $this->assertTrue(true); - } catch (\Throwable $e) { - // PHP7 - $this->assertTrue(true); - } - break; - } - } - - public function provider() - { - $blob1 = << 'VEVENT', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ]; - $filter2 = $filter1; - $filter2['name'] = 'VTODO'; - - $filter3 = $filter1; - $filter3['is-not-defined'] = true; - - $filter4 = $filter1; - $filter4['name'] = 'VTODO'; - $filter4['is-not-defined'] = true; - - $filter5 = $filter1; - $filter5['comp-filters'] = [ - [ - 'name' => 'VALARM', - 'is-not-defined' => false, - 'comp-filters' => [], - 'prop-filters' => [], - 'time-range' => null, - ], - ]; - $filter6 = $filter1; - $filter6['prop-filters'] = [ - [ - 'name' => 'SUMMARY', - 'is-not-defined' => false, - 'param-filters' => [], - 'time-range' => null, - 'text-match' => null, - ], - ]; - $filter7 = $filter6; - $filter7['prop-filters'][0]['name'] = 'DESCRIPTION'; - - $filter8 = $filter6; - $filter8['prop-filters'][0]['is-not-defined'] = true; - - $filter9 = $filter7; - $filter9['prop-filters'][0]['is-not-defined'] = true; - - $filter10 = $filter5; - $filter10['prop-filters'] = $filter6['prop-filters']; - - // Param filters - $filter11 = $filter1; - $filter11['prop-filters'] = [ - [ - 'name' => 'DTSTART', - 'is-not-defined' => false, - 'param-filters' => [ - [ - 'name' => 'VALUE', - 'is-not-defined' => false, - 'text-match' => null, - ], - ], - 'time-range' => null, - 'text-match' => null, - ], - ]; - - $filter12 = $filter11; - $filter12['prop-filters'][0]['param-filters'][0]['name'] = 'TZID'; - - $filter13 = $filter11; - $filter13['prop-filters'][0]['param-filters'][0]['is-not-defined'] = true; - - $filter14 = $filter12; - $filter14['prop-filters'][0]['param-filters'][0]['is-not-defined'] = true; - - // Param text filter - $filter15 = $filter11; - $filter15['prop-filters'][0]['param-filters'][0]['text-match'] = [ - 'collation' => 'i;ascii-casemap', - 'value' => 'dAtE', - 'negate-condition' => false, - ]; - $filter16 = $filter15; - $filter16['prop-filters'][0]['param-filters'][0]['text-match']['collation'] = 'i;octet'; - - $filter17 = $filter15; - $filter17['prop-filters'][0]['param-filters'][0]['text-match']['negate-condition'] = true; - - $filter18 = $filter15; - $filter18['prop-filters'][0]['param-filters'][0]['text-match']['negate-condition'] = true; - $filter18['prop-filters'][0]['param-filters'][0]['text-match']['collation'] = 'i;octet'; - - // prop + text - $filter19 = $filter5; - $filter19['comp-filters'][0]['prop-filters'] = [ - [ - 'name' => 'action', - 'is-not-defined' => false, - 'time-range' => null, - 'param-filters' => [], - 'text-match' => [ - 'collation' => 'i;ascii-casemap', - 'value' => 'display', - 'negate-condition' => false, - ], - ], - ]; - - // Time range - $filter20 = [ - 'name' => 'VEVENT', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => [ - 'start' => new \DateTime('2011-01-01 10:00:00', new \DateTimeZone('GMT')), - 'end' => new \DateTime('2011-01-01 13:00:00', new \DateTimeZone('GMT')), - ], - ]; - // Time range, no end date - $filter21 = $filter20; - $filter21['time-range']['end'] = null; - - // Time range, no start date - $filter22 = $filter20; - $filter22['time-range']['start'] = null; - - // Time range, other dates - $filter23 = $filter20; - $filter23['time-range'] = [ - 'start' => new \DateTime('2011-02-01 10:00:00', new \DateTimeZone('GMT')), - 'end' => new \DateTime('2011-02-01 13:00:00', new \DateTimeZone('GMT')), - ]; - // Time range - $filter24 = [ - 'name' => 'VTODO', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => [ - 'start' => new \DateTime('2011-01-01 12:45:00', new \DateTimeZone('GMT')), - 'end' => new \DateTime('2011-01-01 13:15:00', new \DateTimeZone('GMT')), - ], - ]; - // Time range, other dates (1 month in the future) - $filter25 = $filter24; - $filter25['time-range'] = [ - 'start' => new \DateTime('2011-02-01 10:00:00', new \DateTimeZone('GMT')), - 'end' => new \DateTime('2011-02-01 13:00:00', new \DateTimeZone('GMT')), - ]; - $filter26 = $filter24; - $filter26['time-range'] = [ - 'start' => new \DateTime('2011-01-01 11:45:00', new \DateTimeZone('GMT')), - 'end' => new \DateTime('2011-01-01 12:15:00', new \DateTimeZone('GMT')), - ]; - - // Time range for VJOURNAL - $filter27 = [ - 'name' => 'VJOURNAL', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => [ - 'start' => new \DateTime('2011-01-01 12:45:00', new \DateTimeZone('GMT')), - 'end' => new \DateTime('2011-01-01 13:15:00', new \DateTimeZone('GMT')), - ], - ]; - $filter28 = $filter27; - $filter28['time-range'] = [ - 'start' => new \DateTime('2011-01-01 11:45:00', new \DateTimeZone('GMT')), - 'end' => new \DateTime('2011-01-01 12:15:00', new \DateTimeZone('GMT')), - ]; - // Time range for VFREEBUSY - $filter29 = [ - 'name' => 'VFREEBUSY', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => [ - 'start' => new \DateTime('2011-01-01 12:45:00', new \DateTimeZone('GMT')), - 'end' => new \DateTime('2011-01-01 13:15:00', new \DateTimeZone('GMT')), - ], - ]; - // Time range filter on property - $filter30 = [ - 'name' => 'VEVENT', - 'comp-filters' => [], - 'prop-filters' => [ - [ - 'name' => 'DTSTART', - 'is-not-defined' => false, - 'param-filters' => [], - 'time-range' => [ - 'start' => new \DateTime('2011-01-01 10:00:00', new \DateTimeZone('GMT')), - 'end' => new \DateTime('2011-01-01 13:00:00', new \DateTimeZone('GMT')), - ], - 'text-match' => null, - ], - ], - 'is-not-defined' => false, - 'time-range' => null, - ]; - - // Time range for alarm - $filter31 = [ - 'name' => 'VEVENT', - 'prop-filters' => [], - 'comp-filters' => [ - [ - 'name' => 'VALARM', - 'is-not-defined' => false, - 'comp-filters' => [], - 'prop-filters' => [], - 'time-range' => [ - 'start' => new \DateTime('2011-01-01 10:45:00', new \DateTimeZone('GMT')), - 'end' => new \DateTime('2011-01-01 11:15:00', new \DateTimeZone('GMT')), - ], - 'text-match' => null, - ], - ], - 'is-not-defined' => false, - 'time-range' => null, - ]; - $filter32 = $filter31; - $filter32['comp-filters'][0]['time-range'] = [ - 'start' => new \DateTime('2011-01-01 11:45:00', new \DateTimeZone('GMT')), - 'end' => new \DateTime('2011-01-01 12:15:00', new \DateTimeZone('GMT')), - ]; - - $filter33 = $filter31; - $filter33['name'] = 'VTODO'; - $filter34 = $filter32; - $filter34['name'] = 'VTODO'; - $filter35 = $filter31; - $filter35['name'] = 'VJOURNAL'; - $filter36 = $filter32; - $filter36['name'] = 'VJOURNAL'; - - // Time range filter on non-datetime property - $filter37 = [ - 'name' => 'VEVENT', - 'comp-filters' => [], - 'prop-filters' => [ - [ - 'name' => 'SUMMARY', - 'is-not-defined' => false, - 'param-filters' => [], - 'time-range' => [ - 'start' => new \DateTime('2011-01-01 10:00:00', new \DateTimeZone('GMT')), - 'end' => new \DateTime('2011-01-01 13:00:00', new \DateTimeZone('GMT')), - ], - 'text-match' => null, - ], - ], - 'is-not-defined' => false, - 'time-range' => null, - ]; - - $filter38 = [ - 'name' => 'VEVENT', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => [ - 'start' => new \DateTime('2012-07-01 00:00:00', new \DateTimeZone('UTC')), - 'end' => new \DateTime('2012-08-01 00:00:00', new \DateTimeZone('UTC')), - ], - ]; - $filter39 = [ - 'name' => 'VEVENT', - 'comp-filters' => [ - [ - 'name' => 'VALARM', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => [ - 'start' => new \DateTime('2012-09-01 00:00:00', new \DateTimeZone('UTC')), - 'end' => new \DateTime('2012-10-01 00:00:00', new \DateTimeZone('UTC')), - ], - ], - ], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ]; - - return [ - // Component check - - [$blob1, $filter1, 1], - [$blob1, $filter2, 0], - [$blob1, $filter3, 0], - [$blob1, $filter4, 1], - - // Subcomponent check (4) - [$blob1, $filter5, 0], - [$blob2, $filter5, 1], - - // Property checki (6) - [$blob1, $filter6, 1], - [$blob1, $filter7, 0], - [$blob1, $filter8, 0], - [$blob1, $filter9, 1], - - // Subcomponent + property (10) - [$blob2, $filter10, 1], - - // Param filter (11) - [$blob3, $filter11, 1], - [$blob3, $filter12, 0], - [$blob3, $filter13, 0], - [$blob3, $filter14, 1], - - // Param + text (15) - [$blob3, $filter15, 1], - [$blob3, $filter16, 0], - [$blob3, $filter17, 0], - [$blob3, $filter18, 1], - - // Prop + text (19) - [$blob2, $filter19, 1], - - // Incorrect object (vcard) (20) - [$blob4, $filter1, -1], - - // Time-range for event (21) - [$blob5, $filter20, 1], - [$blob6, $filter20, 1], - [$blob7, $filter20, 1], - [$blob8, $filter20, 1], - - [$blob5, $filter21, 1], - [$blob5, $filter22, 1], - - [$blob5, $filter23, 0], - [$blob6, $filter23, 0], - [$blob7, $filter23, 0], - [$blob8, $filter23, 0], - - // Time-range for todo (31) - [$blob9, $filter24, 1], - [$blob9, $filter25, 0], - [$blob9, $filter26, 1], - [$blob10, $filter24, 1], - [$blob10, $filter25, 0], - [$blob10, $filter26, 1], - - [$blob11, $filter24, 0], - [$blob11, $filter25, 0], - [$blob11, $filter26, 1], - - [$blob12, $filter24, 1], - [$blob12, $filter25, 0], - [$blob12, $filter26, 0], - - [$blob13, $filter24, 1], - [$blob13, $filter25, 0], - [$blob13, $filter26, 1], - - [$blob14, $filter24, 1], - [$blob14, $filter25, 0], - [$blob14, $filter26, 0], - - [$blob15, $filter24, 1], - [$blob15, $filter25, 1], - [$blob15, $filter26, 1], - - [$blob16, $filter24, 1], - [$blob16, $filter25, 1], - [$blob16, $filter26, 1], - - // Time-range for journals (55) - [$blob17, $filter27, 0], - [$blob17, $filter28, 0], - [$blob18, $filter27, 0], - [$blob18, $filter28, 1], - [$blob19, $filter27, 1], - [$blob19, $filter28, 1], - - // Time-range for free-busy (61) - [$blob20, $filter29, -1], - - // Time-range on property (62) - [$blob5, $filter30, 1], - [$blob3, $filter37, -1], - [$blob3, $filter30, 0], - - // Time-range on alarm in vevent (65) - [$blob21, $filter31, 1], - [$blob21, $filter32, 0], - [$blob22, $filter31, 1], - [$blob22, $filter32, 0], - [$blob23, $filter31, 1], - [$blob23, $filter32, 0], - [$blob24, $filter31, 1], - [$blob24, $filter32, 0], - [$blob25, $filter31, 1], - [$blob25, $filter32, 0], - [$blob26, $filter31, 1], - [$blob26, $filter32, 0], - - // Time-range on alarm for vtodo (77) - [$blob27, $filter33, 1], - [$blob27, $filter34, 0], - - // Time-range on alarm for vjournal (79) - [$blob28, $filter35, -1], - [$blob28, $filter36, -1], - - // Time-range on alarm with duration (81) - [$blob29, $filter31, 1], - [$blob29, $filter32, 0], - [$blob30, $filter31, 0], - [$blob30, $filter32, 0], - - // Time-range with RRULE (85) - [$blob31, $filter20, 1], - [$blob32, $filter20, 0], - - // Bug reported on mailing list, related to all-day events (87) - //array($blob33, $filter38, 1), - - // Event in timerange, but filtered alarm is in the far future (88). - [$blob34, $filter39, 0], - ]; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/CalendarTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/CalendarTest.php deleted file mode 100644 index 18c3ec126..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/CalendarTest.php +++ /dev/null @@ -1,229 +0,0 @@ -backend = TestUtil::getBackend(); - - $this->calendars = $this->backend->getCalendarsForUser('principals/user1'); - $this->assertEquals(2, count($this->calendars)); - $this->calendar = new Calendar($this->backend, $this->calendars[0]); - } - - public function teardown(): void - { - unset($this->backend); - } - - public function testSimple() - { - $this->assertEquals($this->calendars[0]['uri'], $this->calendar->getName()); - } - - /** - * @depends testSimple - */ - public function testUpdateProperties() - { - $propPatch = new PropPatch([ - '{DAV:}displayname' => 'NewName', - ]); - - $result = $this->calendar->propPatch($propPatch); - $result = $propPatch->commit(); - - $this->assertEquals(true, $result); - - $calendars2 = $this->backend->getCalendarsForUser('principals/user1'); - $this->assertEquals('NewName', $calendars2[0]['{DAV:}displayname']); - } - - /** - * @depends testSimple - */ - public function testGetProperties() - { - $question = [ - '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set', - ]; - - $result = $this->calendar->getProperties($question); - - foreach ($question as $q) { - $this->assertArrayHasKey($q, $result); - } - - $this->assertEquals(['VEVENT', 'VTODO'], $result['{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set']->getValue()); - } - - /** - * @depends testSimple - */ - public function testGetChildNotFound() - { - $this->expectException('Sabre\DAV\Exception\NotFound'); - $this->calendar->getChild('randomname'); - } - - /** - * @depends testSimple - */ - public function testGetChildren() - { - $children = $this->calendar->getChildren(); - $this->assertEquals(1, count($children)); - - $this->assertTrue($children[0] instanceof CalendarObject); - } - - /** - * @depends testGetChildren - */ - public function testChildExists() - { - $this->assertFalse($this->calendar->childExists('foo')); - - $children = $this->calendar->getChildren(); - $this->assertTrue($this->calendar->childExists($children[0]->getName())); - } - - public function testCreateDirectory() - { - $this->expectException('Sabre\DAV\Exception\MethodNotAllowed'); - $this->calendar->createDirectory('hello'); - } - - public function testSetName() - { - $this->expectException('Sabre\DAV\Exception\MethodNotAllowed'); - $this->calendar->setName('hello'); - } - - public function testGetLastModified() - { - $this->assertNull($this->calendar->getLastModified()); - } - - public function testCreateFile() - { - $file = fopen('php://memory', 'r+'); - fwrite($file, TestUtil::getTestCalendarData()); - rewind($file); - - $this->calendar->createFile('hello', $file); - - $file = $this->calendar->getChild('hello'); - $this->assertTrue($file instanceof CalendarObject); - } - - public function testCreateFileNoSupportedComponents() - { - $file = fopen('php://memory', 'r+'); - fwrite($file, TestUtil::getTestCalendarData()); - rewind($file); - - $calendar = new Calendar($this->backend, $this->calendars[1]); - $calendar->createFile('hello', $file); - - $file = $calendar->getChild('hello'); - $this->assertTrue($file instanceof CalendarObject); - } - - public function testDelete() - { - $this->calendar->delete(); - - $calendars = $this->backend->getCalendarsForUser('principals/user1'); - $this->assertEquals(1, count($calendars)); - } - - public function testGetOwner() - { - $this->assertEquals('principals/user1', $this->calendar->getOwner()); - } - - public function testGetGroup() - { - $this->assertNull($this->calendar->getGroup()); - } - - public function testGetACL() - { - $expected = [ - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/user1', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/user1/calendar-proxy-write', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/user1/calendar-proxy-read', - 'protected' => true, - ], - [ - 'privilege' => '{'.Plugin::NS_CALDAV.'}read-free-busy', - 'principal' => '{DAV:}authenticated', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}write', - 'principal' => 'principals/user1', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}write', - 'principal' => 'principals/user1/calendar-proxy-write', - 'protected' => true, - ], - ]; - $this->assertEquals($expected, $this->calendar->getACL()); - } - - public function testSetACL() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $this->calendar->setACL([]); - } - - public function testGetSyncToken() - { - $this->assertNull($this->calendar->getSyncToken()); - } - - public function testGetSyncTokenNoSyncSupport() - { - $calendar = new Calendar(new Backend\Mock([], []), []); - $this->assertNull($calendar->getSyncToken()); - } - - public function testGetChanges() - { - $this->assertNull($this->calendar->getChanges(1, 1)); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/ExpandEventsDTSTARTandDTENDTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/ExpandEventsDTSTARTandDTENDTest.php deleted file mode 100644 index 93fc56dae..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/ExpandEventsDTSTARTandDTENDTest.php +++ /dev/null @@ -1,114 +0,0 @@ - 1, - 'name' => 'Calendar', - 'principaluri' => 'principals/user1', - 'uri' => 'calendar1', - ], - ]; - - protected $caldavCalendarObjects = [ - 1 => [ - 'event.ics' => [ - 'calendardata' => 'BEGIN:VCALENDAR -VERSION:2.0 -BEGIN:VEVENT -UID:foobar -DTEND;TZID=Europe/Berlin:20120207T191500 -RRULE:FREQ=DAILY;INTERVAL=1;COUNT=3 -SUMMARY:RecurringEvents 3 times -DTSTART;TZID=Europe/Berlin:20120207T181500 -END:VEVENT -BEGIN:VEVENT -CREATED:20120207T111900Z -UID:foobar -DTEND;TZID=Europe/Berlin:20120208T191500 -SUMMARY:RecurringEvents 3 times OVERWRITTEN -DTSTART;TZID=Europe/Berlin:20120208T181500 -RECURRENCE-ID;TZID=Europe/Berlin:20120208T181500 -END:VEVENT -END:VCALENDAR -', - ], - ], - ]; - - public function testExpand() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_CONTENT_TYPE' => 'application/xml', - 'REQUEST_URI' => '/calendars/user1/calendar1', - 'HTTP_DEPTH' => '1', - ]); - - $request->setBody(' - - - - - - - - - - - - - - -'); - - $response = $this->request($request); - - $bodyAsString = $response->getBodyAsString(); - // Everts super awesome xml parser. - $body = substr( - $bodyAsString, - $start = strpos($bodyAsString, 'BEGIN:VCALENDAR'), - strpos($bodyAsString, 'END:VCALENDAR') - $start + 13 - ); - $body = str_replace(' ', '', $body); - - try { - $vObject = VObject\Reader::read($body); - } catch (VObject\ParseException $e) { - $this->fail('Could not parse object. Error:'.$e->getMessage().' full object: '.$response->getBodyAsString()); - } - - // check if DTSTARTs and DTENDs are correct - foreach ($vObject->VEVENT as $vevent) { - /** @var $vevent Sabre\VObject\Component\VEvent */ - foreach ($vevent->children() as $child) { - /** @var $child Sabre\VObject\Property */ - if ('DTSTART' == $child->name) { - // DTSTART has to be one of three valid values - $this->assertContains($child->getValue(), ['20120207T171500Z', '20120208T171500Z', '20120209T171500Z'], 'DTSTART is not a valid value: '.$child->getValue()); - } elseif ('DTEND' == $child->name) { - // DTEND has to be one of three valid values - $this->assertContains($child->getValue(), ['20120207T181500Z', '20120208T181500Z', '20120209T181500Z'], 'DTEND is not a valid value: '.$child->getValue()); - } - } - } - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/ExpandEventsDTSTARTandDTENDbyDayTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/ExpandEventsDTSTARTandDTENDbyDayTest.php deleted file mode 100644 index 50fb6c03c..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/ExpandEventsDTSTARTandDTENDbyDayTest.php +++ /dev/null @@ -1,104 +0,0 @@ - 1, - 'name' => 'Calendar', - 'principaluri' => 'principals/user1', - 'uri' => 'calendar1', - ], - ]; - - protected $caldavCalendarObjects = [ - 1 => [ - 'event.ics' => [ - 'calendardata' => 'BEGIN:VCALENDAR -VERSION:2.0 -BEGIN:VEVENT -UID:foobar -DTEND;TZID=Europe/Berlin:20120207T191500 -RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH -SUMMARY:RecurringEvents on tuesday and thursday -DTSTART;TZID=Europe/Berlin:20120207T181500 -END:VEVENT -END:VCALENDAR -', - ], - ], - ]; - - public function testExpandRecurringByDayEvent() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_CONTENT_TYPE' => 'application/xml', - 'REQUEST_URI' => '/calendars/user1/calendar1', - 'HTTP_DEPTH' => '1', - ]); - - $request->setBody(' - - - - - - - - - - - - - - -'); - - $response = $this->request($request); - - $bodyAsString = $response->getBodyAsString(); - // Everts super awesome xml parser. - $body = substr( - $bodyAsString, - $start = strpos($bodyAsString, 'BEGIN:VCALENDAR'), - strpos($bodyAsString, 'END:VCALENDAR') - $start + 13 - ); - $body = str_replace(' ', '', $body); - - $vObject = VObject\Reader::read($body); - - $this->assertEquals(2, count($vObject->VEVENT)); - - // check if DTSTARTs and DTENDs are correct - foreach ($vObject->VEVENT as $vevent) { - /** @var $vevent Sabre\VObject\Component\VEvent */ - foreach ($vevent->children() as $child) { - /** @var $child Sabre\VObject\Property */ - if ('DTSTART' == $child->name) { - // DTSTART has to be one of two valid values - $this->assertContains($child->getValue(), ['20120214T171500Z', '20120216T171500Z'], 'DTSTART is not a valid value: '.$child->getValue()); - } elseif ('DTEND' == $child->name) { - // DTEND has to be one of two valid values - $this->assertContains($child->getValue(), ['20120214T181500Z', '20120216T181500Z'], 'DTEND is not a valid value: '.$child->getValue()); - } - } - } - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/ExpandEventsDoubleEventsTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/ExpandEventsDoubleEventsTest.php deleted file mode 100644 index 5e5c153e0..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/ExpandEventsDoubleEventsTest.php +++ /dev/null @@ -1,104 +0,0 @@ - 1, - 'name' => 'Calendar', - 'principaluri' => 'principals/user1', - 'uri' => 'calendar1', - ], - ]; - - protected $caldavCalendarObjects = [ - 1 => [ - 'event.ics' => [ - 'calendardata' => 'BEGIN:VCALENDAR -VERSION:2.0 -BEGIN:VEVENT -UID:foobar -DTEND;TZID=Europe/Berlin:20120207T191500 -RRULE:FREQ=DAILY;INTERVAL=1;COUNT=3 -SUMMARY:RecurringEvents 3 times -DTSTART;TZID=Europe/Berlin:20120207T181500 -END:VEVENT -BEGIN:VEVENT -CREATED:20120207T111900Z -UID:foobar -DTEND;TZID=Europe/Berlin:20120208T191500 -SUMMARY:RecurringEvents 3 times OVERWRITTEN -DTSTART;TZID=Europe/Berlin:20120208T181500 -RECURRENCE-ID;TZID=Europe/Berlin:20120208T181500 -END:VEVENT -END:VCALENDAR -', - ], - ], - ]; - - public function testExpand() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_CONTENT_TYPE' => 'application/xml', - 'REQUEST_URI' => '/calendars/user1/calendar1', - 'HTTP_DEPTH' => '1', - ]); - - $request->setBody(' - - - - - - - - - - - - - - -'); - - $response = $this->request($request); - - $bodyAsString = $response->getBodyAsString(); - // Everts super awesome xml parser. - $body = substr( - $bodyAsString, - $start = strpos($bodyAsString, 'BEGIN:VCALENDAR'), - strpos($bodyAsString, 'END:VCALENDAR') - $start + 13 - ); - $body = str_replace(' ', '', $body); - - $vObject = VObject\Reader::read($body); - - // We only expect 3 events - $this->assertEquals(3, count($vObject->VEVENT), 'We got 6 events instead of 3. Output: '.$body); - - // TZID should be gone - $this->assertFalse(isset($vObject->VEVENT->DTSTART['TZID'])); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/FreeBusyReportTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/FreeBusyReportTest.php deleted file mode 100644 index 44823edab..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/FreeBusyReportTest.php +++ /dev/null @@ -1,158 +0,0 @@ - [ - 'obj1' => [ - 'calendarid' => 1, - 'uri' => 'event1.ics', - 'calendardata' => $obj1, - ], - 'obj2' => [ - 'calendarid' => 1, - 'uri' => 'event2.ics', - 'calendardata' => $obj2, - ], - 'obj3' => [ - 'calendarid' => 1, - 'uri' => 'event3.ics', - 'calendardata' => $obj3, - ], - ], - ]; - - $caldavBackend = new Backend\Mock([], $calendarData); - - $calendar = new Calendar($caldavBackend, [ - 'id' => 1, - 'uri' => 'calendar', - 'principaluri' => 'principals/user1', - '{'.Plugin::NS_CALDAV.'}calendar-timezone' => "BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nEND:VTIMEZONE\r\nEND:VCALENDAR", - ]); - - $this->server = new DAV\Server([$calendar]); - - $request = new HTTP\Request('GET', '/calendar'); - $this->server->httpRequest = $request; - $this->server->httpResponse = new HTTP\ResponseMock(); - - $this->plugin = new Plugin(); - $this->server->addPlugin($this->plugin); - } - - public function testFreeBusyReport() - { - $reportXML = << - - - -XML; - - $report = $this->server->xml->parse($reportXML, null, $rootElem); - $this->plugin->report($rootElem, $report, null); - - $this->assertEquals(200, $this->server->httpResponse->status); - $this->assertEquals('text/calendar', $this->server->httpResponse->getHeader('Content-Type')); - $this->assertTrue(false !== strpos($this->server->httpResponse->body, 'BEGIN:VFREEBUSY')); - $this->assertTrue(false !== strpos($this->server->httpResponse->body, '20111005T120000Z/20111005T130000Z')); - $this->assertTrue(false !== strpos($this->server->httpResponse->body, '20111006T100000Z/20111006T110000Z')); - } - - public function testFreeBusyReportNoTimeRange() - { - $this->expectException('Sabre\DAV\Exception\BadRequest'); - $reportXML = << - - -XML; - - $report = $this->server->xml->parse($reportXML, null, $rootElem); - } - - public function testFreeBusyReportWrongNode() - { - $this->expectException('Sabre\DAV\Exception\NotImplemented'); - $request = new HTTP\Request('REPORT', '/'); - $this->server->httpRequest = $request; - - $reportXML = << - - - -XML; - - $report = $this->server->xml->parse($reportXML, null, $rootElem); - $this->plugin->report($rootElem, $report, null); - } - - public function testFreeBusyReportNoACLPlugin() - { - $this->expectException('Sabre\DAV\Exception'); - $this->server = new DAV\Server(); - $this->server->httpRequest = new HTTP\Request('REPORT', '/'); - $this->plugin = new Plugin(); - $this->server->addPlugin($this->plugin); - - $reportXML = << - - - -XML; - - $report = $this->server->xml->parse($reportXML, null, $rootElem); - $this->plugin->report($rootElem, $report, null); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/GetEventsByTimerangeTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/GetEventsByTimerangeTest.php deleted file mode 100644 index e82a85dd8..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/GetEventsByTimerangeTest.php +++ /dev/null @@ -1,82 +0,0 @@ - 1, - 'name' => 'Calendar', - 'principaluri' => 'principals/user1', - 'uri' => 'calendar1', - ], - ]; - - protected $caldavCalendarObjects = [ - 1 => [ - 'event.ics' => [ - 'calendardata' => 'BEGIN:VCALENDAR -VERSION:2.0 -BEGIN:VEVENT -CREATED:20120313T142342Z -UID:171EBEFC-C951-499D-B234-7BA7D677B45D -DTEND;TZID=Europe/Berlin:20120227T010000 -TRANSP:OPAQUE -SUMMARY:Monday 0h -DTSTART;TZID=Europe/Berlin:20120227T000000 -DTSTAMP:20120313T142416Z -SEQUENCE:4 -END:VEVENT -END:VCALENDAR -', - ], - ], - ]; - - public function testQueryTimerange() - { - $request = new HTTP\Request( - 'REPORT', - '/calendars/user1/calendar1', - [ - 'Content-Type' => 'application/xml', - 'Depth' => '1', - ] - ); - - $request->setBody(' - - - - - - - - - - - - - - -'); - - $response = $this->request($request); - - $this->assertTrue(false !== strpos($response->getBodyAsString(), 'BEGIN:VCALENDAR')); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/ICSExportPluginTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/ICSExportPluginTest.php deleted file mode 100644 index 8771f538b..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/ICSExportPluginTest.php +++ /dev/null @@ -1,366 +0,0 @@ -icsExportPlugin = new ICSExportPlugin(); - $this->server->addPlugin( - $this->icsExportPlugin - ); - - $id = $this->caldavBackend->createCalendar( - 'principals/admin', - 'UUID-123467', - [ - '{DAV:}displayname' => 'Hello!', - '{http://apple.com/ns/ical/}calendar-color' => '#AA0000FF', - ] - ); - - $this->caldavBackend->createCalendarObject( - $id, - 'event-1', - <<caldavBackend->createCalendarObject( - $id, - 'todo-1', - <<assertEquals( - $this->icsExportPlugin, - $this->server->getPlugin('ics-export') - ); - $this->assertEquals($this->icsExportPlugin, $this->server->getPlugin('ics-export')); - $this->assertEquals('ics-export', $this->icsExportPlugin->getPluginInfo()['name']); - } - - public function testBeforeMethod() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export' - ); - - $response = $this->request($request); - - $this->assertEquals(200, $response->getStatus()); - $this->assertEquals('text/calendar', $response->getHeader('Content-Type')); - - $obj = VObject\Reader::read($response->getBodyAsString()); - - $this->assertEquals(8, count($obj->children())); - $this->assertEquals(1, count($obj->VERSION)); - $this->assertEquals(1, count($obj->CALSCALE)); - $this->assertEquals(1, count($obj->PRODID)); - $this->assertTrue(false !== strpos((string) $obj->PRODID, DAV\Version::VERSION)); - $this->assertEquals(1, count($obj->VTIMEZONE)); - $this->assertEquals(1, count($obj->VEVENT)); - $this->assertEquals('Hello!', $obj->{'X-WR-CALNAME'}); - $this->assertEquals('#AA0000FF', $obj->{'X-APPLE-CALENDAR-COLOR'}); - } - - public function testBeforeMethodNoVersion() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export' - ); - DAV\Server::$exposeVersion = false; - $response = $this->request($request); - DAV\Server::$exposeVersion = true; - - $this->assertEquals(200, $response->getStatus()); - $this->assertEquals('text/calendar', $response->getHeader('Content-Type')); - - $obj = VObject\Reader::read($response->getBodyAsString()); - - $this->assertEquals(8, count($obj->children())); - $this->assertEquals(1, count($obj->VERSION)); - $this->assertEquals(1, count($obj->CALSCALE)); - $this->assertEquals(1, count($obj->PRODID)); - $this->assertFalse(false !== strpos((string) $obj->PRODID, DAV\Version::VERSION)); - $this->assertEquals(1, count($obj->VTIMEZONE)); - $this->assertEquals(1, count($obj->VEVENT)); - } - - public function testBeforeMethodNoExport() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467' - ); - $response = new HTTP\Response(); - $this->assertNull($this->icsExportPlugin->httpGet($request, $response)); - } - - public function testACLIntegrationBlocked() - { - $aclPlugin = new DAVACL\Plugin(); - $aclPlugin->allowUnauthenticatedAccess = false; - $this->server->addPlugin( - $aclPlugin - ); - - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export' - ); - - $this->request($request, 403); - } - - public function testACLIntegrationNotBlocked() - { - $aclPlugin = new DAVACL\Plugin(); - $aclPlugin->allowUnauthenticatedAccess = false; - $this->server->addPlugin( - $aclPlugin - ); - $this->server->addPlugin( - new Plugin() - ); - - $this->autoLogin('admin'); - - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export' - ); - - $response = $this->request($request, 200); - $this->assertEquals('text/calendar', $response->getHeader('Content-Type')); - - $obj = VObject\Reader::read($response->getBodyAsString()); - - $this->assertEquals(8, count($obj->children())); - $this->assertEquals(1, count($obj->VERSION)); - $this->assertEquals(1, count($obj->CALSCALE)); - $this->assertEquals(1, count($obj->PRODID)); - $this->assertTrue(false !== strpos((string) $obj->PRODID, DAV\Version::VERSION)); - $this->assertEquals(1, count($obj->VTIMEZONE)); - $this->assertEquals(1, count($obj->VEVENT)); - } - - public function testBadStartParam() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export&start=foo' - ); - $this->request($request, 400); - } - - public function testBadEndParam() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export&end=foo' - ); - $this->request($request, 400); - } - - public function testFilterStartEnd() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export&start=1&end=2' - ); - $response = $this->request($request, 200); - - $obj = VObject\Reader::read($response->getBody()); - - $this->assertNull($obj->VTIMEZONE); - $this->assertNull($obj->VEVENT); - } - - public function testExpandNoStart() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export&expand=1&end=2' - ); - $this->request($request, 400); - } - - public function testExpand() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export&start=1&end=2000000000&expand=1' - ); - $response = $this->request($request, 200); - - $obj = VObject\Reader::read($response->getBody()); - - $this->assertNull($obj->VTIMEZONE); - $this->assertEquals(1, count($obj->VEVENT)); - } - - public function testJCal() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export', - ['Accept' => 'application/calendar+json'] - ); - - $response = $this->request($request, 200); - $this->assertEquals('application/calendar+json', $response->getHeader('Content-Type')); - } - - public function testJCalInUrl() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export&accept=jcal' - ); - - $response = $this->request($request, 200); - $this->assertEquals('application/calendar+json', $response->getHeader('Content-Type')); - } - - public function testNegotiateDefault() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export', - ['Accept' => 'text/plain'] - ); - - $response = $this->request($request, 200); - $this->assertEquals('text/calendar', $response->getHeader('Content-Type')); - } - - public function testFilterComponentVEVENT() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export&componentType=VEVENT' - ); - - $response = $this->request($request, 200); - - $obj = VObject\Reader::read($response->getBodyAsString()); - $this->assertEquals(1, count($obj->VTIMEZONE)); - $this->assertEquals(1, count($obj->VEVENT)); - $this->assertNull($obj->VTODO); - } - - public function testFilterComponentVTODO() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export&componentType=VTODO' - ); - - $response = $this->request($request, 200); - - $obj = VObject\Reader::read($response->getBodyAsString()); - - $this->assertNull($obj->VTIMEZONE); - $this->assertNull($obj->VEVENT); - $this->assertEquals(1, count($obj->VTODO)); - } - - public function testFilterComponentBadComponent() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export&componentType=VVOODOO' - ); - - $response = $this->request($request, 400); - } - - public function testContentDisposition() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export' - ); - - $response = $this->request($request, 200); - $this->assertEquals('text/calendar', $response->getHeader('Content-Type')); - $this->assertEquals( - 'attachment; filename="UUID-123467-'.date('Y-m-d').'.ics"', - $response->getHeader('Content-Disposition') - ); - } - - public function testContentDispositionJson() - { - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-123467?export', - ['Accept' => 'application/calendar+json'] - ); - - $response = $this->request($request, 200); - $this->assertEquals('application/calendar+json', $response->getHeader('Content-Type')); - $this->assertEquals( - 'attachment; filename="UUID-123467-'.date('Y-m-d').'.json"', - $response->getHeader('Content-Disposition') - ); - } - - public function testContentDispositionBadChars() - { - $this->caldavBackend->createCalendar( - 'principals/admin', - 'UUID-b_ad"(ch)ars', - [ - '{DAV:}displayname' => 'Test bad characters', - '{http://apple.com/ns/ical/}calendar-color' => '#AA0000FF', - ] - ); - - $request = new HTTP\Request( - 'GET', - '/calendars/admin/UUID-b_ad"(ch)ars?export', - ['Accept' => 'application/calendar+json'] - ); - - $response = $this->request($request, 200); - $this->assertEquals('application/calendar+json', $response->getHeader('Content-Type')); - $this->assertEquals( - 'attachment; filename="UUID-b_adchars-'.date('Y-m-d').'.json"', - $response->getHeader('Content-Disposition') - ); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Issue166Test.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Issue166Test.php deleted file mode 100644 index 02d39fe84..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Issue166Test.php +++ /dev/null @@ -1,63 +0,0 @@ - 'VCALENDAR', - 'comp-filters' => [ - [ - 'name' => 'VEVENT', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => [ - 'start' => new \DateTime('2011-12-01'), - 'end' => new \DateTime('2012-02-01'), - ], - ], - ], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => null, - ]; - $input = VObject\Reader::read($input); - $this->assertTrue($validator->validate($input, $filters)); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Issue172Test.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Issue172Test.php deleted file mode 100644 index 83120fe6a..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Issue172Test.php +++ /dev/null @@ -1,140 +0,0 @@ - 'VCALENDAR', - 'comp-filters' => [ - [ - 'name' => 'VEVENT', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => [ - 'start' => new \DateTime('2012-01-18 21:00:00 GMT-08:00'), - 'end' => new \DateTime('2012-01-18 21:00:00 GMT-08:00'), - ], - ], - ], - 'prop-filters' => [], - ]; - $input = VObject\Reader::read($input); - $this->assertTrue($validator->validate($input, $filters)); - } - - // Pacific Standard Time, translates to America/Los_Angeles (GMT-8 in January) - public function testOutlookTimezoneName() - { - $input = << 'VCALENDAR', - 'comp-filters' => [ - [ - 'name' => 'VEVENT', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => [ - 'start' => new \DateTime('2012-01-13 10:30:00 GMT-08:00'), - 'end' => new \DateTime('2012-01-13 10:30:00 GMT-08:00'), - ], - ], - ], - 'prop-filters' => [], - ]; - $input = VObject\Reader::read($input); - $this->assertTrue($validator->validate($input, $filters)); - } - - // X-LIC-LOCATION, translates to America/Los_Angeles (GMT-8 in January) - public function testLibICalLocationName() - { - $input = << 'VCALENDAR', - 'comp-filters' => [ - [ - 'name' => 'VEVENT', - 'comp-filters' => [], - 'prop-filters' => [], - 'is-not-defined' => false, - 'time-range' => [ - 'start' => new \DateTime('2012-01-13 10:30:00 GMT-08:00'), - 'end' => new \DateTime('2012-01-13 10:30:00 GMT-08:00'), - ], - ], - ], - 'prop-filters' => [], - ]; - $input = VObject\Reader::read($input); - $this->assertTrue($validator->validate($input, $filters)); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Issue203Test.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Issue203Test.php deleted file mode 100644 index 9a786c505..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Issue203Test.php +++ /dev/null @@ -1,138 +0,0 @@ - 1, - 'name' => 'Calendar', - 'principaluri' => 'principals/user1', - 'uri' => 'calendar1', - ], - ]; - - protected $caldavCalendarObjects = [ - 1 => [ - 'event.ics' => [ - 'calendardata' => 'BEGIN:VCALENDAR -VERSION:2.0 -BEGIN:VEVENT -UID:20120330T155305CEST-6585fBUVgV -DTSTAMP:20120330T135305Z -DTSTART;TZID=Europe/Berlin:20120326T155200 -DTEND;TZID=Europe/Berlin:20120326T165200 -RRULE:FREQ=DAILY;COUNT=2;INTERVAL=1 -SUMMARY:original summary -TRANSP:OPAQUE -END:VEVENT -BEGIN:VEVENT -UID:20120330T155305CEST-6585fBUVgV -DTSTAMP:20120330T135352Z -DESCRIPTION: -DTSTART;TZID=Europe/Berlin:20120328T155200 -DTEND;TZID=Europe/Berlin:20120328T165200 -RECURRENCE-ID;TZID=Europe/Berlin:20120327T155200 -SEQUENCE:1 -SUMMARY:overwritten summary -TRANSP:OPAQUE -END:VEVENT -END:VCALENDAR -', - ], - ], - ]; - - public function testIssue203() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_CONTENT_TYPE' => 'application/xml', - 'REQUEST_URI' => '/calendars/user1/calendar1', - 'HTTP_DEPTH' => '1', - ]); - - $request->setBody(' - - - - - - - - - - - - - - -'); - - $response = $this->request($request); - - $bodyAsString = $response->getBodyAsString(); - // Everts super awesome xml parser. - $body = substr( - $bodyAsString, - $start = strpos($bodyAsString, 'BEGIN:VCALENDAR'), - strpos($bodyAsString, 'END:VCALENDAR') - $start + 13 - ); - $body = str_replace(' ', '', $body); - - $vObject = VObject\Reader::read($body); - - $this->assertEquals(2, count($vObject->VEVENT)); - - $expectedEvents = [ - [ - 'DTSTART' => '20120326T135200Z', - 'DTEND' => '20120326T145200Z', - 'SUMMARY' => 'original summary', - ], - [ - 'DTSTART' => '20120328T135200Z', - 'DTEND' => '20120328T145200Z', - 'SUMMARY' => 'overwritten summary', - 'RECURRENCE-ID' => '20120327T135200Z', - ], - ]; - - // try to match agains $expectedEvents array - foreach ($expectedEvents as $expectedEvent) { - $matching = false; - - foreach ($vObject->VEVENT as $vevent) { - /** @var $vevent Sabre\VObject\Component\VEvent */ - foreach ($vevent->children() as $child) { - /** @var $child Sabre\VObject\Property */ - if (isset($expectedEvent[$child->name])) { - if ($expectedEvent[$child->name] != $child->getValue()) { - continue 2; - } - } - } - - $matching = true; - break; - } - - $this->assertTrue($matching, 'Did not find the following event in the response: '.var_export($expectedEvent, true)); - } - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Issue205Test.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Issue205Test.php deleted file mode 100644 index b021634ba..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Issue205Test.php +++ /dev/null @@ -1,99 +0,0 @@ - 1, - 'name' => 'Calendar', - 'principaluri' => 'principals/user1', - 'uri' => 'calendar1', - ], - ]; - - protected $caldavCalendarObjects = [ - 1 => [ - 'event.ics' => [ - 'calendardata' => 'BEGIN:VCALENDAR -VERSION:2.0 -BEGIN:VEVENT -UID:20120330T155305CEST-6585fBUVgV -DTSTAMP:20120330T135305Z -DTSTART;TZID=Europe/Berlin:20120326T155200 -DTEND;TZID=Europe/Berlin:20120326T165200 -SUMMARY:original summary -TRANSP:OPAQUE -BEGIN:VALARM -ACTION:AUDIO -ATTACH;VALUE=URI:Basso -TRIGGER:PT0S -END:VALARM -END:VEVENT -END:VCALENDAR -', - ], - ], - ]; - - public function testIssue205() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_CONTENT_TYPE' => 'application/xml', - 'REQUEST_URI' => '/calendars/user1/calendar1', - 'HTTP_DEPTH' => '1', - ]); - - $request->setBody(' - - - - - - - - - - - - - - - - -'); - - $response = $this->request($request); - - $this->assertFalse(strpos($response->getBodyAsString(), 'Exception'), 'Exception occurred: '.$response->getBodyAsString()); - $this->assertFalse(strpos($response->getBodyAsString(), 'Unknown or bad format'), 'DateTime unknown format Exception: '.$response->getBodyAsString()); - - // Everts super awesome xml parser. - $body = substr( - $response->getBodyAsString(), - $start = strpos($response->getBodyAsString(), 'BEGIN:VCALENDAR'), - strpos($response->getBodyAsString(), 'END:VCALENDAR') - $start + 13 - ); - $body = str_replace(' ', '', $body); - - $vObject = VObject\Reader::read($body); - - $this->assertEquals(1, count($vObject->VEVENT)); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Issue211Test.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Issue211Test.php deleted file mode 100644 index d7fa18c09..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Issue211Test.php +++ /dev/null @@ -1,90 +0,0 @@ - 1, - 'name' => 'Calendar', - 'principaluri' => 'principals/user1', - 'uri' => 'calendar1', - ], - ]; - - protected $caldavCalendarObjects = [ - 1 => [ - 'event.ics' => [ - 'calendardata' => 'BEGIN:VCALENDAR -VERSION:2.0 -BEGIN:VEVENT -UID:20120418T172519CEST-3510gh1hVw -DTSTAMP:20120418T152519Z -DTSTART;VALUE=DATE:20120330 -DTEND;VALUE=DATE:20120531 -EXDATE;TZID=Europe/Berlin:20120330T000000 -RRULE:FREQ=YEARLY;INTERVAL=1 -SEQUENCE:1 -SUMMARY:Birthday -TRANSP:TRANSPARENT -BEGIN:VALARM -ACTION:EMAIL -ATTENDEE:MAILTO:xxx@domain.de -DESCRIPTION:Dies ist eine Kalender Erinnerung -SUMMARY:Kalender Alarm Erinnerung -TRIGGER;VALUE=DATE-TIME:20120329T060000Z -END:VALARM -END:VEVENT -END:VCALENDAR -', - ], - ], - ]; - - public function testIssue211() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_CONTENT_TYPE' => 'application/xml', - 'REQUEST_URI' => '/calendars/user1/calendar1', - 'HTTP_DEPTH' => '1', - ]); - - $request->setBody(' - - - - - - - - - - - - - - -'); - - $response = $this->request($request); - - // if this assert is reached, the endless loop is gone - // There should be no matching events - $this->assertFalse(strpos('BEGIN:VEVENT', $response->getBodyAsString())); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Issue220Test.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Issue220Test.php deleted file mode 100644 index 8e51e49e2..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Issue220Test.php +++ /dev/null @@ -1,101 +0,0 @@ - 1, - 'name' => 'Calendar', - 'principaluri' => 'principals/user1', - 'uri' => 'calendar1', - ], - ]; - - protected $caldavCalendarObjects = [ - 1 => [ - 'event.ics' => [ - 'calendardata' => 'BEGIN:VCALENDAR -VERSION:2.0 -BEGIN:VEVENT -DTSTART;TZID=Europe/Berlin:20120601T180000 -SUMMARY:Brot backen -RRULE:FREQ=DAILY;INTERVAL=1;WKST=MO -TRANSP:OPAQUE -DURATION:PT20M -LAST-MODIFIED:20120601T064634Z -CREATED:20120601T064634Z -DTSTAMP:20120601T064634Z -UID:b64f14c5-dccc-4eda-947f-bdb1f763fbcd -BEGIN:VALARM -TRIGGER;VALUE=DURATION:-PT5M -ACTION:DISPLAY -DESCRIPTION:Default Event Notification -X-WR-ALARMUID:cd952c1b-b3d6-41fb-b0a6-ec3a1a5bdd58 -END:VALARM -END:VEVENT -BEGIN:VEVENT -DTSTART;TZID=Europe/Berlin:20120606T180000 -SUMMARY:Brot backen -TRANSP:OPAQUE -STATUS:CANCELLED -DTEND;TZID=Europe/Berlin:20120606T182000 -LAST-MODIFIED:20120605T094310Z -SEQUENCE:1 -RECURRENCE-ID:20120606T160000Z -UID:b64f14c5-dccc-4eda-947f-bdb1f763fbcd -END:VEVENT -END:VCALENDAR -', - ], - ], - ]; - - public function testIssue220() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_CONTENT_TYPE' => 'application/xml', - 'REQUEST_URI' => '/calendars/user1/calendar1', - 'HTTP_DEPTH' => '1', - ]); - - $request->setBody(' - - - - - - - - - - - - - - -'); - - $response = $this->request($request); - - $this->assertFalse(strpos($response->getBodyAsString(), 'PHPUnit_Framework_Error_Warning'), 'Error Warning occurred: '.$response->getBodyAsString()); - $this->assertFalse(strpos($response->getBodyAsString(), 'Invalid argument supplied for foreach()'), 'Invalid argument supplied for foreach(): '.$response->getBodyAsString()); - - $this->assertEquals(207, $response->status); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Issue228Test.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Issue228Test.php deleted file mode 100644 index 1f698e7dd..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Issue228Test.php +++ /dev/null @@ -1,80 +0,0 @@ - 1, - 'name' => 'Calendar', - 'principaluri' => 'principals/user1', - 'uri' => 'calendar1', - ], - ]; - - protected $caldavCalendarObjects = [ - 1 => [ - 'event.ics' => [ - 'calendardata' => 'BEGIN:VCALENDAR -VERSION:2.0 -BEGIN:VEVENT -UID:20120730T113415CEST-6804EGphkd@xxxxxx.de -DTSTAMP:20120730T093415Z -DTSTART;VALUE=DATE:20120729 -DTEND;VALUE=DATE:20120730 -SUMMARY:sunday event -TRANSP:TRANSPARENT -END:VEVENT -END:VCALENDAR -', - ], - ], - ]; - - public function testIssue228() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_CONTENT_TYPE' => 'application/xml', - 'REQUEST_URI' => '/calendars/user1/calendar1', - 'HTTP_DEPTH' => '1', - ]); - - $request->setBody(' - - - - - - - - - - - - - - -'); - - $response = $this->request($request); - - // We must check if absolutely nothing was returned from this query. - $this->assertFalse(strpos($response->getBodyAsString(), 'BEGIN:VCALENDAR')); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Notifications/CollectionTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Notifications/CollectionTest.php deleted file mode 100644 index 594241e0d..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Notifications/CollectionTest.php +++ /dev/null @@ -1,78 +0,0 @@ -principalUri = 'principals/user1'; - - $this->notification = new CalDAV\Xml\Notification\SystemStatus(1, '"1"'); - - $this->caldavBackend = new CalDAV\Backend\MockSharing([], [], [ - 'principals/user1' => [ - $this->notification, - ], - ]); - - return new Collection($this->caldavBackend, $this->principalUri); - } - - public function testGetChildren() - { - $col = $this->getInstance(); - $this->assertEquals('notifications', $col->getName()); - - $this->assertEquals([ - new Node($this->caldavBackend, $this->principalUri, $this->notification), - ], $col->getChildren()); - } - - public function testGetOwner() - { - $col = $this->getInstance(); - $this->assertEquals('principals/user1', $col->getOwner()); - } - - public function testGetGroup() - { - $col = $this->getInstance(); - $this->assertNull($col->getGroup()); - } - - public function testGetACL() - { - $col = $this->getInstance(); - $expected = [ - [ - 'privilege' => '{DAV:}all', - 'principal' => '{DAV:}owner', - 'protected' => true, - ], - ]; - - $this->assertEquals($expected, $col->getACL()); - } - - public function testSetACL() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $col = $this->getInstance(); - $col->setACL([]); - } - - public function testGetSupportedPrivilegeSet() - { - $col = $this->getInstance(); - $this->assertNull($col->getSupportedPrivilegeSet()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Notifications/NodeTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Notifications/NodeTest.php deleted file mode 100644 index 623525e69..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Notifications/NodeTest.php +++ /dev/null @@ -1,88 +0,0 @@ -systemStatus = new CalDAV\Xml\Notification\SystemStatus(1, '"1"'); - - $this->caldavBackend = new CalDAV\Backend\MockSharing([], [], [ - 'principals/user1' => [ - $this->systemStatus, - ], - ]); - - $node = new Node($this->caldavBackend, 'principals/user1', $this->systemStatus); - - return $node; - } - - public function testGetId() - { - $node = $this->getInstance(); - $this->assertEquals($this->systemStatus->getId().'.xml', $node->getName()); - } - - public function testGetEtag() - { - $node = $this->getInstance(); - $this->assertEquals('"1"', $node->getETag()); - } - - public function testGetNotificationType() - { - $node = $this->getInstance(); - $this->assertEquals($this->systemStatus, $node->getNotificationType()); - } - - public function testDelete() - { - $node = $this->getInstance(); - $node->delete(); - $this->assertEquals([], $this->caldavBackend->getNotificationsForPrincipal('principals/user1')); - } - - public function testGetGroup() - { - $node = $this->getInstance(); - $this->assertNull($node->getGroup()); - } - - public function testGetACL() - { - $node = $this->getInstance(); - $expected = [ - [ - 'privilege' => '{DAV:}all', - 'principal' => '{DAV:}owner', - 'protected' => true, - ], - ]; - - $this->assertEquals($expected, $node->getACL()); - } - - public function testSetACL() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $node = $this->getInstance(); - $node->setACL([]); - } - - public function testGetSupportedPrivilegeSet() - { - $node = $this->getInstance(); - $this->assertNull($node->getSupportedPrivilegeSet()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/PluginTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/PluginTest.php deleted file mode 100644 index a4f08f7e5..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/PluginTest.php +++ /dev/null @@ -1,1071 +0,0 @@ -caldavBackend = new Backend\Mock([ - [ - 'id' => 1, - 'uri' => 'UUID-123467', - 'principaluri' => 'principals/user1', - '{DAV:}displayname' => 'user1 calendar', - $caldavNS.'calendar-description' => 'Calendar description', - '{http://apple.com/ns/ical/}calendar-order' => '1', - '{http://apple.com/ns/ical/}calendar-color' => '#FF0000', - $caldavNS.'supported-calendar-component-set' => new Xml\Property\SupportedCalendarComponentSet(['VEVENT', 'VTODO']), - ], - [ - 'id' => 2, - 'uri' => 'UUID-123468', - 'principaluri' => 'principals/user1', - '{DAV:}displayname' => 'user1 calendar2', - $caldavNS.'calendar-description' => 'Calendar description', - '{http://apple.com/ns/ical/}calendar-order' => '1', - '{http://apple.com/ns/ical/}calendar-color' => '#FF0000', - $caldavNS.'supported-calendar-component-set' => new Xml\Property\SupportedCalendarComponentSet(['VEVENT', 'VTODO']), - ], - ], [ - 1 => [ - 'UUID-2345' => [ - 'calendardata' => TestUtil::getTestCalendarData(), - ], - ], - ]); - $principalBackend = new DAVACL\PrincipalBackend\Mock(); - $principalBackend->setGroupMemberSet('principals/admin/calendar-proxy-read', ['principals/user1']); - $principalBackend->setGroupMemberSet('principals/admin/calendar-proxy-write', ['principals/user1']); - $principalBackend->addPrincipal([ - 'uri' => 'principals/admin/calendar-proxy-read', - ]); - $principalBackend->addPrincipal([ - 'uri' => 'principals/admin/calendar-proxy-write', - ]); - - $calendars = new CalendarRoot($principalBackend, $this->caldavBackend); - $principals = new Principal\Collection($principalBackend); - - $root = new DAV\SimpleCollection('root'); - $root->addChild($calendars); - $root->addChild($principals); - - $this->server = new DAV\Server($root); - $this->server->sapi = new HTTP\SapiMock(); - $this->server->debugExceptions = true; - $this->server->setBaseUri('/'); - $this->plugin = new Plugin(); - $this->server->addPlugin($this->plugin); - - // Adding ACL plugin - $aclPlugin = new DAVACL\Plugin(); - $aclPlugin->allowUnauthenticatedAccess = false; - $this->server->addPlugin($aclPlugin); - - // Adding Auth plugin, and ensuring that we are logged in. - $authBackend = new DAV\Auth\Backend\Mock(); - $authBackend->setPrincipal('principals/user1'); - $authPlugin = new DAV\Auth\Plugin($authBackend); - $authPlugin->beforeMethod(new \Sabre\HTTP\Request('GET', '/'), new \Sabre\HTTP\Response()); - $this->server->addPlugin($authPlugin); - - // This forces a login - $authPlugin->beforeMethod(new HTTP\Request('GET', '/'), new HTTP\Response()); - - $this->response = new HTTP\ResponseMock(); - $this->server->httpResponse = $this->response; - } - - public function testSimple() - { - $this->assertEquals(['MKCALENDAR'], $this->plugin->getHTTPMethods('calendars/user1/randomnewcalendar')); - $this->assertEquals(['calendar-access', 'calendar-proxy'], $this->plugin->getFeatures()); - $this->assertEquals( - 'caldav', - $this->plugin->getPluginInfo()['name'] - ); - } - - public function testUnknownMethodPassThrough() - { - $request = new HTTP\Request('MKBREAKFAST', '/'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(501, $this->response->status, 'Incorrect status returned. Full response body:'.$this->response->getBodyAsString()); - } - - public function testGetWithoutContentType() - { - $request = new HTTP\Request('GET', '/'); - $this->plugin->httpAfterGet($request, $this->response); - $this->assertTrue(true); - } - - public function testReportPassThrough() - { - $request = new HTTP\Request('REPORT', '/', ['Content-Type' => 'application/xml']); - $request->setBody(''); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(415, $this->response->status); - } - - public function testMkCalendarBadLocation() - { - $request = new HTTP\Request('MKCALENDAR', '/blabla'); - - $body = ' - - - - Lisa\'s Events - Calendar restricted to events. - - - - - - - '; - - $request->setBody($body); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(403, $this->response->status); - } - - public function testMkCalendarNoParentNode() - { - $request = new HTTP\Request('MKCALENDAR', '/doesntexist/calendar'); - - $body = ' - - - - Lisa\'s Events - Calendar restricted to events. - - - - - - - '; - - $request->setBody($body); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(409, $this->response->status); - } - - public function testMkCalendarExistingCalendar() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'MKCALENDAR', - 'REQUEST_URI' => '/calendars/user1/UUID-123467', - ]); - - $body = ' - - - - Lisa\'s Events - Calendar restricted to events. - - - - - - - '; - - $request->setBody($body); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(405, $this->response->status); - } - - public function testMkCalendarSucceed() - { - $request = new HTTP\Request('MKCALENDAR', '/calendars/user1/NEWCALENDAR'); - - $timezone = 'BEGIN:VCALENDAR -PRODID:-//Example Corp.//CalDAV Client//EN -VERSION:2.0 -BEGIN:VTIMEZONE -TZID:US-Eastern -LAST-MODIFIED:19870101T000000Z -BEGIN:STANDARD -DTSTART:19671029T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:Eastern Standard Time (US & Canada) -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19870405T020000 -RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:Eastern Daylight Time (US & Canada) -END:DAYLIGHT -END:VTIMEZONE -END:VCALENDAR'; - - $body = ' - - - - Lisa\'s Events - Calendar restricted to events. - - - - - - - '; - - $request->setBody($body); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(201, $this->response->status, 'Invalid response code received. Full response body: '.$this->response->getBodyAsString()); - - $calendars = $this->caldavBackend->getCalendarsForUser('principals/user1'); - $this->assertEquals(3, count($calendars)); - - $newCalendar = null; - foreach ($calendars as $calendar) { - if ('NEWCALENDAR' === $calendar['uri']) { - $newCalendar = $calendar; - break; - } - } - - $this->assertIsArray($newCalendar); - - $keys = [ - 'uri' => 'NEWCALENDAR', - 'id' => null, - '{urn:ietf:params:xml:ns:caldav}calendar-description' => 'Calendar restricted to events.', - '{urn:ietf:params:xml:ns:caldav}calendar-timezone' => $timezone, - '{DAV:}displayname' => 'Lisa\'s Events', - '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => null, - ]; - - foreach ($keys as $key => $value) { - $this->assertArrayHasKey($key, $newCalendar); - - if (is_null($value)) { - continue; - } - $this->assertEquals($value, $newCalendar[$key]); - } - $sccs = '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set'; - $this->assertTrue($newCalendar[$sccs] instanceof Xml\Property\SupportedCalendarComponentSet); - $this->assertEquals(['VEVENT'], $newCalendar[$sccs]->getValue()); - } - - public function testMkCalendarEmptyBodySucceed() - { - $request = new HTTP\Request('MKCALENDAR', '/calendars/user1/NEWCALENDAR'); - - $request->setBody(''); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(201, $this->response->status, 'Invalid response code received. Full response body: '.$this->response->getBodyAsString()); - - $calendars = $this->caldavBackend->getCalendarsForUser('principals/user1'); - $this->assertEquals(3, count($calendars)); - - $newCalendar = null; - foreach ($calendars as $calendar) { - if ('NEWCALENDAR' === $calendar['uri']) { - $newCalendar = $calendar; - break; - } - } - - $this->assertIsArray($newCalendar); - - $keys = [ - 'uri' => 'NEWCALENDAR', - 'id' => null, - '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => null, - ]; - - foreach ($keys as $key => $value) { - $this->assertArrayHasKey($key, $newCalendar); - - if (is_null($value)) { - continue; - } - $this->assertEquals($value, $newCalendar[$key]); - } - $sccs = '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set'; - $this->assertTrue($newCalendar[$sccs] instanceof Xml\Property\SupportedCalendarComponentSet); - $this->assertEquals(['VEVENT', 'VTODO'], $newCalendar[$sccs]->getValue()); - } - - public function testMkCalendarBadXml() - { - $request = new HTTP\Request('MKCALENDAR', '/blabla'); - $body = 'This is not xml'; - - $request->setBody($body); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(400, $this->response->status); - } - - public function testPrincipalProperties() - { - $httpRequest = new HTTP\Request('FOO', '/blabla', ['Host' => 'sabredav.org']); - $this->server->httpRequest = $httpRequest; - - $props = $this->server->getPropertiesForPath('/principals/user1', [ - '{'.Plugin::NS_CALDAV.'}calendar-home-set', - '{'.Plugin::NS_CALENDARSERVER.'}calendar-proxy-read-for', - '{'.Plugin::NS_CALENDARSERVER.'}calendar-proxy-write-for', - '{'.Plugin::NS_CALENDARSERVER.'}notification-URL', - '{'.Plugin::NS_CALENDARSERVER.'}email-address-set', - ]); - - $this->assertArrayHasKey(0, $props); - $this->assertArrayHasKey(200, $props[0]); - - $this->assertArrayHasKey('{urn:ietf:params:xml:ns:caldav}calendar-home-set', $props[0][200]); - $prop = $props[0][200]['{urn:ietf:params:xml:ns:caldav}calendar-home-set']; - $this->assertInstanceOf('Sabre\\DAV\\Xml\\Property\\Href', $prop); - $this->assertEquals('calendars/user1/', $prop->getHref()); - - $this->assertArrayHasKey('{http://calendarserver.org/ns/}calendar-proxy-read-for', $props[0][200]); - $prop = $props[0][200]['{http://calendarserver.org/ns/}calendar-proxy-read-for']; - $this->assertInstanceOf('Sabre\\DAV\\Xml\\Property\\Href', $prop); - $this->assertEquals(['principals/admin/'], $prop->getHrefs()); - - $this->assertArrayHasKey('{http://calendarserver.org/ns/}calendar-proxy-write-for', $props[0][200]); - $prop = $props[0][200]['{http://calendarserver.org/ns/}calendar-proxy-write-for']; - $this->assertInstanceOf('Sabre\\DAV\\Xml\\Property\\Href', $prop); - $this->assertEquals(['principals/admin/'], $prop->getHrefs()); - - $this->assertArrayHasKey('{'.Plugin::NS_CALENDARSERVER.'}email-address-set', $props[0][200]); - $prop = $props[0][200]['{'.Plugin::NS_CALENDARSERVER.'}email-address-set']; - $this->assertInstanceOf('Sabre\\CalDAV\\Xml\\Property\\EmailAddressSet', $prop); - $this->assertEquals(['user1.sabredav@sabredav.org'], $prop->getValue()); - } - - public function testSupportedReportSetPropertyNonCalendar() - { - $props = $this->server->getPropertiesForPath('/calendars/user1', [ - '{DAV:}supported-report-set', - ]); - - $this->assertArrayHasKey(0, $props); - $this->assertArrayHasKey(200, $props[0]); - $this->assertArrayHasKey('{DAV:}supported-report-set', $props[0][200]); - - $prop = $props[0][200]['{DAV:}supported-report-set']; - - $this->assertInstanceOf('\\Sabre\\DAV\\Xml\\Property\\SupportedReportSet', $prop); - $value = [ - '{DAV:}expand-property', - '{DAV:}principal-match', - '{DAV:}principal-property-search', - '{DAV:}principal-search-property-set', - ]; - $this->assertEquals($value, $prop->getValue()); - } - - /** - * @depends testSupportedReportSetPropertyNonCalendar - */ - public function testSupportedReportSetProperty() - { - $props = $this->server->getPropertiesForPath('/calendars/user1/UUID-123467', [ - '{DAV:}supported-report-set', - ]); - - $this->assertArrayHasKey(0, $props); - $this->assertArrayHasKey(200, $props[0]); - $this->assertArrayHasKey('{DAV:}supported-report-set', $props[0][200]); - - $prop = $props[0][200]['{DAV:}supported-report-set']; - - $this->assertInstanceOf('\\Sabre\\DAV\\Xml\\Property\\SupportedReportSet', $prop); - $value = [ - '{urn:ietf:params:xml:ns:caldav}calendar-multiget', - '{urn:ietf:params:xml:ns:caldav}calendar-query', - '{urn:ietf:params:xml:ns:caldav}free-busy-query', - '{DAV:}expand-property', - '{DAV:}principal-match', - '{DAV:}principal-property-search', - '{DAV:}principal-search-property-set', - ]; - $this->assertEquals($value, $prop->getValue()); - } - - public function testSupportedReportSetUserCalendars() - { - $this->server->addPlugin(new \Sabre\DAV\Sync\Plugin()); - - $props = $this->server->getPropertiesForPath('/calendars/user1', [ - '{DAV:}supported-report-set', - ]); - - $this->assertArrayHasKey(0, $props); - $this->assertArrayHasKey(200, $props[0]); - $this->assertArrayHasKey('{DAV:}supported-report-set', $props[0][200]); - - $prop = $props[0][200]['{DAV:}supported-report-set']; - - $this->assertInstanceOf('\\Sabre\\DAV\\Xml\\Property\\SupportedReportSet', $prop); - $value = [ - '{DAV:}sync-collection', - '{DAV:}expand-property', - '{DAV:}principal-match', - '{DAV:}principal-property-search', - '{DAV:}principal-search-property-set', - ]; - $this->assertEquals($value, $prop->getValue()); - } - - /** - * @depends testSupportedReportSetProperty - */ - public function testCalendarMultiGetReport() - { - $body = - ''. - ''. - ''. - ' '. - ' '. - ''. - '/calendars/user1/UUID-123467/UUID-2345'. - ''; - - $request = new HTTP\Request('REPORT', '/calendars/user1', ['Depth' => '1']); - $request->setBody($body); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(207, $this->response->status, 'Invalid HTTP status received. Full response body'); - - $expectedIcal = TestUtil::getTestCalendarData(); - - $expected = << - - - /calendars/user1/UUID-123467/UUID-2345 - - - $expectedIcal - "e207e33c10e5fb9c12cfb35b5d9116e1" - - HTTP/1.1 200 OK - - - -XML; - - $this->assertXmlStringEqualsXmlString($expected, $this->response->getBodyAsString()); - } - - /** - * @depends testCalendarMultiGetReport - */ - public function testCalendarMultiGetReportExpand() - { - $body = - ''. - ''. - ''. - ' '. - ' '. - ' '. - ' '. - ''. - '/calendars/user1/UUID-123467/UUID-2345'. - ''; - - $request = new HTTP\Request('REPORT', '/calendars/user1', ['Depth' => '1']); - $request->setBody($body); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $bodyAsString = $this->response->getBodyAsString(); - $this->assertEquals(207, $this->response->status, 'Invalid HTTP status received. Full response body: '.$bodyAsString); - - $expectedIcal = TestUtil::getTestCalendarData(); - $expectedIcal = \Sabre\VObject\Reader::read($expectedIcal); - $expectedIcal = $expectedIcal->expand( - new DateTime('2011-01-01 00:00:00', new DateTimeZone('UTC')), - new DateTime('2011-12-31 23:59:59', new DateTimeZone('UTC')) - ); - $expectedIcal = str_replace("\r\n", " \n", $expectedIcal->serialize()); - - $expected = << - - - /calendars/user1/UUID-123467/UUID-2345 - - - $expectedIcal - "e207e33c10e5fb9c12cfb35b5d9116e1" - - HTTP/1.1 200 OK - - - -XML; - - $this->assertXmlStringEqualsXmlString($expected, $bodyAsString); - } - - /** - * @depends testSupportedReportSetProperty - * @depends testCalendarMultiGetReport - */ - public function testCalendarQueryReport() - { - $body = - ''. - ''. - ''. - ' '. - ' '. - ' '. - ' '. - ''. - ''. - ' '. - ' '. - ' '. - ''. - ''; - - $request = new HTTP\Request('REPORT', '/calendars/user1/UUID-123467', ['Depth' => '1']); - $request->setBody($body); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $bodyAsString = $this->response->getBodyAsString(); - $this->assertEquals(207, $this->response->status, 'Received an unexpected status. Full response body: '.$bodyAsString); - - $expectedIcal = TestUtil::getTestCalendarData(); - $expectedIcal = \Sabre\VObject\Reader::read($expectedIcal); - $expectedIcal = $expectedIcal->expand( - new DateTime('2000-01-01 00:00:00', new DateTimeZone('UTC')), - new DateTime('2010-12-31 23:59:59', new DateTimeZone('UTC')) - ); - $expectedIcal = str_replace("\r\n", " \n", $expectedIcal->serialize()); - - $expected = << - - - /calendars/user1/UUID-123467/UUID-2345 - - - $expectedIcal - "e207e33c10e5fb9c12cfb35b5d9116e1" - - HTTP/1.1 200 OK - - - -XML; - - $this->assertXmlStringEqualsXmlString($expected, $bodyAsString); - } - - /** - * @depends testSupportedReportSetProperty - * @depends testCalendarMultiGetReport - */ - public function testCalendarQueryReportWindowsPhone() - { - $body = - ''. - ''. - ''. - ' '. - ' '. - ' '. - ' '. - ''. - ''. - ' '. - ' '. - ' '. - ''. - ''; - - $request = new HTTP\Request('REPORT', '/calendars/user1/UUID-123467', [ - 'Depth' => '0', - 'User-Agent' => 'MSFT-WP/8.10.14219 (gzip)', - ]); - - $request->setBody($body); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $bodyAsString = $this->response->getBodyAsString(); - $this->assertEquals(207, $this->response->status, 'Received an unexpected status. Full response body: '.$bodyAsString); - - $expectedIcal = TestUtil::getTestCalendarData(); - $expectedIcal = \Sabre\VObject\Reader::read($expectedIcal); - $expectedIcal = $expectedIcal->expand( - new DateTime('2000-01-01 00:00:00', new DateTimeZone('UTC')), - new DateTime('2010-12-31 23:59:59', new DateTimeZone('UTC')) - ); - $expectedIcal = str_replace("\r\n", " \n", $expectedIcal->serialize()); - - $expected = << - - - /calendars/user1/UUID-123467/UUID-2345 - - - $expectedIcal - "e207e33c10e5fb9c12cfb35b5d9116e1" - - HTTP/1.1 200 OK - - - -XML; - - $this->assertXmlStringEqualsXmlString($expected, $bodyAsString); - } - - /** - * @depends testSupportedReportSetProperty - * @depends testCalendarMultiGetReport - */ - public function testCalendarQueryReportBadDepth() - { - $body = - ''. - ''. - ''. - ' '. - ' '. - ' '. - ' '. - ''. - ''. - ' '. - ' '. - ' '. - ''. - ''; - - $request = new HTTP\Request('REPORT', '/calendars/user1/UUID-123467', [ - 'Depth' => '0', - ]); - $request->setBody($body); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(400, $this->response->status, 'Received an unexpected status. Full response body: '.$this->response->getBodyAsString()); - } - - /** - * @depends testCalendarQueryReport - */ - public function testCalendarQueryReportNoCalData() - { - $body = - ''. - ''. - ''. - ' '. - ''. - ''. - ' '. - ' '. - ' '. - ''. - ''; - - $request = new HTTP\Request('REPORT', '/calendars/user1/UUID-123467', [ - 'Depth' => '1', - ]); - $request->setBody($body); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $bodyAsString = $this->server->httpResponse->getBodyAsString(); - $this->assertEquals(207, $this->response->status, 'Received an unexpected status. Full response body: '.$bodyAsString); - - $expected = << - - - /calendars/user1/UUID-123467/UUID-2345 - - - "e207e33c10e5fb9c12cfb35b5d9116e1" - - HTTP/1.1 200 OK - - - -XML; - - $this->assertXmlStringEqualsXmlString($expected, $bodyAsString); - } - - /** - * @depends testCalendarQueryReport - */ - public function testCalendarQueryReportNoFilters() - { - $body = - ''. - ''. - ''. - ' '. - ' '. - ''. - ''; - - $request = new HTTP\Request('REPORT', '/calendars/user1/UUID-123467'); - $request->setBody($body); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(400, $this->response->status, 'Received an unexpected status. Full response body: '.$this->response->getBodyAsString()); - } - - /** - * @depends testSupportedReportSetProperty - * @depends testCalendarMultiGetReport - */ - public function testCalendarQueryReport1Object() - { - $body = - ''. - ''. - ''. - ' '. - ' '. - ' '. - ' '. - ''. - ''. - ' '. - ' '. - ' '. - ''. - ''; - - $request = new HTTP\Request('REPORT', '/calendars/user1/UUID-123467/UUID-2345', ['Depth' => '0']); - $request->setBody($body); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $bodyAsString = $this->server->httpResponse->getBodyAsString(); - $this->assertEquals(207, $this->response->status, 'Received an unexpected status. Full response body: '.$bodyAsString); - - $expectedIcal = TestUtil::getTestCalendarData(); - $expectedIcal = \Sabre\VObject\Reader::read($expectedIcal); - $expectedIcal = $expectedIcal->expand( - new DateTime('2000-01-01 00:00:00', new DateTimeZone('UTC')), - new DateTime('2010-12-31 23:59:59', new DateTimeZone('UTC')) - ); - $expectedIcal = str_replace("\r\n", " \n", $expectedIcal->serialize()); - - $expected = << - - - /calendars/user1/UUID-123467/UUID-2345 - - - $expectedIcal - "e207e33c10e5fb9c12cfb35b5d9116e1" - - HTTP/1.1 200 OK - - - -XML; - - $this->assertXmlStringEqualsXmlString($expected, $bodyAsString); - } - - /** - * @depends testSupportedReportSetProperty - * @depends testCalendarMultiGetReport - */ - public function testCalendarQueryReport1ObjectNoCalData() - { - $body = - ''. - ''. - ''. - ' '. - ''. - ''. - ' '. - ' '. - ' '. - ''. - ''; - - $request = new HTTP\Request('REPORT', '/calendars/user1/UUID-123467/UUID-2345', ['Depth' => '0']); - $request->setBody($body); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $bodyAsString = $this->server->httpResponse->getBodyAsString(); - $this->assertEquals(207, $this->response->status, 'Received an unexpected status. Full response body: '.$bodyAsString); - - $expected = << - - - /calendars/user1/UUID-123467/UUID-2345 - - - "e207e33c10e5fb9c12cfb35b5d9116e1" - - HTTP/1.1 200 OK - - - -XML; - - $this->assertXmlStringEqualsXmlString($expected, $bodyAsString); - } - - public function testHTMLActionsPanel() - { - $output = ''; - $r = $this->server->emit('onHTMLActionsPanel', [$this->server->tree->getNodeForPath('calendars/user1'), &$output]); - $this->assertFalse($r); - - $this->assertTrue((bool) strpos($output, 'Display name')); - } - - /** - * @depends testCalendarMultiGetReport - */ - public function testCalendarMultiGetReportNoEnd() - { - $body = - ''. - ''. - ''. - ' '. - ' '. - ' '. - ' '. - ''. - '/calendars/user1/UUID-123467/UUID-2345'. - ''; - - $request = new HTTP\Request('REPORT', '/calendars/user1', ['Depth' => '1']); - $request->setBody($body); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(400, $this->response->status, 'Invalid HTTP status received. Full response body: '.$this->response->getBodyAsString()); - } - - /** - * @depends testCalendarMultiGetReport - */ - public function testCalendarMultiGetReportNoStart() - { - $body = - ''. - ''. - ''. - ' '. - ' '. - ' '. - ' '. - ''. - '/calendars/user1/UUID-123467/UUID-2345'. - ''; - - $request = new HTTP\Request('REPORT', '/calendars/user1', ['Depth' => '1']); - $request->setBody($body); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(400, $this->response->status, 'Invalid HTTP status received. Full response body: '.$this->response->getBodyAsString()); - } - - /** - * @depends testCalendarMultiGetReport - */ - public function testCalendarMultiGetReportEndBeforeStart() - { - $body = - ''. - ''. - ''. - ' '. - ' '. - ' '. - ' '. - ''. - '/calendars/user1/UUID-123467/UUID-2345'. - ''; - - $request = new HTTP\Request('REPORT', '/calendars/user1', ['Depth' => '1']); - $request->setBody($body); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(400, $this->response->status, 'Invalid HTTP status received. Full response body: '.$this->response->getBodyAsString()); - } - - /** - * @depends testSupportedReportSetPropertyNonCalendar - */ - public function testCalendarProperties() - { - $ns = '{urn:ietf:params:xml:ns:caldav}'; - $props = $this->server->getProperties('calendars/user1/UUID-123467', [ - $ns.'max-resource-size', - $ns.'supported-calendar-data', - $ns.'supported-collation-set', - ]); - - $this->assertEquals([ - $ns.'max-resource-size' => 10000000, - $ns.'supported-calendar-data' => new Xml\Property\SupportedCalendarData(), - $ns.'supported-collation-set' => new Xml\Property\SupportedCollationSet(), - ], $props); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Principal/CollectionTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Principal/CollectionTest.php deleted file mode 100644 index 277de0664..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Principal/CollectionTest.php +++ /dev/null @@ -1,20 +0,0 @@ -getChildForPrincipal([ - 'uri' => 'principals/admin', - ]); - $this->assertInstanceOf('Sabre\\CalDAV\\Principal\\User', $r); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Principal/ProxyReadTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Principal/ProxyReadTest.php deleted file mode 100644 index 95ff86fa1..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Principal/ProxyReadTest.php +++ /dev/null @@ -1,91 +0,0 @@ - 'principal/user', - ]); - $this->backend = $backend; - - return $principal; - } - - public function testGetName() - { - $i = $this->getInstance(); - $this->assertEquals('calendar-proxy-read', $i->getName()); - } - - public function testGetDisplayName() - { - $i = $this->getInstance(); - $this->assertEquals('calendar-proxy-read', $i->getDisplayName()); - } - - public function testGetLastModified() - { - $i = $this->getInstance(); - $this->assertNull($i->getLastModified()); - } - - public function testDelete() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $i = $this->getInstance(); - $i->delete(); - } - - public function testSetName() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $i = $this->getInstance(); - $i->setName('foo'); - } - - public function testGetAlternateUriSet() - { - $i = $this->getInstance(); - $this->assertEquals([], $i->getAlternateUriSet()); - } - - public function testGetPrincipalUri() - { - $i = $this->getInstance(); - $this->assertEquals('principal/user/calendar-proxy-read', $i->getPrincipalUrl()); - } - - public function testGetGroupMemberSet() - { - $i = $this->getInstance(); - $this->assertEquals([], $i->getGroupMemberSet()); - } - - public function testGetGroupMembership() - { - $i = $this->getInstance(); - $this->assertEquals([], $i->getGroupMembership()); - } - - public function testSetGroupMemberSet() - { - $i = $this->getInstance(); - $i->setGroupMemberSet(['principals/foo']); - - $expected = [ - $i->getPrincipalUrl() => ['principals/foo'], - ]; - - $this->assertEquals($expected, $this->backend->groupMembers); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Principal/ProxyWriteTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Principal/ProxyWriteTest.php deleted file mode 100644 index df1715ee5..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Principal/ProxyWriteTest.php +++ /dev/null @@ -1,39 +0,0 @@ - 'principal/user', - ]); - $this->backend = $backend; - - return $principal; - } - - public function testGetName() - { - $i = $this->getInstance(); - $this->assertEquals('calendar-proxy-write', $i->getName()); - } - - public function testGetDisplayName() - { - $i = $this->getInstance(); - $this->assertEquals('calendar-proxy-write', $i->getDisplayName()); - } - - public function testGetPrincipalUri() - { - $i = $this->getInstance(); - $this->assertEquals('principal/user/calendar-proxy-write', $i->getPrincipalUrl()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Principal/UserTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Principal/UserTest.php deleted file mode 100644 index fd079acb2..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Principal/UserTest.php +++ /dev/null @@ -1,111 +0,0 @@ -addPrincipal([ - 'uri' => 'principals/user/calendar-proxy-read', - ]); - $backend->addPrincipal([ - 'uri' => 'principals/user/calendar-proxy-write', - ]); - $backend->addPrincipal([ - 'uri' => 'principals/user/random', - ]); - - return new User($backend, [ - 'uri' => 'principals/user', - ]); - } - - public function testCreateFile() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $u = $this->getInstance(); - $u->createFile('test'); - } - - public function testCreateDirectory() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $u = $this->getInstance(); - $u->createDirectory('test'); - } - - public function testGetChildProxyRead() - { - $u = $this->getInstance(); - $child = $u->getChild('calendar-proxy-read'); - $this->assertInstanceOf('Sabre\\CalDAV\\Principal\\ProxyRead', $child); - } - - public function testGetChildProxyWrite() - { - $u = $this->getInstance(); - $child = $u->getChild('calendar-proxy-write'); - $this->assertInstanceOf('Sabre\\CalDAV\\Principal\\ProxyWrite', $child); - } - - public function testGetChildNotFound() - { - $this->expectException('Sabre\DAV\Exception\NotFound'); - $u = $this->getInstance(); - $child = $u->getChild('foo'); - } - - public function testGetChildNotFound2() - { - $this->expectException('Sabre\DAV\Exception\NotFound'); - $u = $this->getInstance(); - $child = $u->getChild('random'); - } - - public function testGetChildren() - { - $u = $this->getInstance(); - $children = $u->getChildren(); - $this->assertEquals(2, count($children)); - $this->assertInstanceOf('Sabre\\CalDAV\\Principal\\ProxyRead', $children[0]); - $this->assertInstanceOf('Sabre\\CalDAV\\Principal\\ProxyWrite', $children[1]); - } - - public function testChildExist() - { - $u = $this->getInstance(); - $this->assertTrue($u->childExists('calendar-proxy-read')); - $this->assertTrue($u->childExists('calendar-proxy-write')); - $this->assertFalse($u->childExists('foo')); - } - - public function testGetACL() - { - $expected = [ - [ - 'privilege' => '{DAV:}all', - 'principal' => '{DAV:}owner', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/user/calendar-proxy-read', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/user/calendar-proxy-write', - 'protected' => true, - ], - ]; - - $u = $this->getInstance(); - $this->assertEquals($expected, $u->getACL()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/Schedule/OutboxTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/Schedule/OutboxTest.php deleted file mode 100644 index df70fe7ec..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/Schedule/OutboxTest.php +++ /dev/null @@ -1,47 +0,0 @@ -assertEquals('outbox', $outbox->getName()); - $this->assertEquals([], $outbox->getChildren()); - $this->assertEquals('principals/user1', $outbox->getOwner()); - $this->assertEquals(null, $outbox->getGroup()); - - $this->assertEquals([ - [ - 'privilege' => '{'.CalDAV\Plugin::NS_CALDAV.'}schedule-send', - 'principal' => 'principals/user1', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/user1', - 'protected' => true, - ], - [ - 'privilege' => '{'.CalDAV\Plugin::NS_CALDAV.'}schedule-send', - 'principal' => 'principals/user1/calendar-proxy-write', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/user1/calendar-proxy-read', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/user1/calendar-proxy-write', - 'protected' => true, - ], - ], $outbox->getACL()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/SharedCalendarTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/SharedCalendarTest.php deleted file mode 100644 index 735bbef41..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/SharedCalendarTest.php +++ /dev/null @@ -1,172 +0,0 @@ - 1, - '{http://calendarserver.org/ns/}shared-url' => 'calendars/owner/original', - '{http://sabredav.org/ns}owner-principal' => 'principals/owner', - '{http://sabredav.org/ns}read-only' => false, - 'share-access' => Sharing\Plugin::ACCESS_READWRITE, - 'principaluri' => 'principals/sharee', - ]; - } - - $this->backend = new Backend\MockSharing( - [$props], - [], - [] - ); - - $sharee = new Sharee(); - $sharee->href = 'mailto:removeme@example.org'; - $sharee->properties['{DAV:}displayname'] = 'To be removed'; - $sharee->access = Sharing\Plugin::ACCESS_READ; - $this->backend->updateInvites(1, [$sharee]); - - return new SharedCalendar($this->backend, $props); - } - - public function testGetInvites() - { - $sharee = new Sharee(); - $sharee->href = 'mailto:removeme@example.org'; - $sharee->properties['{DAV:}displayname'] = 'To be removed'; - $sharee->access = Sharing\Plugin::ACCESS_READ; - $sharee->inviteStatus = Sharing\Plugin::INVITE_NORESPONSE; - - $this->assertEquals( - [$sharee], - $this->getInstance()->getInvites() - ); - } - - public function testGetOwner() - { - $this->assertEquals('principals/sharee', $this->getInstance()->getOwner()); - } - - public function testGetACL() - { - $expected = [ - [ - 'privilege' => '{DAV:}write', - 'principal' => 'principals/sharee', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}write', - 'principal' => 'principals/sharee/calendar-proxy-write', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}write-properties', - 'principal' => 'principals/sharee', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}write-properties', - 'principal' => 'principals/sharee/calendar-proxy-write', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/sharee', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/sharee/calendar-proxy-read', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/sharee/calendar-proxy-write', - 'protected' => true, - ], - [ - 'privilege' => '{'.Plugin::NS_CALDAV.'}read-free-busy', - 'principal' => '{DAV:}authenticated', - 'protected' => true, - ], - ]; - - $this->assertEquals($expected, $this->getInstance()->getACL()); - } - - public function testGetChildACL() - { - $expected = [ - [ - 'privilege' => '{DAV:}write', - 'principal' => 'principals/sharee', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}write', - 'principal' => 'principals/sharee/calendar-proxy-write', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/sharee', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/sharee/calendar-proxy-write', - 'protected' => true, - ], - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/sharee/calendar-proxy-read', - 'protected' => true, - ], - ]; - - $this->assertEquals($expected, $this->getInstance()->getChildACL()); - } - - public function testUpdateInvites() - { - $instance = $this->getInstance(); - $newSharees = [ - new Sharee(), - new Sharee(), - ]; - $newSharees[0]->href = 'mailto:test@example.org'; - $newSharees[0]->properties['{DAV:}displayname'] = 'Foo Bar'; - $newSharees[0]->comment = 'Booh'; - $newSharees[0]->access = Sharing\Plugin::ACCESS_READWRITE; - - $newSharees[1]->href = 'mailto:removeme@example.org'; - $newSharees[1]->access = Sharing\Plugin::ACCESS_NOACCESS; - - $instance->updateInvites($newSharees); - - $expected = [ - clone $newSharees[0], - ]; - $expected[0]->inviteStatus = Sharing\Plugin::INVITE_NORESPONSE; - $this->assertEquals($expected, $instance->getInvites()); - } - - public function testPublish() - { - $instance = $this->getInstance(); - $this->assertNull($instance->setPublishStatus(true)); - $this->assertNull($instance->setPublishStatus(false)); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/SharingPluginTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/SharingPluginTest.php deleted file mode 100644 index f11af8b95..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/SharingPluginTest.php +++ /dev/null @@ -1,383 +0,0 @@ -caldavCalendars = [ - [ - 'principaluri' => 'principals/user1', - 'id' => 1, - 'uri' => 'cal1', - ], - [ - 'principaluri' => 'principals/user1', - 'id' => 2, - 'uri' => 'cal2', - 'share-access' => \Sabre\DAV\Sharing\Plugin::ACCESS_READWRITE, - ], - [ - 'principaluri' => 'principals/user1', - 'id' => 3, - 'uri' => 'cal3', - ], - ]; - - parent::setUp(); - - // Making the logged in user an admin, for full access: - $this->aclPlugin->adminPrincipals[] = 'principals/user2'; - } - - public function testSimple() - { - $this->assertInstanceOf('Sabre\\CalDAV\\SharingPlugin', $this->server->getPlugin('caldav-sharing')); - $this->assertEquals( - 'caldav-sharing', - $this->caldavSharingPlugin->getPluginInfo()['name'] - ); - } - - public function testSetupWithoutCoreSharingPlugin() - { - $this->expectException('LogicException'); - $server = new DAV\Server(); - $server->addPlugin( - new SharingPlugin() - ); - } - - public function testGetFeatures() - { - $this->assertEquals(['calendarserver-sharing'], $this->caldavSharingPlugin->getFeatures()); - } - - public function testBeforeGetShareableCalendar() - { - // Forcing the server to authenticate: - $this->authPlugin->beforeMethod(new HTTP\Request('GET', '/'), new HTTP\Response()); - $props = $this->server->getProperties('calendars/user1/cal1', [ - '{'.Plugin::NS_CALENDARSERVER.'}invite', - '{'.Plugin::NS_CALENDARSERVER.'}allowed-sharing-modes', - ]); - - $this->assertInstanceOf('Sabre\\CalDAV\\Xml\\Property\\Invite', $props['{'.Plugin::NS_CALENDARSERVER.'}invite']); - $this->assertInstanceOf('Sabre\\CalDAV\\Xml\\Property\\AllowedSharingModes', $props['{'.Plugin::NS_CALENDARSERVER.'}allowed-sharing-modes']); - } - - public function testBeforeGetSharedCalendar() - { - $props = $this->server->getProperties('calendars/user1/cal2', [ - '{'.Plugin::NS_CALENDARSERVER.'}shared-url', - '{'.Plugin::NS_CALENDARSERVER.'}invite', - ]); - - $this->assertInstanceOf('Sabre\\CalDAV\\Xml\\Property\\Invite', $props['{'.Plugin::NS_CALENDARSERVER.'}invite']); - //$this->assertInstanceOf('Sabre\\DAV\\Xml\\Property\\Href', $props['{' . Plugin::NS_CALENDARSERVER . '}shared-url']); - } - - public function testUpdateResourceType() - { - $this->caldavBackend->updateInvites(1, - [ - new Sharee([ - 'href' => 'mailto:joe@example.org', - ]), - ] - ); - $result = $this->server->updateProperties('calendars/user1/cal1', [ - '{DAV:}resourcetype' => new DAV\Xml\Property\ResourceType(['{DAV:}collection']), - ]); - - $this->assertEquals([ - '{DAV:}resourcetype' => 200, - ], $result); - - $this->assertEquals(0, count($this->caldavBackend->getInvites(1))); - } - - public function testUpdatePropertiesPassThru() - { - $result = $this->server->updateProperties('calendars/user1/cal3', [ - '{DAV:}foo' => 'bar', - ]); - - $this->assertEquals([ - '{DAV:}foo' => 200, - ], $result); - } - - public function testUnknownMethodNoPOST() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PATCH', - 'REQUEST_URI' => '/', - ]); - - $response = $this->request($request); - - $this->assertEquals(501, $response->status, $response->getBodyAsString()); - } - - public function testUnknownMethodNoXML() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'POST', - 'REQUEST_URI' => '/', - 'CONTENT_TYPE' => 'text/plain', - ]); - - $response = $this->request($request); - - $this->assertEquals(501, $response->status, $response->getBodyAsString()); - } - - public function testUnknownMethodNoNode() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'POST', - 'REQUEST_URI' => '/foo', - 'CONTENT_TYPE' => 'text/xml', - ]); - - $response = $this->request($request); - - $this->assertEquals(501, $response->status, $response->getBodyAsString()); - } - - public function testShareRequest() - { - $request = new HTTP\Request('POST', '/calendars/user1/cal1', ['Content-Type' => 'text/xml']); - - $xml = << - - - mailto:joe@example.org - Joe Shmoe - - - - mailto:nancy@example.org - - -RRR; - - $request->setBody($xml); - - $this->request($request, 200); - - $this->assertEquals( - [ - new Sharee([ - 'href' => 'mailto:joe@example.org', - 'properties' => [ - '{DAV:}displayname' => 'Joe Shmoe', - ], - 'access' => \Sabre\DAV\Sharing\Plugin::ACCESS_READWRITE, - 'inviteStatus' => \Sabre\DAV\Sharing\Plugin::INVITE_NORESPONSE, - 'comment' => '', - ]), - ], - $this->caldavBackend->getInvites(1) - ); - - // Wiping out tree cache - $this->server->tree->markDirty(''); - - // Verifying that the calendar is now marked shared. - $props = $this->server->getProperties('calendars/user1/cal1', ['{DAV:}resourcetype']); - $this->assertTrue( - $props['{DAV:}resourcetype']->is('{http://calendarserver.org/ns/}shared-owner') - ); - } - - public function testShareRequestNoShareableCalendar() - { - $request = new HTTP\Request( - 'POST', - '/calendars/user1/cal2', - ['Content-Type' => 'text/xml'] - ); - - $xml = ' - - - mailto:joe@example.org - Joe Shmoe - - - - mailto:nancy@example.org - - -'; - - $request->setBody($xml); - - $this->request($request, 403); - } - - public function testInviteReply() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'POST', - 'REQUEST_URI' => '/calendars/user1', - 'CONTENT_TYPE' => 'text/xml', - ]); - - $xml = ' - - /principals/owner - - -'; - - $request->setBody($xml); - $response = $this->request($request); - $this->assertEquals(200, $response->status, $response->getBodyAsString()); - } - - public function testInviteBadXML() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'POST', - 'REQUEST_URI' => '/calendars/user1', - 'CONTENT_TYPE' => 'text/xml', - ]); - - $xml = ' - - -'; - $request->setBody($xml); - $response = $this->request($request); - $this->assertEquals(400, $response->status, $response->getBodyAsString()); - } - - public function testInviteWrongUrl() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'POST', - 'REQUEST_URI' => '/calendars/user1/cal1', - 'CONTENT_TYPE' => 'text/xml', - ]); - - $xml = ' - - /principals/owner - -'; - $request->setBody($xml); - $response = $this->request($request); - $this->assertEquals(501, $response->status, $response->getBodyAsString()); - - // If the plugin did not handle this request, it must ensure that the - // body is still accessible by other plugins. - $this->assertEquals($xml, $request->getBody()); - } - - public function testPostWithoutContentType() - { - $request = new HTTP\Request('POST', '/'); - $response = new HTTP\ResponseMock(); - - $this->caldavSharingPlugin->httpPost($request, $response); - $this->assertTrue(true); - } - - public function testPublish() - { - $request = new HTTP\Request('POST', '/calendars/user1/cal1', ['Content-Type' => 'text/xml']); - - $xml = ' - -'; - - $request->setBody($xml); - - $response = $this->request($request); - $this->assertEquals(202, $response->status, $response->getBodyAsString()); - } - - public function testUnpublish() - { - $request = new HTTP\Request( - 'POST', - '/calendars/user1/cal1', - ['Content-Type' => 'text/xml'] - ); - - $xml = ' - -'; - - $request->setBody($xml); - - $response = $this->request($request); - $this->assertEquals(200, $response->status, $response->getBodyAsString()); - } - - public function testPublishWrongUrl() - { - $request = new HTTP\Request( - 'POST', - '/calendars/user1', - ['Content-Type' => 'text/xml'] - ); - - $xml = ' - -'; - - $request->setBody($xml); - $this->request($request, 501); - } - - public function testUnpublishWrongUrl() - { - $request = new HTTP\Request( - 'POST', - '/calendars/user1', - ['Content-Type' => 'text/xml'] - ); - $xml = ' - -'; - - $request->setBody($xml); - - $this->request($request, 501); - } - - public function testUnknownXmlDoc() - { - $request = new HTTP\Request( - 'POST', - '/calendars/user1/cal2', - ['Content-Type' => 'text/xml'] - ); - - $xml = ' -'; - - $request->setBody($xml); - - $response = $this->request($request); - $this->assertEquals(501, $response->status, $response->getBodyAsString()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/TestUtil.php b/vendor/sabre/dav/tests/Sabre/CalDAV/TestUtil.php deleted file mode 100644 index 5de11a31a..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/TestUtil.php +++ /dev/null @@ -1,102 +0,0 @@ -createCalendar( - 'principals/user1', - 'UUID-123467', - [ - '{DAV:}displayname' => 'user1 calendar', - '{urn:ietf:params:xml:ns:caldav}calendar-description' => 'Calendar description', - '{http://apple.com/ns/ical/}calendar-order' => '1', - '{http://apple.com/ns/ical/}calendar-color' => '#FF0000', - ] - ); - $backend->createCalendar( - 'principals/user1', - 'UUID-123468', - [ - '{DAV:}displayname' => 'user1 calendar2', - '{urn:ietf:params:xml:ns:caldav}calendar-description' => 'Calendar description', - '{http://apple.com/ns/ical/}calendar-order' => '1', - '{http://apple.com/ns/ical/}calendar-color' => '#FF0000', - ] - ); - $backend->createCalendarObject($calendarId, 'UUID-2345', self::getTestCalendarData()); - - return $backend; - } - - public static function getTestCalendarData($type = 1) - { - $calendarData = 'BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//Apple Inc.//iCal 4.0.1//EN -CALSCALE:GREGORIAN -BEGIN:VTIMEZONE -TZID:Asia/Seoul -BEGIN:DAYLIGHT -TZOFFSETFROM:+0900 -RRULE:FREQ=YEARLY;UNTIL=19880507T150000Z;BYMONTH=5;BYDAY=2SU -DTSTART:19870510T000000 -TZNAME:GMT+09:00 -TZOFFSETTO:+1000 -END:DAYLIGHT -BEGIN:STANDARD -TZOFFSETFROM:+1000 -DTSTART:19881009T000000 -TZNAME:GMT+09:00 -TZOFFSETTO:+0900 -END:STANDARD -END:VTIMEZONE -BEGIN:VEVENT -CREATED:20100225T154229Z -UID:39A6B5ED-DD51-4AFE-A683-C35EE3749627 -TRANSP:TRANSPARENT -SUMMARY:Something here -DTSTAMP:20100228T130202Z'; - - switch ($type) { - case 1: - $calendarData .= "\nDTSTART;TZID=Asia/Seoul:20100223T060000\nDTEND;TZID=Asia/Seoul:20100223T070000\n"; - break; - case 2: - $calendarData .= "\nDTSTART:20100223T060000\nDTEND:20100223T070000\n"; - break; - case 3: - $calendarData .= "\nDTSTART;VALUE=DATE:20100223\nDTEND;VALUE=DATE:20100223\n"; - break; - case 4: - $calendarData .= "\nDTSTART;TZID=Asia/Seoul:20100223T060000\nDURATION:PT1H\n"; - break; - case 5: - $calendarData .= "\nDTSTART;TZID=Asia/Seoul:20100223T060000\nDURATION:-P5D\n"; - break; - case 6: - $calendarData .= "\nDTSTART;VALUE=DATE:20100223\n"; - break; - case 7: - $calendarData .= "\nDTSTART;VALUE=DATETIME:20100223T060000\n"; - break; - - // No DTSTART, so intentionally broken - case 'X': - $calendarData .= "\n"; - break; - } - - $calendarData .= 'ATTENDEE;PARTSTAT=NEEDS-ACTION:mailto:lisa@example.com -SEQUENCE:2 -END:VEVENT -END:VCALENDAR'; - - return $calendarData; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CalDAV/ValidateICalTest.php b/vendor/sabre/dav/tests/Sabre/CalDAV/ValidateICalTest.php deleted file mode 100644 index 4e2411391..000000000 --- a/vendor/sabre/dav/tests/Sabre/CalDAV/ValidateICalTest.php +++ /dev/null @@ -1,392 +0,0 @@ - 'calendar1', - 'principaluri' => 'principals/admin', - 'uri' => 'calendar1', - '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new Xml\Property\SupportedCalendarComponentSet(['VEVENT', 'VTODO', 'VJOURNAL']), - ], - [ - 'id' => 'calendar2', - 'principaluri' => 'principals/admin', - 'uri' => 'calendar2', - '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new Xml\Property\SupportedCalendarComponentSet(['VTODO', 'VJOURNAL']), - ], - ]; - - $this->calBackend = new Backend\Mock($calendars, []); - $principalBackend = new DAVACL\PrincipalBackend\Mock(); - - $tree = [ - new CalendarRoot($principalBackend, $this->calBackend), - ]; - - $this->server = new DAV\Server($tree); - $this->server->sapi = new HTTP\SapiMock(); - $this->server->debugExceptions = true; - - $plugin = new Plugin(); - $this->server->addPlugin($plugin); - - $response = new HTTP\ResponseMock(); - $this->server->httpResponse = $response; - } - - /** - * @return Sabre\HTTP\ResponseMock - */ - public function request(HTTP\Request $request) - { - $this->server->httpRequest = $request; - $this->server->exec(); - - return $this->server->httpResponse; - } - - public function testCreateFile() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PUT', - 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics', - ]); - - $response = $this->request($request); - - $this->assertEquals(415, $response->status); - } - - public function testCreateFileValid() - { - $request = new HTTP\Request( - 'PUT', - '/calendars/admin/calendar1/blabla.ics', - ['Prefer' => 'handling=strict'] - ); - - $ics = <<setBody($ics); - - $response = $this->request($request); - - $this->assertEquals(201, $response->status, 'Incorrect status returned! Full response body: '.$response->getBodyAsString()); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Length' => ['0'], - 'ETag' => ['"'.md5($ics).'"'], - ], $response->getHeaders()); - - $expected = [ - 'uri' => 'blabla.ics', - 'calendardata' => $ics, - 'calendarid' => 'calendar1', - 'lastmodified' => null, - ]; - - $this->assertEquals($expected, $this->calBackend->getCalendarObject('calendar1', 'blabla.ics')); - } - - public function testCreateFileNoVersion() - { - $request = new HTTP\Request( - 'PUT', - '/calendars/admin/calendar1/blabla.ics', - ['Prefer' => 'handling=strict'] - ); - - $ics = <<setBody($ics); - - $response = $this->request($request); - - $this->assertEquals(415, $response->status, 'Incorrect status returned! Full response body: '.$response->getBodyAsString()); - } - - public function testCreateFileNoVersionFixed() - { - $request = new HTTP\Request( - 'PUT', - '/calendars/admin/calendar1/blabla.ics', - ['Prefer' => 'handling=lenient'] - ); - - $ics = <<setBody($ics); - - $response = $this->request($request); - - $this->assertEquals(201, $response->status, 'Incorrect status returned! Full response body: '.$response->getBodyAsString()); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Length' => ['0'], - 'X-Sabre-Ew-Gross' => ['iCalendar validation warning: VERSION MUST appear exactly once in a VCALENDAR component'], - ], $response->getHeaders()); - - $ics = << 'blabla.ics', - 'calendardata' => $ics, - 'calendarid' => 'calendar1', - 'lastmodified' => null, - ]; - - $this->assertEquals($expected, $this->calBackend->getCalendarObject('calendar1', 'blabla.ics')); - } - - public function testCreateFileNoComponents() - { - $request = new HTTP\Request( - 'PUT', - '/calendars/admin/calendar1/blabla.ics', - ['Prefer' => 'handling=strict'] - ); - $ics = <<setBody($ics); - - $response = $this->request($request); - $this->assertEquals(403, $response->status, 'Incorrect status returned! Full response body: '.$response->getBodyAsString()); - } - - public function testCreateFileNoUID() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PUT', - 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics', - ]); - $request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); - - $response = $this->request($request); - - $this->assertEquals(415, $response->status, 'Incorrect status returned! Full response body: '.$response->getBodyAsString()); - } - - public function testCreateFileVCard() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PUT', - 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics', - ]); - $request->setBody("BEGIN:VCARD\r\nEND:VCARD\r\n"); - - $response = $this->request($request); - - $this->assertEquals(415, $response->status, 'Incorrect status returned! Full response body: '.$response->getBodyAsString()); - } - - public function testCreateFile2Components() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PUT', - 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics', - ]); - $request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nBEGIN:VJOURNAL\r\nUID:foo\r\nEND:VJOURNAL\r\nEND:VCALENDAR\r\n"); - - $response = $this->request($request); - - $this->assertEquals(415, $response->status, 'Incorrect status returned! Full response body: '.$response->getBodyAsString()); - } - - public function testCreateFile2UIDS() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PUT', - 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics', - ]); - $request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nUID:bar\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); - - $response = $this->request($request); - - $this->assertEquals(415, $response->status, 'Incorrect status returned! Full response body: '.$response->getBodyAsString()); - } - - public function testCreateFileWrongComponent() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PUT', - 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics', - ]); - $request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nBEGIN:VFREEBUSY\r\nUID:foo\r\nEND:VFREEBUSY\r\nEND:VCALENDAR\r\n"); - - $response = $this->request($request); - - $this->assertEquals(403, $response->status, 'Incorrect status returned! Full response body: '.$response->getBodyAsString()); - } - - public function testUpdateFile() - { - $this->calBackend->createCalendarObject('calendar1', 'blabla.ics', 'foo'); - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PUT', - 'REQUEST_URI' => '/calendars/admin/calendar1/blabla.ics', - ]); - - $response = $this->request($request); - - $this->assertEquals(415, $response->status); - } - - public function testUpdateFileParsableBody() - { - $this->calBackend->createCalendarObject('calendar1', 'blabla.ics', 'foo'); - $request = new HTTP\Request( - 'PUT', - '/calendars/admin/calendar1/blabla.ics' - ); - $ics = <<setBody($ics); - $response = $this->request($request); - - $this->assertEquals(204, $response->status); - - $expected = [ - 'uri' => 'blabla.ics', - 'calendardata' => $ics, - 'calendarid' => 'calendar1', - 'lastmodified' => null, - ]; - - $this->assertEquals($expected, $this->calBackend->getCalendarObject('calendar1', 'blabla.ics')); - } - - public function testCreateFileInvalidComponent() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PUT', - 'REQUEST_URI' => '/calendars/admin/calendar2/blabla.ics', - ]); - $request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); - - $response = $this->request($request); - - $this->assertEquals(403, $response->status, 'Incorrect status returned! Full response body: '.$response->getBodyAsString()); - } - - public function testUpdateFileInvalidComponent() - { - $this->calBackend->createCalendarObject('calendar2', 'blabla.ics', 'foo'); - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PUT', - 'REQUEST_URI' => '/calendars/admin/calendar2/blabla.ics', - ]); - $request->setBody("BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"); - - $response = $this->request($request); - - $this->assertEquals(403, $response->status, 'Incorrect status returned! Full response body: '.$response->getBodyAsString()); - } - - /** - * What we are testing here, is if we send in a latin1 character, the - * server should automatically transform this into UTF-8. - * - * More importantly. If any transformation happens, the etag must no longer - * be returned by the server. - */ - public function testCreateFileModified() - { - $request = new HTTP\Request( - 'PUT', - '/calendars/admin/calendar1/blabla.ics' - ); - $ics = <<setBody($ics); - - $response = $this->request($request); - - $this->assertEquals(201, $response->status, 'Incorrect status returned! Full response body: '.$response->getBodyAsString()); - $this->assertNull($response->getHeader('ETag')); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CardDAV/AbstractPluginTest.php b/vendor/sabre/dav/tests/Sabre/CardDAV/AbstractPluginTest.php deleted file mode 100644 index 6565fc459..000000000 --- a/vendor/sabre/dav/tests/Sabre/CardDAV/AbstractPluginTest.php +++ /dev/null @@ -1,43 +0,0 @@ -backend = new Backend\Mock(); - $principalBackend = new DAVACL\PrincipalBackend\Mock(); - - $tree = [ - new AddressBookRoot($principalBackend, $this->backend), - new DAVACL\PrincipalCollection($principalBackend), - ]; - - $this->plugin = new Plugin(); - $this->plugin->directories = ['directory']; - $this->server = new DAV\Server($tree); - $this->server->sapi = new HTTP\SapiMock(); - $this->server->addPlugin($this->plugin); - $this->server->debugExceptions = true; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CardDAV/AddressBookQueryTest.php b/vendor/sabre/dav/tests/Sabre/CardDAV/AddressBookQueryTest.php deleted file mode 100644 index a86d85144..000000000 --- a/vendor/sabre/dav/tests/Sabre/CardDAV/AddressBookQueryTest.php +++ /dev/null @@ -1,351 +0,0 @@ - '1'] - ); - - $request->setBody( -' - - - - - - - -' - ); - - $response = new HTTP\ResponseMock(); - - $this->server->httpRequest = $request; - $this->server->httpResponse = $response; - - $this->server->exec(); - - $bodyAsString = $response->getBodyAsString(); - $this->assertEquals(207, $response->status, 'Incorrect status code. Full response body:'.$bodyAsString); - - // using the client for parsing - $client = new DAV\Client(['baseUri' => '/']); - - $result = $client->parseMultiStatus($bodyAsString); - - $this->assertEquals([ - '/addressbooks/user1/book1/card1' => [ - 200 => [ - '{DAV:}getetag' => '"'.md5("BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD").'"', - ], - ], - '/addressbooks/user1/book1/card2' => [ - 404 => [ - '{DAV:}getetag' => null, - ], - ], - ], $result); - } - - public function testQueryDepth0() - { - $request = new HTTP\Request( - 'REPORT', - '/addressbooks/user1/book1/card1', - ['Depth' => '0'] - ); - - $request->setBody( -' - - - - - - - -' - ); - - $response = new HTTP\ResponseMock(); - - $this->server->httpRequest = $request; - $this->server->httpResponse = $response; - - $this->server->exec(); - - $bodyAsString = $response->getBodyAsString(); - $this->assertEquals(207, $response->status, 'Incorrect status code. Full response body:'.$bodyAsString); - - // using the client for parsing - $client = new DAV\Client(['baseUri' => '/']); - - $result = $client->parseMultiStatus($bodyAsString); - - $this->assertEquals([ - '/addressbooks/user1/book1/card1' => [ - 200 => [ - '{DAV:}getetag' => '"'.md5("BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD").'"', - ], - ], - ], $result); - } - - public function testQueryNoMatch() - { - $request = new HTTP\Request( - 'REPORT', - '/addressbooks/user1/book1', - ['Depth' => '1'] - ); - - $request->setBody( -' - - - - - - - -' - ); - - $response = new HTTP\ResponseMock(); - - $this->server->httpRequest = $request; - $this->server->httpResponse = $response; - - $this->server->exec(); - - $bodyAsString = $response->getBodyAsString(); - $this->assertEquals(207, $response->status, 'Incorrect status code. Full response body:'.$bodyAsString); - - // using the client for parsing - $client = new DAV\Client(['baseUri' => '/']); - - $result = $client->parseMultiStatus($bodyAsString); - - $this->assertEquals([], $result); - } - - public function testQueryLimit() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'REPORT', - 'REQUEST_URI' => '/addressbooks/user1/book1', - 'HTTP_DEPTH' => '1', - ]); - - $request->setBody( -' - - - - - - - - 1 -' - ); - - $response = new HTTP\ResponseMock(); - - $this->server->httpRequest = $request; - $this->server->httpResponse = $response; - - $this->server->exec(); - - $bodyAsString = $response->getBodyAsString(); - $this->assertEquals(207, $response->status, 'Incorrect status code. Full response body:'.$bodyAsString); - - // using the client for parsing - $client = new DAV\Client(['baseUri' => '/']); - - $result = $client->parseMultiStatus($bodyAsString); - - $this->assertEquals([ - '/addressbooks/user1/book1/card1' => [ - 200 => [ - '{DAV:}getetag' => '"'.md5("BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD").'"', - ], - ], - ], $result); - } - - public function testJson() - { - $request = new HTTP\Request( - 'REPORT', - '/addressbooks/user1/book1/card1', - ['Depth' => '0'] - ); - - $request->setBody( -' - - - - - -' - ); - - $response = new HTTP\ResponseMock(); - - $this->server->httpRequest = $request; - $this->server->httpResponse = $response; - - $this->server->exec(); - - $bodyAsString = $response->getBodyAsString(); - $this->assertEquals(207, $response->status, 'Incorrect status code. Full response body:'.$bodyAsString); - - // using the client for parsing - $client = new DAV\Client(['baseUri' => '/']); - - $result = $client->parseMultiStatus($bodyAsString); - - $vobjVersion = \Sabre\VObject\Version::VERSION; - - $this->assertEquals([ - '/addressbooks/user1/book1/card1' => [ - 200 => [ - '{DAV:}getetag' => '"'.md5("BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD").'"', - '{urn:ietf:params:xml:ns:carddav}address-data' => '["vcard",[["version",{},"text","4.0"],["prodid",{},"text","-\/\/Sabre\/\/Sabre VObject '.$vobjVersion.'\/\/EN"],["uid",{},"text","12345"]]]', - ], - ], - ], $result); - } - - public function testVCard4() - { - $request = new HTTP\Request( - 'REPORT', - '/addressbooks/user1/book1/card1', - ['Depth' => '0'] - ); - - $request->setBody( -' - - - - - -' - ); - - $response = new HTTP\ResponseMock(); - - $this->server->httpRequest = $request; - $this->server->httpResponse = $response; - - $this->server->exec(); - - $bodyAsString = $response->getBodyAsString(); - $this->assertEquals(207, $response->status, 'Incorrect status code. Full response body:'.$bodyAsString); - - // using the client for parsing - $client = new DAV\Client(['baseUri' => '/']); - - $result = $client->parseMultiStatus($bodyAsString); - - $vobjVersion = \Sabre\VObject\Version::VERSION; - - $this->assertEquals([ - '/addressbooks/user1/book1/card1' => [ - 200 => [ - '{DAV:}getetag' => '"'.md5("BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD").'"', - '{urn:ietf:params:xml:ns:carddav}address-data' => "BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:-//Sabre//Sabre VObject $vobjVersion//EN\r\nUID:12345\r\nEND:VCARD\r\n", - ], - ], - ], $result); - } - - public function testAddressBookDepth0() - { - $request = new HTTP\Request( - 'REPORT', - '/addressbooks/user1/book1', - ['Depth' => '0'] - ); - - $request->setBody( - ' - - - - - -' - ); - - $response = new HTTP\ResponseMock(); - - $this->server->httpRequest = $request; - $this->server->httpResponse = $response; - - $this->server->exec(); - - $this->assertEquals(415, $response->status, 'Incorrect status code. Full response body:'.$response->getBodyAsString()); - } - - public function testAddressBookProperties() - { - $request = new HTTP\Request( - 'REPORT', - '/addressbooks/user1/book3', - ['Depth' => '1'] - ); - - $request->setBody( - ' - - - - - - - - -' - ); - - $response = new HTTP\ResponseMock(); - - $this->server->httpRequest = $request; - $this->server->httpResponse = $response; - - $this->server->exec(); - - $bodyAsString = $response->getBodyAsString(); - $this->assertEquals(207, $response->status, 'Incorrect status code. Full response body:'.$bodyAsString); - - // using the client for parsing - $client = new DAV\Client(['baseUri' => '/']); - - $result = $client->parseMultiStatus($bodyAsString); - - $this->assertEquals([ - '/addressbooks/user1/book3/card3' => [ - 200 => [ - '{DAV:}getetag' => '"'.md5("BEGIN:VCARD\nVERSION:3.0\nUID:12345\nFN:Test-Card\nEMAIL;TYPE=home:bar@example.org\nEND:VCARD").'"', - '{urn:ietf:params:xml:ns:carddav}address-data' => "BEGIN:VCARD\r\nVERSION:3.0\r\nUID:12345\r\nFN:Test-Card\r\nEND:VCARD\r\n", - ], - ], - ], $result); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CardDAV/AddressBookRootTest.php b/vendor/sabre/dav/tests/Sabre/CardDAV/AddressBookRootTest.php deleted file mode 100644 index c4aff2712..000000000 --- a/vendor/sabre/dav/tests/Sabre/CardDAV/AddressBookRootTest.php +++ /dev/null @@ -1,31 +0,0 @@ -assertEquals('addressbooks', $root->getName()); - } - - public function testGetChildForPrincipal() - { - $pBackend = new DAVACL\PrincipalBackend\Mock(); - $cBackend = new Backend\Mock(); - $root = new AddressBookRoot($pBackend, $cBackend); - - $children = $root->getChildren(); - $this->assertEquals(3, count($children)); - - $this->assertInstanceOf('Sabre\\CardDAV\\AddressBookHome', $children[0]); - $this->assertEquals('user1', $children[0]->getName()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CardDAV/AddressBookTest.php b/vendor/sabre/dav/tests/Sabre/CardDAV/AddressBookTest.php deleted file mode 100644 index e985c54ff..000000000 --- a/vendor/sabre/dav/tests/Sabre/CardDAV/AddressBookTest.php +++ /dev/null @@ -1,171 +0,0 @@ -backend = new Backend\Mock(); - $this->ab = new AddressBook( - $this->backend, - [ - 'uri' => 'book1', - 'id' => 'foo', - '{DAV:}displayname' => 'd-name', - 'principaluri' => 'principals/user1', - ] - ); - } - - public function testGetName() - { - $this->assertEquals('book1', $this->ab->getName()); - } - - public function testGetChild() - { - $card = $this->ab->getChild('card1'); - $this->assertInstanceOf('Sabre\\CardDAV\\Card', $card); - $this->assertEquals('card1', $card->getName()); - } - - public function testGetChildNotFound() - { - $this->expectException('Sabre\DAV\Exception\NotFound'); - $card = $this->ab->getChild('card3'); - } - - public function testGetChildren() - { - $cards = $this->ab->getChildren(); - $this->assertEquals(2, count($cards)); - - $this->assertEquals('card1', $cards[0]->getName()); - $this->assertEquals('card2', $cards[1]->getName()); - } - - public function testCreateDirectory() - { - $this->expectException('Sabre\DAV\Exception\MethodNotAllowed'); - $this->ab->createDirectory('name'); - } - - public function testCreateFile() - { - $file = fopen('php://memory', 'r+'); - fwrite($file, 'foo'); - rewind($file); - $this->ab->createFile('card2', $file); - - $this->assertEquals('foo', $this->backend->cards['foo']['card2']); - } - - public function testDelete() - { - $this->ab->delete(); - $this->assertEquals(1, count($this->backend->addressBooks)); - } - - public function testSetName() - { - $this->expectException('Sabre\DAV\Exception\MethodNotAllowed'); - $this->ab->setName('foo'); - } - - public function testGetLastModified() - { - $this->assertNull($this->ab->getLastModified()); - } - - public function testUpdateProperties() - { - $propPatch = new PropPatch([ - '{DAV:}displayname' => 'barrr', - ]); - $this->ab->propPatch($propPatch); - $this->assertTrue($propPatch->commit()); - - $this->assertEquals('barrr', $this->backend->addressBooks[0]['{DAV:}displayname']); - } - - public function testGetProperties() - { - $props = $this->ab->getProperties(['{DAV:}displayname']); - $this->assertEquals([ - '{DAV:}displayname' => 'd-name', - ], $props); - } - - public function testACLMethods() - { - $this->assertEquals('principals/user1', $this->ab->getOwner()); - $this->assertNull($this->ab->getGroup()); - $this->assertEquals([ - [ - 'privilege' => '{DAV:}all', - 'principal' => '{DAV:}owner', - 'protected' => true, - ], - ], $this->ab->getACL()); - } - - public function testSetACL() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $this->ab->setACL([]); - } - - public function testGetSupportedPrivilegeSet() - { - $this->assertNull( - $this->ab->getSupportedPrivilegeSet() - ); - } - - public function testGetSyncTokenNoSyncSupport() - { - $this->assertNull($this->ab->getSyncToken()); - } - - public function testGetChangesNoSyncSupport() - { - $this->assertNull($this->ab->getChanges(1, null)); - } - - public function testGetSyncToken() - { - $this->driver = 'sqlite'; - $this->dropTables(['addressbooks', 'cards', 'addressbookchanges']); - $this->createSchema('addressbooks'); - $backend = new Backend\PDO( - $this->getPDO() - ); - $ab = new AddressBook($backend, ['id' => 1, '{DAV:}sync-token' => 2]); - $this->assertEquals(2, $ab->getSyncToken()); - } - - public function testGetSyncToken2() - { - $this->driver = 'sqlite'; - $this->dropTables(['addressbooks', 'cards', 'addressbookchanges']); - $this->createSchema('addressbooks'); - $backend = new Backend\PDO( - $this->getPDO() - ); - $ab = new AddressBook($backend, ['id' => 1, '{http://sabredav.org/ns}sync-token' => 2]); - $this->assertEquals(2, $ab->getSyncToken()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CardDAV/Backend/AbstractPDOTest.php b/vendor/sabre/dav/tests/Sabre/CardDAV/Backend/AbstractPDOTest.php deleted file mode 100644 index bac3b2b22..000000000 --- a/vendor/sabre/dav/tests/Sabre/CardDAV/Backend/AbstractPDOTest.php +++ /dev/null @@ -1,351 +0,0 @@ -dropTables([ - 'addressbooks', - 'cards', - 'addressbookchanges', - ]); - $this->createSchema('addressbooks'); - $pdo = $this->getPDO(); - - $this->backend = new PDO($pdo); - $pdo->exec("INSERT INTO addressbooks (principaluri, displayname, uri, description, synctoken) VALUES ('principals/user1', 'book1', 'book1', 'addressbook 1', 1)"); - $pdo->exec("INSERT INTO cards (addressbookid, carddata, uri, lastmodified, etag, size) VALUES (1, 'card1', 'card1', 0, '".md5('card1')."', 5)"); - } - - public function testGetAddressBooksForUser() - { - $result = $this->backend->getAddressBooksForUser('principals/user1'); - - $expected = [ - [ - 'id' => 1, - 'uri' => 'book1', - 'principaluri' => 'principals/user1', - '{DAV:}displayname' => 'book1', - '{'.CardDAV\Plugin::NS_CARDDAV.'}addressbook-description' => 'addressbook 1', - '{http://calendarserver.org/ns/}getctag' => 1, - '{http://sabredav.org/ns}sync-token' => 1, - ], - ]; - - $this->assertEquals($expected, $result); - } - - public function testUpdateAddressBookInvalidProp() - { - $propPatch = new PropPatch([ - '{DAV:}displayname' => 'updated', - '{'.CardDAV\Plugin::NS_CARDDAV.'}addressbook-description' => 'updated', - '{DAV:}foo' => 'bar', - ]); - - $this->backend->updateAddressBook(1, $propPatch); - $result = $propPatch->commit(); - - $this->assertFalse($result); - - $result = $this->backend->getAddressBooksForUser('principals/user1'); - - $expected = [ - [ - 'id' => 1, - 'uri' => 'book1', - 'principaluri' => 'principals/user1', - '{DAV:}displayname' => 'book1', - '{'.CardDAV\Plugin::NS_CARDDAV.'}addressbook-description' => 'addressbook 1', - '{http://calendarserver.org/ns/}getctag' => 1, - '{http://sabredav.org/ns}sync-token' => 1, - ], - ]; - - $this->assertEquals($expected, $result); - } - - public function testUpdateAddressBookNoProps() - { - $propPatch = new PropPatch([ - ]); - - $this->backend->updateAddressBook(1, $propPatch); - $result = $propPatch->commit(); - $this->assertTrue($result); - - $result = $this->backend->getAddressBooksForUser('principals/user1'); - - $expected = [ - [ - 'id' => 1, - 'uri' => 'book1', - 'principaluri' => 'principals/user1', - '{DAV:}displayname' => 'book1', - '{'.CardDAV\Plugin::NS_CARDDAV.'}addressbook-description' => 'addressbook 1', - '{http://calendarserver.org/ns/}getctag' => 1, - '{http://sabredav.org/ns}sync-token' => 1, - ], - ]; - - $this->assertEquals($expected, $result); - } - - public function testUpdateAddressBookSuccess() - { - $propPatch = new PropPatch([ - '{DAV:}displayname' => 'updated', - '{'.CardDAV\Plugin::NS_CARDDAV.'}addressbook-description' => 'updated', - ]); - - $this->backend->updateAddressBook(1, $propPatch); - $result = $propPatch->commit(); - - $this->assertTrue($result); - - $result = $this->backend->getAddressBooksForUser('principals/user1'); - - $expected = [ - [ - 'id' => 1, - 'uri' => 'book1', - 'principaluri' => 'principals/user1', - '{DAV:}displayname' => 'updated', - '{'.CardDAV\Plugin::NS_CARDDAV.'}addressbook-description' => 'updated', - '{http://calendarserver.org/ns/}getctag' => 2, - '{http://sabredav.org/ns}sync-token' => 2, - ], - ]; - - $this->assertEquals($expected, $result); - } - - public function testDeleteAddressBook() - { - $this->backend->deleteAddressBook(1); - - $this->assertEquals([], $this->backend->getAddressBooksForUser('principals/user1')); - } - - public function testCreateAddressBookUnsupportedProp() - { - $this->expectException('Sabre\DAV\Exception\BadRequest'); - $this->backend->createAddressBook('principals/user1', 'book2', [ - '{DAV:}foo' => 'bar', - ]); - } - - public function testCreateAddressBookSuccess() - { - $this->backend->createAddressBook('principals/user1', 'book2', [ - '{DAV:}displayname' => 'book2', - '{'.CardDAV\Plugin::NS_CARDDAV.'}addressbook-description' => 'addressbook 2', - ]); - - $expected = [ - [ - 'id' => 1, - 'uri' => 'book1', - 'principaluri' => 'principals/user1', - '{DAV:}displayname' => 'book1', - '{'.CardDAV\Plugin::NS_CARDDAV.'}addressbook-description' => 'addressbook 1', - '{http://calendarserver.org/ns/}getctag' => 1, - '{http://sabredav.org/ns}sync-token' => 1, - ], - [ - 'id' => 2, - 'uri' => 'book2', - 'principaluri' => 'principals/user1', - '{DAV:}displayname' => 'book2', - '{'.CardDAV\Plugin::NS_CARDDAV.'}addressbook-description' => 'addressbook 2', - '{http://calendarserver.org/ns/}getctag' => 1, - '{http://sabredav.org/ns}sync-token' => 1, - ], - ]; - $result = $this->backend->getAddressBooksForUser('principals/user1'); - $this->assertEquals($expected, $result); - } - - public function testGetCards() - { - $result = $this->backend->getCards(1); - - $expected = [ - [ - 'id' => 1, - 'uri' => 'card1', - 'lastmodified' => 0, - 'etag' => '"'.md5('card1').'"', - 'size' => 5, - ], - ]; - - $this->assertEquals($expected, $result); - } - - public function testGetCard() - { - $result = $this->backend->getCard(1, 'card1'); - - $expected = [ - 'id' => 1, - 'uri' => 'card1', - 'carddata' => 'card1', - 'lastmodified' => 0, - 'etag' => '"'.md5('card1').'"', - 'size' => 5, - ]; - - if (is_resource($result['carddata'])) { - $result['carddata'] = stream_get_contents($result['carddata']); - } - - $this->assertEquals($expected, $result); - } - - /** - * @depends testGetCard - */ - public function testCreateCard() - { - $result = $this->backend->createCard(1, 'card2', 'data2'); - $this->assertEquals('"'.md5('data2').'"', $result); - $result = $this->backend->getCard(1, 'card2'); - $this->assertEquals(2, $result['id']); - $this->assertEquals('card2', $result['uri']); - if (is_resource($result['carddata'])) { - $result['carddata'] = stream_get_contents($result['carddata']); - } - $this->assertEquals('data2', $result['carddata']); - } - - /** - * @depends testCreateCard - */ - public function testGetMultiple() - { - $result = $this->backend->createCard(1, 'card2', 'data2'); - $result = $this->backend->createCard(1, 'card3', 'data3'); - $check = [ - [ - 'id' => 1, - 'uri' => 'card1', - 'carddata' => 'card1', - 'lastmodified' => 0, - ], - [ - 'id' => 2, - 'uri' => 'card2', - 'carddata' => 'data2', - 'lastmodified' => time(), - ], - [ - 'id' => 3, - 'uri' => 'card3', - 'carddata' => 'data3', - 'lastmodified' => time(), - ], - ]; - - $result = $this->backend->getMultipleCards(1, ['card1', 'card2', 'card3']); - - foreach ($check as $index => $node) { - foreach ($node as $k => $v) { - $expected = $v; - $actual = $result[$index][$k]; - - switch ($k) { - case 'lastmodified': - $this->assertIsInt($actual); - break; - case 'carddata': - if (is_resource($actual)) { - $actual = stream_get_contents($actual); - } - // no break intended. - default: - $this->assertEquals($expected, $actual); - break; - } - } - } - } - - /** - * @depends testGetCard - */ - public function testUpdateCard() - { - $result = $this->backend->updateCard(1, 'card1', 'newdata'); - $this->assertEquals('"'.md5('newdata').'"', $result); - - $result = $this->backend->getCard(1, 'card1'); - $this->assertEquals(1, $result['id']); - if (is_resource($result['carddata'])) { - $result['carddata'] = stream_get_contents($result['carddata']); - } - $this->assertEquals('newdata', $result['carddata']); - } - - /** - * @depends testGetCard - */ - public function testDeleteCard() - { - $this->backend->deleteCard(1, 'card1'); - $result = $this->backend->getCard(1, 'card1'); - $this->assertFalse($result); - } - - public function testGetChanges() - { - $backend = $this->backend; - $id = $backend->createAddressBook( - 'principals/user1', - 'bla', - [] - ); - $result = $backend->getChangesForAddressBook($id, null, 1); - - $this->assertEquals([ - 'syncToken' => 1, - 'added' => [], - 'modified' => [], - 'deleted' => [], - ], $result); - - $currentToken = $result['syncToken']; - - $dummyCard = "BEGIN:VCARD\r\nEND:VCARD\r\n"; - - $backend->createCard($id, 'card1.ics', $dummyCard); - $backend->createCard($id, 'card2.ics', $dummyCard); - $backend->createCard($id, 'card3.ics', $dummyCard); - $backend->updateCard($id, 'card1.ics', $dummyCard); - $backend->deleteCard($id, 'card2.ics'); - - $result = $backend->getChangesForAddressBook($id, $currentToken, 1); - - $this->assertEquals([ - 'syncToken' => 6, - 'modified' => ['card1.ics'], - 'deleted' => ['card2.ics'], - 'added' => ['card3.ics'], - ], $result); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CardDAV/Backend/Mock.php b/vendor/sabre/dav/tests/Sabre/CardDAV/Backend/Mock.php deleted file mode 100644 index 630465cc8..000000000 --- a/vendor/sabre/dav/tests/Sabre/CardDAV/Backend/Mock.php +++ /dev/null @@ -1,257 +0,0 @@ -addressBooks = $addressBooks; - $this->cards = $cards; - - if (is_null($this->addressBooks)) { - $this->addressBooks = [ - [ - 'id' => 'foo', - 'uri' => 'book1', - 'principaluri' => 'principals/user1', - '{DAV:}displayname' => 'd-name', - ], - [ - 'id' => 'bar', - 'uri' => 'book3', - 'principaluri' => 'principals/user1', - '{DAV:}displayname' => 'd-name', - ], - ]; - - $card2 = fopen('php://memory', 'r+'); - fwrite($card2, "BEGIN:VCARD\nVERSION:3.0\nUID:45678\nEND:VCARD"); - rewind($card2); - $this->cards = [ - 'foo' => [ - 'card1' => "BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD", - 'card2' => $card2, - ], - 'bar' => [ - 'card3' => "BEGIN:VCARD\nVERSION:3.0\nUID:12345\nFN:Test-Card\nEMAIL;TYPE=home:bar@example.org\nEND:VCARD", - ], - ]; - } - } - - public function getAddressBooksForUser($principalUri) - { - $books = []; - foreach ($this->addressBooks as $book) { - if ($book['principaluri'] === $principalUri) { - $books[] = $book; - } - } - - return $books; - } - - /** - * Updates properties for an address book. - * - * The list of mutations is stored in a Sabre\DAV\PropPatch object. - * To do the actual updates, you must tell this object which properties - * you're going to process with the handle() method. - * - * Calling the handle method is like telling the PropPatch object "I - * promise I can handle updating this property". - * - * Read the PropPatch documentation for more info and examples. - * - * @param string $addressBookId - */ - public function updateAddressBook($addressBookId, \Sabre\DAV\PropPatch $propPatch) - { - foreach ($this->addressBooks as &$book) { - if ($book['id'] !== $addressBookId) { - continue; - } - - $propPatch->handleRemaining(function ($mutations) use (&$book) { - foreach ($mutations as $key => $value) { - $book[$key] = $value; - } - - return true; - }); - } - } - - public function createAddressBook($principalUri, $url, array $properties) - { - $this->addressBooks[] = array_merge($properties, [ - 'id' => $url, - 'uri' => $url, - 'principaluri' => $principalUri, - ]); - } - - public function deleteAddressBook($addressBookId) - { - foreach ($this->addressBooks as $key => $value) { - if ($value['id'] === $addressBookId) { - unset($this->addressBooks[$key]); - } - } - unset($this->cards[$addressBookId]); - } - - /** - * Returns all cards for a specific addressbook id. - * - * This method should return the following properties for each card: - * * carddata - raw vcard data - * * uri - Some unique url - * * lastmodified - A unix timestamp - * - * It's recommended to also return the following properties: - * * etag - A unique etag. This must change every time the card changes. - * * size - The size of the card in bytes. - * - * If these last two properties are provided, less time will be spent - * calculating them. If they are specified, you can also ommit carddata. - * This may speed up certain requests, especially with large cards. - * - * @param mixed $addressBookId - * - * @return array - */ - public function getCards($addressBookId) - { - $cards = []; - foreach ($this->cards[$addressBookId] as $uri => $data) { - if (is_resource($data)) { - $cards[] = [ - 'uri' => $uri, - 'carddata' => $data, - ]; - } else { - $cards[] = [ - 'uri' => $uri, - 'carddata' => $data, - 'etag' => '"'.md5($data).'"', - 'size' => strlen($data), - ]; - } - } - - return $cards; - } - - /** - * Returns a specfic card. - * - * The same set of properties must be returned as with getCards. The only - * exception is that 'carddata' is absolutely required. - * - * If the card does not exist, you must return false. - * - * @param mixed $addressBookId - * @param string $cardUri - * - * @return array - */ - public function getCard($addressBookId, $cardUri) - { - if (!isset($this->cards[$addressBookId][$cardUri])) { - return false; - } - - $data = $this->cards[$addressBookId][$cardUri]; - - return [ - 'uri' => $cardUri, - 'carddata' => $data, - 'etag' => '"'.md5($data).'"', - 'size' => strlen($data), - ]; - } - - /** - * Creates a new card. - * - * The addressbook id will be passed as the first argument. This is the - * same id as it is returned from the getAddressBooksForUser method. - * - * The cardUri is a base uri, and doesn't include the full path. The - * cardData argument is the vcard body, and is passed as a string. - * - * It is possible to return an ETag from this method. This ETag is for the - * newly created resource, and must be enclosed with double quotes (that - * is, the string itself must contain the double quotes). - * - * You should only return the ETag if you store the carddata as-is. If a - * subsequent GET request on the same card does not have the same body, - * byte-by-byte and you did return an ETag here, clients tend to get - * confused. - * - * If you don't return an ETag, you can just return null. - * - * @param mixed $addressBookId - * @param string $cardUri - * @param string $cardData - * - * @return string|null - */ - public function createCard($addressBookId, $cardUri, $cardData) - { - if (is_resource($cardData)) { - $cardData = stream_get_contents($cardData); - } - $this->cards[$addressBookId][$cardUri] = $cardData; - - return '"'.md5($cardData).'"'; - } - - /** - * Updates a card. - * - * The addressbook id will be passed as the first argument. This is the - * same id as it is returned from the getAddressBooksForUser method. - * - * The cardUri is a base uri, and doesn't include the full path. The - * cardData argument is the vcard body, and is passed as a string. - * - * It is possible to return an ETag from this method. This ETag should - * match that of the updated resource, and must be enclosed with double - * quotes (that is: the string itself must contain the actual quotes). - * - * You should only return the ETag if you store the carddata as-is. If a - * subsequent GET request on the same card does not have the same body, - * byte-by-byte and you did return an ETag here, clients tend to get - * confused. - * - * If you don't return an ETag, you can just return null. - * - * @param mixed $addressBookId - * @param string $cardUri - * @param string $cardData - * - * @return string|null - */ - public function updateCard($addressBookId, $cardUri, $cardData) - { - if (is_resource($cardData)) { - $cardData = stream_get_contents($cardData); - } - $this->cards[$addressBookId][$cardUri] = $cardData; - - return '"'.md5($cardData).'"'; - } - - public function deleteCard($addressBookId, $cardUri) - { - unset($this->cards[$addressBookId][$cardUri]); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CardDAV/Backend/PDOMySQLTest.php b/vendor/sabre/dav/tests/Sabre/CardDAV/Backend/PDOMySQLTest.php deleted file mode 100644 index 718eec6be..000000000 --- a/vendor/sabre/dav/tests/Sabre/CardDAV/Backend/PDOMySQLTest.php +++ /dev/null @@ -1,10 +0,0 @@ -backend = new Backend\Mock(); - $this->card = new Card( - $this->backend, - [ - 'uri' => 'book1', - 'id' => 'foo', - 'principaluri' => 'principals/user1', - ], - [ - 'uri' => 'card1', - 'addressbookid' => 'foo', - 'carddata' => 'card', - ] - ); - } - - public function testGet() - { - $result = $this->card->get(); - $this->assertEquals('card', $result); - } - - public function testGet2() - { - $this->card = new Card( - $this->backend, - [ - 'uri' => 'book1', - 'id' => 'foo', - 'principaluri' => 'principals/user1', - ], - [ - 'uri' => 'card1', - 'addressbookid' => 'foo', - ] - ); - $result = $this->card->get(); - $this->assertEquals("BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD", $result); - } - - /** - * @depends testGet - */ - public function testPut() - { - $file = fopen('php://memory', 'r+'); - fwrite($file, 'newdata'); - rewind($file); - $this->card->put($file); - $result = $this->card->get(); - $this->assertEquals('newdata', $result); - } - - public function testDelete() - { - $this->card->delete(); - $this->assertEquals(1, count($this->backend->cards['foo'])); - } - - public function testGetContentType() - { - $this->assertEquals('text/vcard; charset=utf-8', $this->card->getContentType()); - } - - public function testGetETag() - { - $this->assertEquals('"'.md5('card').'"', $this->card->getETag()); - } - - public function testGetETag2() - { - $card = new Card( - $this->backend, - [ - 'uri' => 'book1', - 'id' => 'foo', - 'principaluri' => 'principals/user1', - ], - [ - 'uri' => 'card1', - 'addressbookid' => 'foo', - 'carddata' => 'card', - 'etag' => '"blabla"', - ] - ); - $this->assertEquals('"blabla"', $card->getETag()); - } - - public function testGetLastModified() - { - $this->assertEquals(null, $this->card->getLastModified()); - } - - public function testGetSize() - { - $this->assertEquals(4, $this->card->getSize()); - $this->assertEquals(4, $this->card->getSize()); - } - - public function testGetSize2() - { - $card = new Card( - $this->backend, - [ - 'uri' => 'book1', - 'id' => 'foo', - 'principaluri' => 'principals/user1', - ], - [ - 'uri' => 'card1', - 'addressbookid' => 'foo', - 'etag' => '"blabla"', - 'size' => 4, - ] - ); - $this->assertEquals(4, $card->getSize()); - } - - public function testACLMethods() - { - $this->assertEquals('principals/user1', $this->card->getOwner()); - $this->assertNull($this->card->getGroup()); - $this->assertEquals([ - [ - 'privilege' => '{DAV:}all', - 'principal' => 'principals/user1', - 'protected' => true, - ], - ], $this->card->getACL()); - } - - public function testOverrideACL() - { - $card = new Card( - $this->backend, - [ - 'uri' => 'book1', - 'id' => 'foo', - 'principaluri' => 'principals/user1', - ], - [ - 'uri' => 'card1', - 'addressbookid' => 'foo', - 'carddata' => 'card', - 'acl' => [ - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/user1', - 'protected' => true, - ], - ], - ] - ); - $this->assertEquals([ - [ - 'privilege' => '{DAV:}read', - 'principal' => 'principals/user1', - 'protected' => true, - ], - ], $card->getACL()); - } - - public function testSetACL() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $this->card->setACL([]); - } - - public function testGetSupportedPrivilegeSet() - { - $this->assertNull( - $this->card->getSupportedPrivilegeSet() - ); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CardDAV/IDirectoryTest.php b/vendor/sabre/dav/tests/Sabre/CardDAV/IDirectoryTest.php deleted file mode 100644 index 760749f6c..000000000 --- a/vendor/sabre/dav/tests/Sabre/CardDAV/IDirectoryTest.php +++ /dev/null @@ -1,28 +0,0 @@ -addPlugin($plugin); - - $props = $server->getProperties('directory', ['{DAV:}resourcetype']); - $this->assertTrue($props['{DAV:}resourcetype']->is('{'.Plugin::NS_CARDDAV.'}directory')); - } -} - -class DirectoryMock extends DAV\SimpleCollection implements IDirectory -{ -} diff --git a/vendor/sabre/dav/tests/Sabre/CardDAV/MultiGetTest.php b/vendor/sabre/dav/tests/Sabre/CardDAV/MultiGetTest.php deleted file mode 100644 index ac0cd5e91..000000000 --- a/vendor/sabre/dav/tests/Sabre/CardDAV/MultiGetTest.php +++ /dev/null @@ -1,99 +0,0 @@ - 'REPORT', - 'REQUEST_URI' => '/addressbooks/user1/book1', - ]); - - $request->setBody( -' - - - - - - /addressbooks/user1/book1/card1 -' - ); - - $response = new HTTP\ResponseMock(); - - $this->server->httpRequest = $request; - $this->server->httpResponse = $response; - - $this->server->exec(); - - $bodyAsString = $response->getBodyAsString(); - $this->assertEquals(207, $response->status, 'Incorrect status code. Full response body:'.$bodyAsString); - - // using the client for parsing - $client = new DAV\Client(['baseUri' => '/']); - - $result = $client->parseMultiStatus($bodyAsString); - - $this->assertEquals([ - '/addressbooks/user1/book1/card1' => [ - 200 => [ - '{DAV:}getetag' => '"'.md5("BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD").'"', - '{urn:ietf:params:xml:ns:carddav}address-data' => "BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD", - ], - ], - ], $result); - } - - public function testMultiGetVCard4() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'REPORT', - 'REQUEST_URI' => '/addressbooks/user1/book1', - ]); - - $request->setBody( -' - - - - - - /addressbooks/user1/book1/card1 -' - ); - - $response = new HTTP\ResponseMock(); - - $this->server->httpRequest = $request; - $this->server->httpResponse = $response; - - $this->server->exec(); - - $bodyAsString = $response->getBodyAsString(); - $this->assertEquals(207, $response->status, 'Incorrect status code. Full response body:'.$bodyAsString); - - // using the client for parsing - $client = new DAV\Client(['baseUri' => '/']); - - $result = $client->parseMultiStatus($bodyAsString); - - $prodId = 'PRODID:-//Sabre//Sabre VObject '.\Sabre\VObject\Version::VERSION.'//EN'; - - $this->assertEquals([ - '/addressbooks/user1/book1/card1' => [ - 200 => [ - '{DAV:}getetag' => '"'.md5("BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD").'"', - '{urn:ietf:params:xml:ns:carddav}address-data' => "BEGIN:VCARD\r\nVERSION:4.0\r\n$prodId\r\nUID:12345\r\nEND:VCARD\r\n", - ], - ], - ], $result); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CardDAV/PluginTest.php b/vendor/sabre/dav/tests/Sabre/CardDAV/PluginTest.php deleted file mode 100644 index b5a68dc48..000000000 --- a/vendor/sabre/dav/tests/Sabre/CardDAV/PluginTest.php +++ /dev/null @@ -1,101 +0,0 @@ -assertEquals('{'.Plugin::NS_CARDDAV.'}addressbook', $this->server->resourceTypeMapping['Sabre\\CardDAV\\IAddressBook']); - - $this->assertTrue(in_array('addressbook', $this->plugin->getFeatures())); - $this->assertEquals('carddav', $this->plugin->getPluginInfo()['name']); - } - - public function testSupportedReportSet() - { - $this->assertEquals([ - '{'.Plugin::NS_CARDDAV.'}addressbook-multiget', - '{'.Plugin::NS_CARDDAV.'}addressbook-query', - ], $this->plugin->getSupportedReportSet('addressbooks/user1/book1')); - } - - public function testSupportedReportSetEmpty() - { - $this->assertEquals([ - ], $this->plugin->getSupportedReportSet('')); - } - - public function testAddressBookHomeSet() - { - $result = $this->server->getProperties('principals/user1', ['{'.Plugin::NS_CARDDAV.'}addressbook-home-set']); - - $this->assertEquals(1, count($result)); - $this->assertTrue(isset($result['{'.Plugin::NS_CARDDAV.'}addressbook-home-set'])); - $this->assertEquals('addressbooks/user1/', $result['{'.Plugin::NS_CARDDAV.'}addressbook-home-set']->getHref()); - } - - public function testDirectoryGateway() - { - $result = $this->server->getProperties('principals/user1', ['{'.Plugin::NS_CARDDAV.'}directory-gateway']); - - $this->assertEquals(1, count($result)); - $this->assertTrue(isset($result['{'.Plugin::NS_CARDDAV.'}directory-gateway'])); - $this->assertEquals(['directory'], $result['{'.Plugin::NS_CARDDAV.'}directory-gateway']->getHrefs()); - } - - public function testReportPassThrough() - { - $this->assertNull($this->plugin->report('{DAV:}foo', new \DomDocument(), '')); - } - - public function testHTMLActionsPanel() - { - $output = ''; - $r = $this->server->emit('onHTMLActionsPanel', [$this->server->tree->getNodeForPath('addressbooks/user1'), &$output]); - $this->assertFalse($r); - - $this->assertTrue((bool) strpos($output, 'Display name')); - } - - public function testAddressbookPluginProperties() - { - $ns = '{'.Plugin::NS_CARDDAV.'}'; - $propFind = new DAV\PropFind('addressbooks/user1/book1', [ - $ns.'supported-address-data', - $ns.'supported-collation-set', - ]); - $node = $this->server->tree->getNodeForPath('addressbooks/user1/book1'); - $this->plugin->propFindEarly($propFind, $node); - - $this->assertInstanceOf( - 'Sabre\\CardDAV\\Xml\\Property\\SupportedAddressData', - $propFind->get($ns.'supported-address-data') - ); - $this->assertInstanceOf( - 'Sabre\\CardDAV\\Xml\\Property\\SupportedCollationSet', - $propFind->get($ns.'supported-collation-set') - ); - } - - public function testGetTransform() - { - $request = new \Sabre\HTTP\Request('GET', '/addressbooks/user1/book1/card1', ['Accept' => 'application/vcard+json']); - $response = new \Sabre\HTTP\ResponseMock(); - $this->server->invokeMethod($request, $response); - - $this->assertEquals(200, $response->getStatus()); - } - - public function testGetWithoutContentType() - { - $request = new \Sabre\HTTP\Request('GET', '/'); - $response = new \Sabre\HTTP\ResponseMock(); - $this->plugin->httpAfterGet($request, $response); - $this->assertTrue(true); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CardDAV/SogoStripContentTypeTest.php b/vendor/sabre/dav/tests/Sabre/CardDAV/SogoStripContentTypeTest.php deleted file mode 100644 index 8d045569c..000000000 --- a/vendor/sabre/dav/tests/Sabre/CardDAV/SogoStripContentTypeTest.php +++ /dev/null @@ -1,67 +0,0 @@ - 1, - 'uri' => 'book1', - 'principaluri' => 'principals/user1', - ], - ]; - protected $carddavCards = [ - 1 => [ - 'card1.vcf' => "BEGIN:VCARD\nVERSION:3.0\nUID:12345\nEND:VCARD", - ], - ]; - - public function testDontStrip() - { - $result = $this->server->getProperties('addressbooks/user1/book1/card1.vcf', ['{DAV:}getcontenttype']); - $this->assertEquals([ - '{DAV:}getcontenttype' => 'text/vcard; charset=utf-8', - ], $result); - } - - public function testStrip() - { - $this->server->httpRequest = new HTTP\Request('GET', '/', [ - 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0.2) Gecko/20120216 Thunderbird/10.0.2 Lightning/1.2.1', - ]); - $result = $this->server->getProperties('addressbooks/user1/book1/card1.vcf', ['{DAV:}getcontenttype']); - $this->assertEquals([ - '{DAV:}getcontenttype' => 'text/x-vcard', - ], $result); - } - - public function testDontTouchOtherMimeTypes() - { - $this->server->httpRequest = new HTTP\Request('GET', '/addressbooks/user1/book1/card1.vcf', [ - 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0.2) Gecko/20120216 Thunderbird/10.0.2 Lightning/1.2.1', - ]); - - $propFind = new PropFind('hello', ['{DAV:}getcontenttype']); - $propFind->set('{DAV:}getcontenttype', 'text/plain'); - $this->carddavPlugin->propFindLate($propFind, new \Sabre\DAV\SimpleCollection('foo')); - $this->assertEquals('text/plain', $propFind->get('{DAV:}getcontenttype')); - } - - public function testStripWithoutGetContentType() - { - $this->server->httpRequest = new HTTP\Request('GET', '/addressbooks/user1/book1/card1.vcf', [ - 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0.2) Gecko/20120216 Thunderbird/10.0.2 Lightning/1.2.1', - ]); - - $propFind = new PropFind('hello', ['{DAV:}getcontenttype']); - $this->carddavPlugin->propFindLate($propFind, new \Sabre\DAV\SimpleCollection('foo')); - $this->assertEquals(null, $propFind->get('{DAV:}getcontenttype')); // Property not present - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CardDAV/VCFExportTest.php b/vendor/sabre/dav/tests/Sabre/CardDAV/VCFExportTest.php deleted file mode 100644 index 546a4ccfb..000000000 --- a/vendor/sabre/dav/tests/Sabre/CardDAV/VCFExportTest.php +++ /dev/null @@ -1,130 +0,0 @@ - 'book1', - 'uri' => 'book1', - 'principaluri' => 'principals/user1', - ], - ]; - protected $carddavCards = [ - 'book1' => [ - 'card1' => "BEGIN:VCARD\r\nFN:Person1\r\nEND:VCARD\r\n", - 'card2' => "BEGIN:VCARD\r\nFN:Person2\r\nEND:VCARD", - 'card3' => "BEGIN:VCARD\r\nFN:Person3\r\nEND:VCARD\r\n", - 'card4' => "BEGIN:VCARD\nFN:Person4\nEND:VCARD\n", - ], - ]; - - public function setup(): void - { - parent::setUp(); - $plugin = new VCFExportPlugin(); - $this->server->addPlugin( - $plugin - ); - } - - public function testSimple() - { - $plugin = $this->server->getPlugin('vcf-export'); - $this->assertInstanceOf('Sabre\\CardDAV\\VCFExportPlugin', $plugin); - - $this->assertEquals( - 'vcf-export', - $plugin->getPluginInfo()['name'] - ); - } - - public function testExport() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_URI' => '/addressbooks/user1/book1?export', - 'QUERY_STRING' => 'export', - 'REQUEST_METHOD' => 'GET', - ]); - - $response = $this->request($request); - $this->assertEquals(200, $response->status, $response->getBodyAsString()); - - $expected = 'BEGIN:VCARD -FN:Person1 -END:VCARD -BEGIN:VCARD -FN:Person2 -END:VCARD -BEGIN:VCARD -FN:Person3 -END:VCARD -BEGIN:VCARD -FN:Person4 -END:VCARD -'; - // We actually expected windows line endings - $expected = str_replace("\n", "\r\n", $expected); - - $this->assertEquals($expected, $response->getBodyAsString()); - } - - public function testBrowserIntegration() - { - $plugin = $this->server->getPlugin('vcf-export'); - $actions = ''; - $addressbook = new AddressBook($this->carddavBackend, []); - $this->server->emit('browserButtonActions', ['/foo', $addressbook, &$actions]); - $this->assertStringContainsString('/foo?export', $actions); - } - - public function testContentDisposition() - { - $request = new HTTP\Request( - 'GET', - '/addressbooks/user1/book1?export' - ); - - $response = $this->request($request, 200); - $this->assertEquals('text/directory', $response->getHeader('Content-Type')); - $this->assertEquals( - 'attachment; filename="book1-'.date('Y-m-d').'.vcf"', - $response->getHeader('Content-Disposition') - ); - } - - public function testContentDispositionBadChars() - { - $this->carddavBackend->createAddressBook( - 'principals/user1', - 'book-b_ad"(ch)ars', - [] - ); - $this->carddavBackend->createCard( - 'book-b_ad"(ch)ars', - 'card1', - "BEGIN:VCARD\r\nFN:Person1\r\nEND:VCARD\r\n" - ); - - $request = new HTTP\Request( - 'GET', - '/addressbooks/user1/book-b_ad"(ch)ars?export' - ); - - $response = $this->request($request, 200); - $this->assertEquals('text/directory', $response->getHeader('Content-Type')); - $this->assertEquals( - 'attachment; filename="book-b_adchars-'.date('Y-m-d').'.vcf"', - $response->getHeader('Content-Disposition') - ); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CardDAV/ValidateFilterTest.php b/vendor/sabre/dav/tests/Sabre/CardDAV/ValidateFilterTest.php deleted file mode 100644 index de7de19cd..000000000 --- a/vendor/sabre/dav/tests/Sabre/CardDAV/ValidateFilterTest.php +++ /dev/null @@ -1,204 +0,0 @@ -assertTrue($this->plugin->validateFilters($input, $filters, $test), $message); - } else { - $this->assertFalse($this->plugin->validateFilters($input, $filters, $test), $message); - } - } - - public function data() - { - $body1 = << 'title', 'is-not-defined' => false, 'param-filters' => [], 'text-matches' => []]; - - // Check if FOO is defined - $filter2 = - ['name' => 'foo', 'is-not-defined' => false, 'param-filters' => [], 'text-matches' => []]; - - // Check if TITLE is not defined - $filter3 = - ['name' => 'title', 'is-not-defined' => true, 'param-filters' => [], 'text-matches' => []]; - - // Check if FOO is not defined - $filter4 = - ['name' => 'foo', 'is-not-defined' => true, 'param-filters' => [], 'text-matches' => []]; - - // Check if TEL[TYPE] is defined - $filter5 = - [ - 'name' => 'tel', - 'is-not-defined' => false, - 'test' => 'anyof', - 'param-filters' => [ - [ - 'name' => 'type', - 'is-not-defined' => false, - 'text-match' => null, - ], - ], - 'text-matches' => [], - ]; - - // Check if TEL[FOO] is defined - $filter6 = $filter5; - $filter6['param-filters'][0]['name'] = 'FOO'; - - // Check if TEL[TYPE] is not defined - $filter7 = $filter5; - $filter7['param-filters'][0]['is-not-defined'] = true; - - // Check if TEL[FOO] is not defined - $filter8 = $filter5; - $filter8['param-filters'][0]['name'] = 'FOO'; - $filter8['param-filters'][0]['is-not-defined'] = true; - - // Combining property filters - $filter9 = $filter5; - $filter9['param-filters'][] = $filter6['param-filters'][0]; - - $filter10 = $filter5; - $filter10['param-filters'][] = $filter6['param-filters'][0]; - $filter10['test'] = 'allof'; - - // Check if URL contains 'google' - $filter11 = - [ - 'name' => 'url', - 'is-not-defined' => false, - 'test' => 'anyof', - 'param-filters' => [], - 'text-matches' => [ - [ - 'match-type' => 'contains', - 'value' => 'google', - 'negate-condition' => false, - 'collation' => 'i;octet', - ], - ], - ]; - - // Check if URL contains 'bing' - $filter12 = $filter11; - $filter12['text-matches'][0]['value'] = 'bing'; - - // Check if URL does not contain 'google' - $filter13 = $filter11; - $filter13['text-matches'][0]['negate-condition'] = true; - - // Check if URL does not contain 'bing' - $filter14 = $filter11; - $filter14['text-matches'][0]['value'] = 'bing'; - $filter14['text-matches'][0]['negate-condition'] = true; - - // Param filter with text - $filter15 = $filter5; - $filter15['param-filters'][0]['text-match'] = [ - 'match-type' => 'contains', - 'value' => 'WORK', - 'collation' => 'i;octet', - 'negate-condition' => false, - ]; - $filter16 = $filter15; - $filter16['param-filters'][0]['text-match']['negate-condition'] = true; - - // Param filter + text filter - $filter17 = $filter5; - $filter17['test'] = 'anyof'; - $filter17['text-matches'][] = [ - 'match-type' => 'contains', - 'value' => '444', - 'collation' => 'i;octet', - 'negate-condition' => false, - ]; - - $filter18 = $filter17; - $filter18['text-matches'][0]['negate-condition'] = true; - - $filter18['test'] = 'allof'; - - return [ - // Basic filters - [$body1, [$filter1], 'anyof', true], - [$body1, [$filter2], 'anyof', false], - [$body1, [$filter3], 'anyof', false], - [$body1, [$filter4], 'anyof', true], - - // Combinations - [$body1, [$filter1, $filter2], 'anyof', true], - [$body1, [$filter1, $filter2], 'allof', false], - [$body1, [$filter1, $filter4], 'anyof', true], - [$body1, [$filter1, $filter4], 'allof', true], - [$body1, [$filter2, $filter3], 'anyof', false], - [$body1, [$filter2, $filter3], 'allof', false], - - // Basic parameters - [$body1, [$filter5], 'anyof', true, 'TEL;TYPE is defined, so this should return true'], - [$body1, [$filter6], 'anyof', false, 'TEL;FOO is not defined, so this should return false'], - - [$body1, [$filter7], 'anyof', false, 'TEL;TYPE is defined, so this should return false'], - [$body1, [$filter8], 'anyof', true, 'TEL;TYPE is not defined, so this should return true'], - - // Combined parameters - [$body1, [$filter9], 'anyof', true], - [$body1, [$filter10], 'anyof', false], - - // Text-filters - [$body1, [$filter11], 'anyof', true], - [$body1, [$filter12], 'anyof', false], - [$body1, [$filter13], 'anyof', false], - [$body1, [$filter14], 'anyof', true], - - // Param filter with text-match - [$body1, [$filter15], 'anyof', true], - [$body1, [$filter16], 'anyof', false], - - // Param filter + text filter - [$body1, [$filter17], 'anyof', true], - [$body1, [$filter18], 'anyof', false], - [$body1, [$filter18], 'anyof', false], - ]; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/CardDAV/ValidateVCardTest.php b/vendor/sabre/dav/tests/Sabre/CardDAV/ValidateVCardTest.php deleted file mode 100644 index 571cce3f0..000000000 --- a/vendor/sabre/dav/tests/Sabre/CardDAV/ValidateVCardTest.php +++ /dev/null @@ -1,293 +0,0 @@ - 'addressbook1', - 'principaluri' => 'principals/admin', - 'uri' => 'addressbook1', - ], - ]; - - $this->cardBackend = new Backend\Mock($addressbooks, []); - $principalBackend = new DAVACL\PrincipalBackend\Mock(); - - $tree = [ - new AddressBookRoot($principalBackend, $this->cardBackend), - ]; - - $this->server = new DAV\Server($tree); - $this->server->sapi = new HTTP\SapiMock(); - $this->server->debugExceptions = true; - - $plugin = new Plugin(); - $this->server->addPlugin($plugin); - - $response = new HTTP\ResponseMock(); - $this->server->httpResponse = $response; - } - - public function request(HTTP\Request $request, $expectedStatus = null) - { - $this->server->httpRequest = $request; - $this->server->exec(); - - if ($expectedStatus) { - $realStatus = $this->server->httpResponse->getStatus(); - - $msg = ''; - if ($realStatus !== $expectedStatus) { - $msg = 'Response body: '.$this->server->httpResponse->getBodyAsString(); - } - $this->assertEquals( - $expectedStatus, - $realStatus, - $msg - ); - } - - return $this->server->httpResponse; - } - - public function testCreateFile() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PUT', - 'REQUEST_URI' => '/addressbooks/admin/addressbook1/blabla.vcf', - ]); - - $response = $this->request($request); - - $this->assertEquals(415, $response->status); - } - - public function testCreateFileValid() - { - $request = new HTTP\Request( - 'PUT', - '/addressbooks/admin/addressbook1/blabla.vcf' - ); - - $vcard = <<setBody($vcard); - - $response = $this->request($request, 201); - - // The custom Ew header should not be set - $this->assertNull( - $response->getHeader('X-Sabre-Ew-Gross') - ); - // Valid, non-auto-fixed responses should contain an ETag. - $this->assertTrue( - null !== $response->getHeader('ETag'), - 'We did not receive an etag' - ); - - $expected = [ - 'uri' => 'blabla.vcf', - 'carddata' => $vcard, - 'size' => strlen($vcard), - 'etag' => '"'.md5($vcard).'"', - ]; - - $this->assertEquals($expected, $this->cardBackend->getCard('addressbook1', 'blabla.vcf')); - } - - /** - * This test creates an intentionally broken vCard that vobject is able - * to automatically repair. - * - * @depends testCreateFileValid - */ - public function testCreateVCardAutoFix() - { - $request = new HTTP\Request( - 'PUT', - '/addressbooks/admin/addressbook1/blabla.vcf' - ); - - // The error in this vcard is that there's not enough semi-colons in N - $vcard = <<setBody($vcard); - - $response = $this->request($request, 201); - - // Auto-fixed vcards should NOT return an etag - $this->assertNull( - $response->getHeader('ETag') - ); - - // We should have gotten an Ew header - $this->assertNotNull( - $response->getHeader('X-Sabre-Ew-Gross') - ); - - $expectedVCard = << 'blabla.vcf', - 'carddata' => $expectedVCard, - 'size' => strlen($expectedVCard), - 'etag' => '"'.md5($expectedVCard).'"', - ]; - - $this->assertEquals($expected, $this->cardBackend->getCard('addressbook1', 'blabla.vcf')); - } - - /** - * This test creates an intentionally broken vCard that vobject is able - * to automatically repair. - * - * However, we're supplying a heading asking the server to treat the - * request as strict, so the server should still let the request fail. - * - * @depends testCreateFileValid - */ - public function testCreateVCardStrictFail() - { - $request = new HTTP\Request( - 'PUT', - '/addressbooks/admin/addressbook1/blabla.vcf', - [ - 'Prefer' => 'handling=strict', - ] - ); - - // The error in this vcard is that there's not enough semi-colons in N - $vcard = <<setBody($vcard); - $this->request($request, 415); - } - - public function testCreateFileNoUID() - { - $request = new HTTP\Request( - 'PUT', - '/addressbooks/admin/addressbook1/blabla.vcf' - ); - $vcard = <<setBody($vcard); - - $response = $this->request($request, 201); - - $foo = $this->cardBackend->getCard('addressbook1', 'blabla.vcf'); - $this->assertTrue( - false !== strpos($foo['carddata'], 'UID'), - print_r($foo, true) - ); - } - - public function testCreateFileJson() - { - $request = new HTTP\Request( - 'PUT', - '/addressbooks/admin/addressbook1/blabla.vcf' - ); - $request->setBody('[ "vcard" , [ [ "VERSION", {}, "text", "4.0"], [ "UID" , {}, "text", "foo" ], [ "FN", {}, "text", "FirstName LastName"] ] ]'); - - $response = $this->request($request); - - $this->assertEquals(201, $response->status, 'Incorrect status returned! Full response body: '.$response->getBodyAsString()); - - $foo = $this->cardBackend->getCard('addressbook1', 'blabla.vcf'); - $this->assertEquals("BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nFN:FirstName LastName\r\nEND:VCARD\r\n", $foo['carddata']); - } - - public function testCreateFileVCalendar() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PUT', - 'REQUEST_URI' => '/addressbooks/admin/addressbook1/blabla.vcf', - ]); - $request->setBody("BEGIN:VCALENDAR\r\nEND:VCALENDAR\r\n"); - - $response = $this->request($request); - - $this->assertEquals(415, $response->status, 'Incorrect status returned! Full response body: '.$response->getBodyAsString()); - } - - public function testUpdateFile() - { - $this->cardBackend->createCard('addressbook1', 'blabla.vcf', 'foo'); - $request = new HTTP\Request( - 'PUT', - '/addressbooks/admin/addressbook1/blabla.vcf' - ); - - $response = $this->request($request, 415); - } - - public function testUpdateFileParsableBody() - { - $this->cardBackend->createCard('addressbook1', 'blabla.vcf', 'foo'); - $request = new HTTP\Request( - 'PUT', - '/addressbooks/admin/addressbook1/blabla.vcf' - ); - - $body = "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nFN:FirstName LastName\r\nEND:VCARD\r\n"; - $request->setBody($body); - - $response = $this->request($request, 204); - - $expected = [ - 'uri' => 'blabla.vcf', - 'carddata' => $body, - 'size' => strlen($body), - 'etag' => '"'.md5($body).'"', - ]; - - $this->assertEquals($expected, $this->cardBackend->getCard('addressbook1', 'blabla.vcf')); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/AbstractServer.php b/vendor/sabre/dav/tests/Sabre/DAV/AbstractServer.php deleted file mode 100644 index 49fedf062..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/AbstractServer.php +++ /dev/null @@ -1,62 +0,0 @@ -response = new HTTP\ResponseMock(); - $this->server = new Server($this->getRootNode()); - $this->server->sapi = new HTTP\SapiMock(); - $this->server->httpResponse = $this->response; - $this->server->debugExceptions = true; - $this->deleteTree(SABRE_TEMPDIR, false); - file_put_contents(SABRE_TEMPDIR.'/test.txt', 'Test contents'); - mkdir(SABRE_TEMPDIR.'/dir'); - file_put_contents(SABRE_TEMPDIR.'/dir/child.txt', 'Child contents'); - } - - public function teardown(): void - { - $this->deleteTree(SABRE_TEMPDIR, false); - } - - protected function getRootNode() - { - return new FS\Directory(SABRE_TEMPDIR); - } - - private function deleteTree($path, $deleteRoot = true) - { - foreach (scandir($path) as $node) { - if ('.' == $node || '.svn' == $node || '..' == $node) { - continue; - } - $myPath = $path.'/'.$node; - if (is_file($myPath)) { - unlink($myPath); - } else { - $this->deleteTree($myPath); - } - } - if ($deleteRoot) { - rmdir($path); - } - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/AbstractBasicTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/AbstractBasicTest.php deleted file mode 100644 index ebc1e3f7b..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/AbstractBasicTest.php +++ /dev/null @@ -1,90 +0,0 @@ -assertFalse( - $backend->check($request, $response)[0] - ); - } - - public function testCheckUnknownUser() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/', - 'PHP_AUTH_USER' => 'username', - 'PHP_AUTH_PW' => 'wrongpassword', - ]); - $response = new HTTP\Response(); - - $backend = new AbstractBasicMock(); - - $this->assertFalse( - $backend->check($request, $response)[0] - ); - } - - public function testCheckSuccess() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/', - 'PHP_AUTH_USER' => 'username', - 'PHP_AUTH_PW' => 'password', - ]); - $response = new HTTP\Response(); - - $backend = new AbstractBasicMock(); - $this->assertEquals( - [true, 'principals/username'], - $backend->check($request, $response) - ); - } - - public function testRequireAuth() - { - $request = new HTTP\Request('GET', '/'); - $response = new HTTP\Response(); - - $backend = new AbstractBasicMock(); - $backend->setRealm('writing unittests on a saturday night'); - $backend->challenge($request, $response); - - $this->assertEquals( - 'Basic realm="writing unittests on a saturday night", charset="UTF-8"', - $response->getHeader('WWW-Authenticate') - ); - } -} - -class AbstractBasicMock extends AbstractBasic -{ - /** - * Validates a username and password. - * - * This method should return true or false depending on if login - * succeeded. - * - * @param string $username - * @param string $password - * - * @return bool - */ - public function validateUserPass($username, $password) - { - return 'username' == $username && 'password' == $password; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/AbstractDigestTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/AbstractDigestTest.php deleted file mode 100644 index a751efdc2..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/AbstractDigestTest.php +++ /dev/null @@ -1,134 +0,0 @@ -assertFalse( - $backend->check($request, $response)[0] - ); - } - - public function testCheckBadGetUserInfoResponse() - { - $header = 'username=null, realm=myRealm, nonce=12345, uri=/, response=HASH, opaque=1, qop=auth, nc=1, cnonce=1'; - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/', - 'PHP_AUTH_DIGEST' => $header, - ]); - $response = new HTTP\Response(); - - $backend = new AbstractDigestMock(); - $this->assertFalse( - $backend->check($request, $response)[0] - ); - } - - public function testCheckBadGetUserInfoResponse2() - { - $this->expectException('Sabre\DAV\Exception'); - $header = 'username=array, realm=myRealm, nonce=12345, uri=/, response=HASH, opaque=1, qop=auth, nc=1, cnonce=1'; - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/', - 'PHP_AUTH_DIGEST' => $header, - ]); - - $response = new HTTP\Response(); - - $backend = new AbstractDigestMock(); - $backend->check($request, $response); - } - - public function testCheckUnknownUser() - { - $header = 'username=false, realm=myRealm, nonce=12345, uri=/, response=HASH, opaque=1, qop=auth, nc=1, cnonce=1'; - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/', - 'PHP_AUTH_DIGEST' => $header, - ]); - - $response = new HTTP\Response(); - - $backend = new AbstractDigestMock(); - $this->assertFalse( - $backend->check($request, $response)[0] - ); - } - - public function testCheckBadPassword() - { - $header = 'username=user, realm=myRealm, nonce=12345, uri=/, response=HASH, opaque=1, qop=auth, nc=1, cnonce=1'; - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PUT', - 'REQUEST_URI' => '/', - 'PHP_AUTH_DIGEST' => $header, - ]); - - $response = new HTTP\Response(); - - $backend = new AbstractDigestMock(); - $this->assertFalse( - $backend->check($request, $response)[0] - ); - } - - public function testCheck() - { - $digestHash = md5('HELLO:12345:1:1:auth:'.md5('GET:/')); - $header = 'username=user, realm=myRealm, nonce=12345, uri=/, response='.$digestHash.', opaque=1, qop=auth, nc=1, cnonce=1'; - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/', - 'PHP_AUTH_DIGEST' => $header, - ]); - - $response = new HTTP\Response(); - - $backend = new AbstractDigestMock(); - $this->assertEquals( - [true, 'principals/user'], - $backend->check($request, $response) - ); - } - - public function testRequireAuth() - { - $request = new HTTP\Request('GET', '/'); - $response = new HTTP\Response(); - - $backend = new AbstractDigestMock(); - $backend->setRealm('writing unittests on a saturday night'); - $backend->challenge($request, $response); - - $this->assertStringStartsWith( - 'Digest realm="writing unittests on a saturday night"', - $response->getHeader('WWW-Authenticate') - ); - } -} - -class AbstractDigestMock extends AbstractDigest -{ - public function getDigestHash($realm, $userName) - { - switch ($userName) { - case 'null': return null; - case 'false': return false; - case 'array': return []; - case 'user': return 'HELLO'; - } - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/AbstractPDOTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/AbstractPDOTest.php deleted file mode 100644 index 8b874f884..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/AbstractPDOTest.php +++ /dev/null @@ -1,42 +0,0 @@ -dropTables('users'); - $this->createSchema('users'); - - $this->getPDO()->query( - "INSERT INTO users (username,digesta1) VALUES ('user','hash')" - ); - } - - public function testConstruct() - { - $pdo = $this->getPDO(); - $backend = new PDO($pdo); - $this->assertTrue($backend instanceof PDO); - } - - /** - * @depends testConstruct - */ - public function testUserInfo() - { - $pdo = $this->getPDO(); - $backend = new PDO($pdo); - - $this->assertNull($backend->getDigestHash('realm', 'blabla')); - - $expected = 'hash'; - - $this->assertEquals($expected, $backend->getDigestHash('realm', 'user')); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/ApacheTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/ApacheTest.php deleted file mode 100644 index a0086518f..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/ApacheTest.php +++ /dev/null @@ -1,72 +0,0 @@ -assertInstanceOf('Sabre\DAV\Auth\Backend\Apache', $backend); - } - - public function testNoHeader() - { - $request = new HTTP\Request('GET', '/'); - $response = new HTTP\Response(); - $backend = new Apache(); - - $this->assertFalse( - $backend->check($request, $response)[0] - ); - } - - public function testRemoteUser() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/', - 'REMOTE_USER' => 'username', - ]); - $response = new HTTP\Response(); - $backend = new Apache(); - - $this->assertEquals( - [true, 'principals/username'], - $backend->check($request, $response) - ); - } - - public function testRedirectRemoteUser() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/', - 'REDIRECT_REMOTE_USER' => 'username', - ]); - $response = new HTTP\Response(); - $backend = new Apache(); - - $this->assertEquals( - [true, 'principals/username'], - $backend->check($request, $response) - ); - } - - public function testRequireAuth() - { - $request = new HTTP\Request('GET', '/'); - $response = new HTTP\Response(); - - $backend = new Apache(); - $backend->challenge($request, $response); - - $this->assertNull( - $response->getHeader('WWW-Authenticate') - ); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/FileTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/FileTest.php deleted file mode 100644 index 31a86f9ed..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/FileTest.php +++ /dev/null @@ -1,38 +0,0 @@ -assertTrue($file instanceof File); - } - - public function testLoadFileBroken() - { - $this->expectException('Sabre\DAV\Exception'); - file_put_contents(SABRE_TEMPDIR.'/backend', 'user:realm:hash'); - $file = new File(SABRE_TEMPDIR.'/backend'); - } - - public function testLoadFile() - { - file_put_contents(SABRE_TEMPDIR.'/backend', 'user:realm:'.md5('user:realm:password')); - $file = new File(); - $file->loadFile(SABRE_TEMPDIR.'/backend'); - - $this->assertFalse($file->getDigestHash('realm', 'blabla')); - $this->assertEquals(md5('user:realm:password'), $file->getDigestHash('realm', 'user')); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/Mock.php b/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/Mock.php deleted file mode 100644 index fca7f722f..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/Mock.php +++ /dev/null @@ -1,81 +0,0 @@ -principal = $principal; - } - - /** - * When this method is called, the backend must check if authentication was - * successful. - * - * The returned value must be one of the following - * - * [true, "principals/username"] - * [false, "reason for failure"] - * - * If authentication was successful, it's expected that the authentication - * backend returns a so-called principal url. - * - * Examples of a principal url: - * - * principals/admin - * principals/user1 - * principals/users/joe - * principals/uid/123457 - * - * If you don't use WebDAV ACL (RFC3744) we recommend that you simply - * return a string such as: - * - * principals/users/[username] - * - * @return array - */ - public function check(RequestInterface $request, ResponseInterface $response) - { - if ($this->invalidCheckResponse) { - return 'incorrect!'; - } - if ($this->fail) { - return [false, 'fail!']; - } - - return [true, $this->principal]; - } - - /** - * This method is called when a user could not be authenticated, and - * authentication was required for the current request. - * - * This gives you the oppurtunity to set authentication headers. The 401 - * status code will already be set. - * - * In this case of Basic Auth, this would for example mean that the - * following header needs to be set: - * - * $response->addHeader('WWW-Authenticate', 'Basic realm=SabreDAV'); - * - * Keep in mind that in the case of multiple authentication backends, other - * WWW-Authenticate headers may already have been set, and you'll want to - * append your own WWW-Authenticate header instead of overwriting the - * existing one. - */ - public function challenge(RequestInterface $request, ResponseInterface $response) - { - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/PDOMySQLTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/PDOMySQLTest.php deleted file mode 100644 index 6ad7906c4..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Auth/Backend/PDOMySQLTest.php +++ /dev/null @@ -1,10 +0,0 @@ -assertTrue($plugin instanceof Plugin); - $fakeServer->addPlugin($plugin); - $this->assertEquals($plugin, $fakeServer->getPlugin('auth')); - $this->assertIsArray($plugin->getPluginInfo()); - } - - /** - * @depends testInit - */ - public function testAuthenticate() - { - $fakeServer = new DAV\Server(new DAV\SimpleCollection('bla')); - $plugin = new Plugin(new Backend\Mock()); - $fakeServer->addPlugin($plugin); - $this->assertTrue( - $fakeServer->emit('beforeMethod:GET', [new HTTP\Request('GET', '/'), new HTTP\Response()]) - ); - } - - /** - * @depends testInit - */ - public function testAuthenticateFail() - { - $this->expectException('Sabre\DAV\Exception\NotAuthenticated'); - $fakeServer = new DAV\Server(new DAV\SimpleCollection('bla')); - $backend = new Backend\Mock(); - $backend->fail = true; - - $plugin = new Plugin($backend); - $fakeServer->addPlugin($plugin); - $fakeServer->emit('beforeMethod:GET', [new HTTP\Request('GET', '/'), new HTTP\Response()]); - } - - /** - * @depends testAuthenticateFail - */ - public function testAuthenticateFailDontAutoRequire() - { - $fakeServer = new DAV\Server(new DAV\SimpleCollection('bla')); - $backend = new Backend\Mock(); - $backend->fail = true; - - $plugin = new Plugin($backend); - $plugin->autoRequireLogin = false; - $fakeServer->addPlugin($plugin); - $this->assertTrue( - $fakeServer->emit('beforeMethod:GET', [new HTTP\Request('GET', '/'), new HTTP\Response()]) - ); - $this->assertEquals(1, count($plugin->getLoginFailedReasons())); - } - - /** - * @depends testAuthenticate - */ - public function testMultipleBackend() - { - $fakeServer = new DAV\Server(new DAV\SimpleCollection('bla')); - $backend1 = new Backend\Mock(); - $backend2 = new Backend\Mock(); - $backend2->fail = true; - - $plugin = new Plugin(); - $plugin->addBackend($backend1); - $plugin->addBackend($backend2); - - $fakeServer->addPlugin($plugin); - $fakeServer->emit('beforeMethod:GET', [new HTTP\Request('GET', '/'), new HTTP\Response()]); - - $this->assertEquals('principals/admin', $plugin->getCurrentPrincipal()); - } - - /** - * @depends testInit - */ - public function testNoAuthBackend() - { - $this->expectException('Sabre\DAV\Exception'); - $fakeServer = new DAV\Server(new DAV\SimpleCollection('bla')); - - $plugin = new Plugin(); - $fakeServer->addPlugin($plugin); - $fakeServer->emit('beforeMethod:GET', [new HTTP\Request('GET', '/'), new HTTP\Response()]); - } - - /** - * @depends testInit - */ - public function testInvalidCheckResponse() - { - $this->expectException('Sabre\DAV\Exception'); - $fakeServer = new DAV\Server(new DAV\SimpleCollection('bla')); - $backend = new Backend\Mock(); - $backend->invalidCheckResponse = true; - - $plugin = new Plugin($backend); - $fakeServer->addPlugin($plugin); - $fakeServer->emit('beforeMethod:GET', [new HTTP\Request('GET', '/'), new HTTP\Response()]); - } - - /** - * @depends testAuthenticate - */ - public function testGetCurrentPrincipal() - { - $fakeServer = new DAV\Server(new DAV\SimpleCollection('bla')); - $plugin = new Plugin(new Backend\Mock()); - $fakeServer->addPlugin($plugin); - $fakeServer->emit('beforeMethod:GET', [new HTTP\Request('GET', '/'), new HTTP\Response()]); - $this->assertEquals('principals/admin', $plugin->getCurrentPrincipal()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/BasicNodeTest.php b/vendor/sabre/dav/tests/Sabre/DAV/BasicNodeTest.php deleted file mode 100644 index e9a8eddad..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/BasicNodeTest.php +++ /dev/null @@ -1,124 +0,0 @@ -expectException('Sabre\DAV\Exception\Forbidden'); - $file = new FileMock(); - $file->put('hi'); - } - - public function testGet() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $file = new FileMock(); - $file->get(); - } - - public function testGetSize() - { - $file = new FileMock(); - $this->assertEquals(0, $file->getSize()); - } - - public function testGetETag() - { - $file = new FileMock(); - $this->assertNull($file->getETag()); - } - - public function testGetContentType() - { - $file = new FileMock(); - $this->assertNull($file->getContentType()); - } - - public function testDelete() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $file = new FileMock(); - $file->delete(); - } - - public function testSetName() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $file = new FileMock(); - $file->setName('hi'); - } - - public function testGetLastModified() - { - $file = new FileMock(); - // checking if lastmod is within the range of a few seconds - $lastMod = $file->getLastModified(); - $compareTime = ($lastMod + 1) - time(); - $this->assertTrue($compareTime < 3); - } - - public function testGetChild() - { - $dir = new DirectoryMock(); - $file = $dir->getChild('mockfile'); - $this->assertTrue($file instanceof FileMock); - } - - public function testChildExists() - { - $dir = new DirectoryMock(); - $this->assertTrue($dir->childExists('mockfile')); - } - - public function testChildExistsFalse() - { - $dir = new DirectoryMock(); - $this->assertFalse($dir->childExists('mockfile2')); - } - - public function testGetChild404() - { - $this->expectException('Sabre\DAV\Exception\NotFound'); - $dir = new DirectoryMock(); - $file = $dir->getChild('blabla'); - } - - public function testCreateFile() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $dir = new DirectoryMock(); - $dir->createFile('hello', 'data'); - } - - public function testCreateDirectory() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $dir = new DirectoryMock(); - $dir->createDirectory('hello'); - } -} - -class DirectoryMock extends Collection -{ - public function getName() - { - return 'mockdir'; - } - - public function getChildren() - { - return [new FileMock()]; - } -} - -class FileMock extends File -{ - public function getName() - { - return 'mockfile'; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Browser/GuessContentTypeTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Browser/GuessContentTypeTest.php deleted file mode 100644 index cb4d3ce03..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Browser/GuessContentTypeTest.php +++ /dev/null @@ -1,67 +0,0 @@ -server->getPropertiesForPath('/somefile.jpg', $properties); - $this->assertArrayHasKey(0, $result); - $this->assertArrayHasKey(404, $result[0]); - $this->assertArrayHasKey('{DAV:}getcontenttype', $result[0][404]); - } - - /** - * @depends testGetProperties - */ - public function testGetPropertiesPluginEnabled() - { - $this->server->addPlugin(new GuessContentType()); - $properties = [ - '{DAV:}getcontenttype', - ]; - $result = $this->server->getPropertiesForPath('/somefile.jpg', $properties); - $this->assertArrayHasKey(0, $result); - $this->assertArrayHasKey(200, $result[0], 'We received: '.print_r($result, true)); - $this->assertArrayHasKey('{DAV:}getcontenttype', $result[0][200]); - $this->assertEquals('image/jpeg', $result[0][200]['{DAV:}getcontenttype']); - } - - /** - * @depends testGetPropertiesPluginEnabled - */ - public function testGetPropertiesUnknown() - { - $this->server->addPlugin(new GuessContentType()); - $properties = [ - '{DAV:}getcontenttype', - ]; - $result = $this->server->getPropertiesForPath('/somefile.hoi', $properties); - $this->assertArrayHasKey(0, $result); - $this->assertArrayHasKey(200, $result[0]); - $this->assertArrayHasKey('{DAV:}getcontenttype', $result[0][200]); - $this->assertEquals('application/octet-stream', $result[0][200]['{DAV:}getcontenttype']); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Browser/MapGetToPropFindTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Browser/MapGetToPropFindTest.php deleted file mode 100644 index 00b2661ac..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Browser/MapGetToPropFindTest.php +++ /dev/null @@ -1,40 +0,0 @@ -server->addPlugin(new MapGetToPropFind()); - } - - public function testCollectionGet() - { - $serverVars = [ - 'REQUEST_URI' => '/', - 'REQUEST_METHOD' => 'GET', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody(''); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals(207, $this->response->status, 'Incorrect status response received. Full response body: '.$this->response->getBodyAsString()); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - 'DAV' => ['1, 3, extended-mkcol'], - 'Vary' => ['Brief,Prefer'], - ], - $this->response->getHeaders() - ); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Browser/PluginTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Browser/PluginTest.php deleted file mode 100644 index a987525c0..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Browser/PluginTest.php +++ /dev/null @@ -1,176 +0,0 @@ -server->addPlugin($this->plugin = new Plugin()); - $this->server->tree->getNodeForPath('')->createDirectory('dir2'); - } - - public function testCollectionGet() - { - $request = new HTTP\Request('GET', '/dir'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(200, $this->response->getStatus(), 'Incorrect status received. Full response body: '.$this->response->getBodyAsString()); - $this->assertEquals( - [ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['text/html; charset=utf-8'], - 'Content-Security-Policy' => ["default-src 'none'; img-src 'self'; style-src 'self'; font-src 'self';"], - ], - $this->response->getHeaders() - ); - - $body = $this->response->getBodyAsString(); - $this->assertTrue(false !== strpos($body, 'dir'), $body); - $this->assertTrue(false !== strpos($body, '<a href="/dir/child.txt">')); - } - - /** - * Adding the If-None-Match should have 0 effect, but it threw an error. - */ - public function testCollectionGetIfNoneMatch() - { - $request = new HTTP\Request('GET', '/dir'); - $request->setHeader('If-None-Match', '"foo-bar"'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(200, $this->response->getStatus(), 'Incorrect status received. Full response body: '.$this->response->getBodyAsString()); - $this->assertEquals( - [ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['text/html; charset=utf-8'], - 'Content-Security-Policy' => ["default-src 'none'; img-src 'self'; style-src 'self'; font-src 'self';"], - ], - $this->response->getHeaders() - ); - - $body = $this->response->getBodyAsString(); - $this->assertTrue(false !== strpos($body, '<title>dir'), $body); - $this->assertTrue(false !== strpos($body, '<a href="/dir/child.txt">')); - } - - public function testCollectionGetRoot() - { - $request = new HTTP\Request('GET', '/'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals(200, $this->response->status, 'Incorrect status received. Full response body: '.$this->response->getBodyAsString()); - $this->assertEquals( - [ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['text/html; charset=utf-8'], - 'Content-Security-Policy' => ["default-src 'none'; img-src 'self'; style-src 'self'; font-src 'self';"], - ], - $this->response->getHeaders() - ); - - $body = $this->response->getBodyAsString(); - $this->assertTrue(false !== strpos($body, '<title>/'), $body); - $this->assertTrue(false !== strpos($body, '<a href="/dir/">')); - $this->assertTrue(false !== strpos($body, '<span class="btn disabled">')); - } - - public function testGETPassthru() - { - $request = new HTTP\Request('GET', '/random'); - $response = new HTTP\Response(); - $this->assertNull( - $this->plugin->httpGet($request, $response) - ); - } - - public function testPostOtherContentType() - { - $request = new HTTP\Request('POST', '/', ['Content-Type' => 'text/xml']); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(501, $this->response->status); - } - - public function testPostNoSabreAction() - { - $request = new HTTP\Request('POST', '/', ['Content-Type' => 'application/x-www-form-urlencoded']); - $request->setPostData([]); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(501, $this->response->status); - } - - public function testPostMkCol() - { - $serverVars = [ - 'REQUEST_URI' => '/', - 'REQUEST_METHOD' => 'POST', - 'CONTENT_TYPE' => 'application/x-www-form-urlencoded', - ]; - $postVars = [ - 'sabreAction' => 'mkcol', - 'name' => 'new_collection', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setPostData($postVars); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(302, $this->response->status); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Location' => ['/'], - ], $this->response->getHeaders()); - - $this->assertTrue(is_dir(SABRE_TEMPDIR.'/new_collection')); - } - - public function testGetAsset() - { - $request = new HTTP\Request('GET', '/?sabreAction=asset&assetName=favicon.ico'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(200, $this->response->getStatus(), 'Error: '.$this->response->getBodyAsString()); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['image/vnd.microsoft.icon'], - 'Content-Length' => ['4286'], - 'Cache-Control' => ['public, max-age=1209600'], - 'Content-Security-Policy' => ["default-src 'none'; img-src 'self'; style-src 'self'; font-src 'self';"], - ], $this->response->getHeaders()); - } - - public function testGetAsset404() - { - $request = new HTTP\Request('GET', '/?sabreAction=asset&assetName=flavicon.ico'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(404, $this->response->getStatus(), 'Error: '.$this->response->getBodyAsString()); - } - - public function testGetAssetEscapeBasePath() - { - $request = new HTTP\Request('GET', '/?sabreAction=asset&assetName=./../assets/favicon.ico'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(404, $this->response->getStatus(), 'Error: '.$this->response->getBodyAsString()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/ClientMock.php b/vendor/sabre/dav/tests/Sabre/DAV/ClientMock.php deleted file mode 100644 index 7d787744a..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/ClientMock.php +++ /dev/null @@ -1,36 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -use Sabre\HTTP\RequestInterface; -use Sabre\HTTP\ResponseInterface; - -class ClientMock extends Client -{ - public $request; - public $response; - - public $url; - public $curlSettings; - - /** - * Just making this method public. - * - * @param string $url - * - * @return string - */ - public function getAbsoluteUrl($url) - { - return parent::getAbsoluteUrl($url); - } - - public function doRequest(RequestInterface $request): ResponseInterface - { - $this->request = $request; - - return $this->response; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/ClientTest.php b/vendor/sabre/dav/tests/Sabre/DAV/ClientTest.php deleted file mode 100644 index 85a95c90e..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/ClientTest.php +++ /dev/null @@ -1,285 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -use Sabre\HTTP\Response; - -class ClientTest extends \PHPUnit\Framework\TestCase -{ - public function setup(): void - { - if (!function_exists('curl_init')) { - $this->markTestSkipped('CURL must be installed to test the client'); - } - } - - public function testConstruct() - { - $client = new ClientMock([ - 'baseUri' => '/', - ]); - $this->assertInstanceOf('Sabre\DAV\ClientMock', $client); - } - - public function testConstructNoBaseUri() - { - $this->expectException('InvalidArgumentException'); - $client = new ClientMock([]); - } - - public function testAuth() - { - $client = new ClientMock([ - 'baseUri' => '/', - 'userName' => 'foo', - 'password' => 'bar', - ]); - - $this->assertEquals('foo:bar', $client->curlSettings[CURLOPT_USERPWD]); - $this->assertEquals(CURLAUTH_BASIC | CURLAUTH_DIGEST, $client->curlSettings[CURLOPT_HTTPAUTH]); - } - - public function testBasicAuth() - { - $client = new ClientMock([ - 'baseUri' => '/', - 'userName' => 'foo', - 'password' => 'bar', - 'authType' => Client::AUTH_BASIC, - ]); - - $this->assertEquals('foo:bar', $client->curlSettings[CURLOPT_USERPWD]); - $this->assertEquals(CURLAUTH_BASIC, $client->curlSettings[CURLOPT_HTTPAUTH]); - } - - public function testDigestAuth() - { - $client = new ClientMock([ - 'baseUri' => '/', - 'userName' => 'foo', - 'password' => 'bar', - 'authType' => Client::AUTH_DIGEST, - ]); - - $this->assertEquals('foo:bar', $client->curlSettings[CURLOPT_USERPWD]); - $this->assertEquals(CURLAUTH_DIGEST, $client->curlSettings[CURLOPT_HTTPAUTH]); - } - - public function testNTLMAuth() - { - $client = new ClientMock([ - 'baseUri' => '/', - 'userName' => 'foo', - 'password' => 'bar', - 'authType' => Client::AUTH_NTLM, - ]); - - $this->assertEquals('foo:bar', $client->curlSettings[CURLOPT_USERPWD]); - $this->assertEquals(CURLAUTH_NTLM, $client->curlSettings[CURLOPT_HTTPAUTH]); - } - - public function testProxy() - { - $client = new ClientMock([ - 'baseUri' => '/', - 'proxy' => 'localhost:8888', - ]); - - $this->assertEquals('localhost:8888', $client->curlSettings[CURLOPT_PROXY]); - } - - public function testEncoding() - { - $client = new ClientMock([ - 'baseUri' => '/', - 'encoding' => Client::ENCODING_IDENTITY | Client::ENCODING_GZIP | Client::ENCODING_DEFLATE, - ]); - - $this->assertEquals('identity,deflate,gzip', $client->curlSettings[CURLOPT_ENCODING]); - } - - public function testPropFind() - { - $client = new ClientMock([ - 'baseUri' => '/', - ]); - - $responseBody = <<<XML -<?xml version="1.0"?> -<multistatus xmlns="DAV:"> - <response> - <href>/foo</href> - <propstat> - <prop> - <displayname>bar</displayname> - </prop> - <status>HTTP/1.1 200 OK</status> - </propstat> - </response> -</multistatus> -XML; - - $client->response = new Response(207, [], $responseBody); - $result = $client->propFind('foo', ['{DAV:}displayname', '{urn:zim}gir']); - - $this->assertEquals(['{DAV:}displayname' => 'bar'], $result); - - $request = $client->request; - $this->assertEquals('PROPFIND', $request->getMethod()); - $this->assertEquals('/foo', $request->getUrl()); - $this->assertEquals([ - 'Depth' => ['0'], - 'Content-Type' => ['application/xml'], - ], $request->getHeaders()); - } - - public function testPropFindError() - { - $this->expectException('Sabre\HTTP\ClientHttpException'); - $client = new ClientMock([ - 'baseUri' => '/', - ]); - - $client->response = new Response(405, []); - $client->propFind('foo', ['{DAV:}displayname', '{urn:zim}gir']); - } - - public function testPropFindDepth1() - { - $client = new ClientMock([ - 'baseUri' => '/', - ]); - - $responseBody = <<<XML -<?xml version="1.0"?> -<multistatus xmlns="DAV:"> - <response> - <href>/foo</href> - <propstat> - <prop> - <displayname>bar</displayname> - </prop> - <status>HTTP/1.1 200 OK</status> - </propstat> - </response> -</multistatus> -XML; - - $client->response = new Response(207, [], $responseBody); - $result = $client->propFind('foo', ['{DAV:}displayname', '{urn:zim}gir'], 1); - - $this->assertEquals([ - '/foo' => [ - '{DAV:}displayname' => 'bar', - ], - ], $result); - - $request = $client->request; - $this->assertEquals('PROPFIND', $request->getMethod()); - $this->assertEquals('/foo', $request->getUrl()); - $this->assertEquals([ - 'Depth' => ['1'], - 'Content-Type' => ['application/xml'], - ], $request->getHeaders()); - } - - public function testPropPatch() - { - $client = new ClientMock([ - 'baseUri' => '/', - ]); - - $responseBody = <<<XML -<?xml version="1.0"?> -<multistatus xmlns="DAV:"> - <response> - <href>/foo</href> - <propstat> - <prop> - <displayname>bar</displayname> - </prop> - <status>HTTP/1.1 200 OK</status> - </propstat> - </response> -</multistatus> -XML; - - $client->response = new Response(207, [], $responseBody); - $result = $client->propPatch('foo', ['{DAV:}displayname' => 'hi', '{urn:zim}gir' => null]); - $this->assertTrue($result); - $request = $client->request; - $this->assertEquals('PROPPATCH', $request->getMethod()); - $this->assertEquals('/foo', $request->getUrl()); - $this->assertEquals([ - 'Content-Type' => ['application/xml'], - ], $request->getHeaders()); - } - - /** - * @depends testPropPatch - */ - public function testPropPatchHTTPError() - { - $this->expectException('Sabre\HTTP\ClientHttpException'); - $client = new ClientMock([ - 'baseUri' => '/', - ]); - - $client->response = new Response(403, [], ''); - $client->propPatch('foo', ['{DAV:}displayname' => 'hi', '{urn:zim}gir' => null]); - } - - /** - * @depends testPropPatch - */ - public function testPropPatchMultiStatusError() - { - $this->expectException('Sabre\HTTP\ClientException'); - $client = new ClientMock([ - 'baseUri' => '/', - ]); - - $responseBody = <<<XML -<?xml version="1.0"?> -<multistatus xmlns="DAV:"> -<response> - <href>/foo</href> - <propstat> - <prop> - <displayname /> - </prop> - <status>HTTP/1.1 403 Forbidden</status> - </propstat> -</response> -</multistatus> -XML; - - $client->response = new Response(207, [], $responseBody); - $client->propPatch('foo', ['{DAV:}displayname' => 'hi', '{urn:zim}gir' => null]); - } - - public function testOPTIONS() - { - $client = new ClientMock([ - 'baseUri' => '/', - ]); - - $client->response = new Response(207, [ - 'DAV' => 'calendar-access, extended-mkcol', - ]); - $result = $client->options(); - - $this->assertEquals( - ['calendar-access', 'extended-mkcol'], - $result - ); - - $request = $client->request; - $this->assertEquals('OPTIONS', $request->getMethod()); - $this->assertEquals('/', $request->getUrl()); - $this->assertEquals([ - ], $request->getHeaders()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Exception/LockedTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Exception/LockedTest.php deleted file mode 100644 index 5fc271587..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Exception/LockedTest.php +++ /dev/null @@ -1,67 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\Exception; - -use DOMDocument; -use Sabre\DAV; - -class LockedTest extends \PHPUnit\Framework\TestCase -{ - public function testSerialize() - { - $dom = new DOMDocument('1.0'); - $dom->formatOutput = true; - $root = $dom->createElement('d:root'); - - $dom->appendChild($root); - $root->setAttribute('xmlns:d', 'DAV:'); - - $lockInfo = new DAV\Locks\LockInfo(); - $lockInfo->uri = '/foo'; - $locked = new Locked($lockInfo); - - $locked->serialize(new DAV\Server(), $root); - - $output = $dom->saveXML(); - - $expected = '<?xml version="1.0"?> -<d:root xmlns:d="DAV:"> - <d:lock-token-submitted xmlns:d="DAV:"> - <d:href>/foo</d:href> - </d:lock-token-submitted> -</d:root> -'; - - $this->assertEquals($expected, $output); - } - - public function testSerializeAmpersand() - { - $dom = new DOMDocument('1.0'); - $dom->formatOutput = true; - $root = $dom->createElement('d:root'); - - $dom->appendChild($root); - $root->setAttribute('xmlns:d', 'DAV:'); - - $lockInfo = new DAV\Locks\LockInfo(); - $lockInfo->uri = '/foo&bar'; - $locked = new Locked($lockInfo); - - $locked->serialize(new DAV\Server(), $root); - - $output = $dom->saveXML(); - - $expected = '<?xml version="1.0"?> -<d:root xmlns:d="DAV:"> - <d:lock-token-submitted xmlns:d="DAV:"> - <d:href>/foo&bar</d:href> - </d:lock-token-submitted> -</d:root> -'; - - $this->assertEquals($expected, $output); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Exception/PaymentRequiredTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Exception/PaymentRequiredTest.php deleted file mode 100644 index 42775a313..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Exception/PaymentRequiredTest.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\Exception; - -class PaymentRequiredTest extends \PHPUnit\Framework\TestCase -{ - public function testGetHTTPCode() - { - $ex = new PaymentRequired(); - $this->assertEquals(402, $ex->getHTTPCode()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/ExceptionTest.php b/vendor/sabre/dav/tests/Sabre/DAV/ExceptionTest.php deleted file mode 100644 index 7237aea0d..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/ExceptionTest.php +++ /dev/null @@ -1,27 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -class ExceptionTest extends \PHPUnit\Framework\TestCase -{ - public function testStatus() - { - $e = new Exception(); - $this->assertEquals(500, $e->getHTTPCode()); - } - - public function testExceptionStatuses() - { - $c = [ - 'Sabre\\DAV\\Exception\\NotAuthenticated' => 401, - 'Sabre\\DAV\\Exception\\InsufficientStorage' => 507, - ]; - - foreach ($c as $class => $status) { - $obj = new $class(); - $this->assertEquals($status, $obj->getHTTPCode()); - } - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/FSExt/FileTest.php b/vendor/sabre/dav/tests/Sabre/DAV/FSExt/FileTest.php deleted file mode 100644 index 2b759e5d0..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/FSExt/FileTest.php +++ /dev/null @@ -1,99 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\FSExt; - -class FileTest extends \PHPUnit\Framework\TestCase -{ - public function setup(): void - { - file_put_contents(SABRE_TEMPDIR.'/file.txt', 'Contents'); - } - - public function teardown(): void - { - \Sabre\TestUtil::clearTempDir(); - } - - public function testPut() - { - $filename = SABRE_TEMPDIR.'/file.txt'; - $file = new File($filename); - $result = $file->put('New contents'); - - $this->assertEquals('New contents', file_get_contents(SABRE_TEMPDIR.'/file.txt')); - $this->assertEquals( - '"'. - sha1( - fileinode($filename). - filesize($filename). - filemtime($filename) - ).'"', - $result - ); - } - - public function testRange() - { - $file = new File(SABRE_TEMPDIR.'/file.txt'); - $file->put('0000000'); - $file->patch('111', 2, 3); - - $this->assertEquals('0001110', file_get_contents(SABRE_TEMPDIR.'/file.txt')); - } - - public function testRangeStream() - { - $stream = fopen('php://memory', 'r+'); - fwrite($stream, '222'); - rewind($stream); - - $file = new File(SABRE_TEMPDIR.'/file.txt'); - $file->put('0000000'); - $file->patch($stream, 2, 3); - - $this->assertEquals('0002220', file_get_contents(SABRE_TEMPDIR.'/file.txt')); - } - - public function testGet() - { - $file = new File(SABRE_TEMPDIR.'/file.txt'); - $this->assertEquals('Contents', stream_get_contents($file->get())); - } - - public function testDelete() - { - $file = new File(SABRE_TEMPDIR.'/file.txt'); - $file->delete(); - - $this->assertFalse(file_exists(SABRE_TEMPDIR.'/file.txt')); - } - - public function testGetETag() - { - $filename = SABRE_TEMPDIR.'/file.txt'; - $file = new File($filename); - $this->assertEquals( - '"'. - sha1( - fileinode($filename). - filesize($filename). - filemtime($filename) - ).'"', - $file->getETag() - ); - } - - public function testGetContentType() - { - $file = new File(SABRE_TEMPDIR.'/file.txt'); - $this->assertNull($file->getContentType()); - } - - public function testGetSize() - { - $file = new File(SABRE_TEMPDIR.'/file.txt'); - $this->assertEquals(8, $file->getSize()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/FSExt/ServerTest.php b/vendor/sabre/dav/tests/Sabre/DAV/FSExt/ServerTest.php deleted file mode 100644 index 79ffb0186..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/FSExt/ServerTest.php +++ /dev/null @@ -1,252 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\FSExt; - -use Sabre\DAV; -use Sabre\HTTP; - -class ServerTest extends DAV\AbstractServer -{ - protected function getRootNode() - { - return new Directory($this->tempDir); - } - - public function testGet() - { - $request = new HTTP\Request('GET', '/test.txt'); - $filename = $this->tempDir.'/test.txt'; - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(200, $this->response->getStatus(), 'Invalid status code received.'); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/octet-stream'], - 'Content-Length' => [13], - 'Last-Modified' => [HTTP\toDate(new \DateTime('@'.filemtime($filename)))], - 'ETag' => ['"'.sha1(fileinode($filename).filesize($filename).filemtime($filename)).'"'], - ], - $this->response->getHeaders() - ); - - $this->assertEquals('Test contents', $this->response->getBodyAsString()); - } - - public function testHEAD() - { - $request = new HTTP\Request('HEAD', '/test.txt'); - $filename = $this->tempDir.'/test.txt'; - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/octet-stream'], - 'Content-Length' => [13], - 'Last-Modified' => [HTTP\toDate(new \DateTime('@'.filemtime($this->tempDir.'/test.txt')))], - 'ETag' => ['"'.sha1(fileinode($filename).filesize($filename).filemtime($filename)).'"'], - ], - $this->response->getHeaders() - ); - - $this->assertEquals(200, $this->response->status); - $this->assertEquals('', $this->response->getBodyAsString()); - } - - public function testPut() - { - $request = new HTTP\Request('PUT', '/testput.txt'); - $filename = $this->tempDir.'/testput.txt'; - $request->setBody('Testing new file'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Length' => ['0'], - 'ETag' => ['"'.sha1(fileinode($filename).filesize($filename).filemtime($filename)).'"'], - ], $this->response->getHeaders()); - - $this->assertEquals(201, $this->response->status); - $this->assertEquals('', $this->response->getBodyAsString()); - $this->assertEquals('Testing new file', file_get_contents($filename)); - } - - public function testPutAlreadyExists() - { - $request = new HTTP\Request('PUT', '/test.txt', ['If-None-Match' => '*']); - $request->setBody('Testing new file'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $this->response->getHeaders()); - - $this->assertEquals(412, $this->response->status); - $this->assertNotEquals('Testing new file', file_get_contents($this->tempDir.'/test.txt')); - } - - public function testMkcol() - { - $request = new HTTP\Request('MKCOL', '/testcol'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Length' => ['0'], - ], $this->response->getHeaders()); - - $this->assertEquals(201, $this->response->status); - $this->assertEquals('', $this->response->getBodyAsString()); - $this->assertTrue(is_dir($this->tempDir.'/testcol')); - } - - public function testPutUpdate() - { - $request = new HTTP\Request('PUT', '/test.txt'); - $request->setBody('Testing updated file'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals('0', $this->response->getHeader('Content-Length')); - - $this->assertEquals(204, $this->response->status); - $this->assertEquals('', $this->response->getBodyAsString()); - $this->assertEquals('Testing updated file', file_get_contents($this->tempDir.'/test.txt')); - } - - public function testDelete() - { - $request = new HTTP\Request('DELETE', '/test.txt'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Length' => ['0'], - ], $this->response->getHeaders()); - - $this->assertEquals(204, $this->response->status); - $this->assertEquals('', $this->response->getBodyAsString()); - $this->assertFalse(file_exists($this->tempDir.'/test.txt')); - } - - public function testDeleteDirectory() - { - mkdir($this->tempDir.'/testcol'); - file_put_contents($this->tempDir.'/testcol/test.txt', 'Hi! I\'m a file with a short lifespan'); - - $request = new HTTP\Request('DELETE', '/testcol'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Length' => ['0'], - ], $this->response->getHeaders()); - $this->assertEquals(204, $this->response->status); - $this->assertEquals('', $this->response->getBodyAsString()); - $this->assertFalse(file_exists($this->tempDir.'/testcol')); - } - - public function testOptions() - { - $request = new HTTP\Request('OPTIONS', '/'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'DAV' => ['1, 3, extended-mkcol'], - 'MS-Author-Via' => ['DAV'], - 'Allow' => ['OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT'], - 'Accept-Ranges' => ['bytes'], - 'Content-Length' => ['0'], - 'X-Sabre-Version' => [DAV\Version::VERSION], - ], $this->response->getHeaders()); - - $this->assertEquals(200, $this->response->status); - $this->assertEquals('', $this->response->getBodyAsString()); - } - - public function testMove() - { - mkdir($this->tempDir.'/testcol'); - - $request = new HTTP\Request('MOVE', '/test.txt', ['Destination' => '/testcol/test2.txt']); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals(201, $this->response->status); - $this->assertEquals('', $this->response->getBodyAsString()); - - $this->assertEquals([ - 'Content-Length' => ['0'], - 'X-Sabre-Version' => [DAV\Version::VERSION], - ], $this->response->getHeaders()); - - $this->assertTrue( - is_file($this->tempDir.'/testcol/test2.txt') - ); - } - - /** - * This test checks if it's possible to move a non-FSExt collection into a - * FSExt collection. - * - * The moveInto function *should* ignore the object and let sabredav itself - * execute the slow move. - */ - public function testMoveOtherObject() - { - mkdir($this->tempDir.'/tree1'); - mkdir($this->tempDir.'/tree2'); - - $tree = new DAV\Tree(new DAV\SimpleCollection('root', [ - new DAV\FS\Directory($this->tempDir.'/tree1'), - new DAV\FSExt\Directory($this->tempDir.'/tree2'), - ])); - $this->server->tree = $tree; - - $request = new HTTP\Request('MOVE', '/tree1', ['Destination' => '/tree2/tree1']); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals(201, $this->response->status); - $this->assertEquals('', $this->response->getBodyAsString()); - - $this->assertEquals([ - 'Content-Length' => ['0'], - 'X-Sabre-Version' => [DAV\Version::VERSION], - ], $this->response->getHeaders()); - - $this->assertTrue( - is_dir($this->tempDir.'/tree2/tree1') - ); - } - - public function testCopy() - { - mkdir($this->tempDir.'/testcol'); - - $request = new HTTP\Request('COPY', '/test.txt', ['Destination' => '/testcol/test2.txt']); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals(201, $this->response->status); - $this->assertEquals('', $this->response->getBodyAsString()); - - $this->assertEquals([ - 'Content-Length' => ['0'], - 'X-Sabre-Version' => [DAV\Version::VERSION], - ], $this->response->getHeaders()); - - $this->assertTrue(is_file($this->tempDir.'/test.txt')); - $this->assertTrue(is_file($this->tempDir.'/testcol/test2.txt')); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/HTTPPreferParsingTest.php b/vendor/sabre/dav/tests/Sabre/DAV/HTTPPreferParsingTest.php deleted file mode 100644 index 7d6825612..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/HTTPPreferParsingTest.php +++ /dev/null @@ -1,175 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -use Sabre\HTTP; - -class HTTPPreferParsingTest extends \Sabre\DAVServerTest -{ - public function assertParseResult($input, $expected) - { - $httpRequest = new HTTP\Request('GET', '/foo', [ - 'Prefer' => $input, - ]); - - $server = new Server(); - $server->httpRequest = $httpRequest; - - $this->assertEquals( - $expected, - $server->getHTTPPrefer() - ); - } - - public function testParseSimple() - { - $this->assertParseResult( - 'return-asynch', - [ - 'respond-async' => true, - 'return' => null, - 'handling' => null, - 'wait' => null, - ] - ); - } - - public function testParseValue() - { - $this->assertParseResult( - 'wait=10', - [ - 'respond-async' => false, - 'return' => null, - 'handling' => null, - 'wait' => '10', - ] - ); - } - - public function testParseMultiple() - { - $this->assertParseResult( - 'return-minimal, strict,lenient', - [ - 'respond-async' => false, - 'return' => 'minimal', - 'handling' => 'lenient', - 'wait' => null, - ] - ); - } - - public function testParseWeirdValue() - { - $this->assertParseResult( - 'BOOOH', - [ - 'respond-async' => false, - 'return' => null, - 'handling' => null, - 'wait' => null, - 'boooh' => true, - ] - ); - } - - public function testBrief() - { - $httpRequest = new HTTP\Request('GET', '/foo', [ - 'Brief' => 't', - ]); - - $server = new Server(); - $server->httpRequest = $httpRequest; - - $this->assertEquals([ - 'respond-async' => false, - 'return' => 'minimal', - 'handling' => null, - 'wait' => null, - ], $server->getHTTPPrefer()); - } - - /** - * propfindMinimal. - */ - public function testpropfindMinimal() - { - $request = new HTTP\Request('PROPFIND', '/', [ - 'Prefer' => 'return-minimal', - ]); - $request->setBody(<<<BLA -<?xml version="1.0"?> -<d:propfind xmlns:d="DAV:"> - <d:prop> - <d:something /> - <d:resourcetype /> - </d:prop> -</d:propfind> -BLA - ); - - $response = $this->request($request); - - $body = $response->getBodyAsString(); - - $this->assertEquals(207, $response->getStatus(), $body); - - $this->assertTrue(false !== strpos($body, 'resourcetype'), $body); - $this->assertTrue(false === strpos($body, 'something'), $body); - } - - public function testproppatchMinimal() - { - $request = new HTTP\Request('PROPPATCH', '/', ['Prefer' => 'return-minimal']); - $request->setBody(<<<BLA -<?xml version="1.0"?> -<d:propertyupdate xmlns:d="DAV:"> - <d:set> - <d:prop> - <d:something>nope!</d:something> - </d:prop> - </d:set> -</d:propertyupdate> -BLA - ); - - $this->server->on('propPatch', function ($path, PropPatch $propPatch) { - $propPatch->handle('{DAV:}something', function ($props) { - return true; - }); - }); - - $response = $this->request($request); - - $this->assertEquals('', $response->getBodyAsString(), 'Expected empty body: '.$response->getBodyAsString()); - $this->assertEquals(204, $response->status); - } - - public function testproppatchMinimalError() - { - $request = new HTTP\Request('PROPPATCH', '/', ['Prefer' => 'return-minimal']); - $request->setBody(<<<BLA -<?xml version="1.0"?> -<d:propertyupdate xmlns:d="DAV:"> - <d:set> - <d:prop> - <d:something>nope!</d:something> - </d:prop> - </d:set> -</d:propertyupdate> -BLA - ); - - $response = $this->request($request); - - $body = $response->getBodyAsString(); - - $this->assertEquals(207, $response->status); - $this->assertTrue(false !== strpos($body, 'something')); - $this->assertTrue(false !== strpos($body, '403 Forbidden'), $body); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/HttpDeleteTest.php b/vendor/sabre/dav/tests/Sabre/DAV/HttpDeleteTest.php deleted file mode 100644 index f70febabd..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/HttpDeleteTest.php +++ /dev/null @@ -1,131 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -use Sabre\DAVServerTest; -use Sabre\HTTP; - -/** - * Tests related to the PUT request. - * - * @copyright Copyright (C) fruux GmbH (https://fruux.com/) - * @author Evert Pot (http://evertpot.com/) - * @license http://sabre.io/license/ Modified BSD License - */ -class HttpDeleteTest extends DAVServerTest -{ - /** - * Sets up the DAV tree. - */ - public function setUpTree() - { - $this->tree = new Mock\Collection('root', [ - 'file1' => 'foo', - 'dir' => [ - 'subfile' => 'bar', - 'subfile2' => 'baz', - ], - ]); - } - - /** - * A successful DELETE. - */ - public function testDelete() - { - $request = new HTTP\Request('DELETE', '/file1'); - - $response = $this->request($request); - - $this->assertEquals( - 204, - $response->getStatus(), - 'Incorrect status code. Response body: '.$response->getBodyAsString() - ); - - $this->assertEquals( - [ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Length' => ['0'], - ], - $response->getHeaders() - ); - } - - /** - * Deleting a Directory. - */ - public function testDeleteDirectory() - { - $request = new HTTP\Request('DELETE', '/dir'); - - $response = $this->request($request); - - $this->assertEquals( - 204, - $response->getStatus(), - 'Incorrect status code. Response body: '.$response->getBodyAsString() - ); - - $this->assertEquals( - [ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Length' => ['0'], - ], - $response->getHeaders() - ); - } - - /** - * DELETE on a node that does not exist. - */ - public function testDeleteNotFound() - { - $request = new HTTP\Request('DELETE', '/file2'); - $response = $this->request($request); - - $this->assertEquals( - 404, - $response->getStatus(), - 'Incorrect status code. Response body: '.$response->getBodyAsString() - ); - } - - /** - * DELETE with preconditions. - */ - public function testDeletePreconditions() - { - $request = new HTTP\Request('DELETE', '/file1', [ - 'If-Match' => '"'.md5('foo').'"', - ]); - - $response = $this->request($request); - - $this->assertEquals( - 204, - $response->getStatus(), - 'Incorrect status code. Response body: '.$response->getBodyAsString() - ); - } - - /** - * DELETE with incorrect preconditions. - */ - public function testDeletePreconditionsFailed() - { - $request = new HTTP\Request('DELETE', '/file1', [ - 'If-Match' => '"'.md5('bar').'"', - ]); - - $response = $this->request($request); - - $this->assertEquals( - 412, - $response->getStatus(), - 'Incorrect status code. Response body: '.$response->getBodyAsString() - ); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/HttpPutTest.php b/vendor/sabre/dav/tests/Sabre/DAV/HttpPutTest.php deleted file mode 100644 index 543ec652a..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/HttpPutTest.php +++ /dev/null @@ -1,354 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -use Sabre\DAVServerTest; -use Sabre\HTTP; - -/** - * Tests related to the PUT request. - * - * @copyright Copyright (C) fruux GmbH (https://fruux.com/) - * @author Evert Pot (http://evertpot.com/) - * @license http://sabre.io/license/ Modified BSD License - */ -class HttpPutTest extends DAVServerTest -{ - /** - * Sets up the DAV tree. - */ - public function setUpTree() - { - $this->tree = new Mock\Collection('root', [ - 'file1' => 'foo', - ]); - } - - /** - * A successful PUT of a new file. - */ - public function testPut() - { - $request = new HTTP\Request('PUT', '/file2', [], 'hello'); - - $response = $this->request($request); - - $this->assertEquals(201, $response->getStatus(), 'Incorrect status code received. Full response body:'.$response->getBodyAsString()); - - $this->assertEquals( - 'hello', - $this->server->tree->getNodeForPath('file2')->get() - ); - - $this->assertEquals( - [ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Length' => ['0'], - 'ETag' => ['"'.md5('hello').'"'], - ], - $response->getHeaders() - ); - } - - /** - * A successful PUT on an existing file. - * - * @depends testPut - */ - public function testPutExisting() - { - $request = new HTTP\Request('PUT', '/file1', [], 'bar'); - - $response = $this->request($request); - - $this->assertEquals(204, $response->getStatus()); - - $this->assertEquals( - 'bar', - $this->server->tree->getNodeForPath('file1')->get() - ); - - $this->assertEquals( - [ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Length' => ['0'], - 'ETag' => ['"'.md5('bar').'"'], - ], - $response->getHeaders() - ); - } - - /** - * PUT on existing file with If-Match: *. - * - * @depends testPutExisting - */ - public function testPutExistingIfMatchStar() - { - $request = new HTTP\Request( - 'PUT', - '/file1', - ['If-Match' => '*'], - 'hello' - ); - - $response = $this->request($request); - - $this->assertEquals(204, $response->getStatus()); - - $this->assertEquals( - 'hello', - $this->server->tree->getNodeForPath('file1')->get() - ); - - $this->assertEquals( - [ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Length' => ['0'], - 'ETag' => ['"'.md5('hello').'"'], - ], - $response->getHeaders() - ); - } - - /** - * PUT on existing file with If-Match: with a correct etag. - * - * @depends testPutExisting - */ - public function testPutExistingIfMatchCorrect() - { - $request = new HTTP\Request( - 'PUT', - '/file1', - ['If-Match' => '"'.md5('foo').'"'], - 'hello' - ); - - $response = $this->request($request); - - $this->assertEquals(204, $response->status); - - $this->assertEquals( - 'hello', - $this->server->tree->getNodeForPath('file1')->get() - ); - - $this->assertEquals( - [ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Length' => ['0'], - 'ETag' => ['"'.md5('hello').'"'], - ], - $response->getHeaders() - ); - } - - /** - * PUT with Content-Range should be rejected. - * - * @depends testPut - */ - public function testPutContentRange() - { - $request = new HTTP\Request( - 'PUT', - '/file2', - ['Content-Range' => 'bytes/100-200'], - 'hello' - ); - - $response = $this->request($request); - $this->assertEquals(400, $response->getStatus()); - } - - /** - * PUT on non-existing file with If-None-Match: * should work. - * - * @depends testPut - */ - public function testPutIfNoneMatchStar() - { - $request = new HTTP\Request( - 'PUT', - '/file2', - ['If-None-Match' => '*'], - 'hello' - ); - - $response = $this->request($request); - - $this->assertEquals(201, $response->getStatus()); - - $this->assertEquals( - 'hello', - $this->server->tree->getNodeForPath('file2')->get() - ); - - $this->assertEquals( - [ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Length' => ['0'], - 'ETag' => ['"'.md5('hello').'"'], - ], - $response->getHeaders() - ); - } - - /** - * PUT on non-existing file with If-Match: * should fail. - * - * @depends testPut - */ - public function testPutIfMatchStar() - { - $request = new HTTP\Request( - 'PUT', - '/file2', - ['If-Match' => '*'], - 'hello' - ); - - $response = $this->request($request); - - $this->assertEquals(412, $response->getStatus()); - } - - /** - * PUT on existing file with If-None-Match: * should fail. - * - * @depends testPut - */ - public function testPutExistingIfNoneMatchStar() - { - $request = new HTTP\Request( - 'PUT', - '/file1', - ['If-None-Match' => '*'], - 'hello' - ); - $request->setBody('hello'); - - $response = $this->request($request); - - $this->assertEquals(412, $response->getStatus()); - } - - /** - * PUT thats created in a non-collection should be rejected. - * - * @depends testPut - */ - public function testPutParentIsNotCollection() - { - $request = new HTTP\Request( - 'PUT', - '/file1/file2', - [], - 'hello' - ); - - $response = $this->request($request); - $this->assertEquals(409, $response->getStatus()); - } - - /** - * PUT thats created in a non-existent collection should be rejected. - * - * @depends testPut - */ - public function testPutParentCollectionDoesNotExist() - { - $request = new HTTP\Request( - 'PUT', - '/non-existent-collection/file2', - [], - 'hello' - ); - - $response = $this->request($request); - $this->assertEquals(409, $response->getStatus()); - } - - /** - * Finder may sometimes make a request, which gets its content-body - * stripped. We can't always prevent this from happening, but in some cases - * we can detected this and return an error instead. - * - * @depends testPut - */ - public function testFinderPutSuccess() - { - $request = new HTTP\Request( - 'PUT', - '/file2', - ['X-Expected-Entity-Length' => '5'], - 'hello' - ); - $response = $this->request($request); - - $this->assertEquals(201, $response->getStatus()); - - $this->assertEquals( - 'hello', - $this->server->tree->getNodeForPath('file2')->get() - ); - - $this->assertEquals( - [ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Length' => ['0'], - 'ETag' => ['"'.md5('hello').'"'], - ], - $response->getHeaders() - ); - } - - /** - * Same as the last one, but in this case we're mimicing a failed request. - * - * @depends testFinderPutSuccess - */ - public function testFinderPutFail() - { - $request = new HTTP\Request( - 'PUT', - '/file2', - ['X-Expected-Entity-Length' => '5'], - '' - ); - - $response = $this->request($request); - - $this->assertEquals(403, $response->getStatus()); - } - - /** - * Plugins can intercept PUT. We need to make sure that works. - * - * @depends testPut - */ - public function testPutIntercept() - { - $this->server->on('beforeBind', function ($uri) { - $this->server->httpResponse->setStatus(418); - - return false; - }); - - $request = new HTTP\Request('PUT', '/file2', [], 'hello'); - $response = $this->request($request); - - $this->assertEquals(418, $response->getStatus(), 'Incorrect status code received. Full response body: '.$response->getBodyAsString()); - - $this->assertFalse( - $this->server->tree->nodeExists('file2') - ); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - ], $response->getHeaders()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Issue33Test.php b/vendor/sabre/dav/tests/Sabre/DAV/Issue33Test.php deleted file mode 100644 index 36b182c44..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Issue33Test.php +++ /dev/null @@ -1,93 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -use Sabre\HTTP; - -class Issue33Test extends \PHPUnit\Framework\TestCase -{ - public function setup(): void - { - \Sabre\TestUtil::clearTempDir(); - } - - public function testCopyMoveInfo() - { - $bar = new SimpleCollection('bar'); - $root = new SimpleCollection('webdav', [$bar]); - - $server = new Server($root); - $server->setBaseUri('/webdav/'); - - $request = new HTTP\Request('GET', '/webdav/bar', [ - 'Destination' => 'http://dev2.tribalos.com/webdav/%C3%A0fo%C3%B3', - 'Overwrite' => 'F', - ]); - - $server->httpRequest = $request; - - $info = $server->getCopyAndMoveInfo($request); - - $this->assertEquals('%C3%A0fo%C3%B3', urlencode($info['destination'])); - $this->assertFalse($info['destinationExists']); - $this->assertFalse($info['destinationNode']); - } - - public function testTreeMove() - { - mkdir(SABRE_TEMPDIR.'/issue33'); - $dir = new FS\Directory(SABRE_TEMPDIR.'/issue33'); - - $dir->createDirectory('bar'); - - $tree = new Tree($dir); - $tree->move('bar', urldecode('%C3%A0fo%C3%B3')); - - $node = $tree->getNodeForPath(urldecode('%C3%A0fo%C3%B3')); - $this->assertEquals(urldecode('%C3%A0fo%C3%B3'), $node->getName()); - } - - public function testDirName() - { - $dirname1 = 'bar'; - $dirname2 = urlencode('%C3%A0fo%C3%B3'); - - $this->assertTrue(dirname($dirname1) == dirname($dirname2)); - } - - /** - * @depends testTreeMove - * @depends testCopyMoveInfo - */ - public function testEverything() - { - $request = new HTTP\Request('MOVE', '/webdav/bar', [ - 'Destination' => 'http://dev2.tribalos.com/webdav/%C3%A0fo%C3%B3', - 'Overwrite' => 'F', - ]); - - $request->setBody(''); - - $response = new HTTP\ResponseMock(); - - // Server setup - mkdir(SABRE_TEMPDIR.'/issue33'); - $dir = new FS\Directory(SABRE_TEMPDIR.'/issue33'); - - $dir->createDirectory('bar'); - - $tree = new Tree($dir); - - $server = new Server($tree); - $server->setBaseUri('/webdav/'); - - $server->httpRequest = $request; - $server->httpResponse = $response; - $server->sapi = new HTTP\SapiMock(); - $server->exec(); - - $this->assertTrue(file_exists(SABRE_TEMPDIR.'/issue33/'.urldecode('%C3%A0fo%C3%B3'))); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/AbstractTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/AbstractTest.php deleted file mode 100644 index d1cd1799c..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/AbstractTest.php +++ /dev/null @@ -1,189 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\Locks\Backend; - -use Sabre\DAV; - -abstract class AbstractTest extends \PHPUnit\Framework\TestCase -{ - /** - * @abstract - * - * @return AbstractBackend - */ - abstract public function getBackend(); - - public function testSetup() - { - $backend = $this->getBackend(); - $this->assertInstanceOf('Sabre\\DAV\\Locks\\Backend\\AbstractBackend', $backend); - } - - /** - * @depends testSetup - */ - public function testGetLocks() - { - $backend = $this->getBackend(); - - $lock = new DAV\Locks\LockInfo(); - $lock->owner = 'Sinterklaas'; - $lock->timeout = 60; - $lock->created = time(); - $lock->token = 'MY-UNIQUE-TOKEN'; - $lock->uri = 'someuri'; - - $this->assertTrue($backend->lock('someuri', $lock)); - - $locks = $backend->getLocks('someuri', false); - - $this->assertEquals(1, count($locks)); - $this->assertEquals('Sinterklaas', $locks[0]->owner); - $this->assertEquals('someuri', $locks[0]->uri); - } - - /** - * @depends testGetLocks - */ - public function testGetLocksParent() - { - $backend = $this->getBackend(); - - $lock = new DAV\Locks\LockInfo(); - $lock->owner = 'Sinterklaas'; - $lock->timeout = 60; - $lock->created = time(); - $lock->depth = DAV\Server::DEPTH_INFINITY; - $lock->token = 'MY-UNIQUE-TOKEN'; - - $this->assertTrue($backend->lock('someuri', $lock)); - - $locks = $backend->getLocks('someuri/child', false); - - $this->assertEquals(1, count($locks)); - $this->assertEquals('Sinterklaas', $locks[0]->owner); - $this->assertEquals('someuri', $locks[0]->uri); - } - - /** - * @depends testGetLocks - */ - public function testGetLocksParentDepth0() - { - $backend = $this->getBackend(); - - $lock = new DAV\Locks\LockInfo(); - $lock->owner = 'Sinterklaas'; - $lock->timeout = 60; - $lock->created = time(); - $lock->depth = 0; - $lock->token = 'MY-UNIQUE-TOKEN'; - - $this->assertTrue($backend->lock('someuri', $lock)); - - $locks = $backend->getLocks('someuri/child', false); - - $this->assertEquals(0, count($locks)); - } - - public function testGetLocksChildren() - { - $backend = $this->getBackend(); - - $lock = new DAV\Locks\LockInfo(); - $lock->owner = 'Sinterklaas'; - $lock->timeout = 60; - $lock->created = time(); - $lock->depth = 0; - $lock->token = 'MY-UNIQUE-TOKEN'; - - $this->assertTrue($backend->lock('someuri/child', $lock)); - - $locks = $backend->getLocks('someuri/child', false); - $this->assertEquals(1, count($locks)); - - $locks = $backend->getLocks('someuri', false); - $this->assertEquals(0, count($locks)); - - $locks = $backend->getLocks('someuri', true); - $this->assertEquals(1, count($locks)); - } - - /** - * @depends testGetLocks - */ - public function testLockRefresh() - { - $backend = $this->getBackend(); - - $lock = new DAV\Locks\LockInfo(); - $lock->owner = 'Sinterklaas'; - $lock->timeout = 60; - $lock->created = time(); - $lock->token = 'MY-UNIQUE-TOKEN'; - - $this->assertTrue($backend->lock('someuri', $lock)); - /* Second time */ - - $lock->owner = 'Santa Clause'; - $this->assertTrue($backend->lock('someuri', $lock)); - - $locks = $backend->getLocks('someuri', false); - - $this->assertEquals(1, count($locks)); - - $this->assertEquals('Santa Clause', $locks[0]->owner); - $this->assertEquals('someuri', $locks[0]->uri); - } - - /** - * @depends testGetLocks - */ - public function testUnlock() - { - $backend = $this->getBackend(); - - $lock = new DAV\Locks\LockInfo(); - $lock->owner = 'Sinterklaas'; - $lock->timeout = 60; - $lock->created = time(); - $lock->token = 'MY-UNIQUE-TOKEN'; - - $this->assertTrue($backend->lock('someuri', $lock)); - - $locks = $backend->getLocks('someuri', false); - $this->assertEquals(1, count($locks)); - - $this->assertTrue($backend->unlock('someuri', $lock)); - - $locks = $backend->getLocks('someuri', false); - $this->assertEquals(0, count($locks)); - } - - /** - * @depends testUnlock - */ - public function testUnlockUnknownToken() - { - $backend = $this->getBackend(); - - $lock = new DAV\Locks\LockInfo(); - $lock->owner = 'Sinterklaas'; - $lock->timeout = 60; - $lock->created = time(); - $lock->token = 'MY-UNIQUE-TOKEN'; - - $this->assertTrue($backend->lock('someuri', $lock)); - - $locks = $backend->getLocks('someuri', false); - $this->assertEquals(1, count($locks)); - - $lock->token = 'SOME-OTHER-TOKEN'; - $this->assertFalse($backend->unlock('someuri', $lock)); - - $locks = $backend->getLocks('someuri', false); - $this->assertEquals(1, count($locks)); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/FileTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/FileTest.php deleted file mode 100644 index 57a3255c7..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/FileTest.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\Locks\Backend; - -class FileTest extends AbstractTest -{ - public function getBackend() - { - \Sabre\TestUtil::clearTempDir(); - $backend = new File(SABRE_TEMPDIR.'/lockdb'); - - return $backend; - } - - public function teardown(): void - { - \Sabre\TestUtil::clearTempDir(); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/PDOMySQLTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/PDOMySQLTest.php deleted file mode 100644 index 86ffc0bb3..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/PDOMySQLTest.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\Locks\Backend; - -class PDOMySQLTest extends PDOTest -{ - public $driver = 'mysql'; -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/PDOTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/PDOTest.php deleted file mode 100644 index f5ed98f50..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Locks/Backend/PDOTest.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\Locks\Backend; - -abstract class PDOTest extends AbstractTest -{ - use \Sabre\DAV\DbTestHelperTrait; - - public function getBackend() - { - $this->dropTables('locks'); - $this->createSchema('locks'); - - $pdo = $this->getPDO(); - - return new PDO($pdo); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Locks/MSWordTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Locks/MSWordTest.php deleted file mode 100644 index 02c3d39ba..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Locks/MSWordTest.php +++ /dev/null @@ -1,119 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\Locks; - -use Sabre\DAV; -use Sabre\HTTP; - -class MSWordTest extends \PHPUnit\Framework\TestCase -{ - public function teardown(): void - { - \Sabre\TestUtil::clearTempDir(); - } - - public function testLockEtc() - { - mkdir(SABRE_TEMPDIR.'/mstest'); - $tree = new DAV\FS\Directory(SABRE_TEMPDIR.'/mstest'); - - $server = new DAV\Server($tree); - $server->debugExceptions = true; - $locksBackend = new Backend\File(SABRE_TEMPDIR.'/locksdb'); - $locksPlugin = new Plugin($locksBackend); - $server->addPlugin($locksPlugin); - - $response1 = new HTTP\ResponseMock(); - - $server->httpRequest = $this->getLockRequest(); - $server->httpResponse = $response1; - $server->sapi = new HTTP\SapiMock(); - $server->exec(); - - $this->assertEquals(201, $server->httpResponse->getStatus(), 'Full response body:'.$response1->getBodyAsString()); - $this->assertTrue((bool) $server->httpResponse->getHeaders('Lock-Token')); - $lockToken = $server->httpResponse->getHeader('Lock-Token'); - - //sleep(10); - - $response2 = new HTTP\ResponseMock(); - - $server->httpRequest = $this->getLockRequest2(); - $server->httpResponse = $response2; - $server->exec(); - - $this->assertEquals(201, $server->httpResponse->status); - $this->assertTrue((bool) $server->httpResponse->getHeaders('Lock-Token')); - - //sleep(10); - - $response3 = new HTTP\ResponseMock(); - $server->httpRequest = $this->getPutRequest($lockToken); - $server->httpResponse = $response3; - $server->exec(); - - $this->assertEquals(204, $server->httpResponse->status); - } - - public function getLockRequest() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'LOCK', - 'HTTP_CONTENT_TYPE' => 'application/xml', - 'HTTP_TIMEOUT' => 'Second-3600', - 'REQUEST_URI' => '/Nouveau%20Microsoft%20Office%20Excel%20Worksheet.xlsx', - ]); - - $request->setBody('<D:lockinfo xmlns:D="DAV:"> - <D:lockscope> - <D:exclusive /> - </D:lockscope> - <D:locktype> - <D:write /> - </D:locktype> - <D:owner> - <D:href>PC-Vista\User</D:href> - </D:owner> -</D:lockinfo>'); - - return $request; - } - - public function getLockRequest2() - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'LOCK', - 'HTTP_CONTENT_TYPE' => 'application/xml', - 'HTTP_TIMEOUT' => 'Second-3600', - 'REQUEST_URI' => '/~$Nouveau%20Microsoft%20Office%20Excel%20Worksheet.xlsx', - ]); - - $request->setBody('<D:lockinfo xmlns:D="DAV:"> - <D:lockscope> - <D:exclusive /> - </D:lockscope> - <D:locktype> - <D:write /> - </D:locktype> - <D:owner> - <D:href>PC-Vista\User</D:href> - </D:owner> -</D:lockinfo>'); - - return $request; - } - - public function getPutRequest($lockToken) - { - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PUT', - 'REQUEST_URI' => '/Nouveau%20Microsoft%20Office%20Excel%20Worksheet.xlsx', - 'HTTP_IF' => 'If: ('.$lockToken.')', - ]); - $request->setBody('FAKE BODY'); - - return $request; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Locks/PluginTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Locks/PluginTest.php deleted file mode 100644 index 9279afb5a..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Locks/PluginTest.php +++ /dev/null @@ -1,886 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\Locks; - -use Sabre\DAV; -use Sabre\HTTP; - -class PluginTest extends DAV\AbstractServer -{ - /** - * @var Plugin - */ - protected $locksPlugin; - - public function setup(): void - { - parent::setUp(); - $locksBackend = new Backend\File(SABRE_TEMPDIR.'/locksdb'); - $locksPlugin = new Plugin($locksBackend); - $this->server->addPlugin($locksPlugin); - $this->locksPlugin = $locksPlugin; - } - - public function testGetInfo() - { - $this->assertArrayHasKey( - 'name', - $this->locksPlugin->getPluginInfo() - ); - } - - public function testGetFeatures() - { - $this->assertEquals([2], $this->locksPlugin->getFeatures()); - } - - public function testGetHTTPMethods() - { - $this->assertEquals(['LOCK', 'UNLOCK'], $this->locksPlugin->getHTTPMethods('')); - } - - public function testLockNoBody() - { - $request = new HTTP\Request('LOCK', '/test.txt'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], - $this->response->getHeaders() - ); - - $this->assertEquals(400, $this->response->status); - } - - public function testLock() - { - $request = new HTTP\Request('LOCK', '/test.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(200, $this->response->status, 'Got an incorrect status back. Response body: '.$this->response->getBodyAsString()); - - $body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/", 'xmlns\\1="urn:DAV"', $this->response->getBodyAsString()); - $xml = simplexml_load_string($body); - $xml->registerXPathNamespace('d', 'urn:DAV'); - - $elements = [ - '/d:prop', - '/d:prop/d:lockdiscovery', - '/d:prop/d:lockdiscovery/d:activelock', - '/d:prop/d:lockdiscovery/d:activelock/d:locktype', - '/d:prop/d:lockdiscovery/d:activelock/d:lockroot', - '/d:prop/d:lockdiscovery/d:activelock/d:lockroot/d:href', - '/d:prop/d:lockdiscovery/d:activelock/d:locktype/d:write', - '/d:prop/d:lockdiscovery/d:activelock/d:lockscope', - '/d:prop/d:lockdiscovery/d:activelock/d:lockscope/d:exclusive', - '/d:prop/d:lockdiscovery/d:activelock/d:depth', - '/d:prop/d:lockdiscovery/d:activelock/d:owner', - '/d:prop/d:lockdiscovery/d:activelock/d:timeout', - '/d:prop/d:lockdiscovery/d:activelock/d:locktoken', - '/d:prop/d:lockdiscovery/d:activelock/d:locktoken/d:href', - ]; - - foreach ($elements as $elem) { - $data = $xml->xpath($elem); - $this->assertEquals(1, count($data), 'We expected 1 match for the xpath expression "'.$elem.'". '.count($data).' were found. Full response body: '.$this->response->getBodyAsString()); - } - - $depth = $xml->xpath('/d:prop/d:lockdiscovery/d:activelock/d:depth'); - $this->assertEquals('infinity', (string) $depth[0]); - - $token = $xml->xpath('/d:prop/d:lockdiscovery/d:activelock/d:locktoken/d:href'); - $this->assertEquals($this->response->getHeader('Lock-Token'), '<'.(string) $token[0].'>', 'Token in response body didn\'t match token in response header.'); - } - - public function testLockWithContext() - { - $request = new HTTP\Request('LOCK', '/baseuri/test.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->setBaseUri('baseuri'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(200, $this->response->status, 'Got an incorrect status back. Response body: '.$this->response->getBodyAsString()); - - $body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/", 'xmlns\\1="urn:DAV"', $this->response->getBodyAsString()); - $xml = simplexml_load_string($body); - $xml->registerXPathNamespace('d', 'urn:DAV'); - - $lockRoot = $xml->xpath('/d:prop/d:lockdiscovery/d:activelock/d:lockroot/d:href'); - $this->assertEquals('baseuri/test.txt', (string) $lockRoot[0]); - } - - /** - * @depends testLock - */ - public function testDoubleLock() - { - $request = new HTTP\Request('LOCK', '/test.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->response = new HTTP\ResponseMock(); - $this->server->httpResponse = $this->response; - - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - - $this->assertEquals(423, $this->response->status, 'Full response: '.$this->response->getBodyAsString()); - } - - /** - * @depends testLock - */ - public function testLockRefresh() - { - $request = new HTTP\Request('LOCK', '/test.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $lockToken = $this->response->getHeader('Lock-Token'); - - $this->response = new HTTP\ResponseMock(); - $this->server->httpResponse = $this->response; - - $request = new HTTP\Request('LOCK', '/test.txt', ['If' => '('.$lockToken.')']); - $request->setBody(''); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - - $this->assertEquals(200, $this->response->status, 'We received an incorrect status code. Full response body: '.$this->response->getBody()); - } - - /** - * @depends testLock - */ - public function testLockRefreshBadToken() - { - $request = new HTTP\Request('LOCK', '/test.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $lockToken = $this->response->getHeader('Lock-Token'); - - $this->response = new HTTP\ResponseMock(); - $this->server->httpResponse = $this->response; - - $request = new HTTP\Request('LOCK', '/test.txt', ['If' => '('.$lockToken.'foobar) (<opaquelocktoken:anotherbadtoken>)']); - $request->setBody(''); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - - $this->assertEquals(423, $this->response->getStatus(), 'We received an incorrect status code. Full response body: '.$this->response->getBody()); - } - - /** - * @depends testLock - */ - public function testLockNoFile() - { - $request = new HTTP\Request('LOCK', '/notfound.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(201, $this->response->status); - } - - /** - * @depends testLock - */ - public function testUnlockNoToken() - { - $request = new HTTP\Request('UNLOCK', '/test.txt'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], - $this->response->getHeaders() - ); - - $this->assertEquals(400, $this->response->status); - } - - /** - * @depends testLock - */ - public function testUnlockBadToken() - { - $request = new HTTP\Request('UNLOCK', '/test.txt', ['Lock-Token' => '<opaquelocktoken:blablabla>']); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], - $this->response->getHeaders() - ); - - $this->assertEquals(409, $this->response->status, 'Got an incorrect status code. Full response body: '.$this->response->getBodyAsString()); - } - - /** - * @depends testLock - */ - public function testLockPutNoToken() - { - $request = new HTTP\Request('LOCK', '/test.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(200, $this->response->status); - - $request = new HTTP\Request('PUT', '/test.txt'); - $request->setBody('newbody'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(423, $this->response->status); - } - - /** - * @depends testLock - */ - public function testUnlock() - { - $request = new HTTP\Request('LOCK', '/test.txt'); - $this->server->httpRequest = $request; - - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->invokeMethod($request, $this->server->httpResponse); - $lockToken = $this->server->httpResponse->getHeader('Lock-Token'); - - $request = new HTTP\Request('UNLOCK', '/test.txt', ['Lock-Token' => $lockToken]); - $this->server->httpRequest = $request; - $this->server->httpResponse = new HTTP\ResponseMock(); - $this->server->invokeMethod($request, $this->server->httpResponse); - - $this->assertEquals(204, $this->server->httpResponse->status, 'Got an incorrect status code. Full response body: '.$this->response->getBodyAsString()); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Length' => ['0'], - ], - $this->server->httpResponse->getHeaders() - ); - } - - /** - * @depends testLock - */ - public function testUnlockWindowsBug() - { - $request = new HTTP\Request('LOCK', '/test.txt'); - $this->server->httpRequest = $request; - - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->invokeMethod($request, $this->server->httpResponse); - $lockToken = $this->server->httpResponse->getHeader('Lock-Token'); - - // See Issue 123 - $lockToken = trim($lockToken, '<>'); - - $request = new HTTP\Request('UNLOCK', '/test.txt', ['Lock-Token' => $lockToken]); - $this->server->httpRequest = $request; - $this->server->httpResponse = new HTTP\ResponseMock(); - $this->server->invokeMethod($request, $this->server->httpResponse); - - $this->assertEquals(204, $this->server->httpResponse->status, 'Got an incorrect status code. Full response body: '.$this->response->getBodyAsString()); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Length' => ['0'], - ], - $this->server->httpResponse->getHeaders() - ); - } - - /** - * @depends testLock - */ - public function testLockRetainOwner() - { - $request = new HTTP\Request('LOCK', '/test.txt'); - $this->server->httpRequest = $request; - - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner>Evert</D:owner> -</D:lockinfo>'); - - $this->server->invokeMethod($request, $this->server->httpResponse); - $lockToken = $this->server->httpResponse->getHeader('Lock-Token'); - - $locks = $this->locksPlugin->getLocks('test.txt'); - $this->assertEquals(1, count($locks)); - $this->assertEquals('Evert', $locks[0]->owner); - } - - /** - * @depends testLock - */ - public function testLockPutBadToken() - { - $request = new HTTP\Request('LOCK', '/test.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(200, $this->response->status); - - $request = new HTTP\Request('PUT', '/test.txt', [ - 'If' => '(<opaquelocktoken:token1>)', - ]); - $request->setBody('newbody'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - // $this->assertEquals('412 Precondition failed',$this->response->status); - $this->assertEquals(423, $this->response->status); - } - - /** - * @depends testLock - */ - public function testLockDeleteParent() - { - $request = new HTTP\Request('LOCK', '/dir/child.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(200, $this->response->status); - - $request = new HTTP\Request('DELETE', '/dir'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(423, $this->response->status); - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - } - - /** - * @depends testLock - */ - public function testLockDeleteSucceed() - { - $request = new HTTP\Request('LOCK', '/dir/child.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(200, $this->response->status); - - $request = new HTTP\Request('DELETE', '/dir/child.txt', [ - 'If' => '('.$this->response->getHeader('Lock-Token').')', - ]); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(204, $this->response->status); - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - } - - /** - * @depends testLock - */ - public function testLockCopyLockSource() - { - $request = new HTTP\Request('LOCK', '/dir/child.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(200, $this->response->status); - - $request = new HTTP\Request('COPY', '/dir/child.txt', [ - 'Destination' => '/dir/child2.txt', - ]); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(201, $this->response->status, 'Copy must succeed if only the source is locked, but not the destination'); - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - } - - /** - * @depends testLock - */ - public function testLockCopyLockDestination() - { - $request = new HTTP\Request('LOCK', '/dir/child2.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(201, $this->response->status); - - $request = new HTTP\Request('COPY', '/dir/child.txt', [ - 'Destination' => '/dir/child2.txt', - ]); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(423, $this->response->status, 'Copy must succeed if only the source is locked, but not the destination'); - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - } - - /** - * @depends testLock - */ - public function testLockMoveLockSourceLocked() - { - $request = new HTTP\Request('LOCK', '/dir/child.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(200, $this->response->status); - - $request = new HTTP\Request('MOVE', '/dir/child.txt', [ - 'Destination' => '/dir/child2.txt', - ]); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(423, $this->response->status, 'Copy must succeed if only the source is locked, but not the destination'); - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - } - - /** - * @depends testLock - */ - public function testLockMoveLockSourceSucceed() - { - $request = new HTTP\Request('LOCK', '/dir/child.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(200, $this->response->status); - - $request = new HTTP\Request('MOVE', '/dir/child.txt', [ - 'Destination' => '/dir/child2.txt', - 'If' => '('.$this->response->getHeader('Lock-Token').')', - ]); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(201, $this->response->status, 'A valid lock-token was provided for the source, so this MOVE operation must succeed. Full response body: '.$this->response->getBodyAsString()); - } - - /** - * @depends testLock - */ - public function testLockMoveLockDestination() - { - $request = new HTTP\Request('LOCK', '/dir/child2.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(201, $this->response->status); - - $request = new HTTP\Request('MOVE', '/dir/child.txt', [ - 'Destination' => '/dir/child2.txt', - ]); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(423, $this->response->status, 'Copy must succeed if only the source is locked, but not the destination'); - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - } - - /** - * @depends testLock - */ - public function testLockMoveLockParent() - { - $request = new HTTP\Request('LOCK', '/dir', [ - 'Depth' => 'infinite', - ]); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(200, $this->response->status); - - $request = new HTTP\Request('MOVE', '/dir/child.txt', [ - 'Destination' => '/dir/child2.txt', - 'If' => '</dir> ('.$this->response->getHeader('Lock-Token').')', - ]); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(201, $this->response->status, 'We locked the parent of both the source and destination, but the move didn\'t succeed.'); - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - } - - /** - * @depends testLock - */ - public function testLockPutGoodToken() - { - $request = new HTTP\Request('LOCK', '/test.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(200, $this->response->status); - - $request = new HTTP\Request('PUT', '/test.txt', [ - 'If' => '('.$this->response->getHeader('Lock-Token').')', - ]); - $request->setBody('newbody'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(204, $this->response->status); - } - - /** - * @depends testLock - */ - public function testLockPutUnrelatedToken() - { - $request = new HTTP\Request('LOCK', '/unrelated.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(201, $this->response->getStatus()); - - $request = new HTTP\Request( - 'PUT', - '/test.txt', - ['If' => '</unrelated.txt> ('.$this->response->getHeader('Lock-Token').')'] - ); - $request->setBody('newbody'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - - $this->assertEquals(204, $this->response->status); - } - - public function testPutWithIncorrectETag() - { - $request = new HTTP\Request('PUT', '/test.txt', [ - 'If' => '(["etag1"])', - ]); - $request->setBody('newbody'); - $this->server->httpRequest = $request; - $this->server->exec(); - $this->assertEquals(412, $this->response->status); - } - - /** - * @depends testPutWithIncorrectETag - */ - public function testPutWithCorrectETag() - { - // We need an ETag-enabled file node. - $tree = new DAV\Tree(new DAV\FSExt\Directory(SABRE_TEMPDIR)); - $this->server->tree = $tree; - - $filename = SABRE_TEMPDIR.'/test.txt'; - $etag = sha1( - fileinode($filename). - filesize($filename). - filemtime($filename) - ); - - $request = new HTTP\Request('PUT', '/test.txt', [ - 'If' => '(["'.$etag.'"])', - ]); - $request->setBody('newbody'); - - $this->server->httpRequest = $request; - $this->server->exec(); - $this->assertEquals(204, $this->response->status, 'Incorrect status received. Full response body:'.$this->response->getBodyAsString()); - } - - public function testDeleteWithETagOnCollection() - { - $request = new HTTP\Request('DELETE', '/dir', [ - 'If' => '(["etag1"])', - ]); - - $this->server->httpRequest = $request; - $this->server->exec(); - $this->assertEquals(412, $this->response->status); - } - - public function testGetTimeoutHeader() - { - $request = new HTTP\Request('LOCK', '/foo/bar', [ - 'Timeout' => 'second-100', - ]); - - $this->server->httpRequest = $request; - $this->assertEquals(100, $this->locksPlugin->getTimeoutHeader()); - } - - public function testGetTimeoutHeaderTwoItems() - { - $request = new HTTP\Request('LOCK', '/foo/bar', [ - 'Timeout' => 'second-5, infinite', - ]); - $this->server->httpRequest = $request; - $this->assertEquals(5, $this->locksPlugin->getTimeoutHeader()); - } - - public function testGetTimeoutHeaderInfinite() - { - $request = new HTTP\Request('LOCK', '/foo/bar', [ - 'Timeout' => 'infinite, second-5', - ]); - $this->server->httpRequest = $request; - $this->assertEquals(LockInfo::TIMEOUT_INFINITE, $this->locksPlugin->getTimeoutHeader()); - } - - public function testGetTimeoutHeaderInvalid() - { - $this->expectException('Sabre\DAV\Exception\BadRequest'); - $request = new HTTP\Request('GET', '/', ['Timeout' => 'yourmom']); - - $this->server->httpRequest = $request; - $this->locksPlugin->getTimeoutHeader(); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Mock/Collection.php b/vendor/sabre/dav/tests/Sabre/DAV/Mock/Collection.php deleted file mode 100644 index 041274706..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Mock/Collection.php +++ /dev/null @@ -1,157 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\Mock; - -use Sabre\DAV; - -/** - * Mock Collection. - * - * This collection quickly allows you to create trees of nodes. - * Children are specified as an array. - * - * Every key a filename, every array value is either: - * * an array, for a sub-collection - * * a string, for a file - * * An instance of \Sabre\DAV\INode. - * - * @copyright Copyright (C) fruux GmbH (https://fruux.com/) - * @author Evert Pot (http://evertpot.com/) - * @license http://sabre.io/license/ Modified BSD License - */ -class Collection extends DAV\Collection -{ - protected $name; - protected $children; - protected $parent; - - /** - * Creates the object. - * - * @param string $name - * @param Collection $parent - */ - public function __construct($name, array $children = [], Collection $parent = null) - { - $this->name = $name; - foreach ($children as $key => $value) { - if (is_string($value)) { - $this->children[] = new File($key, $value, $this); - } elseif (is_array($value)) { - $this->children[] = new self($key, $value, $this); - } elseif ($value instanceof \Sabre\DAV\INode) { - $this->children[] = $value; - } else { - throw new \InvalidArgumentException('Unknown value passed in $children'); - } - } - $this->parent = $parent; - } - - /** - * Returns the name of the node. - * - * This is used to generate the url. - * - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Creates a new file in the directory. - * - * Data will either be supplied as a stream resource, or in certain cases - * as a string. Keep in mind that you may have to support either. - * - * After successful creation of the file, you may choose to return the ETag - * of the new file here. - * - * The returned ETag must be surrounded by double-quotes (The quotes should - * be part of the actual string). - * - * If you cannot accurately determine the ETag, you should not return it. - * If you don't store the file exactly as-is (you're transforming it - * somehow) you should also not return an ETag. - * - * This means that if a subsequent GET to this new file does not exactly - * return the same contents of what was submitted here, you are strongly - * recommended to omit the ETag. - * - * @param string $name Name of the file - * @param resource|string $data Initial payload - * - * @return string|null - */ - public function createFile($name, $data = null) - { - if (null === $data) { - $data = ''; - } - if (is_resource($data)) { - $data = stream_get_contents($data); - } - $this->children[] = new File($name, $data, $this); - - return '"'.md5($data).'"'; - } - - /** - * Creates a new subdirectory. - * - * @param string $name - */ - public function createDirectory($name) - { - $this->children[] = new self($name); - } - - /** - * Returns an array with all the child nodes. - * - * @return \Sabre\DAV\INode[] - */ - public function getChildren() - { - return $this->children; - } - - /** - * Adds an already existing node to this collection. - */ - public function addNode(\Sabre\DAV\INode $node) - { - $this->children[] = $node; - } - - /** - * Removes a childnode from this node. - * - * @param string $name - */ - public function deleteChild($name) - { - foreach ($this->children as $key => $value) { - if ($value->getName() == $name) { - unset($this->children[$key]); - - return; - } - } - } - - /** - * Deletes this collection and all its children,. - */ - public function delete() - { - foreach ($this->getChildren() as $child) { - $this->deleteChild($child->getName()); - } - $this->parent->deleteChild($this->getName()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Mock/File.php b/vendor/sabre/dav/tests/Sabre/DAV/Mock/File.php deleted file mode 100644 index d48ddaa92..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Mock/File.php +++ /dev/null @@ -1,151 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\Mock; - -use Sabre\DAV; - -/** - * Mock File. - * - * See the Collection in this directory for more details. - * - * @copyright Copyright (C) fruux GmbH (https://fruux.com/) - * @author Evert Pot (http://evertpot.com/) - * @license http://sabre.io/license/ Modified BSD License - */ -class File extends DAV\File -{ - protected $name; - protected $contents; - protected $parent; - protected $lastModified; - - /** - * Creates the object. - * - * @param string $name - * @param resource $contents - * @param Collection $parent - * @param int $lastModified - */ - public function __construct($name, $contents, Collection $parent = null, $lastModified = -1) - { - $this->name = $name; - $this->put($contents); - $this->parent = $parent; - - if (-1 === $lastModified) { - $lastModified = time(); - } - - $this->lastModified = $lastModified; - } - - /** - * Returns the name of the node. - * - * This is used to generate the url. - * - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Changes the name of the node. - * - * @param string $name - */ - public function setName($name) - { - $this->name = $name; - } - - /** - * Updates the data. - * - * The data argument is a readable stream resource. - * - * After a successful put operation, you may choose to return an ETag. The - * etag must always be surrounded by double-quotes. These quotes must - * appear in the actual string you're returning. - * - * Clients may use the ETag from a PUT request to later on make sure that - * when they update the file, the contents haven't changed in the mean - * time. - * - * If you don't plan to store the file byte-by-byte, and you return a - * different object on a subsequent GET you are strongly recommended to not - * return an ETag, and just return null. - * - * @param resource $data - * - * @return string|null - */ - public function put($data) - { - if (is_resource($data)) { - $data = stream_get_contents($data); - } - $this->contents = $data; - - return '"'.md5($data).'"'; - } - - /** - * Returns the data. - * - * This method may either return a string or a readable stream resource - * - * @return mixed - */ - public function get() - { - return $this->contents; - } - - /** - * Returns the ETag for a file. - * - * An ETag is a unique identifier representing the current version of the file. If the file changes, the ETag MUST change. - * - * Return null if the ETag can not effectively be determined - */ - public function getETag() - { - return '"'.md5($this->contents).'"'; - } - - /** - * Returns the size of the node, in bytes. - * - * @return int - */ - public function getSize() - { - return strlen($this->contents); - } - - /** - * Delete the node. - */ - public function delete() - { - $this->parent->deleteChild($this->name); - } - - /** - * Returns the last modification time as a unix timestamp. - * If the information is not available, return null. - * - * @return int - */ - public function getLastModified() - { - return $this->lastModified; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/Mount/PluginTest.php b/vendor/sabre/dav/tests/Sabre/DAV/Mount/PluginTest.php deleted file mode 100644 index 54f7e4cb4..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/Mount/PluginTest.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\Mount; - -use Sabre\DAV; -use Sabre\HTTP; - -class PluginTest extends DAV\AbstractServer -{ - public function setup(): void - { - parent::setUp(); - $this->server->addPlugin(new Plugin()); - } - - public function testPassThrough() - { - $serverVars = [ - 'REQUEST_URI' => '/', - 'REQUEST_METHOD' => 'GET', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals(501, $this->response->status, 'We expected GET to not be implemented for Directories. Response body: '.$this->response->getBodyAsString()); - } - - public function testMountResponse() - { - $serverVars = [ - 'REQUEST_URI' => '/?mount', - 'REQUEST_METHOD' => 'GET', - 'QUERY_STRING' => 'mount', - 'HTTP_HOST' => 'example.org', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals(200, $this->response->status); - - $xml = simplexml_load_string($this->response->getBodyAsString()); - $this->assertInstanceOf('SimpleXMLElement', $xml, 'Response was not a valid xml document. The list of errors:'.print_r(libxml_get_errors(), true).'. xml body: '.$this->response->getBodyAsString().'. What type we got: '.gettype($xml).' class, if object: '.get_class($xml)); - - $xml->registerXPathNamespace('dm', 'http://purl.org/NET/webdav/mount'); - $url = $xml->xpath('//dm:url'); - $this->assertEquals('http://example.org/', (string) $url[0]); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/ObjectTreeTest.php b/vendor/sabre/dav/tests/Sabre/DAV/ObjectTreeTest.php deleted file mode 100644 index 7066c49fc..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/ObjectTreeTest.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -class ObjectTreeTest extends \PHPUnit\Framework\TestCase -{ - protected $tree; - - public function setup(): void - { - \Sabre\TestUtil::clearTempDir(); - mkdir(SABRE_TEMPDIR.'/root'); - mkdir(SABRE_TEMPDIR.'/root/subdir'); - file_put_contents(SABRE_TEMPDIR.'/root/file.txt', 'contents'); - file_put_contents(SABRE_TEMPDIR.'/root/subdir/subfile.txt', 'subcontents'); - $rootNode = new FSExt\Directory(SABRE_TEMPDIR.'/root'); - $this->tree = new Tree($rootNode); - } - - public function teardown(): void - { - \Sabre\TestUtil::clearTempDir(); - } - - public function testGetRootNode() - { - $root = $this->tree->getNodeForPath(''); - $this->assertInstanceOf('Sabre\\DAV\\FSExt\\Directory', $root); - } - - public function testGetSubDir() - { - $root = $this->tree->getNodeForPath('subdir'); - $this->assertInstanceOf('Sabre\\DAV\\FSExt\\Directory', $root); - } - - public function testCopyFile() - { - $this->tree->copy('file.txt', 'file2.txt'); - $this->assertTrue(file_exists(SABRE_TEMPDIR.'/root/file2.txt')); - $this->assertEquals('contents', file_get_contents(SABRE_TEMPDIR.'/root/file2.txt')); - } - - /** - * @depends testCopyFile - */ - public function testCopyDirectory() - { - $this->tree->copy('subdir', 'subdir2'); - $this->assertTrue(file_exists(SABRE_TEMPDIR.'/root/subdir2')); - $this->assertTrue(file_exists(SABRE_TEMPDIR.'/root/subdir2/subfile.txt')); - $this->assertEquals('subcontents', file_get_contents(SABRE_TEMPDIR.'/root/subdir2/subfile.txt')); - } - - /** - * @depends testCopyFile - */ - public function testMoveFile() - { - $this->tree->move('file.txt', 'file2.txt'); - $this->assertTrue(file_exists(SABRE_TEMPDIR.'/root/file2.txt')); - $this->assertFalse(file_exists(SABRE_TEMPDIR.'/root/file.txt')); - $this->assertEquals('contents', file_get_contents(SABRE_TEMPDIR.'/root/file2.txt')); - } - - /** - * @depends testMoveFile - */ - public function testMoveFileNewParent() - { - $this->tree->move('file.txt', 'subdir/file2.txt'); - $this->assertTrue(file_exists(SABRE_TEMPDIR.'/root/subdir/file2.txt')); - $this->assertFalse(file_exists(SABRE_TEMPDIR.'/root/file.txt')); - $this->assertEquals('contents', file_get_contents(SABRE_TEMPDIR.'/root/subdir/file2.txt')); - } - - /** - * @depends testCopyDirectory - */ - public function testMoveDirectory() - { - $this->tree->move('subdir', 'subdir2'); - $this->assertTrue(file_exists(SABRE_TEMPDIR.'/root/subdir2')); - $this->assertTrue(file_exists(SABRE_TEMPDIR.'/root/subdir2/subfile.txt')); - $this->assertFalse(file_exists(SABRE_TEMPDIR.'/root/subdir')); - $this->assertEquals('subcontents', file_get_contents(SABRE_TEMPDIR.'/root/subdir2/subfile.txt')); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/FileMock.php b/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/FileMock.php deleted file mode 100644 index 72fdb5ec8..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/FileMock.php +++ /dev/null @@ -1,111 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\PartialUpdate; - -use Sabre\DAV; - -class FileMock implements IPatchSupport -{ - protected $data = ''; - - public function put($str) - { - if (is_resource($str)) { - $str = stream_get_contents($str); - } - $this->data = $str; - } - - /** - * Updates the file based on a range specification. - * - * The first argument is the data, which is either a readable stream - * resource or a string. - * - * The second argument is the type of update we're doing. - * This is either: - * * 1. append - * * 2. update based on a start byte - * * 3. update based on an end byte - *; - * The third argument is the start or end byte. - * - * After a successful put operation, you may choose to return an ETag. The - * etag must always be surrounded by double-quotes. These quotes must - * appear in the actual string you're returning. - * - * Clients may use the ETag from a PUT request to later on make sure that - * when they update the file, the contents haven't changed in the mean - * time. - * - * @param resource|string $data - * @param int $rangeType - * @param int $offset - * - * @return string|null - */ - public function patch($data, $rangeType, $offset = null) - { - if (is_resource($data)) { - $data = stream_get_contents($data); - } - - switch ($rangeType) { - case 1: - $this->data .= $data; - break; - case 3: - // Turn the offset into an offset-offset. - $offset = strlen($this->data) - $offset; - // no break is intentional - case 2: - $this->data = - substr($this->data, 0, $offset). - $data. - substr($this->data, $offset + strlen($data)); - break; - } - } - - public function get() - { - return $this->data; - } - - public function getContentType() - { - return 'text/plain'; - } - - public function getSize() - { - return strlen($this->data); - } - - public function getETag() - { - return '"'.$this->data.'"'; - } - - public function delete() - { - throw new DAV\Exception\MethodNotAllowed(); - } - - public function setName($name) - { - throw new DAV\Exception\MethodNotAllowed(); - } - - public function getName() - { - return 'partial'; - } - - public function getLastModified() - { - return null; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/PluginTest.php b/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/PluginTest.php deleted file mode 100644 index 4d99aee7d..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/PluginTest.php +++ /dev/null @@ -1,122 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\PartialUpdate; - -use Sabre\HTTP; - -class PluginTest extends \Sabre\DAVServerTest -{ - protected $node; - protected $plugin; - - public function setup(): void - { - $this->node = new FileMock(); - $this->tree[] = $this->node; - - parent::setUp(); - - $this->plugin = new Plugin(); - $this->server->addPlugin($this->plugin); - } - - public function testInit() - { - $this->assertEquals('partialupdate', $this->plugin->getPluginName()); - $this->assertEquals(['sabredav-partialupdate'], $this->plugin->getFeatures()); - $this->assertEquals([ - 'PATCH', - ], $this->plugin->getHTTPMethods('partial')); - $this->assertEquals([ - ], $this->plugin->getHTTPMethods('')); - } - - public function testPatchNoRange() - { - $this->node->put('aaaaaaaa'); - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PATCH', - 'REQUEST_URI' => '/partial', - ]); - $response = $this->request($request); - - $this->assertEquals(400, $response->status, 'Full response body:'.$response->getBodyAsString()); - } - - public function testPatchNotSupported() - { - $this->node->put('aaaaaaaa'); - $request = new HTTP\Request('PATCH', '/', ['X-Update-Range' => '3-4']); - $request->setBody( - 'bbb' - ); - $response = $this->request($request); - - $this->assertEquals(405, $response->status, 'Full response body:'.$response->getBodyAsString()); - } - - public function testPatchNoContentType() - { - $this->node->put('aaaaaaaa'); - $request = new HTTP\Request('PATCH', '/partial', ['X-Update-Range' => 'bytes=3-4']); - $request->setBody( - 'bbb' - ); - $response = $this->request($request); - - $this->assertEquals(415, $response->status, 'Full response body:'.$response->getBodyAsString()); - } - - public function testPatchBadRange() - { - $this->node->put('aaaaaaaa'); - $request = new HTTP\Request('PATCH', '/partial', ['X-Update-Range' => 'bytes=3-4', 'Content-Type' => 'application/x-sabredav-partialupdate', 'Content-Length' => '3']); - $request->setBody( - 'bbb' - ); - $response = $this->request($request); - - $this->assertEquals(416, $response->status, 'Full response body:'.$response->getBodyAsString()); - } - - public function testPatchNoLength() - { - $this->node->put('aaaaaaaa'); - $request = new HTTP\Request('PATCH', '/partial', ['X-Update-Range' => 'bytes=3-5', 'Content-Type' => 'application/x-sabredav-partialupdate']); - $request->setBody( - 'bbb' - ); - $response = $this->request($request); - - $this->assertEquals(411, $response->status, 'Full response body:'.$response->getBodyAsString()); - } - - public function testPatchSuccess() - { - $this->node->put('aaaaaaaa'); - $request = new HTTP\Request('PATCH', '/partial', ['X-Update-Range' => 'bytes=3-5', 'Content-Type' => 'application/x-sabredav-partialupdate', 'Content-Length' => 3]); - $request->setBody( - 'bbb' - ); - $response = $this->request($request); - - $this->assertEquals(204, $response->status, 'Full response body:'.$response->getBodyAsString()); - $this->assertEquals('aaabbbaa', $this->node->get()); - } - - public function testPatchNoEndRange() - { - $this->node->put('aaaaa'); - $request = new HTTP\Request('PATCH', '/partial', ['X-Update-Range' => 'bytes=3-', 'Content-Type' => 'application/x-sabredav-partialupdate', 'Content-Length' => '3']); - $request->setBody( - 'bbb' - ); - - $response = $this->request($request); - - $this->assertEquals(204, $response->getStatus(), 'Full response body:'.$response->getBodyAsString()); - $this->assertEquals('aaabbb', $this->node->get()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/SpecificationTest.php b/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/SpecificationTest.php deleted file mode 100644 index a727a13e2..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/SpecificationTest.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV\PartialUpdate; - -use Sabre\DAV\FSExt\File; -use Sabre\DAV\Server; -use Sabre\HTTP; - -/** - * This test is an end-to-end sabredav test that goes through all - * the cases in the specification. - * - * See: http://sabre.io/dav/http-patch/ - */ -class SpecificationTest extends \PHPUnit\Framework\TestCase -{ - protected $server; - - public function setup(): void - { - $tree = [ - new File(SABRE_TEMPDIR.'/foobar.txt'), - ]; - $server = new Server($tree); - $server->debugExceptions = true; - $server->addPlugin(new Plugin()); - - $tree[0]->put('1234567890'); - - $this->server = $server; - } - - public function teardown(): void - { - \Sabre\TestUtil::clearTempDir(); - } - - /** - * @param string $headerValue - * @param string $httpStatus - * @param string $endResult - * @param int $contentLength - * - * @dataProvider data - */ - public function testUpdateRange($headerValue, $httpStatus, $endResult, $contentLength = 4) - { - $headers = [ - 'Content-Type' => 'application/x-sabredav-partialupdate', - 'X-Update-Range' => $headerValue, - ]; - - if ($contentLength) { - $headers['Content-Length'] = (string) $contentLength; - } - - $request = new HTTP\Request('PATCH', '/foobar.txt', $headers, '----'); - - $request->setBody('----'); - $this->server->httpRequest = $request; - $this->server->httpResponse = new HTTP\ResponseMock(); - $this->server->sapi = new HTTP\SapiMock(); - $this->server->exec(); - - $this->assertEquals($httpStatus, $this->server->httpResponse->status, 'Incorrect http status received: '.$this->server->httpResponse->body); - if (!is_null($endResult)) { - $this->assertEquals($endResult, file_get_contents(SABRE_TEMPDIR.'/foobar.txt')); - } - } - - public function data() - { - return [ - // Problems - ['foo', 400, null], - ['bytes=0-3', 411, null, 0], - ['bytes=4-1', 416, null], - - ['bytes=0-3', 204, '----567890'], - ['bytes=1-4', 204, '1----67890'], - ['bytes=0-', 204, '----567890'], - ['bytes=-4', 204, '123456----'], - ['bytes=-2', 204, '12345678----'], - ['bytes=2-', 204, '12----7890'], - ['append', 204, '1234567890----'], - ]; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/ServerEventsTest.php b/vendor/sabre/dav/tests/Sabre/DAV/ServerEventsTest.php deleted file mode 100644 index b1f6754ea..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/ServerEventsTest.php +++ /dev/null @@ -1,114 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -use Sabre\HTTP; - -class ServerEventsTest extends AbstractServer -{ - private $tempPath; - - private $exception; - - public function testAfterBind() - { - $this->server->on('afterBind', [$this, 'afterBindHandler']); - $newPath = 'afterBind'; - - $this->tempPath = ''; - $this->server->createFile($newPath, 'body'); - $this->assertEquals($newPath, $this->tempPath); - } - - public function afterBindHandler($path) - { - $this->tempPath = $path; - } - - public function testAfterResponse() - { - $mock = $this->getMockBuilder('stdClass') - ->setMethods(['afterResponseCallback']) - ->getMock(); - $mock->expects($this->once())->method('afterResponseCallback'); - - $this->server->on('afterResponse', [$mock, 'afterResponseCallback']); - - $this->server->httpRequest = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/test.txt', - ]); - - $this->server->exec(); - } - - public function testBeforeBindCancel() - { - $this->server->on('beforeBind', [$this, 'beforeBindCancelHandler']); - $this->assertFalse($this->server->createFile('bla', 'body')); - - // Also testing put() - $req = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'PUT', - 'REQUEST_URI' => '/barbar', - ]); - - $this->server->httpRequest = $req; - $this->server->exec(); - - $this->assertEquals(500, $this->server->httpResponse->getStatus()); - } - - public function beforeBindCancelHandler($path) - { - return false; - } - - public function testException() - { - $this->server->on('exception', [$this, 'exceptionHandler']); - - $req = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/not/exisitng', - ]); - $this->server->httpRequest = $req; - $this->server->exec(); - - $this->assertInstanceOf('Sabre\\DAV\\Exception\\NotFound', $this->exception); - } - - public function exceptionHandler(Exception $exception) - { - $this->exception = $exception; - } - - public function testMethod() - { - $k = 1; - $this->server->on('method:*', function ($request, $response) use (&$k) { - ++$k; - - return false; - }); - $this->server->on('method:*', function ($request, $response) use (&$k) { - $k += 2; - - return false; - }); - - try { - $this->server->invokeMethod( - new HTTP\Request('BLABLA', '/'), - new HTTP\Response(), - false - ); - } catch (Exception $e) { - } - - // Fun fact, PHP 7.1 changes the order when sorting-by-callback. - $this->assertTrue($k >= 2 && $k <= 3); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/ServerMKCOLTest.php b/vendor/sabre/dav/tests/Sabre/DAV/ServerMKCOLTest.php deleted file mode 100644 index 02c6a4633..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/ServerMKCOLTest.php +++ /dev/null @@ -1,354 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -use Sabre\HTTP; - -class ServerMKCOLTest extends AbstractServer -{ - public function testMkcol() - { - $serverVars = [ - 'REQUEST_URI' => '/testcol', - 'REQUEST_METHOD' => 'MKCOL', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody(''); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Length' => ['0'], - ], $this->response->getHeaders()); - - $this->assertEquals(201, $this->response->status); - $this->assertEquals('', $this->response->getBodyAsString()); - $this->assertTrue(is_dir($this->tempDir.'/testcol')); - } - - /** - * @depends testMkcol - */ - public function testMKCOLUnknownBody() - { - $serverVars = [ - 'REQUEST_URI' => '/testcol', - 'REQUEST_METHOD' => 'MKCOL', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody('Hello'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $this->response->getHeaders()); - - $this->assertEquals(415, $this->response->status); - } - - /** - * @depends testMkcol - */ - public function testMKCOLBrokenXML() - { - $serverVars = [ - 'REQUEST_URI' => '/testcol', - 'REQUEST_METHOD' => 'MKCOL', - 'HTTP_CONTENT_TYPE' => 'application/xml', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody('Hello'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $this->response->getHeaders()); - - $this->assertEquals(400, $this->response->getStatus(), $this->response->getBodyAsString()); - } - - /** - * @depends testMkcol - */ - public function testMKCOLUnknownXML() - { - $serverVars = [ - 'REQUEST_URI' => '/testcol', - 'REQUEST_METHOD' => 'MKCOL', - 'HTTP_CONTENT_TYPE' => 'application/xml', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody('<?xml version="1.0"?><html></html>'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $this->response->getHeaders()); - - $this->assertEquals(400, $this->response->getStatus()); - } - - /** - * @depends testMkcol - */ - public function testMKCOLNoResourceType() - { - $serverVars = [ - 'REQUEST_URI' => '/testcol', - 'REQUEST_METHOD' => 'MKCOL', - 'HTTP_CONTENT_TYPE' => 'application/xml', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody('<?xml version="1.0"?> -<mkcol xmlns="DAV:"> - <set> - <prop> - <displayname>Evert</displayname> - </prop> - </set> -</mkcol>'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $this->response->getHeaders()); - - $this->assertEquals(400, $this->response->status, 'Wrong statuscode received. Full response body: '.$this->response->getBodyAsString()); - } - - /** - * @depends testMkcol - */ - public function testMKCOLIncorrectResourceType() - { - $serverVars = [ - 'REQUEST_URI' => '/testcol', - 'REQUEST_METHOD' => 'MKCOL', - 'HTTP_CONTENT_TYPE' => 'application/xml', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody('<?xml version="1.0"?> -<mkcol xmlns="DAV:"> - <set> - <prop> - <resourcetype><collection /><blabla /></resourcetype> - </prop> - </set> -</mkcol>'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $this->response->getHeaders()); - - $this->assertEquals(403, $this->response->status, 'Wrong statuscode received. Full response body: '.$this->response->getBodyAsString()); - } - - /** - * @depends testMKCOLIncorrectResourceType - */ - public function testMKCOLSuccess() - { - $serverVars = [ - 'REQUEST_URI' => '/testcol', - 'REQUEST_METHOD' => 'MKCOL', - 'HTTP_CONTENT_TYPE' => 'application/xml', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody('<?xml version="1.0"?> -<mkcol xmlns="DAV:"> - <set> - <prop> - <resourcetype><collection /></resourcetype> - </prop> - </set> -</mkcol>'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Length' => ['0'], - ], $this->response->getHeaders()); - - $this->assertEquals(201, $this->response->status, 'Wrong statuscode received. Full response body: '.$this->response->getBodyAsString()); - } - - /** - * @depends testMKCOLIncorrectResourceType - */ - public function testMKCOLWhiteSpaceResourceType() - { - $serverVars = [ - 'REQUEST_URI' => '/testcol', - 'REQUEST_METHOD' => 'MKCOL', - 'HTTP_CONTENT_TYPE' => 'application/xml', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody('<?xml version="1.0"?> -<mkcol xmlns="DAV:"> - <set> - <prop> - <resourcetype> - <collection /> - </resourcetype> - </prop> - </set> -</mkcol>'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Length' => ['0'], - ], $this->response->getHeaders()); - - $this->assertEquals(201, $this->response->status, 'Wrong statuscode received. Full response body: '.$this->response->getBodyAsString()); - } - - /** - * @depends testMKCOLIncorrectResourceType - */ - public function testMKCOLNoParent() - { - $serverVars = [ - 'REQUEST_URI' => '/testnoparent/409me', - 'REQUEST_METHOD' => 'MKCOL', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody(''); - - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $this->response->getHeaders()); - - $this->assertEquals(409, $this->response->status, 'Wrong statuscode received. Full response body: '.$this->response->getBodyAsString()); - } - - /** - * @depends testMKCOLIncorrectResourceType - */ - public function testMKCOLParentIsNoCollection() - { - $serverVars = [ - 'REQUEST_URI' => '/test.txt/409me', - 'REQUEST_METHOD' => 'MKCOL', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody(''); - - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $this->response->getHeaders()); - - $this->assertEquals(409, $this->response->status, 'Wrong statuscode received. Full response body: '.$this->response->getBodyAsString()); - } - - /** - * @depends testMKCOLIncorrectResourceType - */ - public function testMKCOLAlreadyExists() - { - $serverVars = [ - 'REQUEST_URI' => '/test.txt', - 'REQUEST_METHOD' => 'MKCOL', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody(''); - - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - 'Allow' => ['OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT'], - ], $this->response->getHeaders()); - - $this->assertEquals(405, $this->response->status, 'Wrong statuscode received. Full response body: '.$this->response->getBodyAsString()); - } - - /** - * @depends testMKCOLSuccess - * @depends testMKCOLAlreadyExists - */ - public function testMKCOLAndProps() - { - $request = new HTTP\Request( - 'MKCOL', - '/testcol', - ['Content-Type' => 'application/xml'] - ); - $request->setBody('<?xml version="1.0"?> -<mkcol xmlns="DAV:"> - <set> - <prop> - <resourcetype><collection /></resourcetype> - <displayname>my new collection</displayname> - </prop> - </set> -</mkcol>'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $bodyAsString = $this->response->getBodyAsString(); - $this->assertEquals(207, $this->response->status, 'Wrong statuscode received. Full response body: '.$bodyAsString); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $this->response->getHeaders()); - - $expected = <<<XML -<?xml version="1.0"?> -<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns"> - <d:response> - <d:href>/testcol</d:href> - <d:propstat> - <d:prop> - <d:displayname /> - </d:prop> - <d:status>HTTP/1.1 403 Forbidden</d:status> - </d:propstat> - </d:response> -</d:multistatus> -XML; - - $this->assertXmlStringEqualsXmlString( - $expected, - $bodyAsString - ); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/ServerPluginTest.php b/vendor/sabre/dav/tests/Sabre/DAV/ServerPluginTest.php deleted file mode 100644 index 47e1e6b4c..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/ServerPluginTest.php +++ /dev/null @@ -1,96 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -use Sabre\HTTP; - -class ServerPluginTest extends AbstractServer -{ - /** - * @var Sabre\DAV\TestPlugin - */ - protected $testPlugin; - - public function setup(): void - { - parent::setUp(); - - $testPlugin = new TestPlugin(); - $this->server->addPlugin($testPlugin); - $this->testPlugin = $testPlugin; - } - - public function testBaseClass() - { - $p = new ServerPluginMock(); - $this->assertEquals([], $p->getFeatures()); - $this->assertEquals([], $p->getHTTPMethods('')); - $this->assertEquals( - [ - 'name' => 'Sabre\DAV\ServerPluginMock', - 'description' => null, - 'link' => null, - ], $p->getPluginInfo() - ); - } - - public function testOptions() - { - $serverVars = [ - 'REQUEST_URI' => '/', - 'REQUEST_METHOD' => 'OPTIONS', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'DAV' => ['1, 3, extended-mkcol, drinking'], - 'MS-Author-Via' => ['DAV'], - 'Allow' => ['OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT, BEER, WINE'], - 'Accept-Ranges' => ['bytes'], - 'Content-Length' => ['0'], - 'X-Sabre-Version' => [Version::VERSION], - ], $this->response->getHeaders()); - - $this->assertEquals(200, $this->response->status); - $this->assertEquals('', $this->response->getBodyAsString()); - $this->assertEquals('OPTIONS', $this->testPlugin->beforeMethod); - } - - public function testGetPlugin() - { - $this->assertEquals($this->testPlugin, $this->server->getPlugin(get_class($this->testPlugin))); - } - - public function testUnknownPlugin() - { - $this->assertNull($this->server->getPlugin('SomeRandomClassName')); - } - - public function testGetSupportedReportSet() - { - $this->assertEquals([], $this->testPlugin->getSupportedReportSet('/')); - } - - public function testGetPlugins() - { - $this->assertEquals( - [ - get_class($this->testPlugin) => $this->testPlugin, - 'core' => $this->server->getPlugin('core'), - ], - $this->server->getPlugins() - ); - } -} - -class ServerPluginMock extends ServerPlugin -{ - public function initialize(Server $s) - { - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/ServerPropsTest.php b/vendor/sabre/dav/tests/Sabre/DAV/ServerPropsTest.php deleted file mode 100644 index cd1ccfa53..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/ServerPropsTest.php +++ /dev/null @@ -1,194 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -use Sabre\HTTP; - -class ServerPropsTest extends AbstractServer -{ - protected function getRootNode() - { - return new FSExt\Directory(SABRE_TEMPDIR); - } - - public function setup(): void - { - if (file_exists(SABRE_TEMPDIR.'../.sabredav')) { - unlink(SABRE_TEMPDIR.'../.sabredav'); - } - parent::setUp(); - file_put_contents(SABRE_TEMPDIR.'/test2.txt', 'Test contents2'); - mkdir(SABRE_TEMPDIR.'/col'); - file_put_contents(SABRE_TEMPDIR.'col/test.txt', 'Test contents'); - $this->server->addPlugin(new Locks\Plugin(new Locks\Backend\File(SABRE_TEMPDIR.'/.locksdb'))); - } - - public function teardown(): void - { - parent::tearDown(); - if (file_exists(SABRE_TEMPDIR.'../.locksdb')) { - unlink(SABRE_TEMPDIR.'../.locksdb'); - } - } - - private function sendRequest($body, $path = '/', $headers = ['Depth' => '0']) - { - $request = new HTTP\Request('PROPFIND', $path, $headers, $body); - - $this->server->httpRequest = $request; - $this->server->exec(); - } - - public function testPropFindEmptyBody() - { - $this->sendRequest(''); - $this->assertEquals(207, $this->response->status); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - 'DAV' => ['1, 3, extended-mkcol, 2'], - 'Vary' => ['Brief,Prefer'], - ], - $this->response->getHeaders() - ); - - $body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/", 'xmlns\\1="urn:DAV"', $this->response->getBodyAsString()); - $xml = simplexml_load_string($body); - $xml->registerXPathNamespace('d', 'urn:DAV'); - - list($data) = $xml->xpath('/d:multistatus/d:response/d:href'); - $this->assertEquals('/', (string) $data, 'href element should have been /'); - - $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:resourcetype'); - $this->assertEquals(1, count($data)); - } - - public function testPropFindEmptyBodyFile() - { - $this->sendRequest('', '/test2.txt', []); - $this->assertEquals(207, $this->response->status); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - 'DAV' => ['1, 3, extended-mkcol, 2'], - 'Vary' => ['Brief,Prefer'], - ], - $this->response->getHeaders() - ); - - $body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/", 'xmlns\\1="urn:DAV"', $this->response->getBodyAsString()); - $xml = simplexml_load_string($body); - $xml->registerXPathNamespace('d', 'urn:DAV'); - - list($data) = $xml->xpath('/d:multistatus/d:response/d:href'); - $this->assertEquals('/test2.txt', (string) $data, 'href element should have been /test2.txt'); - - $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:getcontentlength'); - $this->assertEquals(1, count($data)); - } - - public function testSupportedLocks() - { - $xml = '<?xml version="1.0"?> -<d:propfind xmlns:d="DAV:"> - <d:prop> - <d:supportedlock /> - </d:prop> -</d:propfind>'; - - $this->sendRequest($xml); - - $body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/", 'xmlns\\1="urn:DAV"', $this->response->getBodyAsString()); - $xml = simplexml_load_string($body); - $xml->registerXPathNamespace('d', 'urn:DAV'); - - $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supportedlock/d:lockentry'); - $this->assertEquals(2, count($data), 'We expected two \'d:lockentry\' tags'); - - $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supportedlock/d:lockentry/d:lockscope'); - $this->assertEquals(2, count($data), 'We expected two \'d:lockscope\' tags'); - - $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supportedlock/d:lockentry/d:locktype'); - $this->assertEquals(2, count($data), 'We expected two \'d:locktype\' tags'); - - $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supportedlock/d:lockentry/d:lockscope/d:shared'); - $this->assertEquals(1, count($data), 'We expected a \'d:shared\' tag'); - - $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supportedlock/d:lockentry/d:lockscope/d:exclusive'); - $this->assertEquals(1, count($data), 'We expected a \'d:exclusive\' tag'); - - $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supportedlock/d:lockentry/d:locktype/d:write'); - $this->assertEquals(2, count($data), 'We expected two \'d:write\' tags'); - } - - public function testLockDiscovery() - { - $xml = '<?xml version="1.0"?> -<d:propfind xmlns:d="DAV:"> - <d:prop> - <d:lockdiscovery /> - </d:prop> -</d:propfind>'; - - $this->sendRequest($xml); - - $body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/", 'xmlns\\1="urn:DAV"', $this->response->getBodyAsString()); - $xml = simplexml_load_string($body); - $xml->registerXPathNamespace('d', 'urn:DAV'); - - $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:lockdiscovery'); - $this->assertEquals(1, count($data), 'We expected a \'d:lockdiscovery\' tag'); - } - - public function testUnknownProperty() - { - $xml = '<?xml version="1.0"?> -<d:propfind xmlns:d="DAV:"> - <d:prop> - <d:macaroni /> - </d:prop> -</d:propfind>'; - - $this->sendRequest($xml); - $body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/", 'xmlns\\1="urn:DAV"', $this->response->getBodyAsString()); - $xml = simplexml_load_string($body); - $xml->registerXPathNamespace('d', 'urn:DAV'); - $pathTests = [ - '/d:multistatus', - '/d:multistatus/d:response', - '/d:multistatus/d:response/d:propstat', - '/d:multistatus/d:response/d:propstat/d:status', - '/d:multistatus/d:response/d:propstat/d:prop', - '/d:multistatus/d:response/d:propstat/d:prop/d:macaroni', - ]; - foreach ($pathTests as $test) { - $this->assertTrue(true == count($xml->xpath($test)), 'We expected the '.$test.' element to appear in the response, we got: '.$body); - } - - $val = $xml->xpath('/d:multistatus/d:response/d:propstat/d:status'); - $this->assertEquals(1, count($val), $body); - $this->assertEquals('HTTP/1.1 404 Not Found', (string) $val[0]); - } - - public function testParsePropPatchRequest() - { - $body = '<?xml version="1.0"?> -<d:propertyupdate xmlns:d="DAV:" xmlns:s="http://sabredav.org/NS/test"> - <d:set><d:prop><s:someprop>somevalue</s:someprop></d:prop></d:set> - <d:remove><d:prop><s:someprop2 /></d:prop></d:remove> - <d:set><d:prop><s:someprop3>removeme</s:someprop3></d:prop></d:set> - <d:remove><d:prop><s:someprop3 /></d:prop></d:remove> -</d:propertyupdate>'; - - $result = $this->server->xml->parse($body); - $this->assertEquals([ - '{http://sabredav.org/NS/test}someprop' => 'somevalue', - '{http://sabredav.org/NS/test}someprop2' => null, - '{http://sabredav.org/NS/test}someprop3' => null, - ], $result->properties); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/ServerRangeTest.php b/vendor/sabre/dav/tests/Sabre/DAV/ServerRangeTest.php deleted file mode 100644 index 6d5be4608..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/ServerRangeTest.php +++ /dev/null @@ -1,252 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -use DateTime; -use Sabre\HTTP; - -/** - * This file tests HTTP requests that use the Range: header. - * - * @copyright Copyright (C) fruux GmbH. (https://fruux.com/) - * @author Evert Pot (http://evertpot.com/) - * @license http://sabre.io/license/ Modified BSD License - */ -class ServerRangeTest extends \Sabre\DAVServerTest -{ - protected $setupFiles = true; - - /** - * We need this string a lot. - */ - protected $lastModified; - - public function setup(): void - { - parent::setUp(); - $this->server->createFile('files/test.txt', 'Test contents'); - - $this->lastModified = HTTP\toDate( - new DateTime('@'.$this->server->tree->getNodeForPath('files/test.txt')->getLastModified()) - ); - - $stream = popen('echo "Test contents"', 'r'); - $streamingFile = new Mock\StreamingFile( - 'no-seeking.txt', - $stream - ); - $streamingFile->setSize(12); - $this->server->tree->getNodeForPath('files')->addNode($streamingFile); - } - - public function testRange() - { - $request = new HTTP\Request('GET', '/files/test.txt', ['Range' => 'bytes=2-5']); - $response = $this->request($request); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/octet-stream'], - 'Content-Length' => [4], - 'Content-Range' => ['bytes 2-5/13'], - 'ETag' => ['"'.md5('Test contents').'"'], - 'Last-Modified' => [$this->lastModified], - ], - $response->getHeaders() - ); - $this->assertEquals(206, $response->getStatus()); - $this->assertEquals('st c', $response->getBodyAsString()); - } - - /** - * @depends testRange - */ - public function testStartRange() - { - $request = new HTTP\Request('GET', '/files/test.txt', ['Range' => 'bytes=2-']); - $response = $this->request($request); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/octet-stream'], - 'Content-Length' => [11], - 'Content-Range' => ['bytes 2-12/13'], - 'ETag' => ['"'.md5('Test contents').'"'], - 'Last-Modified' => [$this->lastModified], - ], - $response->getHeaders() - ); - - $this->assertEquals(206, $response->getStatus()); - $this->assertEquals('st contents', $response->getBodyAsString()); - } - - /** - * @depends testRange - */ - public function testEndRange() - { - $request = new HTTP\Request('GET', '/files/test.txt', ['Range' => 'bytes=-8']); - $response = $this->request($request); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/octet-stream'], - 'Content-Length' => [8], - 'Content-Range' => ['bytes 5-12/13'], - 'ETag' => ['"'.md5('Test contents').'"'], - 'Last-Modified' => [$this->lastModified], - ], - $response->getHeaders() - ); - - $this->assertEquals(206, $response->getStatus()); - $this->assertEquals('contents', $response->getBodyAsString()); - } - - /** - * @depends testRange - */ - public function testTooHighRange() - { - $request = new HTTP\Request('GET', '/files/test.txt', ['Range' => 'bytes=100-200']); - $response = $this->request($request); - - $this->assertEquals(416, $response->getStatus()); - } - - /** - * @depends testRange - */ - public function testCrazyRange() - { - $request = new HTTP\Request('GET', '/files/test.txt', ['Range' => 'bytes=8-4']); - $response = $this->request($request); - - $this->assertEquals(416, $response->getStatus()); - } - - public function testNonSeekableStream() - { - $request = new HTTP\Request('GET', '/files/no-seeking.txt', ['Range' => 'bytes=2-5']); - $response = $this->request($request); - - $this->assertEquals(206, $response->getStatus()); - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/octet-stream'], - 'Content-Length' => [4], - 'Content-Range' => ['bytes 2-5/12'], - // 'ETag' => ['"' . md5('Test contents') . '"'], - 'Last-Modified' => [$this->lastModified], - ], - $response->getHeaders() - ); - - $this->assertEquals('st c', $response->getBodyAsString()); - } - - /** - * @depends testRange - */ - public function testIfRangeEtag() - { - $request = new HTTP\Request('GET', '/files/test.txt', [ - 'Range' => 'bytes=2-5', - 'If-Range' => '"'.md5('Test contents').'"', - ]); - $response = $this->request($request); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/octet-stream'], - 'Content-Length' => [4], - 'Content-Range' => ['bytes 2-5/13'], - 'ETag' => ['"'.md5('Test contents').'"'], - 'Last-Modified' => [$this->lastModified], - ], - $response->getHeaders() - ); - - $this->assertEquals(206, $response->getStatus()); - $this->assertEquals('st c', $response->getBodyAsString()); - } - - /** - * @depends testIfRangeEtag - */ - public function testIfRangeEtagIncorrect() - { - $request = new HTTP\Request('GET', '/files/test.txt', [ - 'Range' => 'bytes=2-5', - 'If-Range' => '"foobar"', - ]); - $response = $this->request($request); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/octet-stream'], - 'Content-Length' => [13], - 'ETag' => ['"'.md5('Test contents').'"'], - 'Last-Modified' => [$this->lastModified], - ], - $response->getHeaders() - ); - - $this->assertEquals(200, $response->getStatus()); - $this->assertEquals('Test contents', $response->getBodyAsString()); - } - - /** - * @depends testIfRangeEtag - */ - public function testIfRangeModificationDate() - { - $request = new HTTP\Request('GET', '/files/test.txt', [ - 'Range' => 'bytes=2-5', - 'If-Range' => 'tomorrow', - ]); - $response = $this->request($request); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/octet-stream'], - 'Content-Length' => [4], - 'Content-Range' => ['bytes 2-5/13'], - 'ETag' => ['"'.md5('Test contents').'"'], - 'Last-Modified' => [$this->lastModified], - ], - $response->getHeaders() - ); - - $this->assertEquals(206, $response->getStatus()); - $this->assertEquals('st c', $response->getBodyAsString()); - } - - /** - * @depends testIfRangeModificationDate - */ - public function testIfRangeModificationDateModified() - { - $request = new HTTP\Request('GET', '/files/test.txt', [ - 'Range' => 'bytes=2-5', - 'If-Range' => '-2 years', - ]); - $response = $this->request($request); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/octet-stream'], - 'Content-Length' => [13], - 'ETag' => ['"'.md5('Test contents').'"'], - 'Last-Modified' => [$this->lastModified], - ], - $response->getHeaders() - ); - - $this->assertEquals(200, $response->getStatus()); - $this->assertEquals('Test contents', $response->getBodyAsString()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/ServerSimpleTest.php b/vendor/sabre/dav/tests/Sabre/DAV/ServerSimpleTest.php deleted file mode 100644 index e4dd3cdb6..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/ServerSimpleTest.php +++ /dev/null @@ -1,433 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -use Sabre\HTTP; - -class ServerSimpleTest extends AbstractServer -{ - public function testConstructArray() - { - $nodes = [ - new SimpleCollection('hello'), - ]; - - $server = new Server($nodes); - $this->assertEquals($nodes[0], $server->tree->getNodeForPath('hello')); - } - - public function testConstructInvalidArg() - { - $this->expectException('Sabre\DAV\Exception'); - $server = new Server(1); - } - - public function testOptions() - { - $request = new HTTP\Request('OPTIONS', '/'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals([ - 'DAV' => ['1, 3, extended-mkcol'], - 'MS-Author-Via' => ['DAV'], - 'Allow' => ['OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT'], - 'Accept-Ranges' => ['bytes'], - 'Content-Length' => ['0'], - 'X-Sabre-Version' => [Version::VERSION], - ], $this->response->getHeaders()); - - $this->assertEquals(200, $this->response->status); - $this->assertEquals('', $this->response->getBodyAsString()); - } - - public function testOptionsUnmapped() - { - $request = new HTTP\Request('OPTIONS', '/unmapped'); - $this->server->httpRequest = $request; - - $this->server->exec(); - - $this->assertEquals([ - 'DAV' => ['1, 3, extended-mkcol'], - 'MS-Author-Via' => ['DAV'], - 'Allow' => ['OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT, MKCOL'], - 'Accept-Ranges' => ['bytes'], - 'Content-Length' => ['0'], - 'X-Sabre-Version' => [Version::VERSION], - ], $this->response->getHeaders()); - - $this->assertEquals(200, $this->response->status); - $this->assertEquals('', $this->response->getBodyAsString()); - } - - public function testNonExistantMethod() - { - $serverVars = [ - 'REQUEST_URI' => '/', - 'REQUEST_METHOD' => 'BLABLA', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $this->response->getHeaders()); - - $this->assertEquals(501, $this->response->status); - } - - public function testBaseUri() - { - $serverVars = [ - 'REQUEST_URI' => '/blabla/test.txt', - 'REQUEST_METHOD' => 'GET', - ]; - $filename = $this->tempDir.'/test.txt'; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $this->server->setBaseUri('/blabla/'); - $this->assertEquals('/blabla/', $this->server->getBaseUri()); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/octet-stream'], - 'Content-Length' => [13], - 'Last-Modified' => [HTTP\toDate(new \DateTime('@'.filemtime($filename)))], - 'ETag' => ['"'.sha1(fileinode($filename).filesize($filename).filemtime($filename)).'"'], - ], - $this->response->getHeaders() - ); - - $this->assertEquals(200, $this->response->status); - $this->assertEquals('Test contents', stream_get_contents($this->response->body)); - } - - public function testBaseUriAddSlash() - { - $tests = [ - '/' => '/', - '/foo' => '/foo/', - '/foo/' => '/foo/', - '/foo/bar' => '/foo/bar/', - '/foo/bar/' => '/foo/bar/', - ]; - - foreach ($tests as $test => $result) { - $this->server->setBaseUri($test); - - $this->assertEquals($result, $this->server->getBaseUri()); - } - } - - public function testCalculateUri() - { - $uris = [ - 'http://www.example.org/root/somepath', - '/root/somepath', - '/root/somepath/', - '//root/somepath/', - '///root///somepath///', - ]; - - $this->server->setBaseUri('/root/'); - - foreach ($uris as $uri) { - $this->assertEquals('somepath', $this->server->calculateUri($uri)); - } - - $this->server->setBaseUri('/root'); - - foreach ($uris as $uri) { - $this->assertEquals('somepath', $this->server->calculateUri($uri)); - } - - $this->assertEquals('', $this->server->calculateUri('/root')); - - $this->server->setBaseUri('/'); - - foreach ($uris as $uri) { - $this->assertEquals('root/somepath', $this->server->calculateUri($uri)); - } - - $this->assertEquals('', $this->server->calculateUri('')); - } - - public function testCalculateUriSpecialChars() - { - $uris = [ - 'http://www.example.org/root/%C3%A0fo%C3%B3', - '/root/%C3%A0fo%C3%B3', - '/root/%C3%A0fo%C3%B3/', - ]; - - $this->server->setBaseUri('/root/'); - - foreach ($uris as $uri) { - $this->assertEquals("\xc3\xa0fo\xc3\xb3", $this->server->calculateUri($uri)); - } - - $this->server->setBaseUri('/root'); - - foreach ($uris as $uri) { - $this->assertEquals("\xc3\xa0fo\xc3\xb3", $this->server->calculateUri($uri)); - } - - $this->server->setBaseUri('/'); - - foreach ($uris as $uri) { - $this->assertEquals("root/\xc3\xa0fo\xc3\xb3", $this->server->calculateUri($uri)); - } - } - - public function testCalculateUriBreakout() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $uri = '/path1/'; - - $this->server->setBaseUri('/path2/'); - $this->server->calculateUri($uri); - } - - public function testGuessBaseUri() - { - $serverVars = [ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/index.php/root', - 'PATH_INFO' => '/root', - ]; - - $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); - $server = new Server(); - $server->httpRequest = $httpRequest; - - $this->assertEquals('/index.php/', $server->guessBaseUri()); - } - - /** - * @depends testGuessBaseUri - */ - public function testGuessBaseUriPercentEncoding() - { - $serverVars = [ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/index.php/dir/path2/path%20with%20spaces', - 'PATH_INFO' => '/dir/path2/path with spaces', - ]; - - $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); - $server = new Server(); - $server->httpRequest = $httpRequest; - - $this->assertEquals('/index.php/', $server->guessBaseUri()); - } - - /** - * @depends testGuessBaseUri - */ - /* - function testGuessBaseUriPercentEncoding2() { - - $this->markTestIncomplete('This behaviour is not yet implemented'); - $serverVars = [ - 'REQUEST_URI' => '/some%20directory+mixed/index.php/dir/path2/path%20with%20spaces', - 'PATH_INFO' => '/dir/path2/path with spaces', - ]; - - $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); - $server = new Server(); - $server->httpRequest = $httpRequest; - - $this->assertEquals('/some%20directory+mixed/index.php/', $server->guessBaseUri()); - - }*/ - - public function testGuessBaseUri2() - { - $serverVars = [ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/index.php/root/', - 'PATH_INFO' => '/root/', - ]; - - $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); - $server = new Server(); - $server->httpRequest = $httpRequest; - - $this->assertEquals('/index.php/', $server->guessBaseUri()); - } - - public function testGuessBaseUriNoPathInfo() - { - $serverVars = [ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/index.php/root', - ]; - - $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); - $server = new Server(); - $server->httpRequest = $httpRequest; - - $this->assertEquals('/', $server->guessBaseUri()); - } - - public function testGuessBaseUriNoPathInfo2() - { - $httpRequest = new HTTP\Request('GET', '/a/b/c/test.php'); - $server = new Server(); - $server->httpRequest = $httpRequest; - - $this->assertEquals('/', $server->guessBaseUri()); - } - - /** - * @depends testGuessBaseUri - */ - public function testGuessBaseUriQueryString() - { - $serverVars = [ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/index.php/root?query_string=blabla', - 'PATH_INFO' => '/root', - ]; - - $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); - $server = new Server(); - $server->httpRequest = $httpRequest; - - $this->assertEquals('/index.php/', $server->guessBaseUri()); - } - - /** - * @depends testGuessBaseUri - */ - public function testGuessBaseUriBadConfig() - { - $this->expectException('Sabre\DAV\Exception'); - $serverVars = [ - 'REQUEST_METHOD' => 'GET', - 'REQUEST_URI' => '/index.php/root/heyyy', - 'PATH_INFO' => '/root', - ]; - - $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); - $server = new Server(); - $server->httpRequest = $httpRequest; - - $server->guessBaseUri(); - } - - public function testTriggerException() - { - $serverVars = [ - 'REQUEST_URI' => '/', - 'REQUEST_METHOD' => 'FOO', - ]; - - $httpRequest = HTTP\Sapi::createFromServerArray($serverVars); - $this->server->httpRequest = $httpRequest; - $this->server->on('beforeMethod:*', [$this, 'exceptionTrigger']); - $this->server->exec(); - - $this->assertEquals([ - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $this->response->getHeaders()); - - $this->assertEquals(500, $this->response->status); - } - - public function exceptionTrigger($request, $response) - { - throw new Exception('Hola'); - } - - public function testReportNotFound() - { - $serverVars = [ - 'REQUEST_URI' => '/', - 'REQUEST_METHOD' => 'REPORT', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $this->server->httpRequest = ($request); - $this->server->httpRequest->setBody('<?xml version="1.0"?><bla:myreport xmlns:bla="http://www.rooftopsolutions.nl/NS"></bla:myreport>'); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], - $this->response->getHeaders() - ); - - $this->assertEquals(415, $this->response->status, 'We got an incorrect status back. Full response body follows: '.$this->response->getBodyAsString()); - } - - public function testReportIntercepted() - { - $serverVars = [ - 'REQUEST_URI' => '/', - 'REQUEST_METHOD' => 'REPORT', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $this->server->httpRequest = ($request); - $this->server->httpRequest->setBody('<?xml version="1.0"?><bla:myreport xmlns:bla="http://www.rooftopsolutions.nl/NS"></bla:myreport>'); - $this->server->on('report', [$this, 'reportHandler']); - $this->server->exec(); - - $this->assertEquals([ - 'X-Sabre-Version' => [Version::VERSION], - 'testheader' => ['testvalue'], - ], - $this->response->getHeaders() - ); - - $this->assertEquals(418, $this->response->status, 'We got an incorrect status back. Full response body follows: '.$this->response->getBodyAsString()); - } - - public function reportHandler($reportName, $result, $path) - { - if ('{http://www.rooftopsolutions.nl/NS}myreport' == $reportName) { - $this->server->httpResponse->setStatus(418); - $this->server->httpResponse->setHeader('testheader', 'testvalue'); - - return false; - } else { - return; - } - } - - public function testGetPropertiesForChildren() - { - $result = $this->server->getPropertiesForChildren('', [ - '{DAV:}getcontentlength', - ]); - - $expected = [ - 'test.txt' => ['{DAV:}getcontentlength' => 13], - 'dir/' => [], - ]; - - $this->assertEquals($expected, $result); - } - - /** - * There are certain cases where no HTTP status may be set. We need to - * intercept these and set it to a default error message. - */ - public function testNoHTTPStatusSet() - { - $this->server->on('method:GET', function () { return false; }, 1); - $this->server->httpRequest = new HTTP\Request('GET', '/'); - $this->server->exec(); - $this->assertEquals(500, $this->response->getStatus()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/ServerUpdatePropertiesTest.php b/vendor/sabre/dav/tests/Sabre/DAV/ServerUpdatePropertiesTest.php deleted file mode 100644 index cb8a4ab32..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/ServerUpdatePropertiesTest.php +++ /dev/null @@ -1,97 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -class ServerUpdatePropertiesTest extends \PHPUnit\Framework\TestCase -{ - public function testUpdatePropertiesFail() - { - $tree = [ - new SimpleCollection('foo'), - ]; - $server = new Server($tree); - - $result = $server->updateProperties('foo', [ - '{DAV:}foo' => 'bar', - ]); - - $expected = [ - '{DAV:}foo' => 403, - ]; - $this->assertEquals($expected, $result); - } - - public function testUpdatePropertiesProtected() - { - $tree = [ - new SimpleCollection('foo'), - ]; - $server = new Server($tree); - - $server->on('propPatch', function ($path, PropPatch $propPatch) { - $propPatch->handleRemaining(function () { return true; }); - }); - $result = $server->updateProperties('foo', [ - '{DAV:}getetag' => 'bla', - '{DAV:}foo' => 'bar', - ]); - - $expected = [ - '{DAV:}getetag' => 403, - '{DAV:}foo' => 424, - ]; - $this->assertEquals($expected, $result); - } - - public function testUpdatePropertiesEventFail() - { - $tree = [ - new SimpleCollection('foo'), - ]; - $server = new Server($tree); - $server->on('propPatch', function ($path, PropPatch $propPatch) { - $propPatch->setResultCode('{DAV:}foo', 404); - $propPatch->handleRemaining(function () { return true; }); - }); - - $result = $server->updateProperties('foo', [ - '{DAV:}foo' => 'bar', - '{DAV:}foo2' => 'bla', - ]); - - $expected = [ - '{DAV:}foo' => 404, - '{DAV:}foo2' => 424, - ]; - $this->assertEquals($expected, $result); - } - - public function testUpdatePropertiesEventSuccess() - { - $tree = [ - new SimpleCollection('foo'), - ]; - $server = new Server($tree); - $server->on('propPatch', function ($path, PropPatch $propPatch) { - $propPatch->handle(['{DAV:}foo', '{DAV:}foo2'], function () { - return [ - '{DAV:}foo' => 200, - '{DAV:}foo2' => 201, - ]; - }); - }); - - $result = $server->updateProperties('foo', [ - '{DAV:}foo' => 'bar', - '{DAV:}foo2' => 'bla', - ]); - - $expected = [ - '{DAV:}foo' => 200, - '{DAV:}foo2' => 201, - ]; - $this->assertEquals($expected, $result); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/SimpleFileTest.php b/vendor/sabre/dav/tests/Sabre/DAV/SimpleFileTest.php deleted file mode 100644 index 6edca5ecc..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/SimpleFileTest.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -class SimpleFileTest extends \PHPUnit\Framework\TestCase -{ - public function testAll() - { - $file = new SimpleFile('filename.txt', 'contents', 'text/plain'); - - $this->assertEquals('filename.txt', $file->getName()); - $this->assertEquals('contents', $file->get()); - $this->assertEquals(8, $file->getSize()); - $this->assertEquals('"'.sha1('contents').'"', $file->getETag()); - $this->assertEquals('text/plain', $file->getContentType()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/StringUtilTest.php b/vendor/sabre/dav/tests/Sabre/DAV/StringUtilTest.php deleted file mode 100644 index bc36c6b78..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/StringUtilTest.php +++ /dev/null @@ -1,119 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -class StringUtilTest extends \PHPUnit\Framework\TestCase -{ - /** - * @param string $haystack - * @param string $needle - * @param string $collation - * @param string $matchType - * @param string $result - * - * @throws Exception\BadRequest - * - * @dataProvider dataset - */ - public function testTextMatch($haystack, $needle, $collation, $matchType, $result) - { - $this->assertEquals($result, StringUtil::textMatch($haystack, $needle, $collation, $matchType)); - } - - public function dataset() - { - return [ - ['FOOBAR', 'FOO', 'i;octet', 'contains', true], - ['FOOBAR', 'foo', 'i;octet', 'contains', false], - ['FÖÖBAR', 'FÖÖ', 'i;octet', 'contains', true], - ['FÖÖBAR', 'föö', 'i;octet', 'contains', false], - ['FOOBAR', 'FOOBAR', 'i;octet', 'equals', true], - ['FOOBAR', 'fooBAR', 'i;octet', 'equals', false], - ['FOOBAR', 'FOO', 'i;octet', 'starts-with', true], - ['FOOBAR', 'foo', 'i;octet', 'starts-with', false], - ['FOOBAR', 'BAR', 'i;octet', 'starts-with', false], - ['FOOBAR', 'bar', 'i;octet', 'starts-with', false], - ['FOOBAR', 'FOO', 'i;octet', 'ends-with', false], - ['FOOBAR', 'foo', 'i;octet', 'ends-with', false], - ['FOOBAR', 'BAR', 'i;octet', 'ends-with', true], - ['FOOBAR', 'bar', 'i;octet', 'ends-with', false], - - ['FOOBAR', 'FOO', 'i;ascii-casemap', 'contains', true], - ['FOOBAR', 'foo', 'i;ascii-casemap', 'contains', true], - ['FÖÖBAR', 'FÖÖ', 'i;ascii-casemap', 'contains', true], - ['FÖÖBAR', 'föö', 'i;ascii-casemap', 'contains', false], - ['FOOBAR', 'FOOBAR', 'i;ascii-casemap', 'equals', true], - ['FOOBAR', 'fooBAR', 'i;ascii-casemap', 'equals', true], - ['FOOBAR', 'FOO', 'i;ascii-casemap', 'starts-with', true], - ['FOOBAR', 'foo', 'i;ascii-casemap', 'starts-with', true], - ['FOOBAR', 'BAR', 'i;ascii-casemap', 'starts-with', false], - ['FOOBAR', 'bar', 'i;ascii-casemap', 'starts-with', false], - ['FOOBAR', 'FOO', 'i;ascii-casemap', 'ends-with', false], - ['FOOBAR', 'foo', 'i;ascii-casemap', 'ends-with', false], - ['FOOBAR', 'BAR', 'i;ascii-casemap', 'ends-with', true], - ['FOOBAR', 'bar', 'i;ascii-casemap', 'ends-with', true], - - ['FOOBAR', 'FOO', 'i;unicode-casemap', 'contains', true], - ['FOOBAR', 'foo', 'i;unicode-casemap', 'contains', true], - ['FÖÖBAR', 'FÖÖ', 'i;unicode-casemap', 'contains', true], - ['FÖÖBAR', 'föö', 'i;unicode-casemap', 'contains', true], - ['FOOBAR', 'FOOBAR', 'i;unicode-casemap', 'equals', true], - ['FOOBAR', 'fooBAR', 'i;unicode-casemap', 'equals', true], - ['FOOBAR', 'FOO', 'i;unicode-casemap', 'starts-with', true], - ['FOOBAR', 'foo', 'i;unicode-casemap', 'starts-with', true], - ['FOOBAR', 'BAR', 'i;unicode-casemap', 'starts-with', false], - ['FOOBAR', 'bar', 'i;unicode-casemap', 'starts-with', false], - ['FOOBAR', 'FOO', 'i;unicode-casemap', 'ends-with', false], - ['FOOBAR', 'foo', 'i;unicode-casemap', 'ends-with', false], - ['FOOBAR', 'BAR', 'i;unicode-casemap', 'ends-with', true], - ['FOOBAR', 'bar', 'i;unicode-casemap', 'ends-with', true], - ]; - } - - public function testBadCollation() - { - $this->expectException('Sabre\DAV\Exception\BadRequest'); - StringUtil::textMatch('foobar', 'foo', 'blabla', 'contains'); - } - - public function testBadMatchType() - { - $this->expectException('Sabre\DAV\Exception\BadRequest'); - StringUtil::textMatch('foobar', 'foo', 'i;octet', 'booh'); - } - - public function testEnsureUTF8_ascii() - { - $inputString = 'harkema'; - $outputString = 'harkema'; - - $this->assertEquals( - $outputString, - StringUtil::ensureUTF8($inputString) - ); - } - - public function testEnsureUTF8_latin1() - { - $inputString = "m\xfcnster"; - $outputString = 'münster'; - - $this->assertEquals( - $outputString, - StringUtil::ensureUTF8($inputString) - ); - } - - public function testEnsureUTF8_utf8() - { - $inputString = "m\xc3\xbcnster"; - $outputString = 'münster'; - - $this->assertEquals( - $outputString, - StringUtil::ensureUTF8($inputString) - ); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/TemporaryFileFilterTest.php b/vendor/sabre/dav/tests/Sabre/DAV/TemporaryFileFilterTest.php deleted file mode 100644 index 951078bf0..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/TemporaryFileFilterTest.php +++ /dev/null @@ -1,204 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -use Sabre\HTTP; - -class TemporaryFileFilterTest extends AbstractServer -{ - public function setup(): void - { - parent::setUp(); - $plugin = new TemporaryFileFilterPlugin(SABRE_TEMPDIR.'/tff'); - $this->server->addPlugin($plugin); - } - - public function testPutNormal() - { - $request = new HTTP\Request('PUT', '/testput.txt', [], 'Testing new file'); - - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals('', $this->response->getBodyAsString()); - $this->assertEquals(201, $this->response->status); - $this->assertEquals('0', $this->response->getHeader('Content-Length')); - - $this->assertEquals('Testing new file', file_get_contents(SABRE_TEMPDIR.'/testput.txt')); - } - - public function testPutTemp() - { - // mimicking an OS/X resource fork - $request = new HTTP\Request('PUT', '/._testput.txt', [], 'Testing new file'); - - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals('', $this->response->getBodyAsString()); - $this->assertEquals(201, $this->response->status); - $this->assertEquals([ - 'X-Sabre-Temp' => ['true'], - ], $this->response->getHeaders()); - - $this->assertFalse(file_exists(SABRE_TEMPDIR.'/._testput.txt'), '._testput.txt should not exist in the regular file structure.'); - } - - public function testPutTempIfNoneMatch() - { - // mimicking an OS/X resource fork - $request = new HTTP\Request('PUT', '/._testput.txt', ['If-None-Match' => '*'], 'Testing new file'); - - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals('', $this->response->getBodyAsString()); - $this->assertEquals(201, $this->response->status); - $this->assertEquals([ - 'X-Sabre-Temp' => ['true'], - ], $this->response->getHeaders()); - - $this->assertFalse(file_exists(SABRE_TEMPDIR.'/._testput.txt'), '._testput.txt should not exist in the regular file structure.'); - - $this->server->exec(); - - $this->assertEquals(412, $this->response->status); - $this->assertEquals([ - 'X-Sabre-Temp' => ['true'], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $this->response->getHeaders()); - } - - public function testPutGet() - { - // mimicking an OS/X resource fork - $request = new HTTP\Request('PUT', '/._testput.txt', [], 'Testing new file'); - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals('', $this->response->getBodyAsString()); - $this->assertEquals(201, $this->response->status); - $this->assertEquals([ - 'X-Sabre-Temp' => ['true'], - ], $this->response->getHeaders()); - - $request = new HTTP\Request('GET', '/._testput.txt'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(200, $this->response->status); - $this->assertEquals([ - 'X-Sabre-Temp' => ['true'], - 'Content-Length' => [16], - 'Content-Type' => ['application/octet-stream'], - ], $this->response->getHeaders()); - - $this->assertEquals('Testing new file', stream_get_contents($this->response->body)); - } - - public function testGetWithBrowserPlugin() - { - $this->server->addPlugin(new Browser\Plugin()); - $request = new HTTP\Request('GET', '/'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(200, $this->response->status); - } - - public function testLockNonExistant() - { - mkdir(SABRE_TEMPDIR.'/locksdir'); - $locksBackend = new Locks\Backend\File(SABRE_TEMPDIR.'/locks'); - $locksPlugin = new Locks\Plugin($locksBackend); - $this->server->addPlugin($locksPlugin); - - // mimicking an OS/X resource fork - $request = new HTTP\Request('LOCK', '/._testput.txt'); - $request->setBody('<?xml version="1.0"?> -<D:lockinfo xmlns:D="DAV:"> - <D:lockscope><D:exclusive/></D:lockscope> - <D:locktype><D:write/></D:locktype> - <D:owner> - <D:href>http://example.org/~ejw/contact.html</D:href> - </D:owner> -</D:lockinfo>'); - - $this->server->httpRequest = ($request); - $this->server->exec(); - - $this->assertEquals(201, $this->response->status); - $this->assertEquals('application/xml; charset=utf-8', $this->response->getHeader('Content-Type')); - $this->assertTrue(1 === preg_match('/^<opaquelocktoken:(.*)>$/', $this->response->getHeader('Lock-Token')), 'We did not get a valid Locktoken back ('.$this->response->getHeader('Lock-Token').')'); - $this->assertEquals('true', $this->response->getHeader('X-Sabre-Temp')); - - $this->assertFalse(file_exists(SABRE_TEMPDIR.'/._testlock.txt'), '._testlock.txt should not exist in the regular file structure.'); - } - - public function testPutDelete() - { - // mimicking an OS/X resource fork - $request = new HTTP\Request('PUT', '/._testput.txt', [], 'Testing new file'); - - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals('', $this->response->getBodyAsString()); - $this->assertEquals(201, $this->response->status); - $this->assertEquals([ - 'X-Sabre-Temp' => ['true'], - ], $this->response->getHeaders()); - - $request = new HTTP\Request('DELETE', '/._testput.txt'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $this->assertEquals(204, $this->response->status, "Incorrect status code received. Full body:\n".$this->response->getBodyAsString()); - $this->assertEquals([ - 'X-Sabre-Temp' => ['true'], - ], $this->response->getHeaders()); - - $this->assertEquals('', $this->response->getBodyAsString()); - } - - public function testPutPropfind() - { - // mimicking an OS/X resource fork - $request = new HTTP\Request('PUT', '/._testput.txt', [], 'Testing new file'); - $this->server->httpRequest = $request; - $this->server->exec(); - - $bodyAsString = $this->response->getBodyAsString(); - $this->assertEquals('', $bodyAsString); - $this->assertEquals(201, $this->response->status); - $this->assertEquals([ - 'X-Sabre-Temp' => ['true'], - ], $this->response->getHeaders()); - - $request = new HTTP\Request('PROPFIND', '/._testput.txt'); - - $this->server->httpRequest = ($request); - $this->server->exec(); - - $bodyAsString = $this->response->getBodyAsString(); - $this->assertEquals(207, $this->response->status, 'Incorrect status code returned. Body: '.$bodyAsString); - $this->assertEquals([ - 'X-Sabre-Temp' => ['true'], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $this->response->getHeaders()); - - $body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/", 'xmlns\\1="urn:DAV"', $bodyAsString); - $xml = simplexml_load_string($body); - $xml->registerXPathNamespace('d', 'urn:DAV'); - - list($data) = $xml->xpath('/d:multistatus/d:response/d:href'); - $this->assertEquals('/._testput.txt', (string) $data, 'href element should have been /._testput.txt'); - - $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:resourcetype'); - $this->assertEquals(1, count($data)); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/TestPlugin.php b/vendor/sabre/dav/tests/Sabre/DAV/TestPlugin.php deleted file mode 100644 index 3bfe3b3b0..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/TestPlugin.php +++ /dev/null @@ -1,35 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -use Sabre\HTTP\RequestInterface; -use Sabre\HTTP\ResponseInterface; - -class TestPlugin extends ServerPlugin -{ - public $beforeMethod; - - public function getFeatures() - { - return ['drinking']; - } - - public function getHTTPMethods($uri) - { - return ['BEER', 'WINE']; - } - - public function initialize(Server $server) - { - $server->on('beforeMethod:*', [$this, 'beforeMethod']); - } - - public function beforeMethod(RequestInterface $request, ResponseInterface $response) - { - $this->beforeMethod = $request->getMethod(); - - return true; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/TreeTest.php b/vendor/sabre/dav/tests/Sabre/DAV/TreeTest.php deleted file mode 100644 index e3f04ea3a..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/TreeTest.php +++ /dev/null @@ -1,238 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -class TreeTest extends \PHPUnit\Framework\TestCase -{ - public function testNodeExists() - { - $tree = new TreeMock(); - - $this->assertTrue($tree->nodeExists('hi')); - $this->assertFalse($tree->nodeExists('hello')); - } - - public function testCopy() - { - $tree = new TreeMock(); - $tree->copy('hi', 'hi2'); - - $this->assertArrayHasKey('hi2', $tree->getNodeForPath('')->newDirectories); - $this->assertEquals('foobar', $tree->getNodeForPath('hi/file')->get()); - $this->assertEquals(['test1' => 'value'], $tree->getNodeForPath('hi/file')->getProperties([])); - } - - public function testCopyFile() - { - $tree = new TreeMock(); - $tree->copy('hi/file', 'hi/newfile'); - - $this->assertArrayHasKey('newfile', $tree->getNodeForPath('hi')->newFiles); - } - - public function testCopyFile0() - { - $tree = new TreeMock(); - $tree->copy('hi/file', 'hi/0'); - - $this->assertArrayHasKey('0', $tree->getNodeForPath('hi')->newFiles); - } - - public function testMove() - { - $tree = new TreeMock(); - $tree->move('hi', 'hi2'); - - $this->assertEquals('hi2', $tree->getNodeForPath('hi')->getName()); - $this->assertTrue($tree->getNodeForPath('hi')->isRenamed); - } - - public function testDeepMove() - { - $tree = new TreeMock(); - $tree->move('hi/sub', 'hi2'); - - $this->assertArrayHasKey('hi2', $tree->getNodeForPath('')->newDirectories); - $this->assertTrue($tree->getNodeForPath('hi/sub')->isDeleted); - } - - public function testDelete() - { - $tree = new TreeMock(); - $tree->delete('hi'); - $this->assertTrue($tree->getNodeForPath('hi')->isDeleted); - } - - public function testGetChildren() - { - $tree = new TreeMock(); - $children = $tree->getChildren(''); - $firstChild = $children->current(); - $this->assertEquals('hi', $firstChild->getName()); - } - - public function testGetMultipleNodes() - { - $tree = new TreeMock(); - $result = $tree->getMultipleNodes(['hi/sub', 'hi/file']); - $this->assertArrayHasKey('hi/sub', $result); - $this->assertArrayHasKey('hi/file', $result); - - $this->assertEquals('sub', $result['hi/sub']->getName()); - $this->assertEquals('file', $result['hi/file']->getName()); - } - - public function testGetMultipleNodes2() - { - $tree = new TreeMock(); - $result = $tree->getMultipleNodes(['multi/1', 'multi/2']); - $this->assertArrayHasKey('multi/1', $result); - $this->assertArrayHasKey('multi/2', $result); - } -} - -class TreeMock extends Tree -{ - private $nodes = []; - - public function __construct() - { - $file = new TreeFileTester('file'); - $file->properties = ['test1' => 'value']; - $file->data = 'foobar'; - - parent::__construct( - new TreeDirectoryTester('root', [ - new TreeDirectoryTester('hi', [ - new TreeDirectoryTester('sub'), - $file, - ]), - new TreeMultiGetTester('multi', [ - new TreeFileTester('1'), - new TreeFileTester('2'), - new TreeFileTester('3'), - ]), - ]) - ); - } -} - -class TreeDirectoryTester extends SimpleCollection -{ - public $newDirectories = []; - public $newFiles = []; - public $isDeleted = false; - public $isRenamed = false; - - public function createDirectory($name) - { - $this->newDirectories[$name] = true; - } - - public function createFile($name, $data = null) - { - $this->newFiles[$name] = $data; - } - - public function getChild($name) - { - if (isset($this->newDirectories[$name])) { - return new self($name); - } - if (isset($this->newFiles[$name])) { - return new TreeFileTester($name, $this->newFiles[$name]); - } - - return parent::getChild($name); - } - - public function childExists($name) - { - return (bool) $this->getChild($name); - } - - public function delete() - { - $this->isDeleted = true; - } - - public function setName($name) - { - $this->isRenamed = true; - $this->name = $name; - } -} - -class TreeFileTester extends File implements IProperties -{ - public $name; - public $data; - public $properties; - - public function __construct($name, $data = null) - { - $this->name = $name; - if (is_null($data)) { - $data = 'bla'; - } - $this->data = $data; - } - - public function getName() - { - return $this->name; - } - - public function get() - { - return $this->data; - } - - public function getProperties($properties) - { - return $this->properties; - } - - /** - * Updates properties on this node. - * - * This method received a PropPatch object, which contains all the - * information about the update. - * - * To update specific properties, call the 'handle' method on this object. - * Read the PropPatch documentation for more information. - */ - public function propPatch(PropPatch $propPatch) - { - $this->properties = $propPatch->getMutations(); - $propPatch->setRemainingResultCode(200); - } -} - -class TreeMultiGetTester extends TreeDirectoryTester implements IMultiGet -{ - /** - * This method receives a list of paths in it's first argument. - * It must return an array with Node objects. - * - * If any children are not found, you do not have to return them. - * - * @return array - */ - public function getMultipleChildren(array $paths) - { - $result = []; - foreach ($paths as $path) { - try { - $child = $this->getChild($path); - $result[] = $child; - } catch (Exception\NotFound $e) { - // Do nothing - } - } - - return $result; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAV/UUIDUtilTest.php b/vendor/sabre/dav/tests/Sabre/DAV/UUIDUtilTest.php deleted file mode 100644 index d7ef9bec9..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAV/UUIDUtilTest.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAV; - -class UUIDUtilTest extends \PHPUnit\Framework\TestCase -{ - public function testValidateUUID() - { - $this->assertTrue( - UUIDUtil::validateUUID('11111111-2222-3333-4444-555555555555') - ); - $this->assertFalse( - UUIDUtil::validateUUID(' 11111111-2222-3333-4444-555555555555') - ); - $this->assertTrue( - UUIDUtil::validateUUID('ffffffff-2222-3333-4444-555555555555') - ); - $this->assertFalse( - UUIDUtil::validateUUID('fffffffg-2222-3333-4444-555555555555') - ); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/ACLMethodTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/ACLMethodTest.php deleted file mode 100644 index 715559df3..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/ACLMethodTest.php +++ /dev/null @@ -1,311 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL; - -use Sabre\DAV; -use Sabre\HTTP; - -class ACLMethodTest extends \PHPUnit\Framework\TestCase -{ - public function testCallback() - { - $this->expectException('Sabre\DAV\Exception\BadRequest'); - $acl = new Plugin(); - $server = new DAV\Server(); - $server->addPlugin(new DAV\Auth\Plugin()); - $server->addPlugin($acl); - - $acl->httpAcl($server->httpRequest, $server->httpResponse); - } - - /** - /** - */ - public function testNotSupportedByNode() - { - $this->expectException('Sabre\DAV\Exception\MethodNotAllowed'); - $tree = [ - new DAV\SimpleCollection('test'), - ]; - $acl = new Plugin(); - $server = new DAV\Server($tree); - $server->httpRequest = new HTTP\Request('GET', '/'); - $body = '<?xml version="1.0"?> -<d:acl xmlns:d="DAV:"> -</d:acl>'; - $server->httpRequest->setBody($body); - $server->addPlugin(new DAV\Auth\Plugin()); - $server->addPlugin($acl); - - $acl->httpACL($server->httpRequest, $server->httpResponse); - } - - public function testSuccessSimple() - { - $tree = [ - new MockACLNode('test', []), - ]; - $acl = new Plugin(); - $server = new DAV\Server($tree); - $server->httpRequest = new HTTP\Request('GET', '/'); - $server->httpRequest->setUrl('/test'); - - $body = '<?xml version="1.0"?> -<d:acl xmlns:d="DAV:"> -</d:acl>'; - $server->httpRequest->setBody($body); - $server->addPlugin(new DAV\Auth\Plugin()); - $server->addPlugin($acl); - - $this->assertFalse($acl->httpACL($server->httpRequest, $server->httpResponse)); - } - - public function testUnrecognizedPrincipal() - { - $this->expectException('Sabre\DAVACL\Exception\NotRecognizedPrincipal'); - $tree = [ - new MockACLNode('test', []), - ]; - $acl = new Plugin(); - $server = new DAV\Server($tree); - $server->httpRequest = new HTTP\Request('ACL', '/test'); - $body = '<?xml version="1.0"?> -<d:acl xmlns:d="DAV:"> - <d:ace> - <d:grant><d:privilege><d:read /></d:privilege></d:grant> - <d:principal><d:href>/principals/notfound</d:href></d:principal> - </d:ace> -</d:acl>'; - $server->httpRequest->setBody($body); - $server->addPlugin(new DAV\Auth\Plugin()); - $server->addPlugin($acl); - - $acl->httpACL($server->httpRequest, $server->httpResponse); - } - - public function testUnrecognizedPrincipal2() - { - $this->expectException('Sabre\DAVACL\Exception\NotRecognizedPrincipal'); - $tree = [ - new MockACLNode('test', []), - new DAV\SimpleCollection('principals', [ - new DAV\SimpleCollection('notaprincipal'), - ]), - ]; - $acl = new Plugin(); - $server = new DAV\Server($tree); - $server->httpRequest = new HTTP\Request('ACL', '/test'); - $body = '<?xml version="1.0"?> -<d:acl xmlns:d="DAV:"> - <d:ace> - <d:grant><d:privilege><d:read /></d:privilege></d:grant> - <d:principal><d:href>/principals/notaprincipal</d:href></d:principal> - </d:ace> -</d:acl>'; - $server->httpRequest->setBody($body); - $server->addPlugin(new DAV\Auth\Plugin()); - $server->addPlugin($acl); - - $acl->httpACL($server->httpRequest, $server->httpResponse); - } - - public function testUnknownPrivilege() - { - $this->expectException('Sabre\DAVACL\Exception\NotSupportedPrivilege'); - $tree = [ - new MockACLNode('test', []), - ]; - $acl = new Plugin(); - $server = new DAV\Server($tree); - $server->httpRequest = new HTTP\Request('ACL', '/test'); - $body = '<?xml version="1.0"?> -<d:acl xmlns:d="DAV:"> - <d:ace> - <d:grant><d:privilege><d:bananas /></d:privilege></d:grant> - <d:principal><d:href>/principals/notfound</d:href></d:principal> - </d:ace> -</d:acl>'; - $server->httpRequest->setBody($body); - $server->addPlugin(new DAV\Auth\Plugin()); - $server->addPlugin($acl); - - $acl->httpACL($server->httpRequest, $server->httpResponse); - } - - public function testAbstractPrivilege() - { - $this->expectException('Sabre\DAVACL\Exception\NoAbstract'); - $tree = [ - new MockACLNode('test', []), - ]; - $acl = new Plugin(); - $server = new DAV\Server($tree); - $server->on('getSupportedPrivilegeSet', function ($node, &$supportedPrivilegeSet) { - $supportedPrivilegeSet['{DAV:}foo'] = ['abstract' => true]; - }); - $server->httpRequest = new HTTP\Request('ACL', '/test'); - $body = '<?xml version="1.0"?> -<d:acl xmlns:d="DAV:"> - <d:ace> - <d:grant><d:privilege><d:foo /></d:privilege></d:grant> - <d:principal><d:href>/principals/foo/</d:href></d:principal> - </d:ace> -</d:acl>'; - $server->httpRequest->setBody($body); - $server->addPlugin(new DAV\Auth\Plugin()); - $server->addPlugin($acl); - - $acl->httpACL($server->httpRequest, $server->httpResponse); - } - - public function testUpdateProtectedPrivilege() - { - $this->expectException('Sabre\DAVACL\Exception\AceConflict'); - $oldACL = [ - [ - 'principal' => 'principals/notfound', - 'privilege' => '{DAV:}write', - 'protected' => true, - ], - ]; - - $tree = [ - new MockACLNode('test', $oldACL), - ]; - $acl = new Plugin(); - $server = new DAV\Server($tree); - $server->httpRequest = new HTTP\Request('ACL', '/test'); - $body = '<?xml version="1.0"?> -<d:acl xmlns:d="DAV:"> - <d:ace> - <d:grant><d:privilege><d:read /></d:privilege></d:grant> - <d:principal><d:href>/principals/notfound</d:href></d:principal> - </d:ace> -</d:acl>'; - $server->httpRequest->setBody($body); - $server->addPlugin(new DAV\Auth\Plugin()); - $server->addPlugin($acl); - - $acl->httpACL($server->httpRequest, $server->httpResponse); - } - - public function testUpdateProtectedPrivilege2() - { - $this->expectException('Sabre\DAVACL\Exception\AceConflict'); - $oldACL = [ - [ - 'principal' => 'principals/notfound', - 'privilege' => '{DAV:}write', - 'protected' => true, - ], - ]; - - $tree = [ - new MockACLNode('test', $oldACL), - ]; - $acl = new Plugin(); - $server = new DAV\Server($tree); - $server->httpRequest = new HTTP\Request('ACL', '/test'); - $body = '<?xml version="1.0"?> -<d:acl xmlns:d="DAV:"> - <d:ace> - <d:grant><d:privilege><d:write /></d:privilege></d:grant> - <d:principal><d:href>/principals/foo</d:href></d:principal> - </d:ace> -</d:acl>'; - $server->httpRequest->setBody($body); - $server->addPlugin(new DAV\Auth\Plugin()); - $server->addPlugin($acl); - - $acl->httpACL($server->httpRequest, $server->httpResponse); - } - - public function testUpdateProtectedPrivilege3() - { - $this->expectException('Sabre\DAVACL\Exception\AceConflict'); - $oldACL = [ - [ - 'principal' => 'principals/notfound', - 'privilege' => '{DAV:}write', - 'protected' => true, - ], - ]; - - $tree = [ - new MockACLNode('test', $oldACL), - ]; - $acl = new Plugin(); - $server = new DAV\Server($tree); - $server->httpRequest = new HTTP\Request('ACL', '/test'); - $body = '<?xml version="1.0"?> -<d:acl xmlns:d="DAV:"> - <d:ace> - <d:grant><d:privilege><d:write /></d:privilege></d:grant> - <d:principal><d:href>/principals/notfound</d:href></d:principal> - </d:ace> -</d:acl>'; - $server->httpRequest->setBody($body); - $server->addPlugin(new DAV\Auth\Plugin()); - $server->addPlugin($acl); - - $acl->httpACL($server->httpRequest, $server->httpResponse); - } - - public function testSuccessComplex() - { - $oldACL = [ - [ - 'principal' => 'principals/foo', - 'privilege' => '{DAV:}write', - 'protected' => true, - ], - [ - 'principal' => 'principals/bar', - 'privilege' => '{DAV:}read', - ], - ]; - - $tree = [ - $node = new MockACLNode('test', $oldACL), - new DAV\SimpleCollection('principals', [ - new MockPrincipal('foo', 'principals/foo'), - new MockPrincipal('baz', 'principals/baz'), - ]), - ]; - $acl = new Plugin(); - $server = new DAV\Server($tree); - $server->httpRequest = new HTTP\Request('ACL', '/test'); - $body = '<?xml version="1.0"?> -<d:acl xmlns:d="DAV:"> - <d:ace> - <d:grant><d:privilege><d:write /></d:privilege></d:grant> - <d:principal><d:href>/principals/foo</d:href></d:principal> - <d:protected /> - </d:ace> - <d:ace> - <d:grant><d:privilege><d:write /></d:privilege></d:grant> - <d:principal><d:href>/principals/baz</d:href></d:principal> - </d:ace> -</d:acl>'; - $server->httpRequest->setBody($body); - $server->addPlugin(new DAV\Auth\Plugin()); - $server->addPlugin($acl); - - $this->assertFalse($acl->httpAcl($server->httpRequest, $server->httpResponse)); - - $this->assertEquals([ - [ - 'principal' => 'principals/foo', - 'privilege' => '{DAV:}write', - 'protected' => true, - ], - [ - 'principal' => 'principals/baz', - 'privilege' => '{DAV:}write', - 'protected' => false, - ], - ], $node->getACL()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/AllowAccessTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/AllowAccessTest.php deleted file mode 100644 index 04dd29c04..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/AllowAccessTest.php +++ /dev/null @@ -1,120 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL; - -use Sabre\DAV; - -class AllowAccessTest extends \PHPUnit\Framework\TestCase -{ - /** - * @var DAV\Server - */ - protected $server; - - public function setup(): void - { - $nodes = [ - new DAV\Mock\Collection('testdir', [ - 'file1.txt' => 'contents', - ]), - ]; - - $this->server = new DAV\Server($nodes); - $this->server->addPlugin( - new DAV\Auth\Plugin( - new DAV\Auth\Backend\Mock() - ) - ); - // Login - $this->server->getPlugin('auth')->beforeMethod( - new \Sabre\HTTP\Request('GET', '/'), - new \Sabre\HTTP\Response() - ); - $aclPlugin = new Plugin(); - $this->server->addPlugin($aclPlugin); - } - - public function testGet() - { - $this->server->httpRequest->setMethod('GET'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->assertTrue($this->server->emit('beforeMethod:GET', [$this->server->httpRequest, $this->server->httpResponse])); - } - - public function testGetDoesntExist() - { - $this->server->httpRequest->setMethod('GET'); - $this->server->httpRequest->setUrl('/foo'); - - $this->assertTrue($this->server->emit('beforeMethod:GET', [$this->server->httpRequest, $this->server->httpResponse])); - } - - public function testHEAD() - { - $this->server->httpRequest->setMethod('HEAD'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->assertTrue($this->server->emit('beforeMethod:HEAD', [$this->server->httpRequest, $this->server->httpResponse])); - } - - public function testOPTIONS() - { - $this->server->httpRequest->setMethod('OPTIONS'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->assertTrue($this->server->emit('beforeMethod:OPTIONS', [$this->server->httpRequest, $this->server->httpResponse])); - } - - public function testPUT() - { - $this->server->httpRequest->setMethod('PUT'); - $this->server->httpRequest->setUrl('/testdir/file1.txt'); - - $this->assertTrue($this->server->emit('beforeMethod:PUT', [$this->server->httpRequest, $this->server->httpResponse])); - } - - public function testPROPPATCH() - { - $this->server->httpRequest->setMethod('PROPPATCH'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->assertTrue($this->server->emit('beforeMethod:PROPPATCH', [$this->server->httpRequest, $this->server->httpResponse])); - } - - public function testCOPY() - { - $this->server->httpRequest->setMethod('COPY'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->assertTrue($this->server->emit('beforeMethod:COPY', [$this->server->httpRequest, $this->server->httpResponse])); - } - - public function testMOVE() - { - $this->server->httpRequest->setMethod('MOVE'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->assertTrue($this->server->emit('beforeMethod:MOVE', [$this->server->httpRequest, $this->server->httpResponse])); - } - - public function testLOCK() - { - $this->server->httpRequest->setMethod('LOCK'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->assertTrue($this->server->emit('beforeMethod:LOCK', [$this->server->httpRequest, $this->server->httpResponse])); - } - - public function testBeforeBind() - { - $this->assertTrue($this->server->emit('beforeBind', ['testdir/file'])); - } - - public function testBeforeUnbind() - { - $this->assertTrue($this->server->emit('beforeUnbind', ['testdir'])); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/BlockAccessTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/BlockAccessTest.php deleted file mode 100644 index 566167ef0..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/BlockAccessTest.php +++ /dev/null @@ -1,180 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL; - -use Sabre\DAV; - -class BlockAccessTest extends \PHPUnit\Framework\TestCase -{ - /** - * @var DAV\Server - */ - protected $server; - protected $plugin; - - public function setup(): void - { - $nodes = [ - new DAV\SimpleCollection('testdir'), - ]; - - $this->server = new DAV\Server($nodes); - $this->plugin = new Plugin(); - $this->plugin->setDefaultAcl([]); - $this->server->addPlugin( - new DAV\Auth\Plugin( - new DAV\Auth\Backend\Mock() - ) - ); - // Login - $this->server->getPlugin('auth')->beforeMethod( - new \Sabre\HTTP\Request('GET', '/'), - new \Sabre\HTTP\Response() - ); - $this->server->addPlugin($this->plugin); - } - - public function testGet() - { - $this->expectException('Sabre\DAVACL\Exception\NeedPrivileges'); - $this->server->httpRequest->setMethod('GET'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->server->emit('beforeMethod:GET', [$this->server->httpRequest, $this->server->httpResponse]); - } - - public function testGetDoesntExist() - { - $this->server->httpRequest->setMethod('GET'); - $this->server->httpRequest->setUrl('/foo'); - - $r = $this->server->emit('beforeMethod:GET', [$this->server->httpRequest, $this->server->httpResponse]); - $this->assertTrue($r); - } - - public function testHEAD() - { - $this->expectException('Sabre\DAVACL\Exception\NeedPrivileges'); - $this->server->httpRequest->setMethod('HEAD'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->server->emit('beforeMethod:GET', [$this->server->httpRequest, $this->server->httpResponse]); - } - - public function testOPTIONS() - { - $this->expectException('Sabre\DAVACL\Exception\NeedPrivileges'); - $this->server->httpRequest->setMethod('OPTIONS'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->server->emit('beforeMethod:GET', [$this->server->httpRequest, $this->server->httpResponse]); - } - - public function testPUT() - { - $this->expectException('Sabre\DAVACL\Exception\NeedPrivileges'); - $this->server->httpRequest->setMethod('PUT'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->server->emit('beforeMethod:GET', [$this->server->httpRequest, $this->server->httpResponse]); - } - - public function testPROPPATCH() - { - $this->expectException('Sabre\DAVACL\Exception\NeedPrivileges'); - $this->server->httpRequest->setMethod('PROPPATCH'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->server->emit('beforeMethod:GET', [$this->server->httpRequest, $this->server->httpResponse]); - } - - public function testCOPY() - { - $this->expectException('Sabre\DAVACL\Exception\NeedPrivileges'); - $this->server->httpRequest->setMethod('COPY'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->server->emit('beforeMethod:GET', [$this->server->httpRequest, $this->server->httpResponse]); - } - - public function testMOVE() - { - $this->expectException('Sabre\DAVACL\Exception\NeedPrivileges'); - $this->server->httpRequest->setMethod('MOVE'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->server->emit('beforeMethod:GET', [$this->server->httpRequest, $this->server->httpResponse]); - } - - public function testACL() - { - $this->expectException('Sabre\DAVACL\Exception\NeedPrivileges'); - $this->server->httpRequest->setMethod('ACL'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->server->emit('beforeMethod:GET', [$this->server->httpRequest, $this->server->httpResponse]); - } - - public function testLOCK() - { - $this->expectException('Sabre\DAVACL\Exception\NeedPrivileges'); - $this->server->httpRequest->setMethod('LOCK'); - $this->server->httpRequest->setUrl('/testdir'); - - $this->server->emit('beforeMethod:GET', [$this->server->httpRequest, $this->server->httpResponse]); - } - - public function testBeforeBind() - { - $this->expectException('Sabre\DAVACL\Exception\NeedPrivileges'); - $this->server->emit('beforeBind', ['testdir/file']); - } - - public function testBeforeUnbind() - { - $this->expectException('Sabre\DAVACL\Exception\NeedPrivileges'); - $this->server->emit('beforeUnbind', ['testdir']); - } - - public function testPropFind() - { - $propFind = new DAV\PropFind('testdir', [ - '{DAV:}displayname', - '{DAV:}getcontentlength', - '{DAV:}bar', - '{DAV:}owner', - ]); - - $r = $this->server->emit('propFind', [$propFind, new DAV\SimpleCollection('testdir')]); - $this->assertTrue($r); - - $expected = [ - 200 => [], - 404 => [], - 403 => [ - '{DAV:}displayname' => null, - '{DAV:}getcontentlength' => null, - '{DAV:}bar' => null, - '{DAV:}owner' => null, - ], - ]; - - $this->assertEquals($expected, $propFind->getResultForMultiStatus()); - } - - public function testBeforeGetPropertiesNoListing() - { - $this->plugin->hideNodesFromListings = true; - $propFind = new DAV\PropFind('testdir', [ - '{DAV:}displayname', - '{DAV:}getcontentlength', - '{DAV:}bar', - '{DAV:}owner', - ]); - - $r = $this->server->emit('propFind', [$propFind, new DAV\SimpleCollection('testdir')]); - $this->assertFalse($r); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/AceConflictTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/AceConflictTest.php deleted file mode 100644 index 60fb8f3e8..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/AceConflictTest.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL\Exception; - -use Sabre\DAV; - -class AceConflictTest extends \PHPUnit\Framework\TestCase -{ - public function testSerialize() - { - $ex = new AceConflict('message'); - - $server = new DAV\Server(); - $dom = new \DOMDocument('1.0', 'utf-8'); - $root = $dom->createElementNS('DAV:', 'd:root'); - $dom->appendChild($root); - - $ex->serialize($server, $root); - - $xpaths = [ - '/d:root' => 1, - '/d:root/d:no-ace-conflict' => 1, - ]; - - // Reloading because PHP DOM sucks - $dom2 = new \DOMDocument('1.0', 'utf-8'); - $dom2->loadXML($dom->saveXML()); - - $dxpath = new \DOMXPath($dom2); - $dxpath->registerNamespace('d', 'DAV:'); - foreach ($xpaths as $xpath => $count) { - $this->assertEquals($count, $dxpath->query($xpath)->length, 'Looking for : '.$xpath.', we could only find '.$dxpath->query($xpath)->length.' elements, while we expected '.$count); - } - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NeedPrivilegesExceptionTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NeedPrivilegesExceptionTest.php deleted file mode 100644 index f08e536b5..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NeedPrivilegesExceptionTest.php +++ /dev/null @@ -1,47 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL\Exception; - -use Sabre\DAV; - -class NeedPrivilegesExceptionTest extends \PHPUnit\Framework\TestCase -{ - public function testSerialize() - { - $uri = 'foo'; - $privileges = [ - '{DAV:}read', - '{DAV:}write', - ]; - $ex = new NeedPrivileges($uri, $privileges); - - $server = new DAV\Server(); - $dom = new \DOMDocument('1.0', 'utf-8'); - $root = $dom->createElementNS('DAV:', 'd:root'); - $dom->appendChild($root); - - $ex->serialize($server, $root); - - $xpaths = [ - '/d:root' => 1, - '/d:root/d:need-privileges' => 1, - '/d:root/d:need-privileges/d:resource' => 2, - '/d:root/d:need-privileges/d:resource/d:href' => 2, - '/d:root/d:need-privileges/d:resource/d:privilege' => 2, - '/d:root/d:need-privileges/d:resource/d:privilege/d:read' => 1, - '/d:root/d:need-privileges/d:resource/d:privilege/d:write' => 1, - ]; - - // Reloading because PHP DOM sucks - $dom2 = new \DOMDocument('1.0', 'utf-8'); - $dom2->loadXML($dom->saveXML()); - - $dxpath = new \DOMXPath($dom2); - $dxpath->registerNamespace('d', 'DAV:'); - foreach ($xpaths as $xpath => $count) { - $this->assertEquals($count, $dxpath->query($xpath)->length, 'Looking for : '.$xpath.', we could only find '.$dxpath->query($xpath)->length.' elements, while we expected '.$count); - } - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NoAbstractTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NoAbstractTest.php deleted file mode 100644 index 38e9d8b93..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NoAbstractTest.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL\Exception; - -use Sabre\DAV; - -class NoAbstractTest extends \PHPUnit\Framework\TestCase -{ - public function testSerialize() - { - $ex = new NoAbstract('message'); - - $server = new DAV\Server(); - $dom = new \DOMDocument('1.0', 'utf-8'); - $root = $dom->createElementNS('DAV:', 'd:root'); - $dom->appendChild($root); - - $ex->serialize($server, $root); - - $xpaths = [ - '/d:root' => 1, - '/d:root/d:no-abstract' => 1, - ]; - - // Reloading because PHP DOM sucks - $dom2 = new \DOMDocument('1.0', 'utf-8'); - $dom2->loadXML($dom->saveXML()); - - $dxpath = new \DOMXPath($dom2); - $dxpath->registerNamespace('d', 'DAV:'); - foreach ($xpaths as $xpath => $count) { - $this->assertEquals($count, $dxpath->query($xpath)->length, 'Looking for : '.$xpath.', we could only find '.$dxpath->query($xpath)->length.' elements, while we expected '.$count); - } - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NotRecognizedPrincipalTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NotRecognizedPrincipalTest.php deleted file mode 100644 index 62915ea1d..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NotRecognizedPrincipalTest.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL\Exception; - -use Sabre\DAV; - -class NotRecognizedPrincipalTest extends \PHPUnit\Framework\TestCase -{ - public function testSerialize() - { - $ex = new NotRecognizedPrincipal('message'); - - $server = new DAV\Server(); - $dom = new \DOMDocument('1.0', 'utf-8'); - $root = $dom->createElementNS('DAV:', 'd:root'); - $dom->appendChild($root); - - $ex->serialize($server, $root); - - $xpaths = [ - '/d:root' => 1, - '/d:root/d:recognized-principal' => 1, - ]; - - // Reloading because PHP DOM sucks - $dom2 = new \DOMDocument('1.0', 'utf-8'); - $dom2->loadXML($dom->saveXML()); - - $dxpath = new \DOMXPath($dom2); - $dxpath->registerNamespace('d', 'DAV:'); - foreach ($xpaths as $xpath => $count) { - $this->assertEquals($count, $dxpath->query($xpath)->length, 'Looking for : '.$xpath.', we could only find '.$dxpath->query($xpath)->length.' elements, while we expected '.$count); - } - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NotSupportedPrivilegeTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NotSupportedPrivilegeTest.php deleted file mode 100644 index 668c713d2..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/Exception/NotSupportedPrivilegeTest.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL\Exception; - -use Sabre\DAV; - -class NotSupportedPrivilegeTest extends \PHPUnit\Framework\TestCase -{ - public function testSerialize() - { - $ex = new NotSupportedPrivilege('message'); - - $server = new DAV\Server(); - $dom = new \DOMDocument('1.0', 'utf-8'); - $root = $dom->createElementNS('DAV:', 'd:root'); - $dom->appendChild($root); - - $ex->serialize($server, $root); - - $xpaths = [ - '/d:root' => 1, - '/d:root/d:not-supported-privilege' => 1, - ]; - - // Reloading because PHP DOM sucks - $dom2 = new \DOMDocument('1.0', 'utf-8'); - $dom2->loadXML($dom->saveXML()); - - $dxpath = new \DOMXPath($dom2); - $dxpath->registerNamespace('d', 'DAV:'); - foreach ($xpaths as $xpath => $count) { - $this->assertEquals($count, $dxpath->query($xpath)->length, 'Looking for : '.$xpath.', we could only find '.$dxpath->query($xpath)->length.' elements, while we expected '.$count); - } - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/ExpandPropertiesTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/ExpandPropertiesTest.php deleted file mode 100644 index 8afe6d30f..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/ExpandPropertiesTest.php +++ /dev/null @@ -1,308 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL; - -use Sabre\DAV; -use Sabre\HTTP; - -class ExpandPropertiesTest extends \PHPUnit\Framework\TestCase -{ - public function getServer() - { - $tree = [ - new DAV\Mock\PropertiesCollection('node1', [], [ - '{http://sabredav.org/ns}simple' => 'foo', - '{http://sabredav.org/ns}href' => new DAV\Xml\Property\Href('node2'), - '{DAV:}displayname' => 'Node 1', - ]), - new DAV\Mock\PropertiesCollection('node2', [], [ - '{http://sabredav.org/ns}simple' => 'simple', - '{http://sabredav.org/ns}hreflist' => new DAV\Xml\Property\Href(['node1', 'node3']), - '{DAV:}displayname' => 'Node 2', - ]), - new DAV\Mock\PropertiesCollection('node3', [], [ - '{http://sabredav.org/ns}simple' => 'simple', - '{DAV:}displayname' => 'Node 3', - ]), - ]; - - $fakeServer = new DAV\Server($tree); - $fakeServer->sapi = new HTTP\SapiMock(); - $fakeServer->debugExceptions = true; - $fakeServer->httpResponse = new HTTP\ResponseMock(); - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - // Anyone can do anything - $plugin->setDefaultACL([ - [ - 'principal' => '{DAV:}all', - 'privilege' => '{DAV:}all', - ], - ]); - $this->assertTrue($plugin instanceof Plugin); - - $fakeServer->addPlugin($plugin); - $this->assertEquals($plugin, $fakeServer->getPlugin('acl')); - - return $fakeServer; - } - - public function testSimple() - { - $xml = '<?xml version="1.0"?> -<d:expand-property xmlns:d="DAV:"> - <d:property name="displayname" /> - <d:property name="foo" namespace="http://www.sabredav.org/NS/2010/nonexistant" /> - <d:property name="simple" namespace="http://sabredav.org/ns" /> - <d:property name="href" namespace="http://sabredav.org/ns" /> -</d:expand-property>'; - - $serverVars = [ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_DEPTH' => '0', - 'REQUEST_URI' => '/node1', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody($xml); - - $server = $this->getServer(); - $server->httpRequest = $request; - - $server->exec(); - - $this->assertEquals(207, $server->httpResponse->status, 'Incorrect status code received. Full body: '.$server->httpResponse->getBodyAsString()); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $server->httpResponse->getHeaders()); - - $check = [ - '/d:multistatus', - '/d:multistatus/d:response' => 1, - '/d:multistatus/d:response/d:href' => 1, - '/d:multistatus/d:response/d:propstat' => 2, - '/d:multistatus/d:response/d:propstat/d:prop' => 2, - '/d:multistatus/d:response/d:propstat/d:prop/d:displayname' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:simple' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:href' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:href/d:href' => 1, - ]; - - $xml = simplexml_load_string($server->httpResponse->getBodyAsString()); - $xml->registerXPathNamespace('d', 'DAV:'); - $xml->registerXPathNamespace('s', 'http://sabredav.org/ns'); - foreach ($check as $v1 => $v2) { - $xpath = is_int($v1) ? $v2 : $v1; - - $result = $xml->xpath($xpath); - - $count = 1; - if (!is_int($v1)) { - $count = $v2; - } - - $this->assertEquals($count, count($result), 'we expected '.$count.' appearances of '.$xpath.' . We found '.count($result).'. Full response: '.$server->httpResponse->getBodyAsString()); - } - } - - /** - * @depends testSimple - */ - public function testExpand() - { - $xml = '<?xml version="1.0"?> -<d:expand-property xmlns:d="DAV:"> - <d:property name="href" namespace="http://sabredav.org/ns"> - <d:property name="displayname" /> - </d:property> -</d:expand-property>'; - - $serverVars = [ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_DEPTH' => '0', - 'REQUEST_URI' => '/node1', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody($xml); - - $server = $this->getServer(); - $server->httpRequest = $request; - - $server->exec(); - - $this->assertEquals(207, $server->httpResponse->status, 'Incorrect response status received. Full response body: '.$server->httpResponse->getBodyAsString()); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $server->httpResponse->getHeaders()); - - $check = [ - '/d:multistatus', - '/d:multistatus/d:response' => 1, - '/d:multistatus/d:response/d:href' => 1, - '/d:multistatus/d:response/d:propstat' => 1, - '/d:multistatus/d:response/d:propstat/d:prop' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:href' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response/d:href' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response/d:propstat' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response/d:propstat/d:prop' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:href/d:response/d:propstat/d:prop/d:displayname' => 1, - ]; - - $xml = simplexml_load_string($server->httpResponse->getBodyAsString()); - $xml->registerXPathNamespace('d', 'DAV:'); - $xml->registerXPathNamespace('s', 'http://sabredav.org/ns'); - foreach ($check as $v1 => $v2) { - $xpath = is_int($v1) ? $v2 : $v1; - - $result = $xml->xpath($xpath); - - $count = 1; - if (!is_int($v1)) { - $count = $v2; - } - - $this->assertEquals($count, count($result), 'we expected '.$count.' appearances of '.$xpath.' . We found '.count($result).' Full response body: '.$server->httpResponse->getBodyAsString()); - } - } - - /** - * @depends testSimple - */ - public function testExpandHrefList() - { - $xml = '<?xml version="1.0"?> -<d:expand-property xmlns:d="DAV:"> - <d:property name="hreflist" namespace="http://sabredav.org/ns"> - <d:property name="displayname" /> - </d:property> -</d:expand-property>'; - - $serverVars = [ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_DEPTH' => '0', - 'REQUEST_URI' => '/node2', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody($xml); - - $server = $this->getServer(); - $server->httpRequest = $request; - - $server->exec(); - - $this->assertEquals(207, $server->httpResponse->status); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $server->httpResponse->getHeaders()); - - $check = [ - '/d:multistatus', - '/d:multistatus/d:response' => 1, - '/d:multistatus/d:response/d:href' => 1, - '/d:multistatus/d:response/d:propstat' => 1, - '/d:multistatus/d:response/d:propstat/d:prop' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response' => 2, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:href' => 2, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat' => 2, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop' => 2, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/d:displayname' => 2, - ]; - - $xml = simplexml_load_string($server->httpResponse->getBodyAsString()); - $xml->registerXPathNamespace('d', 'DAV:'); - $xml->registerXPathNamespace('s', 'http://sabredav.org/ns'); - foreach ($check as $v1 => $v2) { - $xpath = is_int($v1) ? $v2 : $v1; - - $result = $xml->xpath($xpath); - - $count = 1; - if (!is_int($v1)) { - $count = $v2; - } - - $this->assertEquals($count, count($result), 'we expected '.$count.' appearances of '.$xpath.' . We found '.count($result)); - } - } - - /** - * @depends testExpand - */ - public function testExpandDeep() - { - $xml = '<?xml version="1.0"?> -<d:expand-property xmlns:d="DAV:"> - <d:property name="hreflist" namespace="http://sabredav.org/ns"> - <d:property name="href" namespace="http://sabredav.org/ns"> - <d:property name="displayname" /> - </d:property> - <d:property name="displayname" /> - </d:property> -</d:expand-property>'; - - $serverVars = [ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_DEPTH' => '0', - 'REQUEST_URI' => '/node2', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody($xml); - - $server = $this->getServer(); - $server->httpRequest = $request; - - $server->exec(); - - $this->assertEquals(207, $server->httpResponse->status); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $server->httpResponse->getHeaders()); - - $check = [ - '/d:multistatus', - '/d:multistatus/d:response' => 1, - '/d:multistatus/d:response/d:href' => 1, - '/d:multistatus/d:response/d:propstat' => 1, - '/d:multistatus/d:response/d:propstat/d:prop' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response' => 2, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:href' => 2, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat' => 3, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop' => 3, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/d:displayname' => 2, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href' => 2, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response/d:href' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response/d:propstat' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response/d:propstat/d:prop' => 1, - '/d:multistatus/d:response/d:propstat/d:prop/s:hreflist/d:response/d:propstat/d:prop/s:href/d:response/d:propstat/d:prop/d:displayname' => 1, - ]; - - $xml = simplexml_load_string($server->httpResponse->getBodyAsString()); - $xml->registerXPathNamespace('d', 'DAV:'); - $xml->registerXPathNamespace('s', 'http://sabredav.org/ns'); - foreach ($check as $v1 => $v2) { - $xpath = is_int($v1) ? $v2 : $v1; - - $result = $xml->xpath($xpath); - - $count = 1; - if (!is_int($v1)) { - $count = $v2; - } - - $this->assertEquals($count, count($result), 'we expected '.$count.' appearances of '.$xpath.' . We found '.count($result)); - } - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/MockACLNode.php b/vendor/sabre/dav/tests/Sabre/DAVACL/MockACLNode.php deleted file mode 100644 index 51411f304..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/MockACLNode.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL; - -use Sabre\DAV; - -class MockACLNode extends DAV\Node implements IACL -{ - public $name; - public $acl; - - public function __construct($name, array $acl = []) - { - $this->name = $name; - $this->acl = $acl; - } - - public function getName() - { - return $this->name; - } - - public function getOwner() - { - return null; - } - - public function getGroup() - { - return null; - } - - public function getACL() - { - return $this->acl; - } - - public function setACL(array $acl) - { - $this->acl = $acl; - } - - public function getSupportedPrivilegeSet() - { - return null; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/MockPrincipal.php b/vendor/sabre/dav/tests/Sabre/DAVACL/MockPrincipal.php deleted file mode 100644 index f67025c5a..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/MockPrincipal.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL; - -use Sabre\DAV; - -class MockPrincipal extends DAV\Node implements IPrincipal -{ - public $name; - public $principalUrl; - public $groupMembership = []; - public $groupMemberSet = []; - - public function __construct($name, $principalUrl, array $groupMembership = [], array $groupMemberSet = []) - { - $this->name = $name; - $this->principalUrl = $principalUrl; - $this->groupMembership = $groupMembership; - $this->groupMemberSet = $groupMemberSet; - } - - public function getName() - { - return $this->name; - } - - public function getDisplayName() - { - return $this->getName(); - } - - public function getAlternateUriSet() - { - return []; - } - - public function getPrincipalUrl() - { - return $this->principalUrl; - } - - public function getGroupMemberSet() - { - return $this->groupMemberSet; - } - - public function getGroupMemberShip() - { - return $this->groupMembership; - } - - public function setGroupMemberSet(array $groupMemberSet) - { - $this->groupMemberSet = $groupMemberSet; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/PluginAdminTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/PluginAdminTest.php deleted file mode 100644 index 048b9f249..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/PluginAdminTest.php +++ /dev/null @@ -1,76 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL; - -use Sabre\DAV; -use Sabre\HTTP; - -class PluginAdminTest extends \PHPUnit\Framework\TestCase -{ - public $server; - - public function setup(): void - { - $principalBackend = new PrincipalBackend\Mock(); - - $tree = [ - new MockACLNode('adminonly', []), - new PrincipalCollection($principalBackend), - ]; - - $this->server = new DAV\Server($tree); - $this->server->sapi = new HTTP\SapiMock(); - $plugin = new DAV\Auth\Plugin(new DAV\Auth\Backend\Mock()); - $this->server->addPlugin($plugin); - } - - public function testNoAdminAccess() - { - $plugin = new Plugin(); - $this->server->addPlugin($plugin); - - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'OPTIONS', - 'HTTP_DEPTH' => 1, - 'REQUEST_URI' => '/adminonly', - ]); - - $response = new HTTP\ResponseMock(); - - $this->server->httpRequest = $request; - $this->server->httpResponse = $response; - - $this->server->exec(); - - $this->assertEquals(403, $response->status); - } - - /** - * @depends testNoAdminAccess - */ - public function testAdminAccess() - { - $plugin = new Plugin(); - $plugin->adminPrincipals = [ - 'principals/admin', - ]; - $this->server->addPlugin($plugin); - - $request = HTTP\Sapi::createFromServerArray([ - 'REQUEST_METHOD' => 'OPTIONS', - 'HTTP_DEPTH' => 1, - 'REQUEST_URI' => '/adminonly', - ]); - - $response = new HTTP\ResponseMock(); - - $this->server->httpRequest = $request; - $this->server->httpResponse = $response; - - $this->server->exec(); - - $this->assertEquals(200, $response->status); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/PluginPropertiesTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/PluginPropertiesTest.php deleted file mode 100644 index 16d3e781e..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/PluginPropertiesTest.php +++ /dev/null @@ -1,399 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL; - -use Sabre\DAV; -use Sabre\HTTP; - -class PluginPropertiesTest extends \PHPUnit\Framework\TestCase -{ - public function testPrincipalCollectionSet() - { - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - $plugin->setDefaultACL([ - [ - 'principal' => '{DAV:}all', - 'privilege' => '{DAV:}all', - ], - ]); - //Anyone can do anything - $plugin->principalCollectionSet = [ - 'principals1', - 'principals2', - ]; - - $requestedProperties = [ - '{DAV:}principal-collection-set', - ]; - - $server = new DAV\Server(new DAV\SimpleCollection('root')); - $server->addPlugin($plugin); - - $result = $server->getPropertiesForPath('', $requestedProperties); - $result = $result[0]; - - $this->assertEquals(1, count($result[200])); - $this->assertArrayHasKey('{DAV:}principal-collection-set', $result[200]); - $this->assertInstanceOf('Sabre\\DAV\\Xml\\Property\\Href', $result[200]['{DAV:}principal-collection-set']); - - $expected = [ - 'principals1/', - 'principals2/', - ]; - - $this->assertEquals($expected, $result[200]['{DAV:}principal-collection-set']->getHrefs()); - } - - public function testCurrentUserPrincipal() - { - $fakeServer = new DAV\Server(); - $plugin = new DAV\Auth\Plugin(new DAV\Auth\Backend\Mock()); - $fakeServer->addPlugin($plugin); - $plugin = new Plugin(); - $plugin->setDefaultACL([ - [ - 'principal' => '{DAV:}all', - 'privilege' => '{DAV:}all', - ], - ]); - $fakeServer->addPlugin($plugin); - - $requestedProperties = [ - '{DAV:}current-user-principal', - ]; - - $result = $fakeServer->getPropertiesForPath('', $requestedProperties); - $result = $result[0]; - - $this->assertEquals(1, count($result[200])); - $this->assertArrayHasKey('{DAV:}current-user-principal', $result[200]); - $this->assertInstanceOf('Sabre\DAVACL\Xml\Property\Principal', $result[200]['{DAV:}current-user-principal']); - $this->assertEquals(Xml\Property\Principal::UNAUTHENTICATED, $result[200]['{DAV:}current-user-principal']->getType()); - - // This will force the login - $fakeServer->emit('beforeMethod:PROPFIND', [$fakeServer->httpRequest, $fakeServer->httpResponse]); - - $result = $fakeServer->getPropertiesForPath('', $requestedProperties); - $result = $result[0]; - - $this->assertEquals(1, count($result[200])); - $this->assertArrayHasKey('{DAV:}current-user-principal', $result[200]); - $this->assertInstanceOf('Sabre\DAVACL\Xml\Property\Principal', $result[200]['{DAV:}current-user-principal']); - $this->assertEquals(Xml\Property\Principal::HREF, $result[200]['{DAV:}current-user-principal']->getType()); - $this->assertEquals('principals/admin/', $result[200]['{DAV:}current-user-principal']->getHref()); - } - - public function testSupportedPrivilegeSet() - { - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - $plugin->setDefaultACL([ - [ - 'principal' => '{DAV:}all', - 'privilege' => '{DAV:}all', - ], - ]); - $server = new DAV\Server(); - $server->addPlugin($plugin); - - $requestedProperties = [ - '{DAV:}supported-privilege-set', - ]; - - $result = $server->getPropertiesForPath('', $requestedProperties); - $result = $result[0]; - - $this->assertEquals(1, count($result[200])); - $this->assertArrayHasKey('{DAV:}supported-privilege-set', $result[200]); - $this->assertInstanceOf('Sabre\\DAVACL\\Xml\\Property\\SupportedPrivilegeSet', $result[200]['{DAV:}supported-privilege-set']); - - $server = new DAV\Server(); - - $prop = $result[200]['{DAV:}supported-privilege-set']; - $result = $server->xml->write('{DAV:}root', $prop); - - $xpaths = [ - '/d:root' => 1, - '/d:root/d:supported-privilege' => 1, - '/d:root/d:supported-privilege/d:privilege' => 1, - '/d:root/d:supported-privilege/d:privilege/d:all' => 1, - '/d:root/d:supported-privilege/d:abstract' => 0, - '/d:root/d:supported-privilege/d:supported-privilege' => 2, - '/d:root/d:supported-privilege/d:supported-privilege/d:privilege' => 2, - '/d:root/d:supported-privilege/d:supported-privilege/d:privilege/d:read' => 1, - '/d:root/d:supported-privilege/d:supported-privilege/d:privilege/d:write' => 1, - '/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege' => 7, - '/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege' => 7, - '/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:read-acl' => 1, - '/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:read-current-user-privilege-set' => 1, - '/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:write-content' => 1, - '/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:write-properties' => 1, - '/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:bind' => 1, - '/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:unbind' => 1, - '/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:privilege/d:unlock' => 1, - '/d:root/d:supported-privilege/d:supported-privilege/d:supported-privilege/d:abstract' => 0, - ]; - - // reloading because php dom sucks - $dom2 = new \DOMDocument('1.0', 'utf-8'); - $dom2->loadXML($result); - - $dxpath = new \DOMXPath($dom2); - $dxpath->registerNamespace('d', 'DAV:'); - foreach ($xpaths as $xpath => $count) { - $this->assertEquals($count, $dxpath->query($xpath)->length, 'Looking for : '.$xpath.', we could only find '.$dxpath->query($xpath)->length.' elements, while we expected '.$count.' Full XML: '.$result); - } - } - - public function testACL() - { - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - $plugin->setDefaultACL([ - [ - 'principal' => '{DAV:}all', - 'privilege' => '{DAV:}all', - ], - ]); - - $nodes = [ - new MockACLNode('foo', [ - [ - 'principal' => 'principals/admin', - 'privilege' => '{DAV:}read', - ], - ]), - new DAV\SimpleCollection('principals', [ - $principal = new MockPrincipal('admin', 'principals/admin'), - ]), - ]; - - $server = new DAV\Server($nodes); - $server->addPlugin($plugin); - $authPlugin = new DAV\Auth\Plugin(new DAV\Auth\Backend\Mock()); - $server->addPlugin($authPlugin); - - // Force login - $authPlugin->beforeMethod(new HTTP\Request('GET', '/'), new HTTP\Response()); - - $requestedProperties = [ - '{DAV:}acl', - ]; - - $result = $server->getPropertiesForPath('foo', $requestedProperties); - $result = $result[0]; - - $this->assertEquals(1, count($result[200]), 'The {DAV:}acl property did not return from the list. Full list: '.print_r($result, true)); - $this->assertArrayHasKey('{DAV:}acl', $result[200]); - $this->assertInstanceOf('Sabre\\DAVACL\\Xml\Property\\Acl', $result[200]['{DAV:}acl']); - } - - public function testACLRestrictions() - { - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - - $nodes = [ - new MockACLNode('foo', [ - [ - 'principal' => 'principals/admin', - 'privilege' => '{DAV:}read', - ], - ]), - new DAV\SimpleCollection('principals', [ - $principal = new MockPrincipal('admin', 'principals/admin'), - ]), - ]; - - $server = new DAV\Server($nodes); - $server->addPlugin($plugin); - $authPlugin = new DAV\Auth\Plugin(new DAV\Auth\Backend\Mock()); - $server->addPlugin($authPlugin); - - // Force login - $authPlugin->beforeMethod(new HTTP\Request('GET', '/'), new HTTP\Response()); - - $requestedProperties = [ - '{DAV:}acl-restrictions', - ]; - - $result = $server->getPropertiesForPath('foo', $requestedProperties); - $result = $result[0]; - - $this->assertEquals(1, count($result[200]), 'The {DAV:}acl-restrictions property did not return from the list. Full list: '.print_r($result, true)); - $this->assertArrayHasKey('{DAV:}acl-restrictions', $result[200]); - $this->assertInstanceOf('Sabre\\DAVACL\\Xml\\Property\\AclRestrictions', $result[200]['{DAV:}acl-restrictions']); - } - - public function testAlternateUriSet() - { - $tree = [ - new DAV\SimpleCollection('principals', [ - $principal = new MockPrincipal('user', 'principals/user'), - ]), - ]; - - $fakeServer = new DAV\Server($tree); - //$plugin = new DAV\Auth\Plugin(new DAV\Auth\MockBackend()) - //$fakeServer->addPlugin($plugin); - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - $plugin->setDefaultACL([ - [ - 'principal' => '{DAV:}all', - 'privilege' => '{DAV:}all', - ], - ]); - $fakeServer->addPlugin($plugin); - - $requestedProperties = [ - '{DAV:}alternate-URI-set', - ]; - $result = $fakeServer->getPropertiesForPath('principals/user', $requestedProperties); - $result = $result[0]; - - $this->assertTrue(isset($result[200])); - $this->assertTrue(isset($result[200]['{DAV:}alternate-URI-set'])); - $this->assertInstanceOf('Sabre\\DAV\\Xml\\Property\\Href', $result[200]['{DAV:}alternate-URI-set']); - - $this->assertEquals([], $result[200]['{DAV:}alternate-URI-set']->getHrefs()); - } - - public function testPrincipalURL() - { - $tree = [ - new DAV\SimpleCollection('principals', [ - $principal = new MockPrincipal('user', 'principals/user'), - ]), - ]; - - $fakeServer = new DAV\Server($tree); - //$plugin = new DAV\Auth\Plugin(new DAV\Auth\MockBackend()); - //$fakeServer->addPlugin($plugin); - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - $plugin->setDefaultACL([ - [ - 'principal' => '{DAV:}all', - 'privilege' => '{DAV:}all', - ], - ]); - $fakeServer->addPlugin($plugin); - - $requestedProperties = [ - '{DAV:}principal-URL', - ]; - - $result = $fakeServer->getPropertiesForPath('principals/user', $requestedProperties); - $result = $result[0]; - - $this->assertTrue(isset($result[200])); - $this->assertTrue(isset($result[200]['{DAV:}principal-URL'])); - $this->assertInstanceOf('Sabre\\DAV\\Xml\\Property\\Href', $result[200]['{DAV:}principal-URL']); - - $this->assertEquals('principals/user/', $result[200]['{DAV:}principal-URL']->getHref()); - } - - public function testGroupMemberSet() - { - $tree = [ - new DAV\SimpleCollection('principals', [ - $principal = new MockPrincipal('user', 'principals/user'), - ]), - ]; - - $fakeServer = new DAV\Server($tree); - //$plugin = new DAV\Auth\Plugin(new DAV\Auth\MockBackend()); - //$fakeServer->addPlugin($plugin); - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - $plugin->setDefaultACL([ - [ - 'principal' => '{DAV:}all', - 'privilege' => '{DAV:}all', - ], - ]); - $fakeServer->addPlugin($plugin); - - $requestedProperties = [ - '{DAV:}group-member-set', - ]; - - $result = $fakeServer->getPropertiesForPath('principals/user', $requestedProperties); - $result = $result[0]; - - $this->assertTrue(isset($result[200])); - $this->assertTrue(isset($result[200]['{DAV:}group-member-set'])); - $this->assertInstanceOf('Sabre\\DAV\\Xml\\Property\\Href', $result[200]['{DAV:}group-member-set']); - - $this->assertEquals([], $result[200]['{DAV:}group-member-set']->getHrefs()); - } - - public function testGroupMemberShip() - { - $tree = [ - new DAV\SimpleCollection('principals', [ - $principal = new MockPrincipal('user', 'principals/user'), - ]), - ]; - - $fakeServer = new DAV\Server($tree); - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - $fakeServer->addPlugin($plugin); - $plugin->setDefaultACL([ - [ - 'principal' => '{DAV:}all', - 'privilege' => '{DAV:}all', - ], - ]); - - $requestedProperties = [ - '{DAV:}group-membership', - ]; - - $result = $fakeServer->getPropertiesForPath('principals/user', $requestedProperties); - $result = $result[0]; - - $this->assertTrue(isset($result[200])); - $this->assertTrue(isset($result[200]['{DAV:}group-membership'])); - $this->assertInstanceOf('Sabre\\DAV\\Xml\\Property\\Href', $result[200]['{DAV:}group-membership']); - - $this->assertEquals([], $result[200]['{DAV:}group-membership']->getHrefs()); - } - - public function testGetDisplayName() - { - $tree = [ - new DAV\SimpleCollection('principals', [ - $principal = new MockPrincipal('user', 'principals/user'), - ]), - ]; - - $fakeServer = new DAV\Server($tree); - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - $fakeServer->addPlugin($plugin); - $plugin->setDefaultACL([ - [ - 'principal' => '{DAV:}all', - 'privilege' => '{DAV:}all', - ], - ]); - - $requestedProperties = [ - '{DAV:}displayname', - ]; - - $result = $fakeServer->getPropertiesForPath('principals/user', $requestedProperties); - $result = $result[0]; - - $this->assertTrue(isset($result[200])); - $this->assertTrue(isset($result[200]['{DAV:}displayname'])); - - $this->assertEquals('user', $result[200]['{DAV:}displayname']); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/PluginUpdatePropertiesTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/PluginUpdatePropertiesTest.php deleted file mode 100644 index e6796e014..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/PluginUpdatePropertiesTest.php +++ /dev/null @@ -1,111 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL; - -use Sabre\DAV; - -class PluginUpdatePropertiesTest extends \PHPUnit\Framework\TestCase -{ - public function testUpdatePropertiesPassthrough() - { - $tree = [ - new DAV\SimpleCollection('foo'), - ]; - $server = new DAV\Server($tree); - $server->addPlugin(new DAV\Auth\Plugin()); - $server->addPlugin(new Plugin()); - - $result = $server->updateProperties('foo', [ - '{DAV:}foo' => 'bar', - ]); - - $expected = [ - '{DAV:}foo' => 403, - ]; - - $this->assertEquals($expected, $result); - } - - public function testRemoveGroupMembers() - { - $tree = [ - new MockPrincipal('foo', 'foo'), - ]; - $server = new DAV\Server($tree); - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - $server->addPlugin($plugin); - - $result = $server->updateProperties('foo', [ - '{DAV:}group-member-set' => null, - ]); - - $expected = [ - '{DAV:}group-member-set' => 204, - ]; - - $this->assertEquals($expected, $result); - $this->assertEquals([], $tree[0]->getGroupMemberSet()); - } - - public function testSetGroupMembers() - { - $tree = [ - new MockPrincipal('foo', 'foo'), - ]; - $server = new DAV\Server($tree); - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - $server->addPlugin($plugin); - - $result = $server->updateProperties('foo', [ - '{DAV:}group-member-set' => new DAV\Xml\Property\Href(['/bar', '/baz'], true), - ]); - - $expected = [ - '{DAV:}group-member-set' => 200, - ]; - - $this->assertEquals($expected, $result); - $this->assertEquals(['bar', 'baz'], $tree[0]->getGroupMemberSet()); - } - - public function testSetBadValue() - { - $this->expectException('Sabre\DAV\Exception'); - $tree = [ - new MockPrincipal('foo', 'foo'), - ]; - $server = new DAV\Server($tree); - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - $server->addPlugin($plugin); - - $result = $server->updateProperties('foo', [ - '{DAV:}group-member-set' => new \StdClass(), - ]); - } - - public function testSetBadNode() - { - $tree = [ - new DAV\SimpleCollection('foo'), - ]; - $server = new DAV\Server($tree); - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - $server->addPlugin($plugin); - - $result = $server->updateProperties('foo', [ - '{DAV:}group-member-set' => new DAV\Xml\Property\Href(['/bar', '/baz'], false), - ]); - - $expected = [ - '{DAV:}group-member-set' => 403, - ]; - - $this->assertEquals($expected, $result); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/AbstractPDOTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/AbstractPDOTest.php deleted file mode 100644 index b18ab9488..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/AbstractPDOTest.php +++ /dev/null @@ -1,219 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL\PrincipalBackend; - -use Sabre\DAV; - -abstract class AbstractPDOTest extends \PHPUnit\Framework\TestCase -{ - use DAV\DbTestHelperTrait; - - public function setup(): void - { - $this->dropTables(['principals', 'groupmembers']); - $this->createSchema('principals'); - - $pdo = $this->getPDO(); - - $pdo->query("INSERT INTO principals (uri,email,displayname) VALUES ('principals/user','user@example.org','User')"); - $pdo->query("INSERT INTO principals (uri,email,displayname) VALUES ('principals/group','group@example.org','Group')"); - - $pdo->query('INSERT INTO groupmembers (principal_id,member_id) VALUES (5,4)'); - } - - public function testConstruct() - { - $pdo = $this->getPDO(); - $backend = new PDO($pdo); - $this->assertTrue($backend instanceof PDO); - } - - /** - * @depends testConstruct - */ - public function testGetPrincipalsByPrefix() - { - $pdo = $this->getPDO(); - $backend = new PDO($pdo); - - $expected = [ - [ - 'uri' => 'principals/admin', - '{http://sabredav.org/ns}email-address' => 'admin@example.org', - '{DAV:}displayname' => 'Administrator', - ], - [ - 'uri' => 'principals/user', - '{http://sabredav.org/ns}email-address' => 'user@example.org', - '{DAV:}displayname' => 'User', - ], - [ - 'uri' => 'principals/group', - '{http://sabredav.org/ns}email-address' => 'group@example.org', - '{DAV:}displayname' => 'Group', - ], - ]; - - $this->assertEquals($expected, $backend->getPrincipalsByPrefix('principals')); - $this->assertEquals([], $backend->getPrincipalsByPrefix('foo')); - } - - /** - * @depends testConstruct - */ - public function testGetPrincipalByPath() - { - $pdo = $this->getPDO(); - $backend = new PDO($pdo); - - $expected = [ - 'id' => 4, - 'uri' => 'principals/user', - '{http://sabredav.org/ns}email-address' => 'user@example.org', - '{DAV:}displayname' => 'User', - ]; - - $this->assertEquals($expected, $backend->getPrincipalByPath('principals/user')); - $this->assertEquals(null, $backend->getPrincipalByPath('foo')); - } - - public function testGetGroupMemberSet() - { - $pdo = $this->getPDO(); - $backend = new PDO($pdo); - $expected = ['principals/user']; - - $this->assertEquals($expected, $backend->getGroupMemberSet('principals/group')); - } - - public function testGetGroupMembership() - { - $pdo = $this->getPDO(); - $backend = new PDO($pdo); - $expected = ['principals/group']; - - $this->assertEquals($expected, $backend->getGroupMembership('principals/user')); - } - - public function testSetGroupMemberSet() - { - $pdo = $this->getPDO(); - - // Start situation - $backend = new PDO($pdo); - $this->assertEquals(['principals/user'], $backend->getGroupMemberSet('principals/group')); - - // Removing all principals - $backend->setGroupMemberSet('principals/group', []); - $this->assertEquals([], $backend->getGroupMemberSet('principals/group')); - - // Adding principals again - $backend->setGroupMemberSet('principals/group', ['principals/user']); - $this->assertEquals(['principals/user'], $backend->getGroupMemberSet('principals/group')); - } - - public function testSearchPrincipals() - { - $pdo = $this->getPDO(); - - $backend = new PDO($pdo); - - $result = $backend->searchPrincipals('principals', ['{DAV:}blabla' => 'foo']); - $this->assertEquals([], $result); - - $result = $backend->searchPrincipals('principals', ['{DAV:}displayname' => 'ou']); - $this->assertEquals(['principals/group'], $result); - - $result = $backend->searchPrincipals('principals', ['{DAV:}displayname' => 'UsEr', '{http://sabredav.org/ns}email-address' => 'USER@EXAMPLE']); - $this->assertEquals(['principals/user'], $result); - - $result = $backend->searchPrincipals('mom', ['{DAV:}displayname' => 'UsEr', '{http://sabredav.org/ns}email-address' => 'USER@EXAMPLE']); - $this->assertEquals([], $result); - } - - public function testUpdatePrincipal() - { - $pdo = $this->getPDO(); - $backend = new PDO($pdo); - - $propPatch = new DAV\PropPatch([ - '{DAV:}displayname' => 'pietje', - ]); - - $backend->updatePrincipal('principals/user', $propPatch); - $result = $propPatch->commit(); - - $this->assertTrue($result); - - $this->assertEquals([ - 'id' => 4, - 'uri' => 'principals/user', - '{DAV:}displayname' => 'pietje', - '{http://sabredav.org/ns}email-address' => 'user@example.org', - ], $backend->getPrincipalByPath('principals/user')); - } - - public function testUpdatePrincipalUnknownField() - { - $pdo = $this->getPDO(); - $backend = new PDO($pdo); - - $propPatch = new DAV\PropPatch([ - '{DAV:}displayname' => 'pietje', - '{DAV:}unknown' => 'foo', - ]); - - $backend->updatePrincipal('principals/user', $propPatch); - $result = $propPatch->commit(); - - $this->assertFalse($result); - - $this->assertEquals([ - '{DAV:}displayname' => 424, - '{DAV:}unknown' => 403, - ], $propPatch->getResult()); - - $this->assertEquals([ - 'id' => '4', - 'uri' => 'principals/user', - '{DAV:}displayname' => 'User', - '{http://sabredav.org/ns}email-address' => 'user@example.org', - ], $backend->getPrincipalByPath('principals/user')); - } - - public function testFindByUriUnknownScheme() - { - $pdo = $this->getPDO(); - $backend = new PDO($pdo); - $this->assertNull($backend->findByUri('http://foo', 'principals')); - } - - public function testFindByUriWithMailtoAddress() - { - $pdo = $this->getPDO(); - $backend = new PDO($pdo); - $this->assertEquals( - 'principals/user', - $backend->findByUri('mailto:user@example.org', 'principals') - ); - } - - public function testFindByUriWithUri() - { - $pdo = $this->getPDO(); - $backend = new PDO($pdo); - $this->assertEquals( - 'principals/user', - $backend->findByUri('principals/user', 'principals') - ); - } - - public function testFindByUriWithUnknownUri() - { - $pdo = $this->getPDO(); - $backend = new PDO($pdo); - $this->assertNull($backend->findByUri('principals/other', 'principals')); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/Mock.php b/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/Mock.php deleted file mode 100644 index 5f0434579..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/Mock.php +++ /dev/null @@ -1,158 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL\PrincipalBackend; - -class Mock extends AbstractBackend -{ - public $groupMembers = []; - public $principals; - - public function __construct(array $principals = null) - { - $this->principals = $principals; - - if (is_null($principals)) { - $this->principals = [ - [ - 'uri' => 'principals/user1', - '{DAV:}displayname' => 'User 1', - '{http://sabredav.org/ns}email-address' => 'user1.sabredav@sabredav.org', - '{http://sabredav.org/ns}vcard-url' => 'addressbooks/user1/book1/vcard1.vcf', - ], - [ - 'uri' => 'principals/admin', - '{DAV:}displayname' => 'Admin', - ], - [ - 'uri' => 'principals/user2', - '{DAV:}displayname' => 'User 2', - '{http://sabredav.org/ns}email-address' => 'user2.sabredav@sabredav.org', - ], - ]; - } - } - - public function getPrincipalsByPrefix($prefix) - { - $prefix = trim($prefix, '/'); - if ($prefix) { - $prefix .= '/'; - } - $return = []; - - foreach ($this->principals as $principal) { - if ($prefix && 0 !== strpos($principal['uri'], $prefix)) { - continue; - } - - $return[] = $principal; - } - - return $return; - } - - public function addPrincipal(array $principal) - { - $this->principals[] = $principal; - } - - public function getPrincipalByPath($path) - { - foreach ($this->getPrincipalsByPrefix('principals') as $principal) { - if ($principal['uri'] === $path) { - return $principal; - } - } - } - - public function searchPrincipals($prefixPath, array $searchProperties, $test = 'allof') - { - $matches = []; - foreach ($this->getPrincipalsByPrefix($prefixPath) as $principal) { - foreach ($searchProperties as $key => $value) { - if (!isset($principal[$key])) { - continue 2; - } - if (false === mb_stripos($principal[$key], $value, 0, 'UTF-8')) { - continue 2; - } - - // We have a match for this searchProperty! - if ('allof' === $test) { - continue; - } else { - break; - } - } - $matches[] = $principal['uri']; - } - - return $matches; - } - - public function getGroupMemberSet($path) - { - return isset($this->groupMembers[$path]) ? $this->groupMembers[$path] : []; - } - - public function getGroupMembership($path) - { - $membership = []; - foreach ($this->groupMembers as $group => $members) { - if (in_array($path, $members)) { - $membership[] = $group; - } - } - - return $membership; - } - - public function setGroupMemberSet($path, array $members) - { - $this->groupMembers[$path] = $members; - } - - /** - * Updates one ore more webdav properties on a principal. - * - * The list of mutations is stored in a Sabre\DAV\PropPatch object. - * To do the actual updates, you must tell this object which properties - * you're going to process with the handle() method. - * - * Calling the handle method is like telling the PropPatch object "I - * promise I can handle updating this property". - * - * Read the PropPatch documentation for more info and examples. - * - * @param string $path - */ - public function updatePrincipal($path, \Sabre\DAV\PropPatch $propPatch) - { - $value = null; - foreach ($this->principals as $principalIndex => $value) { - if ($value['uri'] === $path) { - $principal = $value; - break; - } - } - if (!$principal) { - return; - } - - $propPatch->handleRemaining(function ($mutations) use ($principal, $principalIndex) { - foreach ($mutations as $prop => $value) { - if (is_null($value) && isset($principal[$prop])) { - unset($principal[$prop]); - } else { - $principal[$prop] = $value; - } - } - - $this->principals[$principalIndex] = $principal; - - return true; - }); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/PDOMySQLTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/PDOMySQLTest.php deleted file mode 100644 index 54795cf4d..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/PDOMySQLTest.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL\PrincipalBackend; - -class PDOMySQLTest extends AbstractPDOTest -{ - public $driver = 'mysql'; -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/PDOSqliteTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/PDOSqliteTest.php deleted file mode 100644 index 549e0bd60..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalBackend/PDOSqliteTest.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL\PrincipalBackend; - -class PDOSqliteTest extends AbstractPDOTest -{ - public $driver = 'sqlite'; -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalCollectionTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalCollectionTest.php deleted file mode 100644 index 2777281a8..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalCollectionTest.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL; - -class PrincipalCollectionTest extends \PHPUnit\Framework\TestCase -{ - public function testBasic() - { - $backend = new PrincipalBackend\Mock(); - $pc = new PrincipalCollection($backend); - $this->assertTrue($pc instanceof PrincipalCollection); - - $this->assertEquals('principals', $pc->getName()); - } - - /** - * @depends testBasic - */ - public function testGetChildren() - { - $backend = new PrincipalBackend\Mock(); - $pc = new PrincipalCollection($backend); - - $children = $pc->getChildren(); - $this->assertTrue(is_array($children)); - - foreach ($children as $child) { - $this->assertTrue($child instanceof IPrincipal); - } - } - - /** - * @depends testBasic - */ - public function testGetChildrenDisable() - { - $this->expectException('Sabre\DAV\Exception\MethodNotAllowed'); - $backend = new PrincipalBackend\Mock(); - $pc = new PrincipalCollection($backend); - $pc->disableListing = true; - - $children = $pc->getChildren(); - } - - public function testFindByUri() - { - $backend = new PrincipalBackend\Mock(); - $pc = new PrincipalCollection($backend); - $this->assertEquals('principals/user1', $pc->findByUri('mailto:user1.sabredav@sabredav.org')); - $this->assertNull($pc->findByUri('mailto:fake.user.sabredav@sabredav.org')); - $this->assertNull($pc->findByUri('')); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalPropertySearchTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalPropertySearchTest.php deleted file mode 100644 index 6883f25b4..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalPropertySearchTest.php +++ /dev/null @@ -1,389 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL; - -use Sabre\DAV; -use Sabre\HTTP; - -class PrincipalPropertySearchTest extends \PHPUnit\Framework\TestCase -{ - public function getServer() - { - $backend = new PrincipalBackend\Mock(); - - $dir = new DAV\SimpleCollection('root'); - $principals = new PrincipalCollection($backend); - $dir->addChild($principals); - - $fakeServer = new DAV\Server($dir); - $fakeServer->sapi = new HTTP\SapiMock(); - $fakeServer->httpResponse = new HTTP\ResponseMock(); - $fakeServer->debugExceptions = true; - $plugin = new MockPlugin(); - $plugin->allowAccessToNodesWithoutACL = true; - $plugin->allowUnauthenticatedAccess = false; - - $this->assertTrue($plugin instanceof Plugin); - $fakeServer->addPlugin($plugin); - $this->assertEquals($plugin, $fakeServer->getPlugin('acl')); - - return $fakeServer; - } - - public function testDepth1() - { - $xml = '<?xml version="1.0"?> -<d:principal-property-search xmlns:d="DAV:"> - <d:property-search> - <d:prop> - <d:displayname /> - </d:prop> - <d:match>user</d:match> - </d:property-search> - <d:prop> - <d:displayname /> - <d:getcontentlength /> - </d:prop> -</d:principal-property-search>'; - - $serverVars = [ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_DEPTH' => '1', - 'REQUEST_URI' => '/principals', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody($xml); - - $server = $this->getServer(); - $server->httpRequest = $request; - - $server->exec(); - - $this->assertEquals(400, $server->httpResponse->getStatus(), $server->httpResponse->getBodyAsString()); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $server->httpResponse->getHeaders()); - } - - public function testUnknownSearchField() - { - $xml = '<?xml version="1.0"?> -<d:principal-property-search xmlns:d="DAV:"> - <d:property-search> - <d:prop> - <d:yourmom /> - </d:prop> - <d:match>user</d:match> - </d:property-search> - <d:prop> - <d:displayname /> - <d:getcontentlength /> - </d:prop> -</d:principal-property-search>'; - - $serverVars = [ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_DEPTH' => '0', - 'REQUEST_URI' => '/principals', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody($xml); - - $server = $this->getServer(); - $server->httpRequest = $request; - - $server->exec(); - - $this->assertEquals(207, $server->httpResponse->getStatus(), 'Full body: '.$server->httpResponse->getBodyAsString()); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - 'Vary' => ['Brief,Prefer'], - ], $server->httpResponse->getHeaders()); - } - - public function testCorrect() - { - $xml = '<?xml version="1.0"?> -<d:principal-property-search xmlns:d="DAV:"> - <d:apply-to-principal-collection-set /> - <d:property-search> - <d:prop> - <d:displayname /> - </d:prop> - <d:match>user</d:match> - </d:property-search> - <d:prop> - <d:displayname /> - <d:getcontentlength /> - </d:prop> -</d:principal-property-search>'; - - $serverVars = [ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_DEPTH' => '0', - 'REQUEST_URI' => '/', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody($xml); - - $server = $this->getServer(); - $server->httpRequest = $request; - - $server->exec(); - - $bodyAsString = $server->httpResponse->getBodyAsString(); - $this->assertEquals(207, $server->httpResponse->status, $bodyAsString); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - 'Vary' => ['Brief,Prefer'], - ], $server->httpResponse->getHeaders()); - - $check = [ - '/d:multistatus', - '/d:multistatus/d:response' => 2, - '/d:multistatus/d:response/d:href' => 2, - '/d:multistatus/d:response/d:propstat' => 4, - '/d:multistatus/d:response/d:propstat/d:prop' => 4, - '/d:multistatus/d:response/d:propstat/d:prop/d:displayname' => 2, - '/d:multistatus/d:response/d:propstat/d:prop/d:getcontentlength' => 2, - '/d:multistatus/d:response/d:propstat/d:status' => 4, - ]; - - $xml = simplexml_load_string($bodyAsString); - $xml->registerXPathNamespace('d', 'DAV:'); - foreach ($check as $v1 => $v2) { - $xpath = is_int($v1) ? $v2 : $v1; - - $result = $xml->xpath($xpath); - - $count = 1; - if (!is_int($v1)) { - $count = $v2; - } - - $this->assertEquals($count, count($result), 'we expected '.$count.' appearances of '.$xpath.' . We found '.count($result).'. Full response body: '.$server->httpResponse->getBodyAsString()); - } - } - - public function testAND() - { - $xml = '<?xml version="1.0"?> -<d:principal-property-search xmlns:d="DAV:"> - <d:apply-to-principal-collection-set /> - <d:property-search> - <d:prop> - <d:displayname /> - </d:prop> - <d:match>user</d:match> - </d:property-search> - <d:property-search> - <d:prop> - <d:foo /> - </d:prop> - <d:match>bar</d:match> - </d:property-search> - <d:prop> - <d:displayname /> - <d:getcontentlength /> - </d:prop> -</d:principal-property-search>'; - - $serverVars = [ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_DEPTH' => '0', - 'REQUEST_URI' => '/', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody($xml); - - $server = $this->getServer(); - $server->httpRequest = $request; - - $server->exec(); - - $bodyAsString = $server->httpResponse->getBodyAsString(); - $this->assertEquals(207, $server->httpResponse->status, $bodyAsString); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - 'Vary' => ['Brief,Prefer'], - ], $server->httpResponse->getHeaders()); - - $check = [ - '/d:multistatus', - '/d:multistatus/d:response' => 0, - '/d:multistatus/d:response/d:href' => 0, - '/d:multistatus/d:response/d:propstat' => 0, - '/d:multistatus/d:response/d:propstat/d:prop' => 0, - '/d:multistatus/d:response/d:propstat/d:prop/d:displayname' => 0, - '/d:multistatus/d:response/d:propstat/d:prop/d:getcontentlength' => 0, - '/d:multistatus/d:response/d:propstat/d:status' => 0, - ]; - - $xml = simplexml_load_string($bodyAsString); - $xml->registerXPathNamespace('d', 'DAV:'); - foreach ($check as $v1 => $v2) { - $xpath = is_int($v1) ? $v2 : $v1; - - $result = $xml->xpath($xpath); - - $count = 1; - if (!is_int($v1)) { - $count = $v2; - } - - $this->assertEquals($count, count($result), 'we expected '.$count.' appearances of '.$xpath.' . We found '.count($result).'. Full response body: '.$server->httpResponse->getBodyAsString()); - } - } - - public function testOR() - { - $xml = '<?xml version="1.0"?> -<d:principal-property-search xmlns:d="DAV:" test="anyof"> - <d:apply-to-principal-collection-set /> - <d:property-search> - <d:prop> - <d:displayname /> - </d:prop> - <d:match>user</d:match> - </d:property-search> - <d:property-search> - <d:prop> - <d:foo /> - </d:prop> - <d:match>bar</d:match> - </d:property-search> - <d:prop> - <d:displayname /> - <d:getcontentlength /> - </d:prop> -</d:principal-property-search>'; - - $serverVars = [ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_DEPTH' => '0', - 'REQUEST_URI' => '/', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody($xml); - - $server = $this->getServer(); - $server->httpRequest = $request; - - $server->exec(); - - $bodyAsString = $server->httpResponse->getBodyAsString(); - $this->assertEquals(207, $server->httpResponse->status, $bodyAsString); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - 'Vary' => ['Brief,Prefer'], - ], $server->httpResponse->getHeaders()); - - $check = [ - '/d:multistatus', - '/d:multistatus/d:response' => 2, - '/d:multistatus/d:response/d:href' => 2, - '/d:multistatus/d:response/d:propstat' => 4, - '/d:multistatus/d:response/d:propstat/d:prop' => 4, - '/d:multistatus/d:response/d:propstat/d:prop/d:displayname' => 2, - '/d:multistatus/d:response/d:propstat/d:prop/d:getcontentlength' => 2, - '/d:multistatus/d:response/d:propstat/d:status' => 4, - ]; - - $xml = simplexml_load_string($bodyAsString); - $xml->registerXPathNamespace('d', 'DAV:'); - foreach ($check as $v1 => $v2) { - $xpath = is_int($v1) ? $v2 : $v1; - - $result = $xml->xpath($xpath); - - $count = 1; - if (!is_int($v1)) { - $count = $v2; - } - - $this->assertEquals($count, count($result), 'we expected '.$count.' appearances of '.$xpath.' . We found '.count($result).'. Full response body: '.$server->httpResponse->getBodyAsString()); - } - } - - public function testWrongUri() - { - $xml = '<?xml version="1.0"?> -<d:principal-property-search xmlns:d="DAV:"> - <d:property-search> - <d:prop> - <d:displayname /> - </d:prop> - <d:match>user</d:match> - </d:property-search> - <d:prop> - <d:displayname /> - <d:getcontentlength /> - </d:prop> -</d:principal-property-search>'; - - $serverVars = [ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_DEPTH' => '0', - 'REQUEST_URI' => '/', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody($xml); - - $server = $this->getServer(); - $server->httpRequest = $request; - - $server->exec(); - - $bodyAsString = $server->httpResponse->getBodyAsString(); - $this->assertEquals(207, $server->httpResponse->status, $bodyAsString); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - 'Vary' => ['Brief,Prefer'], - ], $server->httpResponse->getHeaders()); - - $check = [ - '/d:multistatus', - '/d:multistatus/d:response' => 0, - ]; - - $xml = simplexml_load_string($bodyAsString); - $xml->registerXPathNamespace('d', 'DAV:'); - foreach ($check as $v1 => $v2) { - $xpath = is_int($v1) ? $v2 : $v1; - - $result = $xml->xpath($xpath); - - $count = 1; - if (!is_int($v1)) { - $count = $v2; - } - - $this->assertEquals($count, count($result), 'we expected '.$count.' appearances of '.$xpath.' . We found '.count($result).'. Full response body: '.$server->httpResponse->getBodyAsString()); - } - } -} - -class MockPlugin extends Plugin -{ - public function getCurrentUserPrivilegeSet($node) - { - return [ - '{DAV:}read', - '{DAV:}write', - ]; - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalSearchPropertySetTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalSearchPropertySetTest.php deleted file mode 100644 index ec834fe1a..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalSearchPropertySetTest.php +++ /dev/null @@ -1,135 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL; - -use Sabre\DAV; -use Sabre\HTTP; - -class PrincipalSearchPropertySetTest extends \PHPUnit\Framework\TestCase -{ - public function getServer() - { - $backend = new PrincipalBackend\Mock(); - - $dir = new DAV\SimpleCollection('root'); - $principals = new PrincipalCollection($backend); - $dir->addChild($principals); - - $fakeServer = new DAV\Server($dir); - $fakeServer->sapi = new HTTP\SapiMock(); - $fakeServer->httpResponse = new HTTP\ResponseMock(); - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - $this->assertTrue($plugin instanceof Plugin); - $fakeServer->addPlugin($plugin); - $this->assertEquals($plugin, $fakeServer->getPlugin('acl')); - - return $fakeServer; - } - - public function testDepth1() - { - $xml = '<?xml version="1.0"?> -<d:principal-search-property-set xmlns:d="DAV:" />'; - - $serverVars = [ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_DEPTH' => '1', - 'REQUEST_URI' => '/principals', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody($xml); - - $server = $this->getServer(); - $server->httpRequest = $request; - - $server->exec(); - - $this->assertEquals(400, $server->httpResponse->status); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $server->httpResponse->getHeaders()); - } - - public function testDepthIncorrectXML() - { - $xml = '<?xml version="1.0"?> -<d:principal-search-property-set xmlns:d="DAV:"><d:ohell /></d:principal-search-property-set>'; - - $serverVars = [ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_DEPTH' => '0', - 'REQUEST_URI' => '/principals', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody($xml); - - $server = $this->getServer(); - $server->httpRequest = $request; - - $server->exec(); - - $this->assertEquals(400, $server->httpResponse->status, $server->httpResponse->getBodyAsString()); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $server->httpResponse->getHeaders()); - } - - public function testCorrect() - { - $xml = '<?xml version="1.0"?> -<d:principal-search-property-set xmlns:d="DAV:"/>'; - - $serverVars = [ - 'REQUEST_METHOD' => 'REPORT', - 'HTTP_DEPTH' => '0', - 'REQUEST_URI' => '/principals', - ]; - - $request = HTTP\Sapi::createFromServerArray($serverVars); - $request->setBody($xml); - - $server = $this->getServer(); - $server->httpRequest = $request; - - $server->exec(); - - $bodyAsString = $server->httpResponse->getBodyAsString(); - $this->assertEquals(200, $server->httpResponse->status, $bodyAsString); - $this->assertEquals([ - 'X-Sabre-Version' => [DAV\Version::VERSION], - 'Content-Type' => ['application/xml; charset=utf-8'], - ], $server->httpResponse->getHeaders()); - - $check = [ - '/d:principal-search-property-set', - '/d:principal-search-property-set/d:principal-search-property' => 2, - '/d:principal-search-property-set/d:principal-search-property/d:prop' => 2, - '/d:principal-search-property-set/d:principal-search-property/d:prop/d:displayname' => 1, - '/d:principal-search-property-set/d:principal-search-property/d:prop/s:email-address' => 1, - '/d:principal-search-property-set/d:principal-search-property/d:description' => 2, - ]; - - $xml = simplexml_load_string($bodyAsString); - $xml->registerXPathNamespace('d', 'DAV:'); - $xml->registerXPathNamespace('s', 'http://sabredav.org/ns'); - foreach ($check as $v1 => $v2) { - $xpath = is_int($v1) ? $v2 : $v1; - - $result = $xml->xpath($xpath); - - $count = 1; - if (!is_int($v1)) { - $count = $v2; - } - - $this->assertEquals($count, count($result), 'we expected '.$count.' appearances of '.$xpath.' . We found '.count($result).'. Full response body: '.$bodyAsString); - } - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalTest.php deleted file mode 100644 index 7e1656a15..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/PrincipalTest.php +++ /dev/null @@ -1,192 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL; - -use Sabre\DAV; - -class PrincipalTest extends \PHPUnit\Framework\TestCase -{ - public function testConstruct() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, ['uri' => 'principals/admin']); - $this->assertTrue($principal instanceof Principal); - } - - public function testConstructNoUri() - { - $this->expectException('Sabre\DAV\Exception'); - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, []); - } - - public function testGetName() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, ['uri' => 'principals/admin']); - $this->assertEquals('admin', $principal->getName()); - } - - public function testGetDisplayName() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, ['uri' => 'principals/admin']); - $this->assertEquals('admin', $principal->getDisplayname()); - - $principal = new Principal($principalBackend, [ - 'uri' => 'principals/admin', - '{DAV:}displayname' => 'Mr. Admin', - ]); - $this->assertEquals('Mr. Admin', $principal->getDisplayname()); - } - - public function testGetProperties() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, [ - 'uri' => 'principals/admin', - '{DAV:}displayname' => 'Mr. Admin', - '{http://www.example.org/custom}custom' => 'Custom', - '{http://sabredav.org/ns}email-address' => 'admin@example.org', - ]); - - $keys = [ - '{DAV:}displayname', - '{http://www.example.org/custom}custom', - '{http://sabredav.org/ns}email-address', - ]; - $props = $principal->getProperties($keys); - - foreach ($keys as $key) { - $this->assertArrayHasKey($key, $props); - } - - $this->assertEquals('Mr. Admin', $props['{DAV:}displayname']); - - $this->assertEquals('admin@example.org', $props['{http://sabredav.org/ns}email-address']); - } - - public function testUpdateProperties() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, ['uri' => 'principals/admin']); - - $propPatch = new DAV\PropPatch(['{DAV:}yourmom' => 'test']); - - $result = $principal->propPatch($propPatch); - $result = $propPatch->commit(); - $this->assertTrue($result); - } - - public function testGetPrincipalUrl() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, ['uri' => 'principals/admin']); - $this->assertEquals('principals/admin', $principal->getPrincipalUrl()); - } - - public function testGetAlternateUriSet() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, [ - 'uri' => 'principals/admin', - '{DAV:}displayname' => 'Mr. Admin', - '{http://www.example.org/custom}custom' => 'Custom', - '{http://sabredav.org/ns}email-address' => 'admin@example.org', - '{DAV:}alternate-URI-set' => [ - 'mailto:admin+1@example.org', - 'mailto:admin+2@example.org', - 'mailto:admin@example.org', - ], - ]); - - $expected = [ - 'mailto:admin+1@example.org', - 'mailto:admin+2@example.org', - 'mailto:admin@example.org', - ]; - - $this->assertEquals($expected, $principal->getAlternateUriSet()); - } - - public function testGetAlternateUriSetEmpty() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, [ - 'uri' => 'principals/admin', - ]); - - $expected = []; - - $this->assertEquals($expected, $principal->getAlternateUriSet()); - } - - public function testGetGroupMemberSet() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, ['uri' => 'principals/admin']); - $this->assertEquals([], $principal->getGroupMemberSet()); - } - - public function testGetGroupMembership() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, ['uri' => 'principals/admin']); - $this->assertEquals([], $principal->getGroupMembership()); - } - - public function testSetGroupMemberSet() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, ['uri' => 'principals/admin']); - $principal->setGroupMemberSet(['principals/foo']); - - $this->assertEquals([ - 'principals/admin' => ['principals/foo'], - ], $principalBackend->groupMembers); - } - - public function testGetOwner() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, ['uri' => 'principals/admin']); - $this->assertEquals('principals/admin', $principal->getOwner()); - } - - public function testGetGroup() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, ['uri' => 'principals/admin']); - $this->assertNull($principal->getGroup()); - } - - public function testGetACl() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, ['uri' => 'principals/admin']); - $this->assertEquals([ - [ - 'privilege' => '{DAV:}all', - 'principal' => '{DAV:}owner', - 'protected' => true, - ], - ], $principal->getACL()); - } - - public function testSetACl() - { - $this->expectException('Sabre\DAV\Exception\Forbidden'); - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, ['uri' => 'principals/admin']); - $principal->setACL([]); - } - - public function testGetSupportedPrivilegeSet() - { - $principalBackend = new PrincipalBackend\Mock(); - $principal = new Principal($principalBackend, ['uri' => 'principals/admin']); - $this->assertNull($principal->getSupportedPrivilegeSet()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVACL/SimplePluginTest.php b/vendor/sabre/dav/tests/Sabre/DAVACL/SimplePluginTest.php deleted file mode 100644 index effa15838..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVACL/SimplePluginTest.php +++ /dev/null @@ -1,302 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\DAVACL; - -use Sabre\DAV; -use Sabre\HTTP; - -class SimplePluginTest extends \PHPUnit\Framework\TestCase -{ - public function testValues() - { - $aclPlugin = new Plugin(); - $this->assertEquals('acl', $aclPlugin->getPluginName()); - $this->assertEquals( - ['access-control', 'calendarserver-principal-property-search'], - $aclPlugin->getFeatures() - ); - - $this->assertEquals( - [ - '{DAV:}expand-property', - '{DAV:}principal-match', - '{DAV:}principal-property-search', - '{DAV:}principal-search-property-set', - ], - $aclPlugin->getSupportedReportSet('')); - - $this->assertEquals(['ACL'], $aclPlugin->getMethods('')); - - $this->assertEquals( - 'acl', - $aclPlugin->getPluginInfo()['name'] - ); - } - - public function testGetFlatPrivilegeSet() - { - $expected = [ - '{DAV:}all' => [ - 'privilege' => '{DAV:}all', - 'abstract' => false, - 'aggregates' => [ - '{DAV:}read', - '{DAV:}write', - ], - 'concrete' => '{DAV:}all', - ], - '{DAV:}read' => [ - 'privilege' => '{DAV:}read', - 'abstract' => false, - 'aggregates' => [ - '{DAV:}read-acl', - '{DAV:}read-current-user-privilege-set', - ], - 'concrete' => '{DAV:}read', - ], - '{DAV:}read-acl' => [ - 'privilege' => '{DAV:}read-acl', - 'abstract' => false, - 'aggregates' => [], - 'concrete' => '{DAV:}read-acl', - ], - '{DAV:}read-current-user-privilege-set' => [ - 'privilege' => '{DAV:}read-current-user-privilege-set', - 'abstract' => false, - 'aggregates' => [], - 'concrete' => '{DAV:}read-current-user-privilege-set', - ], - '{DAV:}write' => [ - 'privilege' => '{DAV:}write', - 'abstract' => false, - 'aggregates' => [ - '{DAV:}write-properties', - '{DAV:}write-content', - '{DAV:}unlock', - '{DAV:}bind', - '{DAV:}unbind', - ], - 'concrete' => '{DAV:}write', - ], - '{DAV:}write-properties' => [ - 'privilege' => '{DAV:}write-properties', - 'abstract' => false, - 'aggregates' => [], - 'concrete' => '{DAV:}write-properties', - ], - '{DAV:}write-content' => [ - 'privilege' => '{DAV:}write-content', - 'abstract' => false, - 'aggregates' => [], - 'concrete' => '{DAV:}write-content', - ], - '{DAV:}unlock' => [ - 'privilege' => '{DAV:}unlock', - 'abstract' => false, - 'aggregates' => [], - 'concrete' => '{DAV:}unlock', - ], - '{DAV:}bind' => [ - 'privilege' => '{DAV:}bind', - 'abstract' => false, - 'aggregates' => [], - 'concrete' => '{DAV:}bind', - ], - '{DAV:}unbind' => [ - 'privilege' => '{DAV:}unbind', - 'abstract' => false, - 'aggregates' => [], - 'concrete' => '{DAV:}unbind', - ], - ]; - - $plugin = new Plugin(); - $plugin->allowUnauthenticatedAccess = false; - $server = new DAV\Server(); - $server->addPlugin($plugin); - $this->assertEquals($expected, $plugin->getFlatPrivilegeSet('')); - } - - public function testCurrentUserPrincipalsNotLoggedIn() - { - $acl = new Plugin(); - $acl->allowUnauthenticatedAccess = false; - $server = new DAV\Server(); - $server->addPlugin($acl); - - $this->assertEquals([], $acl->getCurrentUserPrincipals()); - } - - public function testCurrentUserPrincipalsSimple() - { - $tree = [ - new DAV\SimpleCollection('principals', [ - new MockPrincipal('admin', 'principals/admin'), - ]), - ]; - - $acl = new Plugin(); - $acl->allowUnauthenticatedAccess = false; - $server = new DAV\Server($tree); - $server->addPlugin($acl); - - $auth = new DAV\Auth\Plugin(new DAV\Auth\Backend\Mock()); - $server->addPlugin($auth); - - //forcing login - $auth->beforeMethod(new HTTP\Request('GET', '/'), new HTTP\Response()); - - $this->assertEquals(['principals/admin'], $acl->getCurrentUserPrincipals()); - } - - public function testCurrentUserPrincipalsGroups() - { - $tree = [ - new DAV\SimpleCollection('principals', [ - new MockPrincipal('admin', 'principals/admin', ['principals/administrators', 'principals/everyone']), - new MockPrincipal('administrators', 'principals/administrators', ['principals/groups'], ['principals/admin']), - new MockPrincipal('everyone', 'principals/everyone', [], ['principals/admin']), - new MockPrincipal('groups', 'principals/groups', [], ['principals/administrators']), - ]), - ]; - - $acl = new Plugin(); - $acl->allowUnauthenticatedAccess = false; - $server = new DAV\Server($tree); - $server->addPlugin($acl); - - $auth = new DAV\Auth\Plugin(new DAV\Auth\Backend\Mock()); - $server->addPlugin($auth); - - //forcing login - $auth->beforeMethod(new HTTP\Request('GET', '/'), new HTTP\Response()); - - $expected = [ - 'principals/admin', - 'principals/administrators', - 'principals/everyone', - 'principals/groups', - ]; - - $this->assertEquals($expected, $acl->getCurrentUserPrincipals()); - - // The second one should trigger the cache and be identical - $this->assertEquals($expected, $acl->getCurrentUserPrincipals()); - } - - public function testGetACL() - { - $acl = [ - [ - 'principal' => 'principals/admin', - 'privilege' => '{DAV:}read', - ], - [ - 'principal' => 'principals/admin', - 'privilege' => '{DAV:}write', - ], - ]; - - $tree = [ - new MockACLNode('foo', $acl), - ]; - - $server = new DAV\Server($tree); - $aclPlugin = new Plugin(); - $aclPlugin->allowUnauthenticatedAccess = false; - $server->addPlugin($aclPlugin); - - $this->assertEquals($acl, $aclPlugin->getACL('foo')); - } - - public function testGetCurrentUserPrivilegeSet() - { - $acl = [ - [ - 'principal' => 'principals/admin', - 'privilege' => '{DAV:}read', - ], - [ - 'principal' => 'principals/user1', - 'privilege' => '{DAV:}read', - ], - [ - 'principal' => 'principals/admin', - 'privilege' => '{DAV:}write', - ], - ]; - - $tree = [ - new MockACLNode('foo', $acl), - - new DAV\SimpleCollection('principals', [ - new MockPrincipal('admin', 'principals/admin'), - ]), - ]; - - $server = new DAV\Server($tree); - $aclPlugin = new Plugin(); - $aclPlugin->allowUnauthenticatedAccess = false; - $server->addPlugin($aclPlugin); - - $auth = new DAV\Auth\Plugin(new DAV\Auth\Backend\Mock()); - $server->addPlugin($auth); - - //forcing login - $auth->beforeMethod(new HTTP\Request('GET', '/'), new HTTP\Response()); - - $expected = [ - '{DAV:}write', - '{DAV:}write-properties', - '{DAV:}write-content', - '{DAV:}unlock', - '{DAV:}write-acl', - '{DAV:}read', - '{DAV:}read-acl', - '{DAV:}read-current-user-privilege-set', - ]; - - $this->assertEquals($expected, $aclPlugin->getCurrentUserPrivilegeSet('foo')); - } - - public function testCheckPrivileges() - { - $acl = [ - [ - 'principal' => 'principals/admin', - 'privilege' => '{DAV:}read', - ], - [ - 'principal' => 'principals/user1', - 'privilege' => '{DAV:}read', - ], - [ - 'principal' => 'principals/admin', - 'privilege' => '{DAV:}write', - ], - ]; - - $tree = [ - new MockACLNode('foo', $acl), - - new DAV\SimpleCollection('principals', [ - new MockPrincipal('admin', 'principals/admin'), - ]), - ]; - - $server = new DAV\Server($tree); - $aclPlugin = new Plugin(); - $aclPlugin->allowUnauthenticatedAccess = false; - $server->addPlugin($aclPlugin); - - $auth = new DAV\Auth\Plugin(new DAV\Auth\Backend\Mock()); - $server->addPlugin($auth); - - //forcing login - //$auth->beforeMethod('GET','/'); - - $this->assertFalse($aclPlugin->checkPrivileges('foo', ['{DAV:}read'], Plugin::R_PARENT, false)); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/DAVServerTest.php b/vendor/sabre/dav/tests/Sabre/DAVServerTest.php deleted file mode 100644 index 2f64df08c..000000000 --- a/vendor/sabre/dav/tests/Sabre/DAVServerTest.php +++ /dev/null @@ -1,305 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre; - -use Sabre\HTTP\Request; -use Sabre\HTTP\Response; - -/** - * This class may be used as a basis for other webdav-related unittests. - * - * This class is supposed to provide a reasonably big framework to quickly get - * a testing environment running. - * - * @copyright Copyright (C) fruux GmbH (https://fruux.com/) - * @author Evert Pot (http://evertpot.com/) - * @license http://sabre.io/license/ Modified BSD License - */ -abstract class DAVServerTest extends \PHPUnit\Framework\TestCase -{ - protected $setupCalDAV = false; - protected $setupCardDAV = false; - protected $setupACL = false; - protected $setupCalDAVSharing = false; - protected $setupCalDAVScheduling = false; - protected $setupCalDAVSubscriptions = false; - protected $setupCalDAVICSExport = false; - protected $setupLocks = false; - protected $setupFiles = false; - protected $setupSharing = false; - protected $setupPropertyStorage = false; - - /** - * An array with calendars. Every calendar should have - * - principaluri - * - uri. - */ - protected $caldavCalendars = []; - protected $caldavCalendarObjects = []; - - protected $carddavAddressBooks = []; - protected $carddavCards = []; - - /** - * @var \Sabre\DAV\Server - */ - protected $server; - protected $tree = []; - - protected $caldavBackend; - protected $carddavBackend; - protected $principalBackend; - protected $locksBackend; - protected $propertyStorageBackend; - - /** - * @var \Sabre\CalDAV\Plugin - */ - protected $caldavPlugin; - - /** - * @var \Sabre\CardDAV\Plugin - */ - protected $carddavPlugin; - - /** - * @var \Sabre\DAVACL\Plugin - */ - protected $aclPlugin; - - /** - * @var \Sabre\CalDAV\SharingPlugin - */ - protected $caldavSharingPlugin; - - /** - * CalDAV scheduling plugin. - * - * @var CalDAV\Schedule\Plugin - */ - protected $caldavSchedulePlugin; - - /** - * @var CalDAV\ICSExportPlugin - */ - protected $caldavICSExportPlugin; - - /** - * @var \Sabre\DAV\Auth\Plugin - */ - protected $authPlugin; - - /** - * @var \Sabre\DAV\Locks\Plugin - */ - protected $locksPlugin; - - /** - * Sharing plugin. - * - * @var \Sabre\DAV\Sharing\Plugin - */ - protected $sharingPlugin; - - /* - * @var Sabre\DAV\PropertyStorage\Plugin - */ - protected $propertyStoragePlugin; - - /** - * If this string is set, we will automatically log in the user with this - * name. - */ - protected $autoLogin = null; - - public function setup(): void - { - $this->initializeEverything(); - } - - public function initializeEverything() - { - $this->setUpBackends(); - $this->setUpTree(); - - $this->server = new DAV\Server($this->tree); - $this->server->sapi = new HTTP\SapiMock(); - $this->server->debugExceptions = true; - - if ($this->setupCalDAV) { - $this->caldavPlugin = new CalDAV\Plugin(); - $this->server->addPlugin($this->caldavPlugin); - } - if ($this->setupCalDAVSharing || $this->setupSharing) { - $this->sharingPlugin = new DAV\Sharing\Plugin(); - $this->server->addPlugin($this->sharingPlugin); - } - if ($this->setupCalDAVSharing) { - $this->caldavSharingPlugin = new CalDAV\SharingPlugin(); - $this->server->addPlugin($this->caldavSharingPlugin); - } - if ($this->setupCalDAVScheduling) { - $this->caldavSchedulePlugin = new CalDAV\Schedule\Plugin(); - $this->server->addPlugin($this->caldavSchedulePlugin); - } - if ($this->setupCalDAVSubscriptions) { - $this->server->addPlugin(new CalDAV\Subscriptions\Plugin()); - } - if ($this->setupCalDAVICSExport) { - $this->caldavICSExportPlugin = new CalDAV\ICSExportPlugin(); - $this->server->addPlugin($this->caldavICSExportPlugin); - } - if ($this->setupCardDAV) { - $this->carddavPlugin = new CardDAV\Plugin(); - $this->server->addPlugin($this->carddavPlugin); - } - if ($this->setupLocks) { - $this->locksPlugin = new DAV\Locks\Plugin( - $this->locksBackend - ); - $this->server->addPlugin($this->locksPlugin); - } - if ($this->setupPropertyStorage) { - $this->propertyStoragePlugin = new DAV\PropertyStorage\Plugin( - $this->propertyStorageBackend - ); - $this->server->addPlugin($this->propertyStoragePlugin); - } - if ($this->autoLogin) { - $this->autoLogin($this->autoLogin); - } - if ($this->setupACL) { - $this->aclPlugin = new DAVACL\Plugin(); - if (!$this->autoLogin) { - $this->aclPlugin->allowUnauthenticatedAccess = false; - } - $this->aclPlugin->adminPrincipals = ['principals/admin']; - $this->server->addPlugin($this->aclPlugin); - } - } - - /** - * Makes a request, and returns a response object. - * - * You can either pass an instance of Sabre\HTTP\Request, or an array, - * which will then be used as the _SERVER array. - * - * If $expectedStatus is set, we'll compare it with the HTTP status of - * the returned response. If it doesn't match, we'll immediately fail - * the test. - * - * @param array|\Sabre\HTTP\Request $request - * @param int $expectedStatus - * - * @return \Sabre\HTTP\Response - */ - public function request($request, $expectedStatus = null) - { - if (is_array($request)) { - $request = HTTP\Sapi::createFromServerArray($request); - } - $response = new HTTP\ResponseMock(); - - $this->server->httpRequest = $request; - $this->server->httpResponse = $response; - $this->server->exec(); - - if ($expectedStatus) { - $responseBody = $expectedStatus !== $response->getStatus() ? $response->getBodyAsString() : ''; - $this->assertEquals($expectedStatus, $response->getStatus(), 'Incorrect HTTP status received for request. Response body: '.$responseBody); - } - - return $this->server->httpResponse; - } - - /** - * This function takes a username and sets the server in a state where - * this user is logged in, and no longer requires an authentication check. - * - * @param string $userName - */ - public function autoLogin($userName) - { - $authBackend = new DAV\Auth\Backend\Mock(); - $authBackend->setPrincipal('principals/'.$userName); - $this->authPlugin = new DAV\Auth\Plugin($authBackend); - - // If the auth plugin already exists, we're removing its hooks: - if ($oldAuth = $this->server->getPlugin('auth')) { - $this->server->removeListener('beforeMethod', [$oldAuth, 'beforeMethod']); - } - $this->server->addPlugin($this->authPlugin); - - // This will trigger the actual login procedure - $this->authPlugin->beforeMethod(new Request('GET', '/'), new Response()); - } - - /** - * Override this to provide your own Tree for your test-case. - */ - public function setUpTree() - { - if ($this->setupCalDAV) { - $this->tree[] = new CalDAV\CalendarRoot( - $this->principalBackend, - $this->caldavBackend - ); - } - if ($this->setupCardDAV) { - $this->tree[] = new CardDAV\AddressBookRoot( - $this->principalBackend, - $this->carddavBackend - ); - } - - if ($this->setupCalDAV) { - $this->tree[] = new CalDAV\Principal\Collection( - $this->principalBackend - ); - } elseif ($this->setupCardDAV || $this->setupACL) { - $this->tree[] = new DAVACL\PrincipalCollection( - $this->principalBackend - ); - } - if ($this->setupFiles) { - $this->tree[] = new DAV\Mock\Collection('files'); - } - } - - public function setUpBackends() - { - if ($this->setupCalDAVSharing && is_null($this->caldavBackend)) { - $this->caldavBackend = new CalDAV\Backend\MockSharing($this->caldavCalendars, $this->caldavCalendarObjects); - } - if ($this->setupCalDAVSubscriptions && is_null($this->caldavBackend)) { - $this->caldavBackend = new CalDAV\Backend\MockSubscriptionSupport($this->caldavCalendars, $this->caldavCalendarObjects); - } - if ($this->setupCalDAV && is_null($this->caldavBackend)) { - if ($this->setupCalDAVScheduling) { - $this->caldavBackend = new CalDAV\Backend\MockScheduling($this->caldavCalendars, $this->caldavCalendarObjects); - } else { - $this->caldavBackend = new CalDAV\Backend\Mock($this->caldavCalendars, $this->caldavCalendarObjects); - } - } - if ($this->setupCardDAV && is_null($this->carddavBackend)) { - $this->carddavBackend = new CardDAV\Backend\Mock($this->carddavAddressBooks, $this->carddavCards); - } - if ($this->setupCardDAV || $this->setupCalDAV || $this->setupACL) { - $this->principalBackend = new DAVACL\PrincipalBackend\Mock(); - } - if ($this->setupLocks) { - $this->locksBackend = new DAV\Locks\Backend\Mock(); - } - if ($this->setupPropertyStorage) { - $this->propertyStorageBackend = new DAV\PropertyStorage\Backend\Mock(); - } - } - - public function assertHttpStatus($expectedStatus, HTTP\Request $req) - { - $resp = $this->request($req); - $this->assertEquals((int) $expectedStatus, (int) $resp->getStatus(), 'Incorrect HTTP status received: '.$resp->getStatus()); - } -} diff --git a/vendor/sabre/dav/tests/Sabre/HTTP/ResponseMock.php b/vendor/sabre/dav/tests/Sabre/HTTP/ResponseMock.php deleted file mode 100644 index c5357928a..000000000 --- a/vendor/sabre/dav/tests/Sabre/HTTP/ResponseMock.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre\HTTP; - -/** - * HTTP Response Mock object. - * - * This class exists to make the transition to sabre/http easier. - * - * @copyright Copyright (C) fruux GmbH (https://fruux.com/) - * @author Evert Pot (http://evertpot.com/) - * @license http://sabre.io/license/ Modified BSD License - */ -class ResponseMock extends Response -{ - /** - * Making these public. - */ - public $body; - public $status; -} diff --git a/vendor/sabre/dav/tests/Sabre/TestUtil.php b/vendor/sabre/dav/tests/Sabre/TestUtil.php deleted file mode 100644 index 4e7ca2fc4..000000000 --- a/vendor/sabre/dav/tests/Sabre/TestUtil.php +++ /dev/null @@ -1,66 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Sabre; - -class TestUtil -{ - /** - * This function deletes all the contents of the temporary directory. - */ - public static function clearTempDir() - { - self::deleteTree(SABRE_TEMPDIR, false); - } - - private static function deleteTree($path, $deleteRoot = true) - { - foreach (scandir($path) as $node) { - if ('.' == $node || '..' == $node) { - continue; - } - $myPath = $path.'/'.$node; - if (is_file($myPath)) { - unlink($myPath); - } else { - self::deleteTree($myPath); - } - } - if ($deleteRoot) { - rmdir($path); - } - } - - public static function getMySQLDB() - { - try { - $pdo = new \PDO(SABRE_MYSQLDSN, SABRE_MYSQLUSER, SABRE_MYSQLPASS); - $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); - - return $pdo; - } catch (\PDOException $e) { - return null; - } - } - - public static function getSQLiteDB() - { - $pdo = new \PDO('sqlite:'.SABRE_TEMPDIR.'/pdobackend'); - $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); - - return $pdo; - } - - public static function getPgSqlDB() - { - //try { - $pdo = new \PDO(SABRE_PGSQLDSN); - $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); - - return $pdo; - //} catch (\PDOException $e) { - // return null; - //} - } -} diff --git a/vendor/sabre/dav/tests/bootstrap.php b/vendor/sabre/dav/tests/bootstrap.php deleted file mode 100644 index d15805382..000000000 --- a/vendor/sabre/dav/tests/bootstrap.php +++ /dev/null @@ -1,65 +0,0 @@ -<?php - -declare(strict_types=1); - -set_include_path(__DIR__.'/../lib/'.PATH_SEPARATOR.__DIR__.PATH_SEPARATOR.get_include_path()); - -$autoLoader = include __DIR__.'/../vendor/autoload.php'; - -// SabreDAV tests auto loading -$autoLoader->add('Sabre\\', __DIR__); -// VObject tests auto loading -$autoLoader->addPsr4('Sabre\\VObject\\', __DIR__.'/../vendor/sabre/vobject/tests/VObject'); -$autoLoader->addPsr4('Sabre\\Xml\\', __DIR__.'/../vendor/sabre/xml/tests/Sabre/Xml'); - -date_default_timezone_set('UTC'); - -if ('TRUE' === getenv('RUN_TEST_WITH_STREAMING_PROPFIND')) { - echo 'Running unit tests with \Sabre\DAV\Server::$streamMultiStatus = true'; - \Sabre\DAV\Server::$streamMultiStatus = true; -} - -// List of variables that can be set by the environment -$environmentVars = [ - 'SABRE_MYSQLUSER', - 'SABRE_MYSQLPASS', - 'SABRE_MYSQLDSN', - 'SABRE_PGSQLDSN', -]; -foreach ($environmentVars as $var) { - if ($value = getenv($var)) { - define($var, $value); - } -} - -$config = [ - 'SABRE_TEMPDIR' => dirname(__FILE__).'/temp/', - 'SABRE_HASSQLITE' => in_array('sqlite', PDO::getAvailableDrivers()), - 'SABRE_HASMYSQL' => in_array('mysql', PDO::getAvailableDrivers()), - 'SABRE_HASPGSQL' => in_array('pgsql', PDO::getAvailableDrivers()), - 'SABRE_MYSQLDSN' => 'mysql:host=127.0.0.1;dbname=sabredav_test', - 'SABRE_MYSQLUSER' => 'sabredav', - 'SABRE_MYSQLPASS' => '', - 'SABRE_PGSQLDSN' => 'pgsql:host=localhost;dbname=sabredav_test;user=sabredav;password=sabredav', -]; - -if (file_exists(__DIR__.'/config.user.php')) { - $userConfig = []; - include __DIR__.'/config.user.php'; - foreach ($userConfig as $key => $value) { - $config[$key] = $value; - } -} - -foreach ($config as $key => $value) { - if (!defined($key)) { - define($key, $value); - } -} - -if (!file_exists(SABRE_TEMPDIR)) { - mkdir(SABRE_TEMPDIR); -} -if (file_exists('.sabredav')) { - unlink('.sabredav'); -} diff --git a/vendor/sabre/vobject/.gitignore b/vendor/sabre/vobject/.gitignore deleted file mode 100644 index 82b7dad3f..000000000 --- a/vendor/sabre/vobject/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# Composer stuff -vendor/ -composer.lock -tests/cov/ -tests/temp -tests/.phpunit.result.cache - -# Development stuff -.php_cs.cache diff --git a/vendor/sabre/vobject/.php_cs.dist b/vendor/sabre/vobject/.php_cs.dist deleted file mode 100644 index c5c78a971..000000000 --- a/vendor/sabre/vobject/.php_cs.dist +++ /dev/null @@ -1,12 +0,0 @@ -<?php - -$config = PhpCsFixer\Config::create(); -$config->getFinder() - ->exclude('vendor') - ->in(__DIR__); -$config->setRules([ - '@PSR1' => true, - '@Symfony' => true -]); - -return $config; \ No newline at end of file diff --git a/vendor/sabre/vobject/.travis.yml b/vendor/sabre/vobject/.travis.yml deleted file mode 100644 index 4f50e97fd..000000000 --- a/vendor/sabre/vobject/.travis.yml +++ /dev/null @@ -1,49 +0,0 @@ -language: php -php: - - 7.1 - - 7.2 - - 7.3 - - 7.4 - -env: - global: - - MEMCACHED_SERVER=127.0.0.1 - - RUN_PHPCSFIXER="TRUE" - - RUN_PHPUNIT="TRUE" - - RUN_PHPSTAN="FALSE" - matrix: - - PREFER_LOWEST="" REPORT_COVERAGE="TRUE" WITH_COVERAGE="--coverage-clover=coverage.xml" - - PREFER_LOWEST="--prefer-lowest" REPORT_COVERAGE="FALSE" WITH_COVERAGE="" - -matrix: - include: - - name: 'PHP8' - dist: focal - php: nightly - env: - - RUN_PHPCSFIXER="FALSE" - - REPORT_COVERAGE="FALSE" - - name: 'PHPStan' - php: 7.4 - env: - - RUN_PHPCSFIXER="FALSE" - - RUN_PHPUNIT="FALSE" - - RUN_PHPSTAN="TRUE" - - REPORT_COVERAGE="FALSE" - fast_finish: true - -before_script: - - if [ $RUN_PHPCSFIXER == "FALSE" ]; then composer remove --no-update --dev friendsofphp/php-cs-fixer; fi - - composer update $PREFER_LOWEST - -script: - - if [ $RUN_PHPCSFIXER == "TRUE" ]; then php vendor/bin/php-cs-fixer fix --dry-run --diff; fi - - if [ $RUN_PHPUNIT == "TRUE" ]; then php vendor/bin/phpunit --configuration tests/phpunit.xml $WITH_COVERAGE; fi - - if [ $RUN_PHPSTAN == "TRUE" ]; then composer phpstan; fi - -after_success: - - if [ $REPORT_COVERAGE == "TRUE" ]; then bash <(curl -s https://codecov.io/bash); fi - -cache: - directories: - - $HOME/.composer/cache diff --git a/vendor/sabre/vobject/CHANGELOG.md b/vendor/sabre/vobject/CHANGELOG.md deleted file mode 100644 index 7d6b096fd..000000000 --- a/vendor/sabre/vobject/CHANGELOG.md +++ /dev/null @@ -1,868 +0,0 @@ -ChangeLog -========= - -4.3.3 (2020-11-09) ------------------- - -* #519: Remove US/Pacific-New obsolete timezone (@phil-davis) - -4.3.2 (2020-10-03) ------------------- - -* #513: Added Support for PHP 8.0 (@phil-davis) - -4.3.1 (2020-07-13) ------------------- - -* #510: Fix an incomplete phpdoc type annotation (@mstilkerich) -* #505: Refactor unit test code for phpunit9 (@phil-davis) -* #500: Standardize CI (@phil-davis) -* #496: CI tooling changes (@JeroenVanOort) - -4.3.0 (2020-01-31) ------------------- - -* Added support for PHP 7.4, dropped support for PHP 7.0 (@phil-davis) -* #487: Added phpstan coverage, updated testsuite for phpunit8 (@phil-davis, @JeroenVanOort) -* #495: refactored maps to use ::class notation (@JeroenVanOort) - -4.2.2 (2020-01-14) ------------------- - -* #465: Add TZ in iTip REPLY iTip messages -* #486: Add PHONE-NUMBER value type (used for TEL in vCard 3.0) - -4.2.1 (2019-12-18) ------------------- - -* #469, #451: fix compat with php 7.4 -* #443: prevent running in indefinte loop -* #449: Preventing creating a component for a root document -* #450: Fix parse with option Forgiving with trailing equal -* #459: fixed typo in VCalendar which resulting in usage of the wrong TimeZone -* #462: Broker::parseEventForOrganizer copies DTSTAMP from $eventInfo that causes broken scheduling - -4.2.0 (2019-02-19) ------------------- - -* #432: DTSTAMP must be specified in UTC -* #435: ORGANIZER e-mail address are case-insensitive -* #441: Repairing BASE64 encoded vCard version 3 - -4.2.0-alpha1 (2018-09-26) -------------------------- - -* #412: Broker: add timezone to CANCEL messages -* #424: Support php7.3 - -4.1.6 (2018-04-20) ------------------- - -* #406, #407, #408, #409: Another round of performance improvements in serialization of properties (@gharlan, @staabm) -* #410: Fixes in iTip for handling `BYDAY=SA,SO` (@gharlan) -* #381: Fixes in iTip handling of `SCHEDULE-FORCE-SEND` (@alecpl) - -4.1.5 (2018-03-08) ------------------- - -* #404: Serialization: Performance boost for long properties (@gharlan) - -4.1.4 (2017-12-22) ------------------- - -* #383: Fix possible infinite loop in RRuleIterator, when the RRule FREQ - is YEARLY and it uses BYYEARDAY only (@mvdnes). -* #392: Improved significant change detection. This should reduce the number of - unneeded update emails in scheduling systems. (@alecpl). -* #395: Removed `Canada/East-Saskatchewan` timezone, as it got removed - from PHP as well. (@remicollet). - - -4.1.3 (2017-10-18) ------------------- - -* #363: Repair script and de-duplicate properties that are only allowed once, - but appear more than once. (@ddolcimascolo). -* #377: Added Pacific Time (US & Canada) as exchange timezone -* #384: Added fallback for VCards without `FN` - - -4.1.2 (2016-12-15) ------------------- - -* #340: Support for `BYYEARDAY` recurrence when `FREQ=YEARLY`. (@PHPGangsta) -* #341: Support for `BYWEEKNO` recurrence when `FREQ=YEARLY`. (@PHPGangsta) -* Updated to the latest windows timezone data mappings. -* #344: Auto-detecting more Outlook 365-generated timezone identifiers. - (@jpirkey) -* #348: `FreeBusyGenerator` can now accept streams. -* Support sabre/xml 1.5 and 2.0. -* #355: Support `DateTimeInterface` in more places where only `DateTime` was - supported. (@gharlan). -* #351: Fixing an inclusive/exclusive problem with `isInTimeRange` and - `fastForward` with all-day events. (@strokyl, thanks you are brilliant). - - -4.1.1 (2016-07-15) ------------------- - -* #327: Throwing `InvalidDataException` in more cases where invalid iCalendar - dates and times were provided. (@rsto) -* #331: Fix dealing with multiple overridden instances falling on the same - date/time (@afedyk-sugarcrm). -* #333: Fix endless loop on invalid `BYMONTH` values in recurrence. - (@PHPGangsta) -* #339: Fixed a few `validate()` results when repair is off. (@PHPGangsta) -* #338: Stripping invalid `BYMONTH=` rules during `validate()` (@PHPGangsta) -* #336: Fix incorrect `BYSECOND=` validation. (@PHPGangsta) - - -4.1.0 (2016-04-06) ------------------- - -* #309: When expanding recurring events, the first event should also have a - `RECURRENCE-ID` property. -* #306: iTip REPLYs to the first instance of a recurring event was not handled - correctly. -* Slightly better error message during validation of `N` and `ADR` properties. -* #312: Correctly extracing timezone in the iTip broker, even when we don't - have a master event. (@vkomrakov-sugar). -* When validating a component's property that must appear once and which could - automatically be repaired, make sure we report the change as 'repaired'. -* Added a PHPUnitAssertions trait. This trait makes it easy to compare two - vcards or iCalendar objects semantically. -* Better error message when parsing objects with an invalid `VALUE` parameter. - - -4.0.3 (2016-03-12) ------------------- - -* #300: Added `VCard::getByType()` to quickly get a property with a specific - `TYPE` parameter. (@kbond) -* #302: `UNTIL` was not encoded correctly when converting to jCal. - (@GrahamLinagora) -* #303: `COUNT` is now encoded as an int in jCal instead of a string. (@strokyl) -* #295: `RRULE` now has more validation and repair rules. - - -4.0.2 (2016-01-11) ------------------- - -* #288: Only decode `CHARSET` if we're reading vCard 2.1. If it appears - in any other document, we must ignore it. - - -4.0.1 (2016-01-04) ------------------- - -* #284: When generating `CANCEL` iTip messages, we now include `DTEND`. - (@kewisch) - - -4.0.0 (2015-12-11) ------------------- - -* #274: When creating new vCards, the default vCard version is now 4.0. -* #275: `VEVENT`, `VTODO` and `VCARD` now automatically get a `UID` and - `DTSTAMP` property if this was not already specified. -* `ParseException` now extends `\Exception`. -* `Sabre\VObject\Reader::read` now has a `$charset` argument. -* #272: `Sabre\VObject\Recur\EventIterator::$maxInstances` is now - `Sabre\VObject\Settings::$maxRecurrences` and is also honored by the - FreeBusyGenerator. -* #278: `expand()` did not work correctly on events with sub-components. - - -4.0.0-beta1 (2015-12-02) ------------------------- - -* #258: Support for expanding events that use `RDATE`. (@jabdoa2) -* #258: Correctly support TZID for events that use `RDATE`. (@jabdoa2) -* #240: `Component\VCalendar::expand()` now returns a new expanded `VCalendar` - object, instead of editing the existing `VCalendar` in-place. This is a BC - break. -* #265: Using the new `InvalidDataException` in place of - `InvalidArgumentException` and `LogicException` in all places where we fail - because there was something wrong with input data. -* #227: Always add `VALUE=URI` to `PHOTO` properties. -* #235: Always add `VALUE=URI` to `URL` properties. -* It's now possible to override which class is used instead of - `Component\VCalendar` or `Component\VCard` during parsing. -* #263: Lots of small cleanups. (@jakobsack) -* #220: Automatically stop recurring after 3500 recurrences. -* #41: Allow user to set different encoding than UTF-8 when decoding vCards. -* #41: Support the `ENCODING` parameter from vCard 2.1. - Both ISO-8859-1 and Windows-1252 are currently supported. -* #185: Fix encoding/decoding of `TIME` values in jCal/jCard. - - -4.0.0-alpha2 (2015-09-04) -------------------------- - -* Updated windows timezone file to support new mexican timezone. -* #239: Added a `BirthdayCalendarGenerator`. (@DominikTo) -* #250: `isInTimeRange()` now considers the timezone for floating dates and - times. (@armin-hackmann) -* Added a duplicate vcard merging tool for the command line. -* #253: `isInTimeRange()` now correctly handles events that throw the - `NoInstancesException` exception. (@migrax, @DominikTo) -* #254: The parser threw an `E_NOTICE` for certain invalid objects. It now - correctly throws a `ParseException`. - - -4.0.0-alpha1 (2015-07-17) -------------------------- - -* sabre/vobject now requires PHP 5.5. -* #244: PHP7 support. -* Lots of speedups and reduced memory usage! -* #160: Support for xCal a.k.a. RFC6321! (@Hywan) -* #192: Support for xCard a.k.a. RFC6351! (@Hywan) -* #139: We now accept `DateTimeInterface` wherever it accepted `DateTime` - before in arguments. This means that either `DateTime` or - `DateTimeImmutable` may be used everywhere. -* #242: Full support for the `VAVAILABILITY` component, and calculating - `VFREEBUSY` based on `VAVAILABILITY` data. -* #186: Fixing conversion of `UTC-OFFSET` properties when going back and - forward between jCal and iCalendar. -* Properties, Components and Parameters now implement PHP's `JsonSerializable` - interface. -* #139: We now _always_ return `DateTimeImmutable` from any method. This could - potentially have big implications if you manipulate Date objects anywhere. -* #161: Simplified `ElementList` by extending `ArrayIterator`. -* Removed `RecurrenceIterator` (use Recur\EventIterator instead). -* Now using php-cs-fixer to automatically enforce and correct CS. -* #233: The `+00:00` timezone is now recognized as UTC. (@c960657) -* #237: Added a `destroy()` method to all documents. This method breaks any - circular references, allowing PHP to free up memory. -* #197: Made accessing properties and objects by their name a lot faster. This - especially helps objects that have a lot of sub-components or properties, - such as large iCalendar objects. -* #197: The `$children` property on components has been changed from `public` - to `protected`. Use the `children()` method instead to get a flat list of - objects. -* #244: The `Float` and `Integer` classes have been renamed to `FloatValue` - and `IntegerValue` to allow PHP 7 compatibility. - - -3.5.3 (2016-10-06) ------------------- - -* #331: Fix dealing with multiple overridden instances falling on the same - date/time (@afedyk-sugarcrm). - - -3.5.2 (2016-04-24) ------------------ - -* #312: Backported a fix related to iTip processing of events with timezones, - without a master event. - - -3.5.1 (2016-04-06) ------------------- - -* #309: When expanding recurring events, the first event should also have a - `RECURRENCE-ID` property. -* #306: iTip REPLYs to the first instance of a recurring event was not handled - correctly. - - -3.5.0 (2016-01-11) ------------------- - -* This release supports PHP 7, contrary to 3.4.x versions. -* BC Break: `Sabre\VObject\Property\Float` has been renamed to - `Sabre\VObject\Property\FloatValue`. -* BC Break: `Sabre\VObject\Property\Integer` has been renamed to - `Sabre\VObject\Property\IntegerValue`. - - -3.4.9 (2016-01-11) ------------------- - -* This package now specifies in composer.json that it does not support PHP 7. - For PHP 7, use version 3.5.x or 4.x. - - -3.4.8 (2016-01-04) ------------------- - -* #284: When generating `CANCEL` iTip messages, we now include `DTEND`. - (@kewisch). - - -3.4.7 (2015-09-05) ------------------- - -* #253: Handle `isInTimeRange` for recurring events that have 0 valid - instances. (@DominikTo, @migrax). - - -3.4.6 (2015-08-06) ------------------- - -* #250: Recurring all-day events are incorrectly included in time range - requests when not using UTC in the time range. (@armin-hackmann) - - -3.4.5 (2015-06-02) ------------------- - -* #229: Converting vcards from 3.0 to 4.0 that contained a `LANG` property - would throw an error. - - -3.4.4 (2015-05-27) ------------------- - -* #228: Fixed a 'party crasher' bug in the iTip broker. This would break - scheduling in some cases. - - -3.4.3 (2015-05-19) ------------------- - -* #219: Corrected validation of `EXDATE` properties with more than one value. -* #212: `BYSETPOS` with values below `-1` was broken and could cause infinite - loops. -* #211: Fix `BYDAY=-5TH` in recurrence iterator. (@lindquist) -* #216: `ENCODING` parameter is now validated for all document types. -* #217: Initializing vCard `DATE` objects with a PHP DateTime object will now - work correctly. (@thomascube) - - -3.4.2 (2015-02-25) ------------------- - -* #210: iTip: Replying to an event without a master event was broken. - - -3.4.1 (2015-02-24) ------------------- - -* A minor change to ensure that unittests work correctly in the sabre/dav - test-suite. - - -3.4.0 (2015-02-23) ------------------- - -* #196: Made parsing recurrence rules a lot faster on big calendars. -* Updated windows timezone mappings to latest unicode version. -* #202: Support for parsing and validating `VAVAILABILITY` components. (@Hywan) -* #195: PHP 5.3 compatibility in 'generatevcards' script. (@rickdenhaan) -* #205: Improving handling of multiple `EXDATE` when processing iTip changes. - (@armin-hackmann) -* #187: Fixed validator rules for `LAST-MODIFIED` properties. -* #188: Retain floating times when generating instances using - `Recur\EventIterator`. -* #203: Skip tests for timezones that are not supported on older PHP versions, - instead of a hard fail. -* #204: Dealing a bit better with vCard date-time values that contained - milliseconds. (which is normally invalid). (@armin-hackmann) - - -3.3.5 (2015-01-09) ------------------- - -* #168: Expanding calendars now removes objects with recurrence rules that - don't have a valid recurrence instance. -* #177: SCHEDULE-STATUS should not contain a reason phrase, only a status - code. -* #175: Parser can now read and skip the UTF-8 BOM. -* #179: Added `isFloating` to `DATE-TIME` properties. -* #179: Fixed jCal serialization of floating `DATE-TIME` properties. -* #173: vCard converter failed for `X-ABDATE` properties that had no - `X-ABLABEL`. -* #180: Added `PROFILE_CALDAV` and `PROFILE_CARDDAV` to enable validation rules - specific for CalDAV/CardDAV servers. -* #176: A missing `UID` is no longer an error, but a warning for the vCard - validator, unless `PROFILE_CARDDAV` is specified. - - -3.3.4 (2014-11-19) ------------------- - -* #154: Converting `ANNIVERSARY` to `X-ANNIVERSARY` and `X-ABDATE` and - vice-versa when converting to/from vCard 4. -* #154: It's now possible to easily select all vCard properties belonging to - a single group with `$vcard->{'ITEM1.'}` syntax. (@armin-hackmann) -* #156: Simpler way to check if a string is UTF-8. (@Hywan) -* Unittest improvements. -* #159: The recurrence iterator, freebusy generator and iCalendar DATE and - DATE-TIME properties can now all accept a reference timezone when working - floating times or all-day events. -* #159: Master events will no longer get a `RECURRENCE-ID` when expanding. -* #159: `RECURRENCE-ID` for all-day events will now be correct when expanding. -* #163: Added a `getTimeZone()` method to `VTIMEZONE` components. - - -3.3.3 (2014-10-09) ------------------- - -* #142: `CANCEL` and `REPLY` messages now include the `DTSTART` from the - original event. -* #143: `SCHEDULE-AGENT` on the `ORGANIZER` property is respected. -* #144: `PARTSTAT=NEEDS-ACTION` is now set for new invites, if no `PARTSTAT` is - set to support the inbox feature of iOS. -* #147: Bugs related to scheduling all-day events. -* #148: Ignore events that have attendees but no organizer. -* #149: Avoiding logging errors during timezone detection. This is a workaround - for a PHP bug. -* Support for "Line Islands Standard Time" windows timezone. -* #154: Correctly work around vCard parameters that have a value but no name. - - -3.3.2 (2014-09-19) ------------------- - -* Changed: iTip broker now sets RSVP status to false when replies are received. -* #118: iTip Message now has a `getScheduleStatus()` method. -* #119: Support for detecting 'significant changes'. -* #120: Support for `SCHEDULE-FORCE-SEND`. -* #121: iCal demands parameters containing the + sign to be quoted. -* #122: Don't generate REPLY messages for events that have been cancelled. -* #123: Added `SUMMARY` to iTip messages. -* #130: Incorrect validation rules for `RELATED` (should be `RELATED-TO`). -* #128: `ATTACH` in iCalendar is `URI` by default, not `BINARY`. -* #131: RRULE that doesn't provide a single valid instance now throws an - exception. -* #136: Validator rejects *all* control characters. We were missing a few. -* #133: Splitter objects will throw exceptions when receiving incompatible - objects. -* #127: Attendees who delete recurring event instances events they had already - declined earlier will no longer generate another reply. -* #125: Send CANCEL messages when ORGANIZER property gets deleted. - - -3.3.1 (2014-08-18) ------------------- - -* Changed: It's now possible to pass DateTime objects when using the magic - setters on properties. (`$event->DTSTART = new DateTime('now')`). -* #111: iTip Broker does not process attendee adding events to EXDATE. -* #112: EventIterator now sets TZID on RECURRENCE-ID. -* #113: Timezone support during creation of iTip REPLY messages. -* #114: VTIMEZONE is retained when generating new REQUEST objects. -* #114: Support for 'MAILTO:' style email addresses (in uppercase) in the iTip - broker. This improves evolution support. -* #115: Using REQUEST-STATUS from REPLY messages and now propegating that into - SCHEDULE-STATUS. - - -3.3.0 (2014-08-07) ------------------- - -* We now use PSR-4 for the directory structure. This means that everything - that was used to be in the `lib/Sabre/VObject` directory is now moved to - `lib/`. If you use composer to load this library, you shouldn't have to do - anything about that though. -* VEVENT now get populated with a DTSTAMP and UID property by default. -* BC Break: Removed the 'includes.php' file. Use composer instead. -* #103: Added support for processing [iTip][iTip] messages. This allows a user - to parse incoming iTip messages and apply the result on existing calendars, - or automatically generate invites/replies/cancellations based on changes that - a user made on objects. -* #75, #58, #18: Fixes related to overriding the first event in recurrences. -* Added: VCalendar::getBaseComponent to find the 'master' component in a - calendar. -* #51: Support for iterating RDATE properties. -* Fixed: Issue #101: RecurrenceIterator::nextMonthly() shows events that are - excluded events with wrong time - - -3.2.4 (2014-07-14) ------------------- - -* Added: Issue #98. The VCardConverter now takes `X-APPLE-OMIT-YEAR` into - consideration when converting between vCard 3 and 4. -* Fixed: Issue #96. Some support for Yahoo's broken vcards. -* Fixed: PHP 5.3 support was broken in the cli tool. - - -3.2.3 (2014-06-12) ------------------- - -* Validator now checks if DUE and DTSTART are of the same type in VTODO, and - ensures that DUE is always after DTSTART. -* Removed documentation from source repository, to http://sabre.io/vobject/ -* Expanded the vobject cli tool validation output to make it easier to find - issues. -* Fixed: vobject repair. It was not working for iCalendar objects. - - -3.2.2 (2014-05-07) ------------------- - -* Minor tweak in unittests to make it run on PHP 5.5.12. Json-prettifying - slightly changed which caused the test to fail. - - -3.2.1 (2014-05-03) ------------------- - -* Minor tweak to make the unittests run with the latest hhvm on travis. -* Updated timezone definitions. -* Updated copyright links to point to http://sabre.io/ - - -3.2.0 (2014-04-02) ------------------- - -* Now hhvm compatible! -* The validator can now detect a _lot_ more problems. Many rules for both - iCalendar and vCard were added. -* Added: bin/generate_vcards, a utility to generate random vcards for testing - purposes. Patches are welcome to add more data. -* Updated: Windows timezone mapping to latest version from unicode.org -* Changed: The timezone maps are now loaded in from external files, in - lib/Sabre/VObject/timezonedata. -* Added: Fixing badly encoded URL's from google contacts vcards. -* Fixed: Issue #68. Couldn't decode properties ending in a colon. -* Fixed: Issue #72. RecurrenceIterator should respect timezone in the UNTIL - clause. -* Fixed: Issue #67. BYMONTH limit on DAILY recurrences. -* Fixed: Issue #26. Return a more descriptive error when coming across broken - BYDAY rules. -* Fixed: Issue #28. Incorrect timezone detection for some timezones. -* Fixed: Issue #70. Casting a parameter with a null value to string would fail. -* Added: Support for rfc6715 and rfc6474. -* Added: Support for DateTime objects in the VCard DATE-AND-OR-TIME property. -* Added: UUIDUtil, for easily creating unique identifiers. -* Fixed: Issue #83. Creating new VALUE=DATE objects using php's DateTime. -* Fixed: Issue #86. Don't go into an infinite loop when php errors are - disabled and an invalid file is read. - - -3.1.4 (2014-03-30) ------------------- - -* Fixed: Issue #87: Several compatibility fixes related to timezone handling - changes in PHP 5.5.10. - - -3.1.3 (2013-10-02) ------------------- - -* Fixed: Support from properties from draft-daboo-valarm-extensions-04. Issue - #56. -* Fixed: Issue #54. Parsing a stream of multiple vcards separated by more than - one newline. Thanks @Vedmak for the patch. -* Fixed: Serializing vcard 2.1 parameters with no name caused a literal '1' to - be inserted. -* Added: VCardConverter removed properties that are no longer supported in vCard - 4.0. -* Added: vCards with a minimum number of values (such as N), but don't have that - many, are now automatically padded with empty components. -* Added: The vCard validator now also checks for a minimum number of components, - and has the ability to repair these. -* Added: Some support for vCard 2.1 in the VCard converter, to upgrade to vCard - 3.0 or 4.0. -* Fixed: Issue 60 Use Document::$componentMap when instantiating the top-level - VCalendar and VCard components. -* Fixed: Issue 62: Parsing iCalendar parameters with no value. -* Added: --forgiving option to vobject utility. -* Fixed: Compound properties such as ADR were not correctly split up in vCard - 2.1 quoted printable-encoded properties. -* Fixed: Issue 64: Encoding of binary properties of converted vCards. Thanks - @DominikTo for the patch. - - -3.1.2 (2013-08-13) ------------------- - -* Fixed: Setting correct property group on VCard conversion - - -3.1.1 (2013-08-02) ------------------- - -* Fixed: Issue #53. A regression in RecurrenceIterator. - - -3.1.0 (2013-07-27) ------------------- - -* Added: bad-ass new cli debugging utility (in bin/vobject). -* Added: jCal and jCard parser. -* Fixed: URI properties should not escape ; and ,. -* Fixed: VCard 4 documents now correctly use URI as a default value-type for - PHOTO and others. BINARY no longer exists in vCard 4. -* Added: Utility to convert between 2.1, 3.0 and 4.0 vCards. -* Added: You can now add() multiple parameters to a property in one call. -* Added: Parameter::has() for easily checking if a parameter value exists. -* Added: VCard::preferred() to find a preferred email, phone number, etc for a - contact. -* Changed: All $duration properties are now public. -* Added: A few validators for iCalendar documents. -* Fixed: Issue #50. RecurrenceIterator gives incorrect result when exception - events are out of order in the iCalendar file. -* Fixed: Issue #48. Overridden events in the recurrence iterator that were past - the UNTIL date were ignored. -* Added: getDuration for DURATION values such as TRIGGER. Thanks to - @SimonSimCity. -* Fixed: Issue #52. vCard 2.1 parameters with no name may lose values if there's - more than 1. Thanks to @Vedmak. - - -3.0.0 (2013-06-21) ------------------- - -* Fixed: includes.php file was still broken. Our tool to generate it had some - bugs. - - -3.0.0-beta4 (2013-06-21) ------------------------- - -* Fixed: includes.php was no longer up to date. - - -3.0.0-beta3 (2013-06-17) ------------------------- - -* Added: OPTION_FORGIVING now also allows slashes in property names. -* Fixed: DateTimeParser no longer fails on dates with years < 1000 & > 4999 -* Fixed: Issue 36: Workaround for the recurrenceiterator and caldav events with - a missing base event. -* Fixed: jCard encoding of TIME properties. -* Fixed: jCal encoding of REQUEST-STATUS, GEO and PERIOD values. - - -3.0.0-beta2 (2013-06-10) ------------------------- - -* Fixed: Corrected includes.php file. -* Fixed: vCard date-time parser supported extended-format dates as well. -* Changed: Properties have been moved to an ICalendar or VCard directory. -* Fixed: Couldn't parse vCard 3 extended format dates and times. -* Fixed: Couldn't export jCard DATE values correctly. -* Fixed: Recursive loop in ICalendar\DateTime property. - - -3.0.0-beta1 (2013-06-07) ------------------------- - -* Added: jsonSerialize() for creating jCal and jCard documents. -* Added: helper method to parse vCard dates and times. -* Added: Specialized classes for FLOAT, LANGUAGE-TAG, TIME, TIMESTAMP, - DATE-AND-OR-TIME, CAL-ADDRESS, UNKNOWN and UTC-OFFSET properties. -* Removed: CommaSeparatedText property. Now included into Text. -* Fixed: Multiple parameters with the same name are now correctly encoded. -* Fixed: Parameter values containing a comma are now enclosed in double-quotes. -* Fixed: Iterating parameter values should now fully work as expected. -* Fixed: Support for vCard 2.1 nameless parameters. -* Changed: $valueMap, $componentMap and $propertyMap now all use fully-qualified - class names, so they are actually overridable. -* Fixed: Updating DATE-TIME to DATE values now behaves like expected. - - -3.0.0-alpha4 (2013-05-31) -------------------------- - -* Added: It's now possible to send parser options to the splitter classes. -* Added: A few tweaks to improve component and property creation. - - -3.0.0-alpha3 (2013-05-13) -------------------------- - -* Changed: propertyMap, valueMap and componentMap are now static properties. -* Changed: Component::remove() will throw an exception when trying to a node - that's not a child of said component. -* Added: Splitter objects are now faster, line numbers are accurately reported - and use less memory. -* Added: MimeDir parser can now continue parsing with the same stream buffer. -* Fixed: vobjectvalidate.php is operational again. -* Fixed: \r is properly stripped in text values. -* Fixed: QUOTED-PRINTABLE is now correctly encoded as well as encoded, for - vCards 2.1. -* Fixed: Parser assumes vCard 2.1, if no version was supplied. - - -3.0.0-alpha2 (2013-05-22) -------------------------- - -* Fixed: vCard URL properties were referencing a non-existant class. - - -3.0.0-alpha1 (2013-05-21) -------------------------- - -* Fixed: Now correctly dealing with escaping of properties. This solves the - problem with double-backslashes where they don't belong. -* Added: Easy support for properties with more than one value, using setParts - and getParts. -* Added: Support for broken 2.1 vCards produced by microsoft. -* Added: Automatically decoding quoted-printable values. -* Added: Automatically decoding base64 values. -* Added: Decoding RFC6868 parameter values (uses ^ as an escape character). -* Added: Fancy new MimeDir parser that can also parse streams. -* Added: Automatically mapping many, many properties to a property-class with - specialized API's. -* Added: remove() method for easily removing properties and sub-components - components. -* Changed: Components, Properties and Parameters can no longer be created with - Component::create, Property::create and Parameter::create. They must instead - be created through the root component. (A VCalendar or VCard object). -* Changed: API for DateTime properties has slightly changed. -* Changed: the ->value property is now protected everywhere. Use getParts() and - getValue() instead. -* BC Break: No support for mac newlines (\r). Never came across these anyway. -* Added: add() method to the Property class. -* Added: It's now possible to easy set multi-value properties as arrays. -* Added: When setting date-time properties you can just pass PHP's DateTime - object. -* Added: New components automatically get a bunch of default properties, such as - VERSION and CALSCALE. -* Added: You can add new sub-components much quicker with the magic setters, and - add() method. - - -2.1.7 (2015-01-21) ------------------- - -* Fixed: Issue #94, a workaround for bad escaping of ; and , in compound - properties. It's not a full solution, but it's an improvement for those - stuck in the 2.1 versions. - - -2.1.6 (2014-12-10) ------------------- - -* Fixed: Minor change to make sure that unittests succeed on every PHP version. - - -2.1.5 (2014-06-03) ------------------- - -* Fixed: #94: Better parameter escaping. -* Changed: Documentation cleanups. - - -2.1.4 (2014-03-30) ------------------- - -* Fixed: Issue #87: Several compatibility fixes related to timezone handling - changes in PHP 5.5.10. - - -2.1.3 (2013-10-02) ------------------- - -* Fixed: Issue #55. \r must be stripped from property values. -* Fixed: Issue #65. Putting quotes around parameter values that contain a colon. - - -2.1.2 (2013-08-02) ------------------- - -* Fixed: Issue #53. A regression in RecurrenceIterator. - - -2.1.1 (2013-07-27) ------------------- - -* Fixed: Issue #50. RecurrenceIterator gives incorrect result when exception - events are out of order in the iCalendar file. -* Fixed: Issue #48. Overridden events in the recurrence iterator that were past - the UNTIL date were ignored. - - -2.1.0 (2013-06-17) ------------------- - -* This version is fully backwards compatible with 2.0.\*. However, it contains a - few new API's that mimic the VObject 3 API. This allows it to be used a - 'bridge' version. Specifically, this new version exists so SabreDAV 1.7 and - 1.8 can run with both the 2 and 3 versions of this library. -* Added: Property\DateTime::hasTime(). -* Added: Property\MultiDateTime::hasTime(). -* Added: Property::getValue(). -* Added: Document class. -* Added: Document::createComponent and Document::createProperty. -* Added: Parameter::getValue(). - - -2.0.7 (2013-03-05) ------------------- - -* Fixed: Microsoft re-uses their magic numbers for different timezones, - specifically id 2 for both Sarajevo and Lisbon). A workaround was added to - deal with this. - - -2.0.6 (2013-02-17) ------------------- - -* Fixed: The reader now properly parses parameters without a value. - - -2.0.5 (2012-11-05) ------------------- - -* Fixed: The FreeBusyGenerator is now properly using the factory methods for - creation of components and properties. - - -2.0.4 (2012-11-02) ------------------- - -* Added: Known Lotus Notes / Domino timezone id's. - - -2.0.3 (2012-10-29) ------------------- - -* Added: Support for 'GMT+????' format in TZID's. -* Added: Support for formats like SystemV/EST5EDT in TZID's. -* Fixed: RecurrenceIterator now repairs recurrence rules where UNTIL < DTSTART. -* Added: Support for BYHOUR in FREQ=DAILY (@hollodk). -* Added: Support for BYHOUR and BYDAY in FREQ=WEEKLY. - - -2.0.2 (2012-10-06) ------------------- - -* Added: includes.php file, to load the entire library in one go. -* Fixed: A problem with determining alarm triggers for TODO's. - - -2.0.1 (2012-09-22) ------------------- - -* Removed: Element class. It wasn't used. -* Added: Basic validation and repair methods for broken input data. -* Fixed: RecurrenceIterator could infinitely loop when an INTERVAL of 0 was - specified. -* Added: A cli script that can validate and automatically repair vcards and - iCalendar objects. -* Added: A new 'Compound' property, that can automatically split up parts for - properties such as N, ADR, ORG and CATEGORIES. -* Added: Splitter classes, that can split up large objects (such as exports) - into individual objects (thanks @DominikTo and @armin-hackmann). -* Added: VFREEBUSY component, which allows easily checking wether timeslots are - available. -* Added: The Reader class now has a 'FORGIVING' option, which allows it to parse - properties with incorrect characters in the name (at this time, it just allows - underscores). -* Added: Also added the 'IGNORE_INVALID_LINES' option, to completely disregard - any invalid lines. -* Fixed: A bug in Windows timezone-id mappings for times created in Greenlands - timezone (sorry Greenlanders! I do care!). -* Fixed: DTEND was not generated correctly for VFREEBUSY reports. -* Fixed: Parser is at least 25% faster with real-world data. - - -2.0.0 (2012-08-08) ------------------- - -* VObject is now a separate project from SabreDAV. See the SabreDAV changelog - for version information before 2.0. -* New: VObject library now uses PHP 5.3 namespaces. -* New: It's possible to specify lists of parameters when constructing - properties. -* New: made it easier to construct the FreeBusyGenerator. - -[iTip]: http://tools.ietf.org/html/rfc5546 diff --git a/vendor/sabre/vobject/bin/bench_freebusygenerator.php b/vendor/sabre/vobject/bin/bench_freebusygenerator.php index 1299c14fb..963623d18 100644 --- a/vendor/sabre/vobject/bin/bench_freebusygenerator.php +++ b/vendor/sabre/vobject/bin/bench_freebusygenerator.php @@ -11,7 +11,7 @@ if ($argc < 2) { echo "The process will be repeated 100 times to get accurate stats\n"; echo "\n"; echo 'Usage: '.$argv[0]." inputfile.ics\n"; - die(); + exit(); } list(, $inputFile) = $argv; diff --git a/vendor/sabre/vobject/bin/bench_manipulatevcard.php b/vendor/sabre/vobject/bin/bench_manipulatevcard.php index f229091db..df6d9f23d 100644 --- a/vendor/sabre/vobject/bin/bench_manipulatevcard.php +++ b/vendor/sabre/vobject/bin/bench_manipulatevcard.php @@ -10,7 +10,7 @@ if ($argc < 2) { echo 'system.'; echo "\n"; echo 'Usage: '.$argv[0]." inputfile.vcf\n"; - die(); + exit(); } list(, $inputFile) = $argv; diff --git a/vendor/sabre/vobject/bin/fetch_windows_zones.php b/vendor/sabre/vobject/bin/fetch_windows_zones.php index 9c4e51abd..2361dc309 100755 --- a/vendor/sabre/vobject/bin/fetch_windows_zones.php +++ b/vendor/sabre/vobject/bin/fetch_windows_zones.php @@ -1,13 +1,12 @@ #!/usr/bin/env php <?php -$windowsZonesUrl = 'http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml'; +$windowsZonesUrl = 'https://raw.githubusercontent.com/unicode-org/cldr/master/common/supplemental/windowsZones.xml'; $outputFile = __DIR__.'/../lib/timezonedata/windowszones.php'; echo 'Fetching timezone map from: '.$windowsZonesUrl, "\n"; $data = file_get_contents($windowsZonesUrl); - $xml = simplexml_load_string($data); $map = []; @@ -44,6 +43,6 @@ fclose($f); echo "Formatting\n"; -exec(__DIR__.'/sabre-cs-fixer fix '.escapeshellarg($outputFile)); +exec(__DIR__.'/../vendor/bin/php-cs-fixer fix '.escapeshellarg($outputFile)); echo "Done\n"; diff --git a/vendor/sabre/vobject/bin/generateicalendardata.php b/vendor/sabre/vobject/bin/generateicalendardata.php index 62b6107c5..019ed9745 100755 --- a/vendor/sabre/vobject/bin/generateicalendardata.php +++ b/vendor/sabre/vobject/bin/generateicalendardata.php @@ -18,7 +18,7 @@ The iCalendar output goes to stdout. Other messages to stderr. HI ); - die(); + exit(); } $events = 100; @@ -77,7 +77,7 @@ $result = $calendar->validate(); if ($result) { fwrite(STDERR, "Errors!\n"); fwrite(STDERR, print_r($result, true)); - die(-1); + exit(-1); } fwrite(STDERR, "Serializing this beast\n"); diff --git a/vendor/sabre/vobject/bin/mergeduplicates.php b/vendor/sabre/vobject/bin/mergeduplicates.php index e6cde73dd..31b2c14ab 100755 --- a/vendor/sabre/vobject/bin/mergeduplicates.php +++ b/vendor/sabre/vobject/bin/mergeduplicates.php @@ -19,7 +19,7 @@ foreach ($paths as $path) { if (!class_exists('Sabre\\VObject\\Version')) { fwrite(STDERR, "Composer autoloader could not be loaded.\n"); - die(1); + exit(1); } echo 'sabre/vobject ', Version::VERSION, " duplicate contact merge tool\n"; @@ -27,7 +27,7 @@ echo 'sabre/vobject ', Version::VERSION, " duplicate contact merge tool\n"; if ($argc < 3) { echo "\n"; echo 'Usage: ', $argv[0], " input.vcf output.vcf [debug.log]\n"; - die(1); + exit(1); } $input = fopen($argv[1], 'r'); diff --git a/vendor/sabre/vobject/bin/rrulebench.php b/vendor/sabre/vobject/bin/rrulebench.php index 583da574c..69008002e 100644 --- a/vendor/sabre/vobject/bin/rrulebench.php +++ b/vendor/sabre/vobject/bin/rrulebench.php @@ -9,7 +9,7 @@ if ($argc < 4) { echo 'system.'; echo "\n"; echo 'Usage: '.$argv[0]." inputfile.ics startdate enddate\n"; - die(); + exit(); } list(, $inputFile, $startDate, $endDate) = $argv; diff --git a/vendor/sabre/vobject/composer.json b/vendor/sabre/vobject/composer.json index f26c0b5ec..b745b1fa6 100644 --- a/vendor/sabre/vobject/composer.json +++ b/vendor/sabre/vobject/composer.json @@ -37,8 +37,9 @@ "sabre/xml" : "^2.1" }, "require-dev" : { - "friendsofphp/php-cs-fixer": "~2.16.7", + "friendsofphp/php-cs-fixer": "~2.17.1", "phpunit/phpunit" : "^7.5 || ^8.5 || ^9.0", + "phpunit/php-invoker" : "^2.0 || ^3.1", "phpstan/phpstan": "^0.12" }, "suggest" : { diff --git a/vendor/sabre/vobject/lib/Cli.php b/vendor/sabre/vobject/lib/Cli.php index f3e419b15..4984ac9b2 100644 --- a/vendor/sabre/vobject/lib/Cli.php +++ b/vendor/sabre/vobject/lib/Cli.php @@ -2,8 +2,7 @@ namespace Sabre\VObject; -use - InvalidArgumentException; +use InvalidArgumentException; /** * This is the CLI interface for sabre-vobject. @@ -137,17 +136,14 @@ class Cli // jcard/jcal documents case 'jcard': case 'jcal': - // specific document versions case 'vcard21': case 'vcard30': case 'vcard40': case 'icalendar20': - // specific formats case 'json': case 'mimedir': - // icalendar/vcad case 'icalendar': case 'vcard': @@ -183,7 +179,6 @@ class Cli case 'vcard30': case 'vcard40': case 'icalendar20': - $this->inputFormat = 'mimedir'; break; @@ -211,7 +206,7 @@ class Cli } if (!in_array($positional[0], ['validate', 'repair', 'convert', 'color'])) { - throw new InvalidArgumentException('Uknown command: '.$positional[0]); + throw new InvalidArgumentException('Unknown command: '.$positional[0]); } } catch (InvalidArgumentException $e) { $this->showHelp(); diff --git a/vendor/sabre/vobject/lib/Component.php b/vendor/sabre/vobject/lib/Component.php index da45eb29f..07f6a627f 100644 --- a/vendor/sabre/vobject/lib/Component.php +++ b/vendor/sabre/vobject/lib/Component.php @@ -160,9 +160,9 @@ class Component extends Node return; } } - } - throw new \InvalidArgumentException('The item you passed to remove() was not a child of this component'); + throw new \InvalidArgumentException('The item you passed to remove() was not a child of this component'); + } } /** diff --git a/vendor/sabre/vobject/lib/Component/VCalendar.php b/vendor/sabre/vobject/lib/Component/VCalendar.php index 40e09a1c0..4db318135 100644 --- a/vendor/sabre/vobject/lib/Component/VCalendar.php +++ b/vendor/sabre/vobject/lib/Component/VCalendar.php @@ -309,7 +309,7 @@ class VCalendar extends VObject\Document foreach ($this->children() as $child) { if ($child instanceof Property && 'PRODID' !== $child->name) { - // We explictly want to ignore PRODID, because we want to + // We explicitly want to ignore PRODID, because we want to // overwrite it with our own. $newChildren[] = clone $child; } elseif ($child instanceof Component && 'VTIMEZONE' !== $child->name) { diff --git a/vendor/sabre/vobject/lib/Component/VCard.php b/vendor/sabre/vobject/lib/Component/VCard.php index 51321949f..2430df621 100644 --- a/vendor/sabre/vobject/lib/Component/VCard.php +++ b/vendor/sabre/vobject/lib/Component/VCard.php @@ -373,7 +373,7 @@ class VCard extends VObject\Document /** * Returns a preferred field. * - * VCards can indicate wether a field such as ADR, TEL or EMAIL is + * VCards can indicate whether a field such as ADR, TEL or EMAIL is * preferred by specifying TYPE=PREF (vcard 2.1, 3) or PREF=x (vcard 4, x * being a number between 1 and 100). * diff --git a/vendor/sabre/vobject/lib/FreeBusyData.php b/vendor/sabre/vobject/lib/FreeBusyData.php index d05dfc799..4d9f441ce 100644 --- a/vendor/sabre/vobject/lib/FreeBusyData.php +++ b/vendor/sabre/vobject/lib/FreeBusyData.php @@ -84,7 +84,7 @@ class FreeBusyData 'type' => $type, ]; - $preceedingItem = $this->data[$insertStartIndex - 1]; + $precedingItem = $this->data[$insertStartIndex - 1]; if ($this->data[$insertStartIndex - 1]['start'] === $start) { // The old item starts at the exact same point as the new item. --$insertStartIndex; @@ -122,11 +122,11 @@ class FreeBusyData // between. if (-1 === $itemsToDelete) { $itemsToDelete = 0; - if ($newItem['end'] < $preceedingItem['end']) { + if ($newItem['end'] < $precedingItem['end']) { $newItems[] = [ 'start' => $newItem['end'] + 1, - 'end' => $preceedingItem['end'], - 'type' => $preceedingItem['type'], + 'end' => $precedingItem['end'], + 'type' => $precedingItem['type'], ]; } } diff --git a/vendor/sabre/vobject/lib/FreeBusyGenerator.php b/vendor/sabre/vobject/lib/FreeBusyGenerator.php index a1c24044c..81b8126d5 100644 --- a/vendor/sabre/vobject/lib/FreeBusyGenerator.php +++ b/vendor/sabre/vobject/lib/FreeBusyGenerator.php @@ -126,7 +126,7 @@ class FreeBusyGenerator /** * Sets the input objects. * - * You must either specify a valendar object as a string, or as the parse + * You must either specify a vcalendar object as a string, or as the parse * Component. * It's also possible to specify multiple objects as an array. * @@ -362,7 +362,6 @@ class FreeBusyGenerator foreach ($object->getBaseComponents() as $component) { switch ($component->name) { case 'VEVENT': - $FBTYPE = 'BUSY'; if (isset($component->TRANSP) && ('TRANSPARENT' === strtoupper($component->TRANSP))) { break; diff --git a/vendor/sabre/vobject/lib/Parameter.php b/vendor/sabre/vobject/lib/Parameter.php index e39d320a1..72f2ecbcb 100644 --- a/vendor/sabre/vobject/lib/Parameter.php +++ b/vendor/sabre/vobject/lib/Parameter.php @@ -95,13 +95,11 @@ class Parameter extends Node case 'WORK': case 'HOME': case 'PREF': - // Delivery Label Type case 'DOM': case 'INTL': case 'POSTAL': case 'PARCEL': - // Telephone types case 'VOICE': case 'FAX': @@ -113,7 +111,6 @@ class Parameter extends Node case 'CAR': case 'ISDN': case 'VIDEO': - // EMAIL types (lol) case 'AOL': case 'APPLELINK': @@ -127,7 +124,6 @@ class Parameter extends Node case 'PRODIGY': case 'TLX': case 'X400': - // Photo / Logo format types case 'GIF': case 'CGM': @@ -143,12 +139,10 @@ class Parameter extends Node case 'MPEG2': case 'AVI': case 'QTIME': - // Sound Digital Audio Type case 'WAVE': case 'PCM': case 'AIFF': - // Key types case 'X509': case 'PGP': @@ -299,7 +293,7 @@ class Parameter extends Node // https://tools.ietf.org/html/rfc6868 // // But we've found that iCal (7.0, shipped with OSX 10.9) - // severaly trips on + characters not being quoted, so we + // severely trips on + characters not being quoted, so we // added + as well. if (!preg_match('#(?: [\n":;\^,\+] )#x', $item)) { return $out.$item; diff --git a/vendor/sabre/vobject/lib/Parser/MimeDir.php b/vendor/sabre/vobject/lib/Parser/MimeDir.php index ea5ac0326..385d340d7 100644 --- a/vendor/sabre/vobject/lib/Parser/MimeDir.php +++ b/vendor/sabre/vobject/lib/Parser/MimeDir.php @@ -343,7 +343,7 @@ class MimeDir extends Parser ) (?=[;:,]) /xi"; - //echo $regex, "\n"; die(); + //echo $regex, "\n"; exit(); preg_match_all($regex, $line, $matches, PREG_SET_ORDER); $property = [ diff --git a/vendor/sabre/vobject/lib/Property/Boolean.php b/vendor/sabre/vobject/lib/Property/Boolean.php index 9fb2bce35..4bd6ffdfe 100644 --- a/vendor/sabre/vobject/lib/Property/Boolean.php +++ b/vendor/sabre/vobject/lib/Property/Boolean.php @@ -2,8 +2,7 @@ namespace Sabre\VObject\Property; -use - Sabre\VObject\Property; +use Sabre\VObject\Property; /** * Boolean property. diff --git a/vendor/sabre/vobject/lib/Property/ICalendar/CalAddress.php b/vendor/sabre/vobject/lib/Property/ICalendar/CalAddress.php index e89bb31f9..86be66c15 100644 --- a/vendor/sabre/vobject/lib/Property/ICalendar/CalAddress.php +++ b/vendor/sabre/vobject/lib/Property/ICalendar/CalAddress.php @@ -2,8 +2,7 @@ namespace Sabre\VObject\Property\ICalendar; -use - Sabre\VObject\Property\Text; +use Sabre\VObject\Property\Text; /** * CalAddress property. diff --git a/vendor/sabre/vobject/lib/Property/ICalendar/DateTime.php b/vendor/sabre/vobject/lib/Property/ICalendar/DateTime.php index f2dbdeba3..d635e17ae 100644 --- a/vendor/sabre/vobject/lib/Property/ICalendar/DateTime.php +++ b/vendor/sabre/vobject/lib/Property/ICalendar/DateTime.php @@ -184,7 +184,7 @@ class DateTime extends Property * Sets the property as multiple date-time objects. * * The first value will be used as a reference for the timezones, and all - * the otehr values will be adjusted for that timezone + * the other values will be adjusted for that timezone * * @param DateTimeInterface[] $dt * @param bool isFloating If set to true, timezones will be ignored diff --git a/vendor/sabre/vobject/lib/Property/IntegerValue.php b/vendor/sabre/vobject/lib/Property/IntegerValue.php index 6f709bfff..3ae775214 100644 --- a/vendor/sabre/vobject/lib/Property/IntegerValue.php +++ b/vendor/sabre/vobject/lib/Property/IntegerValue.php @@ -2,8 +2,7 @@ namespace Sabre\VObject\Property; -use - Sabre\VObject\Property; +use Sabre\VObject\Property; /** * Integer property. diff --git a/vendor/sabre/vobject/lib/Property/VCard/LanguageTag.php b/vendor/sabre/vobject/lib/Property/VCard/LanguageTag.php index 697273989..318ea0231 100644 --- a/vendor/sabre/vobject/lib/Property/VCard/LanguageTag.php +++ b/vendor/sabre/vobject/lib/Property/VCard/LanguageTag.php @@ -2,8 +2,7 @@ namespace Sabre\VObject\Property\VCard; -use - Sabre\VObject\Property; +use Sabre\VObject\Property; /** * LanguageTag property. diff --git a/vendor/sabre/vobject/lib/Recur/EventIterator.php b/vendor/sabre/vobject/lib/Recur/EventIterator.php index fd904b383..e42ca1360 100644 --- a/vendor/sabre/vobject/lib/Recur/EventIterator.php +++ b/vendor/sabre/vobject/lib/Recur/EventIterator.php @@ -83,7 +83,7 @@ class EventIterator implements \Iterator * 2. You can pass an array of VEVENTs (all UIDS should match). * 3. You can pass a single VEVENT component. * - * Only the second method is recomended. The other 1 and 3 will be removed + * Only the second method is recommended. The other 1 and 3 will be removed * at some point in the future. * * The $uid parameter is only required for the first method. diff --git a/vendor/sabre/vobject/lib/Recur/RRuleIterator.php b/vendor/sabre/vobject/lib/Recur/RRuleIterator.php index 55581e9ac..0511f0ade 100644 --- a/vendor/sabre/vobject/lib/Recur/RRuleIterator.php +++ b/vendor/sabre/vobject/lib/Recur/RRuleIterator.php @@ -468,6 +468,13 @@ class RRuleIterator implements Iterator // beginning. $currentDayOfMonth = 0; + // For some reason the "until" parameter was not being used here, + // that's why the workaround of the 10000 year bug was needed at all + // let's stop it before the "until" parameter date + if ($this->until && $this->currentDate->getTimestamp() >= $this->until->getTimestamp()) { + return; + } + // To prevent running this forever (better: until we hit the max date of DateTimeImmutable) we simply // stop at 9999-12-31. Looks like the year 10000 problem is not solved in php .... if ($this->currentDate->getTimestamp() > 253402300799) { @@ -536,7 +543,7 @@ class RRuleIterator implements Iterator foreach ($this->byWeekNo as $byWeekNo) { foreach ($dayOffsets as $dayOffset) { $date = clone $this->currentDate; - $date->setISODate($currentYear, $byWeekNo, $dayOffset); + $date = $date->setISODate($currentYear, $byWeekNo, $dayOffset); if ($date > $this->currentDate) { $checkDates[] = $date; @@ -717,7 +724,6 @@ class RRuleIterator implements Iterator break; case 'INTERVAL': - case 'COUNT': $val = (int) $value; if ($val < 1) { @@ -877,7 +883,7 @@ class RRuleIterator implements Iterator foreach ($this->byMonthDay as $monthDay) { // Removing values that are out of range for this month if ($monthDay > $startDate->format('t') || - $monthDay < 0 - $startDate->format('t')) { + $monthDay < 0 - $startDate->format('t')) { continue; } if ($monthDay > 0) { diff --git a/vendor/sabre/vobject/lib/Version.php b/vendor/sabre/vobject/lib/Version.php index 29ba84f88..63452400f 100644 --- a/vendor/sabre/vobject/lib/Version.php +++ b/vendor/sabre/vobject/lib/Version.php @@ -14,5 +14,5 @@ class Version /** * Full version number. */ - const VERSION = '4.3.3'; + const VERSION = '4.3.5'; } diff --git a/vendor/sabre/vobject/lib/timezonedata/windowszones.php b/vendor/sabre/vobject/lib/timezonedata/windowszones.php index af3904b12..2049a95c1 100644 --- a/vendor/sabre/vobject/lib/timezonedata/windowszones.php +++ b/vendor/sabre/vobject/lib/timezonedata/windowszones.php @@ -3,14 +3,14 @@ /** * Automatically generated timezone file. * - * Last update: 2016-08-24T17:35:38-04:00 - * Source: http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml + * Last update: 2020-12-13T17:38:12+05:45 + * Source: https://raw.githubusercontent.com/unicode-org/cldr/master/common/supplemental/windowsZones.xml * - * @copyright Copyright (C) 2011-2015 fruux GmbH (https://fruux.com/). + * @copyright Copyright (C) fruux GmbH (https://fruux.com/). * @license http://sabre.io/license/ Modified BSD License */ -return [ +return [ 'AUS Central Standard Time' => 'Australia/Darwin', 'AUS Eastern Standard Time' => 'Australia/Sydney', 'Afghanistan Standard Time' => 'Asia/Kabul', @@ -74,6 +74,7 @@ return [ 'Line Islands Standard Time' => 'Pacific/Kiritimati', 'Lord Howe Standard Time' => 'Australia/Lord_Howe', 'Magadan Standard Time' => 'Asia/Magadan', + 'Magallanes Standard Time' => 'America/Punta_Arenas', 'Marquesas Standard Time' => 'Pacific/Marquesas', 'Mauritius Standard Time' => 'Indian/Mauritius', 'Middle East Standard Time' => 'Asia/Beirut', @@ -91,11 +92,13 @@ return [ 'North Asia East Standard Time' => 'Asia/Irkutsk', 'North Asia Standard Time' => 'Asia/Krasnoyarsk', 'North Korea Standard Time' => 'Asia/Pyongyang', + 'Omsk Standard Time' => 'Asia/Omsk', 'Pacific SA Standard Time' => 'America/Santiago', 'Pacific Standard Time' => 'America/Los_Angeles', 'Pacific Standard Time (Mexico)' => 'America/Tijuana', 'Pakistan Standard Time' => 'Asia/Karachi', 'Paraguay Standard Time' => 'America/Asuncion', + 'Qyzylorda Standard Time' => 'Asia/Qyzylorda', 'Romance Standard Time' => 'Europe/Paris', 'Russia Time Zone 10' => 'Asia/Srednekolymsk', 'Russia Time Zone 11' => 'Asia/Kamchatka', @@ -108,9 +111,12 @@ return [ 'Saint Pierre Standard Time' => 'America/Miquelon', 'Sakhalin Standard Time' => 'Asia/Sakhalin', 'Samoa Standard Time' => 'Pacific/Apia', + 'Sao Tome Standard Time' => 'Africa/Sao_Tome', + 'Saratov Standard Time' => 'Europe/Saratov', 'Singapore Standard Time' => 'Asia/Singapore', 'South Africa Standard Time' => 'Africa/Johannesburg', 'Sri Lanka Standard Time' => 'Asia/Colombo', + 'Sudan Standard Time' => 'Africa/Khartoum', 'Syria Standard Time' => 'Asia/Damascus', 'Taipei Standard Time' => 'Asia/Taipei', 'Tasmania Standard Time' => 'Australia/Hobart', @@ -125,6 +131,7 @@ return [ 'US Mountain Standard Time' => 'America/Phoenix', 'UTC' => 'Etc/GMT', 'UTC+12' => 'Etc/GMT-12', + 'UTC+13' => 'Etc/GMT-13', 'UTC-02' => 'Etc/GMT+2', 'UTC-08' => 'Etc/GMT+8', 'UTC-09' => 'Etc/GMT+9', @@ -132,6 +139,7 @@ return [ 'Ulaanbaatar Standard Time' => 'Asia/Ulaanbaatar', 'Venezuela Standard Time' => 'America/Caracas', 'Vladivostok Standard Time' => 'Asia/Vladivostok', + 'Volgograd Standard Time' => 'Europe/Volgograd', 'W. Australia Standard Time' => 'Australia/Perth', 'W. Central Africa Standard Time' => 'Africa/Lagos', 'W. Europe Standard Time' => 'Europe/Berlin', @@ -140,4 +148,5 @@ return [ 'West Bank Standard Time' => 'Asia/Hebron', 'West Pacific Standard Time' => 'Pacific/Port_Moresby', 'Yakutsk Standard Time' => 'Asia/Yakutsk', + 'Yukon Standard Time' => 'America/Whitehorse', ]; diff --git a/vendor/sabre/vobject/phpstan.neon b/vendor/sabre/vobject/phpstan.neon deleted file mode 100644 index c705178c9..000000000 --- a/vendor/sabre/vobject/phpstan.neon +++ /dev/null @@ -1,4 +0,0 @@ -parameters: - level: 1 - universalObjectCratesClasses: - - \Sabre\VObject\Component diff --git a/vendor/sabre/vobject/tests/bootstrap.php b/vendor/sabre/vobject/tests/bootstrap.php deleted file mode 100644 index 2496aa4ff..000000000 --- a/vendor/sabre/vobject/tests/bootstrap.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php - -date_default_timezone_set('UTC'); - -$try = [ - __DIR__.'/../vendor/autoload.php', - __DIR__.'/../../../autoload.php', -]; - -foreach ($try as $path) { - if (file_exists($path)) { - $autoLoader = include $path; - break; - } -} diff --git a/vendor/sabre/vobject/tests/phpunit.xml b/vendor/sabre/vobject/tests/phpunit.xml deleted file mode 100644 index c0588d460..000000000 --- a/vendor/sabre/vobject/tests/phpunit.xml +++ /dev/null @@ -1,21 +0,0 @@ -<phpunit - colors="true" - bootstrap="bootstrap.php" - convertErrorsToExceptions="true" - convertNoticesToExceptions="true" - convertWarningsToExceptions="true" - beStrictAboutTestsThatDoNotTestAnything="true" - beStrictAboutOutputDuringTests="true" - > - <testsuites> - <testsuite name="Sabre\VObject"> - <directory>.</directory> - </testsuite> - </testsuites> - - <filter> - <whitelist addUncoveredFilesFromWhitelist="true"> - <directory suffix=".php">../lib/</directory> - </whitelist> - </filter> -</phpunit> diff --git a/vendor/simplepie/simplepie/.travis.yml b/vendor/simplepie/simplepie/.travis.yml old mode 100755 new mode 100644 diff --git a/vendor/simplepie/simplepie/library/SimplePie.php b/vendor/simplepie/simplepie/library/SimplePie.php old mode 100755 new mode 100644 diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php old mode 100755 new mode 100644 diff --git a/vendor/simplepie/simplepie/library/SimplePie/Registry.php b/vendor/simplepie/simplepie/library/SimplePie/Registry.php old mode 100755 new mode 100644 diff --git a/vendor/smarty/smarty/CHANGELOG.md b/vendor/smarty/smarty/CHANGELOG.md index 7eb151bf8..06b898223 100644 --- a/vendor/smarty/smarty/CHANGELOG.md +++ b/vendor/smarty/smarty/CHANGELOG.md @@ -6,6 +6,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [3.1.38] - 2021-01-08 + +### Fixed +- Smarty::SMARTY_VERSION wasn't updated https://github.com/smarty-php/smarty/issues/628 + +## [3.1.37] - 2021-01-07 + +### Changed +- Changed error handlers and handling of undefined constants for php8-compatibility (set $errcontext argument optional) https://github.com/smarty-php/smarty/issues/605 +- Changed expected error levels in unit tests for php8-compatibility +- Travis unit tests now run for all php versions >= 5.3, including php8 +- Travis runs on Xenial where possible + +### Fixed +- PHP5.3 compatibility fixes +- Brought lexer source functionally up-to-date with compiled version + ## [3.1.36] - 2020-04-14 ### Fixed diff --git a/vendor/smarty/smarty/LICENSE b/vendor/smarty/smarty/LICENSE index fb8ca6c6f..595e5993d 100644 --- a/vendor/smarty/smarty/LICENSE +++ b/vendor/smarty/smarty/LICENSE @@ -3,7 +3,7 @@ Smarty: the PHP compiling template engine This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. + version 3.0 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/vendor/smarty/smarty/composer.json b/vendor/smarty/smarty/composer.json index 889cb9444..183f9f240 100644 --- a/vendor/smarty/smarty/composer.json +++ b/vendor/smarty/smarty/composer.json @@ -40,7 +40,7 @@ } }, "require-dev": { - "phpunit/phpunit": "6.4.1", + "phpunit/phpunit": "^7.5 || ^6.5 || ^5.7 || ^4.8", "smarty/smarty-lexer": "^3.1" } } diff --git a/vendor/smarty/smarty/lexer/smarty_internal_templateparser.y b/vendor/smarty/smarty/lexer/smarty_internal_templateparser.y index b8c00e5d9..c6890642f 100644 --- a/vendor/smarty/smarty/lexer/smarty_internal_templateparser.y +++ b/vendor/smarty/smarty/lexer/smarty_internal_templateparser.y @@ -249,7 +249,13 @@ template ::= template PHP(B). { // template text template ::= template TEXT(B). { - $this->current_buffer->append_subtree($this, $this->compiler->processText(B)); + $text = $this->yystack[ $this->yyidx + 0 ]->minor; + + if ((string)$text == '') { + $this->current_buffer->append_subtree($this, null); + } + + $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text($text, $this->strip)); } // strip on template ::= template STRIPON. { @@ -308,7 +314,7 @@ smartytag(A)::= SIMPLETAG(B). { $tag = trim(substr(B, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength())); if ($tag == 'strip') { $this->strip = true; - A = null;; + A = null; } else { if (defined($tag)) { if ($this->security) { diff --git a/vendor/smarty/smarty/libs/Smarty.class.php b/vendor/smarty/smarty/libs/Smarty.class.php index 9e0ca7670..6564be6d2 100644 --- a/vendor/smarty/smarty/libs/Smarty.class.php +++ b/vendor/smarty/smarty/libs/Smarty.class.php @@ -6,7 +6,7 @@ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * version 3.0 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -27,7 +27,6 @@ * @author Uwe Tews <uwe dot tews at gmail dot com> * @author Rodney Rehm * @package Smarty - * @version 3.1.34-dev */ /** * set SMARTY_DIR to absolute path to Smarty library files. @@ -112,7 +111,7 @@ class Smarty extends Smarty_Internal_TemplateBase /** * smarty version */ - const SMARTY_VERSION = '3.1.36'; + const SMARTY_VERSION = '3.1.38'; /** * define variable scopes */ @@ -800,7 +799,7 @@ class Smarty extends Smarty_Internal_TemplateBase * @param mixed $index index of directory to get, null to get all * @param bool $isConfig true for config_dir * - * @return array list of template directories, or directory of $index + * @return array|string list of template directories, or directory of $index */ public function getTemplateDir($index = null, $isConfig = false) { diff --git a/vendor/smarty/smarty/libs/SmartyBC.class.php b/vendor/smarty/smarty/libs/SmartyBC.class.php index 836f98153..0550e46dc 100644 --- a/vendor/smarty/smarty/libs/SmartyBC.class.php +++ b/vendor/smarty/smarty/libs/SmartyBC.class.php @@ -6,7 +6,7 @@ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * version 3.0 of the License, or (at your option) any later version. * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php index b317c9f33..de7d4a224 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php @@ -94,9 +94,9 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C break; } if (strpos($_index[ 1 ], '$') === false && strpos($_index[ 1 ], '\'') === false) { - return "@constant('{$_index[1]}')"; + return "(defined('{$_index[1]}') ? constant('{$_index[1]}') : null)"; } else { - return "@constant({$_index[1]})"; + return "(defined({$_index[1]}) ? constant({$_index[1]}) : null)"; } // no break case 'config': diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php index a842fa8f3..90c5dcefa 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_config_file_compiler.php @@ -115,7 +115,7 @@ class Smarty_Internal_Config_File_Compiler $this->smarty->_debug->start_compile($this->template); } // init the lexer/parser to compile the config file - /* @var Smarty_Internal_ConfigFileLexer $this ->lex */ + /* @var Smarty_Internal_ConfigFileLexer $this->lex */ $this->lex = new $this->lexer_class( str_replace( array( @@ -127,7 +127,7 @@ class Smarty_Internal_Config_File_Compiler ) . "\n", $this ); - /* @var Smarty_Internal_ConfigFileParser $this ->parser */ + /* @var Smarty_Internal_ConfigFileParser $this->parser */ $this->parser = new $this->parser_class($this->lex, $this); if (function_exists('mb_internal_encoding') && function_exists('ini_get') diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php index 0ba00659d..56dca18fa 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_errorhandler.php @@ -65,7 +65,7 @@ class Smarty_Internal_ErrorHandler * * @return bool */ - public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) + public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext = array()) { $_is_muted_directory = false; // add the SMARTY_DIR to the list of muted directories diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php index 477232ef8..ab4c3ec3b 100644 --- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php +++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_parsetree_template.php @@ -127,12 +127,12 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree } private function getChunkedSubtrees() { - $chunks = []; + $chunks = array(); $currentMode = null; - $currentChunk = []; + $currentChunk = array(); for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key++) { - if ($this->subtrees[ $key ]->data === '' && in_array($currentMode, ['textstripped', 'text', 'tag'])) { + if ($this->subtrees[ $key ]->data === '' && in_array($currentMode, array('textstripped', 'text', 'tag'))) { continue; } @@ -150,19 +150,19 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree if ($newMode == $currentMode) { $currentChunk[] = $this->subtrees[ $key ]; } else { - $chunks[] = [ + $chunks[] = array( 'mode' => $currentMode, 'subtrees' => $currentChunk - ]; + ); $currentMode = $newMode; - $currentChunk = [$this->subtrees[ $key ]]; + $currentChunk = array($this->subtrees[ $key ]); } } if ($currentMode && $currentChunk) { - $chunks[] = [ + $chunks[] = array( 'mode' => $currentMode, 'subtrees' => $currentChunk - ]; + ); } return $chunks; } diff --git a/vendor/symfony/polyfill-ctype/bootstrap.php b/vendor/symfony/polyfill-ctype/bootstrap.php index 0bc45cfdf..d54524b31 100644 --- a/vendor/symfony/polyfill-ctype/bootstrap.php +++ b/vendor/symfony/polyfill-ctype/bootstrap.php @@ -11,36 +11,40 @@ use Symfony\Polyfill\Ctype as p; +if (\PHP_VERSION_ID >= 80000) { + return require __DIR__.'/bootstrap80.php'; +} + if (!function_exists('ctype_alnum')) { - function ctype_alnum($input) { return p\Ctype::ctype_alnum($input); } + function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } } if (!function_exists('ctype_alpha')) { - function ctype_alpha($input) { return p\Ctype::ctype_alpha($input); } + function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } } if (!function_exists('ctype_cntrl')) { - function ctype_cntrl($input) { return p\Ctype::ctype_cntrl($input); } + function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } } if (!function_exists('ctype_digit')) { - function ctype_digit($input) { return p\Ctype::ctype_digit($input); } + function ctype_digit($text) { return p\Ctype::ctype_digit($text); } } if (!function_exists('ctype_graph')) { - function ctype_graph($input) { return p\Ctype::ctype_graph($input); } + function ctype_graph($text) { return p\Ctype::ctype_graph($text); } } if (!function_exists('ctype_lower')) { - function ctype_lower($input) { return p\Ctype::ctype_lower($input); } + function ctype_lower($text) { return p\Ctype::ctype_lower($text); } } if (!function_exists('ctype_print')) { - function ctype_print($input) { return p\Ctype::ctype_print($input); } + function ctype_print($text) { return p\Ctype::ctype_print($text); } } if (!function_exists('ctype_punct')) { - function ctype_punct($input) { return p\Ctype::ctype_punct($input); } + function ctype_punct($text) { return p\Ctype::ctype_punct($text); } } if (!function_exists('ctype_space')) { - function ctype_space($input) { return p\Ctype::ctype_space($input); } + function ctype_space($text) { return p\Ctype::ctype_space($text); } } if (!function_exists('ctype_upper')) { - function ctype_upper($input) { return p\Ctype::ctype_upper($input); } + function ctype_upper($text) { return p\Ctype::ctype_upper($text); } } if (!function_exists('ctype_xdigit')) { - function ctype_xdigit($input) { return p\Ctype::ctype_xdigit($input); } + function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } } diff --git a/vendor/symfony/polyfill-ctype/bootstrap80.php b/vendor/symfony/polyfill-ctype/bootstrap80.php new file mode 100644 index 000000000..ab2f8611d --- /dev/null +++ b/vendor/symfony/polyfill-ctype/bootstrap80.php @@ -0,0 +1,46 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Ctype as p; + +if (!function_exists('ctype_alnum')) { + function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); } +} +if (!function_exists('ctype_alpha')) { + function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); } +} +if (!function_exists('ctype_cntrl')) { + function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); } +} +if (!function_exists('ctype_digit')) { + function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); } +} +if (!function_exists('ctype_graph')) { + function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); } +} +if (!function_exists('ctype_lower')) { + function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); } +} +if (!function_exists('ctype_print')) { + function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); } +} +if (!function_exists('ctype_punct')) { + function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); } +} +if (!function_exists('ctype_space')) { + function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); } +} +if (!function_exists('ctype_upper')) { + function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); } +} +if (!function_exists('ctype_xdigit')) { + function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); } +} diff --git a/vendor/symfony/polyfill-ctype/composer.json b/vendor/symfony/polyfill-ctype/composer.json index 2088bb9f6..995978c0a 100644 --- a/vendor/symfony/polyfill-ctype/composer.json +++ b/vendor/symfony/polyfill-ctype/composer.json @@ -28,7 +28,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/vendor/twbs/bootstrap/.bundlewatch.config.json b/vendor/twbs/bootstrap/.bundlewatch.config.json index fb76d8dd8..1b4444728 100644 --- a/vendor/twbs/bootstrap/.bundlewatch.config.json +++ b/vendor/twbs/bootstrap/.bundlewatch.config.json @@ -26,7 +26,7 @@ }, { "path": "./dist/js/bootstrap.bundle.js", - "maxSize": "47.5 kB" + "maxSize": "48 kB" }, { "path": "./dist/js/bootstrap.bundle.min.js", diff --git a/vendor/twbs/bootstrap/.eslintignore b/vendor/twbs/bootstrap/.eslintignore index 10b147b83..ae6baae7e 100644 --- a/vendor/twbs/bootstrap/.eslintignore +++ b/vendor/twbs/bootstrap/.eslintignore @@ -3,5 +3,4 @@ **/vendor/ /_gh_pages/ /js/coverage/ -/site/sw.js -/package.js +/site/static/sw.js diff --git a/vendor/twbs/bootstrap/.eslintrc.json b/vendor/twbs/bootstrap/.eslintrc.json index f8e70335f..c5b351816 100644 --- a/vendor/twbs/bootstrap/.eslintrc.json +++ b/vendor/twbs/bootstrap/.eslintrc.json @@ -21,7 +21,12 @@ "warn", 5 ], - "new-cap": "off", + "new-cap": [ + "error", + { + "properties": false + } + ], "no-console": "error", "no-mixed-operators": "off", "no-negated-condition": "off", @@ -37,16 +42,17 @@ "unicorn/consistent-function-scoping": "off", "unicorn/explicit-length-check": "off", "unicorn/import-index": "off", - "unicorn/no-fn-reference-in-iterator": "off", + "unicorn/no-array-callback-reference": "off", "unicorn/no-for-loop": "off", "unicorn/no-null": "off", "unicorn/no-unused-properties": "error", "unicorn/no-useless-undefined": "off", "unicorn/prefer-array-find": "off", - "unicorn/prefer-dataset": "off", + "unicorn/prefer-dom-node-dataset": "off", "unicorn/prefer-includes": "off", - "unicorn/prefer-node-append": "off", - "unicorn/prefer-node-remove": "off", + "unicorn/prefer-math-trunc": "off", + "unicorn/prefer-dom-node-append": "off", + "unicorn/prefer-dom-node-remove": "off", "unicorn/prefer-number-properties": "off", "unicorn/prefer-optional-catch-binding": "off", "unicorn/prefer-query-selector": "off", diff --git a/vendor/twbs/bootstrap/.github/CONTRIBUTING.md b/vendor/twbs/bootstrap/.github/CONTRIBUTING.md index 0704e3b2f..296b13741 100644 --- a/vendor/twbs/bootstrap/.github/CONTRIBUTING.md +++ b/vendor/twbs/bootstrap/.github/CONTRIBUTING.md @@ -102,12 +102,12 @@ Example: Sometimes bugs reported to us are actually caused by bugs in the browser(s) themselves, not bugs in Bootstrap per se. When feasible, we aim to report such upstream bugs to the relevant browser vendor(s), and then list them on our [Wall of Browser Bugs](https://getbootstrap.com/browser-bugs/) and [document them in MDN](https://developer.mozilla.org/en-US/docs/Web). -| Vendor(s) | Browser(s) | Rendering engine | Bug reporting website(s) | Notes | -| ------------- | ---------------------------- | ---------------- | ------------------------------------------------------------------------------------- | -------------------------------------------------------- | -| Mozilla | Firefox | Gecko | https://bugzilla.mozilla.org/enter_bug.cgi | "Core" is normally the right product option to choose. | -| Apple | Safari | WebKit | https://bugs.webkit.org/enter_bug.cgi?product=WebKit <br> https://bugreport.apple.com/ | In Apple's bug reporter, choose "Safari" as the product. | -| Google, Opera | Chrome, Chromium, Opera v15+ | Blink | https://bugs.chromium.org/p/chromium/issues/list | Click the "New issue" button. | -| Microsoft | Edge | EdgeHTML | https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/ | | +| Vendor(s) | Browser(s) | Rendering engine | Bug reporting website(s) | Notes | +| ------------- | ---------------------------- | ---------------- | ------------------------------------------------------ | -------------------------------------------------------- | +| Mozilla | Firefox | Gecko | https://bugzilla.mozilla.org/enter_bug.cgi | "Core" is normally the right product option to choose. | +| Apple | Safari | WebKit | https://bugs.webkit.org/enter_bug.cgi?product=WebKit | In Apple's bug reporter, choose "Safari" as the product. | +| Google, Opera | Chrome, Chromium, Opera v15+ | Blink | https://bugs.chromium.org/p/chromium/issues/list | Click the "New issue" button. | +| Microsoft | Edge | Blink | https://developer.microsoft.com/en-us/microsoft-edge/ | Go to "Help > Send Feedback" from the browser | ## Feature requests @@ -124,23 +124,25 @@ Good pull requests—patches, improvements, new features—are a fantastic help. They should remain focused in scope and avoid containing unrelated commits. -**Please ask first** before embarking on any significant pull request (e.g. +**Please ask first** before embarking on any **significant** pull request (e.g. implementing features, refactoring code, porting to a different language), otherwise you risk spending a lot of time working on something that the -project's developers might not want to merge into the project. +project's developers might not want to merge into the project. For trivial +things, or things that don't require a lot of your time, you can go ahead and +make a PR. Please adhere to the [coding guidelines](#code-guidelines) used throughout the project (indentation, accurate comments, etc.) and any other requirements (such as test coverage). -**Do not edit `bootstrap.css`, or `bootstrap.js` -directly!** Those files are automatically generated. You should edit the -source files in [`/bootstrap/scss/`](https://github.com/twbs/bootstrap/tree/v4-dev/scss) +**Do not edit `bootstrap.css` or `bootstrap.js`, and do not commit +any dist files (`dist/` or `js/dist`).** Those files are automatically generated by our build tools. You should +edit the source files in [`/bootstrap/scss/`](https://github.com/twbs/bootstrap/tree/v4-dev/scss) and/or [`/bootstrap/js/src/`](https://github.com/twbs/bootstrap/tree/v4-dev/js/src) instead. Similarly, when contributing to Bootstrap's documentation, you should edit the documentation source files in -[the `/bootstrap/site/docs/` directory of the `v4-dev` branch](https://github.com/twbs/bootstrap/tree/v4-dev/site/docs). +[the `/bootstrap/site/content/docs/` directory of the `v4-dev` branch](https://github.com/twbs/bootstrap/tree/v4-dev/site/content/docs). **Do not edit the `gh-pages` branch.** That branch is generated from the documentation source files and is managed separately by the Bootstrap Core Team. diff --git a/vendor/twbs/bootstrap/.github/workflows/browserstack.yml b/vendor/twbs/bootstrap/.github/workflows/browserstack.yml index f709b98da..a12bffcf7 100644 --- a/vendor/twbs/bootstrap/.github/workflows/browserstack.yml +++ b/vendor/twbs/bootstrap/.github/workflows/browserstack.yml @@ -1,20 +1,24 @@ name: BrowserStack -on: [push] + +on: + push: + env: - CI: true - NODE: 12.x + FORCE_COLOR: 2 + NODE: 14 jobs: browserstack: runs-on: ubuntu-latest - if: github.repository == 'twbs/bootstrap' + if: github.repository == 'twbs/bootstrap' && (!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]')) + timeout-minutes: 30 steps: - name: Clone repository uses: actions/checkout@v2 - - name: Set Node.js version - uses: actions/setup-node@v1 + - name: Set up Node.js + uses: actions/setup-node@v2 with: node-version: "${{ env.NODE }}" @@ -24,8 +28,8 @@ jobs: path: ~/.npm key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} restore-keys: | - ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} - ${{ runner.OS }}-node-v${{ env.NODE }}- + ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} + ${{ runner.os }}-node-v${{ env.NODE }}- - name: Install npm dependencies run: npm ci diff --git a/vendor/twbs/bootstrap/.github/workflows/bundlewatch.yml b/vendor/twbs/bootstrap/.github/workflows/bundlewatch.yml index 1e68223ba..16736b5cc 100644 --- a/vendor/twbs/bootstrap/.github/workflows/bundlewatch.yml +++ b/vendor/twbs/bootstrap/.github/workflows/bundlewatch.yml @@ -1,8 +1,14 @@ name: Bundlewatch -on: [push, pull_request] + +on: + push: + branches-ignore: + - "dependabot/**" + pull_request: + env: - CI: true - NODE: 12.x + FORCE_COLOR: 2 + NODE: 14 jobs: bundlewatch: @@ -12,8 +18,8 @@ jobs: - name: Clone repository uses: actions/checkout@v2 - - name: Set Node.js version - uses: actions/setup-node@v1 + - name: Set up Node.js + uses: actions/setup-node@v2 with: node-version: "${{ env.NODE }}" @@ -23,8 +29,8 @@ jobs: path: ~/.npm key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} restore-keys: | - ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} - ${{ runner.OS }}-node-v${{ env.NODE }}- + ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} + ${{ runner.os }}-node-v${{ env.NODE }}- - name: Install npm dependencies run: npm ci diff --git a/vendor/twbs/bootstrap/.github/workflows/codeql.yml b/vendor/twbs/bootstrap/.github/workflows/codeql.yml index 777d812d6..469a5a4fc 100644 --- a/vendor/twbs/bootstrap/.github/workflows/codeql.yml +++ b/vendor/twbs/bootstrap/.github/workflows/codeql.yml @@ -1,22 +1,33 @@ -name: "Code Scanning - Action" +name: "CodeQL" on: push: + branches: + - main + - v4-dev + - "!dependabot/**" + pull_request: + # The branches below must be a subset of the branches above + branches: + - main + - v4-dev schedule: - - cron: "0 0 * * 0" + - cron: "0 2 * * 5" jobs: - CodeQL-Build: + analyze: + name: Analyze runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 + # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v1 with: - languages: javascript + languages: "javascript" - name: Autobuild uses: github/codeql-action/autobuild@v1 diff --git a/vendor/twbs/bootstrap/.github/workflows/css.yml b/vendor/twbs/bootstrap/.github/workflows/css.yml index 390bffc96..a28059d79 100644 --- a/vendor/twbs/bootstrap/.github/workflows/css.yml +++ b/vendor/twbs/bootstrap/.github/workflows/css.yml @@ -1,8 +1,14 @@ name: CSS -on: [push, pull_request] + +on: + push: + branches-ignore: + - "dependabot/**" + pull_request: + env: - CI: true - NODE: 12.x + FORCE_COLOR: 2 + NODE: 14 jobs: css: @@ -12,8 +18,8 @@ jobs: - name: Clone repository uses: actions/checkout@v2 - - name: Set Node.js version - uses: actions/setup-node@v1 + - name: Set up Node.js + uses: actions/setup-node@v2 with: node-version: "${{ env.NODE }}" @@ -23,8 +29,8 @@ jobs: path: ~/.npm key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} restore-keys: | - ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} - ${{ runner.OS }}-node-v${{ env.NODE }}- + ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} + ${{ runner.os }}-node-v${{ env.NODE }}- - name: Install npm dependencies run: npm ci diff --git a/vendor/twbs/bootstrap/.github/workflows/dart-sass.yml b/vendor/twbs/bootstrap/.github/workflows/dart-sass.yml index 8482a152e..2b867d6bd 100644 --- a/vendor/twbs/bootstrap/.github/workflows/dart-sass.yml +++ b/vendor/twbs/bootstrap/.github/workflows/dart-sass.yml @@ -1,8 +1,14 @@ name: CSS (Dart Sass) -on: [push, pull_request] + +on: + push: + branches-ignore: + - "dependabot/**" + pull_request: + env: - CI: true - NODE: 12.x + FORCE_COLOR: 2 + NODE: 14 jobs: css: @@ -12,8 +18,8 @@ jobs: - name: Clone repository uses: actions/checkout@v2 - - name: Set Node.js version - uses: actions/setup-node@v1 + - name: Set up Node.js + uses: actions/setup-node@v2 with: node-version: "${{ env.NODE }}" diff --git a/vendor/twbs/bootstrap/.github/workflows/docs.yml b/vendor/twbs/bootstrap/.github/workflows/docs.yml index ba16a9ad8..150e4d16c 100644 --- a/vendor/twbs/bootstrap/.github/workflows/docs.yml +++ b/vendor/twbs/bootstrap/.github/workflows/docs.yml @@ -1,9 +1,14 @@ name: Docs -on: [push, pull_request] + +on: + push: + branches-ignore: + - "dependabot/**" + pull_request: + env: - CI: true - NODE: 12.x - RUBY: 2.7.x + FORCE_COLOR: 2 + NODE: 14 jobs: docs: @@ -13,30 +18,12 @@ jobs: - name: Clone repository uses: actions/checkout@v2 - - name: Set Node.js version - uses: actions/setup-node@v1 + - name: Set up Node.js + uses: actions/setup-node@v2 with: node-version: "${{ env.NODE }}" - - name: Set up Ruby - uses: actions/setup-ruby@v1 - with: - ruby-version: ${{ env.RUBY }} - - - name: Set up Ruby env - run: | - echo "gem: --no-document" > ~/.gemrc # Disable gem docs - bundle config set clean 'true' - bundle config set deployment 'true' - - - name: Set up Ruby cache - uses: actions/cache@v2 - with: - path: vendor/bundle - key: ${{ runner.os }}-ruby-v${{ env.RUBY }}-${{ hashFiles('Gemfile') }}-${{ hashFiles('Gemfile.lock') }} - restore-keys: | - ${{ runner.os }}-ruby-v${{ env.RUBY }}-${{ hashFiles('Gemfile') }}-${{ hashFiles('Gemfile.lock') }} - ${{ runner.os }}-ruby-v${{ env.RUBY }}- + - run: java -version - name: Set up npm cache uses: actions/cache@v2 @@ -44,22 +31,11 @@ jobs: path: ~/.npm key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} restore-keys: | - ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} - ${{ runner.OS }}-node-v${{ env.NODE }}- - - - run: ruby --version - - run: gem --version - - run: bundle --version - - run: java -version + ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} + ${{ runner.os }}-node-v${{ env.NODE }}- - name: Install npm dependencies run: npm ci - - name: Install bundler dependencies - run: bundle install --deployment --jobs=4 --retry=3 --clean - - - name: Copy CSS and JS - run: npm run css-copy && npm run js-copy - - name: Test docs run: npm run docs diff --git a/vendor/twbs/bootstrap/.github/workflows/js.yml b/vendor/twbs/bootstrap/.github/workflows/js.yml index 543172ccb..c56a2dfdd 100644 --- a/vendor/twbs/bootstrap/.github/workflows/js.yml +++ b/vendor/twbs/bootstrap/.github/workflows/js.yml @@ -1,7 +1,13 @@ name: JS Tests -on: [push, pull_request] + +on: + push: + branches-ignore: + - "dependabot/**" + pull_request: + env: - CI: true + FORCE_COLOR: 2 jobs: run: @@ -11,14 +17,14 @@ jobs: strategy: fail-fast: false matrix: - node: [10, 12] + node: [10, 12, 14] steps: - name: Clone repository uses: actions/checkout@v2 - - name: Set Node.js version - uses: actions/setup-node@v1 + - name: Set up Node.js + uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} @@ -28,8 +34,8 @@ jobs: path: ~/.npm key: ${{ runner.os }}-node-v${{ matrix.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}} restore-keys: | - ${{ runner.OS }}-node-v${{ matrix.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} - ${{ runner.OS }}-node-v${{ matrix.node }}- + ${{ runner.os }}-node-v${{ matrix.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} + ${{ runner.os }}-node-v${{ matrix.node }}- - name: Install npm dependencies run: npm ci @@ -42,7 +48,7 @@ jobs: - name: Run Coveralls uses: coverallsapp/github-action@master - if: matrix.node == 12 + if: matrix.node == 14 with: github-token: "${{ secrets.GITHUB_TOKEN }}" path-to-lcov: "./js/coverage/lcov.info" diff --git a/vendor/twbs/bootstrap/.github/workflows/lint.yml b/vendor/twbs/bootstrap/.github/workflows/lint.yml index f3d00d69f..369aaced3 100644 --- a/vendor/twbs/bootstrap/.github/workflows/lint.yml +++ b/vendor/twbs/bootstrap/.github/workflows/lint.yml @@ -1,8 +1,14 @@ name: Lint -on: [push, pull_request] + +on: + push: + branches-ignore: + - "dependabot/**" + pull_request: + env: - CI: true - NODE: 12.x + FORCE_COLOR: 2 + NODE: 14 jobs: lint: @@ -12,8 +18,8 @@ jobs: - name: Clone repository uses: actions/checkout@v2 - - name: Set Node.js version - uses: actions/setup-node@v1 + - name: Set up Node.js + uses: actions/setup-node@v2 with: node-version: "${{ env.NODE }}" @@ -23,8 +29,8 @@ jobs: path: ~/.npm key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} restore-keys: | - ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} - ${{ runner.OS }}-node-v${{ env.NODE }}- + ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} + ${{ runner.os }}-node-v${{ env.NODE }}- - name: Install npm dependencies run: npm ci diff --git a/vendor/twbs/bootstrap/.gitignore b/vendor/twbs/bootstrap/.gitignore index a3437b8a5..ef7b47d4b 100644 --- a/vendor/twbs/bootstrap/.gitignore +++ b/vendor/twbs/bootstrap/.gitignore @@ -1,16 +1,8 @@ # Ignore docs files /_gh_pages/ -/site/.jekyll-cache -/site/.jekyll-metadata -/site/docs/**/dist/ # Hugo folders /resources/ -# Ignore ruby/bundler files -/.bundle/ -/vendor/ -/.ruby-version - # Numerous always-ignore extensions *.diff *.err diff --git a/vendor/twbs/bootstrap/.stylelintignore b/vendor/twbs/bootstrap/.stylelintignore index 7bc488e5f..e42e88938 100644 --- a/vendor/twbs/bootstrap/.stylelintignore +++ b/vendor/twbs/bootstrap/.stylelintignore @@ -2,3 +2,4 @@ **/dist/ **/vendor/ /_gh_pages/ +/js/coverage/ diff --git a/vendor/twbs/bootstrap/.stylelintrc b/vendor/twbs/bootstrap/.stylelintrc index 47dd3e5d9..b9bde72db 100644 --- a/vendor/twbs/bootstrap/.stylelintrc +++ b/vendor/twbs/bootstrap/.stylelintrc @@ -3,6 +3,10 @@ "stylelint-config-twbs-bootstrap/scss" ], "rules": { + "declaration-property-value-disallowed-list": { + "border": "none", + "outline": "none" + }, "function-disallowed-list": [ "calc" ], diff --git a/vendor/twbs/bootstrap/CODE_OF_CONDUCT.md b/vendor/twbs/bootstrap/CODE_OF_CONDUCT.md index 9d9922f25..0d2e52695 100644 --- a/vendor/twbs/bootstrap/CODE_OF_CONDUCT.md +++ b/vendor/twbs/bootstrap/CODE_OF_CONDUCT.md @@ -40,7 +40,4 @@ Project maintainers who do not follow or enforce the Code of Conduct in good fai ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html][version] - -[homepage]: https://www.contributor-covenant.org/ -[version]: https://www.contributor-covenant.org/version/1/4/code-of-conduct.html +This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 1.4, available at <https://www.contributor-covenant.org/version/1/4/code-of-conduct/> diff --git a/vendor/twbs/bootstrap/Gemfile b/vendor/twbs/bootstrap/Gemfile deleted file mode 100644 index 70ac52c40..000000000 --- a/vendor/twbs/bootstrap/Gemfile +++ /dev/null @@ -1,9 +0,0 @@ -source 'https://rubygems.org' - -group :development, :test do - gem 'jekyll', '~> 4.1.1' - gem 'jekyll-redirect-from', '~> 0.16.0' - gem 'jekyll-sitemap', '~> 1.4.0' - gem 'jekyll-toc', '~> 0.14.0' - gem 'wdm', '~> 0.1.1', :install_if => Gem.win_platform? -end diff --git a/vendor/twbs/bootstrap/LICENSE b/vendor/twbs/bootstrap/LICENSE index 173a9ebbb..72dda234e 100644 --- a/vendor/twbs/bootstrap/LICENSE +++ b/vendor/twbs/bootstrap/LICENSE @@ -1,7 +1,7 @@ The MIT License (MIT) -Copyright (c) 2011-2020 Twitter, Inc. -Copyright (c) 2011-2020 The Bootstrap Authors +Copyright (c) 2011-2021 Twitter, Inc. +Copyright (c) 2011-2021 The Bootstrap Authors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/twbs/bootstrap/README.md b/vendor/twbs/bootstrap/README.md index 35ce9feaa..6a29ebcd7 100644 --- a/vendor/twbs/bootstrap/README.md +++ b/vendor/twbs/bootstrap/README.md @@ -1,6 +1,6 @@ <p align="center"> <a href="https://getbootstrap.com/"> - <img src="https://getbootstrap.com/docs/4.5/assets/brand/bootstrap-solid.svg" alt="Bootstrap logo" width="72" height="72"> + <img src="https://getbootstrap.com/docs/4.6/assets/brand/bootstrap-solid.svg" alt="Bootstrap logo" width="72" height="72"> </a> </p> @@ -9,7 +9,7 @@ <p align="center"> Sleek, intuitive, and powerful front-end framework for faster and easier web development. <br> - <a href="https://getbootstrap.com/docs/4.5/"><strong>Explore Bootstrap docs »</strong></a> + <a href="https://getbootstrap.com/docs/4.6/"><strong>Explore Bootstrap docs »</strong></a> <br> <br> <a href="https://github.com/twbs/bootstrap/issues/new?template=bug_report.md">Report bug</a> @@ -41,14 +41,14 @@ Several quick start options are available: -- [Download the latest release.](https://github.com/twbs/bootstrap/archive/v4.5.3.zip) +- [Download the latest release.](https://github.com/twbs/bootstrap/archive/v4.6.0.zip) - Clone the repo: `git clone https://github.com/twbs/bootstrap.git` - Install with [npm](https://www.npmjs.com/): `npm install bootstrap` -- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@4.5.3` -- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:4.5.3` +- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@4.6.0` +- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:4.6.0` - Install with [NuGet](https://www.nuget.org/): CSS: `Install-Package bootstrap` Sass: `Install-Package bootstrap.sass` -Read the [Getting started page](https://getbootstrap.com/docs/4.5/getting-started/introduction/) for information on the framework contents, templates and examples, and more. +Read the [Getting started page](https://getbootstrap.com/docs/4.6/getting-started/introduction/) for information on the framework contents, templates and examples, and more. ## Status @@ -111,18 +111,18 @@ Have a bug or a feature request? Please first read the [issue guidelines](https: ## Documentation -Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](https://jekyllrb.com/) and publicly hosted on GitHub Pages at <https://getbootstrap.com/>. The docs may also be run locally. +Bootstrap's documentation, included in this repo in the root directory, is built with [Hugo](https://gohugo.io/) and publicly hosted on GitHub Pages at <https://getbootstrap.com/>. The docs may also be run locally. -Documentation search is powered by [Algolia's DocSearch](https://community.algolia.com/docsearch/). Working on our search? Be sure to set `debug: true` in `site/docs/4.5/assets/js/src/search.js` file. +Documentation search is powered by [Algolia's DocSearch](https://community.algolia.com/docsearch/). Working on our search? Be sure to set `debug: true` in `site/assets/js/search.js`. ### Running documentation locally -1. Run through the [tooling setup](https://getbootstrap.com/docs/4.5/getting-started/build-tools/#tooling-setup) to install Jekyll (the site builder) and other Ruby dependencies with `bundle install`. -2. Run `npm install` to install Node.js dependencies. +1. Run `npm install` to install the Node.js dependencies, including Hugo (the site builder). +2. Run `npm run test` (or a specific npm script) to rebuild distributed CSS and JavaScript files, as well as our docs assets. 3. Run `npm start` to compile CSS and JavaScript files, generate our docs, and watch for changes. -4. Open `http://localhost:9001` in your browser, and voilà. +4. Open `http://localhost:9001/` in your browser, and voilà. -Learn more about using Jekyll by reading its [documentation](https://jekyllrb.com/docs/). +Learn more about using Hugo by reading its [documentation](https://gohugo.io/documentation/). ### Documentation for previous releases @@ -206,4 +206,4 @@ Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com ## Copyright and license -Code and documentation copyright 2011-2020 the [Bootstrap Authors](https://github.com/twbs/bootstrap/graphs/contributors) and [Twitter, Inc.](https://twitter.com) Code released under the [MIT License](https://github.com/twbs/bootstrap/blob/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/). +Code and documentation copyright 2011-2021 the [Bootstrap Authors](https://github.com/twbs/bootstrap/graphs/contributors) and [Twitter, Inc.](https://twitter.com) Code released under the [MIT License](https://github.com/twbs/bootstrap/blob/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/). diff --git a/vendor/twbs/bootstrap/_config.yml b/vendor/twbs/bootstrap/_config.yml deleted file mode 100644 index 58e8937c3..000000000 --- a/vendor/twbs/bootstrap/_config.yml +++ /dev/null @@ -1,74 +0,0 @@ -# Dependencies -markdown: kramdown -highlighter: rouge - -kramdown: - auto_ids: true - -# Permalinks -permalink: pretty - -# Server -source: "site" -destination: ./_gh_pages -host: "localhost" -port: 9001 -baseurl: "" -url: "https://getbootstrap.com" -encoding: UTF-8 -exclude: - - docs/4.5/assets/scss/ - -plugins: - - jekyll-redirect-from - - jekyll-sitemap - - jekyll-toc - -redirect_from: - json: false - -# Social -title: Bootstrap -description: "The most popular HTML, CSS, and JS library in the world." -twitter: getbootstrap -authors: "Mark Otto, Jacob Thornton, and Bootstrap contributors" -social_image_path: /docs/4.5/assets/brand/bootstrap-social.png -social_logo_path: /docs/4.5/assets/brand/bootstrap-social-logo.png - -# Custom variables -current_version: 4.5.3 -current_ruby_version: 4.5.3 -docs_version: 4.5 -github_org: "https://github.com/twbs" -repo: "https://github.com/twbs/bootstrap" -slack: "https://bootstrap-slack.herokuapp.com" -opencollective: "https://opencollective.com/bootstrap" -blog: "https://blog.getbootstrap.com" -expo: "https://expo.getbootstrap.com" -themes: "https://themes.getbootstrap.com" -icons: "https://icons.getbootstrap.com" - -download: - source: "https://github.com/twbs/bootstrap/archive/v4.5.3.zip" - dist: "https://github.com/twbs/bootstrap/releases/download/v4.5.3/bootstrap-4.5.3-dist.zip" - dist_examples: "https://github.com/twbs/bootstrap/releases/download/v4.5.3/bootstrap-4.5.3-examples.zip" - -cdn: - # See https://www.srihash.org for info on how to generate the hashes - css: "https://stackpath.bootstrapcdn.com/bootstrap/4.5.3/css/bootstrap.min.css" - css_hash: "sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" - js: "https://stackpath.bootstrapcdn.com/bootstrap/4.5.3/js/bootstrap.min.js" - js_hash: "sha384-w1Q4orYjBQndcko6MimVbzY0tgp4pWB4lZ7lr30WKz0vr/aWKhXdBNmNb5D92v7s" - js_bundle: "https://stackpath.bootstrapcdn.com/bootstrap/4.5.3/js/bootstrap.bundle.min.js" - js_bundle_hash: "sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" - jquery: "https://code.jquery.com/jquery-3.5.1.slim.min.js" - jquery_hash: "sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" - popper: "https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" - popper_hash: "sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" - -toc: - min_level: 2 - max_level: 4 - no_toc_section_class: - - "bd-callout" - - "bd-example" diff --git a/vendor/twbs/bootstrap/build/build-plugins.js b/vendor/twbs/bootstrap/build/build-plugins.js index 521450f85..ffdf0d1e9 100644 --- a/vendor/twbs/bootstrap/build/build-plugins.js +++ b/vendor/twbs/bootstrap/build/build-plugins.js @@ -2,8 +2,8 @@ /*! * Script to build our plugins to use them separately. - * Copyright 2020 The Bootstrap Authors - * Copyright 2020 Twitter, Inc. + * Copyright 2020-2021 The Bootstrap Authors + * Copyright 2020-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ @@ -19,8 +19,8 @@ const plugins = [ babel({ // Only transpile our source code exclude: 'node_modules/**', - // Inline the required helpers in each file - babelHelpers: 'inline' + // Include the helpers in each file, at most one copy of each + babelHelpers: 'bundled' }) ] const bsPlugins = { diff --git a/vendor/twbs/bootstrap/build/change-version.js b/vendor/twbs/bootstrap/build/change-version.js index e2de874d7..78bc8464b 100755 --- a/vendor/twbs/bootstrap/build/change-version.js +++ b/vendor/twbs/bootstrap/build/change-version.js @@ -2,8 +2,8 @@ /*! * Script to update version number references in the project. - * Copyright 2017-2020 The Bootstrap Authors - * Copyright 2017-2020 Twitter, Inc. + * Copyright 2017-2021 The Bootstrap Authors + * Copyright 2017-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ diff --git a/vendor/twbs/bootstrap/build/generate-sri.js b/vendor/twbs/bootstrap/build/generate-sri.js index 972f8622e..f0aa7340b 100644 --- a/vendor/twbs/bootstrap/build/generate-sri.js +++ b/vendor/twbs/bootstrap/build/generate-sri.js @@ -5,8 +5,8 @@ * Remember to use the same vendor files as the CDN ones, * otherwise the hashes won't match! * - * Copyright 2017-2020 The Bootstrap Authors - * Copyright 2017-2020 Twitter, Inc. + * Copyright 2017-2021 The Bootstrap Authors + * Copyright 2017-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ @@ -21,11 +21,11 @@ const pkg = require('../package.json') sh.config.fatal = true -const configFile = path.join(__dirname, '../_config.yml') +const configFile = path.join(__dirname, '../config.yml') // Array of objects which holds the files to generate SRI hashes for. // `file` is the path from the root folder -// `configPropertyName` is the _config.yml variable's name of the file +// `configPropertyName` is the config.yml variable's name of the file const files = [ { file: 'dist/css/bootstrap.min.css', @@ -40,7 +40,7 @@ const files = [ configPropertyName: 'js_bundle_hash' }, { - file: `site/docs/${pkg.version_short}/assets/js/vendor/jquery.slim.min.js`, + file: `site/static/docs/${pkg.config.version_short}/assets/js/vendor/jquery.slim.min.js`, configPropertyName: 'jquery_hash' }, { @@ -61,6 +61,6 @@ files.forEach(file => { console.log(`${file.configPropertyName}: ${integrity}`) - sh.sed('-i', new RegExp(`(\\s${file.configPropertyName}:\\s+"|')(\\S+)("|')`), `$1${integrity}$3`, configFile) + sh.sed('-i', new RegExp(`^(\\s+${file.configPropertyName}:\\s+["'])\\S*(["'])`), `$1${integrity}$2`, configFile) }) }) diff --git a/vendor/twbs/bootstrap/build/postcss.config.js b/vendor/twbs/bootstrap/build/postcss.config.js index bd307fa35..ef416258f 100644 --- a/vendor/twbs/bootstrap/build/postcss.config.js +++ b/vendor/twbs/bootstrap/build/postcss.config.js @@ -1,14 +1,18 @@ 'use strict' -module.exports = ctx => ({ - map: ctx.file.dirname.includes('examples') ? false : { - inline: false, - annotation: true, - sourcesContent: true - }, - plugins: { - autoprefixer: { - cascade: false +module.exports = ctx => { + return { + map: ctx.file.dirname.includes('examples') ? + false : + { + inline: false, + annotation: true, + sourcesContent: true + }, + plugins: { + autoprefixer: { + cascade: false + } } } -}) +} diff --git a/vendor/twbs/bootstrap/build/rollup.config.js b/vendor/twbs/bootstrap/build/rollup.config.js index 6294204cd..e2d2b125e 100644 --- a/vendor/twbs/bootstrap/build/rollup.config.js +++ b/vendor/twbs/bootstrap/build/rollup.config.js @@ -31,7 +31,7 @@ if (BUNDLE) { } module.exports = { - input: path.resolve(__dirname, '../js/src/index.js'), + input: path.resolve(__dirname, '../js/index.js'), output: { banner, file: path.resolve(__dirname, `../dist/js/${fileDest}`), diff --git a/vendor/twbs/bootstrap/build/vnu-jar.js b/vendor/twbs/bootstrap/build/vnu-jar.js index f4a4141c1..d211ce577 100644 --- a/vendor/twbs/bootstrap/build/vnu-jar.js +++ b/vendor/twbs/bootstrap/build/vnu-jar.js @@ -2,8 +2,8 @@ /*! * Script to run vnu-jar if Java is available. - * Copyright 2017-2020 The Bootstrap Authors - * Copyright 2017-2020 Twitter, Inc. + * Copyright 2017-2021 The Bootstrap Authors + * Copyright 2017-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ diff --git a/vendor/twbs/bootstrap/build/zip-examples.js b/vendor/twbs/bootstrap/build/zip-examples.js index 778d75f05..f976c3bc5 100644 --- a/vendor/twbs/bootstrap/build/zip-examples.js +++ b/vendor/twbs/bootstrap/build/zip-examples.js @@ -3,7 +3,7 @@ /*! * Script to create the built examples zip archive; * requires the `zip` command to be present! - * Copyright 2020 The Bootstrap Authors + * Copyright 2020-2021 The Bootstrap Authors * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ @@ -12,38 +12,65 @@ const path = require('path') const sh = require('shelljs') -const { - version, version_short: versionShort -} = require('../package.json') +const pkg = require('../package.json') -const folderName = `bootstrap-${version}-examples` +const versionShort = pkg.config.version_short +const distFolder = `bootstrap-${pkg.version}-examples` +const rootDocsDir = '_gh_pages' +const docsDir = `${rootDocsDir}/docs/${versionShort}/` + +// these are the files we need in the examples +const cssFiles = [ + 'bootstrap.min.css', + 'bootstrap.min.css.map' +] +const jsFiles = [ + 'bootstrap.bundle.min.js', + 'bootstrap.bundle.min.js.map' +] +const imgFiles = [ + 'bootstrap-outline.svg', + 'bootstrap-solid.svg' +] sh.config.fatal = true -if (!sh.test('-d', '_gh_pages')) { - throw new Error('The "_gh_pages" folder does not exist, did you forget building the docs?') +if (!sh.test('-d', rootDocsDir)) { + throw new Error(`The "${rootDocsDir}" folder does not exist, did you forget building the docs?`) } // switch to the root dir sh.cd(path.join(__dirname, '..')) -// remove any previously created folder with the same name -sh.rm('-rf', folderName) -// create any folders so that `cp` works -sh.mkdir('-p', folderName) -sh.mkdir('-p', `${folderName}/assets/brand/`) +// remove any previously created folder/zip with the same name +sh.rm('-rf', [distFolder, `${distFolder}.zip`]) -sh.cp('-Rf', `_gh_pages/docs/${versionShort}/examples/*`, folderName) -sh.cp('-Rf', `_gh_pages/docs/${versionShort}/dist/`, `${folderName}/assets/`) -// also copy the two brand images we use in the examples -sh.cp('-f', [ - `_gh_pages/docs/${versionShort}/assets/brand/bootstrap-outline.svg`, - `_gh_pages/docs/${versionShort}/assets/brand/bootstrap-solid.svg` -], `${folderName}/assets/brand/`) -sh.rm(`${folderName}/index.html`) +// create any folders so that `cp` works +sh.mkdir('-p', [ + distFolder, + `${distFolder}/assets/brand/`, + `${distFolder}/assets/dist/css/`, + `${distFolder}/assets/dist/js/` +]) + +sh.cp('-Rf', `${docsDir}/examples/*`, distFolder) + +cssFiles.forEach(file => { + sh.cp('-f', `${docsDir}/dist/css/${file}`, `${distFolder}/assets/dist/css/`) +}) + +jsFiles.forEach(file => { + sh.cp('-f', `${docsDir}/dist/js/${file}`, `${distFolder}/assets/dist/js/`) +}) + +imgFiles.forEach(file => { + sh.cp('-f', `${docsDir}/assets/brand/${file}`, `${distFolder}/assets/brand/`) +}) + +sh.rm(`${distFolder}/index.html`) // get all examples' HTML files -sh.find(`${folderName}/**/*.html`).forEach(file => { +sh.find(`${distFolder}/**/*.html`).forEach(file => { const fileContents = sh.cat(file) .toString() .replace(new RegExp(`"/docs/${versionShort}/`, 'g'), '"../') @@ -55,9 +82,7 @@ sh.find(`${folderName}/**/*.html`).forEach(file => { }) // create the zip file -sh.exec(`zip -r9 "${folderName}.zip" "${folderName}"`, { - fatal: true -}) +sh.exec(`zip -r9 "${distFolder}.zip" "${distFolder}"`) // remove the folder we created -sh.rm('-rf', folderName) +sh.rm('-rf', distFolder) diff --git a/vendor/twbs/bootstrap/config.yml b/vendor/twbs/bootstrap/config.yml new file mode 100644 index 000000000..efbb5d681 --- /dev/null +++ b/vendor/twbs/bootstrap/config.yml @@ -0,0 +1,79 @@ +languageCode: "en" +title: "Bootstrap" +baseURL: "https://getbootstrap.com" +enableInlineShortcodes: true + +markup: + goldmark: + renderer: + unsafe: true + highlight: + noClasses: false + tableOfContents: + startLevel: 2 + endLevel: 6 + +buildDrafts: true +buildFuture: true + +enableRobotsTXT: true +metaDataFormat: "yaml" +disableKinds: ["404", "taxonomy", "taxonomyTerm", "RSS"] + +publishDir: "_gh_pages" + +module: + mounts: + - source: dist + target: static/docs/4.6/dist + - source: site/assets + target: assets + - source: site/content + target: content + - source: site/data + target: data + - source: site/layouts + target: layouts + - source: site/static + target: static + - source: site/static/docs/4.6/assets/img/favicons/apple-touch-icon.png + target: static/apple-touch-icon.png + - source: site/static/docs/4.6/assets/img/favicons/favicon.ico + target: static/favicon.ico + +params: + description: "The most popular HTML, CSS, and JS library in the world." + authors: "Mark Otto, Jacob Thornton, and Bootstrap contributors" + social_image_path: /docs/4.6/assets/brand/bootstrap-social.png + social_logo_path: /docs/4.6/assets/brand/bootstrap-social-logo.png + + current_version: "4.6.0" + current_ruby_version: "4.6.0" + docs_version: "4.6" + github_org: "https://github.com/twbs" + repo: "https://github.com/twbs/bootstrap" + twitter: "getbootstrap" + slack: "https://bootstrap-slack.herokuapp.com/" + opencollective: "https://opencollective.com/bootstrap" + blog: "https://blog.getbootstrap.com/" + expo: "https://expo.getbootstrap.com/" + themes: "https://themes.getbootstrap.com/" + icons: "https://icons.getbootstrap.com/" + + download: + source: "https://github.com/twbs/bootstrap/archive/v4.6.0.zip" + dist: "https://github.com/twbs/bootstrap/releases/download/v4.6.0/bootstrap-4.6.0-dist.zip" + dist_examples: "https://github.com/twbs/bootstrap/releases/download/v4.6.0/bootstrap-4.6.0-examples.zip" + + cdn: + # See https://www.srihash.org for info on how to generate the hashes + css: "https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" + css_hash: "sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" + js: "https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.min.js" + js_hash: "sha384-+YQ4JLhjyBLPDQt//I+STsc9iw4uQqACwlvpslubQzn4u2UU2UFM80nGisd026JF" + js_bundle: "https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" + js_bundle_hash: "sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" + jquery: "https://code.jquery.com/jquery-3.5.1.slim.min.js" + jquery_hash: "sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" + popper: "https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" + popper_hash: "sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css index 9cfa07ac5..468530f77 100644 --- a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css +++ b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css @@ -1,7 +1,7 @@ /*! - * Bootstrap Grid v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors - * Copyright 2011-2020 Twitter, Inc. + * Bootstrap Grid v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ html { diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css.map index a664f9803..34902bafe 100644 --- a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css.map +++ b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css.map @@ -1 +1 @@ -{"version":3,"sources":["../../scss/bootstrap-grid.scss","bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_display.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_spacing.scss"],"names":[],"mappings":"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EKp0BM;IAAwB,iBADZ;IACY,QADZ;ELw0BlB;EKv0BM;IAAwB,iBADZ;IACY,QADZ;EL20BlB;EK10BM;IAAwB,kBADZ;IACY,SADZ;EL80BlB;EK70BM;IAAwB,kBADZ;IACY,SADZ;ELi1BlB;EKh1BM;IAAwB,kBADZ;IACY,SADZ;ELo1BlB;EK50BU;IHhBV,cAA4B;EF+1B5B;EK/0BU;IHhBV,sBAA8C;EFk2B9C;EKl1BU;IHhBV,uBAA8C;EFq2B9C;EKr1BU;IHhBV,gBAA8C;EFw2B9C;EKx1BU;IHhBV,uBAA8C;EF22B9C;EK31BU;IHhBV,uBAA8C;EF82B9C;EK91BU;IHhBV,gBAA8C;EFi3B9C;EKj2BU;IHhBV,uBAA8C;EFo3B9C;EKp2BU;IHhBV,uBAA8C;EFu3B9C;EKv2BU;IHhBV,gBAA8C;EF03B9C;EK12BU;IHhBV,uBAA8C;EF63B9C;EK72BU;IHhBV,uBAA8C;EFg4B9C;AACF;;AM76BM;EAAwB,wBAA0B;ANi7BxD;;AMj7BM;EAAwB,0BAA0B;ANq7BxD;;AMr7BM;EAAwB,gCAA0B;ANy7BxD;;AMz7BM;EAAwB,yBAA0B;AN67BxD;;AM77BM;EAAwB,yBAA0B;ANi8BxD;;AMj8BM;EAAwB,6BAA0B;ANq8BxD;;AMr8BM;EAAwB,8BAA0B;ANy8BxD;;AMz8BM;EAAwB,+BAA0B;EAA1B,wBAA0B;AN68BxD;;AM78BM;EAAwB,sCAA0B;EAA1B,+BAA0B;ANi9BxD;;AGh6BI;EGjDE;IAAwB,wBAA0B;ENs9BtD;EMt9BI;IAAwB,0BAA0B;ENy9BtD;EMz9BI;IAAwB,gCAA0B;EN49BtD;EM59BI;IAAwB,yBAA0B;EN+9BtD;EM/9BI;IAAwB,yBAA0B;ENk+BtD;EMl+BI;IAAwB,6BAA0B;ENq+BtD;EMr+BI;IAAwB,8BAA0B;ENw+BtD;EMx+BI;IAAwB,+BAA0B;IAA1B,wBAA0B;EN2+BtD;EM3+BI;IAAwB,sCAA0B;IAA1B,+BAA0B;EN8+BtD;AACF;;AG97BI;EGjDE;IAAwB,wBAA0B;ENo/BtD;EMp/BI;IAAwB,0BAA0B;ENu/BtD;EMv/BI;IAAwB,gCAA0B;EN0/BtD;EM1/BI;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hD;;AQpsDQ;EAAgC,yBAA4B;ARwsDpE;;AQvsDQ;;EAEE,6BAAoC;AR0sD9C;;AQxsDQ;;EAEE,+BAAwC;AR2sDlD;;AQzsDQ;;EAEE,gCAA0C;AR4sDpD;;AQ1sDQ;;EAEE,8BAAsC;AR6sDhD;;AQ5tDQ;EAAgC,uBAA4B;ARguDpE;;AQ/tDQ;;EAEE,2BAAoC;ARkuD9C;;AQhuDQ;;EAEE,6BAAwC;ARmuDlD;;AQjuDQ;;EAEE,8BAA0C;ARouDpD;;AQluDQ;;EAEE,4BAAsC;ARquDhD;;AQpvDQ;EAAgC,yBAA4B;ARwvDpE;;AQvvDQ;;EAEE,6BAAoC;AR0vD9C;;AQxvDQ;;EAEE,+BAAwC;AR2vDlD;;AQzvDQ;;EAEE,gCAA0C;AR4vDpD;;AQ1vDQ;;EAEE,8BAAsC;AR6vDhD;;AQ5wDQ;EAAgC,uBAA4B;ARgxDpE;;AQ/wDQ;;EAEE,2BAAoC;ARkxD9C;;AQhxDQ;;EAEE,6BAAwC;ARmxDlD;;AQjxDQ;;EAEE,8BAA0C;ARoxDpD;;AQlxDQ;;EAEE,4BAAsC;ARqxDhD;;AQpyDQ;EAAgC,qBAA4B;ARwyDpE;;AQvyDQ;;EAEE,yBAAoC;AR0yD9C;;AQxyDQ;;EAEE,2BAAwC;AR2yDlD;;AQzyDQ;;EAEE,4BAA0C;AR4yDpD;;AQ1yDQ;;EAEE,0BAAsC;AR6yDhD;;AQ5zDQ;EAAgC,2BAA4B;ARg0DpE;;AQ/zDQ;;EAEE,+BAAoC;ARk0D9C;;AQh0DQ;;EAEE,iCAAwC;ARm0DlD;;AQj0DQ;;EAEE,kCAA0C;ARo0DpD;;AQl0DQ;;EAEE,gCAAsC;ARq0DhD;;AQp1DQ;EAAgC,0BAA4B;ARw1DpE;;AQv1DQ;;EAEE,8BAAoC;AR01D9C;;AQx1DQ;;EAEE,gCAAwC;AR21DlD;;AQz1DQ;;EAEE,iCAA0C;AR41DpD;;AQ11DQ;;EAEE,+BAAsC;AR61DhD;;AQ52DQ;EAAgC,wBAA4B;ARg3DpE;;AQ/2DQ;;EAEE,4BAAoC;ARk3D9C;;AQh3DQ;;EAEE,8BAAwC;ARm3DlD;;AQj3DQ;;EAEE,+BAA0C;ARo3DpD;;AQl3DQ;;EAEE,6BAAsC;ARq3DhD;;AQp4DQ;EAAgC,0BAA4B;ARw4DpE;;AQv4DQ;;EAEE,8BAAoC;AR04D9C;;AQx4DQ;;EAEE,gCAAwC;AR24DlD;;AQz4DQ;;EAEE,iCAA0C;AR44DpD;;AQ14DQ;;EAEE,+BAAsC;AR64DhD;;AQ55DQ;EAAgC,wBAA4B;ARg6DpE;;AQ/5DQ;;EAEE,4BAAoC;ARk6D9C;;AQh6DQ;;EAEE,8BAAwC;ARm6DlD;;AQj6DQ;;EAEE,+BAA0C;ARo6DpD;;AQl6DQ;;EAEE,6BAAsC;ARq6DhD;;AQ75DQ;EAAwB,2BAA2B;ARi6D3D;;AQh6DQ;;EAEE,+BAA+B;ARm6DzC;;AQj6DQ;;EAEE,iCAAiC;ARo6D3C;;AQl6DQ;;EAEE,kCAAkC;ARq6D5C;;AQn6DQ;;EAEE,gCAAgC;ARs6D1C;;AQr7DQ;EAAwB,0BAA2B;ARy7D3D;;AQx7DQ;;EAEE,8BAA+B;AR27DzC;;AQz7DQ;;EAEE,gCAAiC;AR47D3C;;AQ17DQ;;EAEE,iCAAkC;AR67D5C;;AQ37DQ;;EAEE,+BAAgC;AR87D1C;;AQ78DQ;EAAwB,wBAA2B;ARi9D3D;;AQh9DQ;;EAEE,4BAA+B;ARm9DzC;;AQj9DQ;;EAEE,8BAAiC;ARo9D3C;;AQl9DQ;;EAEE,+BAAkC;ARq9D5C;;AQn9DQ;;EAEE,6BAAgC;ARs9D1C;;AQr+DQ;EAAwB,0BAA2B;ARy+D3D;;AQx+DQ;;EAEE,8BAA+B;AR2+DzC;;AQz+DQ;;EAEE,gCAAiC;AR4+D3C;;AQ1+DQ;;EAEE,iCAAkC;AR6+D5C;;AQ3+DQ;;EAEE,+BAAgC;AR8+D1C;;AQ7/DQ;EAAwB,wBAA2B;ARigE3D;;AQhgEQ;;EAEE,4BAA+B;ARmgEzC;;AQjgEQ;;EAEE,8BAAiC;ARogE3C;;AQlgEQ;;EAEE,+BAAkC;ARqgE5C;;AQngEQ;;EAEE,6BAAgC;ARsgE1C;;AQhgEI;EAAmB,uBAAuB;ARogE9C;;AQngEI;;EAEE,2BAA2B;ARsgEjC;;AQpgEI;;EAEE,6BAA6B;ARugEnC;;AQrgEI;;EAEE,8BAA8B;ARwgEpC;;AQtgEI;;EAEE,4BAA4B;ARygElC;;AGlhEI;EKlDI;IAAgC,oBAA4B;ERykElE;EQxkEM;;IAEE,wBAAoC;ER0kE5C;EQxkEM;;IAEE,0BAAwC;ER0kEhD;EQxkEM;;IAEE,2BAA0C;ER0kElD;EQxkEM;;IAEE,yBAAsC;ER0kE9C;EQzlEM;IAAgC,0BAA4B;ER4lElE;EQ3lEM;;IAEE,8BAAoC;ER6lE5C;EQ3lEM;;IAEE,gCAAwC;ER6lEhD;EQ3lEM;;IAEE,iCAA0C;ER6lElD;EQ3lEM;;IAEE,+BAAsC;ER6lE9C;EQ5mEM;IAAgC,yBAA4B;ER+mElE;EQ9mEM;;IAEE,6BAAoC;ERgnE5C;EQ9mEM;;IAEE,+BAAwC;ERgnEhD;EQ9mEM;;IAEE,gCAA0C;ERgnElD;EQ9mEM;;IAEE,8BAAsC;ERgnE9C;EQ/nEM;IAAgC,uBAA4B;ERkoElE;EQjoEM;;IAEE,2BAAoC;ERmoE5C;EQjoEM;;IAEE,6BAAwC;ERmoEhD;EQjoEM;;IAEE,8BAA0C;ERmoElD;EQjoEM;;IAEE,4BAAsC;ERmoE9C;EQlpEM;IAAgC,yBAA4B;ERqpElE;EQppEM;;IAEE,6BAAoC;ERspE5C;EQppEM;;IAEE,+BAAwC;ERspEhD;EQppEM;;IAEE,gCAA0C;ERspElD;EQppEM;;IAEE,8BAAsC;ERspE9C;EQrqEM;IAAgC,uBAA4B;ERwqElE;EQvqEM;;IAEE,2BAAoC;ERyqE5C;EQvqEM;;IAEE,6BAAwC;ERyqEhD;EQvqEM;;IAEE,8BAA0C;ERyqElD;EQvqEM;;IAEE,4BAAsC;ERyqE9C;EQxrEM;IAAgC,qBAA4B;ER2rElE;EQ1rEM;;IAEE,yBAAoC;ER4rE5C;EQ1rEM;;IAEE,2BAAwC;ER4rEhD;EQ1rEM;;IAEE,4BAA0C;ER4rElD;EQ1rEM;;IAEE,0BAAsC;ER4rE9C;EQ3sEM;IAAgC,2BAA4B;ER8sElE;EQ7sEM;;IAEE,+BAAoC;ER+sE5C;EQ7sEM;;IAEE,iCAAwC;ER+sEhD;EQ7sEM;;IAEE,kCAA0C;ER+sElD;EQ7sEM;;IAEE,gCAAsC;ER+sE9C;EQ9tEM;IAAgC,0BAA4B;ERiuElE;EQhuEM;;IAEE,8BAAoC;ERkuE5C;EQhuEM;;IAEE,gCAAwC;ERkuEhD;EQhuEM;;IAEE,iCAA0C;ERkuElD;EQhuEM;;IAEE,+BAAsC;ERkuE9C;EQjvEM;IAAgC,wBAA4B;ERovElE;EQnvEM;;IAEE,4BAAoC;ERqvE5C;EQnvEM;;IAEE,8BAAwC;ERqvEhD;EQnvEM;;IAEE,+BAA0C;ERqvElD;EQnvEM;;IAEE,6BAAsC;ERqvE9C;EQpwEM;IAAgC,0BAA4B;ERuwElE;EQtwEM;;IAEE,8BAAoC;ERwwE5C;EQtwEM;;IAEE,gCAAwC;ERwwEhD;EQtwEM;;IAEE,iCAA0C;ERwwElD;EQtwEM;;IAEE,+BAAsC;ERwwE9C;EQvxEM;IAAgC,wBAA4B;ER0xElE;EQzxEM;;IAEE,4BAAoC;ER2xE5C;EQzxEM;;IAEE,8BAAwC;ER2xEhD;EQzxEM;;IAEE,+BAA0C;ER2xElD;EQzxEM;;IAEE,6BAAsC;ER2xE9C;EQnxEM;IAAwB,2BAA2B;ERsxEzD;EQrxEM;;IAEE,+BAA+B;ERuxEvC;EQrxEM;;IAEE,iCAAiC;ERuxEzC;EQrxEM;;IAEE,kCAAkC;ERuxE1C;EQrxEM;;IAEE,gCAAgC;ERuxExC;EQtyEM;IAAwB,0BAA2B;ERyyEzD;EQxyEM;;IAEE,8BAA+B;ER0yEvC;EQxyEM;;IAEE,gCAAiC;ER0yEzC;EQxyEM;;IAEE,iCAAkC;ER0yE1C;EQxyEM;;IAEE,+BAAgC;ER0yExC;EQzzEM;IAAwB,wBAA2B;ER4zEzD;EQ3zEM;;IAEE,4BAA+B;ER6zEvC;EQ3zEM;;IAEE,8BAAiC;ER6zEzC;EQ3zEM;;IAEE,+BAAkC;ER6zE1C;EQ3zEM;;IAEE,6BAAgC;ER6zExC;EQ50EM;IAAwB,0BAA2B;ER+0EzD;EQ90EM;;IAEE,8BAA+B;ERg1EvC;EQ90EM;;IAEE,gCAAiC;ERg1EzC;EQ90EM;;IAEE,iCAAkC;ERg1E1C;EQ90EM;;IAEE,+BAAgC;ERg1ExC;EQ/1EM;IAAwB,wBAA2B;ERk2EzD;EQj2EM;;IAEE,4BAA+B;ERm2EvC;EQj2EM;;IAEE,8BAAiC;ERm2EzC;EQj2EM;;IAEE,+BAAkC;ERm2E1C;EQj2EM;;IAEE,6BAAgC;ERm2ExC;EQ71EE;IAAmB,uBAAuB;ERg2E5C;EQ/1EE;;IAEE,2BAA2B;ERi2E/B;EQ/1EE;;IAEE,6BAA6B;ERi2EjC;EQ/1EE;;IAEE,8BAA8B;ERi2ElC;EQ/1EE;;IAEE,4BAA4B;ERi2EhC;AACF;;AG32EI;EKlDI;IAAgC,oBAA4B;ERk6ElE;EQj6EM;;IAEE,wBAAoC;ERm6E5C;EQj6EM;;IAEE,0BAAwC;ERm6EhD;EQj6EM;;IAEE,2BAA0C;ERm6ElD;EQj6EM;;IAEE,yBAAsC;ERm6E9C;EQl7EM;IAAgC,0BAA4B;ERq7ElE;EQp7EM;;IAEE,8BAAoC;ERs7E5C;EQp7EM;;IAEE,gCAAwC;ERs7EhD;EQp7EM;;IAEE,iCAA0C;ERs7ElD;EQp7EM;;IAEE,+BAAsC;ERs7E9C;EQr8EM;IAAgC,yBAA4B;ERw8ElE;EQv8EM;;IAEE,6BAAoC;ERy8E5C;EQv8EM;;IAEE,+BAAwC;ERy8EhD;EQv8EM;;IAEE,gCAA0C;ERy8ElD;EQv8EM;;IAEE,8BAAsC;ERy8E9C;EQx9EM;IAAgC,uBAA4B;ER29ElE;EQ19EM;;IAEE,2BAAoC;ER49E5C;EQ19EM;;IAEE,6BAAwC;ER49EhD;EQ19EM;;IAEE,8BAA0C;ER49ElD;EQ19EM;;IAEE,4BAAsC;ER49E9C;EQ3+EM;IAAgC,yBAA4B;ER8+ElE;EQ7+EM;;IAEE,6BAAoC;ER++E5C;EQ7+EM;;IAEE,+BAAwC;ER++EhD;EQ7+EM;;IAEE,gCAA0C;ER++ElD;EQ7+EM;;IAEE,8BAAsC;ER++E9C;EQ9/EM;IAAgC,uBAA4B;ERigFlE;EQhgFM;;IAEE,2BAAoC;ERkgF5C;EQhgFM;;IAEE,6BAAwC;ERkgFhD;EQhgFM;;IAEE,8BAA0C;ERkgFlD;EQhgFM;;IAEE,4BAAsC;ERkgF9C;EQjhFM;IAAgC,qBAA4B;ERohFlE;EQnhFM;;IAEE,yBAAoC;ERqhF5C;EQnhFM;;IAEE,2BAAwC;ERqhFhD;EQnhFM;;IAEE,4BAA0C;ERqhFlD;EQnhFM;;IAEE,0BAAsC;ERqhF9C;EQpiFM;IAAgC,2BAA4B;ERuiFlE;EQtiFM;;IAEE,+BAAoC;ERwiF5C;EQtiFM;;IAEE,iCAAwC;ERwiFhD;EQtiFM;;IAEE,kCAA0C;ERwiFlD;EQtiFM;;IAEE,gCAAsC;ERwiF9C;EQvjFM;IAAgC,0BAA4B;ER0jFlE;EQzjFM;;IAEE,8BAAoC;ER2jF5C;EQzjFM;;IAEE,gCAAwC;ER2jFhD;EQzjFM;;IAEE,iCAA0C;ER2jFlD;EQzjFM;;IAEE,+BAAsC;ER2jF9C;EQ1kFM;IAAgC,wBAA4B;ER6kFlE;EQ5kFM;;IAEE,4BAAoC;ER8kF5C;EQ5kFM;;IAEE,8BAAwC;ER8kFhD;EQ5kFM;;IAEE,+BAA0C;ER8kFlD;EQ5kFM;;IAEE,6BAAsC;ER8kF9C;EQ7lFM;IAAgC,0BAA4B;ERgmFlE;EQ/lFM;;IAEE,8BAAoC;ERimF5C;EQ/lFM;;IAEE,gCAAwC;ERimFhD;EQ/lFM;;IAEE,iCAA0C;ERimFlD;EQ/lFM;;IAEE,+BAAsC;ERimF9C;EQhnFM;IAAgC,wBAA4B;ERmnFlE;EQlnFM;;IAEE,4BAAoC;ERonF5C;EQlnFM;;IAEE,8BAAwC;ERonFhD;EQlnFM;;IAEE,+BAA0C;ERonFlD;EQlnFM;;IAEE,6BAAsC;ERonF9C;EQ5mFM;IAAwB,2BAA2B;ER+mFzD;EQ9mFM;;IAEE,+BAA+B;ERgnFvC;EQ9mFM;;IAEE,iCAAiC;ERgnFzC;EQ9mFM;;IAEE,kCAAkC;ERgnF1C;EQ9mFM;;IAEE,gCAAgC;ERgnFxC;EQ/nFM;IAAwB,0BAA2B;ERkoFzD;EQjoFM;;IAEE,8BAA+B;ERmoFvC;EQjoFM;;IAEE,gCAAiC;ERmoFzC;EQjoFM;;IAEE,iCAAkC;ERmoF1C;EQjoFM;;IAEE,+BAAgC;ERmoFxC;EQlpFM;IAAwB,wBAA2B;ERqpFzD;EQppFM;;IAEE,4BAA+B;ERspFvC;EQppFM;;IAEE,8BAAiC;ERspFzC;EQppFM;;IAEE,+BAAkC;ERspF1C;EQppFM;;IAEE,6BAAgC;ERspFxC;EQrqFM;IAAwB,0BAA2B;ERwqFzD;EQvqFM;;IAEE,8BAA+B;ERyqFvC;EQvqFM;;IAEE,gCAAiC;ERyqFzC;EQvqFM;;IAEE,iCAAkC;ERyqF1C;EQvqFM;;IAEE,+BAAgC;ERyqFxC;EQxrFM;IAAwB,wBAA2B;ER2rFzD;EQ1rFM;;IAEE,4BAA+B;ER4rFvC;EQ1rFM;;IAEE,8BAAiC;ER4rFzC;EQ1rFM;;IAEE,+BAAkC;ER4rF1C;EQ1rFM;;IAEE,6BAAgC;ER4rFxC;EQtrFE;IAAmB,uBAAuB;ERyrF5C;EQxrFE;;IAEE,2BAA2B;ER0rF/B;EQxrFE;;IAEE,6BAA6B;ER0rFjC;EQxrFE;;IAEE,8BAA8B;ER0rFlC;EQxrFE;;IAEE,4BAA4B;ER0rFhC;AACF;;AGpsFI;EKlDI;IAAgC,oBAA4B;ER2vFlE;EQ1vFM;;IAEE,wBAAoC;ER4vF5C;EQ1vFM;;IAEE,0BAAwC;ER4vFhD;EQ1vFM;;IAEE,2BAA0C;ER4vFlD;EQ1vFM;;IAEE,yBAAsC;ER4vF9C;EQ3wFM;IAAgC,0BAA4B;ER8wFlE;EQ7wFM;;IAEE,8BAAoC;ER+wF5C;EQ7wFM;;IAEE,gCAAwC;ER+wFhD;EQ7wFM;;IAEE,iCAA0C;ER+wFlD;EQ7wFM;;IAEE,+BAAsC;ER+wF9C;EQ9xFM;IAAgC,yBAA4B;ERiyFlE;EQhyFM;;IAEE,6BAAoC;ERkyF5C;EQhyFM;;IAEE,+BAAwC;ERkyFhD;EQhyFM;;IAEE,gCAA0C;ERkyFlD;EQhyFM;;IAEE,8BAAsC;ERkyF9C;EQjzFM;IAAgC,uBAA4B;ERozFlE;EQnzFM;;IAEE,2BAAoC;ERqzF5C;EQnzFM;;IAEE,6BAAwC;ERqzFhD;EQnzFM;;IAEE,8BAA0C;ERqzFlD;EQnzFM;;IAEE,4BAAsC;ERqzF9C;EQp0FM;IAAgC,yBAA4B;ERu0FlE;EQt0FM;;IAEE,6BAAoC;ERw0F5C;EQt0FM;;IAEE,+BAAwC;ERw0FhD;EQt0FM;;IAEE,gCAA0C;ERw0FlD;EQt0FM;;IAEE,8BAAsC;ERw0F9C;EQv1FM;IAAgC,uBAA4B;ER01FlE;EQz1FM;;IAEE,2BAAoC;ER21F5C;EQz1FM;;IAEE,6BAAwC;ER21FhD;EQz1FM;;IAEE,8BAA0C;ER21FlD;EQz1FM;;IAEE,4BAAsC;ER21F9C;EQ12FM;IAAgC,qBAA4B;ER62FlE;EQ52FM;;IAEE,yBAAoC;ER82F5C;EQ52FM;;IAEE,2BAAwC;ER82FhD;EQ52FM;;IAEE,4BAA0C;ER82FlD;EQ52FM;;IAEE,0BAAsC;ER82F9C;EQ73FM;IAAgC,2BAA4B;ERg4FlE;EQ/3FM;;IAEE,+BAAoC;ERi4F5C;EQ/3FM;;IAEE,iCAAwC;ERi4FhD;EQ/3FM;;IAEE,kCAA0C;ERi4FlD;EQ/3FM;;IAEE,gCAAsC;ERi4F9C;EQh5FM;IAAgC,0BAA4B;ERm5FlE;EQl5FM;;IAEE,8BAAoC;ERo5F5C;EQl5FM;;IAEE,gCAAwC;ERo5FhD;EQl5FM;;IAEE,iCAA0C;ERo5FlD;EQl5FM;;IAEE,+BAAsC;ERo5F9C;EQn6FM;IAAgC,wBAA4B;ERs6FlE;EQr6FM;;IAEE,4BAAoC;ERu6F5C;EQr6FM;;IAEE,8BAAwC;ERu6FhD;EQr6FM;;IAEE,+BAA0C;ERu6FlD;EQr6FM;;IAEE,6BAAsC;ERu6F9C;EQt7FM;IAAgC,0BAA4B;ERy7FlE;EQx7FM;;IAEE,8BAAoC;ER07F5C;EQx7FM;;IAEE,gCAAwC;ER07FhD;EQx7FM;;IAEE,iCAA0C;ER07FlD;EQx7FM;;IAEE,+BAAsC;ER07F9C;EQz8FM;IAAgC,wBAA4B;ER48FlE;EQ38FM;;IAEE,4BAAoC;ER68F5C;EQ38FM;;IAEE,8BAAwC;ER68FhD;EQ38FM;;IAEE,+BAA0C;ER68FlD;EQ38FM;;IAEE,6BAAsC;ER68F9C;EQr8FM;IAAwB,2BAA2B;ERw8FzD;EQv8FM;;IAEE,+BAA+B;ERy8FvC;EQv8FM;;IAEE,iCAAiC;ERy8FzC;EQv8FM;;IAEE,kCAAkC;ERy8F1C;EQv8FM;;IAEE,gCAAgC;ERy8FxC;EQx9FM;IAAwB,0BAA2B;ER29FzD;EQ19FM;;IAEE,8BAA+B;ER49FvC;EQ19FM;;IAEE,gCAAiC;ER49FzC;EQ19FM;;IAEE,iCAAkC;ER49F1C;EQ19FM;;IAEE,+BAAgC;ER49FxC;EQ3+FM;IAAwB,wBAA2B;ER8+FzD;EQ7+FM;;IAEE,4BAA+B;ER++FvC;EQ7+FM;;IAEE,8BAAiC;ER++FzC;EQ7+FM;;IAEE,+BAAkC;ER++F1C;EQ7+FM;;IAEE,6BAAgC;ER++FxC;EQ9/FM;IAAwB,0BAA2B;ERigGzD;EQhgGM;;IAEE,8BAA+B;ERkgGvC;EQhgGM;;IAEE,gCAAiC;ERkgGzC;EQhgGM;;IAEE,iCAAkC;ERkgG1C;EQhgGM;;IAEE,+BAAgC;ERkgGxC;EQjhGM;IAAwB,wBAA2B;ERohGzD;EQnhGM;;IAEE,4BAA+B;ERqhGvC;EQnhGM;;IAEE,8BAAiC;ERqhGzC;EQnhGM;;IAEE,+BAAkC;ERqhG1C;EQnhGM;;IAEE,6BAAgC;ERqhGxC;EQ/gGE;IAAmB,uBAAuB;ERkhG5C;EQjhGE;;IAEE,2BAA2B;ERmhG/B;EQjhGE;;IAEE,6BAA6B;ERmhGjC;EQjhGE;;IAEE,8BAA8B;ERmhGlC;EQjhGE;;IAEE,4BAA4B;ERmhGhC;AACF;;AG7hGI;EKlDI;IAAgC,oBAA4B;ERolGlE;EQnlGM;;IAEE,wBAAoC;ERqlG5C;EQnlGM;;IAEE,0BAAwC;ERqlGhD;EQnlGM;;IAEE,2BAA0C;ERqlGlD;EQnlGM;;IAEE,yBAAsC;ERqlG9C;EQpmGM;IAAgC,0BAA4B;ERumGlE;EQtmGM;;IAEE,8BAAoC;ERwmG5C;EQtmGM;;IAEE,gCAAwC;ERwmGhD;EQtmGM;;IAEE,iCAA0C;ERwmGlD;EQtmGM;;IAEE,+BAAsC;ERwmG9C;EQvnGM;IAAgC,yBAA4B;ER0nGlE;EQznGM;;IAEE,6BAAoC;ER2nG5C;EQznGM;;IAEE,+BAAwC;ER2nGhD;EQznGM;;IAEE,gCAA0C;ER2nGlD;EQznGM;;IAEE,8BAAsC;ER2nG9C;EQ1oGM;IAAgC,uBAA4B;ER6oGlE;EQ5oGM;;IAEE,2BAAoC;ER8oG5C;EQ5oGM;;IAEE,6BAAwC;ER8oGhD;EQ5oGM;;IAEE,8BAA0C;ER8oGlD;EQ5oGM;;IAEE,4BAAsC;ER8oG9C;EQ7pGM;IAAgC,yBAA4B;ERgqGlE;EQ/pGM;;IAEE,6BAAoC;ERiqG5C;EQ/pGM;;IAEE,+BAAwC;ERiqGhD;EQ/pGM;;IAEE,gCAA0C;ERiqGlD;EQ/pGM;;IAEE,8BAAsC;ERiqG9C;EQhrGM;IAAgC,uBAA4B;ERmrGlE;EQlrGM;;IAEE,2BAAoC;ERorG5C;EQlrGM;;IAEE,6BAAwC;ERorGhD;EQlrGM;;IAEE,8BAA0C;ERorGlD;EQlrGM;;IAEE,4BAAsC;ERorG9C;EQnsGM;IAAgC,qBAA4B;ERssGlE;EQrsGM;;IAEE,yBAAoC;ERusG5C;EQrsGM;;IAEE,2BAAwC;ERusGhD;EQrsGM;;IAEE,4BAA0C;ERusGlD;EQrsGM;;IAEE,0BAAsC;ERusG9C;EQttGM;IAAgC,2BAA4B;ERytGlE;EQxtGM;;IAEE,+BAAoC;ER0tG5C;EQxtGM;;IAEE,iCAAwC;ER0tGhD;EQxtGM;;IAEE,kCAA0C;ER0tGlD;EQxtGM;;IAEE,gCAAsC;ER0tG9C;EQzuGM;IAAgC,0BAA4B;ER4uGlE;EQ3uGM;;IAEE,8BAAoC;ER6uG5C;EQ3uGM;;IAEE,gCAAwC;ER6uGhD;EQ3uGM;;IAEE,iCAA0C;ER6uGlD;EQ3uGM;;IAEE,+BAAsC;ER6uG9C;EQ5vGM;IAAgC,wBAA4B;ER+vGlE;EQ9vGM;;IAEE,4BAAoC;ERgwG5C;EQ9vGM;;IAEE,8BAAwC;ERgwGhD;EQ9vGM;;IAEE,+BAA0C;ERgwGlD;EQ9vGM;;IAEE,6BAAsC;ERgwG9C;EQ/wGM;IAAgC,0BAA4B;ERkxGlE;EQjxGM;;IAEE,8BAAoC;ERmxG5C;EQjxGM;;IAEE,gCAAwC;ERmxGhD;EQjxGM;;IAEE,iCAA0C;ERmxGlD;EQjxGM;;IAEE,+BAAsC;ERmxG9C;EQlyGM;IAAgC,wBAA4B;ERqyGlE;EQpyGM;;IAEE,4BAAoC;ERsyG5C;EQpyGM;;IAEE,8BAAwC;ERsyGhD;EQpyGM;;IAEE,+BAA0C;ERsyGlD;EQpyGM;;IAEE,6BAAsC;ERsyG9C;EQ9xGM;IAAwB,2BAA2B;ERiyGzD;EQhyGM;;IAEE,+BAA+B;ERkyGvC;EQhyGM;;IAEE,iCAAiC;ERkyGzC;EQhyGM;;IAEE,kCAAkC;ERkyG1C;EQhyGM;;IAEE,gCAAgC;ERkyGxC;EQjzGM;IAAwB,0BAA2B;ERozGzD;EQnzGM;;IAEE,8BAA+B;ERqzGvC;EQnzGM;;IAEE,gCAAiC;ERqzGzC;EQnzGM;;IAEE,iCAAkC;ERqzG1C;EQnzGM;;IAEE,+BAAgC;ERqzGxC;EQp0GM;IAAwB,wBAA2B;ERu0GzD;EQt0GM;;IAEE,4BAA+B;ERw0GvC;EQt0GM;;IAEE,8BAAiC;ERw0GzC;EQt0GM;;IAEE,+BAAkC;ERw0G1C;EQt0GM;;IAEE,6BAAgC;ERw0GxC;EQv1GM;IAAwB,0BAA2B;ER01GzD;EQz1GM;;IAEE,8BAA+B;ER21GvC;EQz1GM;;IAEE,gCAAiC;ER21GzC;EQz1GM;;IAEE,iCAAkC;ER21G1C;EQz1GM;;IAEE,+BAAgC;ER21GxC;EQ12GM;IAAwB,wBAA2B;ER62GzD;EQ52GM;;IAEE,4BAA+B;ER82GvC;EQ52GM;;IAEE,8BAAiC;ER82GzC;EQ52GM;;IAEE,+BAAkC;ER82G1C;EQ52GM;;IAEE,6BAAgC;ER82GxC;EQx2GE;IAAmB,uBAAuB;ER22G5C;EQ12GE;;IAEE,2BAA2B;ER42G/B;EQ12GE;;IAEE,6BAA6B;ER42GjC;EQ12GE;;IAEE,8BAA8B;ER42GlC;EQ12GE;;IAEE,4BAA4B;ER42GhC;AACF","file":"bootstrap-grid.css","sourcesContent":["/*!\n * Bootstrap Grid v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/display\";\n@import \"utilities/flex\";\n@import \"utilities/spacing\";\n","/*!\n * Bootstrap Grid v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n @include deprecate(\"The `make-container-max-widths` mixin\", \"v4.5.2\", \"v5\");\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n$grid-row-columns: 6 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n$table-th-font-weight: null !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n$custom-control-cursor: null !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-label-color: null !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: null !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: null !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/></svg>\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'><path stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/></svg>\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: null !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'><circle r='3' fill='#{$custom-control-indicator-checked-color}'/></svg>\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'><path fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>\") !default;\n$custom-select-background: escape-svg($custom-select-indicator) no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}' viewBox='0 0 12 12'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n\n$form-validation-states: () !default;\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-font-size: null !default;\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n$user-selects: all, auto, none !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @if $columns > 0 {\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n }\n\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n @if $columns > 0 {\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $value in $displays {\n .d#{$infix}-#{$value} { display: $value !important; }\n }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n @each $value in $displays {\n .d-print-#{$value} { display: $value !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)\n @each $size, $length in $spacers {\n @if $size != 0 {\n .m#{$infix}-n#{$size} { margin: -$length !important; }\n .mt#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-top: -$length !important;\n }\n .mr#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-right: -$length !important;\n }\n .mb#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-bottom: -$length !important;\n }\n .ml#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-left: -$length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../scss/bootstrap-grid.scss","bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_display.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_spacing.scss"],"names":[],"mappings":"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EKp0BM;IAAwB,iBADZ;IACY,QADZ;ELw0BlB;EKv0BM;IAAwB,iBADZ;IACY,QADZ;EL20BlB;EK10BM;IAAwB,kBADZ;IACY,SADZ;EL80BlB;EK70BM;IAAwB,kBADZ;IACY,SADZ;ELi1BlB;EKh1BM;IAAwB,kBADZ;IACY,SADZ;ELo1BlB;EK50BU;IHhBV,cAA4B;EF+1B5B;EK/0BU;IHhBV,sBAA8C;EFk2B9C;EKl1BU;IHhBV,uBAA8C;EFq2B9C;EKr1BU;IHhBV,gBAA8C;EFw2B9C;EKx1BU;IHhBV,uBAA8C;EF22B9C;EK31BU;IHhBV,uBAA8C;EF82B9C;EK91BU;IHhBV,gBAA8C;EFi3B9C;EKj2BU;IHhBV,uBAA8C;EFo3B9C;EKp2BU;IHhBV,uBAA8C;EFu3B9C;EKv2BU;IHhBV,gBAA8C;EF03B9C;EK12BU;IHhBV,uBAA8C;EF63B9C;EK72BU;IHhBV,uBAA8C;EFg4B9C;AACF;;AM76BM;EAAwB,wBAA0B;ANi7BxD;;AMj7BM;EAAwB,0BAA0B;ANq7BxD;;AMr7BM;EAAwB,gCAA0B;ANy7BxD;;AMz7BM;EAAwB,yBAA0B;AN67BxD;;AM77BM;EAAwB,yBAA0B;ANi8BxD;;AMj8BM;EAAwB,6BAA0B;ANq8BxD;;AMr8BM;EAAwB,8BAA0B;ANy8BxD;;AMz8BM;EAAwB,+BAA0B;EAA1B,wBAA0B;AN68BxD;;AM78BM;EAAwB,sCAA0B;EAA1B,+BAA0B;ANi9BxD;;AGh6BI;EGjDE;IAAwB,wBAA0B;ENs9BtD;EMt9BI;IAAwB,0BAA0B;ENy9BtD;EMz9BI;IAAwB,gCAA0B;EN49BtD;EM59BI;IAAwB,yBAA0B;EN+9BtD;EM/9BI;IAAwB,yBAA0B;ENk+BtD;EMl+BI;IAAwB,6BAA0B;ENq+BtD;EMr+BI;IAAwB,8BAA0B;ENw+BtD;EMx+BI;IAAwB,+BAA0B;IAA1B,wBAA0B;EN2+BtD;EM3+BI;IAAwB,sCAA0B;IAA1B,+BAA0B;EN8+BtD;AACF;;AG97BI;EGjDE;IAAwB,wBAA0B;ENo/BtD;EMp/BI;IAAwB,0BAA0B;ENu/BtD;EMv/BI;IAAwB,gCAA0B;EN0/BtD;EM1/BI;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hD;;AQpsDQ;EAAgC,yBAA4B;ARwsDpE;;AQvsDQ;;EAEE,6BAAoC;AR0sD9C;;AQxsDQ;;EAEE,+BAAwC;AR2sDlD;;AQzsDQ;;EAEE,gCAA0C;AR4sDpD;;AQ1sDQ;;EAEE,8BAAsC;AR6sDhD;;AQ5tDQ;EAAgC,uBAA4B;ARguDpE;;AQ/tDQ;;EAEE,2BAAoC;ARkuD9C;;AQhuDQ;;EAEE,6BAAwC;ARmuDlD;;AQjuDQ;;EAEE,8BAA0C;ARouDpD;;AQluDQ;;EAEE,4BAAsC;ARquDhD;;AQpvDQ;EAAgC,yBAA4B;ARwvDpE;;AQvvDQ;;EAEE,6BAAoC;AR0vD9C;;AQxvDQ;;EAEE,+BAAwC;AR2vDlD;;AQzvDQ;;EAEE,gCAA0C;AR4vDpD;;AQ1vDQ;;EAEE,8BAAsC;AR6vDhD;;AQ5wDQ;EAAgC,uBAA4B;ARgxDpE;;AQ/wDQ;;EAEE,2BAAoC;ARkxD9C;;AQhxDQ;;EAEE,6BAAwC;ARmxDlD;;AQjxDQ;;EAEE,8BAA0C;ARoxDpD;;AQlxDQ;;EAEE,4BAAsC;ARqxDhD;;AQpyDQ;EAAgC,qBAA4B;ARwyDpE;;AQvyDQ;;EAEE,yBAAoC;AR0yD9C;;AQxyDQ;;EAEE,2BAAwC;AR2yDlD;;AQzyDQ;;EAEE,4BAA0C;AR4yDpD;;AQ1yDQ;;EAEE,0BAAsC;AR6yDhD;;AQ5zDQ;EAAgC,2BAA4B;ARg0DpE;;AQ/zDQ;;EAEE,+BAAoC;ARk0D9C;;AQh0DQ;;EAEE,iCAAwC;ARm0DlD;;AQj0DQ;;EAEE,kCAA0C;ARo0DpD;;AQl0DQ;;EAEE,gCAAsC;ARq0DhD;;AQp1DQ;EAAgC,0BAA4B;ARw1DpE;;AQv1DQ;;EAEE,8BAAoC;AR01D9C;;AQx1DQ;;EAEE,gCAAwC;AR21DlD;;AQz1DQ;;EAEE,iCAA0C;AR41DpD;;AQ11DQ;;EAEE,+BAAsC;AR61DhD;;AQ52DQ;EAAgC,wBAA4B;ARg3DpE;;AQ/2DQ;;EAEE,4BAAoC;ARk3D9C;;AQh3DQ;;EAEE,8BAAwC;ARm3DlD;;AQj3DQ;;EAEE,+BAA0C;ARo3DpD;;AQl3DQ;;EAEE,6BAAsC;ARq3DhD;;AQp4DQ;EAAgC,0BAA4B;ARw4DpE;;AQv4DQ;;EAEE,8BAAoC;AR04D9C;;AQx4DQ;;EAEE,gCAAwC;AR24DlD;;AQz4DQ;;EAEE,iCAA0C;AR44DpD;;AQ14DQ;;EAEE,+BAAsC;AR64DhD;;AQ55DQ;EAAgC,wBAA4B;ARg6DpE;;AQ/5DQ;;EAEE,4BAAoC;ARk6D9C;;AQh6DQ;;EAEE,8BAAwC;ARm6DlD;;AQj6DQ;;EAEE,+BAA0C;ARo6DpD;;AQl6DQ;;EAEE,6BAAsC;ARq6DhD;;AQ75DQ;EAAwB,2BAA2B;ARi6D3D;;AQh6DQ;;EAEE,+BAA+B;ARm6DzC;;AQj6DQ;;EAEE,iCAAiC;ARo6D3C;;AQl6DQ;;EAEE,kCAAkC;ARq6D5C;;AQn6DQ;;EAEE,gCAAgC;ARs6D1C;;AQr7DQ;EAAwB,0BAA2B;ARy7D3D;;AQx7DQ;;EAEE,8BAA+B;AR27DzC;;AQz7DQ;;EAEE,gCAAiC;AR47D3C;;AQ17DQ;;EAEE,iCAAkC;AR67D5C;;AQ37DQ;;EAEE,+BAAgC;AR87D1C;;AQ78DQ;EAAwB,wBAA2B;ARi9D3D;;AQh9DQ;;EAEE,4BAA+B;ARm9DzC;;AQj9DQ;;EAEE,8BAAiC;ARo9D3C;;AQl9DQ;;EAEE,+BAAkC;ARq9D5C;;AQn9DQ;;EAEE,6BAAgC;ARs9D1C;;AQr+DQ;EAAwB,0BAA2B;ARy+D3D;;AQx+DQ;;EAEE,8BAA+B;AR2+DzC;;AQz+DQ;;EAEE,gCAAiC;AR4+D3C;;AQ1+DQ;;EAEE,iCAAkC;AR6+D5C;;AQ3+DQ;;EAEE,+BAAgC;AR8+D1C;;AQ7/DQ;EAAwB,wBAA2B;ARigE3D;;AQhgEQ;;EAEE,4BAA+B;ARmgEzC;;AQjgEQ;;EAEE,8BAAiC;ARogE3C;;AQlgEQ;;EAEE,+BAAkC;ARqgE5C;;AQngEQ;;EAEE,6BAAgC;ARsgE1C;;AQhgEI;EAAmB,uBAAuB;ARogE9C;;AQngEI;;EAEE,2BAA2B;ARsgEjC;;AQpgEI;;EAEE,6BAA6B;ARugEnC;;AQrgEI;;EAEE,8BAA8B;ARwgEpC;;AQtgEI;;EAEE,4BAA4B;ARygElC;;AGlhEI;EKlDI;IAAgC,oBAA4B;ERykElE;EQxkEM;;IAEE,wBAAoC;ER0kE5C;EQxkEM;;IAEE,0BAAwC;ER0kEhD;EQxkEM;;IAEE,2BAA0C;ER0kElD;EQxkEM;;IAEE,yBAAsC;ER0kE9C;EQzlEM;IAAgC,0BAA4B;ER4lElE;EQ3lEM;;IAEE,8BAAoC;ER6lE5C;EQ3lEM;;IAEE,gCAAwC;ER6lEhD;EQ3lEM;;IAEE,iCAA0C;ER6lElD;EQ3lEM;;IAEE,+BAAsC;ER6lE9C;EQ5mEM;IAAgC,yBAA4B;ER+mElE;EQ9mEM;;IAEE,6BAAoC;ERgnE5C;EQ9mEM;;IAEE,+BAAwC;ERgnEhD;EQ9mEM;;IAEE,gCAA0C;ERgnElD;EQ9mEM;;IAEE,8BAAsC;ERgnE9C;EQ/nEM;IAAgC,uBAA4B;ERkoElE;EQjoEM;;IAEE,2BAAoC;ERmoE5C;EQjoEM;;IAEE,6BAAwC;ERmoEhD;EQjoEM;;IAEE,8BAA0C;ERmoElD;EQjoEM;;IAEE,4BAAsC;ERmoE9C;EQlpEM;IAAgC,yBAA4B;ERqpElE;EQppEM;;IAEE,6BAAoC;ERspE5C;EQppEM;;IAEE,+BAAwC;ERspEhD;EQppEM;;IAEE,gCAA0C;ERspElD;EQppEM;;IAEE,8BAAsC;ERspE9C;EQrqEM;IAAgC,uBAA4B;ERwqElE;EQvqEM;;IAEE,2BAAoC;ERyqE5C;EQvqEM;;IAEE,6BAAwC;ERyqEhD;EQvqEM;;IAEE,8BAA0C;ERyqElD;EQvqEM;;IAEE,4BAAsC;ERyqE9C;EQxrEM;IAAgC,qBAA4B;ER2rElE;EQ1rEM;;IAEE,yBAAoC;ER4rE5C;EQ1rEM;;IAEE,2BAAwC;ER4rEhD;EQ1rEM;;IAEE,4BAA0C;ER4rElD;EQ1rEM;;IAEE,0BAAsC;ER4rE9C;EQ3sEM;IAAgC,2BAA4B;ER8sElE;EQ7sEM;;IAEE,+BAAoC;ER+sE5C;EQ7sEM;;IAEE,iCAAwC;ER+sEhD;EQ7sEM;;IAEE,kCAA0C;ER+sElD;EQ7sEM;;IAEE,gCAAsC;ER+sE9C;EQ9tEM;IAAgC,0BAA4B;ERiuElE;EQhuEM;;IAEE,8BAAoC;ERkuE5C;EQhuEM;;IAEE,gCAAwC;ERkuEhD;EQhuEM;;IAEE,iCAA0C;ERkuElD;EQhuEM;;IAEE,+BAAsC;ERkuE9C;EQjvEM;IAAgC,wBAA4B;ERovElE;EQnvEM;;IAEE,4BAAoC;ERqvE5C;EQnvEM;;IAEE,8BAAwC;ERqvEhD;EQnvEM;;IAEE,+BAA0C;ERqvElD;EQnvEM;;IAEE,6BAAsC;ERqvE9C;EQpwEM;IAAgC,0BAA4B;ERuwElE;EQtwEM;;IAEE,8BAAoC;ERwwE5C;EQtwEM;;IAEE,gCAAwC;ERwwEhD;EQtwEM;;IAEE,iCAA0C;ERwwElD;EQtwEM;;IAEE,+BAAsC;ERwwE9C;EQvxEM;IAAgC,wBAA4B;ER0xElE;EQzxEM;;IAEE,4BAAoC;ER2xE5C;EQzxEM;;IAEE,8BAAwC;ER2xEhD;EQzxEM;;IAEE,+BAA0C;ER2xElD;EQzxEM;;IAEE,6BAAsC;ER2xE9C;EQnxEM;IAAwB,2BAA2B;ERsxEzD;EQrxEM;;IAEE,+BAA+B;ERuxEvC;EQrxEM;;IAEE,iCAAiC;ERuxEzC;EQrxEM;;IAEE,kCAAkC;ERuxE1C;EQrxEM;;IAEE,gCAAgC;ERuxExC;EQtyEM;IAAwB,0BAA2B;ERyyEzD;EQxyEM;;IAEE,8BAA+B;ER0yEvC;EQxyEM;;IAEE,gCAAiC;ER0yEzC;EQxyEM;;IAEE,iCAAkC;ER0yE1C;EQxyEM;;IAEE,+BAAgC;ER0yExC;EQzzEM;IAAwB,wBAA2B;ER4zEzD;EQ3zEM;;IAEE,4BAA+B;ER6zEvC;EQ3zEM;;IAEE,8BAAiC;ER6zEzC;EQ3zEM;;IAEE,+BAAkC;ER6zE1C;EQ3zEM;;IAEE,6BAAgC;ER6zExC;EQ50EM;IAAwB,0BAA2B;ER+0EzD;EQ90EM;;IAEE,8BAA+B;ERg1EvC;EQ90EM;;IAEE,gCAAiC;ERg1EzC;EQ90EM;;IAEE,iCAAkC;ERg1E1C;EQ90EM;;IAEE,+BAAgC;ERg1ExC;EQ/1EM;IAAwB,wBAA2B;ERk2EzD;EQj2EM;;IAEE,4BAA+B;ERm2EvC;EQj2EM;;IAEE,8BAAiC;ERm2EzC;EQj2EM;;IAEE,+BAAkC;ERm2E1C;EQj2EM;;IAEE,6BAAgC;ERm2ExC;EQ71EE;IAAmB,uBAAuB;ERg2E5C;EQ/1EE;;IAEE,2BAA2B;ERi2E/B;EQ/1EE;;IAEE,6BAA6B;ERi2EjC;EQ/1EE;;IAEE,8BAA8B;ERi2ElC;EQ/1EE;;IAEE,4BAA4B;ERi2EhC;AACF;;AG32EI;EKlDI;IAAgC,oBAA4B;ERk6ElE;EQj6EM;;IAEE,wBAAoC;ERm6E5C;EQj6EM;;IAEE,0BAAwC;ERm6EhD;EQj6EM;;IAEE,2BAA0C;ERm6ElD;EQj6EM;;IAEE,yBAAsC;ERm6E9C;EQl7EM;IAAgC,0BAA4B;ERq7ElE;EQp7EM;;IAEE,8BAAoC;ERs7E5C;EQp7EM;;IAEE,gCAAwC;ERs7EhD;EQp7EM;;IAEE,iCAA0C;ERs7ElD;EQp7EM;;IAEE,+BAAsC;ERs7E9C;EQr8EM;IAAgC,yBAA4B;ERw8ElE;EQv8EM;;IAEE,6BAAoC;ERy8E5C;EQv8EM;;IAEE,+BAAwC;ERy8EhD;EQv8EM;;IAEE,gCAA0C;ERy8ElD;EQv8EM;;IAEE,8BAAsC;ERy8E9C;EQx9EM;IAAgC,uBAA4B;ER29ElE;EQ19EM;;IAEE,2BAAoC;ER49E5C;EQ19EM;;IAEE,6BAAwC;ER49EhD;EQ19EM;;IAEE,8BAA0C;ER49ElD;EQ19EM;;IAEE,4BAAsC;ER49E9C;EQ3+EM;IAAgC,yBAA4B;ER8+ElE;EQ7+EM;;IAEE,6BAAoC;ER++E5C;EQ7+EM;;IAEE,+BAAwC;ER++EhD;EQ7+EM;;IAEE,gCAA0C;ER++ElD;EQ7+EM;;IAEE,8BAAsC;ER++E9C;EQ9/EM;IAAgC,uBAA4B;ERigFlE;EQhgFM;;IAEE,2BAAoC;ERkgF5C;EQhgFM;;IAEE,6BAAwC;ERkgFhD;EQhgFM;;IAEE,8BAA0C;ERkgFlD;EQhgFM;;IAEE,4BAAsC;ERkgF9C;EQjhFM;IAAgC,qBAA4B;ERohFlE;EQnhFM;;IAEE,yBAAoC;ERqhF5C;EQnhFM;;IAEE,2BAAwC;ERqhFhD;EQnhFM;;IAEE,4BAA0C;ERqhFlD;EQnhFM;;IAEE,0BAAsC;ERqhF9C;EQpiFM;IAAgC,2BAA4B;ERuiFlE;EQtiFM;;IAEE,+BAAoC;ERwiF5C;EQtiFM;;IAEE,iCAAwC;ERwiFhD;EQtiFM;;IAEE,kCAA0C;ERwiFlD;EQtiFM;;IAEE,gCAAsC;ERwiF9C;EQvjFM;IAAgC,0BAA4B;ER0jFlE;EQzjFM;;IAEE,8BAAoC;ER2jF5C;EQzjFM;;IAEE,gCAAwC;ER2jFhD;EQzjFM;;IAEE,iCAA0C;ER2jFlD;EQzjFM;;IAEE,+BAAsC;ER2jF9C;EQ1kFM;IAAgC,wBAA4B;ER6kFlE;EQ5kFM;;IAEE,4BAAoC;ER8kF5C;EQ5kFM;;IAEE,8BAAwC;ER8kFhD;EQ5kFM;;IAEE,+BAA0C;ER8kFlD;EQ5kFM;;IAEE,6BAAsC;ER8kF9C;EQ7lFM;IAAgC,0BAA4B;ERgmFlE;EQ/lFM;;IAEE,8BAAoC;ERimF5C;EQ/lFM;;IAEE,gCAAwC;ERimFhD;EQ/lFM;;IAEE,iCAA0C;ERimFlD;EQ/lFM;;IAEE,+BAAsC;ERimF9C;EQhnFM;IAAgC,wBAA4B;ERmnFlE;EQlnFM;;IAEE,4BAAoC;ERonF5C;EQlnFM;;IAEE,8BAAwC;ERonFhD;EQlnFM;;IAEE,+BAA0C;ERonFlD;EQlnFM;;IAEE,6BAAsC;ERonF9C;EQ5mFM;IAAwB,2BAA2B;ER+mFzD;EQ9mFM;;IAEE,+BAA+B;ERgnFvC;EQ9mFM;;IAEE,iCAAiC;ERgnFzC;EQ9mFM;;IAEE,kCAAkC;ERgnF1C;EQ9mFM;;IAEE,gCAAgC;ERgnFxC;EQ/nFM;IAAwB,0BAA2B;ERkoFzD;EQjoFM;;IAEE,8BAA+B;ERmoFvC;EQjoFM;;IAEE,gCAAiC;ERmoFzC;EQjoFM;;IAEE,iCAAkC;ERmoF1C;EQjoFM;;IAEE,+BAAgC;ERmoFxC;EQlpFM;IAAwB,wBAA2B;ERqpFzD;EQppFM;;IAEE,4BAA+B;ERspFvC;EQppFM;;IAEE,8BAAiC;ERspFzC;EQppFM;;IAEE,+BAAkC;ERspF1C;EQppFM;;IAEE,6BAAgC;ERspFxC;EQrqFM;IAAwB,0BAA2B;ERwqFzD;EQvqFM;;IAEE,8BAA+B;ERyqFvC;EQvqFM;;IAEE,gCAAiC;ERyqFzC;EQvqFM;;IAEE,iCAAkC;ERyqF1C;EQvqFM;;IAEE,+BAAgC;ERyqFxC;EQxrFM;IAAwB,wBAA2B;ER2rFzD;EQ1rFM;;IAEE,4BAA+B;ER4rFvC;EQ1rFM;;IAEE,8BAAiC;ER4rFzC;EQ1rFM;;IAEE,+BAAkC;ER4rF1C;EQ1rFM;;IAEE,6BAAgC;ER4rFxC;EQtrFE;IAAmB,uBAAuB;ERyrF5C;EQxrFE;;IAEE,2BAA2B;ER0rF/B;EQxrFE;;IAEE,6BAA6B;ER0rFjC;EQxrFE;;IAEE,8BAA8B;ER0rFlC;EQxrFE;;IAEE,4BAA4B;ER0rFhC;AACF;;AGpsFI;EKlDI;IAAgC,oBAA4B;ER2vFlE;EQ1vFM;;IAEE,wBAAoC;ER4vF5C;EQ1vFM;;IAEE,0BAAwC;ER4vFhD;EQ1vFM;;IAEE,2BAA0C;ER4vFlD;EQ1vFM;;IAEE,yBAAsC;ER4vF9C;EQ3wFM;IAAgC,0BAA4B;ER8wFlE;EQ7wFM;;IAEE,8BAAoC;ER+wF5C;EQ7wFM;;IAEE,gCAAwC;ER+wFhD;EQ7wFM;;IAEE,iCAA0C;ER+wFlD;EQ7wFM;;IAEE,+BAAsC;ER+wF9C;EQ9xFM;IAAgC,yBAA4B;ERiyFlE;EQhyFM;;IAEE,6BAAoC;ERkyF5C;EQhyFM;;IAEE,+BAAwC;ERkyFhD;EQhyFM;;IAEE,gCAA0C;ERkyFlD;EQhyFM;;IAEE,8BAAsC;ERkyF9C;EQjzFM;IAAgC,uBAA4B;ERozFlE;EQnzFM;;IAEE,2BAAoC;ERqzF5C;EQnzFM;;IAEE,6BAAwC;ERqzFhD;EQnzFM;;IAEE,8BAA0C;ERqzFlD;EQnzFM;;IAEE,4BAAsC;ERqzF9C;EQp0FM;IAAgC,yBAA4B;ERu0FlE;EQt0FM;;IAEE,6BAAoC;ERw0F5C;EQt0FM;;IAEE,+BAAwC;ERw0FhD;EQt0FM;;IAEE,gCAA0C;ERw0FlD;EQt0FM;;IAEE,8BAAsC;ERw0F9C;EQv1FM;IAAgC,uBAA4B;ER01FlE;EQz1FM;;IAEE,2BAAoC;ER21F5C;EQz1FM;;IAEE,6BAAwC;ER21FhD;EQz1FM;;IAEE,8BAA0C;ER21FlD;EQz1FM;;IAEE,4BAAsC;ER21F9C;EQ12FM;IAAgC,qBAA4B;ER62FlE;EQ52FM;;IAEE,yBAAoC;ER82F5C;EQ52FM;;IAEE,2BAAwC;ER82FhD;EQ52FM;;IAEE,4BAA0C;ER82FlD;EQ52FM;;IAEE,0BAAsC;ER82F9C;EQ73FM;IAAgC,2BAA4B;ERg4FlE;EQ/3FM;;IAEE,+BAAoC;ERi4F5C;EQ/3FM;;IAEE,iCAAwC;ERi4FhD;EQ/3FM;;IAEE,kCAA0C;ERi4FlD;EQ/3FM;;IAEE,gCAAsC;ERi4F9C;EQh5FM;IAAgC,0BAA4B;ERm5FlE;EQl5FM;;IAEE,8BAAoC;ERo5F5C;EQl5FM;;IAEE,gCAAwC;ERo5FhD;EQl5FM;;IAEE,iCAA0C;ERo5FlD;EQl5FM;;IAEE,+BAAsC;ERo5F9C;EQn6FM;IAAgC,wBAA4B;ERs6FlE;EQr6FM;;IAEE,4BAAoC;ERu6F5C;EQr6FM;;IAEE,8BAAwC;ERu6FhD;EQr6FM;;IAEE,+BAA0C;ERu6FlD;EQr6FM;;IAEE,6BAAsC;ERu6F9C;EQt7FM;IAAgC,0BAA4B;ERy7FlE;EQx7FM;;IAEE,8BAAoC;ER07F5C;EQx7FM;;IAEE,gCAAwC;ER07FhD;EQx7FM;;IAEE,iCAA0C;ER07FlD;EQx7FM;;IAEE,+BAAsC;ER07F9C;EQz8FM;IAAgC,wBAA4B;ER48FlE;EQ38FM;;IAEE,4BAAoC;ER68F5C;EQ38FM;;IAEE,8BAAwC;ER68FhD;EQ38FM;;IAEE,+BAA0C;ER68FlD;EQ38FM;;IAEE,6BAAsC;ER68F9C;EQr8FM;IAAwB,2BAA2B;ERw8FzD;EQv8FM;;IAEE,+BAA+B;ERy8FvC;EQv8FM;;IAEE,iCAAiC;ERy8FzC;EQv8FM;;IAEE,kCAAkC;ERy8F1C;EQv8FM;;IAEE,gCAAgC;ERy8FxC;EQx9FM;IAAwB,0BAA2B;ER29FzD;EQ19FM;;IAEE,8BAA+B;ER49FvC;EQ19FM;;IAEE,gCAAiC;ER49FzC;EQ19FM;;IAEE,iCAAkC;ER49F1C;EQ19FM;;IAEE,+BAAgC;ER49FxC;EQ3+FM;IAAwB,wBAA2B;ER8+FzD;EQ7+FM;;IAEE,4BAA+B;ER++FvC;EQ7+FM;;IAEE,8BAAiC;ER++FzC;EQ7+FM;;IAEE,+BAAkC;ER++F1C;EQ7+FM;;IAEE,6BAAgC;ER++FxC;EQ9/FM;IAAwB,0BAA2B;ERigGzD;EQhgGM;;IAEE,8BAA+B;ERkgGvC;EQhgGM;;IAEE,gCAAiC;ERkgGzC;EQhgGM;;IAEE,iCAAkC;ERkgG1C;EQhgGM;;IAEE,+BAAgC;ERkgGxC;EQjhGM;IAAwB,wBAA2B;ERohGzD;EQnhGM;;IAEE,4BAA+B;ERqhGvC;EQnhGM;;IAEE,8BAAiC;ERqhGzC;EQnhGM;;IAEE,+BAAkC;ERqhG1C;EQnhGM;;IAEE,6BAAgC;ERqhGxC;EQ/gGE;IAAmB,uBAAuB;ERkhG5C;EQjhGE;;IAEE,2BAA2B;ERmhG/B;EQjhGE;;IAEE,6BAA6B;ERmhGjC;EQjhGE;;IAEE,8BAA8B;ERmhGlC;EQjhGE;;IAEE,4BAA4B;ERmhGhC;AACF;;AG7hGI;EKlDI;IAAgC,oBAA4B;ERolGlE;EQnlGM;;IAEE,wBAAoC;ERqlG5C;EQnlGM;;IAEE,0BAAwC;ERqlGhD;EQnlGM;;IAEE,2BAA0C;ERqlGlD;EQnlGM;;IAEE,yBAAsC;ERqlG9C;EQpmGM;IAAgC,0BAA4B;ERumGlE;EQtmGM;;IAEE,8BAAoC;ERwmG5C;EQtmGM;;IAEE,gCAAwC;ERwmGhD;EQtmGM;;IAEE,iCAA0C;ERwmGlD;EQtmGM;;IAEE,+BAAsC;ERwmG9C;EQvnGM;IAAgC,yBAA4B;ER0nGlE;EQznGM;;IAEE,6BAAoC;ER2nG5C;EQznGM;;IAEE,+BAAwC;ER2nGhD;EQznGM;;IAEE,gCAA0C;ER2nGlD;EQznGM;;IAEE,8BAAsC;ER2nG9C;EQ1oGM;IAAgC,uBAA4B;ER6oGlE;EQ5oGM;;IAEE,2BAAoC;ER8oG5C;EQ5oGM;;IAEE,6BAAwC;ER8oGhD;EQ5oGM;;IAEE,8BAA0C;ER8oGlD;EQ5oGM;;IAEE,4BAAsC;ER8oG9C;EQ7pGM;IAAgC,yBAA4B;ERgqGlE;EQ/pGM;;IAEE,6BAAoC;ERiqG5C;EQ/pGM;;IAEE,+BAAwC;ERiqGhD;EQ/pGM;;IAEE,gCAA0C;ERiqGlD;EQ/pGM;;IAEE,8BAAsC;ERiqG9C;EQhrGM;IAAgC,uBAA4B;ERmrGlE;EQlrGM;;IAEE,2BAAoC;ERorG5C;EQlrGM;;IAEE,6BAAwC;ERorGhD;EQlrGM;;IAEE,8BAA0C;ERorGlD;EQlrGM;;IAEE,4BAAsC;ERorG9C;EQnsGM;IAAgC,qBAA4B;ERssGlE;EQrsGM;;IAEE,yBAAoC;ERusG5C;EQrsGM;;IAEE,2BAAwC;ERusGhD;EQrsGM;;IAEE,4BAA0C;ERusGlD;EQrsGM;;IAEE,0BAAsC;ERusG9C;EQttGM;IAAgC,2BAA4B;ERytGlE;EQxtGM;;IAEE,+BAAoC;ER0tG5C;EQxtGM;;IAEE,iCAAwC;ER0tGhD;EQxtGM;;IAEE,kCAA0C;ER0tGlD;EQxtGM;;IAEE,gCAAsC;ER0tG9C;EQzuGM;IAAgC,0BAA4B;ER4uGlE;EQ3uGM;;IAEE,8BAAoC;ER6uG5C;EQ3uGM;;IAEE,gCAAwC;ER6uGhD;EQ3uGM;;IAEE,iCAA0C;ER6uGlD;EQ3uGM;;IAEE,+BAAsC;ER6uG9C;EQ5vGM;IAAgC,wBAA4B;ER+vGlE;EQ9vGM;;IAEE,4BAAoC;ERgwG5C;EQ9vGM;;IAEE,8BAAwC;ERgwGhD;EQ9vGM;;IAEE,+BAA0C;ERgwGlD;EQ9vGM;;IAEE,6BAAsC;ERgwG9C;EQ/wGM;IAAgC,0BAA4B;ERkxGlE;EQjxGM;;IAEE,8BAAoC;ERmxG5C;EQjxGM;;IAEE,gCAAwC;ERmxGhD;EQjxGM;;IAEE,iCAA0C;ERmxGlD;EQjxGM;;IAEE,+BAAsC;ERmxG9C;EQlyGM;IAAgC,wBAA4B;ERqyGlE;EQpyGM;;IAEE,4BAAoC;ERsyG5C;EQpyGM;;IAEE,8BAAwC;ERsyGhD;EQpyGM;;IAEE,+BAA0C;ERsyGlD;EQpyGM;;IAEE,6BAAsC;ERsyG9C;EQ9xGM;IAAwB,2BAA2B;ERiyGzD;EQhyGM;;IAEE,+BAA+B;ERkyGvC;EQhyGM;;IAEE,iCAAiC;ERkyGzC;EQhyGM;;IAEE,kCAAkC;ERkyG1C;EQhyGM;;IAEE,gCAAgC;ERkyGxC;EQjzGM;IAAwB,0BAA2B;ERozGzD;EQnzGM;;IAEE,8BAA+B;ERqzGvC;EQnzGM;;IAEE,gCAAiC;ERqzGzC;EQnzGM;;IAEE,iCAAkC;ERqzG1C;EQnzGM;;IAEE,+BAAgC;ERqzGxC;EQp0GM;IAAwB,wBAA2B;ERu0GzD;EQt0GM;;IAEE,4BAA+B;ERw0GvC;EQt0GM;;IAEE,8BAAiC;ERw0GzC;EQt0GM;;IAEE,+BAAkC;ERw0G1C;EQt0GM;;IAEE,6BAAgC;ERw0GxC;EQv1GM;IAAwB,0BAA2B;ER01GzD;EQz1GM;;IAEE,8BAA+B;ER21GvC;EQz1GM;;IAEE,gCAAiC;ER21GzC;EQz1GM;;IAEE,iCAAkC;ER21G1C;EQz1GM;;IAEE,+BAAgC;ER21GxC;EQ12GM;IAAwB,wBAA2B;ER62GzD;EQ52GM;;IAEE,4BAA+B;ER82GvC;EQ52GM;;IAEE,8BAAiC;ER82GzC;EQ52GM;;IAEE,+BAAkC;ER82G1C;EQ52GM;;IAEE,6BAAgC;ER82GxC;EQx2GE;IAAmB,uBAAuB;ER22G5C;EQ12GE;;IAEE,2BAA2B;ER42G/B;EQ12GE;;IAEE,6BAA6B;ER42GjC;EQ12GE;;IAEE,8BAA8B;ER42GlC;EQ12GE;;IAEE,4BAA4B;ER42GhC;AACF","file":"bootstrap-grid.css","sourcesContent":["/*!\n * Bootstrap Grid v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/deprecate\";\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/display\";\n@import \"utilities/flex\";\n@import \"utilities/spacing\";\n","/*!\n * Bootstrap Grid v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n @include deprecate(\"The `make-container-max-widths` mixin\", \"v4.5.2\", \"v5\");\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n$grid-row-columns: 6 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n$table-th-font-weight: null !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n$custom-control-cursor: null !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-label-color: null !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: null !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: null !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/></svg>\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'><path stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/></svg>\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: null !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'><circle r='3' fill='#{$custom-control-indicator-checked-color}'/></svg>\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'><path fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>\") !default;\n$custom-select-background: escape-svg($custom-select-indicator) right $custom-select-padding-x center / $custom-select-bg-size no-repeat !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}' viewBox='0 0 12 12'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n\n$form-validation-states: () !default;\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-nav-scroll-max-height: 75vh !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-font-size: null !default;\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n$user-selects: all, auto, none !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @if $columns > 0 {\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n }\n\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n @if $columns > 0 {\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $value in $displays {\n .d#{$infix}-#{$value} { display: $value !important; }\n }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n @each $value in $displays {\n .d-print-#{$value} { display: $value !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)\n @each $size, $length in $spacers {\n @if $size != 0 {\n .m#{$infix}-n#{$size} { margin: -$length !important; }\n .mt#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-top: -$length !important;\n }\n .mr#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-right: -$length !important;\n }\n .mb#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-bottom: -$length !important;\n }\n .ml#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-left: -$length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n"]} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css index d323f93fd..f0a3258fd 100644 --- a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css +++ b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css @@ -1,7 +1,7 @@ /*! - * Bootstrap Grid v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors - * Copyright 2011-2020 Twitter, Inc. + * Bootstrap Grid v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */html{box-sizing:border-box;-ms-overflow-style:scrollbar}*,::after,::before{box-sizing:inherit}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}} /*# sourceMappingURL=bootstrap-grid.min.css.map */ \ No newline at end of file diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css.map index 9c96ff302..12e4889fc 100644 --- a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css.map +++ b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css.map @@ -1 +1 @@ -{"version":3,"sources":["../../scss/bootstrap-grid.scss","dist/css/bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_display.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_spacing.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap Grid v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/display\";\n@import \"utilities/flex\";\n@import \"utilities/spacing\";\n","/*!\n * Bootstrap Grid v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n -ms-flex-order: -1;\n order: -1;\n}\n\n.order-last {\n -ms-flex-order: 13;\n order: 13;\n}\n\n.order-0 {\n -ms-flex-order: 0;\n order: 0;\n}\n\n.order-1 {\n -ms-flex-order: 1;\n order: 1;\n}\n\n.order-2 {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.order-3 {\n -ms-flex-order: 3;\n order: 3;\n}\n\n.order-4 {\n -ms-flex-order: 4;\n order: 4;\n}\n\n.order-5 {\n -ms-flex-order: 5;\n order: 5;\n}\n\n.order-6 {\n -ms-flex-order: 6;\n order: 6;\n}\n\n.order-7 {\n -ms-flex-order: 7;\n order: 7;\n}\n\n.order-8 {\n -ms-flex-order: 8;\n order: 8;\n}\n\n.order-9 {\n -ms-flex-order: 9;\n order: 9;\n}\n\n.order-10 {\n -ms-flex-order: 10;\n order: 10;\n}\n\n.order-11 {\n -ms-flex-order: 11;\n order: 11;\n}\n\n.order-12 {\n -ms-flex-order: 12;\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-sm-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-sm-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-sm-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-sm-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-sm-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-sm-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-sm-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-sm-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-sm-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-sm-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-sm-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-sm-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-sm-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-sm-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-md-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-md-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-md-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-md-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-md-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-md-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-md-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-md-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-md-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-md-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-md-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-md-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-md-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-md-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-lg-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-lg-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-lg-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-lg-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-lg-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-lg-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-lg-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-lg-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-lg-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-lg-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-lg-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-lg-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-lg-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-lg-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-xl-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-xl-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-xl-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-xl-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-xl-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-xl-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-xl-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-xl-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-xl-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-xl-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-xl-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-xl-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-xl-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-xl-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n}\n\n.d-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-md-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-print-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n.flex-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n}\n\n.flex-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n}\n\n.justify-content-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n}\n\n.align-items-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n}\n\n.align-items-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n}\n\n.align-items-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n}\n\n.align-items-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n}\n\n.align-content-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n}\n\n.align-content-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n}\n\n.align-content-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n}\n\n.align-content-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n}\n\n.align-content-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n}\n\n.align-self-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n}\n\n.align-self-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n}\n\n.align-self-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n}\n\n.align-self-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n}\n\n.align-self-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-sm-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-sm-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-sm-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-sm-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-sm-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-sm-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-sm-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-sm-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-md-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-md-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-md-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-md-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-md-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-md-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-md-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-md-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-md-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-md-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-md-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-md-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-md-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-md-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-md-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-md-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-lg-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-lg-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-lg-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-lg-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-lg-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-lg-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-lg-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-lg-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-xl-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-xl-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-xl-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-xl-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-xl-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-xl-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-xl-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-xl-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n @include deprecate(\"The `make-container-max-widths` mixin\", \"v4.5.2\", \"v5\");\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @if $columns > 0 {\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n }\n\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n @if $columns > 0 {\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $value in $displays {\n .d#{$infix}-#{$value} { display: $value !important; }\n }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n @each $value in $displays {\n .d-print-#{$value} { display: $value !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)\n @each $size, $length in $spacers {\n @if $size != 0 {\n .m#{$infix}-n#{$size} { margin: -$length !important; }\n .mt#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-top: -$length !important;\n }\n .mr#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-right: -$length !important;\n }\n .mb#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-bottom: -$length !important;\n }\n .ml#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-left: -$length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../scss/bootstrap-grid.scss","dist/css/bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_display.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_spacing.scss"],"names":[],"mappings":"AAAA;;;;;AAOA,KACE,WAAA,WACA,mBAAA,UAGF,ECCA,QADA,SDGE,WAAA,QETA,WDYF,iBAGA,cADA,cADA,cAGA,cEjBE,MAAA,KACA,cAAA,KACA,aAAA,KACA,aAAA,KACA,YAAA,KCmDE,yBFzCE,WAAA,cACE,UAAA,OEwCJ,yBFzCE,WAAA,cAAA,cACE,UAAA,OEwCJ,yBFzCE,WAAA,cAAA,cAAA,cACE,UAAA,OEwCJ,0BFzCE,WAAA,cAAA,cAAA,cAAA,cACE,UAAA,QA4BN,KCnCA,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,aAAA,MACA,YAAA,MDsCA,YACE,aAAA,EACA,YAAA,EAFF,iBDeF,0BCTM,cAAA,EACA,aAAA,EGtDJ,KAAA,OAAA,QAAA,QAAA,QAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OJoEF,UAEqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aAFqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aAFkJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,aAEqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aIvEI,SAAA,SACA,MAAA,KACA,cAAA,KACA,aAAA,KAsBE,KACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,cFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,cFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,cFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,cFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,cFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,cFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,UFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,OFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,QFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,QFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,QFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,aAAwB,eAAA,GAAA,MAAA,GAExB,YAAuB,eAAA,GAAA,MAAA,GAGrB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,UAAwB,eAAA,GAAA,MAAA,GAAxB,UAAwB,eAAA,GAAA,MAAA,GAAxB,UAAwB,eAAA,GAAA,MAAA,GAOpB,UFhBV,YAAA,UEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,IEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,IEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,IEgBU,WFhBV,YAAA,WEgBU,WFhBV,YAAA,WCKE,yBC3BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,iBFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,aFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,UFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAOpB,aFhBV,YAAA,EEgBU,aFhBV,YAAA,UEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,cFhBV,YAAA,WEgBU,cFhBV,YAAA,YCKE,yBC3BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,iBFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,aFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,UFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAOpB,aFhBV,YAAA,EEgBU,aFhBV,YAAA,UEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,cFhBV,YAAA,WEgBU,cFhBV,YAAA,YCKE,yBC3BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,iBFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,aFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,UFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAOpB,aFhBV,YAAA,EEgBU,aFhBV,YAAA,UEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,cFhBV,YAAA,WEgBU,cFhBV,YAAA,YCKE,0BC3BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,iBFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,aFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,UFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAOpB,aFhBV,YAAA,EEgBU,aFhBV,YAAA,UEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,cFhBV,YAAA,WEgBU,cFhBV,YAAA,YG5CI,QAAwB,QAAA,eAAxB,UAAwB,QAAA,iBAAxB,gBAAwB,QAAA,uBAAxB,SAAwB,QAAA,gBAAxB,SAAwB,QAAA,gBAAxB,aAAwB,QAAA,oBAAxB,cAAwB,QAAA,qBAAxB,QAAwB,QAAA,sBAAA,QAAA,eAAxB,eAAwB,QAAA,6BAAA,QAAA,sBFiD1B,yBEjDE,WAAwB,QAAA,eAAxB,aAAwB,QAAA,iBAAxB,mBAAwB,QAAA,uBAAxB,YAAwB,QAAA,gBAAxB,YAAwB,QAAA,gBAAxB,gBAAwB,QAAA,oBAAxB,iBAAwB,QAAA,qBAAxB,WAAwB,QAAA,sBAAA,QAAA,eAAxB,kBAAwB,QAAA,6BAAA,QAAA,uBFiD1B,yBEjDE,WAAwB,QAAA,eAAxB,aAAwB,QAAA,iBAAxB,mBAAwB,QAAA,uBAAxB,YAAwB,QAAA,gBAAxB,YAAwB,QAAA,gBAAxB,gBAAwB,QAAA,oBAAxB,iBAAwB,QAAA,qBAAxB,WAAwB,QAAA,sBAAA,QAAA,eAAxB,kBAAwB,QAAA,6BAAA,QAAA,uBFiD1B,yBEjDE,WAAwB,QAAA,eAAxB,aAAwB,QAAA,iBAAxB,mBAAwB,QAAA,uBAAxB,YAAwB,QAAA,gBAAxB,YAAwB,QAAA,gBAAxB,gBAAwB,QAAA,oBAAxB,iBAAwB,QAAA,qBAAxB,WAAwB,QAAA,sBAAA,QAAA,eAAxB,kBAAwB,QAAA,6BAAA,QAAA,uBFiD1B,0BEjDE,WAAwB,QAAA,eAAxB,aAAwB,QAAA,iBAAxB,mBAAwB,QAAA,uBAAxB,YAAwB,QAAA,gBAAxB,YAAwB,QAAA,gBAAxB,gBAAwB,QAAA,oBAAxB,iBAAwB,QAAA,qBAAxB,WAAwB,QAAA,sBAAA,QAAA,eAAxB,kBAAwB,QAAA,6BAAA,QAAA,uBAU9B,aAEI,cAAqB,QAAA,eAArB,gBAAqB,QAAA,iBAArB,sBAAqB,QAAA,uBAArB,eAAqB,QAAA,gBAArB,eAAqB,QAAA,gBAArB,mBAAqB,QAAA,oBAArB,oBAAqB,QAAA,qBAArB,cAAqB,QAAA,sBAAA,QAAA,eAArB,qBAAqB,QAAA,6BAAA,QAAA,uBCbrB,UAAgC,mBAAA,cAAA,eAAA,cAChC,aAAgC,mBAAA,iBAAA,eAAA,iBAChC,kBAAgC,mBAAA,sBAAA,eAAA,sBAChC,qBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,WAA8B,cAAA,eAAA,UAAA,eAC9B,aAA8B,cAAA,iBAAA,UAAA,iBAC9B,mBAA8B,cAAA,uBAAA,UAAA,uBAC9B,WAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,aAA8B,kBAAA,YAAA,UAAA,YAC9B,aAA8B,kBAAA,YAAA,UAAA,YAC9B,eAA8B,kBAAA,YAAA,YAAA,YAC9B,eAA8B,kBAAA,YAAA,YAAA,YAE9B,uBAAoC,cAAA,gBAAA,gBAAA,qBACpC,qBAAoC,cAAA,cAAA,gBAAA,mBACpC,wBAAoC,cAAA,iBAAA,gBAAA,iBACpC,yBAAoC,cAAA,kBAAA,gBAAA,wBACpC,wBAAoC,cAAA,qBAAA,gBAAA,uBAEpC,mBAAiC,eAAA,gBAAA,YAAA,qBACjC,iBAAiC,eAAA,cAAA,YAAA,mBACjC,oBAAiC,eAAA,iBAAA,YAAA,iBACjC,sBAAiC,eAAA,mBAAA,YAAA,mBACjC,qBAAiC,eAAA,kBAAA,YAAA,kBAEjC,qBAAkC,mBAAA,gBAAA,cAAA,qBAClC,mBAAkC,mBAAA,cAAA,cAAA,mBAClC,sBAAkC,mBAAA,iBAAA,cAAA,iBAClC,uBAAkC,mBAAA,kBAAA,cAAA,wBAClC,sBAAkC,mBAAA,qBAAA,cAAA,uBAClC,uBAAkC,mBAAA,kBAAA,cAAA,kBAElC,iBAAgC,oBAAA,eAAA,WAAA,eAChC,kBAAgC,oBAAA,gBAAA,WAAA,qBAChC,gBAAgC,oBAAA,cAAA,WAAA,mBAChC,mBAAgC,oBAAA,iBAAA,WAAA,iBAChC,qBAAgC,oBAAA,mBAAA,WAAA,mBAChC,oBAAgC,oBAAA,kBAAA,WAAA,kBHYhC,yBGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBHYhC,yBGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBHYhC,yBGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBHYhC,0BGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBCtC5B,KAAgC,OAAA,YAChC,MPsgER,MOpgEU,WAAA,YAEF,MPugER,MOrgEU,aAAA,YAEF,MPwgER,MOtgEU,cAAA,YAEF,MPygER,MOvgEU,YAAA,YAfF,KAAgC,OAAA,iBAChC,MP8hER,MO5hEU,WAAA,iBAEF,MP+hER,MO7hEU,aAAA,iBAEF,MPgiER,MO9hEU,cAAA,iBAEF,MPiiER,MO/hEU,YAAA,iBAfF,KAAgC,OAAA,gBAChC,MPsjER,MOpjEU,WAAA,gBAEF,MPujER,MOrjEU,aAAA,gBAEF,MPwjER,MOtjEU,cAAA,gBAEF,MPyjER,MOvjEU,YAAA,gBAfF,KAAgC,OAAA,eAChC,MP8kER,MO5kEU,WAAA,eAEF,MP+kER,MO7kEU,aAAA,eAEF,MPglER,MO9kEU,cAAA,eAEF,MPilER,MO/kEU,YAAA,eAfF,KAAgC,OAAA,iBAChC,MPsmER,MOpmEU,WAAA,iBAEF,MPumER,MOrmEU,aAAA,iBAEF,MPwmER,MOtmEU,cAAA,iBAEF,MPymER,MOvmEU,YAAA,iBAfF,KAAgC,OAAA,eAChC,MP8nER,MO5nEU,WAAA,eAEF,MP+nER,MO7nEU,aAAA,eAEF,MPgoER,MO9nEU,cAAA,eAEF,MPioER,MO/nEU,YAAA,eAfF,KAAgC,QAAA,YAChC,MPspER,MOppEU,YAAA,YAEF,MPupER,MOrpEU,cAAA,YAEF,MPwpER,MOtpEU,eAAA,YAEF,MPypER,MOvpEU,aAAA,YAfF,KAAgC,QAAA,iBAChC,MP8qER,MO5qEU,YAAA,iBAEF,MP+qER,MO7qEU,cAAA,iBAEF,MPgrER,MO9qEU,eAAA,iBAEF,MPirER,MO/qEU,aAAA,iBAfF,KAAgC,QAAA,gBAChC,MPssER,MOpsEU,YAAA,gBAEF,MPusER,MOrsEU,cAAA,gBAEF,MPwsER,MOtsEU,eAAA,gBAEF,MPysER,MOvsEU,aAAA,gBAfF,KAAgC,QAAA,eAChC,MP8tER,MO5tEU,YAAA,eAEF,MP+tER,MO7tEU,cAAA,eAEF,MPguER,MO9tEU,eAAA,eAEF,MPiuER,MO/tEU,aAAA,eAfF,KAAgC,QAAA,iBAChC,MPsvER,MOpvEU,YAAA,iBAEF,MPuvER,MOrvEU,cAAA,iBAEF,MPwvER,MOtvEU,eAAA,iBAEF,MPyvER,MOvvEU,aAAA,iBAfF,KAAgC,QAAA,eAChC,MP8wER,MO5wEU,YAAA,eAEF,MP+wER,MO7wEU,cAAA,eAEF,MPgxER,MO9wEU,eAAA,eAEF,MPixER,MO/wEU,aAAA,eAQF,MAAwB,OAAA,kBACxB,OP+wER,OO7wEU,WAAA,kBAEF,OPgxER,OO9wEU,aAAA,kBAEF,OPixER,OO/wEU,cAAA,kBAEF,OPkxER,OOhxEU,YAAA,kBAfF,MAAwB,OAAA,iBACxB,OPuyER,OOryEU,WAAA,iBAEF,OPwyER,OOtyEU,aAAA,iBAEF,OPyyER,OOvyEU,cAAA,iBAEF,OP0yER,OOxyEU,YAAA,iBAfF,MAAwB,OAAA,gBACxB,OP+zER,OO7zEU,WAAA,gBAEF,OPg0ER,OO9zEU,aAAA,gBAEF,OPi0ER,OO/zEU,cAAA,gBAEF,OPk0ER,OOh0EU,YAAA,gBAfF,MAAwB,OAAA,kBACxB,OPu1ER,OOr1EU,WAAA,kBAEF,OPw1ER,OOt1EU,aAAA,kBAEF,OPy1ER,OOv1EU,cAAA,kBAEF,OP01ER,OOx1EU,YAAA,kBAfF,MAAwB,OAAA,gBACxB,OP+2ER,OO72EU,WAAA,gBAEF,OPg3ER,OO92EU,aAAA,gBAEF,OPi3ER,OO/2EU,cAAA,gBAEF,OPk3ER,OOh3EU,YAAA,gBAMN,QAAmB,OAAA,eACnB,SPk3EJ,SOh3EM,WAAA,eAEF,SPm3EJ,SOj3EM,aAAA,eAEF,SPo3EJ,SOl3EM,cAAA,eAEF,SPq3EJ,SOn3EM,YAAA,eJTF,yBIlDI,QAAgC,OAAA,YAChC,SPs7EN,SOp7EQ,WAAA,YAEF,SPs7EN,SOp7EQ,aAAA,YAEF,SPs7EN,SOp7EQ,cAAA,YAEF,SPs7EN,SOp7EQ,YAAA,YAfF,QAAgC,OAAA,iBAChC,SPy8EN,SOv8EQ,WAAA,iBAEF,SPy8EN,SOv8EQ,aAAA,iBAEF,SPy8EN,SOv8EQ,cAAA,iBAEF,SPy8EN,SOv8EQ,YAAA,iBAfF,QAAgC,OAAA,gBAChC,SP49EN,SO19EQ,WAAA,gBAEF,SP49EN,SO19EQ,aAAA,gBAEF,SP49EN,SO19EQ,cAAA,gBAEF,SP49EN,SO19EQ,YAAA,gBAfF,QAAgC,OAAA,eAChC,SP++EN,SO7+EQ,WAAA,eAEF,SP++EN,SO7+EQ,aAAA,eAEF,SP++EN,SO7+EQ,cAAA,eAEF,SP++EN,SO7+EQ,YAAA,eAfF,QAAgC,OAAA,iBAChC,SPkgFN,SOhgFQ,WAAA,iBAEF,SPkgFN,SOhgFQ,aAAA,iBAEF,SPkgFN,SOhgFQ,cAAA,iBAEF,SPkgFN,SOhgFQ,YAAA,iBAfF,QAAgC,OAAA,eAChC,SPqhFN,SOnhFQ,WAAA,eAEF,SPqhFN,SOnhFQ,aAAA,eAEF,SPqhFN,SOnhFQ,cAAA,eAEF,SPqhFN,SOnhFQ,YAAA,eAfF,QAAgC,QAAA,YAChC,SPwiFN,SOtiFQ,YAAA,YAEF,SPwiFN,SOtiFQ,cAAA,YAEF,SPwiFN,SOtiFQ,eAAA,YAEF,SPwiFN,SOtiFQ,aAAA,YAfF,QAAgC,QAAA,iBAChC,SP2jFN,SOzjFQ,YAAA,iBAEF,SP2jFN,SOzjFQ,cAAA,iBAEF,SP2jFN,SOzjFQ,eAAA,iBAEF,SP2jFN,SOzjFQ,aAAA,iBAfF,QAAgC,QAAA,gBAChC,SP8kFN,SO5kFQ,YAAA,gBAEF,SP8kFN,SO5kFQ,cAAA,gBAEF,SP8kFN,SO5kFQ,eAAA,gBAEF,SP8kFN,SO5kFQ,aAAA,gBAfF,QAAgC,QAAA,eAChC,SPimFN,SO/lFQ,YAAA,eAEF,SPimFN,SO/lFQ,cAAA,eAEF,SPimFN,SO/lFQ,eAAA,eAEF,SPimFN,SO/lFQ,aAAA,eAfF,QAAgC,QAAA,iBAChC,SPonFN,SOlnFQ,YAAA,iBAEF,SPonFN,SOlnFQ,cAAA,iBAEF,SPonFN,SOlnFQ,eAAA,iBAEF,SPonFN,SOlnFQ,aAAA,iBAfF,QAAgC,QAAA,eAChC,SPuoFN,SOroFQ,YAAA,eAEF,SPuoFN,SOroFQ,cAAA,eAEF,SPuoFN,SOroFQ,eAAA,eAEF,SPuoFN,SOroFQ,aAAA,eAQF,SAAwB,OAAA,kBACxB,UPmoFN,UOjoFQ,WAAA,kBAEF,UPmoFN,UOjoFQ,aAAA,kBAEF,UPmoFN,UOjoFQ,cAAA,kBAEF,UPmoFN,UOjoFQ,YAAA,kBAfF,SAAwB,OAAA,iBACxB,UPspFN,UOppFQ,WAAA,iBAEF,UPspFN,UOppFQ,aAAA,iBAEF,UPspFN,UOppFQ,cAAA,iBAEF,UPspFN,UOppFQ,YAAA,iBAfF,SAAwB,OAAA,gBACxB,UPyqFN,UOvqFQ,WAAA,gBAEF,UPyqFN,UOvqFQ,aAAA,gBAEF,UPyqFN,UOvqFQ,cAAA,gBAEF,UPyqFN,UOvqFQ,YAAA,gBAfF,SAAwB,OAAA,kBACxB,UP4rFN,UO1rFQ,WAAA,kBAEF,UP4rFN,UO1rFQ,aAAA,kBAEF,UP4rFN,UO1rFQ,cAAA,kBAEF,UP4rFN,UO1rFQ,YAAA,kBAfF,SAAwB,OAAA,gBACxB,UP+sFN,UO7sFQ,WAAA,gBAEF,UP+sFN,UO7sFQ,aAAA,gBAEF,UP+sFN,UO7sFQ,cAAA,gBAEF,UP+sFN,UO7sFQ,YAAA,gBAMN,WAAmB,OAAA,eACnB,YP6sFF,YO3sFI,WAAA,eAEF,YP6sFF,YO3sFI,aAAA,eAEF,YP6sFF,YO3sFI,cAAA,eAEF,YP6sFF,YO3sFI,YAAA,gBJTF,yBIlDI,QAAgC,OAAA,YAChC,SP+wFN,SO7wFQ,WAAA,YAEF,SP+wFN,SO7wFQ,aAAA,YAEF,SP+wFN,SO7wFQ,cAAA,YAEF,SP+wFN,SO7wFQ,YAAA,YAfF,QAAgC,OAAA,iBAChC,SPkyFN,SOhyFQ,WAAA,iBAEF,SPkyFN,SOhyFQ,aAAA,iBAEF,SPkyFN,SOhyFQ,cAAA,iBAEF,SPkyFN,SOhyFQ,YAAA,iBAfF,QAAgC,OAAA,gBAChC,SPqzFN,SOnzFQ,WAAA,gBAEF,SPqzFN,SOnzFQ,aAAA,gBAEF,SPqzFN,SOnzFQ,cAAA,gBAEF,SPqzFN,SOnzFQ,YAAA,gBAfF,QAAgC,OAAA,eAChC,SPw0FN,SOt0FQ,WAAA,eAEF,SPw0FN,SOt0FQ,aAAA,eAEF,SPw0FN,SOt0FQ,cAAA,eAEF,SPw0FN,SOt0FQ,YAAA,eAfF,QAAgC,OAAA,iBAChC,SP21FN,SOz1FQ,WAAA,iBAEF,SP21FN,SOz1FQ,aAAA,iBAEF,SP21FN,SOz1FQ,cAAA,iBAEF,SP21FN,SOz1FQ,YAAA,iBAfF,QAAgC,OAAA,eAChC,SP82FN,SO52FQ,WAAA,eAEF,SP82FN,SO52FQ,aAAA,eAEF,SP82FN,SO52FQ,cAAA,eAEF,SP82FN,SO52FQ,YAAA,eAfF,QAAgC,QAAA,YAChC,SPi4FN,SO/3FQ,YAAA,YAEF,SPi4FN,SO/3FQ,cAAA,YAEF,SPi4FN,SO/3FQ,eAAA,YAEF,SPi4FN,SO/3FQ,aAAA,YAfF,QAAgC,QAAA,iBAChC,SPo5FN,SOl5FQ,YAAA,iBAEF,SPo5FN,SOl5FQ,cAAA,iBAEF,SPo5FN,SOl5FQ,eAAA,iBAEF,SPo5FN,SOl5FQ,aAAA,iBAfF,QAAgC,QAAA,gBAChC,SPu6FN,SOr6FQ,YAAA,gBAEF,SPu6FN,SOr6FQ,cAAA,gBAEF,SPu6FN,SOr6FQ,eAAA,gBAEF,SPu6FN,SOr6FQ,aAAA,gBAfF,QAAgC,QAAA,eAChC,SP07FN,SOx7FQ,YAAA,eAEF,SP07FN,SOx7FQ,cAAA,eAEF,SP07FN,SOx7FQ,eAAA,eAEF,SP07FN,SOx7FQ,aAAA,eAfF,QAAgC,QAAA,iBAChC,SP68FN,SO38FQ,YAAA,iBAEF,SP68FN,SO38FQ,cAAA,iBAEF,SP68FN,SO38FQ,eAAA,iBAEF,SP68FN,SO38FQ,aAAA,iBAfF,QAAgC,QAAA,eAChC,SPg+FN,SO99FQ,YAAA,eAEF,SPg+FN,SO99FQ,cAAA,eAEF,SPg+FN,SO99FQ,eAAA,eAEF,SPg+FN,SO99FQ,aAAA,eAQF,SAAwB,OAAA,kBACxB,UP49FN,UO19FQ,WAAA,kBAEF,UP49FN,UO19FQ,aAAA,kBAEF,UP49FN,UO19FQ,cAAA,kBAEF,UP49FN,UO19FQ,YAAA,kBAfF,SAAwB,OAAA,iBACxB,UP++FN,UO7+FQ,WAAA,iBAEF,UP++FN,UO7+FQ,aAAA,iBAEF,UP++FN,UO7+FQ,cAAA,iBAEF,UP++FN,UO7+FQ,YAAA,iBAfF,SAAwB,OAAA,gBACxB,UPkgGN,UOhgGQ,WAAA,gBAEF,UPkgGN,UOhgGQ,aAAA,gBAEF,UPkgGN,UOhgGQ,cAAA,gBAEF,UPkgGN,UOhgGQ,YAAA,gBAfF,SAAwB,OAAA,kBACxB,UPqhGN,UOnhGQ,WAAA,kBAEF,UPqhGN,UOnhGQ,aAAA,kBAEF,UPqhGN,UOnhGQ,cAAA,kBAEF,UPqhGN,UOnhGQ,YAAA,kBAfF,SAAwB,OAAA,gBACxB,UPwiGN,UOtiGQ,WAAA,gBAEF,UPwiGN,UOtiGQ,aAAA,gBAEF,UPwiGN,UOtiGQ,cAAA,gBAEF,UPwiGN,UOtiGQ,YAAA,gBAMN,WAAmB,OAAA,eACnB,YPsiGF,YOpiGI,WAAA,eAEF,YPsiGF,YOpiGI,aAAA,eAEF,YPsiGF,YOpiGI,cAAA,eAEF,YPsiGF,YOpiGI,YAAA,gBJTF,yBIlDI,QAAgC,OAAA,YAChC,SPwmGN,SOtmGQ,WAAA,YAEF,SPwmGN,SOtmGQ,aAAA,YAEF,SPwmGN,SOtmGQ,cAAA,YAEF,SPwmGN,SOtmGQ,YAAA,YAfF,QAAgC,OAAA,iBAChC,SP2nGN,SOznGQ,WAAA,iBAEF,SP2nGN,SOznGQ,aAAA,iBAEF,SP2nGN,SOznGQ,cAAA,iBAEF,SP2nGN,SOznGQ,YAAA,iBAfF,QAAgC,OAAA,gBAChC,SP8oGN,SO5oGQ,WAAA,gBAEF,SP8oGN,SO5oGQ,aAAA,gBAEF,SP8oGN,SO5oGQ,cAAA,gBAEF,SP8oGN,SO5oGQ,YAAA,gBAfF,QAAgC,OAAA,eAChC,SPiqGN,SO/pGQ,WAAA,eAEF,SPiqGN,SO/pGQ,aAAA,eAEF,SPiqGN,SO/pGQ,cAAA,eAEF,SPiqGN,SO/pGQ,YAAA,eAfF,QAAgC,OAAA,iBAChC,SPorGN,SOlrGQ,WAAA,iBAEF,SPorGN,SOlrGQ,aAAA,iBAEF,SPorGN,SOlrGQ,cAAA,iBAEF,SPorGN,SOlrGQ,YAAA,iBAfF,QAAgC,OAAA,eAChC,SPusGN,SOrsGQ,WAAA,eAEF,SPusGN,SOrsGQ,aAAA,eAEF,SPusGN,SOrsGQ,cAAA,eAEF,SPusGN,SOrsGQ,YAAA,eAfF,QAAgC,QAAA,YAChC,SP0tGN,SOxtGQ,YAAA,YAEF,SP0tGN,SOxtGQ,cAAA,YAEF,SP0tGN,SOxtGQ,eAAA,YAEF,SP0tGN,SOxtGQ,aAAA,YAfF,QAAgC,QAAA,iBAChC,SP6uGN,SO3uGQ,YAAA,iBAEF,SP6uGN,SO3uGQ,cAAA,iBAEF,SP6uGN,SO3uGQ,eAAA,iBAEF,SP6uGN,SO3uGQ,aAAA,iBAfF,QAAgC,QAAA,gBAChC,SPgwGN,SO9vGQ,YAAA,gBAEF,SPgwGN,SO9vGQ,cAAA,gBAEF,SPgwGN,SO9vGQ,eAAA,gBAEF,SPgwGN,SO9vGQ,aAAA,gBAfF,QAAgC,QAAA,eAChC,SPmxGN,SOjxGQ,YAAA,eAEF,SPmxGN,SOjxGQ,cAAA,eAEF,SPmxGN,SOjxGQ,eAAA,eAEF,SPmxGN,SOjxGQ,aAAA,eAfF,QAAgC,QAAA,iBAChC,SPsyGN,SOpyGQ,YAAA,iBAEF,SPsyGN,SOpyGQ,cAAA,iBAEF,SPsyGN,SOpyGQ,eAAA,iBAEF,SPsyGN,SOpyGQ,aAAA,iBAfF,QAAgC,QAAA,eAChC,SPyzGN,SOvzGQ,YAAA,eAEF,SPyzGN,SOvzGQ,cAAA,eAEF,SPyzGN,SOvzGQ,eAAA,eAEF,SPyzGN,SOvzGQ,aAAA,eAQF,SAAwB,OAAA,kBACxB,UPqzGN,UOnzGQ,WAAA,kBAEF,UPqzGN,UOnzGQ,aAAA,kBAEF,UPqzGN,UOnzGQ,cAAA,kBAEF,UPqzGN,UOnzGQ,YAAA,kBAfF,SAAwB,OAAA,iBACxB,UPw0GN,UOt0GQ,WAAA,iBAEF,UPw0GN,UOt0GQ,aAAA,iBAEF,UPw0GN,UOt0GQ,cAAA,iBAEF,UPw0GN,UOt0GQ,YAAA,iBAfF,SAAwB,OAAA,gBACxB,UP21GN,UOz1GQ,WAAA,gBAEF,UP21GN,UOz1GQ,aAAA,gBAEF,UP21GN,UOz1GQ,cAAA,gBAEF,UP21GN,UOz1GQ,YAAA,gBAfF,SAAwB,OAAA,kBACxB,UP82GN,UO52GQ,WAAA,kBAEF,UP82GN,UO52GQ,aAAA,kBAEF,UP82GN,UO52GQ,cAAA,kBAEF,UP82GN,UO52GQ,YAAA,kBAfF,SAAwB,OAAA,gBACxB,UPi4GN,UO/3GQ,WAAA,gBAEF,UPi4GN,UO/3GQ,aAAA,gBAEF,UPi4GN,UO/3GQ,cAAA,gBAEF,UPi4GN,UO/3GQ,YAAA,gBAMN,WAAmB,OAAA,eACnB,YP+3GF,YO73GI,WAAA,eAEF,YP+3GF,YO73GI,aAAA,eAEF,YP+3GF,YO73GI,cAAA,eAEF,YP+3GF,YO73GI,YAAA,gBJTF,0BIlDI,QAAgC,OAAA,YAChC,SPi8GN,SO/7GQ,WAAA,YAEF,SPi8GN,SO/7GQ,aAAA,YAEF,SPi8GN,SO/7GQ,cAAA,YAEF,SPi8GN,SO/7GQ,YAAA,YAfF,QAAgC,OAAA,iBAChC,SPo9GN,SOl9GQ,WAAA,iBAEF,SPo9GN,SOl9GQ,aAAA,iBAEF,SPo9GN,SOl9GQ,cAAA,iBAEF,SPo9GN,SOl9GQ,YAAA,iBAfF,QAAgC,OAAA,gBAChC,SPu+GN,SOr+GQ,WAAA,gBAEF,SPu+GN,SOr+GQ,aAAA,gBAEF,SPu+GN,SOr+GQ,cAAA,gBAEF,SPu+GN,SOr+GQ,YAAA,gBAfF,QAAgC,OAAA,eAChC,SP0/GN,SOx/GQ,WAAA,eAEF,SP0/GN,SOx/GQ,aAAA,eAEF,SP0/GN,SOx/GQ,cAAA,eAEF,SP0/GN,SOx/GQ,YAAA,eAfF,QAAgC,OAAA,iBAChC,SP6gHN,SO3gHQ,WAAA,iBAEF,SP6gHN,SO3gHQ,aAAA,iBAEF,SP6gHN,SO3gHQ,cAAA,iBAEF,SP6gHN,SO3gHQ,YAAA,iBAfF,QAAgC,OAAA,eAChC,SPgiHN,SO9hHQ,WAAA,eAEF,SPgiHN,SO9hHQ,aAAA,eAEF,SPgiHN,SO9hHQ,cAAA,eAEF,SPgiHN,SO9hHQ,YAAA,eAfF,QAAgC,QAAA,YAChC,SPmjHN,SOjjHQ,YAAA,YAEF,SPmjHN,SOjjHQ,cAAA,YAEF,SPmjHN,SOjjHQ,eAAA,YAEF,SPmjHN,SOjjHQ,aAAA,YAfF,QAAgC,QAAA,iBAChC,SPskHN,SOpkHQ,YAAA,iBAEF,SPskHN,SOpkHQ,cAAA,iBAEF,SPskHN,SOpkHQ,eAAA,iBAEF,SPskHN,SOpkHQ,aAAA,iBAfF,QAAgC,QAAA,gBAChC,SPylHN,SOvlHQ,YAAA,gBAEF,SPylHN,SOvlHQ,cAAA,gBAEF,SPylHN,SOvlHQ,eAAA,gBAEF,SPylHN,SOvlHQ,aAAA,gBAfF,QAAgC,QAAA,eAChC,SP4mHN,SO1mHQ,YAAA,eAEF,SP4mHN,SO1mHQ,cAAA,eAEF,SP4mHN,SO1mHQ,eAAA,eAEF,SP4mHN,SO1mHQ,aAAA,eAfF,QAAgC,QAAA,iBAChC,SP+nHN,SO7nHQ,YAAA,iBAEF,SP+nHN,SO7nHQ,cAAA,iBAEF,SP+nHN,SO7nHQ,eAAA,iBAEF,SP+nHN,SO7nHQ,aAAA,iBAfF,QAAgC,QAAA,eAChC,SPkpHN,SOhpHQ,YAAA,eAEF,SPkpHN,SOhpHQ,cAAA,eAEF,SPkpHN,SOhpHQ,eAAA,eAEF,SPkpHN,SOhpHQ,aAAA,eAQF,SAAwB,OAAA,kBACxB,UP8oHN,UO5oHQ,WAAA,kBAEF,UP8oHN,UO5oHQ,aAAA,kBAEF,UP8oHN,UO5oHQ,cAAA,kBAEF,UP8oHN,UO5oHQ,YAAA,kBAfF,SAAwB,OAAA,iBACxB,UPiqHN,UO/pHQ,WAAA,iBAEF,UPiqHN,UO/pHQ,aAAA,iBAEF,UPiqHN,UO/pHQ,cAAA,iBAEF,UPiqHN,UO/pHQ,YAAA,iBAfF,SAAwB,OAAA,gBACxB,UPorHN,UOlrHQ,WAAA,gBAEF,UPorHN,UOlrHQ,aAAA,gBAEF,UPorHN,UOlrHQ,cAAA,gBAEF,UPorHN,UOlrHQ,YAAA,gBAfF,SAAwB,OAAA,kBACxB,UPusHN,UOrsHQ,WAAA,kBAEF,UPusHN,UOrsHQ,aAAA,kBAEF,UPusHN,UOrsHQ,cAAA,kBAEF,UPusHN,UOrsHQ,YAAA,kBAfF,SAAwB,OAAA,gBACxB,UP0tHN,UOxtHQ,WAAA,gBAEF,UP0tHN,UOxtHQ,aAAA,gBAEF,UP0tHN,UOxtHQ,cAAA,gBAEF,UP0tHN,UOxtHQ,YAAA,gBAMN,WAAmB,OAAA,eACnB,YPwtHF,YOttHI,WAAA,eAEF,YPwtHF,YOttHI,aAAA,eAEF,YPwtHF,YOttHI,cAAA,eAEF,YPwtHF,YOttHI,YAAA","sourcesContent":["/*!\n * Bootstrap Grid v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/deprecate\";\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/display\";\n@import \"utilities/flex\";\n@import \"utilities/spacing\";\n","/*!\n * Bootstrap Grid v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n -ms-flex-order: -1;\n order: -1;\n}\n\n.order-last {\n -ms-flex-order: 13;\n order: 13;\n}\n\n.order-0 {\n -ms-flex-order: 0;\n order: 0;\n}\n\n.order-1 {\n -ms-flex-order: 1;\n order: 1;\n}\n\n.order-2 {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.order-3 {\n -ms-flex-order: 3;\n order: 3;\n}\n\n.order-4 {\n -ms-flex-order: 4;\n order: 4;\n}\n\n.order-5 {\n -ms-flex-order: 5;\n order: 5;\n}\n\n.order-6 {\n -ms-flex-order: 6;\n order: 6;\n}\n\n.order-7 {\n -ms-flex-order: 7;\n order: 7;\n}\n\n.order-8 {\n -ms-flex-order: 8;\n order: 8;\n}\n\n.order-9 {\n -ms-flex-order: 9;\n order: 9;\n}\n\n.order-10 {\n -ms-flex-order: 10;\n order: 10;\n}\n\n.order-11 {\n -ms-flex-order: 11;\n order: 11;\n}\n\n.order-12 {\n -ms-flex-order: 12;\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-sm-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-sm-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-sm-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-sm-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-sm-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-sm-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-sm-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-sm-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-sm-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-sm-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-sm-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-sm-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-sm-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-sm-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-md-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-md-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-md-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-md-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-md-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-md-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-md-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-md-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-md-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-md-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-md-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-md-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-md-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-md-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-lg-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-lg-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-lg-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-lg-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-lg-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-lg-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-lg-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-lg-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-lg-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-lg-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-lg-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-lg-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-lg-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-lg-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-xl-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-xl-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-xl-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-xl-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-xl-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-xl-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-xl-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-xl-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-xl-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-xl-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-xl-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-xl-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-xl-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-xl-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n}\n\n.d-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-md-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-print-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n.flex-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n}\n\n.flex-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n}\n\n.justify-content-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n}\n\n.align-items-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n}\n\n.align-items-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n}\n\n.align-items-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n}\n\n.align-items-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n}\n\n.align-content-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n}\n\n.align-content-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n}\n\n.align-content-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n}\n\n.align-content-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n}\n\n.align-content-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n}\n\n.align-self-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n}\n\n.align-self-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n}\n\n.align-self-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n}\n\n.align-self-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n}\n\n.align-self-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-sm-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-sm-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-sm-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-sm-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-sm-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-sm-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-sm-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-sm-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-md-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-md-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-md-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-md-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-md-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-md-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-md-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-md-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-md-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-md-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-md-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-md-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-md-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-md-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-md-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-md-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-lg-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-lg-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-lg-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-lg-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-lg-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-lg-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-lg-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-lg-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-xl-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-xl-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-xl-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-xl-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-xl-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-xl-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-xl-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-xl-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n @include deprecate(\"The `make-container-max-widths` mixin\", \"v4.5.2\", \"v5\");\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @if $columns > 0 {\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n }\n\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n @if $columns > 0 {\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $value in $displays {\n .d#{$infix}-#{$value} { display: $value !important; }\n }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n @each $value in $displays {\n .d-print-#{$value} { display: $value !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)\n @each $size, $length in $spacers {\n @if $size != 0 {\n .m#{$infix}-n#{$size} { margin: -$length !important; }\n .mt#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-top: -$length !important;\n }\n .mr#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-right: -$length !important;\n }\n .mb#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-bottom: -$length !important;\n }\n .ml#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-left: -$length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n"]} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css index 4c642187d..604149678 100644 --- a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css +++ b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css @@ -1,7 +1,7 @@ /*! - * Bootstrap Reboot v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors - * Copyright 2011-2020 Twitter, Inc. + * Bootstrap Reboot v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */ @@ -24,7 +24,7 @@ article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { body { margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 1rem; font-weight: 400; line-height: 1.5; @@ -198,9 +198,8 @@ button { border-radius: 0; } -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; +button:focus:not(:focus-visible) { + outline: 0; } input, diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css.map index e79cab0cf..42a71d215 100644 --- a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css.map +++ b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css.map @@ -1 +1 @@ -{"version":3,"sources":["../../scss/bootstrap-reboot.scss","bootstrap-reboot.css","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/vendor/_rfs.scss","../../scss/mixins/_hover.scss"],"names":[],"mappings":"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","file":"bootstrap-reboot.css","sourcesContent":["/*!\n * Bootstrap Reboot v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","/*!\n * Bootstrap Reboot v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `<th>` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n // making it impossible to interact with the content\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n$grid-row-columns: 6 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n$table-th-font-weight: null !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n$custom-control-cursor: null !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-label-color: null !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: null !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: null !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/></svg>\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'><path stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/></svg>\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: null !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'><circle r='3' fill='#{$custom-control-indicator-checked-color}'/></svg>\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'><path fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>\") !default;\n$custom-select-background: escape-svg($custom-select-indicator) no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}' viewBox='0 0 12 12'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n\n$form-validation-states: () !default;\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-font-size: null !default;\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n$user-selects: all, auto, none !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../scss/bootstrap-reboot.scss","bootstrap-reboot.css","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/vendor/_rfs.scss","../../scss/mixins/_hover.scss"],"names":[],"mappings":"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","file":"bootstrap-reboot.css","sourcesContent":["/*!\n * Bootstrap Reboot v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","/*!\n * Bootstrap Reboot v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `<th>` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n // making it impossible to interact with the content\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n$grid-row-columns: 6 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n$table-th-font-weight: null !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n$custom-control-cursor: null !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-label-color: null !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: null !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: null !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/></svg>\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'><path stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/></svg>\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: null !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'><circle r='3' fill='#{$custom-control-indicator-checked-color}'/></svg>\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'><path fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>\") !default;\n$custom-select-background: escape-svg($custom-select-indicator) right $custom-select-padding-x center / $custom-select-bg-size no-repeat !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}' viewBox='0 0 12 12'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n\n$form-validation-states: () !default;\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-nav-scroll-max-height: 75vh !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-font-size: null !default;\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n$user-selects: all, auto, none !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n"]} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css index 04512ed53..83c70bba6 100644 --- a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css +++ b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css @@ -1,8 +1,8 @@ /*! - * Bootstrap Reboot v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors - * Copyright 2011-2020 Twitter, Inc. + * Bootstrap Reboot v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) - */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important} + */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important} /*# sourceMappingURL=bootstrap-reboot.min.css.map */ \ No newline at end of file diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css.map index bfaee258d..72ec346d0 100644 --- a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css.map +++ b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css.map @@ -1 +1 @@ -{"version":3,"sources":["../../scss/bootstrap-reboot.scss","../../scss/_reboot.scss","dist/css/bootstrap-reboot.css","../../scss/vendor/_rfs.scss","bootstrap-reboot.css","../../scss/mixins/_hover.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap Reboot v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `<th>` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n // making it impossible to interact with the content\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap Reboot v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","/*!\n * Bootstrap Reboot v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../scss/bootstrap-reboot.scss","../../scss/_reboot.scss","dist/css/bootstrap-reboot.css","../../scss/vendor/_rfs.scss","bootstrap-reboot.css","../../scss/mixins/_hover.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap Reboot v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `<th>` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n // making it impossible to interact with the content\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap Reboot v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","/*!\n * Bootstrap Reboot v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n"]} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap.css b/vendor/twbs/bootstrap/dist/css/bootstrap.css index a3171bef4..2282e0a06 100644 --- a/vendor/twbs/bootstrap/dist/css/bootstrap.css +++ b/vendor/twbs/bootstrap/dist/css/bootstrap.css @@ -1,7 +1,7 @@ /*! - * Bootstrap v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors - * Copyright 2011-2020 Twitter, Inc. + * Bootstrap v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ :root { @@ -31,7 +31,7 @@ --breakpoint-md: 768px; --breakpoint-lg: 992px; --breakpoint-xl: 1200px; - --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } @@ -54,7 +54,7 @@ article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { body { margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 1rem; font-weight: 400; line-height: 1.5; @@ -228,9 +228,8 @@ button { border-radius: 0; } -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; +button:focus:not(:focus-visible) { + outline: 0; } input, @@ -2241,6 +2240,11 @@ textarea.form-control { border-radius: 0.25rem; } +.form-row > .col > .valid-tooltip, +.form-row > [class*="col-"] > .valid-tooltip { + left: 5px; +} + .was-validated :valid ~ .valid-feedback, .was-validated :valid ~ .valid-tooltip, .is-valid ~ .valid-feedback, @@ -2270,7 +2274,7 @@ textarea.form-control { .was-validated .custom-select:valid, .custom-select.is-valid { border-color: #28a745; padding-right: calc(0.75em + 2.3125rem); - background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat; } .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { @@ -2342,6 +2346,11 @@ textarea.form-control { border-radius: 0.25rem; } +.form-row > .col > .invalid-tooltip, +.form-row > [class*="col-"] > .invalid-tooltip { + left: 5px; +} + .was-validated :invalid ~ .invalid-feedback, .was-validated :invalid ~ .invalid-tooltip, .is-invalid ~ .invalid-feedback, @@ -2371,7 +2380,7 @@ textarea.form-control { .was-validated .custom-select:invalid, .custom-select.is-invalid { border-color: #dc3545; padding-right: calc(0.75em + 2.3125rem); - background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat; } .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { @@ -3388,7 +3397,7 @@ input[type="button"].btn-block { .dropdown-item:hover, .dropdown-item:focus { color: #16181b; text-decoration: none; - background-color: #f8f9fa; + background-color: #e9ecef; } .dropdown-item.active, .dropdown-item:active { @@ -3398,7 +3407,7 @@ input[type="button"].btn-block { } .dropdown-item.disabled, .dropdown-item:disabled { - color: #6c757d; + color: #adb5bd; pointer-events: none; background-color: transparent; } @@ -3597,12 +3606,6 @@ input[type="button"].btn-block { z-index: 4; } -.input-group > .form-control:not(:last-child), -.input-group > .custom-select:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - .input-group > .form-control:not(:first-child), .input-group > .custom-select:not(:first-child) { border-top-left-radius: 0; @@ -3617,14 +3620,23 @@ input[type="button"].btn-block { } .input-group > .custom-file:not(:last-child) .custom-file-label, -.input-group > .custom-file:not(:last-child) .custom-file-label::after { +.input-group > .custom-file:not(:first-child) .custom-file-label { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group:not(.has-validation) > .form-control:not(:last-child), +.input-group:not(.has-validation) > .custom-select:not(:last-child), +.input-group:not(.has-validation) > .custom-file:not(:last-child) .custom-file-label::after { border-top-right-radius: 0; border-bottom-right-radius: 0; } -.input-group > .custom-file:not(:first-child) .custom-file-label { - border-top-left-radius: 0; - border-bottom-left-radius: 0; +.input-group.has-validation > .form-control:nth-last-child(n + 3), +.input-group.has-validation > .custom-select:nth-last-child(n + 3), +.input-group.has-validation > .custom-file:nth-last-child(n + 3) .custom-file-label::after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } .input-group-prepend, @@ -3727,8 +3739,10 @@ input[type="button"].btn-block { .input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .input-group-text, -.input-group > .input-group-append:not(:last-child) > .btn, -.input-group > .input-group-append:not(:last-child) > .input-group-text, +.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn, +.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text, +.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn, +.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text, .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { border-top-right-radius: 0; @@ -3825,7 +3839,7 @@ input[type="button"].btn-block { width: 1rem; height: 1rem; content: ""; - background: no-repeat 50% / 50% 50%; + background: 50% / 50% 50% no-repeat; } .custom-checkbox .custom-control-label::before { @@ -3914,7 +3928,7 @@ input[type="button"].btn-block { line-height: 1.5; color: #495057; vertical-align: middle; - background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; + background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat; border: 1px solid #ced4da; border-radius: 0.25rem; -webkit-appearance: none; @@ -3983,6 +3997,7 @@ input[type="button"].btn-block { width: 100%; height: calc(1.5em + 0.75rem + 2px); margin: 0; + overflow: hidden; opacity: 0; } @@ -4012,6 +4027,7 @@ input[type="button"].btn-block { z-index: 1; height: calc(1.5em + 0.75rem + 2px); padding: 0.375rem 0.75rem; + overflow: hidden; font-weight: 400; line-height: 1.5; color: #495057; @@ -4048,7 +4064,7 @@ input[type="button"].btn-block { } .custom-range:focus { - outline: none; + outline: 0; } .custom-range:focus::-webkit-slider-thumb { @@ -4243,11 +4259,8 @@ input[type="button"].btn-block { border-bottom: 1px solid #dee2e6; } -.nav-tabs .nav-item { - margin-bottom: -1px; -} - .nav-tabs .nav-link { + margin-bottom: -1px; border: 1px solid transparent; border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; @@ -4403,8 +4416,12 @@ input[type="button"].btn-block { height: 1.5em; vertical-align: middle; content: ""; - background: no-repeat center center; - background-size: 100% 100%; + background: 50% / 100% 100% no-repeat; +} + +.navbar-nav-scroll { + max-height: 75vh; + overflow-y: auto; } @media (max-width: 575.98px) { @@ -4438,6 +4455,9 @@ input[type="button"].btn-block { -ms-flex-wrap: nowrap; flex-wrap: nowrap; } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } .navbar-expand-sm .navbar-collapse { display: -ms-flexbox !important; display: flex !important; @@ -4480,6 +4500,9 @@ input[type="button"].btn-block { -ms-flex-wrap: nowrap; flex-wrap: nowrap; } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } .navbar-expand-md .navbar-collapse { display: -ms-flexbox !important; display: flex !important; @@ -4522,6 +4545,9 @@ input[type="button"].btn-block { -ms-flex-wrap: nowrap; flex-wrap: nowrap; } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } .navbar-expand-lg .navbar-collapse { display: -ms-flexbox !important; display: flex !important; @@ -4564,6 +4590,9 @@ input[type="button"].btn-block { -ms-flex-wrap: nowrap; flex-wrap: nowrap; } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } .navbar-expand-xl .navbar-collapse { display: -ms-flexbox !important; display: flex !important; @@ -4608,6 +4637,10 @@ input[type="button"].btn-block { flex-wrap: nowrap; } +.navbar-expand .navbar-nav-scroll { + overflow: visible; +} + .navbar-expand .navbar-collapse { display: -ms-flexbox !important; display: flex !important; @@ -4972,17 +5005,12 @@ input[type="button"].btn-block { border-radius: 0.25rem; } -.breadcrumb-item { - display: -ms-flexbox; - display: flex; -} - .breadcrumb-item + .breadcrumb-item { padding-left: 0.5rem; } .breadcrumb-item + .breadcrumb-item::before { - display: inline-block; + float: left; padding-right: 0.5rem; color: #6c757d; content: "/"; @@ -5465,8 +5493,8 @@ a.badge-dark:focus, a.badge-dark.focus { } .progress-bar-animated { - -webkit-animation: progress-bar-stripes 1s linear infinite; - animation: progress-bar-stripes 1s linear infinite; + -webkit-animation: 1s linear infinite progress-bar-stripes; + animation: 1s linear infinite progress-bar-stripes; } @media (prefers-reduced-motion: reduce) { @@ -6145,7 +6173,7 @@ a.close.disabled { z-index: 1070; display: block; margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-style: normal; font-weight: 400; line-height: 1.5; @@ -6258,7 +6286,7 @@ a.close.disabled { z-index: 1060; display: block; max-width: 276px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-style: normal; font-weight: 400; line-height: 1.5; @@ -6546,7 +6574,7 @@ a.close.disabled { display: inline-block; width: 20px; height: 20px; - background: no-repeat 50% / 100% 100%; + background: 50% / 100% 100% no-repeat; } .carousel-control-prev-icon { @@ -6635,8 +6663,8 @@ a.close.disabled { border: 0.25em solid currentColor; border-right-color: transparent; border-radius: 50%; - -webkit-animation: spinner-border .75s linear infinite; - animation: spinner-border .75s linear infinite; + -webkit-animation: .75s linear infinite spinner-border; + animation: .75s linear infinite spinner-border; } .spinner-border-sm { @@ -6677,8 +6705,8 @@ a.close.disabled { background-color: currentColor; border-radius: 50%; opacity: 0; - -webkit-animation: spinner-grow .75s linear infinite; - animation: spinner-grow .75s linear infinite; + -webkit-animation: .75s linear infinite spinner-grow; + animation: .75s linear infinite spinner-grow; } .spinner-grow-sm { @@ -6686,6 +6714,14 @@ a.close.disabled { height: 1rem; } +@media (prefers-reduced-motion: reduce) { + .spinner-border, + .spinner-grow { + -webkit-animation-duration: 1.5s; + animation-duration: 1.5s; + } +} + .align-baseline { vertical-align: baseline !important; } @@ -7954,7 +7990,6 @@ button.bg-dark:focus { .user-select-all { -webkit-user-select: all !important; -moz-user-select: all !important; - -ms-user-select: all !important; user-select: all !important; } diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap.css.map index 549dbb45e..e6e765662 100644 --- a/vendor/twbs/bootstrap/dist/css/bootstrap.css.map +++ b/vendor/twbs/bootstrap/dist/css/bootstrap.css.map @@ -1 +1 @@ -{"version":3,"sources":["../../scss/bootstrap.scss","bootstrap.css","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/vendor/_rfs.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_functions.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/utilities/_interactions.scss","../../scss/utilities/_overflow.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_stretched-link.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/_print.scss"],"names":[],"mappings":"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FnH1B;;AAEA;EEyHE,wBAAwB;AFvH1B;;AE+HA;EACE,aAAa;EACb,0BAA0B;AF5H5B;;AEmIA;EACE,qBAAqB;AFhIvB;;AEmIA;EACE,kBAAkB;EAClB,eAAe;AFhIjB;;AEmIA;EACE,aAAa;AFhIf;;AAEA;EEoIE,wBAAwB;AFlI1B;;AM1VA;;EAEE,qBHqSuC;EGnSvC,gBHqS+B;EGpS/B,gBHqS+B;AHuDjC;;AMxVA;EFgHM,iBAtCY;AJkRlB;;AM3VA;EF+GM,eAtCY;AJsRlB;;AM9VA;EF8GM,kBAtCY;AJ0RlB;;AMjWA;EF6GM,iBAtCY;AJ8RlB;;AMpWA;EF4GM,kBAtCY;AJkSlB;;AMvWA;EF2GM,eAtCY;AJsSlB;;AMzWA;EFyGM,kBAtCY;EEjEhB,gBHuS+B;AHqEjC;;AMxWA;EFmGM,eAtCY;EE3DhB,gBH0R+B;EGzR/B,gBHiR+B;AH0FjC;;AMzWA;EF8FM,iBAtCY;EEtDhB,gBHsR+B;EGrR/B,gBH4Q+B;AHgGjC;;AM1WA;EFyFM,iBAtCY;EEjDhB,gBHkR+B;EGjR/B,gBHuQ+B;AHsGjC;;AM3WA;EFoFM,iBAtCY;EE5ChB,gBH8Q+B;EG7Q/B,gBHkQ+B;AH4GjC;;AEjVA;EIpBE,gBHgFW;EG/EX,mBH+EW;EG9EX,SAAS;EACT,wCHzCa;AHkZf;;AMjWA;;EFMI,cAAW;EEHb,gBH0N+B;AH0IjC;;AMjWA;;EAEE,cHkQgC;EGjQhC,yBH0QmC;AH0FrC;;AM5VA;EC/EE,eAAe;EACf,gBAAgB;AP+alB;;AM5VA;ECpFE,eAAe;EACf,gBAAgB;APoblB;;AM9VA;EACE,qBAAqB;ANiWvB;;AMlWA;EAII,oBHoP+B;AH8GnC;;AMxVA;EFjCI,cAAW;EEmCb,yBAAyB;AN2V3B;;AMvVA;EACE,mBHuBW;ECRP,kBAtCY;AJkXlB;;AMvVA;EACE,cAAc;EF7CZ,cAAW;EE+Cb,cH1GgB;AHoclB;;AM7VA;EAMI,qBAAqB;AN2VzB;;AQ9cA;ECIE,eAAe;EAGf,YAAY;AT4cd;;AQ7cA;EACE,gBL+/BwC;EK9/BxC,sBLRa;EKSb,yBLNgB;EOQd,sBP6NgC;EMpOlC,eAAe;EAGf,YAAY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EahIX,cbSgB;AHy7ClB;;AgBr8CA;;EAQI,gBbkVgC;EajVhC,mBAAmB;EACnB,6BbJc;AHs8ClB;;AgB58CA;EAcI,sBAAsB;EACtB,gCbTc;AH28ClB;;AgBj9CA;EAmBI,6Bbbc;AH+8ClB;;AgBz7CA;;EAGI,eb4T+B;AH+nCnC;;AgBl7CA;EACE,yBbnCgB;AHw9ClB;;AgBt7CA;;EAKI,yBbvCc;AH69ClB;;AgB37CA;;EAWM,wBAA4C;AhBq7ClD;;AgBh7CA;;;;EAKI,SAAS;AhBk7Cb;;AgB16CA;EAEI,qCb1DW;AHs+Cf;;AK3+CE;EW2EI,cbvEY;EawEZ,sCbvES;AH2+Cf;;AiBv/CE;;;EAII,yBCgG4D;AlBy5ClE;;AiB7/CE;;;;EAYM,qBCwF0D;AlBg6ClE;;AK7/CE;EYiBM,yBAJsC;AjBo/C9C;;AiBr/CE;;EASQ,yBARoC;AjBy/C9C;;AiB7gDE;;;EAII,yBCgG4D;AlB+6ClE;;AiBnhDE;;;;EAYM,qBCwF0D;AlBs7ClE;;AKnhDE;EYiBM,yBAJsC;AjB0gD9C;;AiB3gDE;;EASQ,yBARoC;AjB+gD9C;;AiBniDE;;;EAII,yBCgG4D;AlBq8ClE;;AiBziDE;;;;EAYM,qBCwF0D;AlB48ClE;;AKziDE;EYiBM,yBAJsC;AjBgiD9C;;AiBjiDE;;EASQ,yBARoC;AjBqiD9C;;AiBzjDE;;;EAII,yBCgG4D;AlB29ClE;;AiB/jDE;;;;EAYM,qBCwF0D;AlBk+ClE;;AK/jDE;EYiBM,yBAJsC;AjBsjD9C;;AiBvjDE;;EASQ,yBARoC;AjB2jD9C;;AiB/kDE;;;EAII,yBCgG4D;AlBi/ClE;;AiBrlDE;;;;EAYM,qBCwF0D;AlBw/ClE;;AKrlDE;EYiBM,yBAJsC;AjB4kD9C;;AiB7kDE;;EASQ,yBARoC;AjBilD9C;;AiBrmDE;;;EAII,yBCgG4D;AlBugDlE;;AiB3mDE;;;;EAYM,qBCwF0D;AlB8gDlE;;AK3mDE;EYiBM,yBAJsC;AjBkmD9C;;AiBnmDE;;EASQ,yBARoC;AjBumD9C;;AiB3nDE;;;EAII,yBCgG4D;AlB6hDlE;;AiBjoDE;;;;EAYM,qBCwF0D;AlBoiDlE;;AKjoDE;EYiBM,yBAJsC;AjBwnD9C;;AiBznDE;;EASQ,yBARoC;AjB6nD9C;;AiBjpDE;;;EAII,yBCgG4D;AlBmjDlE;;AiBvpDE;;;;EAYM,qBCwF0D;AlB0jDlE;;AKvpDE;EYiBM,yBAJsC;AjB8oD9C;;AiB/oDE;;EASQ,yBARoC;AjBmpD9C;;AiBvqDE;;;EAII,sCdQS;AHiqDf;;AKtqDE;EYiBM,sCAJsC;AjB6pD9C;;AiB9pDE;;EASQ,sCARoC;AjBkqD9C;;AgB5kDA;EAGM,Wb3GS;Ea4GT,yBbpGY;EaqGZ,qBbgQqD;AH60C3D;;AgBllDA;EAWM,cb5GY;Ea6GZ,yBblHY;EamHZ,qBblHY;AH6rDlB;;AgBtkDA;EACE,Wb3Ha;Ea4Hb,yBbpHgB;AH6rDlB;;AgB3kDA;;;EAOI,qBb4OuD;AH81C3D;;AgBjlDA;EAWI,SAAS;AhB0kDb;;AgBrlDA;EAgBM,2Cb1IS;AHmtDf;;AK9sDE;EW4IM,WbjJO;EakJP,4CblJO;AHwtDf;;ActpDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhBwjDvC;EgB7jDG;IASK,SAAS;EhBujDjB;AACF;;AclqDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhBokDvC;EgBzkDG;IASK,SAAS;EhBmkDjB;AACF;;Ac9qDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhBglDvC;EgBrlDG;IASK,SAAS;EhB+kDjB;AACF;;Ac1rDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhB4lDvC;EgBjmDG;IASK,SAAS;EhB2lDjB;AACF;;AgB1mDA;EAOQ,cAAc;EACd,WAAW;EACX,gBAAgB;EAChB,iCAAiC;AhBumDzC;;AgBjnDA;EAcU,SAAS;AhBumDnB;;AmBpxDA;EACE,cAAc;EACd,WAAW;EACX,mCDiH8D;EChH9D,yBhByXkC;ECpQ9B,eAtCY;Ee5EhB,gBhBkR+B;EgBjR/B,gBhBsR+B;EgBrR/B,chBDgB;EgBEhB,sBhBTa;EgBUb,4BAA4B;EAC5B,yBhBPgB;EOOd,sBP6NgC;EiB/N9B,wEjBue4F;AHmzClG;;AoBtxDM;EDdN;ICeQ,gBAAgB;EpB0xDtB;AACF;;AmB1yDA;EAsBI,6BAA6B;EAC7B,SAAS;AnBwxDb;;AmB/yDA;EA4BI,kBAAkB;EAClB,0BhBrBc;AH4yDlB;;AqB7yDE;EACE,clBAc;EkBCd,sBlBRW;EkBSX,qBlBqdsE;EkBpdtE,UAAU;EAKR,gDlBaW;AH+xDjB;;AmB5zDA;EAqCI,chB9Bc;EgBgCd,UAAU;AnB0xDd;;AmBj0DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnB0xDd;;AmBj0DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnB0xDd;;AmBj0DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnB0xDd;;AmBj0DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnB0xDd;;AmBj0DA;EAiDI,yBhB9Cc;EgBgDd,UAAU;AnBmxDd;;AmB/wDA;;;;EAKI,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;AnBixDpB;;AmB7wDA;EAOI,chB/Dc;EgBgEd,sBhBvEW;AHi1Df;;AmBrwDA;;EAEE,cAAc;EACd,WAAW;AnBwwDb;;AmB9vDA;EACE,iCDyB8D;ECxB9D,oCDwB8D;ECvB9D,gBAAgB;Ef3Bd,kBAAW;Ee6Bb,gBhB+L+B;AHkkDjC;;AmB9vDA;EACE,+BDiB8D;EChB9D,kCDgB8D;EdK1D,kBAtCY;EemBhB,gBhB6H+B;AHooDjC;;AmB9vDA;EACE,gCDU8D;ECT9D,mCDS8D;EdK1D,mBAtCY;Ee0BhB,gBhBuH+B;AH0oDjC;;AmBxvDA;EACE,cAAc;EACd,WAAW;EACX,mBAA2B;EAC3B,gBAAgB;EfDZ,eAtCY;EeyChB,gBhBkK+B;EgBjK/B,chBnHgB;EgBoHhB,6BAA6B;EAC7B,yBAAyB;EACzB,mBAAmC;AnB2vDrC;;AmBrwDA;EAcI,gBAAgB;EAChB,eAAe;AnB2vDnB;;AmB/uDA;EACE,kCD9B8D;EC+B9D,uBhBoPiC;EC9Q7B,mBAtCY;EekEhB,gBhB+E+B;EOxN7B,qBP+N+B;AH6pDnC;;AmB/uDA;EACE,gCDtC8D;ECuC9D,oBhBiPgC;ECnR5B,kBAtCY;Ee0EhB,gBhBsE+B;EOvN7B,qBP8N+B;AHsqDnC;;AmB9uDA;EAGI,YAAY;AnB+uDhB;;AmB3uDA;EACE,YAAY;AnB8uDd;;AmBtuDA;EACE,mBhB0U0C;AH+5C5C;;AmBtuDA;EACE,cAAc;EACd,mBhB2T4C;AH86C9C;;AmBjuDA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,kBAA0C;EAC1C,iBAAyC;AnBouD3C;;AmBxuDA;;EAQI,kBAA0C;EAC1C,iBAAyC;AnBquD7C;;AmB5tDA;EACE,kBAAkB;EAClB,cAAc;EACd,qBhBgS6C;AH+7C/C;;AmB5tDA;EACE,kBAAkB;EAClB,kBhB4R2C;EgB3R3C,qBhB0R6C;AHq8C/C;;AmBluDA;;EAQI,chBzNc;AHw7DlB;;AmB3tDA;EACE,gBAAgB;AnB8tDlB;;AmB3tDA;EACE,2BAAoB;EAApB,oBAAoB;EACpB,sBAAmB;EAAnB,mBAAmB;EACnB,eAAe;EACf,qBhB6Q4C;AHi9C9C;;AmBluDA;EAQI,gBAAgB;EAChB,aAAa;EACb,uBhBwQ4C;EgBvQ5C,cAAc;AnB8tDlB;;AqB36DE;EACE,aAAa;EACb,WAAW;EACX,mBlB0c0C;ECjb1C,cAAW;EiBvBX,clBPa;AHq7DjB;;AqB36DE;EACE,kBAAkB;EAClB,SAAS;EACT,OAAO;EACP,UAAU;EACV,aAAa;EACb,eAAe;EACf,uBlBgyBqC;EkB/xBrC,iBAAiB;EjBmEf,mBAtCY;EiB3Bd,gBlBsO6B;EkBrO7B,WlBxDW;EkByDX,wClBtBa;EOxBb,sBP6NgC;AHgwDpC;;AqB/8DI;;;;EAuCE,cAAc;ArB+6DpB;;AqBt9DI;EA6CE,qBlBnCW;EkBsCT,oCH0CwD;EGzCxD,iRHpB0E;EGqB1E,4BAA4B;EAC5B,2DAA6D;EAC7D,gEHsCwD;AlBq4DhE;;AqB/9DI;EAwDI,qBlB9CS;EkB+CT,gDlB/CS;AH09DjB;;AqBp+DI;EAkEI,oCHwBwD;EGvBxD,kFHuBwD;AlB+4DhE;;AqBz+DI;EA0EE,qBlBhEW;EkBmET,uCHawD;EGZxD,ujBAA8J;ArBi6DtK;;AqB/+DI;EAkFI,qBlBxES;EkByET,gDlBzES;AH0+DjB;;AqBp/DI;EA2FI,clBjFS;AH8+DjB;;AqBx/DI;;;EAgGI,cAAc;ArB85DtB;;AqB9/DI;EAwGI,clB9FS;AHw/DjB;;AqBlgEI;EA2GM,qBlBjGO;AH4/DjB;;AqBtgEI;EAiHM,qBAAkC;EC3IxC,yBD4I+C;ArBy5DnD;;AqB3gEI;EAwHM,gDlB9GO;AHqgEjB;;AqB/gEI;EA4HM,qBlBlHO;AHygEjB;;AqBnhEI;EAsII,qBlB5HS;AH6gEjB;;AqBvhEI;EA2IM,qBlBjIO;EkBkIP,gDlBlIO;AHkhEjB;;AqBhhEE;EACE,aAAa;EACb,WAAW;EACX,mBlB0c0C;ECjb1C,cAAW;EiBvBX,clBVa;AH6hEjB;;AqBhhEE;EACE,kBAAkB;EAClB,SAAS;EACT,OAAO;EACP,UAAU;EACV,aAAa;EACb,eAAe;EACf,uBlBgyBqC;EkB/xBrC,iBAAiB;EjBmEf,mBAtCY;EiB3Bd,gBlBsO6B;EkBrO7B,WlBxDW;EkByDX,wClBzBa;EOrBb,sBP6NgC;AHq2DpC;;AqBpjEI;;;;EAuCE,cAAc;ArBohEpB;;AqB3jEI;EA6CE,qBlBtCW;EkByCT,oCH0CwD;EGzCxD,4UHpB0E;EGqB1E,4BAA4B;EAC5B,2DAA6D;EAC7D,gEHsCwD;AlB0+DhE;;AqBpkEI;EAwDI,qBlBjDS;EkBkDT,gDlBlDS;AHkkEjB;;AqBzkEI;EAkEI,oCHwBwD;EGvBxD,kFHuBwD;AlBo/DhE;;AqB9kEI;EA0EE,qBlBnEW;EkBsET,uCHawD;EGZxD,knBAA8J;ArBsgEtK;;AqBplEI;EAkFI,qBlB3ES;EkB4ET,gDlB5ES;AHklEjB;;AqBzlEI;EA2FI,clBpFS;AHslEjB;;AqB7lEI;;;EAgGI,cAAc;ArBmgEtB;;AqBnmEI;EAwGI,clBjGS;AHgmEjB;;AqBvmEI;EA2GM,qBlBpGO;AHomEjB;;AqB3mEI;EAiHM,qBAAkC;EC3IxC,yBD4I+C;ArB8/DnD;;AqBhnEI;EAwHM,gDlBjHO;AH6mEjB;;AqBpnEI;EA4HM,qBlBrHO;AHinEjB;;AqBxnEI;EAsII,qBlB/HS;AHqnEjB;;AqB5nEI;EA2IM,qBlBpIO;EkBqIP,gDlBrIO;AH0nEjB;;AmB/4DA;EACE,oBAAa;EAAb,aAAa;EACb,uBAAmB;EAAnB,mBAAmB;EACnB,sBAAmB;EAAnB,mBAAmB;AnBk5DrB;;AmBr5DA;EASI,WAAW;AnBg5Df;;Ac/mEI;EKsNJ;IAeM,oBAAa;IAAb,aAAa;IACb,sBAAmB;IAAnB,mBAAmB;IACnB,qBAAuB;IAAvB,uBAAuB;IACvB,gBAAgB;EnB+4DpB;EmBj6DF;IAuBM,oBAAa;IAAb,aAAa;IACb,kBAAc;IAAd,cAAc;IACd,uBAAmB;IAAnB,mBAAmB;IACnB,sBAAmB;IAAnB,mBAAmB;IACnB,gBAAgB;EnB64DpB;EmBx6DF;IAgCM,qBAAqB;IACrB,WAAW;IACX,sBAAsB;EnB24D1B;EmB76DF;IAuCM,qBAAqB;EnBy4DzB;EmBh7DF;;IA4CM,WAAW;EnBw4Df;EmBp7DF;IAkDM,oBAAa;IAAb,aAAa;IACb,sBAAmB;IAAnB,mBAAmB;IACnB,qBAAuB;IAAvB,uBAAuB;IACvB,WAAW;IACX,eAAe;EnBq4DnB;EmB37DF;IAyDM,kBAAkB;IAClB,oBAAc;IAAd,cAAc;IACd,aAAa;IACb,qBhB+KwC;IgB9KxC,cAAc;EnBq4DlB;EmBl8DF;IAiEM,sBAAmB;IAAnB,mBAAmB;IACnB,qBAAuB;IAAvB,uBAAuB;EnBo4D3B;EmBt8DF;IAqEM,gBAAgB;EnBo4DpB;AACF;;AuBttEA;EACE,qBAAqB;EAErB,gBpBsR+B;EoBrR/B,cpBMgB;EoBLhB,kBAAkB;EAGlB,sBAAsB;EACtB,yBAAiB;EAAjB,sBAAiB;EAAjB,qBAAiB;EAAjB,iBAAiB;EACjB,6BAA6B;EAC7B,6BAA2C;ECuF3C,yBrB2RkC;ECpQ9B,eAtCY;EoBiBhB,gBrB0L+B;EOlR7B,sBP6NgC;EiB/N9B,qIjBgb6I;AH4yDnJ;;AoBxtEM;EGdN;IHeQ,gBAAgB;EpB4tEtB;AACF;;AKtuEE;EkBUE,cpBNc;EoBOd,qBAAqB;AvBguEzB;;AuBjvEA;EAsBI,UAAU;EACV,gDpBMa;AHytEjB;;AuBtvEA;EA6BI,apBiZ6B;AH40DjC;;AuB1vEA;EAkCI,eAAsD;AvB4tE1D;;AuB9sEA;;EAEE,oBAAoB;AvBitEtB;;AuBxsEE;EC3DA,WrBCa;EmBDX,yBnB6Ba;EqB3Bf,qBrB2Be;AH4uEjB;;AKnwEE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBgxE7H;;AwBpwEE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,gDAAiF;AxBkwEvF;;AwB7vEE;EAEE,WrB1BW;EqB2BX,yBrBCa;EqBAb,qBrBAa;AH+vEjB;;AwBxvEE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBoyEnN;;AwBrvEI;;EAKI,gDAAiF;AxBqvEzF;;AuB7uEE;EC3DA,WrBCa;EmBDX,yBnBOc;EqBLhB,qBrBKgB;AHuyElB;;AKxyEE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBqzE7H;;AwBzyEE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,iDAAiF;AxBuyEvF;;AwBlyEE;EAEE,WrB1BW;EqB2BX,yBrBrBc;EqBsBd,qBrBtBc;AH0zElB;;AwB7xEE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBy0EnN;;AwB1xEI;;EAKI,iDAAiF;AxB0xEzF;;AuBlxEE;EC3DA,WrBCa;EmBDX,yBnBoCa;EqBlCf,qBrBkCe;AH+yEjB;;AK70EE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxB01E7H;;AwB90EE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,+CAAiF;AxB40EvF;;AwBv0EE;EAEE,WrB1BW;EqB2BX,yBrBQa;EqBPb,qBrBOa;AHk0EjB;;AwBl0EE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxB82EnN;;AwB/zEI;;EAKI,+CAAiF;AxB+zEzF;;AuBvzEE;EC3DA,WrBCa;EmBDX,yBnBsCa;EqBpCf,qBrBoCe;AHk1EjB;;AKl3EE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxB+3E7H;;AwBn3EE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,gDAAiF;AxBi3EvF;;AwB52EE;EAEE,WrB1BW;EqB2BX,yBrBUa;EqBTb,qBrBSa;AHq2EjB;;AwBv2EE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBm5EnN;;AwBp2EI;;EAKI,gDAAiF;AxBo2EzF;;AuB51EE;EC3DA,crBUgB;EmBVd,yBnBmCa;EqBjCf,qBrBiCe;AH03EjB;;AKv5EE;EmBAE,crBIc;EmBVd,yBEDoF;EASpF,qBATyH;AxBo6E7H;;AwBx5EE;EAEE,crBHc;EmBVd,yBEDoF;EAgBpF,qBAhByH;EAqBvH,gDAAiF;AxBs5EvF;;AwBj5EE;EAEE,crBjBc;EqBkBd,yBrBOa;EqBNb,qBrBMa;AH64EjB;;AwB54EE;;EAGE,crB7Bc;EqB8Bd,yBAzCuK;EA6CvK,qBA7C+M;AxBw7EnN;;AwBz4EI;;EAKI,gDAAiF;AxBy4EzF;;AuBj4EE;EC3DA,WrBCa;EmBDX,yBnBiCa;EqB/Bf,qBrB+Be;AHi6EjB;;AK57EE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBy8E7H;;AwB77EE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,+CAAiF;AxB27EvF;;AwBt7EE;EAEE,WrB1BW;EqB2BX,yBrBKa;EqBJb,qBrBIa;AHo7EjB;;AwBj7EE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxB69EnN;;AwB96EI;;EAKI,+CAAiF;AxB86EzF;;AuBt6EE;EC3DA,crBUgB;EmBVd,yBnBEc;EqBAhB,qBrBAgB;AHq+ElB;;AKj+EE;EmBAE,crBIc;EmBVd,yBEDoF;EASpF,qBATyH;AxB8+E7H;;AwBl+EE;EAEE,crBHc;EmBVd,yBEDoF;EAgBpF,qBAhByH;EAqBvH,iDAAiF;AxBg+EvF;;AwB39EE;EAEE,crBjBc;EqBkBd,yBrB1Bc;EqB2Bd,qBrB3Bc;AHw/ElB;;AwBt9EE;;EAGE,crB7Bc;EqB8Bd,yBAzCuK;EA6CvK,qBA7C+M;AxBkgFnN;;AwBn9EI;;EAKI,iDAAiF;AxBm9EzF;;AuB38EE;EC3DA,WrBCa;EmBDX,yBnBSc;EqBPhB,qBrBOgB;AHmgFlB;;AKtgFE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBmhF7H;;AwBvgFE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,8CAAiF;AxBqgFvF;;AwBhgFE;EAEE,WrB1BW;EqB2BX,yBrBnBc;EqBoBd,qBrBpBc;AHshFlB;;AwB3/EE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBuiFnN;;AwBx/EI;;EAKI,8CAAiF;AxBw/EzF;;AuB1+EE;ECPA,crB7Be;EqB8Bf,qBrB9Be;AHmhFjB;;AK1iFE;EmBwDE,WrB7DW;EqB8DX,yBrBlCa;EqBmCb,qBrBnCa;AHyhFjB;;AwBn/EE;EAEE,+CrBxCa;AH6hFjB;;AwBl/EE;EAEE,crB7Ca;EqB8Cb,6BAA6B;AxBo/EjC;;AwBj/EE;;EAGE,WrBhFW;EqBiFX,yBrBrDa;EqBsDb,qBrBtDa;AHyiFjB;;AwBj/EI;;EAKI,+CrB7DS;AH8iFjB;;AuB1gFE;ECPA,crBnDgB;EqBoDhB,qBrBpDgB;AHykFlB;;AK1kFE;EmBwDE,WrB7DW;EqB8DX,yBrBxDc;EqByDd,qBrBzDc;AH+kFlB;;AwBnhFE;EAEE,iDrB9Dc;AHmlFlB;;AwBlhFE;EAEE,crBnEc;EqBoEd,6BAA6B;AxBohFjC;;AwBjhFE;;EAGE,WrBhFW;EqBiFX,yBrB3Ec;EqB4Ed,qBrB5Ec;AH+lFlB;;AwBjhFI;;EAKI,iDrBnFU;AHomFlB;;AuB1iFE;ECPA,crBtBe;EqBuBf,qBrBvBe;AH4kFjB;;AK1mFE;EmBwDE,WrB7DW;EqB8DX,yBrB3Ba;EqB4Bb,qBrB5Ba;AHklFjB;;AwBnjFE;EAEE,+CrBjCa;AHslFjB;;AwBljFE;EAEE,crBtCa;EqBuCb,6BAA6B;AxBojFjC;;AwBjjFE;;EAGE,WrBhFW;EqBiFX,yBrB9Ca;EqB+Cb,qBrB/Ca;AHkmFjB;;AwBjjFI;;EAKI,+CrBtDS;AHumFjB;;AuB1kFE;ECPA,crBpBe;EqBqBf,qBrBrBe;AH0mFjB;;AK1oFE;EmBwDE,WrB7DW;EqB8DX,yBrBzBa;EqB0Bb,qBrB1Ba;AHgnFjB;;AwBnlFE;EAEE,gDrB/Ba;AHonFjB;;AwBllFE;EAEE,crBpCa;EqBqCb,6BAA6B;AxBolFjC;;AwBjlFE;;EAGE,WrBhFW;EqBiFX,yBrB5Ca;EqB6Cb,qBrB7Ca;AHgoFjB;;AwBjlFI;;EAKI,gDrBpDS;AHqoFjB;;AuB1mFE;ECPA,crBvBe;EqBwBf,qBrBxBe;AH6oFjB;;AK1qFE;EmBwDE,crBpDc;EqBqDd,yBrB5Ba;EqB6Bb,qBrB7Ba;AHmpFjB;;AwBnnFE;EAEE,+CrBlCa;AHupFjB;;AwBlnFE;EAEE,crBvCa;EqBwCb,6BAA6B;AxBonFjC;;AwBjnFE;;EAGE,crBvEc;EqBwEd,yBrB/Ca;EqBgDb,qBrBhDa;AHmqFjB;;AwBjnFI;;EAKI,+CrBvDS;AHwqFjB;;AuB1oFE;ECPA,crBzBe;EqB0Bf,qBrB1Be;AH+qFjB;;AK1sFE;EmBwDE,WrB7DW;EqB8DX,yBrB9Ba;EqB+Bb,qBrB/Ba;AHqrFjB;;AwBnpFE;EAEE,+CrBpCa;AHyrFjB;;AwBlpFE;EAEE,crBzCa;EqB0Cb,6BAA6B;AxBopFjC;;AwBjpFE;;EAGE,WrBhFW;EqBiFX,yBrBjDa;EqBkDb,qBrBlDa;AHqsFjB;;AwBjpFI;;EAKI,+CrBzDS;AH0sFjB;;AuB1qFE;ECPA,crBxDgB;EqByDhB,qBrBzDgB;AH8uFlB;;AK1uFE;EmBwDE,crBpDc;EqBqDd,yBrB7Dc;EqB8Dd,qBrB9Dc;AHovFlB;;AwBnrFE;EAEE,iDrBnEc;AHwvFlB;;AwBlrFE;EAEE,crBxEc;EqByEd,6BAA6B;AxBorFjC;;AwBjrFE;;EAGE,crBvEc;EqBwEd,yBrBhFc;EqBiFd,qBrBjFc;AHowFlB;;AwBjrFI;;EAKI,iDrBxFU;AHywFlB;;AuB1sFE;ECPA,crBjDgB;EqBkDhB,qBrBlDgB;AHuwFlB;;AK1wFE;EmBwDE,WrB7DW;EqB8DX,yBrBtDc;EqBuDd,qBrBvDc;AH6wFlB;;AwBntFE;EAEE,8CrB5Dc;AHixFlB;;AwBltFE;EAEE,crBjEc;EqBkEd,6BAA6B;AxBotFjC;;AwBjtFE;;EAGE,WrBhFW;EqBiFX,yBrBzEc;EqB0Ed,qBrB1Ec;AH6xFlB;;AwBjtFI;;EAKI,8CrBjFU;AHkyFlB;;AuB/tFA;EACE,gBpB4M+B;EoB3M/B,cpBjDe;EoBkDf,qBpB2F4C;AHuoF9C;;AK3yFE;EkB4EE,cpByF8D;EoBxF9D,0BpByF+C;AH0oFnD;;AuB1uFA;EAYI,0BpBoF+C;AH8oFnD;;AuB9uFA;EAiBI,cpBtFc;EoBuFd,oBAAoB;AvBiuFxB;;AuBttFA;ECPE,oBrB0SgC;ECnR5B,kBAtCY;EoBiBhB,gBrB+H+B;EOvN7B,qBP8N+B;AH4lFnC;;AuBztFA;ECXE,uBrBqSiC;EC9Q7B,mBAtCY;EoBiBhB,gBrBgI+B;EOxN7B,qBP+N+B;AHkmFnC;;AuBvtFA;EACE,cAAc;EACd,WAAW;AvB0tFb;;AuB5tFA;EAMI,kBpBuT+B;AHm6EnC;;AuBrtFA;;;EAII,WAAW;AvButFf;;AyBl2FA;ELgBM,gCjBiP2C;AHqmFjD;;AoBl1FM;EKpBN;ILqBQ,gBAAgB;EpBs1FtB;AACF;;AyB52FA;EAII,UAAU;AzB42Fd;;AyBx2FA;EAEI,aAAa;AzB02FjB;;AyBt2FA;EACE,kBAAkB;EAClB,SAAS;EACT,gBAAgB;ELDZ,6BjBkPwC;AHynF9C;;AoBv2FM;EKNN;ILOQ,gBAAgB;EpB22FtB;AACF;;A0Bh4FA;;;;EAIE,kBAAkB;A1Bm4FpB;;A0Bh4FA;EACE,mBAAmB;A1Bm4FrB;;A2B/2FI;EACE,qBAAqB;EACrB,oBxB+N0C;EwB9N1C,uBxB6N0C;EwB5N1C,WAAW;EAhCf,uBAA8B;EAC9B,qCAA4C;EAC5C,gBAAgB;EAChB,oCAA2C;A3Bm5F7C;;A2B91FI;EACE,cAAc;A3Bi2FpB;;A0B34FA;EACE,kBAAkB;EAClB,SAAS;EACT,OAAO;EACP,avBwpBsC;EuBvpBtC,aAAa;EACb,WAAW;EACX,gBvB8tBuC;EuB7tBvC,iBvB8tBmC;EuB7tBnC,oBAA4B;EtBsGxB,eAtCY;EsB9DhB,cvBXgB;EuBYhB,gBAAgB;EAChB,gBAAgB;EAChB,sBvBvBa;EuBwBb,4BAA4B;EAC5B,qCvBfa;EOCX,sBP6NgC;AHgsFpC;;A0Bt4FI;EACE,WAAW;EACX,OAAO;A1By4Fb;;A0Bt4FI;EACE,QAAQ;EACR,UAAU;A1By4FhB;;Ac73FI;EYnBA;IACE,WAAW;IACX,OAAO;E1Bo5FX;E0Bj5FE;IACE,QAAQ;IACR,UAAU;E1Bm5Fd;AACF;;Acx4FI;EYnBA;IACE,WAAW;IACX,OAAO;E1B+5FX;E0B55FE;IACE,QAAQ;IACR,UAAU;E1B85Fd;AACF;;Acn5FI;EYnBA;IACE,WAAW;IACX,OAAO;E1B06FX;E0Bv6FE;IACE,QAAQ;IACR,UAAU;E1By6Fd;AACF;;Ac95FI;EYnBA;IACE,WAAW;IACX,OAAO;E1Bq7FX;E0Bl7FE;IACE,QAAQ;IACR,UAAU;E1Bo7Fd;AACF;;A0B96FA;EAEI,SAAS;EACT,YAAY;EACZ,aAAa;EACb,uBvB4rBuC;AHovE3C;;A2B/8FI;EACE,qBAAqB;EACrB,oBxB+N0C;EwB9N1C,uBxB6N0C;EwB5N1C,WAAW;EAzBf,aAAa;EACb,qCAA4C;EAC5C,0BAAiC;EACjC,oCAA2C;A3B4+F7C;;A2B97FI;EACE,cAAc;A3Bi8FpB;;A0Bv7FA;EAEI,MAAM;EACN,WAAW;EACX,UAAU;EACV,aAAa;EACb,qBvB8qBuC;AH2wE3C;;A2Bt+FI;EACE,qBAAqB;EACrB,oBxB+N0C;EwB9N1C,uBxB6N0C;EwB5N1C,WAAW;EAlBf,mCAA0C;EAC1C,eAAe;EACf,sCAA6C;EAC7C,wBAA+B;A3B4/FjC;;A2Br9FI;EACE,cAAc;A3Bw9FpB;;A2Br/FI;EDmDE,iBAAiB;A1Bs8FvB;;A0Bj8FA;EAEI,MAAM;EACN,WAAW;EACX,UAAU;EACV,aAAa;EACb,sBvB6pBuC;AHsyE3C;;A2BjgGI;EACE,qBAAqB;EACrB,oBxB+N0C;EwB9N1C,uBxB6N0C;EwB5N1C,WAAW;A3BogGjB;;A2BxgGI;EAgBI,aAAa;A3B4/FrB;;A2Bz/FM;EACE,qBAAqB;EACrB,qBxB4MwC;EwB3MxC,uBxB0MwC;EwBzMxC,WAAW;EA9BjB,mCAA0C;EAC1C,yBAAgC;EAChC,sCAA6C;A3B2hG/C;;A2B1/FI;EACE,cAAc;A3B6/FpB;;A2BvgGM;EDiDA,iBAAiB;A1B09FvB;;A0Bn9FA;EAKI,WAAW;EACX,YAAY;A1Bk9FhB;;A0B78FA;EE9GE,SAAS;EACT,gBAAmB;EACnB,gBAAgB;EAChB,6BzBCgB;AH8jGlB;;A0B78FA;EACE,cAAc;EACd,WAAW;EACX,uBvBipBwC;EuBhpBxC,WAAW;EACX,gBvBgK+B;EuB/J/B,cvBhHgB;EuBiHhB,mBAAmB;EAEnB,mBAAmB;EACnB,6BAA6B;EAC7B,SAAS;A1B+8FX;;AKpkGE;EqBoIE,cvBinBqD;EuBhnBrD,qBAAqB;EJ/IrB,yBnBEc;AHklGlB;;A0Bh+FA;EAiCI,WvBpJW;EuBqJX,qBAAqB;EJtJrB,yBnB6Ba;AH6jGjB;;A0Bt+FA;EAwCI,cvBrJc;EuBsJd,oBAAoB;EACpB,6BAA6B;A1Bk8FjC;;A0B17FA;EACE,cAAc;A1B67FhB;;A0Bz7FA;EACE,cAAc;EACd,sBvB2lBwC;EuB1lBxC,gBAAgB;EtBrDZ,mBAtCY;EsB6FhB,cvBzKgB;EuB0KhB,mBAAmB;A1B47FrB;;A0Bx7FA;EACE,cAAc;EACd,uBvBilBwC;EuBhlBxC,cvB9KgB;AHymGlB;;A6BtnGA;;EAEE,kBAAkB;EAClB,2BAAoB;EAApB,oBAAoB;EACpB,sBAAsB;A7BynGxB;;A6B7nGA;;EAOI,kBAAkB;EAClB,kBAAc;EAAd,cAAc;A7B2nGlB;;AK1nGE;;EwBII,UAAU;A7B2nGhB;;A6BxoGA;;;;EAkBM,UAAU;A7B6nGhB;;A6BvnGA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,oBAA2B;EAA3B,2BAA2B;A7B0nG7B;;A6B7nGA;EAMI,WAAW;A7B2nGf;;A6BvnGA;;EAII,iB1BmM6B;AHq7FjC;;A6B5nGA;;EnBHI,0BmBa8B;EnBZ9B,6BmBY8B;A7BwnGlC;;A6BloGA;;EnBWI,yBmBI6B;EnBH7B,4BmBG6B;A7BynGjC;;A6BzmGA;EACE,wBAAmC;EACnC,uBAAkC;A7B4mGpC;;A6B9mGA;;;EAOI,cAAc;A7B6mGlB;;A6B1mGE;EACE,eAAe;A7B6mGnB;;A6BzmGA;EACE,uBAAsC;EACtC,sBAAqC;A7B4mGvC;;A6BzmGA;EACE,sBAAsC;EACtC,qBAAqC;A7B4mGvC;;A6BxlGA;EACE,0BAAsB;EAAtB,sBAAsB;EACtB,qBAAuB;EAAvB,uBAAuB;EACvB,qBAAuB;EAAvB,uBAAuB;A7B2lGzB;;A6B9lGA;;EAOI,WAAW;A7B4lGf;;A6BnmGA;;EAYI,gB1BkH6B;AH0+FjC;;A6BxmGA;;EnBrEI,6BmBuF+B;EnBtF/B,4BmBsF+B;A7B4lGnC;;A6B9mGA;;EnBnFI,yBmB0G4B;EnBzG5B,0BmByG4B;A7B6lGhC;;A6B5kGA;;EAGI,gBAAgB;A7B8kGpB;;A6BjlGA;;;;EAOM,kBAAkB;EAClB,sBAAsB;EACtB,oBAAoB;A7BilG1B;;A8B1uGA;EACE,kBAAkB;EAClB,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,uBAAoB;EAApB,oBAAoB;EACpB,WAAW;A9B6uGb;;A8BlvGA;;;;EAWI,kBAAkB;EAClB,kBAAc;EAAd,cAAc;EACd,SAAS;EACT,YAAY;EACZ,gBAAgB;A9B8uGpB;;A8B7vGA;;;;;;;;;;;;EAoBM,iB3BkN2B;AHsiGjC;;A8B5wGA;;;EA4BI,UAAU;A9BsvGd;;A8BlxGA;EAiCI,UAAU;A9BqvGd;;A8BtxGA;;EpB4BI,0BoBUmD;EpBTnD,6BoBSmD;A9BsvGvD;;A8B5xGA;;EpB0CI,yBoBHmD;EpBInD,4BoBJmD;A9B2vGvD;;A8BlyGA;EA6CI,oBAAa;EAAb,aAAa;EACb,sBAAmB;EAAnB,mBAAmB;A9ByvGvB;;A8BvyGA;;EpB4BI,0BoBqB6E;EpBpB7E,6BoBoB6E;A9B4vGjF;;A8B7yGA;EpB0CI,yBoBQsE;EpBPtE,4BoBOsE;A9BgwG1E;;A8BrvGA;;EAEE,oBAAa;EAAb,aAAa;A9BwvGf;;A8B1vGA;;EAQI,kBAAkB;EAClB,UAAU;A9BuvGd;;A8BhwGA;;EAYM,UAAU;A9ByvGhB;;A8BrwGA;;;;;;;;EAoBI,iB3BqJ6B;AHumGjC;;A8BxvGA;EAAuB,kB3BiJU;AH2mGjC;;A8B3vGA;EAAsB,iB3BgJW;AH+mGjC;;A8BvvGA;EACE,oBAAa;EAAb,aAAa;EACb,sBAAmB;EAAnB,mBAAmB;EACnB,yB3B4RkC;E2B3RlC,gBAAgB;E1BuBZ,eAtCY;E0BiBhB,gB3BqL+B;E2BpL/B,gB3ByL+B;E2BxL/B,c3B9FgB;E2B+FhB,kBAAkB;EAClB,mBAAmB;EACnB,yB3BtGgB;E2BuGhB,yB3BrGgB;EOOd,sBP6NgC;AH4nGpC;;A8BvwGA;;EAkBI,aAAa;A9B0vGjB;;A8BhvGA;;EAEE,gCZR8D;AlB2vGhE;;A8BhvGA;;;;;;EAME,oB3BuQgC;ECnR5B,kBAtCY;E0BoDhB,gB3B4F+B;EOvN7B,qBP8N+B;AHipGnC;;A8BhvGA;;EAEE,kCZzB8D;AlB4wGhE;;A8BhvGA;;;;;;EAME,uB3BiPiC;EC9Q7B,mBAtCY;E0BqEhB,gB3B4E+B;EOxN7B,qBP+N+B;AHiqGnC;;A8BhvGA;;EAEE,sBAA0E;A9BmvG5E;;A8BxuGA;;;;;;EpB7II,0BoBmJ4B;EpBlJ5B,6BoBkJ4B;A9B4uGhC;;A8BzuGA;;;;;;EpBxII,yBoB8I2B;EpB7I3B,4BoB6I2B;A9B6uG/B;;A+Bl6GA;EACE,kBAAkB;EAClB,UAAU;EACV,cAAc;EACd,kBAA+C;EAC/C,oBAAqE;EACrE,iCAAmB;EAAnB,mBAAmB;A/Bq6GrB;;A+Bl6GA;EACE,2BAAoB;EAApB,oBAAoB;EACpB,kB5Bwf0C;AH66F5C;;A+Bl6GA;EACE,kBAAkB;EAClB,OAAO;EACP,WAAW;EACX,W5Bof0C;E4Bnf1C,eAAkF;EAClF,UAAU;A/Bq6GZ;;A+B36GA;EASI,W5BzBW;E4B0BX,qB5BEa;EmB7Bb,yBnB6Ba;AHq6GjB;;A+Bj7GA;EAoBM,gD5BRW;AHy6GjB;;A+Br7GA;EAyBI,qB5BqbsE;AH2+F1E;;A+Bz7GA;EA6BI,W5B7CW;E4B8CX,yB5Bif8E;E4Bhf9E,qB5Bgf8E;AHg7FlF;;A+B/7GA;EAuCM,c5BjDY;AH68GlB;;A+Bn8GA;EA0CQ,yB5BxDU;AHq9GlB;;A+Bn5GA;EACE,kBAAkB;EAClB,gBAAgB;EAEhB,mBAAmB;A/Bq5GrB;;A+Bz5GA;EASI,kBAAkB;EAClB,YAA+E;EAC/E,aAA+D;EAC/D,cAAc;EACd,W5BubwC;E4BtbxC,Y5BsbwC;E4BrbxC,oBAAoB;EACpB,WAAW;EACX,sB5BrFW;E4BsFX,yB5B+I6B;AHqwGjC;;A+Bt6GA;EAwBI,kBAAkB;EAClB,YAA+E;EAC/E,aAA+D;EAC/D,cAAc;EACd,W5BwawC;E4BvaxC,Y5BuawC;E4BtaxC,WAAW;EACX,mCAAgE;A/Bk5GpE;;A+Bz4GA;ErBjGI,sBP6NgC;AHixGpC;;A+B74GA;EAOM,kOb7D4E;AlBu8GlF;;A+Bj5GA;EAaM,qB5B7FW;EmB7Bb,yBnB6Ba;AHs+GjB;;A+Bt5GA;EAkBM,+KbxE4E;AlBg9GlF;;A+B15GA;ET7GI,wCnB6Ba;AH8+GjB;;A+B95GA;ET7GI,wCnB6Ba;AHk/GjB;;A+B93GA;EAGI,kB5ByZ+C;AHs+FnD;;A+Bl4GA;EAQM,8KblG4E;AlBg+GlF;;A+Bt4GA;ETjJI,wCnB6Ba;AH8/GjB;;A+Bl3GA;EACE,qBAA2D;A/Bq3G7D;;A+Bt3GA;EAKM,cAAqD;EACrD,c5BiY+E;E4BhY/E,mBAAmB;EAEnB,qB5B+X4E;AHq/FlF;;A+B73GA;EAaM,wBblE0D;EamE1D,0BbnE0D;EaoE1D,uBbhD0D;EaiD1D,wBbjD0D;EakD1D,yB5BpLY;E4BsLZ,qB5BqX4E;EiBviB5E,iJjByf+H;EiBzf/H,yIjByf+H;EiBzf/H,8KjByf+H;AH6iGrI;;AoBliHM;EW2JN;IX1JQ,gBAAgB;EpBsiHtB;AACF;;A+B74GA;EA0BM,sB5BlMS;E4BmMT,sCAA4E;EAA5E,8BAA4E;A/Bu3GlF;;A+Bl5GA;ETzKI,wCnB6Ba;AHkiHjB;;A+Bz2GA;EACE,qBAAqB;EACrB,WAAW;EACX,mCbrG8D;EasG9D,0C5BmKkC;ECpQ9B,eAtCY;E2B0IhB,gB5B4D+B;E4B3D/B,gB5BgE+B;E4B/D/B,c5BvNgB;E4BwNhB,sBAAsB;EACtB,uO5BkW+I;E4BjW/I,yB5B7NgB;EOOd,sBP6NgC;E4BJlC,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;A/B02GlB;;A+Bz3GA;EAkBI,qB5BuPsE;E4BtPtE,UAAU;EAKR,gD5BjNW;AHwjHjB;;A+B/3GA;EAiCM,c5B/OY;E4BgPZ,sB5BvPS;AHylHf;;A+Bp4GA;EAwCI,YAAY;EACZ,sB5B8HgC;E4B7HhC,sBAAsB;A/Bg2G1B;;A+B14GA;EA8CI,c5B7Pc;E4B8Pd,yB5BlQc;AHkmHlB;;A+B/4GA;EAoDI,aAAa;A/B+1GjB;;A+Bn5GA;EAyDI,kBAAkB;EAClB,0B5BxQc;AHsmHlB;;A+B11GA;EACE,kCbjK8D;EakK9D,oB5BgHkC;E4B/GlC,uB5B+GkC;E4B9GlC,oB5B+GiC;EC9Q7B,mBAtCY;AJmiHlB;;A+B11GA;EACE,gCbzK8D;Ea0K9D,mB5B6GiC;E4B5GjC,sB5B4GiC;E4B3GjC,kB5B4GgC;ECnR5B,kBAtCY;AJ2iHlB;;A+Br1GA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,WAAW;EACX,mCbzL8D;Ea0L9D,gBAAgB;A/Bw1GlB;;A+Br1GA;EACE,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,mCbjM8D;EakM9D,SAAS;EACT,UAAU;A/Bw1GZ;;A+B91GA;EASI,qB5BqKsE;E4BpKtE,gD5B9Ra;AHunHjB;;A+Bn2GA;;EAgBI,yB5B9Tc;AHspHlB;;A+Bx2GA;EAqBM,iB5B4TQ;AH2hGd;;A+B52GA;EA0BI,0BAA0B;A/Bs1G9B;;A+Bl1GA;EACE,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,OAAO;EACP,UAAU;EACV,mCbjO8D;EakO9D,yB5BuCkC;E4BrClC,gB5B/D+B;E4BgE/B,gB5B3D+B;E4B4D/B,c5BlVgB;E4BmVhB,sB5B1Va;E4B2Vb,yB5BvVgB;EOOd,sBP6NgC;AHw8GpC;;A+Bl2GA;EAkBI,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,SAAS;EACT,UAAU;EACV,cAAc;EACd,6BbnP4D;EaoP5D,yB5BqBgC;E4BpBhC,gB5B3E6B;E4B4E7B,c5BlWc;E4BmWd,iBAAiB;ET3WjB,yBnBGc;E4B0Wd,oBAAoB;ErBjWpB,kCqBkWgF;A/Bo1GpF;;A+B10GA;EACE,WAAW;EACX,cbzQ2B;Ea0Q3B,UAAU;EACV,6BAA6B;EAC7B,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;A/B60GlB;;A+Bl1GA;EAQI,aAAa;A/B80GjB;;A+Bt1GA;EAY8B,gE5BvWb;AHqrHjB;;A+B11GA;EAa8B,gE5BxWb;AHyrHjB;;A+B91GA;EAc8B,gE5BzWb;AH6rHjB;;A+Bl2GA;EAkBI,SAAS;A/Bo1Gb;;A+Bt2GA;EAsBI,W5BqN6C;E4BpN7C,Y5BoN6C;E4BnN7C,oBAAyE;EThZzE,yBnB6Ba;E4BqXb,S5BoN0C;EO1lB1C,mBP2lB6C;EiB7lB3C,oHjByf+H;EiBzf/H,4GjByf+H;E4B7GjI,wBAAgB;EAAhB,gBAAgB;A/Bm1GpB;;AoB3tHM;EW0WN;IXzWQ,wBAAgB;IAAhB,gBAAgB;EpB+tHtB;AACF;;A+Bv3GA;ETxXI,yBnB2mB2E;AHwoG/E;;A+B33GA;EAsCI,W5B8LoC;E4B7LpC,c5B8LqC;E4B7LrC,kBAAkB;EAClB,e5B6LuC;E4B5LvC,yB5B9Zc;E4B+Zd,yBAAyB;ErBvZzB,mBPolBoC;AH6pGxC;;A+Br4GA;EAiDI,W5B0L6C;E4BzL7C,Y5ByL6C;EmBnmB7C,yBnB6Ba;E4B+Yb,S5B0L0C;EO1lB1C,mBP2lB6C;EiB7lB3C,iHjByf+H;EiBzf/H,4GjByf+H;E4BnFjI,qBAAgB;EAAhB,gBAAgB;A/Bu1GpB;;AoBzvHM;EW0WN;IXzWQ,qBAAgB;IAAhB,gBAAgB;EpB6vHtB;AACF;;A+Br5GA;ETxXI,yBnB2mB2E;AHsqG/E;;A+Bz5GA;EAgEI,W5BoKoC;E4BnKpC,c5BoKqC;E4BnKrC,kBAAkB;EAClB,e5BmKuC;E4BlKvC,yB5Bxbc;E4Bybd,yBAAyB;ErBjbzB,mBPolBoC;AH2rGxC;;A+Bn6GA;EA2EI,W5BgK6C;E4B/J7C,Y5B+J6C;E4B9J7C,aAAa;EACb,oB5BpE+B;E4BqE/B,mB5BrE+B;EmBlY/B,yBnB6Ba;E4B4ab,S5B6J0C;EO1lB1C,mBP2lB6C;EiB7lB3C,gHjByf+H;EiBzf/H,4GjByf+H;E4BtDjI,gBAAgB;A/B21GpB;;AoB1xHM;EW0WN;IXzWQ,oBAAgB;IAAhB,gBAAgB;EpB8xHtB;AACF;;A+Bt7GA;ETxXI,yBnB2mB2E;AHusG/E;;A+B17GA;EA6FI,W5BuIoC;E4BtIpC,c5BuIqC;E4BtIrC,kBAAkB;EAClB,e5BsIuC;E4BrIvC,6BAA6B;EAC7B,yBAAyB;EACzB,oBAA4C;A/Bi2GhD;;A+Bp8GA;EAwGI,yB5B5dc;EOQd,mBPolBoC;AHiuGxC;;A+Bz8GA;EA6GI,kBAAkB;EAClB,yB5Blec;EOQd,mBPolBoC;AHuuGxC;;A+B/8GA;EAoHM,yB5BteY;AHq0HlB;;A+Bn9GA;EAwHM,eAAe;A/B+1GrB;;A+Bv9GA;EA4HM,yB5B9eY;AH60HlB;;A+B39GA;EAgIM,eAAe;A/B+1GrB;;A+B/9GA;EAoIM,yB5BtfY;AHq1HlB;;A+B11GA;;;EXvfM,4GjByf+H;AH81GrI;;AoBn1HM;EWmfN;;;IXlfQ,gBAAgB;EpBy1HtB;AACF;;AgC12HA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,gBAAgB;AhC62HlB;;AgC12HA;EACE,cAAc;EACd,oB7ByqBsC;AHosGxC;;AK52HE;E2BGE,qBAAqB;AhC62HzB;;AgCn3HA;EAWI,c7BXc;E6BYd,oBAAoB;EACpB,eAAe;AhC42HnB;;AgCp2HA;EACE,gC7BzBgB;AHg4HlB;;AgCx2HA;EAII,mB7BsM6B;AHkqHjC;;AgC52HA;EAQI,6BAAgD;EtBfhD,+BPoNgC;EOnNhC,gCPmNgC;AHqqHpC;;AKp4HE;E2B8BI,qC7BpCY;AH84HlB;;AgCt3HA;EAgBM,c7BrCY;E6BsCZ,6BAA6B;EAC7B,yBAAyB;AhC02H/B;;AgC53HA;;EAwBI,c7B5Cc;E6B6Cd,sB7BpDW;E6BqDX,kC7BrDW;AH85Hf;;AgCn4HA;EA+BI,gB7B2K6B;EOjN7B,yBsBwC4B;EtBvC5B,0BsBuC4B;AhCw2HhC;;AgC/1HA;EtB1DI,sBP6NgC;AHgsHpC;;AgCn2HA;;EAOI,W7B5EW;E6B6EX,yB7BjDa;AHk5HjB;;AgCx1HA;;EAGI,kBAAc;EAAd,cAAc;EACd,kBAAkB;AhC01HtB;;AgCt1HA;;EAGI,0BAAa;EAAb,aAAa;EACb,oBAAY;E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IAAnB,mBAAmB;EjC8+H3B;EiCtgIG;IA2BO,kBAAkB;EjC8+H5B;EiCzgIG;IA+BO,qB9B4hB6B;I8B3hB7B,oB9B2hB6B;EHk9GvC;EiC7gIG;;IAsCK,qBAAiB;IAAjB,iBAAiB;EjC2+HzB;EiCjhIG;IAqDK,+BAAwB;IAAxB,wBAAwB;IAGxB,6BAAgB;IAAhB,gBAAgB;EjC69HxB;EiCrhIG;IA4DK,aAAa;EjC49HrB;AACF;;AiC9hIA;EAyBQ,yBAAqB;EAArB,qBAAqB;EACrB,oBAA2B;EAA3B,2BAA2B;AjCygInC;;AiCniIA;;EAQU,gBAAgB;EAChB,eAAe;AjCgiIzB;;AiCziIA;EA6BU,uBAAmB;EAAnB,mBAAmB;AjCghI7B;;AiC7iIA;EAgCY,kBAAkB;AjCihI9B;;AiCjjIA;EAoCY,qB9B4hB6B;E8B3hB7B,oB9B2hB6B;AHs/GzC;;AiCtjIA;;EA2CU,qBAAiB;EAAjB,iBAAiB;AjCghI3B;;AiC3jIA;EA0DU,+BAAwB;EAAxB,wBAAwB;EAGxB,6BAAgB;EAAhB,gBAAgB;AjCmgI1B;;AiChkIA;EAiEU,aAAa;AjCmgIvB;;AiCt/HA;EAEI,yB9B/MW;AHusIf;;AKxsIE;E4BmNI,yB9BlNS;AH2sIf;;AiC9/HA;EAWM,yB9BxNS;AH+sIf;;AKhtIE;E4B4NM,yB9B3NO;AHmtIf;;AiCtgIA;EAkBQ,yB9B/NO;AHutIf;;AiC1gIA;;;;EA0BM,yB9BvOS;AH8tIf;;AiCjhIA;EA+BI,yB9B5OW;E8B6OX,gC9B7OW;AHmuIf;;AiCthIA;EAoCI,mRfrM8E;AlB2rIlF;;AiC1hIA;EAwCI,yB9BrPW;AH2uIf;;AiC9hIA;EA0CM,yB9BvPS;AH+uIf;;AKhvIE;E4B2PM,yB9B1PO;AHmvIf;;AiCl/HA;EAEI,W9B7QW;AHiwIf;;AKxvIE;E4BuQI,W9BhRS;AHqwIf;;AiC1/HA;EAWM,+B9BtRS;AHywIf;;AKhwIE;E4BgRM,gC9BzRO;AH6wIf;;AiClgIA;EAkBQ,gC9B7RO;AHixIf;;AiCtgIA;;;;EA0BM,W9BrSS;AHwxIf;;AiC7gIA;EA+BI,+B9B1SW;E8B2SX,sC9B3SW;AH6xIf;;AiClhIA;EAoCI,yRfzP8E;AlB2uIlF;;AiCthIA;EAwCI,+B9BnTW;AHqyIf;;AiC1hIA;EA0CM,W9BrTS;AHyyIf;;AKhyIE;E4B+SM,W9BxTO;AH6yIf;;AkChzIA;EACE,kBAAkB;EAClB,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;EACtB,YAAY;EAEZ,qBAAqB;EACrB,sB/BJa;E+BKb,2BAA2B;EAC3B,sC/BIa;EOCX,sBP6NgC;AHilIpC;;AkC5zIA;EAaI,eAAe;EACf,cAAc;AlCmzIlB;;AkCj0IA;EAkBI,mBAAmB;EACnB,sBAAsB;AlCmzI1B;;AkCt0IA;EAsBM,mBAAmB;ExBCrB,2CQmH4D;ERlH5D,4CQkH4D;AlBksIhE;;AkC50IA;EA2BM,sBAAsB;ExBUxB,+CQqG4D;ERpG5D,8CQoG4D;AlBwsIhE;;AkCl1IA;;EAoCI,aAAa;AlCmzIjB;;AkC/yIA;EAGE,kBAAc;EAAd,cAAc;EAGd,eAAe;EACf,gB/B0wByC;AHoiH3C;;AkC1yIA;EACE,sB/BowBwC;AHyiH1C;;AkC1yIA;EACE,qBAA+B;EAC/B,gBAAgB;AlC6yIlB;;AkC1yIA;EACE,gBAAgB;AlC6yIlB;;AKl2IE;E6B0DE,qBAAqB;AlC4yIzB;;AkC9yIA;EAMI,oB/BmvBuC;AHyjH3C;;AkCpyIA;EACE,wB/B0uByC;E+BzuBzC,gBAAgB;EAEhB,qC/BrEa;E+BsEb,6C/BtEa;AH42If;;AkC3yIA;ExBhEI,0DwBwE8E;AlCuyIlF;;AkCnyIA;EACE,wB/B8tByC;E+B5tBzC,qC/BhFa;E+BiFb,0C/BjFa;AHs3If;;AkCzyIA;ExB5EI,0DQ4H4D;AlB6vIhE;;AkC7xIA;EACE,uBAAiC;EACjC,uB/B4sBwC;E+B3sBxC,sBAAgC;EAChC,gBAAgB;AlCgyIlB;;AkC7xIA;EACE,uBAAiC;EACjC,sBAAgC;AlCgyIlC;;AkC5xIA;EACE,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,SAAS;EACT,OAAO;EACP,gB/BusByC;EOtzBvC,kCQ4H4D;AlBmxIhE;;AkC5xIA;;;EAGE,oBAAc;EAAd,cAAc;EACd,WAAW;AlC+xIb;;AkC5xIA;;ExBjHI,2CQmH4D;ERlH5D,4CQkH4D;AlBgyIhE;;AkC7xIA;;ExBxGI,+CQqG4D;ERpG5D,8CQoG4D;AlBsyIhE;;AkC3xIA;EAEI,mB/B+qBsD;AH8mH1D;;Ac53II;EoB6FJ;IAMI,oBAAa;IAAb,aAAa;IACb,uBAAmB;IAAnB,mBAAmB;IACnB,mB/ByqBsD;I+BxqBtD,kB/BwqBsD;EHsnHxD;EkCvyIF;IAaM,gBAAY;IAAZ,YAAY;IACZ,kB/BmqBoD;I+BlqBpD,gBAAgB;IAChB,iB/BiqBoD;EH4nHxD;AACF;;AkCpxIA;EAII,mB/BmpBsD;AHioH1D;;Ac/4II;EoBuHJ;IAQI,oBAAa;IAAb,aAAa;IACb,uBAAmB;IAAnB,mBAAmB;ElCqxIrB;EkC9xIF;IAcM,gBAAY;IAAZ,YAAY;IACZ,gBAAgB;ElCmxIpB;EkClyIF;IAkBQ,cAAc;IACd,cAAc;ElCmxIpB;EkCtyIF;IxBjJI,0BwB0KoC;IxBzKpC,6BwByKoC;ElCixItC;EkC1yIF;;IA8BY,0BAA0B;ElCgxIpC;EkC9yIF;;IAmCY,6BAA6B;ElC+wIvC;EkClzIF;IxBnII,yBwB2KmC;IxB1KnC,4BwB0KmC;ElC8wIrC;EkCtzIF;;IA6CY,yBAAyB;ElC6wInC;EkC1zIF;;IAkDY,4BAA4B;ElC4wItC;AACF;;AkChwIA;EAEI,sB/BwkBsC;AH0rH1C;;Ac17II;EoBsLJ;IAMI,uB/BqlBiC;I+BrlBjC,oB/BqlBiC;I+BrlBjC,e/BqlBiC;I+BplBjC,2B/BqlBuC;I+BrlBvC,wB/BqlBuC;I+BrlBvC,mB/BqlBuC;I+BplBvC,UAAU;IACV,SAAS;ElCmwIX;EkC5wIF;IAYM,qBAAqB;IACrB,WAAW;ElCmwIf;AACF;;AkC1vIA;EACE,qBAAqB;AlC6vIvB;;AkC9vIA;EAII,gBAAgB;AlC8vIpB;;AkClwIA;EAOM,gBAAgB;ExBvOlB,6BwBwOiC;ExBvOjC,4BwBuOiC;AlCgwIrC;;AkCxwIA;ExB9OI,yBwB0P8B;ExBzP9B,0BwByP8B;AlCiwIlC;;AkC7wIA;ExBvPI,gBwBuQ0B;EACxB,mB/B9C2B;AH+yIjC;;AmC3hJA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,qBhC6hCsC;EgC5hCtC,mBhC+hCsC;EgC7hCtC,gBAAgB;EAChB,yBhCEgB;EOSd,sBP6NgC;AHszIpC;;AmC1hJA;EACE,oBAAa;EAAb,aAAa;AnC6hJf;;AmC9hJA;EAKI,oBhCihCqC;AH4gHzC;;AmCliJA;EAQM,qBAAqB;EACrB,qBhC6gCmC;EgC5gCnC,chCRY;EgCSZ,YhCkhCuC;AH4gH7C;;AmCziJA;EAsBI,0BAA0B;AnCuhJ9B;;AmC7iJA;EA0BI,qBAAqB;AnCuhJzB;;AmCjjJA;EA8BI,chC5Bc;AHmjJlB;;AoChkJA;EACE,oBAAa;EAAb,aAAa;E7BGb,eAAe;EACf,gBAAgB;EGad,sBP6NgC;AHw1IpC;;AoCjkJA;EACE,kBAAkB;EAClB,cAAc;EACd,uBjC8wBwC;EiC7wBxC,iBjCkO+B;EiCjO/B,iBjCixBsC;EiChxBtC,cjCuBe;EiCrBf,sBjCPa;EiCQb,yBjCLgB;AHwkJlB;;AoC5kJA;EAYI,UAAU;EACV,cjC8J8D;EiC7J9D,qBAAqB;EACrB,yBjCZc;EiCad,qBjCZc;AHglJlB;;AoCplJA;EAoBI,UAAU;EACV,UjCywBiC;EiCxwBjC,gDjCOa;AH6jJjB;;AoChkJA;EAGM,cAAc;E1BahB,+BP+LgC;EO9LhC,kCP8LgC;AHu3IpC;;AoCtkJA;E1BEI,gCP6MgC;EO5MhC,mCP4MgC;AH43IpC;;AoC3kJA;EAcI,UAAU;EACV,WjCxCW;EiCyCX,yBjCba;EiCcb,qBjCda;AH+kJjB;;AoCllJA;EAqBI,cjCxCc;EiCyCd,oBAAoB;EAEpB,YAAY;EACZ,sBjClDW;EiCmDX,qBjChDc;AHgnJlB;;AqCvnJE;EACE,uBlCuxBsC;EC5pBpC,kBAtCY;EiCnFd,gBlCmO6B;AHu5IjC;;AqCrnJM;E3BqCF,8BPgM+B;EO/L/B,iCP+L+B;AHq5InC;;AqCrnJM;E3BkBF,+BP8M+B;EO7M/B,kCP6M+B;AH05InC;;AqCvoJE;EACE,uBlCqxBqC;EC1pBnC,mBAtCY;EiCnFd,gBlCoO6B;AHs6IjC;;AqCroJM;E3BqCF,8BPiM+B;EOhM/B,iCPgM+B;AHo6InC;;AqCroJM;E3BkBF,+BP+M+B;EO9M/B,kCP8M+B;AHy6InC;;AsCrpJA;EACE,qBAAqB;EACrB,qBnCs5BsC;ECr1BpC,cAAW;EkC/Db,gBnCuR+B;EmCtR/B,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,wBAAwB;E5BKtB,sBP6NgC;EiB/N9B,qIjBgb6I;AHuuInJ;;AoBnpJM;EkBfN;IlBgBQ,gBAAgB;EpBupJtB;AACF;;AK7pJE;EiCGI,qBAAqB;AtC8pJ3B;;AsC5qJA;EAoBI,aAAa;AtC4pJjB;;AsCvpJA;EACE,kBAAkB;EAClB,SAAS;AtC0pJX;;AsCnpJA;EACE,oBnC23BsC;EmC13BtC,mBnC03BsC;EOj5BpC,oBPo5BqC;AH0xHzC;;AsC9oJE;ECjDA,WpCMa;EoCLb,yBpCiCe;AHkqJjB;;AKrrJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvCmsJxC;;AuCtsJU;EAQJ,UAAU;EACV,+CpCsBW;AH4qJjB;;AsC7pJE;ECjDA,WpCMa;EoCLb,yBpCWgB;AHusJlB;;AKpsJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvCktJxC;;AuCrtJU;EAQJ,UAAU;EACV,iDpCAY;AHitJlB;;AsC5qJE;ECjDA,WpCMa;EoCLb,yBpCwCe;AHyrJjB;;AKntJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvCiuJxC;;AuCpuJU;EAQJ,UAAU;EACV,+CpC6BW;AHmsJjB;;AsC3rJE;ECjDA,WpCMa;EoCLb,yBpC0Ce;AHssJjB;;AKluJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvCgvJxC;;AuCnvJU;EAQJ,UAAU;EACV,gDpC+BW;AHgtJjB;;AsC1sJE;ECjDA,cpCegB;EoCdhB,yBpCuCe;AHwtJjB;;AKjvJE;EkCVI,cpCUY;EoCTZ,yBAAkC;AvC+vJxC;;AuClwJU;EAQJ,UAAU;EACV,+CpC4BW;AHkuJjB;;AsCztJE;ECjDA,WpCMa;EoCLb,yBpCqCe;AHyuJjB;;AKhwJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC8wJxC;;AuCjxJU;EAQJ,UAAU;EACV,+CpC0BW;AHmvJjB;;AsCxuJE;ECjDA,cpCegB;EoCdhB,yBpCMgB;AHuxJlB;;AK/wJE;EkCVI,cpCUY;EoCTZ,yBAAkC;AvC6xJxC;;AuChyJU;EAQJ,UAAU;EACV,iDpCLY;AHiyJlB;;AsCvvJE;ECjDA,WpCMa;EoCLb,yBpCagB;AH+xJlB;;AK9xJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC4yJxC;;AuC/yJU;EAQJ,UAAU;EACV,8CpCEY;AHyyJlB;;AwCxzJA;EACE,kBAAoD;EACpD,mBrCmzBsC;EqCjzBtC,yBrCKgB;EOSd,qBP8N+B;AH+kJnC;;AcnwJI;E0B5DJ;IAQI,kBrC6yBoC;EH+gItC;AACF;;AwCzzJA;EACE,gBAAgB;EAChB,eAAe;E9BIb,gB8BHsB;AxC4zJ1B;;AyCv0JA;EACE,kBAAkB;EAClB,wBtCm9ByC;EsCl9BzC,mBtCm9BsC;EsCl9BtC,6BAA6C;E/BU3C,sBP6NgC;AHomJpC;;AyCt0JA;EAEE,cAAc;AzCw0JhB;;AyCp0JA;EACE,gBtC4Q+B;AH2jJjC;;AyC/zJA;EACE,mBAAsD;AzCk0JxD;;AyCn0JA;EAKI,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,UAAU;EACV,wBtCo7BuC;EsCn7BvC,cAAc;AzCk0JlB;;AyCxzJE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlBqwJlE;;A0Cz2JE;EACE,yBAAqC;A1C42JzC;;A0Cz2JE;EACE,cAA0B;A1C42J9B;;AyCt0JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlBmxJlE;;A0Cv3JE;EACE,yBAAqC;A1C03JzC;;A0Cv3JE;EACE,cAA0B;A1C03J9B;;AyCp1JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlBiyJlE;;A0Cr4JE;EACE,yBAAqC;A1Cw4JzC;;A0Cr4JE;EACE,cAA0B;A1Cw4J9B;;AyCl2JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlB+yJlE;;A0Cn5JE;EACE,yBAAqC;A1Cs5JzC;;A0Cn5JE;EACE,cAA0B;A1Cs5J9B;;AyCh3JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlB6zJlE;;A0Cj6JE;EACE,yBAAqC;A1Co6JzC;;A0Cj6JE;EACE,cAA0B;A1Co6J9B;;AyC93JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlB20JlE;;A0C/6JE;EACE,yBAAqC;A1Ck7JzC;;A0C/6JE;EACE,cAA0B;A1Ck7J9B;;AyC54JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlBy1JlE;;A0C77JE;EACE,yBAAqC;A1Cg8JzC;;A0C77JE;EACE,cAA0B;A1Cg8J9B;;AyC15JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlBu2JlE;;A0C38JE;EACE,yBAAqC;A1C88JzC;;A0C38JE;EACE,cAA0B;A1C88J9B;;A2Ct9JE;EACE;IAAO,2BAAuC;E3C09JhD;E2Cz9JE;IAAK,wBAAwB;E3C49J/B;AACF;;A2C/9JE;EACE;IAAO,2BAAuC;E3C09JhD;E2Cz9JE;IAAK,wBAAwB;E3C49J/B;AACF;;A2Cz9JA;EACE,oBAAa;EAAb,aAAa;EACb,YxC49BsC;EwC39BtC,gBAAgB;EAChB,cAAc;EvCmHV,kBAtCY;EuC3EhB,yBxCLgB;EOSd,sBP6NgC;AH4vJpC;;A2Cx9JA;EACE,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;EACtB,qBAAuB;EAAvB,uBAAuB;EACvB,gBAAgB;EAChB,WxCjBa;EwCkBb,kBAAkB;EAClB,mBAAmB;EACnB,yBxCQe;EiBnBX,2BjB89B4C;AHygIlD;;AoBn+JM;EuBDN;IvBEQ,gBAAgB;EpBu+JtB;AACF;;A2C99JA;ErBYE,qMAA6I;EqBV7I,0BxCq8BsC;AH4hIxC;;A2C79JE;EACE,0DxCu8BkD;EwCv8BlD,kDxCu8BkD;AHyhItD;;A2C79JM;EAJJ;IAKM,uBAAe;IAAf,eAAe;E3Ci+JrB;AACF;;A4C5gKA;EACE,oBAAa;EAAb,aAAa;EACb,qBAAuB;EAAvB,uBAAuB;A5C+gKzB;;A4C5gKA;EACE,WAAO;EAAP,OAAO;A5C+gKT;;A6CjhKA;EACE,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;EAGtB,eAAe;EACf,gBAAgB;EnCQd,sBP6NgC;AH8yJpC;;A6CzgKA;EACE,WAAW;EACX,c1CRgB;E0CShB,mBAAmB;A7C4gKrB;;AKnhKE;EwCWE,UAAU;EACV,c1Cdc;E0Ced,qBAAqB;EACrB,yB1CtBc;AHkiKlB;;A6CthKA;EAcI,c1ClBc;E0CmBd,yB1C1Bc;AHsiKlB;;A6CngKA;EACE,kBAAkB;EAClB,cAAc;EACd,wB1C28ByC;E0Cx8BzC,sB1C3Ca;E0C4Cb,sC1ClCa;AHsiKf;;A6C3gKA;EnCjBI,+BmC2BkC;EnC1BlC,gCmC0BkC;A7CsgKtC;;A6ChhKA;EnCHI,mCmCiBqC;EnChBrC,kCmCgBqC;A7CugKzC;;A6CrhKA;EAmBI,c1ClDc;E0CmDd,oBAAoB;EACpB,sB1C1DW;AHgkKf;;A6C3hKA;EA0BI,UAAU;EACV,W1ChEW;E0CiEX,yB1CrCa;E0CsCb,qB1CtCa;AH2iKjB;;A6CliKA;EAiCI,mBAAmB;A7CqgKvB;;A6CtiKA;EAoCM,gB1C4J2B;E0C3J3B,qB1C2J2B;AH22JjC;;A6Cx/JI;EACE,uBAAmB;EAAnB,mBAAmB;A7C2/JzB;;A6C5/JI;EnCtBA,kCPsKgC;EOlLhC,0BmCwCwC;A7C2/J5C;;A6CjgKI;EnClCA,gCPkLgC;EOtKhC,4BmCiC0C;A7C2/J9C;;A6CtgKI;EAeM,aAAa;A7C2/JvB;;A6C1gKI;EAmBM,qB1C0HuB;E0CzHvB,oBAAoB;A7C2/J9B;;A6C/gKI;EAuBQ,iB1CsHqB;E0CrHrB,sB1CqHqB;AHu4JjC;;AcvjKI;E+BmCA;IACE,uBAAmB;IAAnB,mBAAmB;E7CwhKvB;E6CzhKE;InCtBA,kCPsKgC;IOlLhC,0BmCwCwC;E7CuhK1C;E6C7hKE;InClCA,gCPkLgC;IOtKhC,4BmCiC0C;E7CshK5C;E6CjiKE;IAeM,aAAa;E7CqhKrB;E6CpiKE;IAmBM,qB1C0HuB;I0CzHvB,oBAAoB;E7CohK5B;E6CxiKE;IAuBQ,iB1CsHqB;I0CrHrB,sB1CqHqB;EH+5J/B;AACF;;AchlKI;E+BmCA;IACE,uBAAmB;IAAnB,mBAAmB;E7CijKvB;E6CljKE;InCtBA,kCPsKgC;IOlLhC,0BmCwCwC;E7CgjK1C;E6CtjKE;InClCA,gCPkLgC;IOtKhC,4BmCiC0C;E7C+iK5C;E6C1jKE;IAeM,aAAa;E7C8iKrB;E6C7jKE;IAmBM,qB1C0HuB;I0CzHvB,oBAAoB;E7C6iK5B;E6CjkKE;IAuBQ,iB1CsHqB;I0CrHrB,sB1CqHqB;EHw7J/B;AACF;;AczmKI;E+BmCA;IACE,uBAAmB;IAAnB,mBAAmB;E7C0kKvB;E6C3kKE;InCtBA,kCPsKgC;IOlLhC,0BmCwCwC;E7CykK1C;E6C/kKE;InClCA,gCPkLgC;IOtKhC,4BmCiC0C;E7CwkK5C;E6CnlKE;IAeM,aAAa;E7CukKrB;E6CtlKE;IAmBM,qB1C0HuB;I0CzHvB,oBAAoB;E7CskK5B;E6C1lKE;IAuBQ,iB1CsHqB;I0CrHrB,sB1CqHqB;EHi9J/B;AACF;;AcloKI;E+BmCA;IACE,uBAAmB;IAAnB,mBAAmB;E7CmmKvB;E6CpmKE;InCtBA,kCPsKgC;IOlLhC,0BmCwCwC;E7CkmK1C;E6CxmKE;InClCA,gCPkLgC;IOtKhC,4BmCiC0C;E7CimK5C;E6C5mKE;IAeM,aAAa;E7CgmKrB;E6C/mKE;IAmBM,qB1C0HuB;I0CzHvB,oBAAoB;E7C+lK5B;E6CnnKE;IAuBQ,iB1CsHqB;I0CrHrB,sB1CqHqB;EH0+J/B;AACF;;A6CllKA;EnCnHI,gBmCoHsB;A7CqlK1B;;A6CtlKA;EAII,qB1CmG6B;AHm/JjC;;A6C1lKA;EAOM,sBAAsB;A7CulK5B;;A8ChuKE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB+nKlE;;AKxtKE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9CmuKjD;;A8C1uKE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlB0oKlE;;A8ChvKE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB+oKlE;;AKxuKE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9CmvKjD;;A8C1vKE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlB0pKlE;;A8ChwKE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB+pKlE;;AKxvKE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9CmwKjD;;A8C1wKE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlB0qKlE;;A8ChxKE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB+qKlE;;AKxwKE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9CmxKjD;;A8C1xKE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlB0rKlE;;A8ChyKE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB+rKlE;;AKxxKE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9CmyKjD;;A8C1yKE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlB0sKlE;;A8ChzKE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB+sKlE;;AKxyKE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9CmzKjD;;A8C1zKE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlB0tKlE;;A8Ch0KE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB+tKlE;;AKxzKE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9Cm0KjD;;A8C10KE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlB0uKlE;;A8Ch1KE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB+uKlE;;AKx0KE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9Cm1KjD;;A8C11KE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlB0vKlE;;A+Cn2KA;EACE,YAAY;E3C8HR,iBAtCY;E2CtFhB,gB5C6R+B;E4C5R/B,cAAc;EACd,W5CYa;E4CXb,yB5CCa;E4CAb,WAAW;A/Cs2Kb;;AKj2KE;E0CDE,W5CMW;E4CLX,qBAAqB;A/Cs2KzB;;AKl2KE;E0CCI,YAAY;A/Cq2KlB;;A+C11KA;EACE,UAAU;EACV,6BAA6B;EAC7B,SAAS;A/C61KX;;A+Cv1KA;EACE,oBAAoB;A/C01KtB;;AgDh4KA;EAGE,8B7Cq4BuC;E6Cr4BvC,iB7Cq4BuC;E6Cp4BvC,gB7Co4BuC;ECzwBnC,mBAtCY;E4ClFhB,2C7CAa;E6CCb,4BAA4B;EAC5B,oC7Cs4BmD;E6Cr4BnD,gD7COa;E6CNb,UAAU;EtCOR,sBP83BsC;AH4/I1C;;AgD54KA;EAeI,sB7C03BsC;AHugJ1C;;AgDh5KA;EAmBI,UAAU;AhDi4Kd;;AgDp5KA;EAuBI,cAAc;EACd,UAAU;AhDi4Kd;;AgDz5KA;EA4BI,aAAa;AhDi4KjB;;AgD73KA;EACE,oBAAa;EAAb,aAAa;EACb,sBAAmB;EAAnB,mBAAmB;EACnB,wB7Cs2BwC;E6Cr2BxC,c7CvBgB;E6CwBhB,2C7C9Ba;E6C+Bb,4BAA4B;EAC5B,4C7C82BoD;EO13BlD,2CQmH4D;ERlH5D,4CQkH4D;AlB2xKhE;;AgD93KA;EACE,gB7C61BwC;AHoiJ1C;;AiDv6KA;EAEE,gBAAgB;AjDy6KlB;;AiD36KA;EAKI,kBAAkB;EAClB,gBAAgB;AjD06KpB;;AiDr6KA;EACE,eAAe;EACf,MAAM;EACN,OAAO;EACP,a9C2pBsC;E8C1pBtC,aAAa;EACb,WAAW;EACX,YAAY;EACZ,gBAAgB;EAGhB,UAAU;AjDs6KZ;;AiD/5KA;EACE,kBAAkB;EAClB,WAAW;EACX,c9C24BuC;E8Cz4BvC,oBAAoB;AjDi6KtB;;AiD95KE;E7B3BI,2CjBg8BoD;EiBh8BpD,mCjBg8BoD;EiBh8BpD,oEjBg8BoD;E8Cn6BtD,sC9Ci6BmD;E8Cj6BnD,8B9Ci6BmD;AHggJvD;;AoB17KM;E6BuBJ;I7BtBM,gBAAgB;EpB87KtB;AACF;;AiDr6KE;EACE,uB9C+5BoC;E8C/5BpC,e9C+5BoC;AHygJxC;;AiDp6KE;EACE,8B9C45B2C;E8C55B3C,sB9C45B2C;AH2gJ/C;;AiDn6KA;EACE,oBAAa;EAAb,aAAa;EACb,6B/BmF8D;AlBm1KhE;;AiDx6KA;EAKI,8B/BgF4D;E+B/E5D,gBAAgB;AjDu6KpB;;AiD76KA;;EAWI,oBAAc;EAAd,cAAc;AjDu6KlB;;AiDl7KA;EAeI,gBA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E+CzxBnC,yB/CrDS;AHmsLf;;AkDzoLA;EACE,iB/CmxBuC;AHy3JzC;;AkD7oLA;EAII,QAAQ;EACR,a/C+wBqC;E+C9wBrC,c/C6wBqC;AHg4JzC;;AkDnpLA;EASM,OAAO;EACP,oC/C0wBmC;E+CzwBnC,uB/CrES;AHmtLf;;AkDznLA;EACE,gB/CyuBuC;E+CxuBvC,uB/C8uBuC;E+C7uBvC,W/CvGa;E+CwGb,kBAAkB;EAClB,sB/C/Fa;EOCX,sBP6NgC;AH8/KpC;;AoD7uLA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,ajD6qBsC;EiD5qBtC,cAAc;EACd,gBjDy2BuC;EgD92BvC,kMhDmRiN;EgDjRjN,kBAAkB;EAClB,gBhD2R+B;EgD1R/B,gBhD+R+B;EgD9R/B,gBAAgB;EAChB,iBAAiB;EACjB,qBAAqB;EACrB,iBAAiB;EACjB,oBAAoB;EACpB,sBAAsB;EACtB,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,gBAAgB;E/CgHZ,mBAtCY;EgD7EhB,qBAAqB;EACrB,sBjDNa;EiDOb,4BAA4B;EAC5B,oCjDEa;EOCX,qBP8N+B;AH0hLnC;;AoD1wLA;EAoBI,kBAAkB;EAClB,cAAc;EACd,WjDy2BoC;EiDx2BpC,cjDy2BqC;EiDx2BrC,gBjDwN+B;AHkiLnC;;AoDlxLA;EA4BM,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,yBAAyB;EACzB,mBAAmB;ApD0vLzB;;AoDrvLA;EACE,qBjD01BuC;AH85JzC;;AoDzvLA;EAII,2BlCqG4D;AlBopLhE;;AoD7vLA;EAOM,SAAS;EACT,6BAAgE;EAChE,qCjDq1BiE;AHq6JvE;;AoDnwLA;EAaM,WjD0L2B;EiDzL3B,6BAAgE;EAChE,sBjD7CS;AHuyLf;;AoDrvLA;EACE,mBjDs0BuC;AHk7JzC;;AoDzvLA;EAII,yBlCiF4D;EkChF5D,ajDk0BqC;EiDj0BrC,YjDg0BoC;EiD/zBpC,gBAAgC;ApDyvLpC;;AoDhwLA;EAUM,OAAO;EACP,oCAA2F;EAC3F,uCjD8zBiE;AH47JvE;;AoDtwLA;EAgBM,SjDmK2B;EiDlK3B,oCAA2F;EAC3F,wBjDpES;AH8zLf;;AoDrvLA;EACE,kBjD+yBuC;AHy8JzC;;AoDzvLA;EAII,wBlC0D4D;AlB+rLhE;;AoD7vLA;EAOM,MAAM;EACN,oCAA2F;EAC3F,wCjD0yBiE;AHg9JvE;;AoDnwLA;EAaM,QjD+I2B;EiD9I3B,oCAA2F;EAC3F,yBjDxFS;AHk1Lf;;AoDzwLA;EAqBI,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,cAAc;EACd,WjDsxBoC;EiDrxBpC,oBAAsC;EACtC,WAAW;EACX,gCjD0wBuD;AH8+J3D;;AoDpvLA;EACE,oBjD+wBuC;AHw+JzC;;AoDxvLA;EAII,0BlC0B4D;EkCzB5D,ajD2wBqC;EiD1wBrC,YjDywBoC;EiDxwBpC,gBAAgC;ApDwvLpC;;AoD/vLA;EAUM,QAAQ;EACR,oCjDqwBmC;EiDpwBnC,sCjDuwBiE;AHk/JvE;;AoDrwLA;EAgBM,UjD4G2B;EiD3G3B,oCjD+vBmC;EiD9vBnC,uBjD3HS;AHo3Lf;;AoDnuLA;EACE,uBjDguBwC;EiD/tBxC,gBAAgB;EhD3BZ,eAtCY;EgDoEhB,yBjDytByD;EiDxtBzD,gCAAyE;E1CnIvE,0CQmH4D;ERlH5D,2CQkH4D;AlBuvLhE;;AoD7uLA;EAUI,aAAa;ApDuuLjB;;AoDnuLA;EACE,uBjDktBwC;EiDjtBxC,cjDxJgB;AH83LlB;;AqDj4LA;EACE,kBAAkB;ArDo4LpB;;AqDj4LA;EACE,uBAAmB;EAAnB,mBAAmB;ArDo4LrB;;AqDj4LA;EACE,kBAAkB;EAClB,WAAW;EACX,gBAAgB;ArDo4LlB;;AsD35LE;EACE,cAAc;EACd,WAAW;EACX,WAAW;AtD85Lf;;AqDt4LA;EACE,kBAAkB;EAClB,aAAa;EACb,WAAW;EACX,WAAW;EACX,mBAAmB;EACnB,mCAA2B;EAA3B,2BAA2B;EjClBvB,8CjBqjCkF;EiBrjClF,sCjBqjCkF;EiBrjClF,0EjBqjCkF;AHu2JxF;;AoBx5LM;EiCQN;IjCPQ,gBAAgB;EpB45LtB;AACF;;AqD54LA;;;EAGE,cAAc;ArD+4LhB;;AqD54LA;;EAEE,mCAA2B;EAA3B,2BAA2B;A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4pMtD;;AyDlqME;EACE,oCAAmC;AzDqqMvC;;AK3pME;;;EoDLI,oCAAgD;AzDsqMtD;;AyD5qME;EACE,oCAAmC;AzD+qMvC;;AKrqME;;;EoDLI,oCAAgD;AzDgrMtD;;AyDtrME;EACE,oCAAmC;AzDyrMvC;;AK/qME;;;EoDLI,oCAAgD;AzD0rMtD;;AyDhsME;EACE,oCAAmC;AzDmsMvC;;AKzrME;;;EoDLI,oCAAgD;AzDosMtD;;AyD1sME;EACE,oCAAmC;AzD6sMvC;;AKnsME;;;EoDLI,oCAAgD;AzD8sMtD;;AyDptME;EACE,oCAAmC;AzDutMvC;;AK7sME;;;EoDLI,oCAAgD;AzDwtMtD;;A0DvtMA;EACE,iCAAmC;A1D0tMrC;;A0DvtMA;EACE,wCAAwC;A1D0tM1C;;A2DruMA;EAAkB,oCAAoD;A3DyuMtE;;A2DxuMA;EAAkB,wCAAwD;A3D4uM1E;;A2D3uMA;EAAkB,0CAA0D;A3D+uM5E;;A2D9uMA;EAAkB,2CAA2D;A3DkvM7E;;A2DjvMA;EAAkB,yCAAyD;A3DqvM3E;;A2DnvMA;EAAmB,oBAAoB;A3DuvMvC;;A2DtvMA;EAAmB,wBAAwB;A3D0vM3C;;A2DzvMA;EAAmB,0BAA0B;A3D6vM7C;;A2D5vMA;EAAmB,2BAA2B;A3DgwM9C;;A2D/vMA;EAAmB,yBAAyB;A3DmwM5C;;A2DhwME;EACE,gCAA+B;A3DmwMnC;;A2DpwME;EACE,gCAA+B;A3DuwMnC;;A2DxwME;EACE,gCAA+B;A3D2wMnC;;A2D5wME;EACE,gCAA+B;A3D+wMnC;;A2DhxME;EACE,gCAA+B;A3DmxMnC;;A2DpxME;EACE,gCAA+B;A3DuxMnC;;A2DxxME;EACE,gCAA+B;A3D2xMnC;;A2D5xME;EACE,gCAA+B;A3D+xMnC;;A2D3xMA;EACE,6BAA+B;A3D8xMjC;;A2DvxMA;EACE,gCAA2C;A3D0xM7C;;A2DvxMA;EACE,iCAAwC;A3D0xM1C;;A2DvxMA;EACE,0CAAiD;EACjD,2CAAkD;A3D0xMpD;;A2DvxMA;EACE,2CAAkD;EAClD,8CAAqD;A3D0xMvD;;A2DvxMA;EACE,8CAAqD;EACrD,6CAAoD;A3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lD;;AuE92OQ;;EAEE,iCAA0C;AvEi3OpD;;AuE/2OQ;;EAEE,+BAAsC;AvEk3OhD;;AuEj4OQ;EAAgC,yBAA4B;AvEq4OpE;;AuEp4OQ;;EAEE,6BAAoC;AvEu4O9C;;AuEr4OQ;;EAEE,+BAAwC;AvEw4OlD;;AuEt4OQ;;EAEE,gCAA0C;AvEy4OpD;;AuEv4OQ;;EAEE,8BAAsC;AvE04OhD;;AuEz5OQ;EAAgC,uBAA4B;AvE65OpE;;AuE55OQ;;EAEE,2BAAoC;AvE+5O9C;;AuE75OQ;;EAEE,6BAAwC;AvEg6OlD;;AuE95OQ;;EAEE,8BAA0C;AvEi6OpD;;AuE/5OQ;;EAEE,4BAAsC;AvEk6OhD;;AuEj7OQ;EAAgC,yBAA4B;AvEq7OpE;;AuEp7OQ;;EAEE,6BAAoC;AvEu7O9C;;AuEr7OQ;;EAEE,+BAAwC;AvEw7OlD;;AuEt7OQ;;EAEE,gCAA0C;AvEy7OpD;;AuEv7OQ;;EAEE,8BAAsC;AvE07OhD;;AuEz8OQ;EAAgC,uBAA4B;AvE68OpE;;AuE58OQ;;EAEE,2BAAoC;AvE+8O9C;;AuE78OQ;;EAEE,6BAAwC;AvEg9OlD;;AuE98OQ;;EAEE,8BAA0C;AvEi9OpD;;AuE/8OQ;;EAEE,4BAAsC;AvEk9OhD;;AuEj+OQ;EAAgC,qBAA4B;AvEq+OpE;;AuEp+OQ;;EAEE,yBAAoC;AvEu+O9C;;AuEr+OQ;;EAEE,2BAAwC;AvEw+OlD;;AuEt+OQ;;EAEE,4BAA0C;AvEy+OpD;;AuEv+OQ;;EAEE,0BAAsC;AvE0+OhD;;AuEz/OQ;EAAgC,2BAA4B;AvE6/OpE;;AuE5/OQ;;EAEE,+BAAoC;AvE+/O9C;;AuE7/OQ;;EAEE,iCAAwC;AvEggPlD;;AuE9/OQ;;EAEE,kCAA0C;AvEigPpD;;AuE//OQ;;EAEE,gCAAsC;AvEkgPhD;;AuEjhPQ;EAAgC,0BAA4B;AvEqhPpE;;AuEphPQ;;EAEE,8BAAoC;AvEuhP9C;;AuErhPQ;;EAEE,gCAAwC;AvEwhPlD;;AuEthPQ;;EAEE,iCAA0C;AvEyhPpD;;AuEvhPQ;;EAEE,+BAAsC;AvE0hPhD;;AuEziPQ;EAAgC,wBAA4B;AvE6iPpE;;AuE5iPQ;;EAEE,4BAAoC;AvE+iP9C;;AuE7iPQ;;EAEE,8BAAwC;AvEgjPlD;;AuE9iPQ;;EAEE,+BAA0C;AvEijPpD;;AuE/iPQ;;EAEE,6BAAsC;AvEkjPhD;;AuEjkPQ;EAAgC,0BAA4B;AvEqkPpE;;AuEpkPQ;;EAEE,8BAAoC;AvEukP9C;;AuErkPQ;;EAEE,gCAAwC;AvEwkPlD;;AuEtkPQ;;EAEE,iCAA0C;AvEykPpD;;AuEvkPQ;;EAEE,+BAAsC;AvE0kPhD;;AuEzlPQ;EAAgC,wBAA4B;AvE6lPpE;;AuE5lPQ;;EAEE,4BAAoC;AvE+lP9C;;AuE7lPQ;;EAEE,8BAAwC;AvEgmPlD;;AuE9lPQ;;EAEE,+BAA0C;AvEimPpD;;AuE/lPQ;;EAEE,6BAAsC;AvEkmPhD;;AuE1lPQ;EAAwB,2BAA2B;AvE8lP3D;;AuE7lPQ;;EAEE,+BAA+B;AvEgmPzC;;AuE9lPQ;;EAEE,iCAAiC;AvEimP3C;;AuE/lPQ;;EAEE,kCAAkC;AvEkmP5C;;AuEhmPQ;;EAEE,gCAAgC;AvEmmP1C;;AuElnPQ;EAAwB,0BAA2B;AvEsnP3D;;AuErnPQ;;EAEE,8BAA+B;AvEwnPzC;;AuEtnPQ;;EAEE,gCAAiC;AvEynP3C;;AuEvnPQ;;EAEE,iCAAkC;AvE0nP5C;;AuExnPQ;;EAEE,+BAAgC;AvE2nP1C;;AuE1oPQ;EAAwB,wBAA2B;AvE8oP3D;;AuE7oPQ;;EAEE,4BAA+B;AvEgpPzC;;AuE9oPQ;;EAEE,8BAAiC;AvEipP3C;;AuE/oPQ;;EAEE,+BAAkC;AvEkpP5C;;AuEhpPQ;;EAEE,6BAAgC;AvEmpP1C;;AuElqPQ;EAAwB,0BAA2B;AvEsqP3D;;AuErqPQ;;EAEE,8BAA+B;AvEwqPzC;;AuEtqPQ;;EAEE,gCAAiC;AvEyqP3C;;AuEvqPQ;;EAEE,iCAAkC;AvE0qP5C;;AuExqPQ;;EAEE,+BAAgC;AvE2qP1C;;AuE1rPQ;EAAwB,wBAA2B;AvE8rP3D;;AuE7rPQ;;EAEE,4BAA+B;AvEgsPzC;;AuE9rPQ;;EAEE,8BAAiC;AvEisP3C;;AuE/rPQ;;EAEE,+BAAkC;AvEksP5C;;AuEhsPQ;;EAEE,6BAAgC;AvEmsP1C;;AuE7rPI;EAAmB,uBAAuB;AvEisP9C;;AuEhsPI;;EAEE,2BAA2B;AvEmsPjC;;AuEjsPI;;EAEE,6BAA6B;AvEosPnC;;AuElsPI;;EAEE,8BAA8B;AvEqsPpC;;AuEnsPI;;EAEE,4BAA4B;AvEssPlC;;Ac/sPI;EyDlDI;IAAgC,oBAA4B;EvEswPlE;EuErwPM;;IAEE,wBAAoC;EvEuwP5C;EuErwPM;;IAEE,0BAAwC;EvEuwPhD;EuErwPM;;IAEE,2BAA0C;EvEuwPlD;EuErwPM;;IAEE,yBAAsC;EvEuwP9C;EuEtxPM;IAAgC,0BAA4B;EvEyxPlE;EuExxPM;;IAEE,8BAAoC;EvE0xP5C;EuExxPM;;IAEE,gCAAwC;EvE0xPhD;EuExxPM;;IAEE,iCAA0C;EvE0xPlD;EuExxPM;;IAEE,+BAAsC;EvE0xP9C;EuEzyPM;IAAgC,yBAA4B;EvE4yPlE;EuE3yPM;;IAEE,6BAAoC;EvE6yP5C;EuE3yPM;;IAEE,+BAAwC;EvE6yPhD;EuE3yPM;;IAEE,gCAA0C;EvE6yPlD;EuE3yPM;;IAEE,8BAAsC;EvE6yP9C;EuE5zPM;IAAgC,uBAA4B;EvE+zPlE;EuE9zPM;;IAEE,2BAAoC;EvEg0P5C;EuE9zPM;;IAEE,6BAAwC;EvEg0PhD;EuE9zPM;;IAEE,8BAA0C;EvEg0PlD;EuE9zPM;;IAEE,4BAAsC;EvEg0P9C;EuE/0PM;IAAgC,yBAA4B;EvEk1PlE;EuEj1PM;;IAEE,6BAAoC;EvEm1P5C;EuEj1PM;;IAEE,+BAAwC;EvEm1PhD;EuEj1PM;;IAEE,gCAA0C;EvEm1PlD;EuEj1PM;;IAEE,8BAAsC;EvEm1P9C;EuEl2PM;IAAgC,uBAA4B;EvEq2PlE;EuEp2PM;;IAEE,2BAAoC;EvEs2P5C;EuEp2PM;;IAEE,6BAAwC;EvEs2PhD;EuEp2PM;;IAEE,8BAA0C;EvEs2PlD;EuEp2PM;;IAEE,4BAAsC;EvEs2P9C;EuEr3PM;IAAgC,qBAA4B;EvEw3PlE;EuEv3PM;;IAEE,yBAAoC;EvEy3P5C;EuEv3PM;;IAEE,2BAAwC;EvEy3PhD;EuEv3PM;;IAEE,4BAA0C;EvEy3PlD;EuEv3PM;;IAEE,0BAAsC;EvEy3P9C;EuEx4PM;IAAgC,2BAA4B;EvE24PlE;EuE14PM;;IAEE,+BAAoC;EvE44P5C;EuE14PM;;IAEE,iCAAwC;EvE44PhD;EuE14PM;;IAEE,kCAA0C;EvE44PlD;EuE14PM;;IAEE,gCAAsC;EvE44P9C;EuE35PM;IAAgC,0BAA4B;EvE85PlE;EuE75PM;;IAEE,8BAAoC;EvE+5P5C;EuE75PM;;IAEE,gCAAwC;EvE+5PhD;EuE75PM;;IAEE,iCAA0C;EvE+5PlD;EuE75PM;;IAEE,+BAAsC;EvE+5P9C;EuE96PM;IAAgC,wBAA4B;EvEi7PlE;EuEh7PM;;IAEE,4BAAoC;EvEk7P5C;EuEh7PM;;IAEE,8BAAwC;EvEk7PhD;EuEh7PM;;IAEE,+BAA0C;EvEk7PlD;EuEh7PM;;IAEE,6BAAsC;EvEk7P9C;EuEj8PM;IAAgC,0BAA4B;EvEo8PlE;EuEn8PM;;IAEE,8BAAoC;EvEq8P5C;EuEn8PM;;IAEE,gCAAwC;EvEq8PhD;EuEn8PM;;IAEE,iCAA0C;EvEq8PlD;EuEn8PM;;IAEE,+BAAsC;EvEq8P9C;EuEp9PM;IAAgC,wBAA4B;EvEu9PlE;EuEt9PM;;IAEE,4BAAoC;EvEw9P5C;EuEt9PM;;IAEE,8BAAwC;EvEw9PhD;EuEt9PM;;IAEE,+BAA0C;EvEw9PlD;EuEt9PM;;IAEE,6BAAsC;EvEw9P9C;EuEh9PM;IAAwB,2BAA2B;EvEm9PzD;EuEl9PM;;IAEE,+BAA+B;EvEo9PvC;EuEl9PM;;IAEE,iCAAiC;EvEo9PzC;EuEl9PM;;IAEE,kCAAkC;EvEo9P1C;EuEl9PM;;IAEE,gCAAgC;EvEo9PxC;EuEn+PM;IAAwB,0BAA2B;EvEs+PzD;EuEr+PM;;IAEE,8BAA+B;EvEu+PvC;EuEr+PM;;IAEE,gCAAiC;EvEu+PzC;EuEr+PM;;IAEE,iCAAkC;EvEu+P1C;EuEr+PM;;IAEE,+BAAgC;EvEu+PxC;EuEt/PM;IAAwB,wBAA2B;EvEy/PzD;EuEx/PM;;IAEE,4BAA+B;EvE0/PvC;EuEx/PM;;IAEE,8BAAiC;EvE0/PzC;EuEx/PM;;IAEE,+BAAkC;EvE0/P1C;EuEx/PM;;IAEE,6BAAgC;EvE0/PxC;EuEzgQM;IAAwB,0BAA2B;EvE4gQzD;EuE3gQM;;IAEE,8BAA+B;EvE6gQvC;EuE3gQM;;IAEE,gCAAiC;EvE6gQzC;EuE3gQM;;IAEE,iCAAkC;EvE6gQ1C;EuE3gQM;;IAEE,+BAAgC;EvE6gQxC;EuE5hQM;IAAwB,wBAA2B;EvE+hQzD;EuE9hQM;;IAEE,4BAA+B;EvEgiQvC;EuE9hQM;;IAEE,8BAAiC;EvEgiQzC;EuE9hQM;;IAEE,+BAAkC;EvEgiQ1C;EuE9hQM;;IAEE,6BAAgC;EvEgiQxC;EuE1hQE;IAAmB,uBAAuB;EvE6hQ5C;EuE5hQE;;IAEE,2BAA2B;EvE8hQ/B;EuE5hQE;;IAEE,6BAA6B;EvE8hQjC;EuE5hQE;;IAEE,8BAA8B;EvE8hQlC;EuE5hQE;;IAEE,4BAA4B;EvE8hQhC;AACF;;AcxiQI;EyDlDI;IAAgC,oBAA4B;EvE+lQlE;EuE9lQM;;IAEE,wBAAoC;EvEgmQ5C;EuE9lQM;;IAEE,0BAAwC;EvEgmQhD;EuE9lQM;;IAEE,2BAA0C;EvEgmQlD;EuE9lQM;;IAEE,yBAAsC;EvEgmQ9C;EuE/mQM;IAAgC,0BAA4B;EvEknQlE;EuEjnQM;;IAEE,8BAAoC;EvEmnQ5C;EuEjnQM;;IAEE,gCAAwC;EvEmnQhD;EuEjnQM;;IAEE,iCAA0C;EvEmnQlD;EuEjnQM;;IAEE,+BAAsC;EvEmnQ9C;EuEloQM;IAAgC,yBAA4B;EvEqoQlE;EuEpoQM;;IAEE,6BAAoC;EvEsoQ5C;EuEpoQM;;IAEE,+BAAwC;EvEsoQhD;EuEpoQM;;IAEE,gCAA0C;EvEsoQlD;EuEpoQM;;IAEE,8BAAsC;EvEsoQ9C;EuErpQM;IAAgC,uBAA4B;EvEwpQlE;EuEvpQM;;IAEE,2BAAoC;EvEypQ5C;EuEvpQM;;IAEE,6BAAwC;EvEypQhD;EuEvpQM;;IAEE,8BAA0C;EvEypQlD;EuEvpQM;;IAEE,4BAAsC;EvEypQ9C;EuExqQM;IAAgC,yBAA4B;EvE2qQlE;EuE1qQM;;IAEE,6BAAoC;EvE4qQ5C;EuE1qQM;;IAEE,+BAAwC;EvE4qQhD;EuE1qQM;;IAEE,gCAA0C;EvE4qQlD;EuE1qQM;;IAEE,8BAAsC;EvE4qQ9C;EuE3rQM;IAAgC,uBAA4B;EvE8rQlE;EuE7rQM;;IAEE,2BAAoC;EvE+rQ5C;EuE7rQM;;IAEE,6BAAwC;EvE+rQhD;EuE7rQM;;IAEE,8BAA0C;EvE+rQlD;EuE7rQM;;IAEE,4BAAsC;EvE+rQ9C;EuE9sQM;IAAgC,qBAA4B;EvEitQlE;EuEhtQM;;IAEE,yBAAoC;EvEktQ5C;EuEhtQM;;IAEE,2BAAwC;EvEktQhD;EuEhtQM;;IAEE,4BAA0C;EvEktQlD;EuEhtQM;;IAEE,0BAAsC;EvEktQ9C;EuEjuQM;IAAgC,2BAA4B;EvEouQlE;EuEnuQM;;IAEE,+BAAoC;EvEquQ5C;EuEnuQM;;IAEE,iCAAwC;EvEquQhD;EuEnuQM;;IAEE,kCAA0C;EvEquQlD;EuEnuQM;;IAEE,gCAAsC;EvEquQ9C;EuEpvQM;IAAgC,0BAA4B;EvEuvQlE;EuEtvQM;;IAEE,8BAAoC;EvEwvQ5C;EuEtvQM;;IAEE,gCAAwC;EvEwvQhD;EuEtvQM;;IAEE,iCAA0C;EvEwvQlD;EuEtvQM;;IAEE,+BAAsC;EvEwvQ9C;EuEvwQM;IAAgC,wBAA4B;EvE0wQlE;EuEzwQM;;IAEE,4BAAoC;EvE2wQ5C;EuEzwQM;;IAEE,8BAAwC;EvE2wQhD;EuEzwQM;;IAEE,+BAA0C;EvE2wQlD;EuEzwQM;;IAEE,6BAAsC;EvE2wQ9C;EuE1xQM;IAAgC,0BAA4B;EvE6xQlE;EuE5xQM;;IAEE,8BAAoC;EvE8xQ5C;EuE5xQM;;IAEE,gCAAwC;EvE8xQhD;EuE5xQM;;IAEE,iCAA0C;EvE8xQlD;EuE5xQM;;IAEE,+BAAsC;EvE8xQ9C;EuE7yQM;IAAgC,wBAA4B;EvEgzQlE;EuE/yQM;;IAEE,4BAAoC;EvEizQ5C;EuE/yQM;;IAEE,8BAAwC;EvEizQhD;EuE/yQM;;IAEE,+BAA0C;EvEizQlD;EuE/yQM;;IAEE,6BAAsC;EvEizQ9C;EuEzyQM;IAAwB,2BAA2B;EvE4yQzD;EuE3yQM;;IAEE,+BAA+B;EvE6yQvC;EuE3yQM;;IAEE,iCAAiC;EvE6yQzC;EuE3yQM;;IAEE,kCAAkC;EvE6yQ1C;EuE3yQM;;IAEE,gCAAgC;EvE6yQxC;EuE5zQM;IAAwB,0BAA2B;EvE+zQzD;EuE9zQM;;IAEE,8BAA+B;EvEg0QvC;EuE9zQM;;IAEE,gCAAiC;EvEg0QzC;EuE9zQM;;IAEE,iCAAkC;EvEg0Q1C;EuE9zQM;;IAEE,+BAAgC;EvEg0QxC;EuE/0QM;IAAwB,wBAA2B;EvEk1QzD;EuEj1QM;;IAEE,4BAA+B;EvEm1QvC;EuEj1QM;;IAEE,8BAAiC;EvEm1QzC;EuEj1QM;;IAEE,+BAAkC;EvEm1Q1C;EuEj1QM;;IAEE,6BAAgC;EvEm1QxC;EuEl2QM;IAAwB,0BAA2B;EvEq2QzD;EuEp2QM;;IAEE,8BAA+B;EvEs2QvC;EuEp2QM;;IAEE,gCAAiC;EvEs2QzC;EuEp2QM;;IAEE,iCAAkC;EvEs2Q1C;EuEp2QM;;IAEE,+BAAgC;EvEs2QxC;EuEr3QM;IAAwB,wBAA2B;EvEw3QzD;EuEv3QM;;IAEE,4BAA+B;EvEy3QvC;EuEv3QM;;IAEE,8BAAiC;EvEy3QzC;EuEv3QM;;IAEE,+BAAkC;EvEy3Q1C;EuEv3QM;;IAEE,6BAAgC;EvEy3QxC;EuEn3QE;IAAmB,uBAAuB;EvEs3Q5C;EuEr3QE;;IAEE,2BAA2B;EvEu3Q/B;EuEr3QE;;IAEE,6BAA6B;EvEu3QjC;EuEr3QE;;IAEE,8BAA8B;EvEu3QlC;EuEr3QE;;IAEE,4BAA4B;EvEu3QhC;AACF;;Acj4QI;EyDlDI;IAAgC,oBAA4B;EvEw7QlE;EuEv7QM;;IAEE,wBAAoC;EvEy7Q5C;EuEv7QM;;IAEE,0BAAwC;EvEy7QhD;EuEv7QM;;IAEE,2BAA0C;EvEy7QlD;EuEv7QM;;IAEE,yBAAsC;EvEy7Q9C;EuEx8QM;IAAgC,0BAA4B;EvE28QlE;EuE18QM;;IAEE,8BAAoC;EvE48Q5C;EuE18QM;;IAEE,gCAAwC;EvE48QhD;EuE18QM;;IAEE,iCAA0C;EvE48QlD;EuE18QM;;IAEE,+BAAsC;EvE48Q9C;EuE39QM;IAAgC,yBAA4B;EvE89QlE;EuE79QM;;IAEE,6BAAoC;EvE+9Q5C;EuE79QM;;IAEE,+BAAwC;EvE+9QhD;EuE79QM;;IAEE,gCAA0C;EvE+9QlD;EuE79QM;;IAEE,8BAAsC;EvE+9Q9C;EuE9+QM;IAAgC,uBAA4B;EvEi/QlE;EuEh/QM;;IAEE,2BAAoC;EvEk/Q5C;EuEh/QM;;IAEE,6BAAwC;EvEk/QhD;EuEh/QM;;IAEE,8BAA0C;EvEk/QlD;EuEh/QM;;IAEE,4BAAsC;EvEk/Q9C;EuEjgRM;IAAgC,yBAA4B;EvEogRlE;EuEngRM;;IAEE,6BAAoC;EvEqgR5C;EuEngRM;;IAEE,+BAAwC;EvEqgRhD;EuEngRM;;IAEE,gCAA0C;EvEqgRlD;EuEngRM;;IAEE,8BAAsC;EvEqgR9C;EuEphRM;IAAgC,uBAA4B;EvEuhRlE;EuEthRM;;IAEE,2BAAoC;EvEwhR5C;EuEthRM;;IAEE,6BAAwC;EvEwhRhD;EuEthRM;;IAEE,8BAA0C;EvEwhRlD;EuEthRM;;IAEE,4BAAsC;EvEwhR9C;EuEviRM;IAAgC,qBAA4B;EvE0iRlE;EuEziRM;;IAEE,yBAAoC;EvE2iR5C;EuEziRM;;IAEE,2BAAwC;EvE2iRhD;EuEziRM;;IAEE,4BAA0C;EvE2iRlD;EuEziRM;;IAEE,0BAAsC;EvE2iR9C;EuE1jRM;IAAgC,2BAA4B;EvE6jRlE;EuE5jRM;;IAEE,+BAAoC;EvE8jR5C;EuE5jRM;;IAEE,iCAAwC;EvE8jRhD;EuE5jRM;;IAEE,kCAA0C;EvE8jRlD;EuE5jRM;;IAEE,gCAAsC;EvE8jR9C;EuE7kRM;IAAgC,0BAA4B;EvEglRlE;EuE/kRM;;IAEE,8BAAoC;EvEilR5C;EuE/kRM;;IAEE,gCAAwC;EvEilRhD;EuE/kRM;;IAEE,iCAA0C;EvEilRlD;EuE/kRM;;IAEE,+BAAsC;EvEilR9C;EuEhmRM;IAAgC,wBAA4B;EvEmmRlE;EuElmRM;;IAEE,4BAAoC;EvEomR5C;EuElmRM;;IAEE,8BAAwC;EvEomRhD;EuElmRM;;IAEE,+BAA0C;EvEomRlD;EuElmRM;;IAEE,6BAAsC;EvEomR9C;EuEnnRM;IAAgC,0BAA4B;EvEsnRlE;EuErnRM;;IAEE,8BAAoC;EvEunR5C;EuErnRM;;IAEE,gCAAwC;EvEunRhD;EuErnRM;;IAEE,iCAA0C;EvEunRlD;EuErnRM;;IAEE,+BAAsC;EvEunR9C;EuEtoRM;IAAgC,wBAA4B;EvEyoRlE;EuExoRM;;IAEE,4BAAoC;EvE0oR5C;EuExoRM;;IAEE,8BAAwC;EvE0oRhD;EuExoRM;;IAEE,+BAA0C;EvE0oRlD;EuExoRM;;IAEE,6BAAsC;EvE0oR9C;EuEloRM;IAAwB,2BAA2B;EvEqoRzD;EuEpoRM;;IAEE,+BAA+B;EvEsoRvC;EuEpoRM;;IAEE,iCAAiC;EvEsoRzC;EuEpoRM;;IAEE,kCAAkC;EvEsoR1C;EuEpoRM;;IAEE,gCAAgC;EvEsoRxC;EuErpRM;IAAwB,0BAA2B;EvEwpRzD;EuEvpRM;;IAEE,8BAA+B;EvEypRvC;EuEvpRM;;IAEE,gCAAiC;EvEypRzC;EuEvpRM;;IAEE,iCAAkC;EvEypR1C;EuEvpRM;;IAEE,+BAAgC;EvEypRxC;EuExqRM;IAAwB,wBAA2B;EvE2qRzD;EuE1qRM;;IAEE,4BAA+B;EvE4qRvC;EuE1qRM;;IAEE,8BAAiC;EvE4qRzC;EuE1qRM;;IAEE,+BAAkC;EvE4qR1C;EuE1qRM;;IAEE,6BAAgC;EvE4qRxC;EuE3rRM;IAAwB,0BAA2B;EvE8rRzD;EuE7rRM;;IAEE,8BAA+B;EvE+rRvC;EuE7rRM;;IAEE,gCAAiC;EvE+rRzC;EuE7rRM;;IAEE,iCAAkC;EvE+rR1C;EuE7rRM;;IAEE,+BAAgC;EvE+rRxC;EuE9sRM;IAAwB,wBAA2B;EvEitRzD;EuEhtRM;;IAEE,4BAA+B;EvEktRvC;EuEhtRM;;IAEE,8BAAiC;EvEktRzC;EuEhtRM;;IAEE,+BAAkC;EvEktR1C;EuEhtRM;;IAEE,6BAAgC;EvEktRxC;EuE5sRE;IAAmB,uBAAuB;EvE+sR5C;EuE9sRE;;IAEE,2BAA2B;EvEgtR/B;EuE9sRE;;IAEE,6BAA6B;EvEgtRjC;EuE9sRE;;IAEE,8BAA8B;EvEgtRlC;EuE9sRE;;IAEE,4BAA4B;EvEgtRhC;AACF;;Ac1tRI;EyDlDI;IAAgC,oBAA4B;EvEixRlE;EuEhxRM;;IAEE,wBAAoC;EvEkxR5C;EuEhxRM;;IAEE,0BAAwC;EvEkxRhD;EuEhxRM;;IAEE,2BAA0C;EvEkxRlD;EuEhxRM;;IAEE,yBAAsC;EvEkxR9C;EuEjyRM;IAAgC,0BAA4B;EvEoyRlE;EuEnyRM;;IAEE,8BAAoC;EvEqyR5C;EuEnyRM;;IAEE,gCAAwC;EvEqyRhD;EuEnyRM;;IAEE,iCAA0C;EvEqyRlD;EuEnyRM;;IAEE,+BAAsC;EvEqyR9C;EuEpzRM;IAAgC,yBAA4B;EvEuzRlE;EuEtzRM;;IAEE,6BAAoC;EvEwzR5C;EuEtzRM;;IAEE,+BAAwC;EvEwzRhD;EuEtzRM;;IAEE,gCAA0C;EvEwzRlD;EuEtzRM;;IAEE,8BAAsC;EvEwzR9C;EuEv0RM;IAAgC,uBAA4B;EvE00RlE;EuEz0RM;;IAEE,2BAAoC;EvE20R5C;EuEz0RM;;IAEE,6BAAwC;EvE20RhD;EuEz0RM;;IAEE,8BAA0C;EvE20RlD;EuEz0RM;;IAEE,4BAAsC;EvE20R9C;EuE11RM;IAAgC,yBAA4B;EvE61RlE;EuE51RM;;IAEE,6BAAoC;EvE81R5C;EuE51RM;;IAEE,+BAAwC;EvE81RhD;EuE51RM;;IAEE,gCAA0C;EvE81RlD;EuE51RM;;IAEE,8BAAsC;EvE81R9C;EuE72RM;IAAgC,uBAA4B;EvEg3RlE;EuE/2RM;;IAEE,2BAAoC;EvEi3R5C;EuE/2RM;;IAEE,6BAAwC;EvEi3RhD;EuE/2RM;;IAEE,8BAA0C;EvEi3RlD;EuE/2RM;;IAEE,4BAAsC;EvEi3R9C;EuEh4RM;IAAgC,qBAA4B;EvEm4RlE;EuEl4RM;;IAEE,yBAAoC;EvEo4R5C;EuEl4RM;;IAEE,2BAAwC;EvEo4RhD;EuEl4RM;;IAEE,4BAA0C;EvEo4RlD;EuEl4RM;;IAEE,0BAAsC;EvEo4R9C;EuEn5RM;IAAgC,2BAA4B;EvEs5RlE;EuEr5RM;;IAEE,+BAAoC;EvEu5R5C;EuEr5RM;;IAEE,iCAAwC;EvEu5RhD;EuEr5RM;;IAEE,kCAA0C;EvEu5RlD;EuEr5RM;;IAEE,gCAAsC;EvEu5R9C;EuEt6RM;IAAgC,0BAA4B;EvEy6RlE;EuEx6RM;;IAEE,8BAAoC;EvE06R5C;EuEx6RM;;IAEE,gCAAwC;EvE06RhD;EuEx6RM;;IAEE,iCAA0C;EvE06RlD;EuEx6RM;;IAEE,+BAAsC;EvE06R9C;EuEz7RM;IAAgC,wBAA4B;EvE47RlE;EuE37RM;;IAEE,4BAAoC;EvE67R5C;EuE37RM;;IAEE,8BAAwC;EvE67RhD;EuE37RM;;IAEE,+BAA0C;EvE67RlD;EuE37RM;;IAEE,6BAAsC;EvE67R9C;EuE58RM;IAAgC,0BAA4B;EvE+8RlE;EuE98RM;;IAEE,8BAAoC;EvEg9R5C;EuE98RM;;IAEE,gCAAwC;EvEg9RhD;EuE98RM;;IAEE,iCAA0C;EvEg9RlD;EuE98RM;;IAEE,+BAAsC;EvEg9R9C;EuE/9RM;IAAgC,wBAA4B;EvEk+RlE;EuEj+RM;;IAEE,4BAAoC;EvEm+R5C;EuEj+RM;;IAEE,8BAAwC;EvEm+RhD;EuEj+RM;;IAEE,+BAA0C;EvEm+RlD;EuEj+RM;;IAEE,6BAAsC;EvEm+R9C;EuE39RM;IAAwB,2BAA2B;EvE89RzD;EuE79RM;;IAEE,+BAA+B;EvE+9RvC;EuE79RM;;IAEE,iCAAiC;EvE+9RzC;EuE79RM;;IAEE,kCAAkC;EvE+9R1C;EuE79RM;;IAEE,gCAAgC;EvE+9RxC;EuE9+RM;IAAwB,0BAA2B;EvEi/RzD;EuEh/RM;;IAEE,8BAA+B;EvEk/RvC;EuEh/RM;;IAEE,gCAAiC;EvEk/RzC;EuEh/RM;;IAEE,iCAAkC;EvEk/R1C;EuEh/RM;;IAEE,+BAAgC;EvEk/RxC;EuEjgSM;IAAwB,wBAA2B;EvEogSzD;EuEngSM;;IAEE,4BAA+B;EvEqgSvC;EuEngSM;;IAEE,8BAAiC;EvEqgSzC;EuEngSM;;IAEE,+BAAkC;EvEqgS1C;EuEngSM;;IAEE,6BAAgC;EvEqgSxC;EuEphSM;IAAwB,0BAA2B;EvEuhSzD;EuEthSM;;IAEE,8BAA+B;EvEwhSvC;EuEthSM;;IAEE,gCAAiC;EvEwhSzC;EuEthSM;;IAEE,iCAAkC;EvEwhS1C;EuEthSM;;IAEE,+BAAgC;EvEwhSxC;EuEviSM;IAAwB,wBAA2B;EvE0iSzD;EuEziSM;;IAEE,4BAA+B;EvE2iSvC;EuEziSM;;IAEE,8BAAiC;EvE2iSzC;EuEziSM;;IAEE,+BAAkC;EvE2iS1C;EuEziSM;;IAEE,6BAAgC;EvE2iSxC;EuEriSE;IAAmB,uBAAuB;EvEwiS5C;EuEviSE;;IAEE,2BAA2B;EvEyiS/B;EuEviSE;;IAEE,6BAA6B;EvEyiSjC;EuEviSE;;IAEE,8BAA8B;EvEyiSlC;EuEviSE;;IAEE,4BAA4B;EvEyiShC;AACF;;AwE3mSA;EAEI,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,SAAS;EACT,OAAO;EACP,UAAU;EAEV,oBAAoB;EACpB,WAAW;EAEX,kCAAkC;AxE2mStC;;AyErnSA;EAAkB,4GAA8C;AzEynShE;;AyErnSA;EAAiB,8BAA8B;AzEynS/C;;AyExnSA;EAAiB,8BAA8B;AzE4nS/C;;AyE3nSA;EAAiB,8BAA8B;AzE+nS/C;;AyE9nSA;ECTE,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;A1E2oSrB;;AyE5nSI;EAAwB,2BAA2B;AzEgoSvD;;AyE/nSI;EAAwB,4BAA4B;AzEmoSxD;;AyEloSI;EAAwB,6BAA6B;AzEsoSzD;;AcjmSI;E2DvCA;IAAwB,2BAA2B;EzE6oSrD;EyE5oSE;IAAwB,4BAA4B;EzE+oStD;EyE9oSE;IAAwB,6BAA6B;EzEipSvD;AACF;;Ac7mSI;E2DvCA;IAAwB,2BAA2B;EzEypSrD;EyExpSE;IAAwB,4BAA4B;EzE2pStD;EyE1pSE;IAAwB,6BAA6B;EzE6pSvD;AACF;;AcznSI;E2DvCA;IAAwB,2BAA2B;EzEqqSrD;EyEpqSE;IAAwB,4BAA4B;EzEuqStD;EyEtqSE;IAAwB,6BAA6B;EzEyqSvD;AACF;;AcroSI;E2DvCA;IAAwB,2BAA2B;EzEirSrD;EyEhrSE;IAAwB,4BAA4B;EzEmrStD;EyElrSE;IAAwB,6BAA6B;EzEqrSvD;AACF;;AyEhrSA;EAAmB,oCAAoC;AzEorSvD;;AyEnrSA;EAAmB,oCAAoC;AzEurSvD;;AyEtrSA;EAAmB,qCAAqC;AzE0rSxD;;AyEtrSA;EAAuB,2BAA0C;AzE0rSjE;;AyEzrSA;EAAuB,+BAA4C;AzE6rSnE;;AyE5rSA;EAAuB,2BAA2C;AzEgsSlE;;AyE/rSA;EAAuB,2BAAyC;AzEmsShE;;AyElsSA;EAAuB,8BAA2C;AzEssSlE;;AyErsSA;EAAuB,6BAA6B;AzEysSpD;;AyErsSA;EAAc,sBAAwB;AzEysStC;;A2EhvSE;EACE,yBAAwB;A3EmvS5B;;AKzuSE;EsELM,yBAA0E;A3EkvSlF;;A2ExvSE;EACE,yBAAwB;A3E2vS5B;;AKjvSE;EsELM,yBAA0E;A3E0vSlF;;A2EhwSE;EACE,yBAAwB;A3EmwS5B;;AKzvSE;EsELM,yBAA0E;A3EkwSlF;;A2ExwSE;EACE,yBAAwB;A3E2wS5B;;AKjwSE;EsELM,yBAA0E;A3E0wSlF;;A2EhxSE;EACE,yBAAwB;A3EmxS5B;;AKzwSE;EsELM,yBAA0E;A3EkxSlF;;A2ExxSE;EACE,yBAAwB;A3E2xS5B;;AKjxSE;EsELM,yBAA0E;A3E0xSlF;;A2EhySE;EACE,yBAAwB;A3EmyS5B;;AKzxSE;EsELM,yBAA0E;A3EkySlF;;A2ExySE;EACE,yBAAwB;A3E2yS5B;;AKjySE;EsELM,yBAA0E;A3E0ySlF;;AyEnwSA;EAAa,yBAA6B;AzEuwS1C;;AyEtwSA;EAAc,yBAA6B;AzE0wS3C;;AyExwSA;EAAiB,oCAAkC;AzE4wSnD;;AyE3wSA;EAAiB,0CAAkC;AzE+wSnD;;AyE3wSA;EGvDE,WAAW;EACX,kBAAkB;EAClB,iBAAiB;EACjB,6BAA6B;EAC7B,SAAS;A5Es0SX;;AyE/wSA;EAAwB,gCAAgC;AzEmxSxD;;AyEjxSA;EACE,iCAAiC;EACjC,gCAAgC;AzEoxSlC;;AyE/wSA;EAAc,yBAAyB;AzEmxSvC;;A6Ep1SA;EACE,8BAA8B;A7Eu1ShC;;A6Ep1SA;EACE,6BAA6B;A7Eu1S/B;;A8Ev1SE;E5EOF;;;I4EDM,4BAA4B;IAE5B,2BAA2B;E9Eu1S/B;E8Ep1SE;IAEI,0BAA0B;E9Eq1ShC;E8E50SE;IACE,6BAA6B;E9E80SjC;EEhpSF;I4E/KM,gCAAgC;E9Ek0SpC;E8Eh0SE;;IAEE,yB3EzCY;I2E0CZ,wBAAwB;E9Ek0S5B;E8E1zSE;IACE,2BAA2B;E9E4zS/B;E8EzzSE;;IAEE,wBAAwB;E9E2zS5B;E8ExzSE;;;IAGE,UAAU;IACV,SAAS;E9E0zSb;E8EvzSE;;IAEE,uBAAuB;E9EyzS3B;E8EjzSE;IACE,Q3E2hCgC;EHwxQpC;EE/1SF;I4E+CM,2BAA2C;E9EmzS/C;E8EjzSE;IACE,2BAA2C;E9EmzS/C;EiCj4SF;I6CmFM,aAAa;E9EizSjB;EsCh5SF;IwCkGM,sB3EtFS;EHu4Sb;EgBp5SF;I8DuGM,oCAAoC;E9EgzSxC;E8EjzSE;;IAKI,iCAAmC;E9EgzSzC;EgBn3SF;;I8D0EQ,oCAAsC;E9E6yS5C;EgBlySF;I8DNM,cAAc;E9E2ySlB;EiBj6SA;;;;I6D4HM,qB3EvHU;EHk6ShB;EgB7zSF;I8DuBM,cAAc;IACd,qB3E7HY;EHs6ShB;AACF","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"utilities\";\n@import \"print\";\n","/*!\n * Bootstrap v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-wrap: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\ninput[type=\"date\"].form-control,\ninput[type=\"time\"].form-control,\ninput[type=\"datetime-local\"].form-control,\ninput[type=\"month\"].form-control {\n appearance: none;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n font-size: 1rem;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input[disabled] ~ .form-check-label,\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\n.btn:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n z-index: 1;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n color-adjust: exact;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1;\n width: 1rem;\n height: 1.25rem;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input[disabled] ~ .custom-file-label,\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: 1.4rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar .container,\n.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n min-height: 1px;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n flex-shrink: 0;\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n display: flex;\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n flex: 1 0 0%;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion {\n overflow-anchor: none;\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:last-of-type) {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card > .card-header {\n border-radius: 0;\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item {\n display: flex;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 3;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 3;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n line-height: 0;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: 0.25rem;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n margin-top: -1px;\n border-top-width: 1px;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n.list-group-flush {\n border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n flex-basis: 350px;\n max-width: 350px;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n height: min-content;\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: 0.75rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: calc(0.3rem - 1px);\n border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n margin: 0.25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n height: min-content;\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n word-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// Do not forget to update getting-started/theming.md!\n:root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `<th>` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n // making it impossible to interact with the content\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n$grid-row-columns: 6 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n$table-th-font-weight: null !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n$custom-control-cursor: null !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-label-color: null !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: null !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: null !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/></svg>\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'><path stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/></svg>\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: null !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'><circle r='3' fill='#{$custom-control-indicator-checked-color}'/></svg>\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'><path fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>\") !default;\n$custom-select-background: escape-svg($custom-select-indicator) no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}' viewBox='0 0 12 12'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n\n$form-validation-states: () !default;\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-font-size: null !default;\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n$user-selects: all, auto, none !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { @include font-size($h1-font-size); }\nh2, .h2 { @include font-size($h2-font-size); }\nh3, .h3 { @include font-size($h3-font-size); }\nh4, .h4 { @include font-size($h4-font-size); }\nh5, .h5 { @include font-size($h5-font-size); }\nh6, .h6 { @include font-size($h6-font-size); }\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n @include font-size($display1-size);\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n @include font-size($display2-size);\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n @include font-size($display3-size);\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n @include font-size($display4-size);\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n @include font-size($small-font-size);\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size(90%);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n @include font-size($blockquote-font-size);\n}\n\n.blockquote-footer {\n display: block;\n @include font-size($blockquote-small-font-size);\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled() {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer / 2;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid() {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n @include deprecate(\"`img-retina()`\", \"v4.3.0\", \"v5\");\n}\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-right-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-left-radius($radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n","// Inline code\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n @include font-size(100%);\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n @include deprecate(\"The `make-container-max-widths` mixin\", \"v4.5.2\", \"v5\");\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @if $columns > 0 {\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n }\n\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n @if $columns > 0 {\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n margin-bottom: $spacer;\n color: $table-color;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: 2 * $table-border-width;\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover() {\n color: $table-hover-color;\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover() {\n color: $table-dark-hover-color;\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background, $border: null) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n\n @if $border != null {\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $border;\n }\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover() {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// Bootstrap functions\n//\n// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null or unit($num) == \"%\" or unit($prev-num) == \"%\" {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Used to ensure the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map, $map-name: \"$grid-breakpoints\") {\n @if length($map) > 0 {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.\";\n }\n }\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Hugo Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// See https://codepen.io/kevinweber/pen/dXWoRw\n//\n// Requires the use of quotes around data URIs.\n\n@function escape-svg($string) {\n @if str-index($string, \"data:image/svg+xml\") {\n @each $char, $encoded in $escaped-characters {\n // Do not escape the url brackets\n @if str-index($string, \"url(\") == 1 {\n $string: url(\"#{str-replace(str-slice($string, 6, -3), $char, $encoded)}\");\n } @else {\n $string: str-replace($string, $char, $encoded);\n }\n }\n }\n\n @return $string;\n}\n\n// Color contrast\n@function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) {\n $r: red($color);\n $g: green($color);\n $b: blue($color);\n\n $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;\n\n @if ($yiq >= $yiq-contrasted-threshold) {\n @return $dark;\n } @else {\n @return $light;\n }\n}\n\n// Retrieve color Sass maps\n@function color($key: \"blue\") {\n @return map-get($colors, $key);\n}\n\n@function theme-color($key: \"primary\") {\n @return map-get($theme-colors, $key);\n}\n\n@function gray($key: \"100\") {\n @return map-get($grays, $key);\n}\n\n// Request a theme color level\n@function theme-color-level($color-name: \"primary\", $level: 0) {\n $color: theme-color($color-name);\n $color-base: if($level > 0, $black, $white);\n $level: abs($level);\n\n @return mix($color-base, $color, $level * $theme-color-interval);\n}\n\n// Return valid calc\n@function add($value1, $value2, $return-calc: true) {\n @if $value1 == null {\n @return $value2;\n }\n\n @if $value2 == null {\n @return $value1;\n }\n\n @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n @return $value1 + $value2;\n }\n\n @return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(\" + \") + $value2);\n}\n\n@function subtract($value1, $value2, $return-calc: true) {\n @if $value1 == null and $value2 == null {\n @return null;\n }\n\n @if $value1 == null {\n @return -$value2;\n }\n\n @if $value2 == null {\n @return $value1;\n }\n\n @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n @return $value1 - $value2;\n }\n\n @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(\" - \") + $value2);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n height: $input-height;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on `<select>`s in IE10+.\n &::-ms-expand {\n background-color: transparent;\n border: 0;\n }\n\n // Remove select outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $input-color;\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n @include form-control-focus($ignore-warning: true);\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled,\n &[readonly] {\n background-color: $input-disabled-bg;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n &.form-control {\n appearance: none; // Fix appearance for date inputs in Safari\n }\n}\n\nselect.form-control {\n &:focus::-ms-value {\n // Suppress the nested default white text on blue background highlight given to\n // the selected option text when the (still closed) <select> receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<label>/<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n line-height: $input-line-height;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n line-height: $input-line-height-lg;\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n line-height: $input-line-height-sm;\n}\n\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n @include font-size($input-font-size);\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n line-height: $input-line-height-sm;\n @include border-radius($input-border-radius-sm);\n}\n\n.form-control-lg {\n height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n line-height: $input-line-height-lg;\n @include border-radius($input-border-radius-lg);\n}\n\n// stylelint-disable-next-line no-duplicate-selectors\nselect.form-control {\n &[size],\n &[multiple] {\n height: auto;\n }\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: $form-group-margin-bottom;\n}\n\n.form-text {\n display: block;\n margin-top: $form-text-margin-top;\n}\n\n\n// Form grid\n//\n// Special replacement for our grid system's `.row` for tighter form layouts.\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$form-grid-gutter-width / 2;\n margin-left: -$form-grid-gutter-width / 2;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: $form-grid-gutter-width / 2;\n padding-left: $form-grid-gutter-width / 2;\n }\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.form-check {\n position: relative;\n display: block;\n padding-left: $form-check-input-gutter;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: $form-check-input-margin-y;\n margin-left: -$form-check-input-gutter;\n\n // Use [disabled] and :disabled for workaround https://github.com/twbs/bootstrap/issues/28247\n &[disabled] ~ .form-check-label,\n &:disabled ~ .form-check-label {\n color: $text-muted;\n }\n}\n\n.form-check-label {\n margin-bottom: 0; // Override default `<label>` bottom margin\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0; // Override base .form-check\n margin-right: $form-check-inline-margin-x;\n\n // Undo .form-check-input defaults and add some `margin-right`.\n .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: $form-check-inline-input-margin-x;\n margin-left: 0;\n }\n}\n\n\n// Form validation\n//\n// Provide feedback to users when form field values are valid or invalid. Works\n// primarily for client-side validation via scoped `:invalid` and `:valid`\n// pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for\n// server side validation.\n\n@each $state, $data in $form-validation-states {\n @include form-validation-state($state, map-get($data, color), map-get($data, icon));\n}\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center; // Prevent shorter elements from growing to same height as others (e.g., small buttons growing to normal sized button height)\n\n // Because we use flex, the initial sizing of checkboxes is collapsed and\n // doesn't occupy the full-width (which is what we want for xs grid tier),\n // so we force that here.\n .form-check {\n width: 100%;\n }\n\n // Kick in the inline\n @include media-breakpoint-up(sm) {\n label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n\n // Inline-block all the things for \"inline\"\n .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n\n // Allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n // Make static controls behave like regular ones\n .form-control-plaintext {\n display: inline-block;\n }\n\n .input-group,\n .custom-select {\n width: auto;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match.\n .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: $form-check-input-margin-x;\n margin-left: 0;\n }\n\n .custom-control {\n align-items: center;\n justify-content: center;\n }\n .custom-control-label {\n margin-bottom: 0;\n }\n }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-prefers-reduced-motion-media-query and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `$input-focus-border-color` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n@mixin form-control-focus($ignore-warning: false) {\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n @include deprecate(\"The `form-control-focus()` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n\n// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state($state, $color, $icon) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: color-yiq($color);\n background-color: rgba($color, $form-feedback-tooltip-opacity);\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .custom-select {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $custom-select-feedback-icon-padding-right;\n background: $custom-select-background, escape-svg($icon) $custom-select-bg no-repeat $custom-select-feedback-icon-position / $custom-select-feedback-icon-size;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n ~ .form-check-label {\n color: $color;\n }\n\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n }\n\n .custom-control-input {\n @include form-validation-state-selector($state) {\n ~ .custom-control-label {\n color: $color;\n\n &::before {\n border-color: $color;\n }\n }\n\n &:checked {\n ~ .custom-control-label::before {\n border-color: lighten($color, 10%);\n @include gradient-bg(lighten($color, 10%));\n }\n }\n\n &:focus {\n ~ .custom-control-label::before {\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n\n &:not(:checked) ~ .custom-control-label::before {\n border-color: $color;\n }\n }\n }\n }\n\n // custom file\n .custom-file-input {\n @include form-validation-state-selector($state) {\n ~ .custom-file-label {\n border-color: $color;\n }\n\n &:focus {\n ~ .custom-file-label {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n }\n}\n","// Gradients\n\n@mixin gradient-bg($color) {\n @if $enable-gradients {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x;\n } @else {\n background-color: $color;\n }\n}\n\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n background-repeat: repeat-x;\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n background-repeat: repeat-x;\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n background-repeat: repeat-x;\n}\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Base styles\n//\n\n.btn {\n display: inline-block;\n font-family: $btn-font-family;\n font-weight: $btn-font-weight;\n color: $body-color;\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n user-select: none;\n background-color: transparent;\n border: $btn-border-width solid transparent;\n @include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-line-height, $btn-border-radius);\n @include transition($btn-transition);\n\n @include hover() {\n color: $body-color;\n text-decoration: none;\n }\n\n &:focus,\n &.focus {\n outline: 0;\n box-shadow: $btn-focus-box-shadow;\n }\n\n // Disabled comes first so active can properly restyle\n &.disabled,\n &:disabled {\n opacity: $btn-disabled-opacity;\n @include box-shadow(none);\n }\n\n &:not(:disabled):not(.disabled) {\n cursor: if($enable-pointer-cursor-for-buttons, pointer, null);\n\n &:active,\n &.active {\n @include box-shadow($btn-active-box-shadow);\n\n &:focus {\n @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);\n }\n }\n }\n}\n\n// Future-proof disabling of clicks on `<a>` elements\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n\n//\n// Alternate buttons\n//\n\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @include button-variant($value, $value);\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n font-weight: $font-weight-normal;\n color: $link-color;\n text-decoration: $link-decoration;\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n\n &:focus,\n &.focus {\n text-decoration: $link-hover-decoration;\n }\n\n &:disabled,\n &.disabled {\n color: $btn-link-disabled-color;\n pointer-events: none;\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-line-height-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-line-height-sm, $btn-border-radius-sm);\n}\n\n\n//\n// Block button\n//\n\n.btn-block {\n display: block;\n width: 100%;\n\n // Vertically space out multiple block buttons\n + .btn-block {\n margin-top: $btn-block-spacing-y;\n }\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n@mixin button-variant($background, $border, $hover-background: darken($background, 7.5%), $hover-border: darken($border, 10%), $active-background: darken($background, 10%), $active-border: darken($border, 12.5%)) {\n color: color-yiq($background);\n @include gradient-bg($background);\n border-color: $border;\n @include box-shadow($btn-box-shadow);\n\n @include hover() {\n color: color-yiq($hover-background);\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n }\n\n &:focus,\n &.focus {\n color: color-yiq($hover-background);\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n @if $enable-shadows {\n @include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);\n }\n }\n\n // Disabled comes first so active can properly restyle\n &.disabled,\n &:disabled {\n color: color-yiq($background);\n background-color: $background;\n border-color: $border;\n // Remove CSS gradients if they're enabled\n @if $enable-gradients {\n background-image: none;\n }\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n @if $enable-gradients {\n background-image: none; // Remove the gradient for the pressed/active state\n }\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows and $btn-active-box-shadow != none {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);\n }\n }\n }\n}\n\n@mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) {\n color: $color;\n border-color: $color;\n\n @include hover() {\n color: $color-hover;\n background-color: $active-background;\n border-color: $active-border;\n }\n\n &:focus,\n &.focus {\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n\n &.disabled,\n &:disabled {\n color: $color;\n background-color: transparent;\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows and $btn-active-box-shadow != none {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n }\n }\n}\n\n// Button sizes\n@mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n line-height: $line-height;\n // Manually declare to provide an override to the browser default\n @include border-radius($border-radius, 0);\n}\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n}\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: $zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: $dropdown-min-width;\n padding: $dropdown-padding-y $dropdown-padding-x;\n margin: $dropdown-spacer 0 0; // override default ul\n @include font-size($dropdown-font-size);\n color: $dropdown-color;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: $dropdown-bg;\n background-clip: padding-box;\n border: $dropdown-border-width solid $dropdown-border-color;\n @include border-radius($dropdown-border-radius);\n @include box-shadow($dropdown-box-shadow);\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-left {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu#{$infix}-right {\n right: 0;\n left: auto;\n }\n }\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropright {\n .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(right);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropleft {\n .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(left);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n// When enabled Popper.js, reset basic dropdown position\n// stylelint-disable-next-line no-duplicate-selectors\n.dropdown-menu {\n &[x-placement^=\"top\"],\n &[x-placement^=\"right\"],\n &[x-placement^=\"bottom\"],\n &[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n }\n}\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n @include nav-divider($dropdown-divider-bg, $dropdown-divider-margin-y, true);\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n clear: both;\n font-weight: $font-weight-normal;\n color: $dropdown-link-color;\n text-align: inherit; // For `<button>`s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n\n // Prevent dropdown overflow if there's no padding\n // See https://github.com/twbs/bootstrap/pull/27703\n @if $dropdown-padding-y == 0 {\n &:first-child {\n @include border-top-radius($dropdown-inner-border-radius);\n }\n\n &:last-child {\n @include border-bottom-radius($dropdown-inner-border-radius);\n }\n }\n\n @include hover-focus() {\n color: $dropdown-link-hover-color;\n text-decoration: none;\n @include gradient-bg($dropdown-link-hover-bg);\n }\n\n &.active,\n &:active {\n color: $dropdown-link-active-color;\n text-decoration: none;\n @include gradient-bg($dropdown-link-active-bg);\n }\n\n &.disabled,\n &:disabled {\n color: $dropdown-link-disabled-color;\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n @if $enable-gradients {\n background-image: none;\n }\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: $dropdown-header-padding;\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: $dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n color: $dropdown-link-color;\n}\n","@mixin caret-down() {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up() {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-right() {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-left() {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down();\n } @else if $direction == up {\n @include caret-up();\n } @else if $direction == right {\n @include caret-right();\n }\n }\n\n @if $direction == left {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @include caret-left();\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n@mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y, $ignore-warning: false) {\n height: 0;\n margin: $margin-y 0;\n overflow: hidden;\n border-top: 1px solid $color;\n @include deprecate(\"The `nav-divider()` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n @include hover() {\n z-index: 1;\n }\n &:focus,\n &:active,\n &.active {\n z-index: 1;\n }\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n // Prevent double borders when buttons are next to each other\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-left: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-right-radius(0);\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) > .btn {\n @include border-left-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropright &::after {\n margin-left: 0;\n }\n\n .dropleft &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n.btn-group-toggle {\n > .btn,\n > .btn-group > .btn {\n margin-bottom: 0; // Override default `<label>` value\n\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-control-plaintext,\n > .custom-select,\n > .custom-file {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n margin-bottom: 0;\n\n + .form-control,\n + .custom-select,\n + .custom-file {\n margin-left: -$input-border-width;\n }\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .custom-select:focus,\n > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n }\n\n // Bring the custom file input above the label\n > .custom-file .custom-file-input:focus {\n z-index: 4;\n }\n\n > .form-control,\n > .custom-select {\n &:not(:last-child) { @include border-right-radius(0); }\n &:not(:first-child) { @include border-left-radius(0); }\n }\n\n // Custom file inputs have more complex markup, thus requiring different\n // border-radius overrides.\n > .custom-file {\n display: flex;\n align-items: center;\n\n &:not(:last-child) .custom-file-label,\n &:not(:last-child) .custom-file-label::after { @include border-right-radius(0); }\n &:not(:first-child) .custom-file-label { @include border-left-radius(0); }\n }\n}\n\n\n// Prepend and append\n//\n// While it requires one extra layer of HTML for each, dedicated prepend and\n// append elements allow us to 1) be less clever, 2) simplify our selectors, and\n// 3) support HTML5 form validation.\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 3;\n }\n }\n\n .btn + .btn,\n .btn + .input-group-text,\n .input-group-text + .input-group-text,\n .input-group-text + .btn {\n margin-left: -$input-border-width;\n }\n}\n\n.input-group-prepend { margin-right: -$input-border-width; }\n.input-group-append { margin-left: -$input-border-width; }\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-padding-y $input-padding-x;\n margin-bottom: 0; // Allow use of <label> elements by overriding our default margin-bottom\n @include font-size($input-font-size); // Match inputs\n font-weight: $font-weight-normal;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: $input-height-lg;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n line-height: $input-line-height-lg;\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: $input-height-sm;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n line-height: $input-line-height-sm;\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: $custom-select-padding-x + $custom-select-indicator-padding;\n}\n\n\n// Prepend and append rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n @include border-right-radius(0);\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n @include border-left-radius(0);\n}\n","// Embedded icons from Open Iconic.\n// Released under MIT and copyright 2014 Waybury.\n// https://useiconic.com/open\n\n\n// Checkboxes and radios\n//\n// Base class takes care of all the key behavioral aspects.\n\n.custom-control {\n position: relative;\n z-index: 1;\n display: block;\n min-height: $font-size-base * $line-height-base;\n padding-left: $custom-control-gutter + $custom-control-indicator-size;\n color-adjust: exact; // Keep themed appearance for print\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: $custom-control-spacer-x;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1; // Put the input behind the label so it doesn't overlay text\n width: $custom-control-indicator-size;\n height: ($font-size-base * $line-height-base + $custom-control-indicator-size) / 2;\n opacity: 0;\n\n &:checked ~ .custom-control-label::before {\n color: $custom-control-indicator-checked-color;\n border-color: $custom-control-indicator-checked-border-color;\n @include gradient-bg($custom-control-indicator-checked-bg);\n @include box-shadow($custom-control-indicator-checked-box-shadow);\n }\n\n &:focus ~ .custom-control-label::before {\n // the mixin is not used here to make sure there is feedback\n @if $enable-shadows {\n box-shadow: $input-box-shadow, $custom-control-indicator-focus-box-shadow;\n } @else {\n box-shadow: $custom-control-indicator-focus-box-shadow;\n }\n }\n\n &:focus:not(:checked) ~ .custom-control-label::before {\n border-color: $custom-control-indicator-focus-border-color;\n }\n\n &:not(:disabled):active ~ .custom-control-label::before {\n color: $custom-control-indicator-active-color;\n background-color: $custom-control-indicator-active-bg;\n border-color: $custom-control-indicator-active-border-color;\n @include box-shadow($custom-control-indicator-active-box-shadow);\n }\n\n // Use [disabled] and :disabled to work around https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .custom-control-label {\n color: $custom-control-label-disabled-color;\n\n &::before {\n background-color: $custom-control-indicator-disabled-bg;\n }\n }\n }\n}\n\n// Custom control indicators\n//\n// Build the custom controls out of pseudo-elements.\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n color: $custom-control-label-color;\n vertical-align: top;\n cursor: $custom-control-cursor;\n\n // Background-color and (when enabled) gradient\n &::before {\n position: absolute;\n top: ($font-size-base * $line-height-base - $custom-control-indicator-size) / 2;\n left: -($custom-control-gutter + $custom-control-indicator-size);\n display: block;\n width: $custom-control-indicator-size;\n height: $custom-control-indicator-size;\n pointer-events: none;\n content: \"\";\n background-color: $custom-control-indicator-bg;\n border: $custom-control-indicator-border-color solid $custom-control-indicator-border-width;\n @include box-shadow($custom-control-indicator-box-shadow);\n }\n\n // Foreground (icon)\n &::after {\n position: absolute;\n top: ($font-size-base * $line-height-base - $custom-control-indicator-size) / 2;\n left: -($custom-control-gutter + $custom-control-indicator-size);\n display: block;\n width: $custom-control-indicator-size;\n height: $custom-control-indicator-size;\n content: \"\";\n background: no-repeat 50% / #{$custom-control-indicator-bg-size};\n }\n}\n\n\n// Checkboxes\n//\n// Tweak just a few things for checkboxes.\n\n.custom-checkbox {\n .custom-control-label::before {\n @include border-radius($custom-checkbox-indicator-border-radius);\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::after {\n background-image: escape-svg($custom-checkbox-indicator-icon-checked);\n }\n }\n\n .custom-control-input:indeterminate ~ .custom-control-label {\n &::before {\n border-color: $custom-checkbox-indicator-indeterminate-border-color;\n @include gradient-bg($custom-checkbox-indicator-indeterminate-bg);\n @include box-shadow($custom-checkbox-indicator-indeterminate-box-shadow);\n }\n &::after {\n background-image: escape-svg($custom-checkbox-indicator-icon-indeterminate);\n }\n }\n\n .custom-control-input:disabled {\n &:checked ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n &:indeterminate ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n }\n}\n\n// Radios\n//\n// Tweak just a few things for radios.\n\n.custom-radio {\n .custom-control-label::before {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $custom-radio-indicator-border-radius;\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::after {\n background-image: escape-svg($custom-radio-indicator-icon-checked);\n }\n }\n\n .custom-control-input:disabled {\n &:checked ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n }\n}\n\n\n// switches\n//\n// Tweak a few things for switches\n\n.custom-switch {\n padding-left: $custom-switch-width + $custom-control-gutter;\n\n .custom-control-label {\n &::before {\n left: -($custom-switch-width + $custom-control-gutter);\n width: $custom-switch-width;\n pointer-events: all;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $custom-switch-indicator-border-radius;\n }\n\n &::after {\n top: add(($font-size-base * $line-height-base - $custom-control-indicator-size) / 2, $custom-control-indicator-border-width * 2);\n left: add(-($custom-switch-width + $custom-control-gutter), $custom-control-indicator-border-width * 2);\n width: $custom-switch-indicator-size;\n height: $custom-switch-indicator-size;\n background-color: $custom-control-indicator-border-color;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $custom-switch-indicator-border-radius;\n @include transition(transform .15s ease-in-out, $custom-forms-transition);\n }\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::after {\n background-color: $custom-control-indicator-bg;\n transform: translateX($custom-switch-width - $custom-control-indicator-size);\n }\n }\n\n .custom-control-input:disabled {\n &:checked ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n }\n}\n\n\n// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n//\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: $custom-select-height;\n padding: $custom-select-padding-y ($custom-select-padding-x + $custom-select-indicator-padding) $custom-select-padding-y $custom-select-padding-x;\n font-family: $custom-select-font-family;\n @include font-size($custom-select-font-size);\n font-weight: $custom-select-font-weight;\n line-height: $custom-select-line-height;\n color: $custom-select-color;\n vertical-align: middle;\n background: $custom-select-bg $custom-select-background;\n border: $custom-select-border-width solid $custom-select-border-color;\n @include border-radius($custom-select-border-radius, 0);\n @include box-shadow($custom-select-box-shadow);\n appearance: none;\n\n &:focus {\n border-color: $custom-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($custom-select-box-shadow, $custom-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $custom-select-focus-box-shadow;\n }\n\n &::-ms-value {\n // For visual consistency with other platforms/browsers,\n // suppress the default white text on blue background highlight given to\n // the selected option text when the (still closed) <select> receives focus\n // in IE and (under certain conditions) Edge.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: $custom-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $custom-select-disabled-color;\n background-color: $custom-select-disabled-bg;\n }\n\n // Hides the default caret in IE11\n &::-ms-expand {\n display: none;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $custom-select-color;\n }\n}\n\n.custom-select-sm {\n height: $custom-select-height-sm;\n padding-top: $custom-select-padding-y-sm;\n padding-bottom: $custom-select-padding-y-sm;\n padding-left: $custom-select-padding-x-sm;\n @include font-size($custom-select-font-size-sm);\n}\n\n.custom-select-lg {\n height: $custom-select-height-lg;\n padding-top: $custom-select-padding-y-lg;\n padding-bottom: $custom-select-padding-y-lg;\n padding-left: $custom-select-padding-x-lg;\n @include font-size($custom-select-font-size-lg);\n}\n\n\n// File\n//\n// Custom file input.\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: $custom-file-height;\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: $custom-file-height;\n margin: 0;\n opacity: 0;\n\n &:focus ~ .custom-file-label {\n border-color: $custom-file-focus-border-color;\n box-shadow: $custom-file-focus-box-shadow;\n }\n\n // Use [disabled] and :disabled to work around https://github.com/twbs/bootstrap/issues/28247\n &[disabled] ~ .custom-file-label,\n &:disabled ~ .custom-file-label {\n background-color: $custom-file-disabled-bg;\n }\n\n @each $lang, $value in $custom-file-text {\n &:lang(#{$lang}) ~ .custom-file-label::after {\n content: $value;\n }\n }\n\n ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n }\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: $custom-file-height;\n padding: $custom-file-padding-y $custom-file-padding-x;\n font-family: $custom-file-font-family;\n font-weight: $custom-file-font-weight;\n line-height: $custom-file-line-height;\n color: $custom-file-color;\n background-color: $custom-file-bg;\n border: $custom-file-border-width solid $custom-file-border-color;\n @include border-radius($custom-file-border-radius);\n @include box-shadow($custom-file-box-shadow);\n\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: $custom-file-height-inner;\n padding: $custom-file-padding-y $custom-file-padding-x;\n line-height: $custom-file-line-height;\n color: $custom-file-button-color;\n content: \"Browse\";\n @include gradient-bg($custom-file-button-bg);\n border-left: inherit;\n @include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0);\n }\n}\n\n// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.custom-range {\n width: 100%;\n height: add($custom-range-thumb-height, $custom-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: none;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }\n &::-ms-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n margin-top: ($custom-range-track-height - $custom-range-thumb-height) / 2; // Webkit specific\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n @include transition($custom-forms-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent; // Why?\n cursor: $custom-range-track-cursor;\n background-color: $custom-range-track-bg;\n border-color: transparent;\n @include border-radius($custom-range-track-border-radius);\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n @include transition($custom-forms-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent;\n cursor: $custom-range-track-cursor;\n background-color: $custom-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($custom-range-track-border-radius);\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-ms-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n margin-top: 0; // Edge specific\n margin-right: $custom-range-thumb-focus-box-shadow-width; // Workaround that overflowed box-shadow is hidden.\n margin-left: $custom-range-thumb-focus-box-shadow-width; // Workaround that overflowed box-shadow is hidden.\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n @include transition($custom-forms-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-ms-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent;\n cursor: $custom-range-track-cursor;\n background-color: transparent;\n border-color: transparent;\n border-width: $custom-range-thumb-height / 2;\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-ms-fill-lower {\n background-color: $custom-range-track-bg;\n @include border-radius($custom-range-track-border-radius);\n }\n\n &::-ms-fill-upper {\n margin-right: 15px; // arbitrary?\n background-color: $custom-range-track-bg;\n @include border-radius($custom-range-track-border-radius);\n }\n\n &:disabled {\n &::-webkit-slider-thumb {\n background-color: $custom-range-thumb-disabled-bg;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: default;\n }\n\n &::-moz-range-thumb {\n background-color: $custom-range-thumb-disabled-bg;\n }\n\n &::-moz-range-track {\n cursor: default;\n }\n\n &::-ms-thumb {\n background-color: $custom-range-thumb-disabled-bg;\n }\n }\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n @include transition($custom-forms-transition);\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: $nav-link-padding-y $nav-link-padding-x;\n text-decoration: if($link-decoration == none, null, none);\n\n @include hover-focus() {\n text-decoration: none;\n }\n\n // Disabled state lightens text\n &.disabled {\n color: $nav-link-disabled-color;\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;\n\n .nav-item {\n margin-bottom: -$nav-tabs-border-width;\n }\n\n .nav-link {\n border: $nav-tabs-border-width solid transparent;\n @include border-top-radius($nav-tabs-border-radius);\n\n @include hover-focus() {\n border-color: $nav-tabs-link-hover-border-color;\n }\n\n &.disabled {\n color: $nav-link-disabled-color;\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: $nav-tabs-link-active-color;\n background-color: $nav-tabs-link-active-bg;\n border-color: $nav-tabs-link-active-border-color;\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: -$nav-tabs-border-width;\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n .nav-link {\n @include border-radius($nav-pills-border-radius);\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: $nav-pills-link-active-color;\n background-color: $nav-pills-link-active-bg;\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Contents\n//\n// Navbar\n// Navbar brand\n// Navbar nav\n// Navbar text\n// Navbar divider\n// Responsive navbar\n// Navbar position\n// Navbar themes\n\n\n// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: $navbar-padding-y $navbar-padding-x;\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n %container-flex-properties {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n }\n\n .container,\n .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n display: inline-block;\n padding-top: $navbar-brand-padding-y;\n padding-bottom: $navbar-brand-padding-y;\n margin-right: $navbar-padding-x;\n @include font-size($navbar-brand-font-size);\n line-height: inherit;\n white-space: nowrap;\n\n @include hover-focus() {\n text-decoration: none;\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-link {\n padding-right: 0;\n padding-left: 0;\n }\n\n .dropdown-menu {\n position: static;\n float: none;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n display: inline-block;\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: $navbar-toggler-padding-y $navbar-toggler-padding-x;\n @include font-size($navbar-toggler-font-size);\n line-height: 1;\n background-color: transparent; // remove default button style\n border: $border-width solid transparent; // remove default button style\n @include border-radius($navbar-toggler-border-radius);\n\n @include hover-focus() {\n text-decoration: none;\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n %container-navbar-expand-#{$breakpoint} {\n padding-right: 0;\n padding-left: 0;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-navbar-expand-#{$breakpoint};\n }\n\n @each $size, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($size, $container-max-widths)} {\n @extend %container-navbar-expand-#{$breakpoint};\n }\n }\n }\n\n @include media-breakpoint-up($next) {\n flex-flow: row nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: $navbar-nav-link-padding-x;\n padding-left: $navbar-nav-link-padding-x;\n }\n }\n\n // For nesting containers, have to redeclare for alignment purposes\n %container-nesting-#{$breakpoint} {\n flex-wrap: nowrap;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-nesting-#{$breakpoint};\n }\n\n @each $size, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($size, $container-max-widths)} {\n @extend %container-nesting-#{$breakpoint};\n }\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n\n // Changes flex-bases to auto because of an IE10 bug\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n }\n }\n }\n}\n\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n// Dark links against a light background\n.navbar-light {\n .navbar-brand {\n color: $navbar-light-brand-color;\n\n @include hover-focus() {\n color: $navbar-light-brand-hover-color;\n }\n }\n\n .navbar-nav {\n .nav-link {\n color: $navbar-light-color;\n\n @include hover-focus() {\n color: $navbar-light-hover-color;\n }\n\n &.disabled {\n color: $navbar-light-disabled-color;\n }\n }\n\n .show > .nav-link,\n .active > .nav-link,\n .nav-link.show,\n .nav-link.active {\n color: $navbar-light-active-color;\n }\n }\n\n .navbar-toggler {\n color: $navbar-light-color;\n border-color: $navbar-light-toggler-border-color;\n }\n\n .navbar-toggler-icon {\n background-image: escape-svg($navbar-light-toggler-icon-bg);\n }\n\n .navbar-text {\n color: $navbar-light-color;\n a {\n color: $navbar-light-active-color;\n\n @include hover-focus() {\n color: $navbar-light-active-color;\n }\n }\n }\n}\n\n// White links against a dark background\n.navbar-dark {\n .navbar-brand {\n color: $navbar-dark-brand-color;\n\n @include hover-focus() {\n color: $navbar-dark-brand-hover-color;\n }\n }\n\n .navbar-nav {\n .nav-link {\n color: $navbar-dark-color;\n\n @include hover-focus() {\n color: $navbar-dark-hover-color;\n }\n\n &.disabled {\n color: $navbar-dark-disabled-color;\n }\n }\n\n .show > .nav-link,\n .active > .nav-link,\n .nav-link.show,\n .nav-link.active {\n color: $navbar-dark-active-color;\n }\n }\n\n .navbar-toggler {\n color: $navbar-dark-color;\n border-color: $navbar-dark-toggler-border-color;\n }\n\n .navbar-toggler-icon {\n background-image: escape-svg($navbar-dark-toggler-icon-bg);\n }\n\n .navbar-text {\n color: $navbar-dark-color;\n a {\n color: $navbar-dark-active-color;\n\n @include hover-focus() {\n color: $navbar-dark-active-color;\n }\n }\n }\n}\n","//\n// Base styles\n//\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: $card-height;\n word-wrap: break-word;\n background-color: $card-bg;\n background-clip: border-box;\n border: $card-border-width solid $card-border-color;\n @include border-radius($card-border-radius);\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius($card-inner-border-radius);\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius($card-inner-border-radius);\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n // Workaround for the image size bug in IE\n // See: https://github.com/twbs/bootstrap/pull/28855\n min-height: 1px;\n padding: $card-spacer-x;\n color: $card-color;\n}\n\n.card-title {\n margin-bottom: $card-spacer-y;\n}\n\n.card-subtitle {\n margin-top: -$card-spacer-y / 2;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n @include hover() {\n text-decoration: none;\n }\n\n + .card-link {\n margin-left: $card-spacer-x;\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: $card-spacer-y $card-spacer-x;\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: $card-cap-color;\n background-color: $card-cap-bg;\n border-bottom: $card-border-width solid $card-border-color;\n\n &:first-child {\n @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);\n }\n}\n\n.card-footer {\n padding: $card-spacer-y $card-spacer-x;\n color: $card-cap-color;\n background-color: $card-cap-bg;\n border-top: $card-border-width solid $card-border-color;\n\n &:last-child {\n @include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius);\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: -$card-spacer-x / 2;\n margin-bottom: -$card-spacer-y;\n margin-left: -$card-spacer-x / 2;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -$card-spacer-x / 2;\n margin-left: -$card-spacer-x / 2;\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: $card-img-overlay-padding;\n @include border-radius($card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n flex-shrink: 0; // For IE: https://github.com/twbs/bootstrap/issues/29396\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n @include border-top-radius($card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n @include border-bottom-radius($card-inner-border-radius);\n}\n\n\n// Card deck\n\n.card-deck {\n .card {\n margin-bottom: $card-deck-margin;\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n margin-right: -$card-deck-margin;\n margin-left: -$card-deck-margin;\n\n .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-right: $card-deck-margin;\n margin-bottom: 0; // Override the default\n margin-left: $card-deck-margin;\n }\n }\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: $card-group-margin;\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:not(:last-child) {\n @include border-right-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-right-radius: 0;\n }\n }\n\n &:not(:first-child) {\n @include border-left-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-left-radius: 0;\n }\n }\n }\n }\n }\n}\n\n\n//\n// Columns\n//\n\n.card-columns {\n .card {\n margin-bottom: $card-columns-margin;\n }\n\n @include media-breakpoint-up(sm) {\n column-count: $card-columns-count;\n column-gap: $card-columns-gap;\n orphans: 1;\n widows: 1;\n\n .card {\n display: inline-block; // Don't let them vertically span multiple columns\n width: 100%; // Don't let their width change\n }\n }\n}\n\n\n//\n// Accordion\n//\n\n.accordion {\n overflow-anchor: none;\n\n > .card {\n overflow: hidden;\n\n &:not(:last-of-type) {\n border-bottom: 0;\n @include border-bottom-radius(0);\n }\n\n &:not(:first-of-type) {\n @include border-top-radius(0);\n }\n\n > .card-header {\n @include border-radius(0);\n margin-bottom: -$card-border-width;\n }\n }\n}\n",".breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: $breadcrumb-padding-y $breadcrumb-padding-x;\n margin-bottom: $breadcrumb-margin-bottom;\n @include font-size($breadcrumb-font-size);\n list-style: none;\n background-color: $breadcrumb-bg;\n @include border-radius($breadcrumb-border-radius);\n}\n\n.breadcrumb-item {\n display: flex;\n\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: $breadcrumb-item-padding;\n\n &::before {\n display: inline-block; // Suppress underlining of the separator in modern browsers\n padding-right: $breadcrumb-item-padding;\n color: $breadcrumb-divider-color;\n content: escape-svg($breadcrumb-divider);\n }\n }\n\n // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built\n // without `<ul>`s. The `::before` pseudo-element generates an element\n // *within* the .breadcrumb-item and thereby inherits the `text-decoration`.\n //\n // To trick IE into suppressing the underline, we give the pseudo-element an\n // underline and then immediately remove it.\n + .breadcrumb-item:hover::before {\n text-decoration: underline;\n }\n // stylelint-disable-next-line no-duplicate-selectors\n + .breadcrumb-item:hover::before {\n text-decoration: none;\n }\n\n &.active {\n color: $breadcrumb-active-color;\n }\n}\n",".pagination {\n display: flex;\n @include list-unstyled();\n @include border-radius();\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: $pagination-padding-y $pagination-padding-x;\n margin-left: -$pagination-border-width;\n line-height: $pagination-line-height;\n color: $pagination-color;\n text-decoration: if($link-decoration == none, null, none);\n background-color: $pagination-bg;\n border: $pagination-border-width solid $pagination-border-color;\n\n &:hover {\n z-index: 2;\n color: $pagination-hover-color;\n text-decoration: none;\n background-color: $pagination-hover-bg;\n border-color: $pagination-hover-border-color;\n }\n\n &:focus {\n z-index: 3;\n outline: $pagination-focus-outline;\n box-shadow: $pagination-focus-box-shadow;\n }\n}\n\n.page-item {\n &:first-child {\n .page-link {\n margin-left: 0;\n @include border-left-radius($border-radius);\n }\n }\n &:last-child {\n .page-link {\n @include border-right-radius($border-radius);\n }\n }\n\n &.active .page-link {\n z-index: 3;\n color: $pagination-active-color;\n background-color: $pagination-active-bg;\n border-color: $pagination-active-border-color;\n }\n\n &.disabled .page-link {\n color: $pagination-disabled-color;\n pointer-events: none;\n // Opinionated: remove the \"hand\" cursor set previously for .page-link\n cursor: auto;\n background-color: $pagination-disabled-bg;\n border-color: $pagination-disabled-border-color;\n }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $border-radius-sm);\n}\n","// Pagination\n\n@mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n .page-link {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n line-height: $line-height;\n }\n\n .page-item {\n &:first-child {\n .page-link {\n @include border-left-radius($border-radius);\n }\n }\n &:last-child {\n .page-link {\n @include border-right-radius($border-radius);\n }\n }\n }\n}\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n display: inline-block;\n padding: $badge-padding-y $badge-padding-x;\n @include font-size($badge-font-size);\n font-weight: $badge-font-weight;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius($badge-border-radius);\n @include transition($badge-transition);\n\n @at-root a#{&} {\n @include hover-focus() {\n text-decoration: none;\n }\n }\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n// Pill badges\n//\n// Make them extra rounded with a modifier to replace v3's badges.\n\n.badge-pill {\n padding-right: $badge-pill-padding-x;\n padding-left: $badge-pill-padding-x;\n @include border-radius($badge-pill-border-radius);\n}\n\n// Colors\n//\n// Contextual variations (linked badges get darker on :hover).\n\n@each $color, $value in $theme-colors {\n .badge-#{$color} {\n @include badge-variant($value);\n }\n}\n","@mixin badge-variant($bg) {\n color: color-yiq($bg);\n background-color: $bg;\n\n @at-root a#{&} {\n @include hover-focus() {\n color: color-yiq($bg);\n background-color: darken($bg, 10%);\n }\n\n &:focus,\n &.focus {\n outline: 0;\n box-shadow: 0 0 0 $badge-focus-width rgba($bg, .5);\n }\n }\n}\n",".jumbotron {\n padding: $jumbotron-padding ($jumbotron-padding / 2);\n margin-bottom: $jumbotron-padding;\n color: $jumbotron-color;\n background-color: $jumbotron-bg;\n @include border-radius($border-radius-lg);\n\n @include media-breakpoint-up(sm) {\n padding: ($jumbotron-padding * 2) $jumbotron-padding;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n @include border-radius(0);\n}\n","//\n// Base styles\n//\n\n.alert {\n position: relative;\n padding: $alert-padding-y $alert-padding-x;\n margin-bottom: $alert-margin-bottom;\n border: $alert-border-width solid transparent;\n @include border-radius($alert-border-radius);\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $close-font-size + $alert-padding-x * 2;\n\n // Adjust close link position\n .close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: $alert-padding-y $alert-padding-x;\n color: inherit;\n }\n}\n\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n@each $color, $value in $theme-colors {\n .alert-#{$color} {\n @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level));\n }\n}\n","@mixin alert-variant($background, $border, $color) {\n color: $color;\n @include gradient-bg($background);\n border-color: $border;\n\n hr {\n border-top-color: darken($border, 5%);\n }\n\n .alert-link {\n color: darken($color, 10%);\n }\n}\n","// Disable animation if transitions are disabled\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n from { background-position: $progress-height 0; }\n to { background-position: 0 0; }\n }\n}\n\n.progress {\n display: flex;\n height: $progress-height;\n overflow: hidden; // force rounded corners by cropping it\n line-height: 0;\n @include font-size($progress-font-size);\n background-color: $progress-bg;\n @include border-radius($progress-border-radius);\n @include box-shadow($progress-box-shadow);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: $progress-bar-color;\n text-align: center;\n white-space: nowrap;\n background-color: $progress-bar-bg;\n @include transition($progress-bar-transition);\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: $progress-height $progress-height;\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: progress-bar-stripes $progress-bar-animation-timing;\n\n @if $enable-prefers-reduced-motion-media-query {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n",".media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius($list-group-border-radius);\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: $list-group-action-color;\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n @include hover-focus() {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: $list-group-action-hover-color;\n text-decoration: none;\n background-color: $list-group-hover-bg;\n }\n\n &:active {\n color: $list-group-action-active-color;\n background-color: $list-group-action-active-bg;\n }\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: $list-group-item-padding-y $list-group-item-padding-x;\n color: $list-group-color;\n text-decoration: if($link-decoration == none, null, none);\n background-color: $list-group-bg;\n border: $list-group-border-width solid $list-group-border-color;\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: $list-group-disabled-color;\n pointer-events: none;\n background-color: $list-group-disabled-bg;\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: $list-group-active-color;\n background-color: $list-group-active-bg;\n border-color: $list-group-active-border-color;\n }\n\n & + & {\n border-top-width: 0;\n\n &.active {\n margin-top: -$list-group-border-width;\n border-top-width: $list-group-border-width;\n }\n }\n}\n\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child {\n @include border-bottom-left-radius($list-group-border-radius);\n @include border-top-right-radius(0);\n }\n\n &:last-child {\n @include border-top-right-radius($list-group-border-radius);\n @include border-bottom-left-radius(0);\n }\n\n &.active {\n margin-top: 0;\n }\n\n + .list-group-item {\n border-top-width: $list-group-border-width;\n border-left-width: 0;\n\n &.active {\n margin-left: -$list-group-border-width;\n border-left-width: $list-group-border-width;\n }\n }\n }\n }\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n @include border-radius(0);\n\n > .list-group-item {\n border-width: 0 0 $list-group-border-width;\n\n &:last-child {\n border-bottom-width: 0;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $color, $value in $theme-colors {\n @include list-group-item-variant($color, theme-color-level($color, -9), theme-color-level($color, 6));\n}\n","// List Groups\n\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n @include hover-focus() {\n color: $color;\n background-color: darken($background, 5%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n",".close {\n float: right;\n @include font-size($close-font-size);\n font-weight: $close-font-weight;\n line-height: 1;\n color: $close-color;\n text-shadow: $close-text-shadow;\n opacity: .5;\n\n // Override <a>'s hover style\n @include hover() {\n color: $close-color;\n text-decoration: none;\n }\n\n &:not(:disabled):not(.disabled) {\n @include hover-focus() {\n opacity: .75;\n }\n }\n}\n\n// Additional properties for button version\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n// stylelint-disable-next-line selector-no-qualifying-type\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n}\n\n// Future-proof disabling of clicks on `<a>` elements\n\n// stylelint-disable-next-line selector-no-qualifying-type\na.close.disabled {\n pointer-events: none;\n}\n",".toast {\n // Prevents from shrinking in IE11, when in a flex container\n // See https://github.com/twbs/bootstrap/issues/28341\n flex-basis: $toast-max-width;\n max-width: $toast-max-width;\n @include font-size($toast-font-size);\n color: $toast-color;\n background-color: $toast-background-color;\n background-clip: padding-box;\n border: $toast-border-width solid $toast-border-color;\n box-shadow: $toast-box-shadow;\n opacity: 0;\n @include border-radius($toast-border-radius);\n\n &:not(:last-child) {\n margin-bottom: $toast-padding-x;\n }\n\n &.showing {\n opacity: 1;\n }\n\n &.show {\n display: block;\n opacity: 1;\n }\n\n &.hide {\n display: none;\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: $toast-padding-y $toast-padding-x;\n color: $toast-header-color;\n background-color: $toast-header-background-color;\n background-clip: padding-box;\n border-bottom: $toast-border-width solid $toast-header-border-color;\n @include border-top-radius(subtract($toast-border-radius, $toast-border-width));\n}\n\n.toast-body {\n padding: $toast-padding-x; // apply to both vertical and horizontal\n}\n","// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n.modal-open {\n // Kill the scroll on the body\n overflow: hidden;\n\n .modal {\n overflow-x: hidden;\n overflow-y: auto;\n }\n}\n\n// Container that the modal scrolls within\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex-modal;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: $modal-dialog-margin;\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n display: flex; // IE10/11\n max-height: subtract(100%, $modal-dialog-margin * 2);\n\n .modal-content {\n max-height: subtract(100vh, $modal-dialog-margin * 2); // IE10/11\n overflow: hidden;\n }\n\n .modal-header,\n .modal-footer {\n flex-shrink: 0;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: subtract(100%, $modal-dialog-margin * 2);\n\n // Ensure `modal-dialog-centered` extends the full height of the view (IE10/11)\n &::before {\n display: block; // IE10\n height: subtract(100vh, $modal-dialog-margin * 2);\n height: min-content; // Reset height to 0 except on IE\n content: \"\";\n }\n\n // Ensure `.modal-body` shows scrollbar (IE10/11)\n &.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n\n .modal-content {\n max-height: none;\n }\n\n &::before {\n content: none;\n }\n }\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: $modal-content-color;\n pointer-events: auto;\n background-color: $modal-content-bg;\n background-clip: padding-box;\n border: $modal-content-border-width solid $modal-content-border-color;\n @include border-radius($modal-content-border-radius);\n @include box-shadow($modal-content-box-shadow-xs);\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex-modal-backdrop;\n width: 100vw;\n height: 100vh;\n background-color: $modal-backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $modal-backdrop-opacity; }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n align-items: flex-start; // so the close btn always stays on the upper right corner\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: $modal-header-padding;\n border-bottom: $modal-header-border-width solid $modal-header-border-color;\n @include border-top-radius($modal-content-inner-border-radius);\n\n .close {\n padding: $modal-header-padding;\n // auto on the left force icon to the right even when there is no .modal-title\n margin: (-$modal-header-padding-y) (-$modal-header-padding-x) (-$modal-header-padding-y) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: $modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when there should be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: $modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: $modal-inner-padding - $modal-footer-margin-between / 2;\n border-top: $modal-footer-border-width solid $modal-footer-border-color;\n @include border-bottom-radius($modal-content-inner-border-radius);\n\n // Place margin between footer elements\n // This solution is far from ideal because of the universal selector usage,\n // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n > * {\n margin: $modal-footer-margin-between / 2;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: $modal-md;\n margin: $modal-dialog-margin-y-sm-up auto;\n }\n\n .modal-dialog-scrollable {\n max-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);\n\n .modal-content {\n max-height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);\n }\n }\n\n .modal-dialog-centered {\n min-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);\n\n &::before {\n height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);\n height: min-content;\n }\n }\n\n .modal-content {\n @include box-shadow($modal-content-box-shadow-sm-up);\n }\n\n .modal-sm { max-width: $modal-sm; }\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg,\n .modal-xl {\n max-width: $modal-lg;\n }\n}\n\n@include media-breakpoint-up(xl) {\n .modal-xl { max-width: $modal-xl; }\n}\n","// Base class\n.tooltip {\n position: absolute;\n z-index: $zindex-tooltip;\n display: block;\n margin: $tooltip-margin;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size($tooltip-font-size);\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: $tooltip-opacity; }\n\n .arrow {\n position: absolute;\n display: block;\n width: $tooltip-arrow-width;\n height: $tooltip-arrow-height;\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top {\n padding: $tooltip-arrow-height 0;\n\n .arrow {\n bottom: 0;\n\n &::before {\n top: 0;\n border-width: $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;\n border-top-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-right {\n padding: 0 $tooltip-arrow-height;\n\n .arrow {\n left: 0;\n width: $tooltip-arrow-height;\n height: $tooltip-arrow-width;\n\n &::before {\n right: 0;\n border-width: ($tooltip-arrow-width / 2) $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;\n border-right-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-bottom {\n padding: $tooltip-arrow-height 0;\n\n .arrow {\n top: 0;\n\n &::before {\n bottom: 0;\n border-width: 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;\n border-bottom-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-left {\n padding: 0 $tooltip-arrow-height;\n\n .arrow {\n right: 0;\n width: $tooltip-arrow-height;\n height: $tooltip-arrow-width;\n\n &::before {\n left: 0;\n border-width: ($tooltip-arrow-width / 2) 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;\n border-left-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-auto {\n &[x-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[x-placement^=\"right\"] {\n @extend .bs-tooltip-right;\n }\n &[x-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[x-placement^=\"left\"] {\n @extend .bs-tooltip-left;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: $tooltip-max-width;\n padding: $tooltip-padding-y $tooltip-padding-x;\n color: $tooltip-color;\n text-align: center;\n background-color: $tooltip-bg;\n @include border-radius($tooltip-border-radius);\n}\n","@mixin reset-text() {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n}\n",".popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: $zindex-popover;\n display: block;\n max-width: $popover-max-width;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size($popover-font-size);\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: $popover-bg;\n background-clip: padding-box;\n border: $popover-border-width solid $popover-border-color;\n @include border-radius($popover-border-radius);\n @include box-shadow($popover-box-shadow);\n\n .arrow {\n position: absolute;\n display: block;\n width: $popover-arrow-width;\n height: $popover-arrow-height;\n margin: 0 $popover-border-radius;\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-popover-top {\n margin-bottom: $popover-arrow-height;\n\n > .arrow {\n bottom: subtract(-$popover-arrow-height, $popover-border-width);\n\n &::before {\n bottom: 0;\n border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-top-color: $popover-arrow-outer-color;\n }\n\n &::after {\n bottom: $popover-border-width;\n border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-top-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-right {\n margin-left: $popover-arrow-height;\n\n > .arrow {\n left: subtract(-$popover-arrow-height, $popover-border-width);\n width: $popover-arrow-height;\n height: $popover-arrow-width;\n margin: $popover-border-radius 0; // make sure the arrow does not touch the popover's rounded corners\n\n &::before {\n left: 0;\n border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-right-color: $popover-arrow-outer-color;\n }\n\n &::after {\n left: $popover-border-width;\n border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-right-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-bottom {\n margin-top: $popover-arrow-height;\n\n > .arrow {\n top: subtract(-$popover-arrow-height, $popover-border-width);\n\n &::before {\n top: 0;\n border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);\n border-bottom-color: $popover-arrow-outer-color;\n }\n\n &::after {\n top: $popover-border-width;\n border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);\n border-bottom-color: $popover-arrow-color;\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: $popover-arrow-width;\n margin-left: -$popover-arrow-width / 2;\n content: \"\";\n border-bottom: $popover-border-width solid $popover-header-bg;\n }\n}\n\n.bs-popover-left {\n margin-right: $popover-arrow-height;\n\n > .arrow {\n right: subtract(-$popover-arrow-height, $popover-border-width);\n width: $popover-arrow-height;\n height: $popover-arrow-width;\n margin: $popover-border-radius 0; // make sure the arrow does not touch the popover's rounded corners\n\n &::before {\n right: 0;\n border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;\n border-left-color: $popover-arrow-outer-color;\n }\n\n &::after {\n right: $popover-border-width;\n border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;\n border-left-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-auto {\n &[x-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[x-placement^=\"right\"] {\n @extend .bs-popover-right;\n }\n &[x-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[x-placement^=\"left\"] {\n @extend .bs-popover-left;\n }\n}\n\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: $popover-header-padding-y $popover-header-padding-x;\n margin-bottom: 0; // Reset the default from Reboot\n @include font-size($font-size-base);\n color: $popover-header-color;\n background-color: $popover-header-bg;\n border-bottom: $popover-border-width solid darken($popover-header-bg, 5%);\n @include border-top-radius($popover-inner-border-radius);\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: $popover-body-padding-y $popover-body-padding-x;\n color: $popover-body-color;\n}\n","// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-left and .carousel-item-right is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-left and .active.carousel-item-right is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-left and .carousel-item-prev.carousel-item-right\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-left,\n .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-left,\n .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n color: $carousel-control-color;\n text-align: center;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n @include hover-focus() {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n @if $enable-gradients {\n background-image: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));\n }\n}\n.carousel-control-next {\n right: 0;\n @if $enable-gradients {\n background-image: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));\n }\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background: no-repeat 50% / 100% 100%;\n}\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n\n// Optional indicator pips\n//\n// Add an ordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0; // override <ol> default\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-left: $carousel-control-width;\n list-style: none;\n\n li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: .5;\n @include transition($carousel-indicator-transition);\n }\n\n .active {\n opacity: 1;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: (100% - $carousel-caption-width) / 2;\n bottom: 20px;\n left: (100% - $carousel-caption-width) / 2;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: $carousel-caption-color;\n text-align: center;\n}\n","@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n","//\n// Rotating border\n//\n\n@keyframes spinner-border {\n to { transform: rotate(360deg); }\n}\n\n.spinner-border {\n display: inline-block;\n width: $spinner-width;\n height: $spinner-height;\n vertical-align: text-bottom;\n border: $spinner-border-width solid currentColor;\n border-right-color: transparent;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: $spinner-width-sm;\n height: $spinner-height-sm;\n border-width: $spinner-border-width-sm;\n}\n\n//\n// Growing circle\n//\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: $spinner-width;\n height: $spinner-height;\n vertical-align: text-bottom;\n background-color: currentColor;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n opacity: 0;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: $spinner-width-sm;\n height: $spinner-height-sm;\n}\n","// stylelint-disable declaration-no-important\n\n.align-baseline { vertical-align: baseline !important; } // Browser default\n.align-top { vertical-align: top !important; }\n.align-middle { vertical-align: middle !important; }\n.align-bottom { vertical-align: bottom !important; }\n.align-text-bottom { vertical-align: text-bottom !important; }\n.align-text-top { vertical-align: text-top !important; }\n","// stylelint-disable declaration-no-important\n\n// Contextual backgrounds\n\n@mixin bg-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n background-color: $color !important;\n }\n a#{$parent},\n button#{$parent} {\n @include hover-focus() {\n background-color: darken($color, 10%) !important;\n }\n }\n @include deprecate(\"The `bg-variant` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n\n@mixin bg-gradient-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;\n }\n @include deprecate(\"The `bg-gradient-variant` mixin\", \"v4.5.0\", \"v5\", $ignore-warning);\n}\n","// stylelint-disable declaration-no-important\n\n@each $color, $value in $theme-colors {\n @include bg-variant(\".bg-#{$color}\", $value, true);\n}\n\n@if $enable-gradients {\n @each $color, $value in $theme-colors {\n @include bg-gradient-variant(\".bg-gradient-#{$color}\", $value, true);\n }\n}\n\n.bg-white {\n background-color: $white !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n","// stylelint-disable property-disallowed-list, declaration-no-important\n\n//\n// Border\n//\n\n.border { border: $border-width solid $border-color !important; }\n.border-top { border-top: $border-width solid $border-color !important; }\n.border-right { border-right: $border-width solid $border-color !important; }\n.border-bottom { border-bottom: $border-width solid $border-color !important; }\n.border-left { border-left: $border-width solid $border-color !important; }\n\n.border-0 { border: 0 !important; }\n.border-top-0 { border-top: 0 !important; }\n.border-right-0 { border-right: 0 !important; }\n.border-bottom-0 { border-bottom: 0 !important; }\n.border-left-0 { border-left: 0 !important; }\n\n@each $color, $value in $theme-colors {\n .border-#{$color} {\n border-color: $value !important;\n }\n}\n\n.border-white {\n border-color: $white !important;\n}\n\n//\n// Border-radius\n//\n\n.rounded-sm {\n border-radius: $border-radius-sm !important;\n}\n\n.rounded {\n border-radius: $border-radius !important;\n}\n\n.rounded-top {\n border-top-left-radius: $border-radius !important;\n border-top-right-radius: $border-radius !important;\n}\n\n.rounded-right {\n border-top-right-radius: $border-radius !important;\n border-bottom-right-radius: $border-radius !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n\n.rounded-left {\n border-top-left-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n\n.rounded-lg {\n border-radius: $border-radius-lg !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: $rounded-pill !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $value in $displays {\n .d#{$infix}-#{$value} { display: $value !important; }\n }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n @each $value in $displays {\n .d-print-#{$value} { display: $value !important; }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n\n &::before {\n display: block;\n content: \"\";\n }\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n}\n\n@each $embed-responsive-aspect-ratio in $embed-responsive-aspect-ratios {\n $embed-responsive-aspect-ratio-x: nth($embed-responsive-aspect-ratio, 1);\n $embed-responsive-aspect-ratio-y: nth($embed-responsive-aspect-ratio, 2);\n\n .embed-responsive-#{$embed-responsive-aspect-ratio-x}by#{$embed-responsive-aspect-ratio-y} {\n &::before {\n padding-top: percentage($embed-responsive-aspect-ratio-y / $embed-responsive-aspect-ratio-x);\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .float#{$infix}-left { float: left !important; }\n .float#{$infix}-right { float: right !important; }\n .float#{$infix}-none { float: none !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n@each $value in $user-selects {\n .user-select-#{$value} { user-select: $value !important; }\n}\n","// stylelint-disable declaration-no-important\n\n@each $value in $overflows {\n .overflow-#{$value} { overflow: $value !important; }\n}\n","// stylelint-disable declaration-no-important\n\n// Common values\n@each $position in $positions {\n .position-#{$position} { position: $position !important; }\n}\n\n// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.sticky-top {\n @supports (position: sticky) {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n}\n","//\n// Screenreaders\n//\n\n.sr-only {\n @include sr-only();\n}\n\n.sr-only-focusable {\n @include sr-only-focusable();\n}\n","// Only display content to screen readers\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin sr-only() {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable() {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n }\n}\n","// stylelint-disable declaration-no-important\n\n.shadow-sm { box-shadow: $box-shadow-sm !important; }\n.shadow { box-shadow: $box-shadow !important; }\n.shadow-lg { box-shadow: $box-shadow-lg !important; }\n.shadow-none { box-shadow: none !important; }\n","// stylelint-disable declaration-no-important\n\n// Width and height\n\n@each $prop, $abbrev in (width: w, height: h) {\n @each $size, $length in $sizes {\n .#{$abbrev}-#{$size} { #{$prop}: $length !important; }\n }\n}\n\n.mw-100 { max-width: 100% !important; }\n.mh-100 { max-height: 100% !important; }\n\n// Viewport additional helpers\n\n.min-vw-100 { min-width: 100vw !important; }\n.min-vh-100 { min-height: 100vh !important; }\n\n.vw-100 { width: 100vw !important; }\n.vh-100 { height: 100vh !important; }\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)\n @each $size, $length in $spacers {\n @if $size != 0 {\n .m#{$infix}-n#{$size} { margin: -$length !important; }\n .mt#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-top: -$length !important;\n }\n .mr#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-right: -$length !important;\n }\n .mb#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-bottom: -$length !important;\n }\n .ml#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-left: -$length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n // Just in case `pointer-events: none` is set on a parent\n pointer-events: auto;\n content: \"\";\n // IE10 bugfix, see https://stackoverflow.com/questions/16947967/ie10-hover-pseudo-class-doesnt-work-without-background-color\n background-color: rgba(0, 0, 0, 0);\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Text\n//\n\n.text-monospace { font-family: $font-family-monospace !important; }\n\n// Alignment\n\n.text-justify { text-align: justify !important; }\n.text-wrap { white-space: normal !important; }\n.text-nowrap { white-space: nowrap !important; }\n.text-truncate { @include text-truncate(); }\n\n// Responsive alignment\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .text#{$infix}-left { text-align: left !important; }\n .text#{$infix}-right { text-align: right !important; }\n .text#{$infix}-center { text-align: center !important; }\n }\n}\n\n// Transformation\n\n.text-lowercase { text-transform: lowercase !important; }\n.text-uppercase { text-transform: uppercase !important; }\n.text-capitalize { text-transform: capitalize !important; }\n\n// Weight and italics\n\n.font-weight-light { font-weight: $font-weight-light !important; }\n.font-weight-lighter { font-weight: $font-weight-lighter !important; }\n.font-weight-normal { font-weight: $font-weight-normal !important; }\n.font-weight-bold { font-weight: $font-weight-bold !important; }\n.font-weight-bolder { font-weight: $font-weight-bolder !important; }\n.font-italic { font-style: italic !important; }\n\n// Contextual colors\n\n.text-white { color: $white !important; }\n\n@each $color, $value in $theme-colors {\n @include text-emphasis-variant(\".text-#{$color}\", $value, true);\n}\n\n.text-body { color: $body-color !important; }\n.text-muted { color: $text-muted !important; }\n\n.text-black-50 { color: rgba($black, .5) !important; }\n.text-white-50 { color: rgba($white, .5) !important; }\n\n// Misc\n\n.text-hide {\n @include text-hide($ignore-warning: true);\n}\n\n.text-decoration-none { text-decoration: none !important; }\n\n.text-break {\n word-break: break-word !important; // Deprecated, but avoids issues with flex containers\n word-wrap: break-word !important; // Used instead of `overflow-wrap` for IE & Edge Legacy\n}\n\n// Reset\n\n.text-reset { color: inherit !important; }\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","// stylelint-disable declaration-no-important\n\n// Typography\n\n@mixin text-emphasis-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n color: $color !important;\n }\n @if $emphasized-link-hover-darken-percentage != 0 {\n a#{$parent} {\n @include hover-focus() {\n color: darken($color, $emphasized-link-hover-darken-percentage) !important;\n }\n }\n }\n @include deprecate(\"`text-emphasis-variant()`\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n","// CSS image replacement\n@mixin text-hide($ignore-warning: false) {\n // stylelint-disable-next-line font-family-no-missing-generic-family-keyword\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n\n @include deprecate(\"`text-hide()`\", \"v4.1.0\", \"v5\", $ignore-warning);\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Visibility utilities\n//\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type\n\n// Source: https://github.com/h5bp/main.css/blob/master/src/_print.css\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request:\n// https://www.phpied.com/delay-loading-your-print-css/\n// ==========================================================================\n\n@if $enable-print-styles {\n @media print {\n *,\n *::before,\n *::after {\n // Bootstrap specific; comment out `color` and `background`\n //color: $black !important; // Black prints faster\n text-shadow: none !important;\n //background: transparent !important;\n box-shadow: none !important;\n }\n\n a {\n &:not(.btn) {\n text-decoration: underline;\n }\n }\n\n // Bootstrap specific; comment the following selector out\n //a[href]::after {\n // content: \" (\" attr(href) \")\";\n //}\n\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n\n // Bootstrap specific; comment the following selector out\n //\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n //\n\n //a[href^=\"#\"]::after,\n //a[href^=\"javascript:\"]::after {\n // content: \"\";\n //}\n\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: $border-width solid $gray-500; // Bootstrap custom code; using `$border-width` instead of 1px\n page-break-inside: avoid;\n }\n\n //\n // Printing Tables:\n // https://web.archive.org/web/20180815150934/http://css-discuss.incutio.com/wiki/Printing_Tables\n //\n\n thead {\n display: table-header-group;\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Specify a size and min-width to make printing closer across browsers.\n // We don't set margin here because it breaks `size` in Chrome. We also\n // don't use `!important` on `size` as it breaks in Chrome.\n @page {\n size: $print-page-size;\n }\n body {\n min-width: $print-body-min-width !important;\n }\n .container {\n min-width: $print-body-min-width !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .badge {\n border: $border-width solid $black;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: $white !important;\n }\n }\n\n .table-bordered {\n th,\n td {\n border: 1px solid $gray-300 !important;\n }\n }\n\n .table-dark {\n color: inherit;\n\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $table-border-color;\n }\n }\n\n .table .thead-dark th {\n color: inherit;\n border-color: $table-border-color;\n }\n\n // Bootstrap specific changes end\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../scss/bootstrap.scss","bootstrap.css","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/vendor/_rfs.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_functions.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/utilities/_interactions.scss","../../scss/utilities/_overflow.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_stretched-link.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/_print.scss"],"names":[],"mappings":"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E,wBAAwB;AFxH1B;;AEgIA;EACE,aAAa;EACb,0BAA0B;AF7H5B;;AEoIA;EACE,qBAAqB;AFjIvB;;AEoIA;EACE,kBAAkB;EAClB,eAAe;AFjIjB;;AEoIA;EACE,aAAa;AFjIf;;AAEA;EEqIE,wBAAwB;AFnI1B;;AMzVA;;EAEE,qBHqSuC;EGnSvC,gBHqS+B;EGpS/B,gBHqS+B;AHsDjC;;AMvVA;EFgHM,iBAtCY;AJiRlB;;AM1VA;EF+GM,eAtCY;AJqRlB;;AM7VA;EF8GM,kBAtCY;AJyRlB;;AMhWA;EF6GM,iBAtCY;AJ6RlB;;AMnWA;EF4GM,kBAtCY;AJiSlB;;AMtWA;EF2GM,eAtCY;AJqSlB;;AMxWA;EFyGM,kBAtCY;EEjEhB,gBHuS+B;AHoEjC;;AMvWA;EFmGM,eAtCY;EE3DhB,gBH0R+B;EGzR/B,gBHiR+B;AHyFjC;;AMxWA;EF8FM,iBAtCY;EEtDhB,gBHsR+B;EGrR/B,gBH4Q+B;AH+FjC;;AMzWA;EFyFM,iBAtCY;EEjDhB,gBHkR+B;EGjR/B,gBHuQ+B;AHqGjC;;AM1WA;EFoFM,iBAtCY;EE5ChB,gBH8Q+B;EG7Q/B,gBHkQ+B;AH2GjC;;AEhVA;EIpBE,gBHgFW;EG/EX,mBH+EW;EG9EX,SAAS;EACT,wCHzCa;AHiZf;;AMhWA;;EFMI,cAAW;EEHb,gBH0N+B;AHyIjC;;AMhWA;;EAEE,cHkQgC;EGjQhC,yBH0QmC;AHyFrC;;AM3VA;EC/EE,eAAe;EACf,gBAAgB;AP8alB;;AM3VA;ECpFE,eAAe;EACf,gBAAgB;APmblB;;AM7VA;EACE,qBAAqB;ANgWvB;;AMjWA;EAII,oBHoP+B;AH6GnC;;AMvVA;EFjCI,cAAW;EEmCb,yBAAyB;AN0V3B;;AMtVA;EACE,mBHuBW;ECRP,kBAtCY;AJiXlB;;AMtVA;EACE,cAAc;EF7CZ,cAAW;EE+Cb,cH1GgB;AHmclB;;AM5VA;EAMI,qBAAqB;AN0VzB;;AQ7cA;ECIE,eAAe;EAGf,YAAY;AT2cd;;AQ5cA;EACE,gBLmgCwC;EKlgCxC,sBLRa;EKSb,yBLNgB;EOQd,sBP6NgC;EMpOlC,eAAe;EAGf,YAAY;ATodd;;AQtcA;EA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ClB;;AgBp8CA;;EAQI,gBbkVgC;EajVhC,mBAAmB;EACnB,6BbJc;AHq8ClB;;AgB38CA;EAcI,sBAAsB;EACtB,gCbTc;AH08ClB;;AgBh9CA;EAmBI,6Bbbc;AH88ClB;;AgBx7CA;;EAGI,eb4T+B;AH8nCnC;;AgBj7CA;EACE,yBbnCgB;AHu9ClB;;AgBr7CA;;EAKI,yBbvCc;AH49ClB;;AgB17CA;;EAWM,wBAA4C;AhBo7ClD;;AgB/6CA;;;;EAKI,SAAS;AhBi7Cb;;AgBz6CA;EAEI,qCb1DW;AHq+Cf;;AK1+CE;EW2EI,cbvEY;EawEZ,sCbvES;AH0+Cf;;AiBt/CE;;;EAII,yBCgG4D;AlBw5ClE;;AiB5/CE;;;;EAYM,qBCwF0D;AlB+5ClE;;AK5/CE;EYiBM,yBAJsC;AjBm/C9C;;AiBp/CE;;EASQ,yBARoC;AjBw/C9C;;AiB5gDE;;;EAII,yBCgG4D;AlB86ClE;;AiBlhDE;;;;EAYM,qBCwF0D;AlBq7ClE;;AKlhDE;EYiBM,yBAJsC;AjBygD9C;;AiB1gDE;;EASQ,yBARoC;AjB8gD9C;;AiBliDE;;;EAII,yBCgG4D;AlBo8ClE;;AiBxiDE;;;;EAYM,qBCwF0D;AlB28ClE;;AKxiDE;EYiBM,yBAJsC;AjB+hD9C;;AiBhiDE;;EASQ,yBARoC;AjBoiD9C;;AiBxjDE;;;EAII,yBCgG4D;AlB09ClE;;AiB9jDE;;;;EAYM,qBCwF0D;AlBi+ClE;;AK9jDE;EYiBM,yBAJsC;AjBqjD9C;;AiBtjDE;;EASQ,yBARoC;AjB0jD9C;;AiB9kDE;;;EAII,yBCgG4D;AlBg/ClE;;AiBplDE;;;;EAYM,qBCwF0D;AlBu/ClE;;AKplDE;EYiBM,yBAJsC;AjB2kD9C;;AiB5kDE;;EASQ,yBARoC;AjBglD9C;;AiBpmDE;;;EAII,yBCgG4D;AlBsgDlE;;AiB1mDE;;;;EAYM,qBCwF0D;AlB6gDlE;;AK1mDE;EYiBM,yBAJsC;AjBimD9C;;AiBlmDE;;EASQ,yBARoC;AjBsmD9C;;AiB1nDE;;;EAII,yBCgG4D;AlB4hDlE;;AiBhoDE;;;;EAYM,qBCwF0D;AlBmiDlE;;AKhoDE;EYiBM,yBAJsC;AjBunD9C;;AiBxnDE;;EASQ,yBARoC;AjB4nD9C;;AiBhpDE;;;EAII,yBCgG4D;AlBkjDlE;;AiBtpDE;;;;EAYM,qBCwF0D;AlByjDlE;;AKtpDE;EYiBM,yBAJsC;AjB6oD9C;;AiB9oDE;;EASQ,yBARoC;AjBkpD9C;;AiBtqDE;;;EAII,sCdQS;AHgqDf;;AKrqDE;EYiBM,sCAJsC;AjB4pD9C;;AiB7pDE;;EASQ,sCARoC;AjBiqD9C;;AgB3kDA;EAGM,Wb3GS;Ea4GT,yBbpGY;EaqGZ,qBbgQqD;AH40C3D;;AgBjlDA;EAWM,cb5GY;Ea6GZ,yBblHY;EamHZ,qBblHY;AH4rDlB;;AgBrkDA;EACE,Wb3Ha;Ea4Hb,yBbpHgB;AH4rDlB;;AgB1kDA;;;EAOI,qBb4OuD;AH61C3D;;AgBhlDA;EAWI,SAAS;AhBykDb;;AgBplDA;EAgBM,2Cb1IS;AHktDf;;AK7sDE;EW4IM,WbjJO;EakJP,4CblJO;AHutDf;;AcrpDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhBujDvC;EgB5jDG;IASK,SAAS;EhBsjDjB;AACF;;AcjqDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhBmkDvC;EgBxkDG;IASK,SAAS;EhBkkDjB;AACF;;Ac7qDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhB+kDvC;EgBplDG;IASK,SAAS;EhB8kDjB;AACF;;AczrDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhB2lDvC;EgBhmDG;IASK,SAAS;EhB0lDjB;AACF;;AgBzmDA;EAOQ,cAAc;EACd,WAAW;EACX,gBAAgB;EAChB,iCAAiC;AhBsmDzC;;AgBhnDA;EAcU,SAAS;AhBsmDnB;;AmBnxDA;EACE,cAAc;EACd,WAAW;EACX,mCDiH8D;EChH9D,yBhByXkC;ECpQ9B,eAtCY;Ee5EhB,gBhBkR+B;EgBjR/B,gBhBsR+B;EgBrR/B,chBDgB;EgBEhB,sBhBTa;EgBUb,4BAA4B;EAC5B,yBhBPgB;EOOd,sBP6NgC;EiB/N9B,wEjBue4F;AHkzClG;;AoBrxDM;EDdN;ICeQ,gBAAgB;EpByxDtB;AACF;;AmBzyDA;EAsBI,6BAA6B;EAC7B,SAAS;AnBuxDb;;AmB9yDA;EA4BI,kBAAkB;EAClB,0BhBrBc;AH2yDlB;;AqB5yDE;EACE,clBAc;EkBCd,sBlBRW;EkBSX,qBlBqdsE;EkBpdtE,UAAU;EAKR,gDlBaW;AH8xDjB;;AmB3zDA;EAqCI,chB9Bc;EgBgCd,UAAU;AnByxDd;;AmBh0DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnByxDd;;AmBh0DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnByxDd;;AmBh0DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnByxDd;;AmBh0DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnByxDd;;AmBh0DA;EAiDI,yBhB9Cc;EgBgDd,UAAU;AnBkxDd;;AmB9wDA;;;;EAKI,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;AnBgxDpB;;AmB5wDA;EAOI,chB/Dc;EgBgEd,sBhBvEW;AHg1Df;;AmBpwDA;;EAEE,cAAc;EACd,WAAW;AnBuwDb;;AmB7vDA;EACE,iCDyB8D;ECxB9D,oCDwB8D;ECvB9D,gBAAgB;Ef3Bd,kBAAW;Ee6Bb,gBhB+L+B;AHikDjC;;AmB7vDA;EACE,+BDiB8D;EChB9D,kCDgB8D;EdK1D,kBAtCY;EemBhB,gBhB6H+B;AHmoDjC;;AmB7vDA;EACE,gCDU8D;ECT9D,mCDS8D;EdK1D,mBAtCY;Ee0BhB,gBhBuH+B;AHyoDjC;;AmBvvDA;EACE,cAAc;EACd,WAAW;EACX,mBAA2B;EAC3B,gBAAgB;EfDZ,eAtCY;EeyChB,gBhBkK+B;EgBjK/B,chBnHgB;EgBoHhB,6BAA6B;EAC7B,yBAAyB;EACzB,mBAAmC;AnB0vDrC;;AmBpwDA;EAcI,gBAAgB;EAChB,eAAe;AnB0vDnB;;AmB9uDA;EACE,kCD9B8D;EC+B9D,uBhBoPiC;EC9Q7B,mBAtCY;EekEhB,gBhB+E+B;EOxN7B,qBP+N+B;AH4pDnC;;AmB9uDA;EACE,gCDtC8D;ECuC9D,oBhBiPgC;ECnR5B,kBAtCY;Ee0EhB,gBhBsE+B;EOvN7B,qBP8N+B;AHqqDnC;;AmB7uDA;EAGI,YAAY;AnB8uDhB;;AmB1uDA;EACE,YAAY;AnB6uDd;;AmBruDA;EACE,mBhB0U0C;AH85C5C;;AmBruDA;EACE,cAAc;EACd,mBhB2T4C;AH66C9C;;AmBhuDA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,kBAA0C;EAC1C,iBAAyC;AnBmuD3C;;AmBvuDA;;EAQI,kBAA0C;EAC1C,iBAAyC;AnBouD7C;;AmB3tDA;EACE,kBAAkB;EAClB,cAAc;EACd,qBhBgS6C;AH87C/C;;AmB3tDA;EACE,kBAAkB;EAClB,kBhB4R2C;EgB3R3C,qBhB0R6C;AHo8C/C;;AmBjuDA;;EAQI,chBzNc;AHu7DlB;;AmB1tDA;EACE,gBAAgB;AnB6tDlB;;AmB1tDA;EACE,2BAAoB;EAApB,oBAAoB;EACpB,sBAAmB;EAAnB,mBAAmB;EACnB,eAAe;EACf,qBhB6Q4C;AHg9C9C;;AmBjuDA;EAQI,gBAAgB;EAChB,aAAa;EACb,uBhBwQ4C;EgBvQ5C,cAAc;AnB6tDlB;;AqB16DE;EACE,aAAa;EACb,WAAW;EACX,mBlB0c0C;ECjb1C,cAAW;EiBvBX,clBPa;AHo7DjB;;AqB16DE;EACE,kBAAkB;EAClB,SAAS;EACT,OAAO;EACP,UAAU;EACV,aAAa;EACb,eAAe;EACf,uBlBoyBqC;EkBnyBrC,iBAAiB;EjBmEf,mBAtCY;EiB3Bd,gBlBsO6B;EkBrO7B,WlBxDW;EkByDX,wClBtBa;EOxBb,sBP6NgC;AH+vDpC;;AqBz6DI;;EAEE,SAAiC;ArB46DvC;;AqBn9DI;;;;EA8CE,cAAc;ArB46DpB;;AqB19DI;EAoDE,qBlB1CW;EkB6CT,oCHmCwD;EGlCxD,iRH3B0E;EG4B1E,4BAA4B;EAC5B,2DAA6D;EAC7D,gEH+BwD;AlBy4DhE;;AqBn+DI;EA+DI,qBlBrDS;EkBsDT,gDlBtDS;AH89DjB;;AqBx+DI;EAyEI,oCHiBwD;EGhBxD,kFHgBwD;AlBm5DhE;;AqB7+DI;EAiFE,qBlBvEW;EkB0ET,uCHMwD;EGLxD,ujBAA8J;ArB85DtK;;AqBn/DI;EAyFI,qBlB/ES;EkBgFT,gDlBhFS;AH8+DjB;;AqBx/DI;EAkGI,clBxFS;AHk/DjB;;AqB5/DI;;;EAuGI,cAAc;ArB25DtB;;AqBlgEI;EA+GI,clBrGS;AH4/DjB;;AqBtgEI;EAkHM,qBlBxGO;AHggEjB;;AqB1gEI;EAwHM,qBAAkC;EClJxC,yBDmJ+C;ArBs5DnD;;AqB/gEI;EA+HM,gDlBrHO;AHygEjB;;AqBnhEI;EAmIM,qBlBzHO;AH6gEjB;;AqBvhEI;EA6II,qBlBnIS;AHihEjB;;AqB3hEI;EAkJM,qBlBxIO;EkByIP,gDlBzIO;AHshEjB;;AqBphEE;EACE,aAAa;EACb,WAAW;EACX,mBlB0c0C;ECjb1C,cAAW;EiBvBX,clBVa;AHiiEjB;;AqBphEE;EACE,kBAAkB;EAClB,SAAS;EACT,OAAO;EACP,UAAU;EACV,aAAa;EACb,eAAe;EACf,uBlBoyBqC;EkBnyBrC,iBAAiB;EjBmEf,mBAtCY;EiB3Bd,gBlBsO6B;EkBrO7B,WlBxDW;EkByDX,wClBzBa;EOrBb,sBP6NgC;AHy2DpC;;AqBnhEI;;EAEE,SAAiC;ArBshEvC;;AqB7jEI;;;;EA8CE,cAAc;ArBshEpB;;AqBpkEI;EAoDE,qBlB7CW;EkBgDT,oCHmCwD;EGlCxD,4UH3B0E;EG4B1E,4BAA4B;EAC5B,2DAA6D;EAC7D,gEH+BwD;AlBm/DhE;;AqB7kEI;EA+DI,qBlBxDS;EkByDT,gDlBzDS;AH2kEjB;;AqBllEI;EAyEI,oCHiBwD;EGhBxD,kFHgBwD;AlB6/DhE;;AqBvlEI;EAiFE,qBlB1EW;EkB6ET,uCHMwD;EGLxD,knBAA8J;ArBwgEtK;;AqB7lEI;EAyFI,qBlBlFS;EkBmFT,gDlBnFS;AH2lEjB;;AqBlmEI;EAkGI,clB3FS;AH+lEjB;;AqBtmEI;;;EAuGI,cAAc;ArBqgEtB;;AqB5mEI;EA+GI,clBxGS;AHymEjB;;AqBhnEI;EAkHM,qBlB3GO;AH6mEjB;;AqBpnEI;EAwHM,qBAAkC;EClJxC,yBDmJ+C;ArBggEnD;;AqBznEI;EA+HM,gDlBxHO;AHsnEjB;;AqB7nEI;EAmIM,qBlB5HO;AH0nEjB;;AqBjoEI;EA6II,qBlBtIS;AH8nEjB;;AqBroEI;EAkJM,qBlB3IO;EkB4IP,gDlB5IO;AHmoEjB;;AmBx5DA;EACE,oBAAa;EAAb,aAAa;EACb,uBAAmB;EAAnB,mBAAmB;EACnB,sBAAmB;EAAnB,mBAAmB;AnB25DrB;;AmB95DA;EASI,WAAW;AnBy5Df;;AcxnEI;EKsNJ;IAeM,oBAAa;IAAb,aAAa;IACb,sBAAmB;IAAnB,mBAAmB;IACnB,qBAAuB;IAAvB,uBAAuB;IACvB,gBAAgB;EnBw5DpB;EmB16DF;IAuBM,oBAAa;IAAb,aAAa;IACb,kBAAc;IAAd,cAAc;IACd,uBAAmB;IAAnB,mBAAmB;IACnB,sBAAmB;IAAnB,mBAAmB;IACnB,gBAAgB;EnBs5DpB;EmBj7DF;IAgCM,qBAAqB;IACrB,WAAW;IACX,sBAAsB;EnBo5D1B;EmBt7DF;IAuCM,qBAAqB;EnBk5DzB;EmBz7DF;;IA4CM,WAAW;EnBi5Df;EmB77DF;IAkDM,oBAAa;IAAb,aAAa;IACb,sBAAmB;IAAnB,mBAAmB;IACnB,qBAAuB;IAAvB,uBAAuB;IACvB,WAAW;IACX,eAAe;EnB84DnB;EmBp8DF;IAyDM,kBAAkB;IAClB,oBAAc;IAAd,cAAc;IACd,aAAa;IACb,qBhB+KwC;IgB9KxC,cAAc;EnB84DlB;EmB38DF;IAiEM,sBAAmB;IAAnB,mBAAmB;IACnB,qBAAuB;IAAvB,uBAAuB;EnB64D3B;EmB/8DF;IAqEM,gBAAgB;EnB64DpB;AACF;;AuB/tEA;EACE,qBAAqB;EAErB,gBpBsR+B;EoBrR/B,cpBMgB;EoBLhB,kBAAkB;EAGlB,sBAAsB;EACtB,yBAAiB;EAAjB,sBAAiB;EAAjB,qBAAiB;EAAjB,iBAAiB;EACjB,6BAA6B;EAC7B,6BAA2C;ECuF3C,yBrB2RkC;ECpQ9B,eAtCY;EoBiBhB,gBrB0L+B;EOlR7B,sBP6NgC;EiB/N9B,qIjBgb6I;AHqzDnJ;;AoBjuEM;EGdN;IHeQ,gBAAgB;EpBquEtB;AACF;;AK/uEE;EkBUE,cpBNc;EoBOd,qBAAqB;AvByuEzB;;AuB1vEA;EAsBI,UAAU;EACV,gDpBMa;AHkuEjB;;AuB/vEA;EA6BI,apBiZ6B;AHq1DjC;;AuBnwEA;EAkCI,eAAsD;AvBquE1D;;AuBvtEA;;EAEE,oBAAoB;AvB0tEtB;;AuBjtEE;EC3DA,WrBCa;EmBDX,yBnB6Ba;EqB3Bf,qBrB2Be;AHqvEjB;;AK5wEE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxByxE7H;;AwB7wEE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,gDAAiF;AxB2wEvF;;AwBtwEE;EAEE,WrB1BW;EqB2BX,yBrBCa;EqBAb,qBrBAa;AHwwEjB;;AwBjwEE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxB6yEnN;;AwB9vEI;;EAKI,gDAAiF;AxB8vEzF;;AuBtvEE;EC3DA,WrBCa;EmBDX,yBnBOc;EqBLhB,qBrBKgB;AHgzElB;;AKjzEE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxB8zE7H;;AwBlzEE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,iDAAiF;AxBgzEvF;;AwB3yEE;EAEE,WrB1BW;EqB2BX,yBrBrBc;EqBsBd,qBrBtBc;AHm0ElB;;AwBtyEE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBk1EnN;;AwBnyEI;;EAKI,iDAAiF;AxBmyEzF;;AuB3xEE;EC3DA,WrBCa;EmBDX,yBnBoCa;EqBlCf,qBrBkCe;AHwzEjB;;AKt1EE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBm2E7H;;AwBv1EE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,+CAAiF;AxBq1EvF;;AwBh1EE;EAEE,WrB1BW;EqB2BX,yBrBQa;EqBPb,qBrBOa;AH20EjB;;AwB30EE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBu3EnN;;AwBx0EI;;EAKI,+CAAiF;AxBw0EzF;;AuBh0EE;EC3DA,WrBCa;EmBDX,yBnBsCa;EqBpCf,qBrBoCe;AH21EjB;;AK33EE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBw4E7H;;AwB53EE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,gDAAiF;AxB03EvF;;AwBr3EE;EAEE,WrB1BW;EqB2BX,yBrBUa;EqBTb,qBrBSa;AH82EjB;;AwBh3EE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxB45EnN;;AwB72EI;;EAKI,gDAAiF;AxB62EzF;;AuBr2EE;EC3DA,crBUgB;EmBVd,yBnBmCa;EqBjCf,qBrBiCe;AHm4EjB;;AKh6EE;EmBAE,crBIc;EmBVd,yBEDoF;EASpF,qBATyH;AxB66E7H;;AwBj6EE;EAEE,crBHc;EmBVd,yBEDoF;EAgBpF,qBAhByH;EAqBvH,gDAAiF;AxB+5EvF;;AwB15EE;EAEE,crBjBc;EqBkBd,yBrBOa;EqBNb,qBrBMa;AHs5EjB;;AwBr5EE;;EAGE,crB7Bc;EqB8Bd,yBAzCuK;EA6CvK,qBA7C+M;AxBi8EnN;;AwBl5EI;;EAKI,gDAAiF;AxBk5EzF;;AuB14EE;EC3DA,WrBCa;EmBDX,yBnBiCa;EqB/Bf,qBrB+Be;AH06EjB;;AKr8EE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBk9E7H;;AwBt8EE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,+CAAiF;AxBo8EvF;;AwB/7EE;EAEE,WrB1BW;EqB2BX,yBrBKa;EqBJb,qBrBIa;AH67EjB;;AwB17EE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBs+EnN;;AwBv7EI;;EAKI,+CAAiF;AxBu7EzF;;AuB/6EE;EC3DA,crBUgB;EmBVd,yBnBEc;EqBAhB,qBrBAgB;AH8+ElB;;AK1+EE;EmBAE,crBIc;EmBVd,yBEDoF;EASpF,qBATyH;AxBu/E7H;;AwB3+EE;EAEE,crBHc;EmBVd,yBEDoF;EAgBpF,qBAhByH;EAqBvH,iDAAiF;AxBy+EvF;;AwBp+EE;EAEE,crBjBc;EqBkBd,yBrB1Bc;EqB2Bd,qBrB3Bc;AHigFlB;;AwB/9EE;;EAGE,crB7Bc;EqB8Bd,yBAzCuK;EA6CvK,qBA7C+M;AxB2gFnN;;AwB59EI;;EAKI,iDAAiF;AxB49EzF;;AuBp9EE;EC3DA,WrBCa;EmBDX,yBnBSc;EqBPhB,qBrBOgB;AH4gFlB;;AK/gFE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxB4hF7H;;AwBhhFE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,8CAAiF;AxB8gFvF;;AwBzgFE;EAEE,WrB1BW;EqB2BX,yBrBnBc;EqBoBd,qBrBpBc;AH+hFlB;;AwBpgFE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBgjFnN;;AwBjgFI;;EAKI,8CAAiF;AxBigFzF;;AuBn/EE;ECPA,crB7Be;EqB8Bf,qBrB9Be;AH4hFjB;;AKnjFE;EmBwDE,WrB7DW;EqB8DX,yBrBlCa;EqBmCb,qBrBnCa;AHkiFjB;;AwB5/EE;EAEE,+CrBxCa;AHsiFjB;;AwB3/EE;EAEE,crB7Ca;EqB8Cb,6BAA6B;AxB6/EjC;;AwB1/EE;;EAGE,WrBhFW;EqBiFX,yBrBrDa;EqBsDb,qBrBtDa;AHkjFjB;;AwB1/EI;;EAKI,+CrB7DS;AHujFjB;;AuBnhFE;ECPA,crBnDgB;EqBoDhB,qBrBpDgB;AHklFlB;;AKnlFE;EmBwDE,WrB7DW;EqB8DX,yBrBxDc;EqByDd,qBrBzDc;AHwlFlB;;AwB5hFE;EAEE,iDrB9Dc;AH4lFlB;;AwB3hFE;EAEE,crBnEc;EqBoEd,6BAA6B;AxB6hFjC;;AwB1hFE;;EAGE,WrBhFW;EqBiFX,yBrB3Ec;EqB4Ed,qBrB5Ec;AHwmFlB;;AwB1hFI;;EAKI,iDrBnFU;AH6mFlB;;AuBnjFE;ECPA,crBtBe;EqBuBf,qBrBvBe;AHqlFjB;;AKnnFE;EmBwDE,WrB7DW;EqB8DX,yBrB3Ba;EqB4Bb,qBrB5Ba;AH2lFjB;;AwB5jFE;EAEE,+CrBjCa;AH+lFjB;;AwB3jFE;EAEE,crBtCa;EqBuCb,6BAA6B;AxB6jFjC;;AwB1jFE;;EAGE,WrBhFW;EqBiFX,yBrB9Ca;EqB+Cb,qBrB/Ca;AH2mFjB;;AwB1jFI;;EAKI,+CrBtDS;AHgnFjB;;AuBnlFE;ECPA,crBpBe;EqBqBf,qBrBrBe;AHmnFjB;;AKnpFE;EmBwDE,WrB7DW;EqB8DX,yBrBzBa;EqB0Bb,qBrB1Ba;AHynFjB;;AwB5lFE;EAEE,gDrB/Ba;AH6nFjB;;AwB3lFE;EAEE,crBpCa;EqBqCb,6BAA6B;AxB6lFjC;;AwB1lFE;;EAGE,WrBhFW;EqBiFX,yBrB5Ca;EqB6Cb,qBrB7Ca;AHyoFjB;;AwB1lFI;;EAKI,gDrBpDS;AH8oFjB;;AuBnnFE;ECPA,crBvBe;EqBwBf,qBrBxBe;AHspFjB;;AKnrFE;EmBwDE,crBpDc;EqBqDd,yBrB5Ba;EqB6Bb,qBrB7Ba;AH4pFjB;;AwB5nFE;EAEE,+CrBlCa;AHgqFjB;;AwB3nFE;EAEE,crBvCa;EqBwCb,6BAA6B;AxB6nFjC;;AwB1nFE;;EAGE,crBvEc;EqBwEd,yBrB/Ca;EqBgDb,qBrBhDa;AH4qFjB;;AwB1nFI;;EAKI,+CrBvDS;AHirFjB;;AuBnpFE;ECPA,crBzBe;EqB0Bf,qBrB1Be;AHwrFjB;;AKntFE;EmBwDE,WrB7DW;EqB8DX,yBrB9Ba;EqB+Bb,qBrB/Ba;AH8rFjB;;AwB5pFE;EAEE,+CrBpCa;AHksFjB;;AwB3pFE;EAEE,crBzCa;EqB0Cb,6BAA6B;AxB6pFjC;;AwB1pFE;;EAGE,WrBhFW;EqBiFX,yBrBjDa;EqBkDb,qBrBlDa;AH8sFjB;;AwB1pFI;;EAKI,+CrBzDS;AHmtFjB;;AuBnrFE;ECPA,crBxDgB;EqByDhB,qBrBzDgB;AHuvFlB;;AKnvFE;EmBwDE,crBpDc;EqBqDd,yBrB7Dc;EqB8Dd,qBrB9Dc;AH6vFlB;;AwB5rFE;EAEE,iDrBnEc;AHiwFlB;;AwB3rFE;EAEE,crBxEc;EqByEd,6BAA6B;AxB6rFjC;;AwB1rFE;;EAGE,crBvEc;EqBwEd,yBrBhFc;EqBiFd,qBrBjFc;AH6wFlB;;AwB1rFI;;EAKI,iDrBxFU;AHkxFlB;;AuBntFE;ECPA,crBjDgB;EqBkDhB,qBrBlDgB;AHgxFlB;;AKnxFE;EmBwDE,WrB7DW;EqB8DX,yBrBtDc;EqBuDd,qBrBvDc;AHsxFlB;;AwB5tFE;EAEE,8CrB5Dc;AH0xFlB;;AwB3tFE;EAEE,crBjEc;EqBkEd,6BAA6B;AxB6tFjC;;AwB1tFE;;EAGE,WrBhFW;EqBiFX,yBrBzEc;EqB0Ed,qBrB1Ec;AHsyFlB;;AwB1tFI;;EAKI,8CrBjFU;AH2yFlB;;AuBxuFA;EACE,gBpB4M+B;EoB3M/B,cpBjDe;EoBkDf,qBpB2F4C;AHgpF9C;;AKpzFE;EkB4EE,cpByF8D;EoBxF9D,0BpByF+C;AHmpFnD;;AuBnvFA;EAYI,0BpBoF+C;AHupFnD;;AuBvvFA;EAiBI,cpBtFc;EoBuFd,oBAAoB;AvB0uFxB;;AuB/tFA;ECPE,oBrB0SgC;ECnR5B,kBAtCY;EoBiBhB,gBrB+H+B;EOvN7B,qBP8N+B;AHqmFnC;;AuBluFA;ECXE,uBrBqSiC;EC9Q7B,mBAtCY;EoBiBhB,gBrBgI+B;EOxN7B,qBP+N+B;AH2mFnC;;AuBhuFA;EACE,cAAc;EACd,WAAW;AvBmuFb;;AuBruFA;EAMI,kBpBuT+B;AH46EnC;;AuB9tFA;;;EAII,WAAW;AvBguFf;;AyB32FA;ELgBM,gCjBiP2C;AH8mFjD;;AoB31FM;EKpBN;ILqBQ,gBAAgB;EpB+1FtB;AACF;;AyBr3FA;EAII,UAAU;AzBq3Fd;;AyBj3FA;EAEI,aAAa;AzBm3FjB;;AyB/2FA;EACE,kBAAkB;EAClB,SAAS;EACT,gBAAgB;ELDZ,6BjBkPwC;AHkoF9C;;AoBh3FM;EKNN;ILOQ,gBAAgB;EpBo3FtB;AACF;;A0Bz4FA;;;;EAIE,kBAAkB;A1B44FpB;;A0Bz4FA;EACE,mBAAmB;A1B44FrB;;A2Bx3FI;EACE,qBAAqB;EACrB,oBxB+N0C;EwB9N1C,uBxB6N0C;EwB5N1C,WAAW;EAhCf,uBAA8B;EAC9B,qCAA4C;EAC5C,gBAAgB;EAChB,oCAA2C;A3B45F7C;;A2Bv2FI;EACE,cAAc;A3B02FpB;;A0Bp5FA;EACE,kBAAkB;EAClB,SAAS;EACT,OAAO;EACP,avBwpBsC;EuBvpBtC,aAAa;EACb,WAAW;EACX,gBvBguBuC;EuB/tBvC,iBvBguBmC;EuB/tBnC,oBAA4B;EtBsGxB,eAtCY;EsB9DhB,cvBXgB;EuBYhB,gBAAgB;EAChB,gBAAgB;EAChB,sBvBvBa;EuBwBb,4BAA4B;EAC5B,qCvBfa;EOCX,sBP6NgC;AHysFpC;;A0B/4FI;EACE,WAAW;EACX,OAAO;A1Bk5Fb;;A0B/4FI;EACE,QAAQ;EACR,UAAU;A1Bk5FhB;;Act4FI;EYnBA;IACE,WAAW;IACX,OAAO;E1B65FX;E0B15FE;IACE,QAAQ;IACR,UAAU;E1B45Fd;AACF;;Acj5FI;EYnBA;IACE,WAAW;IACX,OAAO;E1Bw6FX;E0Br6FE;IACE,QAAQ;IACR,UAAU;E1Bu6Fd;AACF;;Ac55FI;EYnBA;IACE,WAAW;IACX,OAAO;E1Bm7FX;E0Bh7FE;IACE,QAAQ;IACR,UAAU;E1Bk7Fd;AACF;;Acv6FI;EYnBA;IACE,WAAW;IACX,OAAO;E1B87FX;E0B37FE;IACE,QAAQ;IACR,UAAU;E1B67Fd;AACF;;A0Bv7FA;EAEI,SAAS;EACT,YAAY;EACZ,aAAa;EACb,uBvB8rBuC;AH2vE3C;;A2Bx9FI;EACE,qBAAqB;EACrB,oBxB+N0C;EwB9N1C,uBxB6N0C;EwB5N1C,WAAW;EAzBf,aAAa;EACb,qCAA4C;EAC5C,0BAAiC;EACjC,oCAA2C;A3Bq/F7C;;A2Bv8FI;EACE,cAAc;A3B08FpB;;A0Bh8FA;EAEI,MAAM;EACN,WAAW;EACX,UAAU;EACV,aAAa;EACb,qBvBgrBuC;AHkxE3C;;A2B/+FI;EACE,qBAAqB;EACrB,oBxB+N0C;EwB9N1C,uBxB6N0C;EwB5N1C,WAAW;EAlBf,mCAA0C;EAC1C,eAAe;EACf,sCAA6C;EAC7C,wBAA+B;A3BqgGjC;;A2B99FI;EACE,cAAc;A3Bi+FpB;;A2B9/FI;EDmDE,iBAAiB;A1B+8FvB;;A0B18FA;EAEI,MAAM;EACN,WAAW;EACX,UAAU;EACV,aAAa;EACb,sBvB+pBuC;AH6yE3C;;A2B1gGI;EACE,qBAAqB;EACrB,oBxB+N0C;EwB9N1C,uBxB6N0C;EwB5N1C,WAAW;A3B6gGjB;;A2BjhGI;EAgBI,aAAa;A3BqgGrB;;A2BlgGM;EACE,qBAAqB;EACrB,qBxB4MwC;EwB3MxC,uBxB0MwC;EwBzMxC,WAAW;EA9BjB,mCAA0C;EAC1C,yBAAgC;EAChC,sCAA6C;A3BoiG/C;;A2BngGI;EACE,cAAc;A3BsgGpB;;A2BhhGM;EDiDA,iBAAiB;A1Bm+FvB;;A0B59FA;EAKI,WAAW;EACX,YAAY;A1B29FhB;;A0Bt9FA;EE9GE,SAAS;EACT,gBAAmB;EACnB,gBAAgB;EAChB,6BzBCgB;AHukGlB;;A0Bt9FA;EACE,cAAc;EACd,WAAW;EACX,uBvBmpBwC;EuBlpBxC,WAAW;EACX,gBvBgK+B;EuB/J/B,cvBhHgB;EuBiHhB,mBAAmB;EAEnB,mBAAmB;EACnB,6BAA6B;EAC7B,SAAS;A1Bw9FX;;AK7kGE;EqBoIE,cvBmnBqD;EuBlnBrD,qBAAqB;EJ/IrB,yBnBGc;AH0lGlB;;A0Bz+FA;EAiCI,WvBpJW;EuBqJX,qBAAqB;EJtJrB,yBnB6Ba;AHskGjB;;A0B/+FA;EAwCI,cvBtJc;EuBuJd,oBAAoB;EACpB,6BAA6B;A1B28FjC;;A0Bn8FA;EACE,cAAc;A1Bs8FhB;;A0Bl8FA;EACE,cAAc;EACd,sBvB6lBwC;EuB5lBxC,gBAAgB;EtBrDZ,mBAtCY;EsB6FhB,cvBzKgB;EuB0KhB,mBAAmB;A1Bq8FrB;;A0Bj8FA;EACE,cAAc;EACd,uBvBmlBwC;EuBllBxC,cvB9KgB;AHknGlB;;A6B/nGA;;EAEE,kBAAkB;EAClB,2BAAoB;EAApB,oBAAoB;EACpB,sBAAsB;A7BkoGxB;;A6BtoGA;;EAOI,kBAAkB;EAClB,kBAAc;EAAd,cAAc;A7BooGlB;;AKnoGE;;EwBII,UAAU;A7BooGhB;;A6BjpGA;;;;EAkBM,UAAU;A7BsoGhB;;A6BhoGA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,oBAA2B;EAA3B,2BAA2B;A7BmoG7B;;A6BtoGA;EAMI,WAAW;A7BooGf;;A6BhoGA;;EAII,iB1BmM6B;AH87FjC;;A6BroGA;;EnBHI,0BmBa8B;EnBZ9B,6BmBY8B;A7BioGlC;;A6B3oGA;;EnBWI,yBmBI6B;EnBH7B,4BmBG6B;A7BkoGjC;;A6BlnGA;EACE,wBAAmC;EACnC,uBAAkC;A7BqnGpC;;A6BvnGA;;;EAOI,cAAc;A7BsnGlB;;A6BnnGE;EACE,eAAe;A7BsnGnB;;A6BlnGA;EACE,uBAAsC;EACtC,sBAAqC;A7BqnGvC;;A6BlnGA;EACE,sBAAsC;EACtC,qBAAqC;A7BqnGvC;;A6BjmGA;EACE,0BAAsB;EAAtB,sBAAsB;EACtB,qBAAuB;EAAvB,uBAAuB;EACvB,qBAAuB;EAAvB,uBAAuB;A7BomGzB;;A6BvmGA;;EAOI,WAAW;A7BqmGf;;A6B5mGA;;EAYI,gB1BkH6B;AHm/FjC;;A6BjnGA;;EnBrEI,6BmBuF+B;EnBtF/B,4BmBsF+B;A7BqmGnC;;A6BvnGA;;EnBnFI,yBmB0G4B;EnBzG5B,0BmByG4B;A7BsmGhC;;A6BrlGA;;EAGI,gBAAgB;A7BulGpB;;A6B1lGA;;;;EAOM,kBAAkB;EAClB,sBAAsB;EACtB,oBAAoB;A7B0lG1B;;A8BnvGA;EACE,kBAAkB;EAClB,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,uBAAoB;EAApB,oBAAoB;EACpB,WAAW;A9BsvGb;;A8B3vGA;;;;EAWI,kBAAkB;EAClB,kBAAc;EAAd,cAAc;EACd,SAAS;EACT,YAAY;EACZ,gBAAgB;A9BuvGpB;;A8BtwGA;;;;;;;;;;;;EAoBM,iB3BkN2B;AH+iGjC;;A8BrxGA;;;EA4BI,UAAU;A9B+vGd;;A8B3xGA;EAiCI,UAAU;A9B8vGd;;A8B/xGA;;EpB0CI,yBoBJmD;EpBKnD,4BoBLmD;A9B+vGvD;;A8BryGA;EA4CI,oBAAa;EAAb,aAAa;EACb,sBAAmB;EAAnB,mBAAmB;A9B6vGvB;;A8B1yGA;;EpB0CI,yBoBMsE;EpBLtE,4BoBKsE;A9BgwG1E;;A8BhzGA;;;EpB4BI,0BoB2BgC;EpB1BhC,6BoB0BgC;A9BgwGpC;;A8BvzGA;;;EpB4BI,0BoBmCgC;EpBlChC,6BoBkCgC;A9B+vGpC;;A8BnvGA;;EAEE,oBAAa;EAAb,aAAa;A9BsvGf;;A8BxvGA;;EAQI,kBAAkB;EAClB,UAAU;A9BqvGd;;A8B9vGA;;EAYM,UAAU;A9BuvGhB;;A8BnwGA;;;;;;;;EAoBI,iB3BuI6B;AHmnGjC;;A8BtvGA;EAAuB,kB3BmIU;AHunGjC;;A8BzvGA;EAAsB,iB3BkIW;AH2nGjC;;A8BrvGA;EACE,oBAAa;EAAb,aAAa;EACb,sBAAmB;EAAnB,mBAAmB;EACnB,yB3B8QkC;E2B7QlC,gBAAgB;E1BSZ,eAtCY;E0B+BhB,gB3BuK+B;E2BtK/B,gB3B2K+B;E2B1K/B,c3B5GgB;E2B6GhB,kBAAkB;EAClB,mBAAmB;EACnB,yB3BpHgB;E2BqHhB,yB3BnHgB;EOOd,sBP6NgC;AHwoGpC;;A8BrwGA;;EAkBI,aAAa;A9BwvGjB;;A8B9uGA;;EAEE,gCZtB8D;AlBuwGhE;;A8B9uGA;;;;;;EAME,oB3ByPgC;ECnR5B,kBAtCY;E0BkEhB,gB3B8E+B;EOvN7B,qBP8N+B;AH6pGnC;;A8B9uGA;;EAEE,kCZvC8D;AlBwxGhE;;A8B9uGA;;;;;;EAME,uB3BmOiC;EC9Q7B,mBAtCY;E0BmFhB,gB3B8D+B;EOxN7B,qBP+N+B;AH6qGnC;;A8B9uGA;;EAEE,sBAA0E;A9BivG5E;;A8BtuGA;;;;;;;;EpB3JI,0BoBmK4B;EpBlK5B,6BoBkK4B;A9B0uGhC;;A8BvuGA;;;;;;EpBxJI,yBoB8J2B;EpB7J3B,4BoB6J2B;A9B2uG/B;;A+Bh7GA;EACE,kBAAkB;EAClB,UAAU;EACV,cAAc;EACd,kBAA+C;EAC/C,oBAAqE;EACrE,iCAAmB;EAAnB,mBAAmB;A/Bm7GrB;;A+Bh7GA;EACE,2BAAoB;EAApB,oBAAoB;EACpB,kB5Bwf0C;AH27F5C;;A+Bh7GA;EACE,kBAAkB;EAClB,OAAO;EACP,WAAW;EACX,W5Bof0C;E4Bnf1C,eAAkF;EAClF,UAAU;A/Bm7GZ;;A+Bz7GA;EASI,W5BzBW;E4B0BX,qB5BEa;EmB7Bb,yBnB6Ba;AHm7GjB;;A+B/7GA;EAoBM,gD5BRW;AHu7GjB;;A+Bn8GA;EAyBI,qB5BqbsE;AHy/F1E;;A+Bv8GA;EA6BI,W5B7CW;E4B8CX,yB5Bif8E;E4Bhf9E,qB5Bgf8E;AH87FlF;;A+B78GA;EAuCM,c5BjDY;AH29GlB;;A+Bj9GA;EA0CQ,yB5BxDU;AHm+GlB;;A+Bj6GA;EACE,kBAAkB;EAClB,gBAAgB;EAEhB,mBAAmB;A/Bm6GrB;;A+Bv6GA;EASI,kBAAkB;EAClB,YAA+E;EAC/E,aAA+D;EAC/D,cAAc;EACd,W5BubwC;E4BtbxC,Y5BsbwC;E4BrbxC,oBAAoB;EACpB,WAAW;EACX,sB5BrFW;E4BsFX,yB5B+I6B;AHmxGjC;;A+Bp7GA;EAwBI,kBAAkB;EAClB,YAA+E;EAC/E,aAA+D;EAC/D,cAAc;EACd,W5BwawC;E4BvaxC,Y5BuawC;E4BtaxC,WAAW;EACX,mCAAgE;A/Bg6GpE;;A+Bv5GA;ErBjGI,sBP6NgC;AH+xGpC;;A+B35GA;EAOM,kOb7D4E;AlBq9GlF;;A+B/5GA;EAaM,qB5B7FW;EmB7Bb,yBnB6Ba;AHo/GjB;;A+Bp6GA;EAkBM,+KbxE4E;AlB89GlF;;A+Bx6GA;ET7GI,wCnB6Ba;AH4/GjB;;A+B56GA;ET7GI,wCnB6Ba;AHggHjB;;A+B54GA;EAGI,kB5ByZ+C;AHo/FnD;;A+Bh5GA;EAQM,8KblG4E;AlB8+GlF;;A+Bp5GA;ETjJI,wCnB6Ba;AH4gHjB;;A+Bh4GA;EACE,qBAA2D;A/Bm4G7D;;A+Bp4GA;EAKM,cAAqD;EACrD,c5BiY+E;E4BhY/E,mBAAmB;EAEnB,qB5B+X4E;AHmgGlF;;A+B34GA;EAaM,wBblE0D;EamE1D,0BbnE0D;EaoE1D,uBbhD0D;EaiD1D,wBbjD0D;EakD1D,yB5BpLY;E4BsLZ,qB5BqX4E;EiBviB5E,iJjByf+H;EiBzf/H,yIjByf+H;EiBzf/H,8KjByf+H;AH2jGrI;;AoBhjHM;EW2JN;IX1JQ,gBAAgB;EpBojHtB;AACF;;A+B35GA;EA0BM,sB5BlMS;E4BmMT,sCAA4E;EAA5E,8BAA4E;A/Bq4GlF;;A+Bh6GA;ETzKI,wCnB6Ba;AHgjHjB;;A+Bv3GA;EACE,qBAAqB;EACrB,WAAW;EACX,mCbrG8D;EasG9D,0C5BmKkC;ECpQ9B,eAtCY;E2B0IhB,gB5B4D+B;E4B3D/B,gB5BgE+B;E4B/D/B,c5BvNgB;E4BwNhB,sBAAsB;EACtB,uO5BkW+I;E4BjW/I,yB5B7NgB;EOOd,sBP6NgC;E4BJlC,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;A/Bw3GlB;;A+Bv4GA;EAkBI,qB5BuPsE;E4BtPtE,UAAU;EAKR,gD5BjNW;AHskHjB;;A+B74GA;EAiCM,c5B/OY;E4BgPZ,sB5BvPS;AHumHf;;A+Bl5GA;EAwCI,YAAY;EACZ,sB5B8HgC;E4B7HhC,sBAAsB;A/B82G1B;;A+Bx5GA;EA8CI,c5B7Pc;E4B8Pd,yB5BlQc;AHgnHlB;;A+B75GA;EAoDI,aAAa;A/B62GjB;;A+Bj6GA;EAyDI,kBAAkB;EAClB,0B5BxQc;AHonHlB;;A+Bx2GA;EACE,kCbjK8D;EakK9D,oB5BgHkC;E4B/GlC,uB5B+GkC;E4B9GlC,oB5B+GiC;EC9Q7B,mBAtCY;AJijHlB;;A+Bx2GA;EACE,gCbzK8D;Ea0K9D,mB5B6GiC;E4B5GjC,sB5B4GiC;E4B3GjC,kB5B4GgC;ECnR5B,kBAtCY;AJyjHlB;;A+Bn2GA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,WAAW;EACX,mCbzL8D;Ea0L9D,gBAAgB;A/Bs2GlB;;A+Bn2GA;EACE,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,mCbjM8D;EakM9D,SAAS;EACT,gBAAgB;EAChB,UAAU;A/Bs2GZ;;A+B72GA;EAUI,qB5BoKsE;E4BnKtE,gD5B/Ra;AHsoHjB;;A+Bl3GA;;EAiBI,yB5B/Tc;AHqqHlB;;A+Bv3GA;EAsBM,iB5B2TQ;AH0iGd;;A+B33GA;EA2BI,0BAA0B;A/Bo2G9B;;A+Bh2GA;EACE,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,OAAO;EACP,UAAU;EACV,mCblO8D;EamO9D,yB5BsCkC;E4BrClC,gBAAgB;EAEhB,gB5BjE+B;E4BkE/B,gB5B7D+B;E4B8D/B,c5BpVgB;E4BqVhB,sB5B5Va;E4B6Vb,yB5BzVgB;EOOd,sBP6NgC;AHw9GpC;;A+Bj3GA;EAmBI,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,SAAS;EACT,UAAU;EACV,cAAc;EACd,6BbrP4D;EasP5D,yB5BmBgC;E4BlBhC,gB5B7E6B;E4B8E7B,c5BpWc;E4BqWd,iBAAiB;ET7WjB,yBnBGc;E4B4Wd,oBAAoB;ErBnWpB,kCqBoWgF;A/Bk2GpF;;A+Bx1GA;EACE,WAAW;EACX,cb3Q2B;Ea4Q3B,UAAU;EACV,6BAA6B;EAC7B,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;A/B21GlB;;A+Bh2GA;EAQI,UAAU;A/B41Gd;;A+Bp2GA;EAY8B,gE5BzWb;AHqsHjB;;A+Bx2GA;EAa8B,gE5B1Wb;AHysHjB;;A+B52GA;EAc8B,gE5B3Wb;AH6sHjB;;A+Bh3GA;EAkBI,SAAS;A/Bk2Gb;;A+Bp3GA;EAsBI,W5BmN6C;E4BlN7C,Y5BkN6C;E4BjN7C,oBAAyE;ETlZzE,yBnB6Ba;E4BuXb,S5BkN0C;EO1lB1C,mBP2lB6C;EiB7lB3C,oHjByf+H;EiBzf/H,4GjByf+H;E4B3GjI,wBAAgB;EAAhB,gBAAgB;A/Bi2GpB;;AoB3uHM;EW4WN;IX3WQ,wBAAgB;IAAhB,gBAAgB;EpB+uHtB;AACF;;A+Br4GA;ET1XI,yBnB2mB2E;AHwpG/E;;A+Bz4GA;EAsCI,W5B4LoC;E4B3LpC,c5B4LqC;E4B3LrC,kBAAkB;EAClB,e5B2LuC;E4B1LvC,yB5Bhac;E4Biad,yBAAyB;ErBzZzB,mBPolBoC;AH6qGxC;;A+Bn5GA;EAiDI,W5BwL6C;E4BvL7C,Y5BuL6C;EmBnmB7C,yBnB6Ba;E4BiZb,S5BwL0C;EO1lB1C,mBP2lB6C;EiB7lB3C,iHjByf+H;EiBzf/H,4GjByf+H;E4BjFjI,qBAAgB;EAAhB,gBAAgB;A/Bq2GpB;;AoBzwHM;EW4WN;IX3WQ,qBAAgB;IAAhB,gBAAgB;EpB6wHtB;AACF;;A+Bn6GA;ET1XI,yBnB2mB2E;AHsrG/E;;A+Bv6GA;EAgEI,W5BkKoC;E4BjKpC,c5BkKqC;E4BjKrC,kBAAkB;EAClB,e5BiKuC;E4BhKvC,yB5B1bc;E4B2bd,yBAAyB;ErBnbzB,mBPolBoC;AH2sGxC;;A+Bj7GA;EA2EI,W5B8J6C;E4B7J7C,Y5B6J6C;E4B5J7C,aAAa;EACb,oB5BtE+B;E4BuE/B,mB5BvE+B;EmBlY/B,yBnB6Ba;E4B8ab,S5B2J0C;EO1lB1C,mBP2lB6C;EiB7lB3C,gHjByf+H;EiBzf/H,4GjByf+H;E4BpDjI,gBAAgB;A/By2GpB;;AoB1yHM;EW4WN;IX3WQ,oBAAgB;IAAhB,gBAAgB;EpB8yHtB;AACF;;A+Bp8GA;ET1XI,yBnB2mB2E;AHutG/E;;A+Bx8GA;EA6FI,W5BqIoC;E4BpIpC,c5BqIqC;E4BpIrC,kBAAkB;EAClB,e5BoIuC;E4BnIvC,6BAA6B;EAC7B,yBAAyB;EACzB,oBAA4C;A/B+2GhD;;A+Bl9GA;EAwGI,yB5B9dc;EOQd,mBPolBoC;AHivGxC;;A+Bv9GA;EA6GI,kBAAkB;EAClB,yB5Bpec;EOQd,mBPolBoC;AHuvGxC;;A+B79GA;EAoHM,yB5BxeY;AHq1HlB;;A+Bj+GA;EAwHM,eAAe;A/B62GrB;;A+Br+GA;EA4HM,yB5BhfY;AH61HlB;;A+Bz+GA;EAgIM,eAAe;A/B62GrB;;A+B7+GA;EAoIM,yB5BxfY;AHq2HlB;;A+Bx2GA;;;EXzfM,4GjByf+H;AH82GrI;;AoBn2HM;EWqfN;;;IXpfQ,gBAAgB;EpBy2HtB;AACF;;AgC13HA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,gBAAgB;AhC63HlB;;AgC13HA;EACE,cAAc;EACd,oB7ByqBsC;AHotGxC;;AK53HE;E2BGE,qBAAqB;AhC63HzB;;AgCn4HA;EAWI,c7BXc;E6BYd,oBAAoB;EACpB,eAAe;AhC43HnB;;AgCp3HA;EACE,gC7BzBgB;AHg5HlB;;AgCx3HA;EAII,mB7BsM6B;E6BrM7B,6BAAgD;EtBZhD,+BPoNgC;EOnNhC,gCPmNgC;AHkrHpC;;AKj5HE;E2B2BI,qC7BjCY;AH25HlB;;AgCn4HA;EAaM,c7BlCY;E6BmCZ,6BAA6B;EAC7B,yBAAyB;AhC03H/B;;AgCz4HA;;EAqBI,c7BzCc;E6B0Cd,sB7BjDW;E6BkDX,kC7BlDW;AH26Hf;;AgCh5HA;EA4BI,gB7B8K6B;EOjN7B,yBsBqC4B;EtBpC5B,0BsBoC4B;AhCw3HhC;;AgC/2HA;EtBvDI,sBP6NgC;AH6sHpC;;AgCn3HA;;EAOI,W7BzEW;E6B0EX,yB7B9Ca;AH+5HjB;;AgCx2HA;;EAGI,kBAAc;EAAd,cAAc;EA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AKjxIE;E4BmQM,yB9BlQO;AHoxIf;;AiC3gIA;EAEI,W9BrRW;AHkyIf;;AKzxIE;E4B+QI,W9BxRS;AHsyIf;;AiCnhIA;EAWM,+B9B9RS;AH0yIf;;AKjyIE;E4BwRM,gC9BjSO;AH8yIf;;AiC3hIA;EAkBQ,gC9BrSO;AHkzIf;;AiC/hIA;;;;EA0BM,W9B7SS;AHyzIf;;AiCtiIA;EA+BI,+B9BlTW;E8BmTX,sC9BnTW;AH8zIf;;AiC3iIA;EAoCI,yRfjQ8E;AlB4wIlF;;AiC/iIA;EAwCI,+B9B3TW;AHs0If;;AiCnjIA;EA0CM,W9B7TS;AH00If;;AKj0IE;E4BuTM,W9BhUO;AH80If;;AkCj1IA;EACE,kBAAkB;EAClB,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;EACtB,YAAY;EAEZ,qBAAqB;EACrB,sB/BJa;E+BKb,2BAA2B;EAC3B,sC/BIa;EOCX,sBP6NgC;AHknIpC;;AkC71IA;EAaI,eAAe;EACf,cAAc;AlCo1IlB;;AkCl2IA;EAkBI,mBAAmB;EACnB,sBAAsB;AlCo1I1B;;AkCv2IA;EAsBM,mBAAmB;ExBCrB,2CQmH4D;ERlH5D,4CQkH4D;AlBmuIhE;;AkC72IA;EA2BM,sBAAsB;ExBUxB,+CQqG4D;ERpG5D,8CQoG4D;AlByuIhE;;AkCn3IA;;EAoCI,aAAa;AlCo1IjB;;AkCh1IA;EAGE,kBAAc;EAAd,cAAc;EAGd,eAAe;EACf,gB/B8wByC;AHikH3C;;AkC30IA;EACE,sB/BwwBwC;AHskH1C;;AkC30IA;EACE,qBAA+B;EAC/B,gBAAgB;AlC80IlB;;AkC30IA;EACE,gBAAgB;AlC80IlB;;AKn4IE;E6B0DE,qBAAqB;AlC60IzB;;AkC/0IA;EAMI,oB/BuvBuC;AHslH3C;;AkCr0IA;EACE,wB/B8uByC;E+B7uBzC,gBAAgB;EAEhB,qC/BrEa;E+BsEb,6C/BtEa;AH64If;;AkC50IA;ExBhEI,0DwBwE8E;AlCw0IlF;;AkCp0IA;EACE,wB/BkuByC;E+BhuBzC,qC/BhFa;E+BiFb,0C/BjFa;AHu5If;;AkC10IA;ExB5EI,0DQ4H4D;AlB8xIhE;;AkC9zIA;EACE,uBAAiC;EACjC,uB/BgtBwC;E+B/sBxC,sBAAgC;EAChC,gBAAgB;AlCi0IlB;;AkC9zIA;EACE,uBAAiC;EACjC,sBAAgC;AlCi0IlC;;AkC7zIA;EACE,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,SAAS;EACT,OAAO;EACP,gB/B2sByC;EO1zBvC,kCQ4H4D;AlBozIhE;;AkC7zIA;;;EAGE,oBAAc;EAAd,cAAc;EACd,WAAW;AlCg0Ib;;AkC7zIA;;ExBjHI,2CQmH4D;ERlH5D,4CQkH4D;AlBi0IhE;;AkC9zIA;;ExBxGI,+CQqG4D;ERpG5D,8CQoG4D;AlBu0IhE;;AkC5zIA;EAEI,mB/BmrBsD;AH2oH1D;;Ac75II;EoB6FJ;IAMI,oBAAa;IAAb,aAAa;IACb,uBAAmB;IAAnB,mBAAmB;IACnB,mB/B6qBsD;I+B5qBtD,kB/B4qBsD;EHmpHxD;EkCx0IF;IAaM,gBAAY;IAAZ,YAAY;IACZ,kB/BuqBoD;I+BtqBpD,gBAAgB;IAChB,iB/BqqBoD;EHypHxD;AACF;;AkCrzIA;EAII,mB/BupBsD;AH8pH1D;;Ach7II;EoBuHJ;IAQI,oBAAa;IAAb,aAAa;IACb,uBAAmB;IAAnB,mBAAmB;ElCszIrB;EkC/zIF;IAcM,gBAAY;IAAZ,YAAY;IACZ,gBAAgB;ElCozIpB;EkCn0IF;IAkBQ,cAAc;IACd,cAAc;ElCozIpB;EkCv0IF;IxBjJI,0BwB0KoC;IxBzKpC,6BwByKoC;ElCkzItC;EkC30IF;;IA8BY,0BAA0B;ElCizIpC;EkC/0IF;;IAmCY,6BAA6B;ElCgzIvC;EkCn1IF;IxBnII,yBwB2KmC;IxB1KnC,4BwB0KmC;ElC+yIrC;EkCv1IF;;IA6CY,yBAAyB;ElC8yInC;EkC31IF;;IAkDY,4BAA4B;ElC6yItC;AACF;;AkCjyIA;EAEI,sB/B4kBsC;AHutH1C;;Ac39II;EoBsLJ;IAMI,uB/BylBiC;I+BzlBjC,oB/BylBiC;I+BzlBjC,e/BylBiC;I+BxlBjC,2B/BylBuC;I+BzlBvC,wB/BylBuC;I+BzlBvC,mB/BylBuC;I+BxlBvC,UAAU;IACV,SAAS;ElCoyIX;EkC7yIF;IAYM,qBAAqB;IACrB,WAAW;ElCoyIf;AACF;;AkC3xIA;EACE,qBAAqB;AlC8xIvB;;AkC/xIA;EAII,gBAAgB;AlC+xIpB;;AkCnyIA;EAOM,gBAAgB;ExBvOlB,6BwBwOiC;ExBvOjC,4BwBuOiC;AlCiyIrC;;AkCzyIA;ExB9OI,yBwB0P8B;ExBzP9B,0BwByP8B;AlCkyIlC;;AkC9yIA;ExBvPI,gBwBuQ0B;EACxB,mB/B9C2B;AHg1IjC;;AmC5jJA;EACE,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,qBhCiiCsC;EgChiCtC,mBhCmiCsC;EgCjiCtC,gBAAgB;EAChB,yBhCEgB;EOSd,sBP6NgC;AHu1IpC;;AmC3jJA;EAGI,oBhCuhCqC;AHqiHzC;;AmC/jJA;EAMM,WAAW;EACX,qBhCmhCmC;EgClhCnC,chCNY;EgCOZ,YhCwhCuC;AHqiH7C;;AmCtkJA;EAoBI,0BAA0B;AnCsjJ9B;;AmC1kJA;EAwBI,qBAAqB;AnCsjJzB;;AmC9kJA;EA4BI,chC1Bc;AHglJlB;;AoC7lJA;EACE,oBAAa;EAAb,aAAa;E7BGb,eAAe;EACf,gBAAgB;EGad,sBP6NgC;AHq3IpC;;AoC9lJA;EACE,kBAAkB;EAClB,cAAc;EACd,uBjCgxBwC;EiC/wBxC,iBjCkO+B;EiCjO/B,iBjCmxBsC;EiClxBtC,cjCuBe;EiCrBf,sBjCPa;EiCQb,yBjCLgB;AHqmJlB;;AoCzmJA;EAYI,UAAU;EACV,cjC8J8D;EiC7J9D,qBAAqB;EACrB,yBjCZc;EiCad,qBjCZc;AH6mJlB;;AoCjnJA;EAoBI,UAAU;EACV,UjC2wBiC;EiC1wBjC,gDjCOa;AH0lJjB;;AoC7lJA;EAGM,cAAc;E1BahB,+BP+LgC;EO9LhC,kCP8LgC;AHo5IpC;;AoCnmJA;E1BEI,gCP6MgC;EO5MhC,mCP4MgC;AHy5IpC;;AoCxmJA;EAcI,UAAU;EACV,WjCxCW;EiCyCX,yBjCba;EiCcb,qBjCda;AH4mJjB;;AoC/mJA;EAqBI,cjCxCc;EiCyCd,oBAAoB;EAEpB,YAAY;EACZ,sBjClDW;EiCmDX,qBjChDc;AH6oJlB;;AqCppJE;EACE,uBlCyxBsC;EC9pBpC,kBAtCY;EiCnFd,gBlCmO6B;AHo7IjC;;AqClpJM;E3BqCF,8BPgM+B;EO/L/B,iCP+L+B;AHk7InC;;AqClpJM;E3BkBF,+BP8M+B;EO7M/B,kCP6M+B;AHu7InC;;AqCpqJE;EACE,uBlCuxBqC;EC5pBnC,mBAtCY;EiCnFd,gBlCoO6B;AHm8IjC;;AqClqJM;E3BqCF,8BPiM+B;EOhM/B,iCPgM+B;AHi8InC;;AqClqJM;E3BkBF,+BP+M+B;EO9M/B,kCP8M+B;AHs8InC;;AsClrJA;EACE,qBAAqB;EACrB,qBnC05BsC;ECz1BpC,cAAW;EkC/Db,gBnCuR+B;EmCtR/B,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,wBAAwB;E5BKtB,sBP6NgC;EiB/N9B,qIjBgb6I;AHowInJ;;AoBhrJM;EkBfN;IlBgBQ,gBAAgB;EpBorJtB;AACF;;AK1rJE;EiCGI,qBAAqB;AtC2rJ3B;;AsCzsJA;EAoBI,aAAa;AtCyrJjB;;AsCprJA;EACE,kBAAkB;EAClB,SAAS;AtCurJX;;AsChrJA;EACE,oBnC+3BsC;EmC93BtC,mBnC83BsC;EOr5BpC,oBPw5BqC;AHmzHzC;;AsC3qJE;ECjDA,WpCMa;EoCLb,yBpCiCe;AH+rJjB;;AKltJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvCguJxC;;AuCnuJU;EAQJ,UAAU;EACV,+CpCsBW;AHysJjB;;AsC1rJE;ECjDA,WpCMa;EoCLb,yBpCWgB;AHouJlB;;AKjuJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC+uJxC;;AuClvJU;EAQJ,UAAU;EACV,iDpCAY;AH8uJlB;;AsCzsJE;ECjDA,WpCMa;EoCLb,yBpCwCe;AHstJjB;;AKhvJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC8vJxC;;AuCjwJU;EAQJ,UAAU;EACV,+CpC6BW;AHguJjB;;AsCxtJE;ECjDA,WpCMa;EoCLb,yBpC0Ce;AHmuJjB;;AK/vJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC6wJxC;;AuChxJU;EAQJ,UAAU;EACV,gDpC+BW;AH6uJjB;;AsCvuJE;ECjDA,cpCegB;EoCdhB,yBpCuCe;AHqvJjB;;AK9wJE;EkCVI,cpCUY;EoCTZ,yBAAkC;AvC4xJxC;;AuC/xJU;EAQJ,UAAU;EACV,+CpC4BW;AH+vJjB;;AsCtvJE;ECjDA,WpCMa;EoCLb,yBpCqCe;AHswJjB;;AK7xJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC2yJxC;;AuC9yJU;EAQJ,UAAU;EACV,+CpC0BW;AHgxJjB;;AsCrwJE;ECjDA,cpCegB;EoCdhB,yBpCMgB;AHozJlB;;AK5yJE;EkCVI,cpCUY;EoCTZ,yBAAkC;AvC0zJxC;;AuC7zJU;EAQJ,UAAU;EACV,iDpCLY;AH8zJlB;;AsCpxJE;ECjDA,WpCMa;EoCLb,yBpCagB;AH4zJlB;;AK3zJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvCy0JxC;;AuC50JU;EAQJ,UAAU;EACV,8CpCEY;AHs0JlB;;AwCr1JA;EACE,kBAAoD;EACpD,mBrCuzBsC;EqCrzBtC,yBrCKgB;EOSd,qBP8N+B;AH4mJnC;;AchyJI;E0B5DJ;IAQI,kBrCizBoC;EHwiItC;AACF;;AwCt1JA;EACE,gBAAgB;EAChB,eAAe;E9BIb,gB8BHsB;AxCy1J1B;;AyCp2JA;EACE,kBAAkB;EAClB,wBtCu9ByC;EsCt9BzC,mBtCu9BsC;EsCt9BtC,6BAA6C;E/BU3C,sBP6NgC;AHioJpC;;AyCn2JA;EAEE,cAAc;AzCq2JhB;;AyCj2JA;EACE,gBtC4Q+B;AHwlJjC;;AyC51JA;EACE,mBAAsD;AzC+1JxD;;AyCh2JA;EAKI,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,UAAU;EACV,wBtCw7BuC;EsCv7BvC,cAAc;AzC+1JlB;;AyCr1JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlBkyJlE;;A0Ct4JE;EACE,yBAAqC;A1Cy4JzC;;A0Ct4JE;EACE,cAA0B;A1Cy4J9B;;AyCn2JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlBgzJlE;;A0Cp5JE;EACE,yBAAqC;A1Cu5JzC;;A0Cp5JE;EACE,cAA0B;A1Cu5J9B;;AyCj3JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlB8zJlE;;A0Cl6JE;EACE,yBAAqC;A1Cq6JzC;;A0Cl6JE;EACE,cAA0B;A1Cq6J9B;;AyC/3JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlB40JlE;;A0Ch7JE;EACE,yBAAqC;A1Cm7JzC;;A0Ch7JE;EACE,cAA0B;A1Cm7J9B;;AyC74JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlB01JlE;;A0C97JE;EACE,yBAAqC;A1Ci8JzC;;A0C97JE;EACE,cAA0B;A1Ci8J9B;;AyC35JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlBw2JlE;;A0C58JE;EACE,yBAAqC;A1C+8JzC;;A0C58JE;EACE,cAA0B;A1C+8J9B;;AyCz6JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlBs3JlE;;A0C19JE;EACE,yBAAqC;A1C69JzC;;A0C19JE;EACE,cAA0B;A1C69J9B;;AyCv7JE;EC/CA,cxBwGgE;EInG9D,yBJmG8D;EwBtGhE,qBxBsGgE;AlBo4JlE;;A0Cx+JE;EACE,yBAAqC;A1C2+JzC;;A0Cx+JE;EACE,cAA0B;A1C2+J9B;;A2Cn/JE;EACE;IAAO,2BAAuC;E3Cu/JhD;E2Ct/JE;IAAK,wBAAwB;E3Cy/J/B;AACF;;A2C5/JE;EACE;IAAO,2BAAuC;E3Cu/JhD;E2Ct/JE;IAAK,wBAAwB;E3Cy/J/B;AACF;;A2Ct/JA;EACE,oBAAa;EAAb,aAAa;EACb,YxCg+BsC;EwC/9BtC,gBAAgB;EAChB,cAAc;EvCmHV,kBAtCY;EuC3EhB,yBxCLgB;EOSd,sBP6NgC;AHyxJpC;;A2Cr/JA;EACE,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;EACtB,qBAAuB;EAAvB,uBAAuB;EACvB,gBAAgB;EAChB,WxCjBa;EwCkBb,kBAAkB;EAClB,mBAAmB;EACnB,yBxCQe;EiBnBX,2BjBk+B4C;AHkiIlD;;AoBhgKM;EuBDN;IvBEQ,gBAAgB;EpBogKtB;AACF;;A2C3/JA;ErBYE,qMAA6I;EqBV7I,0BxCy8BsC;AHqjIxC;;A2C1/JE;EACE,0DAA8D;EAA9D,kDAA8D;A3C6/JlE;;A2C1/JM;EAJJ;IAKM,uBAAe;IAAf,eAAe;E3C8/JrB;AACF;;A4CziKA;EACE,oBAAa;EAAb,aAAa;EACb,qBAAuB;EAAvB,uBAAuB;A5C4iKzB;;A4CziKA;EACE,WAAO;EAAP,OAAO;A5C4iKT;;A6C9iKA;EACE,oBAAa;EAAb,aAAa;EACb,0BAAsB;EAAtB,sBAAsB;EAGtB,eAAe;EACf,gBAAgB;EnCQd,sBP6NgC;AH20JpC;;A6CtiKA;EACE,WAAW;EACX,c1CRgB;E0CShB,mBAAmB;A7CyiKrB;;AKhjKE;EwCWE,UAAU;EACV,c1Cdc;E0Ced,qBAAqB;EACrB,yB1CtBc;AH+jKlB;;A6CnjKA;EAcI,c1ClBc;E0CmBd,yB1C1Bc;AHmkKlB;;A6ChiKA;EACE,kBAAkB;EAClB,cAAc;EACd,wB1C+8ByC;E0C58BzC,sB1C3Ca;E0C4Cb,sC1ClCa;AHmkKf;;A6CxiKA;EnCjBI,+BmC2BkC;EnC1BlC,gCmC0BkC;A7CmiKtC;;A6C7iKA;EnCHI,mCmCiBqC;EnChBrC,kCmCgBqC;A7CoiKzC;;A6CljKA;EAmBI,c1ClDc;E0CmDd,oBAAoB;EACpB,sB1C1DW;AH6lKf;;A6CxjKA;EA0BI,UAAU;EACV,W1ChEW;E0CiEX,yB1CrCa;E0CsCb,qB1CtCa;AHwkKjB;;A6C/jKA;EAiCI,mBAAmB;A7CkiKvB;;A6CnkKA;EAoCM,gB1C4J2B;E0C3J3B,qB1C2J2B;AHw4JjC;;A6CrhKI;EACE,uBAAmB;EAAnB,mBAAmB;A7CwhKzB;;A6CzhKI;EnCtBA,kCPsKgC;EOlLhC,0BmCwCwC;A7CwhK5C;;A6C9hKI;EnClCA,gCPkLgC;EOtKhC,4BmCiC0C;A7CwhK9C;;A6CniKI;EAeM,aAAa;A7CwhKvB;;A6CviKI;EAmBM,qB1C0HuB;E0CzHvB,oBAAoB;A7CwhK9B;;A6C5iKI;EAuBQ,iB1CsHqB;E0CrHrB,sB1CqHqB;AHo6JjC;;AcplKI;E+BmCA;IACE,uBAAmB;IAAnB,mBAAmB;E7CqjKvB;E6CtjKE;InCtBA,kCPsKgC;IOlLhC,0BmCwCwC;E7CojK1C;E6C1jKE;InClCA,gCPkLgC;IOtKhC,4BmCiC0C;E7CmjK5C;E6C9jKE;IAeM,aAAa;E7CkjKrB;E6CjkKE;IAmBM,qB1C0HuB;I0CzHvB,oBAAoB;E7CijK5B;E6CrkKE;IAuBQ,iB1CsHqB;I0CrHrB,sB1CqHqB;EH47J/B;AACF;;Ac7mKI;E+BmCA;IACE,uBAAmB;IAAnB,mBAAmB;E7C8kKvB;E6C/kKE;InCtBA,kCPsKgC;IOlLhC,0BmCwCwC;E7C6kK1C;E6CnlKE;InClCA,gCPkLgC;IOtKhC,4BmCiC0C;E7C4kK5C;E6CvlKE;IAeM,aAAa;E7C2kKrB;E6C1lKE;IAmBM,qB1C0HuB;I0CzHvB,oBAAoB;E7C0kK5B;E6C9lKE;IAuBQ,iB1CsHqB;I0CrHrB,sB1CqHqB;EHq9J/B;AACF;;ActoKI;E+BmCA;IACE,uBAAmB;IAAnB,mBAAmB;E7CumKvB;E6CxmKE;InCtBA,kCPsKgC;IOlLhC,0BmCwCwC;E7CsmK1C;E6C5mKE;InClCA,gCPkLgC;IOtKhC,4BmCiC0C;E7CqmK5C;E6ChnKE;IAeM,aAAa;E7ComKrB;E6CnnKE;IAmBM,qB1C0HuB;I0CzHvB,oBAAoB;E7CmmK5B;E6CvnKE;IAuBQ,iB1CsHqB;I0CrHrB,sB1CqHqB;EH8+J/B;AACF;;Ac/pKI;E+BmCA;IACE,uBAAmB;IAAnB,mBAAmB;E7CgoKvB;E6CjoKE;InCtBA,kCPsKgC;IOlLhC,0BmCwCwC;E7C+nK1C;E6CroKE;InClCA,gCPkLgC;IOtKhC,4BmCiC0C;E7C8nK5C;E6CzoKE;IAeM,aAAa;E7C6nKrB;E6C5oKE;IAmBM,qB1C0HuB;I0CzHvB,oBAAoB;E7C4nK5B;E6ChpKE;IAuBQ,iB1CsHqB;I0CrHrB,sB1CqHqB;EHugK/B;AACF;;A6C/mKA;EnCnHI,gBmCoHsB;A7CknK1B;;A6CnnKA;EAII,qB1CmG6B;AHghKjC;;A6CvnKA;EAOM,sBAAsB;A7ConK5B;;A8C7vKE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB4pKlE;;AKrvKE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9CgwKjD;;A8CvwKE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlBuqKlE;;A8C7wKE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB4qKlE;;AKrwKE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9CgxKjD;;A8CvxKE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlBurKlE;;A8C7xKE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB4rKlE;;AKrxKE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9CgyKjD;;A8CvyKE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlBusKlE;;A8C7yKE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB4sKlE;;AKryKE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9CgzKjD;;A8CvzKE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlButKlE;;A8C7zKE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB4tKlE;;AKrzKE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9Cg0KjD;;A8Cv0KE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlBuuKlE;;A8C70KE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB4uKlE;;AKr0KE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9Cg1KjD;;A8Cv1KE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlBuvKlE;;A8C71KE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB4vKlE;;AKr1KE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9Cg2KjD;;A8Cv2KE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlBuwKlE;;A8C72KE;EACE,c5BqG8D;E4BpG9D,yB5BoG8D;AlB4wKlE;;AKr2KE;EyCPM,c5BgG0D;E4B/F1D,yBAAyC;A9Cg3KjD;;A8Cv3KE;EAWM,W3CPO;E2CQP,yB5B0F0D;E4BzF1D,qB5ByF0D;AlBuxKlE;;A+Ch4KA;EACE,YAAY;E3C8HR,iBAtCY;E2CtFhB,gB5C6R+B;E4C5R/B,cAAc;EACd,W5CYa;E4CXb,yB5CCa;E4CAb,WAAW;A/Cm4Kb;;AK93KE;E0CDE,W5CMW;E4CLX,qBAAqB;A/Cm4KzB;;AK/3KE;E0CCI,YAAY;A/Ck4KlB;;A+Cv3KA;EACE,UAAU;EACV,6BAA6B;EAC7B,SAAS;A/C03KX;;A+Cp3KA;EACE,oBAAoB;A/Cu3KtB;;AgD75KA;EAGE,8B7Cy4BuC;E6Cz4BvC,iB7Cy4BuC;E6Cx4BvC,gB7Cw4BuC;EC7wBnC,mBAtCY;E4ClFhB,2C7CAa;E6CCb,4BAA4B;EAC5B,oC7C04BmD;E6Cz4BnD,gD7COa;E6CNb,UAAU;EtCOR,sBPk4BsC;AHqhJ1C;;AgDz6KA;EAeI,sB7C83BsC;AHgiJ1C;;AgD76KA;EAmBI,UAAU;AhD85Kd;;AgDj7KA;EAuBI,cAAc;EACd,UAAU;AhD85Kd;;AgDt7KA;EA4BI,aAAa;AhD85KjB;;AgD15KA;EACE,oBAAa;EAAb,aAAa;EACb,sBAAmB;EAAnB,mBAAmB;EACnB,wB7C02BwC;E6Cz2BxC,c7CvBgB;E6CwBhB,2C7C9Ba;E6C+Bb,4BAA4B;EAC5B,4C7Ck3BoD;EO93BlD,2CQmH4D;ERlH5D,4CQkH4D;AlBwzKhE;;AgD35KA;EACE,gB7Ci2BwC;AH6jJ1C;;AiDp8KA;EAEE,gBAAgB;AjDs8KlB;;AiDx8KA;EAKI,kBAAkB;EAClB,gBAAgB;AjDu8KpB;;AiDl8KA;EACE,eAAe;EACf,MAAM;EACN,OAAO;EACP,a9C2pBsC;E8C1pBtC,aAAa;EACb,WAAW;EACX,YAAY;EACZ,gBAAgB;EAGhB,UAAU;AjDm8KZ;;AiD57KA;EACE,kBAAkB;EAClB,WAAW;EACX,c9C+4BuC;E8C74BvC,oBAAoB;AjD87KtB;;AiD37KE;E7B3BI,2CjBo8BoD;EiBp8BpD,mCjBo8BoD;EiBp8BpD,oEjBo8BoD;E8Cv6BtD,sC9Cq6BmD;E8Cr6BnD,8B9Cq6BmD;AHyhJvD;;AoBv9KM;E6BuBJ;I7BtBM,gBAAgB;EpB29KtB;AACF;;AiDl8KE;EACE,uB9Cm6BoC;E8Cn6BpC,e9Cm6BoC;AHkiJxC;;AiDj8KE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DlxLA;EACE,mBjD00BuC;AH28JzC;;AoDtxLA;EAII,yBlCiF4D;EkChF5D,ajDs0BqC;EiDr0BrC,YjDo0BoC;EiDn0BpC,gBAAgC;ApDsxLpC;;AoD7xLA;EAUM,OAAO;EACP,oCAA2F;EAC3F,uCjDk0BiE;AHq9JvE;;AoDnyLA;EAgBM,SjDmK2B;EiDlK3B,oCAA2F;EAC3F,wBjDpES;AH21Lf;;AoDlxLA;EACE,kBjDmzBuC;AHk+JzC;;AoDtxLA;EAII,wBlC0D4D;AlB4tLhE;;AoD1xLA;EAOM,MAAM;EACN,oCAA2F;EAC3F,wCjD8yBiE;AHy+JvE;;AoDhyLA;EAaM,QjD+I2B;EiD9I3B,oCAA2F;EAC3F,yBjDxFS;AH+2Lf;;AoDtyLA;EAqBI,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,cAAc;EACd,WjD0xBoC;EiDzxBpC,oBAAsC;EACtC,WAAW;EACX,gCjD8wBuD;AHugK3D;;AoDjxLA;EACE,oBjDmxBuC;AHigKzC;;AoDrxLA;EAII,0BlC0B4D;EkCzB5D,ajD+wBqC;EiD9wBrC,YjD6wBoC;EiD5wBpC,gBAAgC;ApDqxLpC;;AoD5xLA;EAUM,QAAQ;EACR,oCjDywBmC;EiDxwBnC,sCjD2wBiE;AH2gKvE;;AoDlyLA;EAgBM,UjD4G2B;EiD3G3B,oCjDmwBmC;EiDlwBnC,uBjD3HS;AHi5Lf;;AoDhwLA;EACE,uBjDouBwC;EiDnuBxC,gBAAgB;EhD3BZ,eAtCY;EgDoEhB,yBjD6tByD;EiD5tBzD,gCAAyE;E1CnIvE,0CQmH4D;ERlH5D,2CQkH4D;AlBoxLhE;;AoD1wLA;EAUI,aAAa;ApDowLjB;;AoDhwLA;EACE,uBjDstBwC;EiDrtBxC,cjDxJgB;AH25LlB;;AqD95LA;EACE,kBAAkB;ArDi6LpB;;AqD95LA;EACE,uBAAmB;EAAnB,mBAAmB;ArDi6LrB;;AqD95LA;EACE,kBAAkB;EAClB,WAAW;EACX,gBAAgB;ArDi6LlB;;AsDx7LE;EACE,cAAc;EACd,WAAW;EACX,WAAW;AtD27Lf;;AqDn6LA;EACE,kBAAkB;EAClB,aAAa;EACb,WAAW;EACX,WAAW;EACX,mBAAm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8B;AxDoqMnD;;AwDnqMA;EAAqB,iCAAiC;AxDuqMtD;;AwDtqMA;EAAqB,iCAAiC;AxD0qMtD;;AwDzqMA;EAAqB,sCAAsC;AxD6qM3D;;AwD5qMA;EAAqB,mCAAmC;AxDgrMxD;;AyDlrME;EACE,oCAAmC;AzDqrMvC;;AK3qME;;;EoDLI,oCAAgD;AzDsrMtD;;AyD5rME;EACE,oCAAmC;AzD+rMvC;;AKrrME;;;EoDLI,oCAAgD;AzDgsMtD;;AyDtsME;EACE,oCAAmC;AzDysMvC;;AK/rME;;;EoDLI,oCAAgD;AzD0sMtD;;AyDhtME;EACE,oCAAmC;AzDmtMvC;;AKzsME;;;EoDLI,oCAAgD;AzDotMtD;;AyD1tME;EACE,oCAAmC;AzD6tMvC;;AKntME;;;EoDLI,oCAAgD;AzD8tMtD;;AyDpuME;EACE,oCAAmC;AzDuuMvC;;AK7tME;;;EoDLI,oCAAgD;AzDwuMtD;;AyD9uME;EACE,oCAAmC;AzDivMvC;;AKvuME;;;EoDLI,oCAAgD;AzDkvMtD;;AyDxvME;EACE,oCAAmC;AzD2vMvC;;AKjvME;;;EoDLI,oCAAgD;AzD4vMtD;;A0D3vMA;EACE,iCAAmC;A1D8vMrC;;A0D3vMA;EACE,wCAAwC;A1D8vM1C;;A2DzwMA;EAAkB,oCAAoD;A3D6wMtE;;A2D5wMA;EAAkB,wCAAwD;A3DgxM1E;;A2D/wMA;EAAkB,0CAA0D;A3DmxM5E;;A2DlxMA;EAAkB,2CAA2D;A3DsxM7E;;A2DrxMA;EAAkB,yCAAyD;A3DyxM3E;;A2DvxMA;EAAmB,oBAAoB;A3D2xMvC;;A2D1xMA;EAAmB,wBAAwB;A3D8xM3C;;A2D7xMA;EAAmB,0BAA0B;A3DiyM7C;;A2DhyMA;EAAmB,2BAA2B;A3DoyM9C;;A2DnyMA;EAAmB,yBAAyB;A3DuyM5C;;A2DpyME;EACE,gCAA+B;A3DuyMnC;;A2DxyME;EACE,gCAA+B;A3D2yMnC;;A2D5yME;EACE,gCAA+B;A3D+yMnC;;A2DhzME;EACE,gCAA+B;A3DmzMnC;;A2DpzME;EACE,gCAA+B;A3DuzMnC;;A2DxzME;EACE,gCAA+B;A3D2zMnC;;A2D5zME;EACE,gCAA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r3OQ;EAAgC,oBAA4B;AvEy3OpE;;AuEx3OQ;;EAEE,wBAAoC;AvE23O9C;;AuEz3OQ;;EAEE,0BAAwC;AvE43OlD;;AuE13OQ;;EAEE,2BAA0C;AvE63OpD;;AuE33OQ;;EAEE,yBAAsC;AvE83OhD;;AuE74OQ;EAAgC,0BAA4B;AvEi5OpE;;AuEh5OQ;;EAEE,8BAAoC;AvEm5O9C;;AuEj5OQ;;EAEE,gCAAwC;AvEo5OlD;;AuEl5OQ;;EAEE,iCAA0C;AvEq5OpD;;AuEn5OQ;;EAEE,+BAAsC;AvEs5OhD;;AuEr6OQ;EAAgC,yBAA4B;AvEy6OpE;;AuEx6OQ;;EAEE,6BAAoC;AvE26O9C;;AuEz6OQ;;EAEE,+BAAwC;AvE46OlD;;AuE16OQ;;EAEE,gCAA0C;AvE66OpD;;AuE36OQ;;EAEE,8BAAsC;AvE86OhD;;AuE77OQ;EAAgC,uBAA4B;AvEi8OpE;;AuEh8OQ;;EAEE,2BAAoC;AvEm8O9C;;AuEj8OQ;;EAEE,6BAAwC;AvEo8OlD;;AuEl8OQ;;EAEE,8BAA0C;AvEq8OpD;;AuEn8OQ;;EAEE,4BAAsC;AvEs8OhD;;AuEr9OQ;EAAgC,yBAA4B;AvEy9OpE;;AuEx9OQ;;EAEE,6BAAoC;AvE29O9C;;AuEz9OQ;;EAEE,+BAAwC;AvE49OlD;;AuE19OQ;;EAEE,gCAA0C;AvE69OpD;;AuE39OQ;;EAEE,8BAAsC;AvE89OhD;;AuE7+OQ;EAAgC,uBAA4B;AvEi/OpE;;AuEh/OQ;;EAEE,2BAAoC;AvEm/O9C;;AuEj/OQ;;EAEE,6BAAwC;AvEo/OlD;;AuEl/OQ;;EAEE,8BAA0C;AvEq/OpD;;AuEn/OQ;;EAEE,4BAAsC;AvEs/OhD;;AuErgPQ;EAAgC,qBAA4B;AvEygPpE;;AuExgPQ;;EAEE,yBAAoC;AvE2gP9C;;AuEzgPQ;;EAEE,2BAAwC;AvE4gPlD;;AuE1gPQ;;EAEE,4BAA0C;AvE6gPpD;;AuE3gPQ;;EAEE,0BAAsC;AvE8gPhD;;AuE7hPQ;EAAgC,2BAA4B;AvEiiPpE;;AuEhiPQ;;EAEE,+BAAoC;AvEmiP9C;;AuEjiPQ;;EAEE,iCAAwC;AvEoiPlD;;AuEliPQ;;EAEE,kCAA0C;AvEqiPpD;;AuEniPQ;;EAEE,gCAAsC;AvEsiPhD;;AuErjPQ;EAAgC,0BAA4B;AvEyjPpE;;AuExjPQ;;EAEE,8BAAoC;AvE2jP9C;;AuEzjPQ;;EAEE,gCAAwC;AvE4jPlD;;AuE1jPQ;;EAEE,iCAA0C;AvE6jPpD;;AuE3jPQ;;EAEE,+BAAsC;AvE8jPhD;;AuE7kPQ;EAAgC,wBAA4B;AvEilPpE;;AuEhlPQ;;EAEE,4BAAoC;AvEmlP9C;;AuEjlPQ;;EAEE,8BAAwC;AvEolPlD;;AuEllPQ;;EAEE,+BAA0C;AvEqlPpD;;AuEnlPQ;;EAEE,6BAAsC;AvEslPhD;;AuErmPQ;EAAgC,0BAA4B;AvEymPpE;;AuExmPQ;;EAEE,8BAAoC;AvE2mP9C;;AuEzmPQ;;EAEE,gCAAwC;AvE4mPlD;;AuE1mPQ;;EAEE,iCAA0C;AvE6mPpD;;AuE3mPQ;;EAEE,+BAAsC;AvE8mPhD;;AuE7nPQ;EAAgC,wBAA4B;AvEioPpE;;AuEhoPQ;;EAEE,4BAAoC;AvEmoP9C;;AuEjoPQ;;EAEE,8BAAwC;AvEooPlD;;AuEloPQ;;EAEE,+BAA0C;AvEqoPpD;;AuEnoPQ;;EAEE,6BAAsC;AvEsoPhD;;AuE9nPQ;EAAwB,2BAA2B;AvEkoP3D;;AuEjoPQ;;EAEE,+BAA+B;AvEooPzC;;AuEloPQ;;EAEE,iCAAiC;AvEqoP3C;;AuEnoPQ;;EAEE,kCAAkC;AvEsoP5C;;AuEpoPQ;;EAEE,gCAAgC;AvEuoP1C;;AuEtpPQ;EAAwB,0BAA2B;AvE0pP3D;;AuEzpPQ;;EAEE,8BAA+B;AvE4pPzC;;AuE1pPQ;;EAEE,gCAAiC;AvE6pP3C;;AuE3pPQ;;EAEE,iCAAkC;AvE8pP5C;;AuE5pPQ;;EAEE,+BAAgC;AvE+pP1C;;AuE9qPQ;EAAwB,wBAA2B;AvEkrP3D;;AuEjrPQ;;EAEE,4BAA+B;AvEorPzC;;AuElrPQ;;EAEE,8BAAiC;AvEqrP3C;;AuEnrPQ;;EAEE,+BAAkC;AvEsrP5C;;AuEprPQ;;EAEE,6BAAgC;AvEurP1C;;AuEtsPQ;EAAwB,0BAA2B;AvE0sP3D;;AuEzsPQ;;EAEE,8BAA+B;AvE4sPzC;;AuE1sPQ;;EAEE,gCAAiC;AvE6sP3C;;AuE3sPQ;;EAEE,iCAAkC;AvE8sP5C;;AuE5sPQ;;EAEE,+BAAgC;AvE+sP1C;;AuE9tPQ;EAAwB,wBAA2B;AvEkuP3D;;AuEjuPQ;;EAEE,4BAA+B;AvEouPzC;;AuEluPQ;;EAEE,8BAAiC;AvEquP3C;;AuEnuPQ;;EAEE,+BAAkC;AvEsuP5C;;AuEpuPQ;;EAEE,6BAAgC;AvEuuP1C;;AuEjuPI;EAAmB,uBAAuB;AvEquP9C;;AuEpuPI;;EAEE,2BAA2B;AvEuuPjC;;AuEruPI;;EAEE,6BAA6B;AvEwuPnC;;AuEtuPI;;EAEE,8BAA8B;AvEyuPpC;;AuEvuPI;;EAEE,4BAA4B;AvE0uPlC;;AcnvPI;EyDlDI;IAAgC,oBAA4B;EvE0yPlE;EuEzyPM;;IAEE,wBAAoC;EvE2yP5C;EuEzyPM;;IAEE,0BAAwC;EvE2yPhD;EuEzyPM;;IAEE,2BAA0C;EvE2yPlD;EuEzyPM;;IAEE,yBAAsC;EvE2yP9C;EuE1zPM;IAAgC,0BAA4B;EvE6zPlE;EuE5zPM;;IAEE,8BAAoC;EvE8zP5C;EuE5zPM;;IAEE,gCAAwC;EvE8zPhD;EuE5zPM;;IAEE,iCAA0C;EvE8zPlD;EuE5zPM;;IAEE,+BAAsC;EvE8zP9C;EuE70PM;IAAgC,yBAA4B;EvEg1PlE;EuE/0PM;;IAEE,6BAAoC;EvEi1P5C;EuE/0PM;;IAEE,+BAAwC;EvEi1PhD;EuE/0PM;;IAEE,gCAA0C;EvEi1PlD;EuE/0PM;;IAEE,8BAAsC;EvEi1P9C;EuEh2PM;IAAgC,uBAA4B;EvEm2PlE;EuEl2PM;;IAEE,2BAAoC;EvEo2P5C;EuEl2PM;;IAEE,6BAAwC;EvEo2PhD;EuEl2PM;;IAEE,8BAA0C;EvEo2PlD;EuEl2PM;;IAEE,4BAAsC;EvEo2P9C;EuEn3PM;IAAgC,yBAA4B;EvEs3PlE;EuEr3PM;;IAEE,6BAAoC;EvEu3P5C;EuEr3PM;;IAEE,+BAAwC;EvEu3PhD;EuEr3PM;;IAEE,gCAA0C;EvEu3PlD;EuEr3PM;;IAEE,8BAAsC;EvEu3P9C;EuEt4PM;IAAgC,uBAA4B;EvEy4PlE;EuEx4PM;;IAEE,2BAAoC;EvE04P5C;EuEx4PM;;IAEE,6BAAwC;EvE04PhD;EuEx4PM;;IAEE,8BAA0C;EvE04PlD;EuEx4PM;;IAEE,4BAAsC;EvE04P9C;EuEz5PM;IAAgC,qBAA4B;EvE45PlE;EuE35PM;;IAEE,yBAAoC;EvE65P5C;EuE35PM;;IAEE,2BAAwC;EvE65PhD;EuE35PM;;IAEE,4BAA0C;EvE65PlD;EuE35PM;;IAEE,0BAAsC;EvE65P9C;EuE56PM;IAAgC,2BAA4B;EvE+6PlE;EuE96PM;;IAEE,+BAAoC;EvEg7P5C;EuE96PM;;IAEE,iCAAwC;EvEg7PhD;EuE96PM;;IAEE,kCAA0C;EvEg7PlD;EuE96PM;;IAEE,gCAAsC;EvEg7P9C;EuE/7PM;IAAgC,0BAA4B;EvEk8PlE;EuEj8PM;;IAEE,8BAAoC;EvEm8P5C;EuEj8PM;;IAEE,gCAAwC;EvEm8PhD;EuEj8PM;;IAEE,iCAA0C;EvEm8PlD;EuEj8PM;;IAEE,+BAAsC;EvEm8P9C;EuEl9PM;IAAgC,wBAA4B;EvEq9PlE;EuEp9PM;;IAEE,4BAAoC;EvEs9P5C;EuEp9PM;;IAEE,8BAAwC;EvEs9PhD;EuEp9PM;;IAEE,+BAA0C;EvEs9PlD;EuEp9PM;;IAEE,6BAAsC;EvEs9P9C;EuEr+PM;IAAgC,0BAA4B;EvEw+PlE;EuEv+PM;;IAEE,8BAAoC;EvEy+P5C;EuEv+PM;;IAEE,gCAAwC;EvEy+PhD;EuEv+PM;;IAEE,iCAA0C;EvEy+PlD;EuEv+PM;;IAEE,+BAAsC;EvEy+P9C;EuEx/PM;IAAgC,wBAA4B;EvE2/PlE;EuE1/PM;;IAEE,4BAAoC;EvE4/P5C;EuE1/PM;;IAEE,8BAAwC;EvE4/PhD;EuE1/PM;;IAEE,+BAA0C;EvE4/PlD;EuE1/PM;;IAEE,6BAAsC;EvE4/P9C;EuEp/PM;IAAwB,2BAA2B;EvEu/PzD;EuEt/PM;;IAEE,+BAA+B;EvEw/PvC;EuEt/PM;;IAEE,iCAAiC;EvEw/PzC;EuEt/PM;;IAEE,kCAAkC;EvEw/P1C;EuEt/PM;;IAEE,gCAAgC;EvEw/PxC;EuEvgQM;IAAwB,0BAA2B;EvE0gQzD;EuEzgQM;;IAEE,8BAA+B;EvE2gQvC;EuEzgQM;;IAEE,gCAAiC;EvE2gQzC;EuEzgQM;;IAEE,iCAAkC;EvE2gQ1C;EuEzgQM;;IAEE,+BAAgC;EvE2gQxC;EuE1hQM;IAAwB,wBAA2B;EvE6hQzD;EuE5hQM;;IAEE,4BAA+B;EvE8hQvC;EuE5hQM;;IAEE,8BAAiC;EvE8hQzC;EuE5hQM;;IAEE,+BAAkC;EvE8hQ1C;EuE5hQM;;IAEE,6BAAgC;EvE8hQxC;EuE7iQM;IAAwB,0BAA2B;EvEgjQzD;EuE/iQM;;IAEE,8BAA+B;EvEijQvC;EuE/iQM;;IAEE,gCAAiC;EvEijQzC;EuE/iQM;;IAEE,iCAAkC;EvEijQ1C;EuE/iQM;;IAEE,+BAAgC;EvEijQxC;EuEhkQM;IAAwB,wBAA2B;EvEmkQzD;EuElkQM;;IAEE,4BAA+B;EvEokQvC;EuElkQM;;IAEE,8BAAiC;EvEokQzC;EuElkQM;;IAEE,+BAAkC;EvEokQ1C;EuElkQM;;IAEE,6BAAgC;EvEokQxC;EuE9jQE;IAAmB,uBAAuB;EvEikQ5C;EuEhkQE;;IAEE,2BAA2B;EvEkkQ/B;EuEhkQE;;IAEE,6BAA6B;EvEkkQjC;EuEhkQE;;IAEE,8BAA8B;EvEkkQlC;EuEhkQE;;IAEE,4BAA4B;EvEkkQhC;AACF;;Ac5kQI;EyDlDI;IAAgC,oBAA4B;EvEmoQlE;EuEloQM;;IAEE,wBAAoC;EvEooQ5C;EuEloQM;;IAEE,0BAAwC;EvEooQhD;EuEloQM;;IAEE,2BAA0C;EvEooQlD;EuEloQM;;IAEE,yBAAsC;EvEooQ9C;EuEnpQM;IAAgC,0BAA4B;EvEspQlE;EuErpQM;;IAEE,8BAAoC;EvEupQ5C;EuErpQM;;IAEE,gCAAwC;EvEupQhD;EuErpQM;;IAEE,iCAA0C;EvEupQlD;EuErpQM;;IAEE,+BAAsC;EvEupQ9C;EuEtqQM;IAAgC,yBAA4B;EvEyqQlE;EuExqQM;;IAEE,6BAAoC;EvE0qQ5C;EuExqQM;;IAEE,+BAAwC;EvE0qQhD;EuExqQM;;IAEE,gCAA0C;EvE0qQlD;EuExqQM;;IAEE,8BAAsC;EvE0qQ9C;EuEzrQM;IAAgC,uBAA4B;EvE4rQlE;EuE3rQM;;IAEE,2BAAoC;EvE6rQ5C;EuE3rQM;;IAEE,6BAAwC;EvE6rQhD;EuE3rQM;;IAEE,8BAA0C;EvE6rQlD;EuE3rQM;;IAEE,4BAAsC;EvE6rQ9C;EuE5sQM;IAAgC,yBAA4B;EvE+sQlE;EuE9sQM;;IAEE,6BAAoC;EvEgtQ5C;EuE9sQM;;IAEE,+BAAwC;EvEgtQhD;EuE9sQM;;IAEE,gCAA0C;EvEgtQlD;EuE9sQM;;IAEE,8BAAsC;EvEgtQ9C;EuE/tQM;IAAgC,uBAA4B;EvEkuQlE;EuEjuQM;;IAEE,2BAAoC;EvEmuQ5C;EuEjuQM;;IAEE,6BAAwC;EvEmuQhD;EuEjuQM;;IAEE,8BAA0C;EvEmuQlD;EuEjuQM;;IAEE,4BAAsC;EvEmuQ9C;EuElvQM;IAAgC,qBAA4B;EvEqvQlE;EuEpvQM;;IAEE,yBAAoC;EvEsvQ5C;EuEpvQM;;IAEE,2BAAwC;EvEsvQhD;EuEpvQM;;IAEE,4BAA0C;EvEsvQlD;EuEpvQM;;IAEE,0BAAsC;EvEsvQ9C;EuErwQM;IAAgC,2BAA4B;EvEwwQlE;EuEvwQM;;IAEE,+BAAoC;EvEywQ5C;EuEvwQM;;IAEE,iCAAwC;EvEywQhD;EuEvwQM;;IAEE,kCAA0C;EvEywQlD;EuEvwQM;;IAEE,gCAAsC;EvEywQ9C;EuExxQM;IAAgC,0BAA4B;EvE2xQlE;EuE1xQM;;IAEE,8BAAoC;EvE4xQ5C;EuE1xQM;;IAEE,gCAAwC;EvE4xQhD;EuE1xQM;;IAEE,iCAA0C;EvE4xQlD;EuE1xQM;;IAEE,+BAAsC;EvE4xQ9C;EuE3yQM;IAAgC,wBAA4B;EvE8yQlE;EuE7yQM;;IAEE,4BAAoC;EvE+yQ5C;EuE7yQM;;IAEE,8BAAwC;EvE+yQhD;EuE7yQM;;IAEE,+BAA0C;EvE+yQlD;EuE7yQM;;IAEE,6BAAsC;EvE+yQ9C;EuE9zQM;IAAgC,0BAA4B;EvEi0QlE;EuEh0QM;;IAEE,8BAAoC;EvEk0Q5C;EuEh0QM;;IAEE,gCAAwC;EvEk0QhD;EuEh0QM;;IAEE,iCAA0C;EvEk0QlD;EuEh0QM;;IAEE,+BAAsC;EvEk0Q9C;EuEj1QM;IAAgC,wBAA4B;EvEo1QlE;EuEn1QM;;IAEE,4BAAoC;EvEq1Q5C;EuEn1QM;;IAEE,8BAAwC;EvEq1QhD;EuEn1QM;;IAEE,+BAA0C;EvEq1QlD;EuEn1QM;;IAEE,6BAAsC;EvEq1Q9C;EuE70QM;IAAwB,2BAA2B;EvEg1QzD;EuE/0QM;;IAEE,+BAA+B;EvEi1QvC;EuE/0QM;;IAEE,iCAAiC;EvEi1QzC;EuE/0QM;;IAEE,kCAAkC;EvEi1Q1C;EuE/0QM;;IAEE,gCAAgC;EvEi1QxC;EuEh2QM;IAAwB,0BAA2B;EvEm2QzD;EuEl2QM;;IAEE,8BAA+B;EvEo2QvC;EuEl2QM;;IAEE,gCAAiC;EvEo2QzC;EuEl2QM;;IAEE,iCAAkC;EvEo2Q1C;EuEl2QM;;IAEE,+BAAgC;EvEo2QxC;EuEn3QM;IAAwB,wBAA2B;EvEs3QzD;EuEr3QM;;IAEE,4BAA+B;EvEu3QvC;EuEr3QM;;IAEE,8BAAiC;EvEu3QzC;EuEr3QM;;IAEE,+BAAkC;EvEu3Q1C;EuEr3QM;;IAEE,6BAAgC;EvEu3QxC;EuEt4QM;IAAwB,0BAA2B;EvEy4QzD;EuEx4QM;;IAEE,8BAA+B;EvE04QvC;EuEx4QM;;IAEE,gCAAiC;EvE04QzC;EuEx4QM;;IAEE,iCAAkC;EvE04Q1C;EuEx4QM;;IAEE,+BAAgC;EvE04QxC;EuEz5QM;IAAwB,wBAA2B;EvE45QzD;EuE35QM;;IAEE,4BAA+B;EvE65QvC;EuE35QM;;IAEE,8BAAiC;EvE65QzC;EuE35QM;;IAEE,+BAAkC;EvE65Q1C;EuE35QM;;IAEE,6BAAgC;EvE65QxC;EuEv5QE;IAAmB,uBAAuB;EvE05Q5C;EuEz5QE;;IAEE,2BAA2B;EvE25Q/B;EuEz5QE;;IAEE,6BAA6B;EvE25QjC;EuEz5QE;;IAEE,8BAA8B;EvE25QlC;EuEz5QE;;IAEE,4BAA4B;EvE25QhC;AACF;;Acr6QI;EyDlDI;IAAgC,oBAA4B;EvE49QlE;EuE39QM;;IAEE,wBAAoC;EvE69Q5C;EuE39QM;;IAEE,0BAAwC;EvE69QhD;EuE39QM;;IAEE,2BAA0C;EvE69QlD;EuE39QM;;IAEE,yBAAsC;EvE69Q9C;EuE5+QM;IAAgC,0BAA4B;EvE++QlE;EuE9+QM;;IAEE,8BAAoC;EvEg/Q5C;EuE9+QM;;IAEE,gCAAwC;EvEg/QhD;EuE9+QM;;IAEE,iCAA0C;EvEg/QlD;EuE9+QM;;IAEE,+BAAsC;EvEg/Q9C;EuE//QM;IAAgC,yBAA4B;EvEkgRlE;EuEjgRM;;IAEE,6BAAoC;EvEmgR5C;EuEjgRM;;IAEE,+BAAwC;EvEmgRhD;EuEjgRM;;IAEE,gCAA0C;EvEmgRlD;EuEjgRM;;IAEE,8BAAsC;EvEmgR9C;EuElhRM;IAAgC,uBAA4B;EvEqhRlE;EuEphRM;;IAEE,2BAAoC;EvEshR5C;EuEphRM;;IAEE,6BAAwC;EvEshRhD;EuEphRM;;IAEE,8BAA0C;EvEshRlD;EuEphRM;;IAEE,4BAAsC;EvEshR9C;EuEriRM;IAAgC,yBAA4B;EvEwiRlE;EuEviRM;;IAEE,6BAAoC;EvEyiR5C;EuEviRM;;IAEE,+BAAwC;EvEyiRhD;EuEviRM;;IAEE,gCAA0C;EvEyiRlD;EuEviRM;;IAEE,8BAAsC;EvEyiR9C;EuExjRM;IAAgC,uBAA4B;EvE2jRlE;EuE1jRM;;IAEE,2BAAoC;EvE4jR5C;EuE1jRM;;IAEE,6BAAwC;EvE4jRhD;EuE1jRM;;IAEE,8BAA0C;EvE4jRlD;EuE1jRM;;IAEE,4BAAsC;EvE4jR9C;EuE3kRM;IAAgC,qBAA4B;EvE8kRlE;EuE7kRM;;IAEE,yBAAoC;EvE+kR5C;EuE7kRM;;IAEE,2BAAwC;EvE+kRhD;EuE7kRM;;IAEE,4BAA0C;EvE+kRlD;EuE7kRM;;IAEE,0BAAsC;EvE+kR9C;EuE9lRM;IAAgC,2BAA4B;EvEimRlE;EuEhmRM;;IAEE,+BAAoC;EvEkmR5C;EuEhmRM;;IAEE,iCAAwC;EvEkmRhD;EuEhmRM;;IAEE,kCAA0C;EvEkmRlD;EuEhmRM;;IAEE,gCAAsC;EvEkmR9C;EuEjnRM;IAAgC,0BAA4B;EvEonRlE;EuEnnRM;;IAEE,8BAAoC;EvEqnR5C;EuEnnRM;;IAEE,gCAAwC;EvEqnRhD;EuEnnRM;;IAEE,iCAA0C;EvEqnRlD;EuEnnRM;;IAEE,+BAAsC;EvEqnR9C;EuEpoRM;IAAgC,wBAA4B;EvEuoRlE;EuEtoRM;;IAEE,4BAAoC;EvEwoR5C;EuEtoRM;;IAEE,8BAAwC;EvEwoRhD;EuEtoRM;;IAEE,+BAA0C;EvEwoRlD;EuEtoRM;;IAEE,6BAAsC;EvEwoR9C;EuEvpRM;IAAgC,0BAA4B;EvE0pRlE;EuEzpRM;;IAEE,8BAAoC;EvE2pR5C;EuEzpRM;;IAEE,gCAAwC;EvE2pRhD;EuEzpRM;;IAEE,iCAA0C;EvE2pRlD;EuEzpRM;;IAEE,+BAAsC;EvE2pR9C;EuE1qRM;IAAgC,wBAA4B;EvE6qRlE;EuE5qRM;;IAEE,4BAAoC;EvE8qR5C;EuE5qRM;;IAEE,8BAAwC;EvE8qRhD;EuE5qRM;;IAEE,+BAA0C;EvE8qRlD;EuE5qRM;;IAEE,6BAAsC;EvE8qR9C;EuEtqRM;IAAwB,2BAA2B;EvEyqRzD;EuExqRM;;IAEE,+BAA+B;EvE0qRvC;EuExqRM;;IAEE,iCAAiC;EvE0qRzC;EuExqRM;;IAEE,kCAAkC;EvE0qR1C;EuExqRM;;IAEE,gCAAgC;EvE0qRxC;EuEzrRM;IAAwB,0BAA2B;EvE4rRzD;EuE3rRM;;IAEE,8BAA+B;EvE6rRvC;EuE3rRM;;IAEE,gCAAiC;EvE6rRzC;EuE3rRM;;IAEE,iCAAkC;EvE6rR1C;EuE3rRM;;IAEE,+BAAgC;EvE6rRxC;EuE5sRM;IAAwB,wBAA2B;EvE+sRzD;EuE9sRM;;IAEE,4BAA+B;EvEgtRvC;EuE9sRM;;IAEE,8BAAiC;EvEgtRzC;EuE9sRM;;IAEE,+BAAkC;EvEgtR1C;EuE9sRM;;IAEE,6BAAgC;EvEgtRxC;EuE/tRM;IAAwB,0BAA2B;EvEkuRzD;EuEjuRM;;IAEE,8BAA+B;EvEmuRvC;EuEjuRM;;IAEE,gCAAiC;EvEmuRzC;EuEjuRM;;IAEE,iCAAkC;EvEmuR1C;EuEjuRM;;IAEE,+BAAgC;EvEmuRxC;EuElvRM;IAAwB,wBAA2B;EvEqvRzD;EuEpvRM;;IAEE,4BAA+B;EvEsvRvC;EuEpvRM;;IAEE,8BAAiC;EvEsvRzC;EuEpvRM;;IAEE,+BAAkC;EvEsvR1C;EuEpvRM;;IAEE,6BAAgC;EvEsvRxC;EuEhvRE;IAAmB,uBAAuB;EvEmvR5C;EuElvRE;;IAEE,2BAA2B;EvEovR/B;EuElvRE;;IAEE,6BAA6B;EvEovRjC;EuElvRE;;IAEE,8BAA8B;EvEovRlC;EuElvRE;;IAEE,4BAA4B;EvEovRhC;AACF;;Ac9vRI;EyDlDI;IAAgC,oBAA4B;EvEqzRlE;EuEpzRM;;IAEE,wBAAoC;EvEszR5C;EuEpzRM;;IAEE,0BAAwC;EvEszRhD;EuEpzRM;;IAEE,2BAA0C;EvEszRlD;EuEpzRM;;IAEE,yBAAsC;EvEszR9C;EuEr0RM;IAAgC,0BAA4B;EvEw0RlE;EuEv0RM;;IAEE,8BAAoC;EvEy0R5C;EuEv0RM;;IAEE,gCAAwC;EvEy0RhD;EuEv0RM;;IAEE,iCAA0C;EvEy0RlD;EuEv0RM;;IAEE,+BAAsC;EvEy0R9C;EuEx1RM;IAAgC,yBAA4B;EvE21RlE;EuE11RM;;IAEE,6BAAoC;EvE41R5C;EuE11RM;;IAEE,+BAAwC;EvE41RhD;EuE11RM;;IAEE,gCAA0C;EvE41RlD;EuE11RM;;IAEE,8BAAsC;EvE41R9C;EuE32RM;IAAgC,uBAA4B;EvE82RlE;EuE72RM;;IAEE,2BAAoC;EvE+2R5C;EuE72RM;;IAEE,6BAAwC;EvE+2RhD;EuE72RM;;IAEE,8BAA0C;EvE+2RlD;EuE72RM;;IAEE,4BAAsC;EvE+2R9C;EuE93RM;IAAgC,yBAA4B;EvEi4RlE;EuEh4RM;;IAEE,6BAAoC;EvEk4R5C;EuEh4RM;;IAEE,+BAAwC;EvEk4RhD;EuEh4RM;;IAEE,gCAA0C;EvEk4RlD;EuEh4RM;;IAEE,8BAAsC;EvEk4R9C;EuEj5RM;IAAgC,uBAA4B;EvEo5RlE;EuEn5RM;;IAEE,2BAAoC;EvEq5R5C;EuEn5RM;;IAEE,6BAAwC;EvEq5RhD;EuEn5RM;;IAEE,8BAA0C;EvEq5RlD;EuEn5RM;;IAEE,4BAAsC;EvEq5R9C;EuEp6RM;IAAgC,qBAA4B;EvEu6RlE;EuEt6RM;;IAEE,yBAAoC;EvEw6R5C;EuEt6RM;;IAEE,2BAAwC;EvEw6RhD;EuEt6RM;;IAEE,4BAA0C;EvEw6RlD;EuEt6RM;;IAEE,0BAAsC;EvEw6R9C;EuEv7RM;IAAgC,2BAA4B;EvE07RlE;EuEz7RM;;IAEE,+BAAoC;EvE27R5C;EuEz7RM;;IAEE,iCAAwC;EvE27RhD;EuEz7RM;;IAEE,kCAA0C;EvE27RlD;EuEz7RM;;IAEE,gCAAsC;EvE27R9C;EuE18RM;IAAgC,0BAA4B;EvE68RlE;EuE58RM;;IAEE,8BAAoC;EvE88R5C;EuE58RM;;IAEE,gCAAwC;EvE88RhD;EuE58RM;;IAEE,iCAA0C;EvE88RlD;EuE58RM;;IAEE,+BAAsC;EvE88R9C;EuE79RM;IAAgC,wBAA4B;EvEg+RlE;EuE/9RM;;IAEE,4BAAoC;EvEi+R5C;EuE/9RM;;IAEE,8BAAwC;EvEi+RhD;EuE/9RM;;IAEE,+BAA0C;EvEi+RlD;EuE/9RM;;IAEE,6BAAsC;EvEi+R9C;EuEh/RM;IAAgC,0BAA4B;EvEm/RlE;EuEl/RM;;IAEE,8BAAoC;EvEo/R5C;EuEl/RM;;IAEE,gCAAwC;EvEo/RhD;EuEl/RM;;IAEE,iCAA0C;EvEo/RlD;EuEl/RM;;IAEE,+BAAsC;EvEo/R9C;EuEngSM;IAAgC,wBAA4B;EvEsgSlE;EuErgSM;;IAEE,4BAAoC;EvEugS5C;EuErgSM;;IAEE,8BAAwC;EvEugShD;EuErgSM;;IAEE,+BAA0C;EvEugSlD;EuErgSM;;IAEE,6BAAsC;EvEugS9C;EuE//RM;IAAwB,2BAA2B;EvEkgSzD;EuEjgSM;;IAEE,+BAA+B;EvEmgSvC;EuEjgSM;;IAEE,iCAAiC;EvEmgSzC;EuEjgSM;;IAEE,kCAAkC;EvEmgS1C;EuEjgSM;;IAEE,gCAAgC;EvEmgSxC;EuElhSM;IAAwB,0BAA2B;EvEqhSzD;EuEphSM;;IAEE,8BAA+B;EvEshSvC;EuEphSM;;IAEE,gCAAiC;EvEshSzC;EuEphSM;;IAEE,iCAAkC;EvEshS1C;EuEphSM;;IAEE,+BAAgC;EvEshSxC;EuEriSM;IAAwB,wBAA2B;EvEwiSzD;EuEviSM;;IAEE,4BAA+B;EvEyiSvC;EuEviSM;;IAEE,8BAAiC;EvEyiSzC;EuEviSM;;IAEE,+BAAkC;EvEyiS1C;EuEviSM;;IAEE,6BAAgC;EvEyiSxC;EuExjSM;IAAwB,0BAA2B;EvE2jSzD;EuE1jSM;;IAEE,8BAA+B;EvE4jSvC;EuE1jSM;;IAEE,gCAAiC;EvE4jSzC;EuE1jSM;;IAEE,iCAAkC;EvE4jS1C;EuE1jSM;;IAEE,+BAAgC;EvE4jSxC;EuE3kSM;IAAwB,wBAA2B;EvE8kSzD;EuE7kSM;;IAEE,4BAA+B;EvE+kSvC;EuE7kSM;;IAEE,8BAAiC;EvE+kSzC;EuE7kSM;;IAEE,+BAAkC;EvE+kS1C;EuE7kSM;;IAEE,6BAAgC;EvE+kSxC;EuEzkSE;IAAmB,uBAAuB;EvE4kS5C;EuE3kSE;;IAEE,2BAA2B;EvE6kS/B;EuE3kSE;;IAEE,6BAA6B;EvE6kSjC;EuE3kSE;;IAEE,8BAA8B;EvE6kSlC;EuE3kSE;;IAEE,4BAA4B;EvE6kShC;AACF;;AwE/oSA;EAEI,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,SAAS;EACT,OAAO;EACP,UAAU;EAEV,oBAAoB;EACpB,WAAW;EAEX,kCAAkC;AxE+oStC;;AyEzpSA;EAAkB,4GAA8C;AzE6pShE;;AyEzpSA;EAAiB,8BAA8B;AzE6pS/C;;AyE5pSA;EAAiB,8BAA8B;AzEgqS/C;;AyE/pSA;EAAiB,8BAA8B;AzEmqS/C;;AyElqSA;ECTE,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;A1E+qSrB;;AyEhqSI;EAAwB,2BAA2B;AzEoqSvD;;AyEnqSI;EAAwB,4BAA4B;AzEuqSxD;;AyEtqSI;EAAwB,6BAA6B;AzE0qSzD;;AcroSI;E2DvCA;IAAwB,2BAA2B;EzEirSrD;EyEhrSE;IAAwB,4BAA4B;EzEmrStD;EyElrSE;IAAwB,6BAA6B;EzEqrSvD;AACF;;AcjpSI;E2DvCA;IAAwB,2BAA2B;EzE6rSrD;EyE5rSE;IAAwB,4BAA4B;EzE+rStD;EyE9rSE;IAAwB,6BAA6B;EzEisSvD;AACF;;Ac7pSI;E2DvCA;IAAwB,2BAA2B;EzEysSrD;EyExsSE;IAAwB,4BAA4B;EzE2sStD;EyE1sSE;IAAwB,6BAA6B;EzE6sSvD;AACF;;AczqSI;E2DvCA;IAAwB,2BAA2B;EzEqtSrD;EyEptSE;IAAwB,4BAA4B;EzEutStD;EyEttSE;IAAwB,6BAA6B;EzEytSvD;AACF;;AyEptSA;EAAmB,oCAAoC;AzEwtSvD;;AyEvtSA;EAAmB,oCAAoC;AzE2tSvD;;AyE1tSA;EAAmB,qCAAqC;AzE8tSxD;;AyE1tSA;EAAuB,2BAA0C;AzE8tSjE;;AyE7tSA;EAAuB,+BAA4C;AzEiuSnE;;AyEhuSA;EAAuB,2BAA2C;AzEouSlE;;AyEnuSA;EAAuB,2BAAyC;AzEuuShE;;AyEtuSA;EAAuB,8BAA2C;AzE0uSlE;;AyEzuSA;EAAuB,6BAA6B;AzE6uSpD;;AyEzuSA;EAAc,sBAAwB;AzE6uStC;;A2EpxSE;EACE,yBAAwB;A3EuxS5B;;AK7wSE;EsELM,yBAA0E;A3EsxSlF;;A2E5xSE;EACE,yBAAwB;A3E+xS5B;;AKrxSE;EsELM,yBAA0E;A3E8xSlF;;A2EpySE;EACE,yBAAwB;A3EuyS5B;;AK7xSE;EsELM,yBAA0E;A3EsySlF;;A2E5ySE;EACE,yBAAwB;A3E+yS5B;;AKrySE;EsELM,yBAA0E;A3E8ySlF;;A2EpzSE;EACE,yBAAwB;A3EuzS5B;;AK7ySE;EsELM,yBAA0E;A3EszSlF;;A2E5zSE;EACE,yBAAwB;A3E+zS5B;;AKrzSE;EsELM,yBAA0E;A3E8zSlF;;A2Ep0SE;EACE,yBAAwB;A3Eu0S5B;;AK7zSE;EsELM,yBAA0E;A3Es0SlF;;A2E50SE;EACE,yBAAwB;A3E+0S5B;;AKr0SE;EsELM,yBAA0E;A3E80SlF;;AyEvySA;EAAa,yBAA6B;AzE2yS1C;;AyE1ySA;EAAc,yBAA6B;AzE8yS3C;;AyE5ySA;EAAiB,oCAAkC;AzEgzSnD;;AyE/ySA;EAAiB,0CAAkC;AzEmzSnD;;AyE/ySA;EGvDE,WAAW;EACX,kBAAkB;EAClB,iBAAiB;EACjB,6BAA6B;EAC7B,SAAS;A5E02SX;;AyEnzSA;EAAwB,gCAAgC;AzEuzSxD;;AyErzSA;EACE,iCAAiC;EACjC,gCAAgC;AzEwzSlC;;AyEnzSA;EAAc,yBAAyB;AzEuzSvC;;A6Ex3SA;EACE,8BAA8B;A7E23ShC;;A6Ex3SA;EACE,6BAA6B;A7E23S/B;;A8E33SE;E5EOF;;;I4EDM,4BAA4B;IAE5B,2BAA2B;E9E23S/B;E8Ex3SE;IAEI,0BAA0B;E9Ey3ShC;E8Eh3SE;IACE,6BAA6B;E9Ek3SjC;EEprSF;I4E/KM,gCAAgC;E9Es2SpC;E8Ep2SE;;IAEE,yB3EzCY;I2E0CZ,wBAAwB;E9Es2S5B;E8E91SE;IACE,2BAA2B;E9Eg2S/B;E8E71SE;;IAEE,wBAAwB;E9E+1S5B;E8E51SE;;;IAGE,UAAU;IACV,SAAS;E9E81Sb;E8E31SE;;IAEE,uBAAuB;E9E61S3B;E8Er1SE;IACE,Q3E+hCgC;EHwzQpC;EEn4SF;I4E+CM,2BAA2C;E9Eu1S/C;E8Er1SE;IACE,2BAA2C;E9Eu1S/C;EiCr6SF;I6CmFM,aAAa;E9Eq1SjB;EsCp7SF;IwCkGM,sB3EtFS;EH26Sb;EgBx7SF;I8DuGM,oCAAoC;E9Eo1SxC;E8Er1SE;;IAKI,iCAAmC;E9Eo1SzC;EgBv5SF;;I8D0EQ,oCAAsC;E9Ei1S5C;EgBt0SF;I8DNM,cAAc;E9E+0SlB;EiBr8SA;;;;I6D4HM,qB3EvHU;EHs8ShB;EgBj2SF;I8DuBM,cAAc;IACd,qB3E7HY;EH08ShB;AACF","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"utilities\";\n@import \"print\";\n","/*!\n * Bootstrap v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-wrap: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\ninput[type=\"date\"].form-control,\ninput[type=\"time\"].form-control,\ninput[type=\"datetime-local\"].form-control,\ninput[type=\"month\"].form-control {\n appearance: none;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n font-size: 1rem;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input[disabled] ~ .form-check-label,\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.form-row > .col > .valid-tooltip,\n.form-row > [class*=\"col-\"] > .valid-tooltip {\n left: 5px;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right 0.75rem center/8px 10px no-repeat, #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat;\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.form-row > .col > .invalid-tooltip,\n.form-row > [class*=\"col-\"] > .invalid-tooltip {\n left: 5px;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right 0.75rem center/8px 10px no-repeat, #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat;\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\n.btn:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #e9ecef;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #adb5bd;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group:not(.has-validation) > .form-control:not(:last-child),\n.input-group:not(.has-validation) > .custom-select:not(:last-child),\n.input-group:not(.has-validation) > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > .form-control:nth-last-child(n + 3),\n.input-group.has-validation > .custom-select:nth-last-child(n + 3),\n.input-group.has-validation > .custom-file:nth-last-child(n + 3) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn,\n.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text,\n.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn,\n.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n z-index: 1;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n color-adjust: exact;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1;\n width: 1rem;\n height: 1.25rem;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: 50% / 50% 50% no-repeat;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right 0.75rem center/8px 10px no-repeat;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n overflow: hidden;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input[disabled] ~ .custom-file-label,\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n overflow: hidden;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: 1.4rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: 0;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-link {\n margin-bottom: -1px;\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar .container,\n.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: 50% / 100% 100% no-repeat;\n}\n\n.navbar-nav-scroll {\n max-height: 75vh;\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n min-height: 1px;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n flex-shrink: 0;\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n display: flex;\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n flex: 1 0 0%;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion {\n overflow-anchor: none;\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:last-of-type) {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card > .card-header {\n border-radius: 0;\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 3;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 3;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n line-height: 0;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: 0.25rem;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n margin-top: -1px;\n border-top-width: 1px;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n.list-group-flush {\n border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n flex-basis: 350px;\n max-width: 350px;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n height: min-content;\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: 0.75rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: calc(0.3rem - 1px);\n border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n margin: 0.25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n height: min-content;\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: 50% / 100% 100% no-repeat;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: .75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n animation: .75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n animation-duration: 1.5s;\n }\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n word-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `<th>` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n // making it impossible to interact with the content\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n$grid-row-columns: 6 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n$table-th-font-weight: null !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n$custom-control-cursor: null !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-label-color: null !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: null !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: null !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/></svg>\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'><path stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/></svg>\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: null !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'><circle r='3' fill='#{$custom-control-indicator-checked-color}'/></svg>\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'><path fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>\") !default;\n$custom-select-background: escape-svg($custom-select-indicator) right $custom-select-padding-x center / $custom-select-bg-size no-repeat !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}' viewBox='0 0 12 12'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n\n$form-validation-states: () !default;\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-nav-scroll-max-height: 75vh !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-font-size: null !default;\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n$user-selects: all, auto, none !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// stylelint-disable selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { @include font-size($h1-font-size); }\nh2, .h2 { @include font-size($h2-font-size); }\nh3, .h3 { @include font-size($h3-font-size); }\nh4, .h4 { @include font-size($h4-font-size); }\nh5, .h5 { @include font-size($h5-font-size); }\nh6, .h6 { @include font-size($h6-font-size); }\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n @include font-size($display1-size);\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n @include font-size($display2-size);\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n @include font-size($display3-size);\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n @include font-size($display4-size);\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n @include font-size($small-font-size);\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size(90%);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n @include font-size($blockquote-font-size);\n}\n\n.blockquote-footer {\n display: block;\n @include font-size($blockquote-small-font-size);\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled() {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer / 2;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid() {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n @include deprecate(\"`img-retina()`\", \"v4.3.0\", \"v5\");\n}\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-right-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-left-radius($radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n","// Inline code\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n @include font-size(100%);\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n @include deprecate(\"The `make-container-max-widths` mixin\", \"v4.5.2\", \"v5\");\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @if $columns > 0 {\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n }\n\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n @if $columns > 0 {\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n margin-bottom: $spacer;\n color: $table-color;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: 2 * $table-border-width;\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover() {\n color: $table-hover-color;\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover() {\n color: $table-dark-hover-color;\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background, $border: null) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n\n @if $border != null {\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $border;\n }\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover() {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// Bootstrap functions\n//\n// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null or unit($num) == \"%\" or unit($prev-num) == \"%\" {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Used to ensure the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map, $map-name: \"$grid-breakpoints\") {\n @if length($map) > 0 {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.\";\n }\n }\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Hugo Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// See https://codepen.io/kevinweber/pen/dXWoRw\n//\n// Requires the use of quotes around data URIs.\n\n@function escape-svg($string) {\n @if str-index($string, \"data:image/svg+xml\") {\n @each $char, $encoded in $escaped-characters {\n // Do not escape the url brackets\n @if str-index($string, \"url(\") == 1 {\n $string: url(\"#{str-replace(str-slice($string, 6, -3), $char, $encoded)}\");\n } @else {\n $string: str-replace($string, $char, $encoded);\n }\n }\n }\n\n @return $string;\n}\n\n// Color contrast\n@function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) {\n $r: red($color);\n $g: green($color);\n $b: blue($color);\n\n $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;\n\n @if ($yiq >= $yiq-contrasted-threshold) {\n @return $dark;\n } @else {\n @return $light;\n }\n}\n\n// Retrieve color Sass maps\n@function color($key: \"blue\") {\n @return map-get($colors, $key);\n}\n\n@function theme-color($key: \"primary\") {\n @return map-get($theme-colors, $key);\n}\n\n@function gray($key: \"100\") {\n @return map-get($grays, $key);\n}\n\n// Request a theme color level\n@function theme-color-level($color-name: \"primary\", $level: 0) {\n $color: theme-color($color-name);\n $color-base: if($level > 0, $black, $white);\n $level: abs($level);\n\n @return mix($color-base, $color, $level * $theme-color-interval);\n}\n\n// Return valid calc\n@function add($value1, $value2, $return-calc: true) {\n @if $value1 == null {\n @return $value2;\n }\n\n @if $value2 == null {\n @return $value1;\n }\n\n @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n @return $value1 + $value2;\n }\n\n @return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(\" + \") + $value2);\n}\n\n@function subtract($value1, $value2, $return-calc: true) {\n @if $value1 == null and $value2 == null {\n @return null;\n }\n\n @if $value1 == null {\n @return -$value2;\n }\n\n @if $value2 == null {\n @return $value1;\n }\n\n @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n @return $value1 - $value2;\n }\n\n @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(\" - \") + $value2);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n height: $input-height;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on `<select>`s in IE10+.\n &::-ms-expand {\n background-color: transparent;\n border: 0;\n }\n\n // Remove select outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $input-color;\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n @include form-control-focus($ignore-warning: true);\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled,\n &[readonly] {\n background-color: $input-disabled-bg;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n &.form-control {\n appearance: none; // Fix appearance for date inputs in Safari\n }\n}\n\nselect.form-control {\n &:focus::-ms-value {\n // Suppress the nested default white text on blue background highlight given to\n // the selected option text when the (still closed) <select> receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<label>/<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n line-height: $input-line-height;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n line-height: $input-line-height-lg;\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n line-height: $input-line-height-sm;\n}\n\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n @include font-size($input-font-size);\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n line-height: $input-line-height-sm;\n @include border-radius($input-border-radius-sm);\n}\n\n.form-control-lg {\n height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n line-height: $input-line-height-lg;\n @include border-radius($input-border-radius-lg);\n}\n\n// stylelint-disable-next-line no-duplicate-selectors\nselect.form-control {\n &[size],\n &[multiple] {\n height: auto;\n }\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: $form-group-margin-bottom;\n}\n\n.form-text {\n display: block;\n margin-top: $form-text-margin-top;\n}\n\n\n// Form grid\n//\n// Special replacement for our grid system's `.row` for tighter form layouts.\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$form-grid-gutter-width / 2;\n margin-left: -$form-grid-gutter-width / 2;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: $form-grid-gutter-width / 2;\n padding-left: $form-grid-gutter-width / 2;\n }\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.form-check {\n position: relative;\n display: block;\n padding-left: $form-check-input-gutter;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: $form-check-input-margin-y;\n margin-left: -$form-check-input-gutter;\n\n // Use [disabled] and :disabled for workaround https://github.com/twbs/bootstrap/issues/28247\n &[disabled] ~ .form-check-label,\n &:disabled ~ .form-check-label {\n color: $text-muted;\n }\n}\n\n.form-check-label {\n margin-bottom: 0; // Override default `<label>` bottom margin\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0; // Override base .form-check\n margin-right: $form-check-inline-margin-x;\n\n // Undo .form-check-input defaults and add some `margin-right`.\n .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: $form-check-inline-input-margin-x;\n margin-left: 0;\n }\n}\n\n\n// Form validation\n//\n// Provide feedback to users when form field values are valid or invalid. Works\n// primarily for client-side validation via scoped `:invalid` and `:valid`\n// pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for\n// server side validation.\n\n@each $state, $data in $form-validation-states {\n @include form-validation-state($state, map-get($data, color), map-get($data, icon));\n}\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center; // Prevent shorter elements from growing to same height as others (e.g., small buttons growing to normal sized button height)\n\n // Because we use flex, the initial sizing of checkboxes is collapsed and\n // doesn't occupy the full-width (which is what we want for xs grid tier),\n // so we force that here.\n .form-check {\n width: 100%;\n }\n\n // Kick in the inline\n @include media-breakpoint-up(sm) {\n label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n\n // Inline-block all the things for \"inline\"\n .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n\n // Allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n // Make static controls behave like regular ones\n .form-control-plaintext {\n display: inline-block;\n }\n\n .input-group,\n .custom-select {\n width: auto;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match.\n .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: $form-check-input-margin-x;\n margin-left: 0;\n }\n\n .custom-control {\n align-items: center;\n justify-content: center;\n }\n .custom-control-label {\n margin-bottom: 0;\n }\n }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-prefers-reduced-motion-media-query and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `$input-focus-border-color` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n@mixin form-control-focus($ignore-warning: false) {\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n @include deprecate(\"The `form-control-focus()` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n\n// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state($state, $color, $icon) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: color-yiq($color);\n background-color: rgba($color, $form-feedback-tooltip-opacity);\n @include border-radius($form-feedback-tooltip-border-radius);\n\n // See https://github.com/twbs/bootstrap/pull/31557\n // Align tooltip to form elements\n .form-row > .col > &,\n .form-row > [class*=\"col-\"] > & {\n left: $form-grid-gutter-width / 2;\n }\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .custom-select {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $custom-select-feedback-icon-padding-right;\n background: $custom-select-background, $custom-select-bg escape-svg($icon) $custom-select-feedback-icon-position / $custom-select-feedback-icon-size no-repeat;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n ~ .form-check-label {\n color: $color;\n }\n\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n }\n\n .custom-control-input {\n @include form-validation-state-selector($state) {\n ~ .custom-control-label {\n color: $color;\n\n &::before {\n border-color: $color;\n }\n }\n\n &:checked {\n ~ .custom-control-label::before {\n border-color: lighten($color, 10%);\n @include gradient-bg(lighten($color, 10%));\n }\n }\n\n &:focus {\n ~ .custom-control-label::before {\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n\n &:not(:checked) ~ .custom-control-label::before {\n border-color: $color;\n }\n }\n }\n }\n\n // custom file\n .custom-file-input {\n @include form-validation-state-selector($state) {\n ~ .custom-file-label {\n border-color: $color;\n }\n\n &:focus {\n ~ .custom-file-label {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n }\n}\n","// Gradients\n\n@mixin gradient-bg($color) {\n @if $enable-gradients {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x;\n } @else {\n background-color: $color;\n }\n}\n\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n background-repeat: repeat-x;\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n background-repeat: repeat-x;\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n background-repeat: repeat-x;\n}\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Base styles\n//\n\n.btn {\n display: inline-block;\n font-family: $btn-font-family;\n font-weight: $btn-font-weight;\n color: $body-color;\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n user-select: none;\n background-color: transparent;\n border: $btn-border-width solid transparent;\n @include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-line-height, $btn-border-radius);\n @include transition($btn-transition);\n\n @include hover() {\n color: $body-color;\n text-decoration: none;\n }\n\n &:focus,\n &.focus {\n outline: 0;\n box-shadow: $btn-focus-box-shadow;\n }\n\n // Disabled comes first so active can properly restyle\n &.disabled,\n &:disabled {\n opacity: $btn-disabled-opacity;\n @include box-shadow(none);\n }\n\n &:not(:disabled):not(.disabled) {\n cursor: if($enable-pointer-cursor-for-buttons, pointer, null);\n\n &:active,\n &.active {\n @include box-shadow($btn-active-box-shadow);\n\n &:focus {\n @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);\n }\n }\n }\n}\n\n// Future-proof disabling of clicks on `<a>` elements\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n\n//\n// Alternate buttons\n//\n\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @include button-variant($value, $value);\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n font-weight: $font-weight-normal;\n color: $link-color;\n text-decoration: $link-decoration;\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n\n &:focus,\n &.focus {\n text-decoration: $link-hover-decoration;\n }\n\n &:disabled,\n &.disabled {\n color: $btn-link-disabled-color;\n pointer-events: none;\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-line-height-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-line-height-sm, $btn-border-radius-sm);\n}\n\n\n//\n// Block button\n//\n\n.btn-block {\n display: block;\n width: 100%;\n\n // Vertically space out multiple block buttons\n + .btn-block {\n margin-top: $btn-block-spacing-y;\n }\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n@mixin button-variant($background, $border, $hover-background: darken($background, 7.5%), $hover-border: darken($border, 10%), $active-background: darken($background, 10%), $active-border: darken($border, 12.5%)) {\n color: color-yiq($background);\n @include gradient-bg($background);\n border-color: $border;\n @include box-shadow($btn-box-shadow);\n\n @include hover() {\n color: color-yiq($hover-background);\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n }\n\n &:focus,\n &.focus {\n color: color-yiq($hover-background);\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n @if $enable-shadows {\n @include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);\n }\n }\n\n // Disabled comes first so active can properly restyle\n &.disabled,\n &:disabled {\n color: color-yiq($background);\n background-color: $background;\n border-color: $border;\n // Remove CSS gradients if they're enabled\n @if $enable-gradients {\n background-image: none;\n }\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n @if $enable-gradients {\n background-image: none; // Remove the gradient for the pressed/active state\n }\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows and $btn-active-box-shadow != none {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);\n }\n }\n }\n}\n\n@mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) {\n color: $color;\n border-color: $color;\n\n @include hover() {\n color: $color-hover;\n background-color: $active-background;\n border-color: $active-border;\n }\n\n &:focus,\n &.focus {\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n\n &.disabled,\n &:disabled {\n color: $color;\n background-color: transparent;\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows and $btn-active-box-shadow != none {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n }\n }\n}\n\n// Button sizes\n@mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n line-height: $line-height;\n // Manually declare to provide an override to the browser default\n @include border-radius($border-radius, 0);\n}\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n}\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: $zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: $dropdown-min-width;\n padding: $dropdown-padding-y $dropdown-padding-x;\n margin: $dropdown-spacer 0 0; // override default ul\n @include font-size($dropdown-font-size);\n color: $dropdown-color;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: $dropdown-bg;\n background-clip: padding-box;\n border: $dropdown-border-width solid $dropdown-border-color;\n @include border-radius($dropdown-border-radius);\n @include box-shadow($dropdown-box-shadow);\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-left {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu#{$infix}-right {\n right: 0;\n left: auto;\n }\n }\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropright {\n .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(right);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropleft {\n .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(left);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n// When Popper is enabled, reset the basic dropdown position\n// stylelint-disable-next-line no-duplicate-selectors\n.dropdown-menu {\n &[x-placement^=\"top\"],\n &[x-placement^=\"right\"],\n &[x-placement^=\"bottom\"],\n &[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n }\n}\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n @include nav-divider($dropdown-divider-bg, $dropdown-divider-margin-y, true);\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n clear: both;\n font-weight: $font-weight-normal;\n color: $dropdown-link-color;\n text-align: inherit; // For `<button>`s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n\n // Prevent dropdown overflow if there's no padding\n // See https://github.com/twbs/bootstrap/pull/27703\n @if $dropdown-padding-y == 0 {\n &:first-child {\n @include border-top-radius($dropdown-inner-border-radius);\n }\n\n &:last-child {\n @include border-bottom-radius($dropdown-inner-border-radius);\n }\n }\n\n @include hover-focus() {\n color: $dropdown-link-hover-color;\n text-decoration: none;\n @include gradient-bg($dropdown-link-hover-bg);\n }\n\n &.active,\n &:active {\n color: $dropdown-link-active-color;\n text-decoration: none;\n @include gradient-bg($dropdown-link-active-bg);\n }\n\n &.disabled,\n &:disabled {\n color: $dropdown-link-disabled-color;\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n @if $enable-gradients {\n background-image: none;\n }\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: $dropdown-header-padding;\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: $dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n color: $dropdown-link-color;\n}\n","@mixin caret-down() {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up() {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-right() {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-left() {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down();\n } @else if $direction == up {\n @include caret-up();\n } @else if $direction == right {\n @include caret-right();\n }\n }\n\n @if $direction == left {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @include caret-left();\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n@mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y, $ignore-warning: false) {\n height: 0;\n margin: $margin-y 0;\n overflow: hidden;\n border-top: 1px solid $color;\n @include deprecate(\"The `nav-divider()` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n @include hover() {\n z-index: 1;\n }\n &:focus,\n &:active,\n &.active {\n z-index: 1;\n }\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n // Prevent double borders when buttons are next to each other\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-left: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-right-radius(0);\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) > .btn {\n @include border-left-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropright &::after {\n margin-left: 0;\n }\n\n .dropleft &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n.btn-group-toggle {\n > .btn,\n > .btn-group > .btn {\n margin-bottom: 0; // Override default `<label>` value\n\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-control-plaintext,\n > .custom-select,\n > .custom-file {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n margin-bottom: 0;\n\n + .form-control,\n + .custom-select,\n + .custom-file {\n margin-left: -$input-border-width;\n }\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .custom-select:focus,\n > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n }\n\n // Bring the custom file input above the label\n > .custom-file .custom-file-input:focus {\n z-index: 4;\n }\n\n > .form-control,\n > .custom-select {\n &:not(:first-child) { @include border-left-radius(0); }\n }\n\n // Custom file inputs have more complex markup, thus requiring different\n // border-radius overrides.\n > .custom-file {\n display: flex;\n align-items: center;\n\n &:not(:last-child) .custom-file-label,\n &:not(:first-child) .custom-file-label { @include border-left-radius(0); }\n }\n\n &:not(.has-validation) {\n > .form-control:not(:last-child),\n > .custom-select:not(:last-child),\n > .custom-file:not(:last-child) .custom-file-label::after {\n @include border-right-radius(0);\n }\n }\n\n &.has-validation {\n > .form-control:nth-last-child(n + 3),\n > .custom-select:nth-last-child(n + 3),\n > .custom-file:nth-last-child(n + 3) .custom-file-label::after {\n @include border-right-radius(0);\n }\n }\n}\n\n\n// Prepend and append\n//\n// While it requires one extra layer of HTML for each, dedicated prepend and\n// append elements allow us to 1) be less clever, 2) simplify our selectors, and\n// 3) support HTML5 form validation.\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 3;\n }\n }\n\n .btn + .btn,\n .btn + .input-group-text,\n .input-group-text + .input-group-text,\n .input-group-text + .btn {\n margin-left: -$input-border-width;\n }\n}\n\n.input-group-prepend { margin-right: -$input-border-width; }\n.input-group-append { margin-left: -$input-border-width; }\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-padding-y $input-padding-x;\n margin-bottom: 0; // Allow use of <label> elements by overriding our default margin-bottom\n @include font-size($input-font-size); // Match inputs\n font-weight: $font-weight-normal;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: $input-height-lg;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n line-height: $input-line-height-lg;\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: $input-height-sm;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n line-height: $input-line-height-sm;\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: $custom-select-padding-x + $custom-select-indicator-padding;\n}\n\n\n// Prepend and append rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn,\n.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text,\n.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn,\n.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n @include border-right-radius(0);\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n @include border-left-radius(0);\n}\n","// Embedded icons from Open Iconic.\n// Released under MIT and copyright 2014 Waybury.\n// https://useiconic.com/open\n\n\n// Checkboxes and radios\n//\n// Base class takes care of all the key behavioral aspects.\n\n.custom-control {\n position: relative;\n z-index: 1;\n display: block;\n min-height: $font-size-base * $line-height-base;\n padding-left: $custom-control-gutter + $custom-control-indicator-size;\n color-adjust: exact; // Keep themed appearance for print\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: $custom-control-spacer-x;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1; // Put the input behind the label so it doesn't overlay text\n width: $custom-control-indicator-size;\n height: ($font-size-base * $line-height-base + $custom-control-indicator-size) / 2;\n opacity: 0;\n\n &:checked ~ .custom-control-label::before {\n color: $custom-control-indicator-checked-color;\n border-color: $custom-control-indicator-checked-border-color;\n @include gradient-bg($custom-control-indicator-checked-bg);\n @include box-shadow($custom-control-indicator-checked-box-shadow);\n }\n\n &:focus ~ .custom-control-label::before {\n // the mixin is not used here to make sure there is feedback\n @if $enable-shadows {\n box-shadow: $input-box-shadow, $custom-control-indicator-focus-box-shadow;\n } @else {\n box-shadow: $custom-control-indicator-focus-box-shadow;\n }\n }\n\n &:focus:not(:checked) ~ .custom-control-label::before {\n border-color: $custom-control-indicator-focus-border-color;\n }\n\n &:not(:disabled):active ~ .custom-control-label::before {\n color: $custom-control-indicator-active-color;\n background-color: $custom-control-indicator-active-bg;\n border-color: $custom-control-indicator-active-border-color;\n @include box-shadow($custom-control-indicator-active-box-shadow);\n }\n\n // Use [disabled] and :disabled to work around https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .custom-control-label {\n color: $custom-control-label-disabled-color;\n\n &::before {\n background-color: $custom-control-indicator-disabled-bg;\n }\n }\n }\n}\n\n// Custom control indicators\n//\n// Build the custom controls out of pseudo-elements.\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n color: $custom-control-label-color;\n vertical-align: top;\n cursor: $custom-control-cursor;\n\n // Background-color and (when enabled) gradient\n &::before {\n position: absolute;\n top: ($font-size-base * $line-height-base - $custom-control-indicator-size) / 2;\n left: -($custom-control-gutter + $custom-control-indicator-size);\n display: block;\n width: $custom-control-indicator-size;\n height: $custom-control-indicator-size;\n pointer-events: none;\n content: \"\";\n background-color: $custom-control-indicator-bg;\n border: $custom-control-indicator-border-color solid $custom-control-indicator-border-width;\n @include box-shadow($custom-control-indicator-box-shadow);\n }\n\n // Foreground (icon)\n &::after {\n position: absolute;\n top: ($font-size-base * $line-height-base - $custom-control-indicator-size) / 2;\n left: -($custom-control-gutter + $custom-control-indicator-size);\n display: block;\n width: $custom-control-indicator-size;\n height: $custom-control-indicator-size;\n content: \"\";\n background: 50% / #{$custom-control-indicator-bg-size} no-repeat;\n }\n}\n\n\n// Checkboxes\n//\n// Tweak just a few things for checkboxes.\n\n.custom-checkbox {\n .custom-control-label::before {\n @include border-radius($custom-checkbox-indicator-border-radius);\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::after {\n background-image: escape-svg($custom-checkbox-indicator-icon-checked);\n }\n }\n\n .custom-control-input:indeterminate ~ .custom-control-label {\n &::before {\n border-color: $custom-checkbox-indicator-indeterminate-border-color;\n @include gradient-bg($custom-checkbox-indicator-indeterminate-bg);\n @include box-shadow($custom-checkbox-indicator-indeterminate-box-shadow);\n }\n &::after {\n background-image: escape-svg($custom-checkbox-indicator-icon-indeterminate);\n }\n }\n\n .custom-control-input:disabled {\n &:checked ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n &:indeterminate ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n }\n}\n\n// Radios\n//\n// Tweak just a few things for radios.\n\n.custom-radio {\n .custom-control-label::before {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $custom-radio-indicator-border-radius;\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::after {\n background-image: escape-svg($custom-radio-indicator-icon-checked);\n }\n }\n\n .custom-control-input:disabled {\n &:checked ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n }\n}\n\n\n// switches\n//\n// Tweak a few things for switches\n\n.custom-switch {\n padding-left: $custom-switch-width + $custom-control-gutter;\n\n .custom-control-label {\n &::before {\n left: -($custom-switch-width + $custom-control-gutter);\n width: $custom-switch-width;\n pointer-events: all;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $custom-switch-indicator-border-radius;\n }\n\n &::after {\n top: add(($font-size-base * $line-height-base - $custom-control-indicator-size) / 2, $custom-control-indicator-border-width * 2);\n left: add(-($custom-switch-width + $custom-control-gutter), $custom-control-indicator-border-width * 2);\n width: $custom-switch-indicator-size;\n height: $custom-switch-indicator-size;\n background-color: $custom-control-indicator-border-color;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $custom-switch-indicator-border-radius;\n @include transition(transform .15s ease-in-out, $custom-forms-transition);\n }\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::after {\n background-color: $custom-control-indicator-bg;\n transform: translateX($custom-switch-width - $custom-control-indicator-size);\n }\n }\n\n .custom-control-input:disabled {\n &:checked ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n }\n}\n\n\n// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n//\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: $custom-select-height;\n padding: $custom-select-padding-y ($custom-select-padding-x + $custom-select-indicator-padding) $custom-select-padding-y $custom-select-padding-x;\n font-family: $custom-select-font-family;\n @include font-size($custom-select-font-size);\n font-weight: $custom-select-font-weight;\n line-height: $custom-select-line-height;\n color: $custom-select-color;\n vertical-align: middle;\n background: $custom-select-bg $custom-select-background;\n border: $custom-select-border-width solid $custom-select-border-color;\n @include border-radius($custom-select-border-radius, 0);\n @include box-shadow($custom-select-box-shadow);\n appearance: none;\n\n &:focus {\n border-color: $custom-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($custom-select-box-shadow, $custom-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $custom-select-focus-box-shadow;\n }\n\n &::-ms-value {\n // For visual consistency with other platforms/browsers,\n // suppress the default white text on blue background highlight given to\n // the selected option text when the (still closed) <select> receives focus\n // in IE and (under certain conditions) Edge.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: $custom-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $custom-select-disabled-color;\n background-color: $custom-select-disabled-bg;\n }\n\n // Hides the default caret in IE11\n &::-ms-expand {\n display: none;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $custom-select-color;\n }\n}\n\n.custom-select-sm {\n height: $custom-select-height-sm;\n padding-top: $custom-select-padding-y-sm;\n padding-bottom: $custom-select-padding-y-sm;\n padding-left: $custom-select-padding-x-sm;\n @include font-size($custom-select-font-size-sm);\n}\n\n.custom-select-lg {\n height: $custom-select-height-lg;\n padding-top: $custom-select-padding-y-lg;\n padding-bottom: $custom-select-padding-y-lg;\n padding-left: $custom-select-padding-x-lg;\n @include font-size($custom-select-font-size-lg);\n}\n\n\n// File\n//\n// Custom file input.\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: $custom-file-height;\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: $custom-file-height;\n margin: 0;\n overflow: hidden;\n opacity: 0;\n\n &:focus ~ .custom-file-label {\n border-color: $custom-file-focus-border-color;\n box-shadow: $custom-file-focus-box-shadow;\n }\n\n // Use [disabled] and :disabled to work around https://github.com/twbs/bootstrap/issues/28247\n &[disabled] ~ .custom-file-label,\n &:disabled ~ .custom-file-label {\n background-color: $custom-file-disabled-bg;\n }\n\n @each $lang, $value in $custom-file-text {\n &:lang(#{$lang}) ~ .custom-file-label::after {\n content: $value;\n }\n }\n\n ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n }\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: $custom-file-height;\n padding: $custom-file-padding-y $custom-file-padding-x;\n overflow: hidden;\n font-family: $custom-file-font-family;\n font-weight: $custom-file-font-weight;\n line-height: $custom-file-line-height;\n color: $custom-file-color;\n background-color: $custom-file-bg;\n border: $custom-file-border-width solid $custom-file-border-color;\n @include border-radius($custom-file-border-radius);\n @include box-shadow($custom-file-box-shadow);\n\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: $custom-file-height-inner;\n padding: $custom-file-padding-y $custom-file-padding-x;\n line-height: $custom-file-line-height;\n color: $custom-file-button-color;\n content: \"Browse\";\n @include gradient-bg($custom-file-button-bg);\n border-left: inherit;\n @include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0);\n }\n}\n\n// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.custom-range {\n width: 100%;\n height: add($custom-range-thumb-height, $custom-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }\n &::-ms-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n margin-top: ($custom-range-track-height - $custom-range-thumb-height) / 2; // Webkit specific\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n @include transition($custom-forms-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent; // Why?\n cursor: $custom-range-track-cursor;\n background-color: $custom-range-track-bg;\n border-color: transparent;\n @include border-radius($custom-range-track-border-radius);\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n @include transition($custom-forms-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent;\n cursor: $custom-range-track-cursor;\n background-color: $custom-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($custom-range-track-border-radius);\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-ms-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n margin-top: 0; // Edge specific\n margin-right: $custom-range-thumb-focus-box-shadow-width; // Workaround that overflowed box-shadow is hidden.\n margin-left: $custom-range-thumb-focus-box-shadow-width; // Workaround that overflowed box-shadow is hidden.\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n @include transition($custom-forms-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-ms-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent;\n cursor: $custom-range-track-cursor;\n background-color: transparent;\n border-color: transparent;\n border-width: $custom-range-thumb-height / 2;\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-ms-fill-lower {\n background-color: $custom-range-track-bg;\n @include border-radius($custom-range-track-border-radius);\n }\n\n &::-ms-fill-upper {\n margin-right: 15px; // arbitrary?\n background-color: $custom-range-track-bg;\n @include border-radius($custom-range-track-border-radius);\n }\n\n &:disabled {\n &::-webkit-slider-thumb {\n background-color: $custom-range-thumb-disabled-bg;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: default;\n }\n\n &::-moz-range-thumb {\n background-color: $custom-range-thumb-disabled-bg;\n }\n\n &::-moz-range-track {\n cursor: default;\n }\n\n &::-ms-thumb {\n background-color: $custom-range-thumb-disabled-bg;\n }\n }\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n @include transition($custom-forms-transition);\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: $nav-link-padding-y $nav-link-padding-x;\n text-decoration: if($link-decoration == none, null, none);\n\n @include hover-focus() {\n text-decoration: none;\n }\n\n // Disabled state lightens text\n &.disabled {\n color: $nav-link-disabled-color;\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;\n\n .nav-link {\n margin-bottom: -$nav-tabs-border-width;\n border: $nav-tabs-border-width solid transparent;\n @include border-top-radius($nav-tabs-border-radius);\n\n @include hover-focus() {\n border-color: $nav-tabs-link-hover-border-color;\n }\n\n &.disabled {\n color: $nav-link-disabled-color;\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: $nav-tabs-link-active-color;\n background-color: $nav-tabs-link-active-bg;\n border-color: $nav-tabs-link-active-border-color;\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: -$nav-tabs-border-width;\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n .nav-link {\n @include border-radius($nav-pills-border-radius);\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: $nav-pills-link-active-color;\n background-color: $nav-pills-link-active-bg;\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Contents\n//\n// Navbar\n// Navbar brand\n// Navbar nav\n// Navbar text\n// Navbar divider\n// Responsive navbar\n// Navbar position\n// Navbar themes\n\n\n// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: $navbar-padding-y $navbar-padding-x;\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n %container-flex-properties {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n }\n\n .container,\n .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n display: inline-block;\n padding-top: $navbar-brand-padding-y;\n padding-bottom: $navbar-brand-padding-y;\n margin-right: $navbar-padding-x;\n @include font-size($navbar-brand-font-size);\n line-height: inherit;\n white-space: nowrap;\n\n @include hover-focus() {\n text-decoration: none;\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-link {\n padding-right: 0;\n padding-left: 0;\n }\n\n .dropdown-menu {\n position: static;\n float: none;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n display: inline-block;\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: $navbar-toggler-padding-y $navbar-toggler-padding-x;\n @include font-size($navbar-toggler-font-size);\n line-height: 1;\n background-color: transparent; // remove default button style\n border: $border-width solid transparent; // remove default button style\n @include border-radius($navbar-toggler-border-radius);\n\n @include hover-focus() {\n text-decoration: none;\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: 50% / 100% 100% no-repeat;\n}\n\n.navbar-nav-scroll {\n max-height: $navbar-nav-scroll-max-height;\n overflow-y: auto;\n}\n\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n %container-navbar-expand-#{$breakpoint} {\n padding-right: 0;\n padding-left: 0;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-navbar-expand-#{$breakpoint};\n }\n\n @each $size, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($size, $container-max-widths)} {\n @extend %container-navbar-expand-#{$breakpoint};\n }\n }\n }\n\n @include media-breakpoint-up($next) {\n flex-flow: row nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: $navbar-nav-link-padding-x;\n padding-left: $navbar-nav-link-padding-x;\n }\n }\n\n // For nesting containers, have to redeclare for alignment purposes\n %container-nesting-#{$breakpoint} {\n flex-wrap: nowrap;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-nesting-#{$breakpoint};\n }\n\n @each $size, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($size, $container-max-widths)} {\n @extend %container-nesting-#{$breakpoint};\n }\n }\n\n .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n\n // Changes flex-bases to auto because of an IE10 bug\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n }\n }\n }\n}\n\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n// Dark links against a light background\n.navbar-light {\n .navbar-brand {\n color: $navbar-light-brand-color;\n\n @include hover-focus() {\n color: $navbar-light-brand-hover-color;\n }\n }\n\n .navbar-nav {\n .nav-link {\n color: $navbar-light-color;\n\n @include hover-focus() {\n color: $navbar-light-hover-color;\n }\n\n &.disabled {\n color: $navbar-light-disabled-color;\n }\n }\n\n .show > .nav-link,\n .active > .nav-link,\n .nav-link.show,\n .nav-link.active {\n color: $navbar-light-active-color;\n }\n }\n\n .navbar-toggler {\n color: $navbar-light-color;\n border-color: $navbar-light-toggler-border-color;\n }\n\n .navbar-toggler-icon {\n background-image: escape-svg($navbar-light-toggler-icon-bg);\n }\n\n .navbar-text {\n color: $navbar-light-color;\n a {\n color: $navbar-light-active-color;\n\n @include hover-focus() {\n color: $navbar-light-active-color;\n }\n }\n }\n}\n\n// White links against a dark background\n.navbar-dark {\n .navbar-brand {\n color: $navbar-dark-brand-color;\n\n @include hover-focus() {\n color: $navbar-dark-brand-hover-color;\n }\n }\n\n .navbar-nav {\n .nav-link {\n color: $navbar-dark-color;\n\n @include hover-focus() {\n color: $navbar-dark-hover-color;\n }\n\n &.disabled {\n color: $navbar-dark-disabled-color;\n }\n }\n\n .show > .nav-link,\n .active > .nav-link,\n .nav-link.show,\n .nav-link.active {\n color: $navbar-dark-active-color;\n }\n }\n\n .navbar-toggler {\n color: $navbar-dark-color;\n border-color: $navbar-dark-toggler-border-color;\n }\n\n .navbar-toggler-icon {\n background-image: escape-svg($navbar-dark-toggler-icon-bg);\n }\n\n .navbar-text {\n color: $navbar-dark-color;\n a {\n color: $navbar-dark-active-color;\n\n @include hover-focus() {\n color: $navbar-dark-active-color;\n }\n }\n }\n}\n","//\n// Base styles\n//\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: $card-height;\n word-wrap: break-word;\n background-color: $card-bg;\n background-clip: border-box;\n border: $card-border-width solid $card-border-color;\n @include border-radius($card-border-radius);\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius($card-inner-border-radius);\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius($card-inner-border-radius);\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n // Workaround for the image size bug in IE\n // See: https://github.com/twbs/bootstrap/pull/28855\n min-height: 1px;\n padding: $card-spacer-x;\n color: $card-color;\n}\n\n.card-title {\n margin-bottom: $card-spacer-y;\n}\n\n.card-subtitle {\n margin-top: -$card-spacer-y / 2;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n @include hover() {\n text-decoration: none;\n }\n\n + .card-link {\n margin-left: $card-spacer-x;\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: $card-spacer-y $card-spacer-x;\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: $card-cap-color;\n background-color: $card-cap-bg;\n border-bottom: $card-border-width solid $card-border-color;\n\n &:first-child {\n @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);\n }\n}\n\n.card-footer {\n padding: $card-spacer-y $card-spacer-x;\n color: $card-cap-color;\n background-color: $card-cap-bg;\n border-top: $card-border-width solid $card-border-color;\n\n &:last-child {\n @include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius);\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: -$card-spacer-x / 2;\n margin-bottom: -$card-spacer-y;\n margin-left: -$card-spacer-x / 2;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -$card-spacer-x / 2;\n margin-left: -$card-spacer-x / 2;\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: $card-img-overlay-padding;\n @include border-radius($card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n flex-shrink: 0; // For IE: https://github.com/twbs/bootstrap/issues/29396\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n @include border-top-radius($card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n @include border-bottom-radius($card-inner-border-radius);\n}\n\n\n// Card deck\n\n.card-deck {\n .card {\n margin-bottom: $card-deck-margin;\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n margin-right: -$card-deck-margin;\n margin-left: -$card-deck-margin;\n\n .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-right: $card-deck-margin;\n margin-bottom: 0; // Override the default\n margin-left: $card-deck-margin;\n }\n }\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: $card-group-margin;\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:not(:last-child) {\n @include border-right-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-right-radius: 0;\n }\n }\n\n &:not(:first-child) {\n @include border-left-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-left-radius: 0;\n }\n }\n }\n }\n }\n}\n\n\n//\n// Columns\n//\n\n.card-columns {\n .card {\n margin-bottom: $card-columns-margin;\n }\n\n @include media-breakpoint-up(sm) {\n column-count: $card-columns-count;\n column-gap: $card-columns-gap;\n orphans: 1;\n widows: 1;\n\n .card {\n display: inline-block; // Don't let them vertically span multiple columns\n width: 100%; // Don't let their width change\n }\n }\n}\n\n\n//\n// Accordion\n//\n\n.accordion {\n overflow-anchor: none;\n\n > .card {\n overflow: hidden;\n\n &:not(:last-of-type) {\n border-bottom: 0;\n @include border-bottom-radius(0);\n }\n\n &:not(:first-of-type) {\n @include border-top-radius(0);\n }\n\n > .card-header {\n @include border-radius(0);\n margin-bottom: -$card-border-width;\n }\n }\n}\n",".breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: $breadcrumb-padding-y $breadcrumb-padding-x;\n margin-bottom: $breadcrumb-margin-bottom;\n @include font-size($breadcrumb-font-size);\n list-style: none;\n background-color: $breadcrumb-bg;\n @include border-radius($breadcrumb-border-radius);\n}\n\n.breadcrumb-item {\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: $breadcrumb-item-padding;\n\n &::before {\n float: left; // Suppress inline spacings and underlining of the separator\n padding-right: $breadcrumb-item-padding;\n color: $breadcrumb-divider-color;\n content: escape-svg($breadcrumb-divider);\n }\n }\n\n // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built\n // without `<ul>`s. The `::before` pseudo-element generates an element\n // *within* the .breadcrumb-item and thereby inherits the `text-decoration`.\n //\n // To trick IE into suppressing the underline, we give the pseudo-element an\n // underline and then immediately remove it.\n + .breadcrumb-item:hover::before {\n text-decoration: underline;\n }\n // stylelint-disable-next-line no-duplicate-selectors\n + .breadcrumb-item:hover::before {\n text-decoration: none;\n }\n\n &.active {\n color: $breadcrumb-active-color;\n }\n}\n",".pagination {\n display: flex;\n @include list-unstyled();\n @include border-radius();\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: $pagination-padding-y $pagination-padding-x;\n margin-left: -$pagination-border-width;\n line-height: $pagination-line-height;\n color: $pagination-color;\n text-decoration: if($link-decoration == none, null, none);\n background-color: $pagination-bg;\n border: $pagination-border-width solid $pagination-border-color;\n\n &:hover {\n z-index: 2;\n color: $pagination-hover-color;\n text-decoration: none;\n background-color: $pagination-hover-bg;\n border-color: $pagination-hover-border-color;\n }\n\n &:focus {\n z-index: 3;\n outline: $pagination-focus-outline;\n box-shadow: $pagination-focus-box-shadow;\n }\n}\n\n.page-item {\n &:first-child {\n .page-link {\n margin-left: 0;\n @include border-left-radius($border-radius);\n }\n }\n &:last-child {\n .page-link {\n @include border-right-radius($border-radius);\n }\n }\n\n &.active .page-link {\n z-index: 3;\n color: $pagination-active-color;\n background-color: $pagination-active-bg;\n border-color: $pagination-active-border-color;\n }\n\n &.disabled .page-link {\n color: $pagination-disabled-color;\n pointer-events: none;\n // Opinionated: remove the \"hand\" cursor set previously for .page-link\n cursor: auto;\n background-color: $pagination-disabled-bg;\n border-color: $pagination-disabled-border-color;\n }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $pagination-border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $pagination-border-radius-sm);\n}\n","// Pagination\n\n@mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n .page-link {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n line-height: $line-height;\n }\n\n .page-item {\n &:first-child {\n .page-link {\n @include border-left-radius($border-radius);\n }\n }\n &:last-child {\n .page-link {\n @include border-right-radius($border-radius);\n }\n }\n }\n}\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n display: inline-block;\n padding: $badge-padding-y $badge-padding-x;\n @include font-size($badge-font-size);\n font-weight: $badge-font-weight;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius($badge-border-radius);\n @include transition($badge-transition);\n\n @at-root a#{&} {\n @include hover-focus() {\n text-decoration: none;\n }\n }\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n// Pill badges\n//\n// Make them extra rounded with a modifier to replace v3's badges.\n\n.badge-pill {\n padding-right: $badge-pill-padding-x;\n padding-left: $badge-pill-padding-x;\n @include border-radius($badge-pill-border-radius);\n}\n\n// Colors\n//\n// Contextual variations (linked badges get darker on :hover).\n\n@each $color, $value in $theme-colors {\n .badge-#{$color} {\n @include badge-variant($value);\n }\n}\n","@mixin badge-variant($bg) {\n color: color-yiq($bg);\n background-color: $bg;\n\n @at-root a#{&} {\n @include hover-focus() {\n color: color-yiq($bg);\n background-color: darken($bg, 10%);\n }\n\n &:focus,\n &.focus {\n outline: 0;\n box-shadow: 0 0 0 $badge-focus-width rgba($bg, .5);\n }\n }\n}\n",".jumbotron {\n padding: $jumbotron-padding ($jumbotron-padding / 2);\n margin-bottom: $jumbotron-padding;\n color: $jumbotron-color;\n background-color: $jumbotron-bg;\n @include border-radius($border-radius-lg);\n\n @include media-breakpoint-up(sm) {\n padding: ($jumbotron-padding * 2) $jumbotron-padding;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n @include border-radius(0);\n}\n","//\n// Base styles\n//\n\n.alert {\n position: relative;\n padding: $alert-padding-y $alert-padding-x;\n margin-bottom: $alert-margin-bottom;\n border: $alert-border-width solid transparent;\n @include border-radius($alert-border-radius);\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $close-font-size + $alert-padding-x * 2;\n\n // Adjust close link position\n .close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: $alert-padding-y $alert-padding-x;\n color: inherit;\n }\n}\n\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n@each $color, $value in $theme-colors {\n .alert-#{$color} {\n @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level));\n }\n}\n","@mixin alert-variant($background, $border, $color) {\n color: $color;\n @include gradient-bg($background);\n border-color: $border;\n\n hr {\n border-top-color: darken($border, 5%);\n }\n\n .alert-link {\n color: darken($color, 10%);\n }\n}\n","// Disable animation if transitions are disabled\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n from { background-position: $progress-height 0; }\n to { background-position: 0 0; }\n }\n}\n\n.progress {\n display: flex;\n height: $progress-height;\n overflow: hidden; // force rounded corners by cropping it\n line-height: 0;\n @include font-size($progress-font-size);\n background-color: $progress-bg;\n @include border-radius($progress-border-radius);\n @include box-shadow($progress-box-shadow);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: $progress-bar-color;\n text-align: center;\n white-space: nowrap;\n background-color: $progress-bar-bg;\n @include transition($progress-bar-transition);\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: $progress-height $progress-height;\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: $progress-bar-animation-timing progress-bar-stripes;\n\n @if $enable-prefers-reduced-motion-media-query {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n",".media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius($list-group-border-radius);\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: $list-group-action-color;\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n @include hover-focus() {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: $list-group-action-hover-color;\n text-decoration: none;\n background-color: $list-group-hover-bg;\n }\n\n &:active {\n color: $list-group-action-active-color;\n background-color: $list-group-action-active-bg;\n }\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: $list-group-item-padding-y $list-group-item-padding-x;\n color: $list-group-color;\n text-decoration: if($link-decoration == none, null, none);\n background-color: $list-group-bg;\n border: $list-group-border-width solid $list-group-border-color;\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: $list-group-disabled-color;\n pointer-events: none;\n background-color: $list-group-disabled-bg;\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: $list-group-active-color;\n background-color: $list-group-active-bg;\n border-color: $list-group-active-border-color;\n }\n\n & + & {\n border-top-width: 0;\n\n &.active {\n margin-top: -$list-group-border-width;\n border-top-width: $list-group-border-width;\n }\n }\n}\n\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child {\n @include border-bottom-left-radius($list-group-border-radius);\n @include border-top-right-radius(0);\n }\n\n &:last-child {\n @include border-top-right-radius($list-group-border-radius);\n @include border-bottom-left-radius(0);\n }\n\n &.active {\n margin-top: 0;\n }\n\n + .list-group-item {\n border-top-width: $list-group-border-width;\n border-left-width: 0;\n\n &.active {\n margin-left: -$list-group-border-width;\n border-left-width: $list-group-border-width;\n }\n }\n }\n }\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n @include border-radius(0);\n\n > .list-group-item {\n border-width: 0 0 $list-group-border-width;\n\n &:last-child {\n border-bottom-width: 0;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $color, $value in $theme-colors {\n @include list-group-item-variant($color, theme-color-level($color, -9), theme-color-level($color, 6));\n}\n","// List Groups\n\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n @include hover-focus() {\n color: $color;\n background-color: darken($background, 5%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n",".close {\n float: right;\n @include font-size($close-font-size);\n font-weight: $close-font-weight;\n line-height: 1;\n color: $close-color;\n text-shadow: $close-text-shadow;\n opacity: .5;\n\n // Override <a>'s hover style\n @include hover() {\n color: $close-color;\n text-decoration: none;\n }\n\n &:not(:disabled):not(.disabled) {\n @include hover-focus() {\n opacity: .75;\n }\n }\n}\n\n// Additional properties for button version\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n// stylelint-disable-next-line selector-no-qualifying-type\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n}\n\n// Future-proof disabling of clicks on `<a>` elements\n\n// stylelint-disable-next-line selector-no-qualifying-type\na.close.disabled {\n pointer-events: none;\n}\n",".toast {\n // Prevents from shrinking in IE11, when in a flex container\n // See https://github.com/twbs/bootstrap/issues/28341\n flex-basis: $toast-max-width;\n max-width: $toast-max-width;\n @include font-size($toast-font-size);\n color: $toast-color;\n background-color: $toast-background-color;\n background-clip: padding-box;\n border: $toast-border-width solid $toast-border-color;\n box-shadow: $toast-box-shadow;\n opacity: 0;\n @include border-radius($toast-border-radius);\n\n &:not(:last-child) {\n margin-bottom: $toast-padding-x;\n }\n\n &.showing {\n opacity: 1;\n }\n\n &.show {\n display: block;\n opacity: 1;\n }\n\n &.hide {\n display: none;\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: $toast-padding-y $toast-padding-x;\n color: $toast-header-color;\n background-color: $toast-header-background-color;\n background-clip: padding-box;\n border-bottom: $toast-border-width solid $toast-header-border-color;\n @include border-top-radius(subtract($toast-border-radius, $toast-border-width));\n}\n\n.toast-body {\n padding: $toast-padding-x; // apply to both vertical and horizontal\n}\n","// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n.modal-open {\n // Kill the scroll on the body\n overflow: hidden;\n\n .modal {\n overflow-x: hidden;\n overflow-y: auto;\n }\n}\n\n// Container that the modal scrolls within\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex-modal;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: $modal-dialog-margin;\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n display: flex; // IE10/11\n max-height: subtract(100%, $modal-dialog-margin * 2);\n\n .modal-content {\n max-height: subtract(100vh, $modal-dialog-margin * 2); // IE10/11\n overflow: hidden;\n }\n\n .modal-header,\n .modal-footer {\n flex-shrink: 0;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: subtract(100%, $modal-dialog-margin * 2);\n\n // Ensure `modal-dialog-centered` extends the full height of the view (IE10/11)\n &::before {\n display: block; // IE10\n height: subtract(100vh, $modal-dialog-margin * 2);\n height: min-content; // Reset height to 0 except on IE\n content: \"\";\n }\n\n // Ensure `.modal-body` shows scrollbar (IE10/11)\n &.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n\n .modal-content {\n max-height: none;\n }\n\n &::before {\n content: none;\n }\n }\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: $modal-content-color;\n pointer-events: auto;\n background-color: $modal-content-bg;\n background-clip: padding-box;\n border: $modal-content-border-width solid $modal-content-border-color;\n @include border-radius($modal-content-border-radius);\n @include box-shadow($modal-content-box-shadow-xs);\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex-modal-backdrop;\n width: 100vw;\n height: 100vh;\n background-color: $modal-backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $modal-backdrop-opacity; }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n align-items: flex-start; // so the close btn always stays on the upper right corner\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: $modal-header-padding;\n border-bottom: $modal-header-border-width solid $modal-header-border-color;\n @include border-top-radius($modal-content-inner-border-radius);\n\n .close {\n padding: $modal-header-padding;\n // auto on the left force icon to the right even when there is no .modal-title\n margin: (-$modal-header-padding-y) (-$modal-header-padding-x) (-$modal-header-padding-y) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: $modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when there should be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: $modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: $modal-inner-padding - $modal-footer-margin-between / 2;\n border-top: $modal-footer-border-width solid $modal-footer-border-color;\n @include border-bottom-radius($modal-content-inner-border-radius);\n\n // Place margin between footer elements\n // This solution is far from ideal because of the universal selector usage,\n // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n > * {\n margin: $modal-footer-margin-between / 2;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: $modal-md;\n margin: $modal-dialog-margin-y-sm-up auto;\n }\n\n .modal-dialog-scrollable {\n max-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);\n\n .modal-content {\n max-height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);\n }\n }\n\n .modal-dialog-centered {\n min-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);\n\n &::before {\n height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);\n height: min-content;\n }\n }\n\n .modal-content {\n @include box-shadow($modal-content-box-shadow-sm-up);\n }\n\n .modal-sm { max-width: $modal-sm; }\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg,\n .modal-xl {\n max-width: $modal-lg;\n }\n}\n\n@include media-breakpoint-up(xl) {\n .modal-xl { max-width: $modal-xl; }\n}\n","// Base class\n.tooltip {\n position: absolute;\n z-index: $zindex-tooltip;\n display: block;\n margin: $tooltip-margin;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size($tooltip-font-size);\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: $tooltip-opacity; }\n\n .arrow {\n position: absolute;\n display: block;\n width: $tooltip-arrow-width;\n height: $tooltip-arrow-height;\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top {\n padding: $tooltip-arrow-height 0;\n\n .arrow {\n bottom: 0;\n\n &::before {\n top: 0;\n border-width: $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;\n border-top-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-right {\n padding: 0 $tooltip-arrow-height;\n\n .arrow {\n left: 0;\n width: $tooltip-arrow-height;\n height: $tooltip-arrow-width;\n\n &::before {\n right: 0;\n border-width: ($tooltip-arrow-width / 2) $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;\n border-right-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-bottom {\n padding: $tooltip-arrow-height 0;\n\n .arrow {\n top: 0;\n\n &::before {\n bottom: 0;\n border-width: 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;\n border-bottom-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-left {\n padding: 0 $tooltip-arrow-height;\n\n .arrow {\n right: 0;\n width: $tooltip-arrow-height;\n height: $tooltip-arrow-width;\n\n &::before {\n left: 0;\n border-width: ($tooltip-arrow-width / 2) 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;\n border-left-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-auto {\n &[x-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[x-placement^=\"right\"] {\n @extend .bs-tooltip-right;\n }\n &[x-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[x-placement^=\"left\"] {\n @extend .bs-tooltip-left;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: $tooltip-max-width;\n padding: $tooltip-padding-y $tooltip-padding-x;\n color: $tooltip-color;\n text-align: center;\n background-color: $tooltip-bg;\n @include border-radius($tooltip-border-radius);\n}\n","@mixin reset-text() {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n}\n",".popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: $zindex-popover;\n display: block;\n max-width: $popover-max-width;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size($popover-font-size);\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: $popover-bg;\n background-clip: padding-box;\n border: $popover-border-width solid $popover-border-color;\n @include border-radius($popover-border-radius);\n @include box-shadow($popover-box-shadow);\n\n .arrow {\n position: absolute;\n display: block;\n width: $popover-arrow-width;\n height: $popover-arrow-height;\n margin: 0 $popover-border-radius;\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-popover-top {\n margin-bottom: $popover-arrow-height;\n\n > .arrow {\n bottom: subtract(-$popover-arrow-height, $popover-border-width);\n\n &::before {\n bottom: 0;\n border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-top-color: $popover-arrow-outer-color;\n }\n\n &::after {\n bottom: $popover-border-width;\n border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-top-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-right {\n margin-left: $popover-arrow-height;\n\n > .arrow {\n left: subtract(-$popover-arrow-height, $popover-border-width);\n width: $popover-arrow-height;\n height: $popover-arrow-width;\n margin: $popover-border-radius 0; // make sure the arrow does not touch the popover's rounded corners\n\n &::before {\n left: 0;\n border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-right-color: $popover-arrow-outer-color;\n }\n\n &::after {\n left: $popover-border-width;\n border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-right-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-bottom {\n margin-top: $popover-arrow-height;\n\n > .arrow {\n top: subtract(-$popover-arrow-height, $popover-border-width);\n\n &::before {\n top: 0;\n border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);\n border-bottom-color: $popover-arrow-outer-color;\n }\n\n &::after {\n top: $popover-border-width;\n border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);\n border-bottom-color: $popover-arrow-color;\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: $popover-arrow-width;\n margin-left: -$popover-arrow-width / 2;\n content: \"\";\n border-bottom: $popover-border-width solid $popover-header-bg;\n }\n}\n\n.bs-popover-left {\n margin-right: $popover-arrow-height;\n\n > .arrow {\n right: subtract(-$popover-arrow-height, $popover-border-width);\n width: $popover-arrow-height;\n height: $popover-arrow-width;\n margin: $popover-border-radius 0; // make sure the arrow does not touch the popover's rounded corners\n\n &::before {\n right: 0;\n border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;\n border-left-color: $popover-arrow-outer-color;\n }\n\n &::after {\n right: $popover-border-width;\n border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;\n border-left-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-auto {\n &[x-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[x-placement^=\"right\"] {\n @extend .bs-popover-right;\n }\n &[x-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[x-placement^=\"left\"] {\n @extend .bs-popover-left;\n }\n}\n\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: $popover-header-padding-y $popover-header-padding-x;\n margin-bottom: 0; // Reset the default from Reboot\n @include font-size($font-size-base);\n color: $popover-header-color;\n background-color: $popover-header-bg;\n border-bottom: $popover-border-width solid darken($popover-header-bg, 5%);\n @include border-top-radius($popover-inner-border-radius);\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: $popover-body-padding-y $popover-body-padding-x;\n color: $popover-body-color;\n}\n","// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-left and .carousel-item-right is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-left and .active.carousel-item-right is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-left and .carousel-item-prev.carousel-item-right\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-left,\n .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-left,\n .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n color: $carousel-control-color;\n text-align: center;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n @include hover-focus() {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n @if $enable-gradients {\n background-image: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));\n }\n}\n.carousel-control-next {\n right: 0;\n @if $enable-gradients {\n background-image: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));\n }\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background: 50% / 100% 100% no-repeat;\n}\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n\n// Optional indicator pips\n//\n// Add an ordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0; // override <ol> default\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-left: $carousel-control-width;\n list-style: none;\n\n li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: .5;\n @include transition($carousel-indicator-transition);\n }\n\n .active {\n opacity: 1;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: (100% - $carousel-caption-width) / 2;\n bottom: 20px;\n left: (100% - $carousel-caption-width) / 2;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: $carousel-caption-color;\n text-align: center;\n}\n","@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n","//\n// Rotating border\n//\n\n@keyframes spinner-border {\n to { transform: rotate(360deg); }\n}\n\n.spinner-border {\n display: inline-block;\n width: $spinner-width;\n height: $spinner-height;\n vertical-align: text-bottom;\n border: $spinner-border-width solid currentColor;\n border-right-color: transparent;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: .75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n width: $spinner-width-sm;\n height: $spinner-height-sm;\n border-width: $spinner-border-width-sm;\n}\n\n//\n// Growing circle\n//\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: $spinner-width;\n height: $spinner-height;\n vertical-align: text-bottom;\n background-color: currentColor;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n opacity: 0;\n animation: .75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n width: $spinner-width-sm;\n height: $spinner-height-sm;\n}\n\n@if $enable-prefers-reduced-motion-media-query {\n @media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n animation-duration: 1.5s;\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n.align-baseline { vertical-align: baseline !important; } // Browser default\n.align-top { vertical-align: top !important; }\n.align-middle { vertical-align: middle !important; }\n.align-bottom { vertical-align: bottom !important; }\n.align-text-bottom { vertical-align: text-bottom !important; }\n.align-text-top { vertical-align: text-top !important; }\n","// stylelint-disable declaration-no-important\n\n// Contextual backgrounds\n\n@mixin bg-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n background-color: $color !important;\n }\n a#{$parent},\n button#{$parent} {\n @include hover-focus() {\n background-color: darken($color, 10%) !important;\n }\n }\n @include deprecate(\"The `bg-variant` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n\n@mixin bg-gradient-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;\n }\n @include deprecate(\"The `bg-gradient-variant` mixin\", \"v4.5.0\", \"v5\", $ignore-warning);\n}\n","// stylelint-disable declaration-no-important\n\n@each $color, $value in $theme-colors {\n @include bg-variant(\".bg-#{$color}\", $value, true);\n}\n\n@if $enable-gradients {\n @each $color, $value in $theme-colors {\n @include bg-gradient-variant(\".bg-gradient-#{$color}\", $value, true);\n }\n}\n\n.bg-white {\n background-color: $white !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n","// stylelint-disable property-disallowed-list, declaration-no-important\n\n//\n// Border\n//\n\n.border { border: $border-width solid $border-color !important; }\n.border-top { border-top: $border-width solid $border-color !important; }\n.border-right { border-right: $border-width solid $border-color !important; }\n.border-bottom { border-bottom: $border-width solid $border-color !important; }\n.border-left { border-left: $border-width solid $border-color !important; }\n\n.border-0 { border: 0 !important; }\n.border-top-0 { border-top: 0 !important; }\n.border-right-0 { border-right: 0 !important; }\n.border-bottom-0 { border-bottom: 0 !important; }\n.border-left-0 { border-left: 0 !important; }\n\n@each $color, $value in $theme-colors {\n .border-#{$color} {\n border-color: $value !important;\n }\n}\n\n.border-white {\n border-color: $white !important;\n}\n\n//\n// Border-radius\n//\n\n.rounded-sm {\n border-radius: $border-radius-sm !important;\n}\n\n.rounded {\n border-radius: $border-radius !important;\n}\n\n.rounded-top {\n border-top-left-radius: $border-radius !important;\n border-top-right-radius: $border-radius !important;\n}\n\n.rounded-right {\n border-top-right-radius: $border-radius !important;\n border-bottom-right-radius: $border-radius !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n\n.rounded-left {\n border-top-left-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n\n.rounded-lg {\n border-radius: $border-radius-lg !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: $rounded-pill !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $value in $displays {\n .d#{$infix}-#{$value} { display: $value !important; }\n }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n @each $value in $displays {\n .d-print-#{$value} { display: $value !important; }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n\n &::before {\n display: block;\n content: \"\";\n }\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n}\n\n@each $embed-responsive-aspect-ratio in $embed-responsive-aspect-ratios {\n $embed-responsive-aspect-ratio-x: nth($embed-responsive-aspect-ratio, 1);\n $embed-responsive-aspect-ratio-y: nth($embed-responsive-aspect-ratio, 2);\n\n .embed-responsive-#{$embed-responsive-aspect-ratio-x}by#{$embed-responsive-aspect-ratio-y} {\n &::before {\n padding-top: percentage($embed-responsive-aspect-ratio-y / $embed-responsive-aspect-ratio-x);\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .float#{$infix}-left { float: left !important; }\n .float#{$infix}-right { float: right !important; }\n .float#{$infix}-none { float: none !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n@each $value in $user-selects {\n .user-select-#{$value} { user-select: $value !important; }\n}\n","// stylelint-disable declaration-no-important\n\n@each $value in $overflows {\n .overflow-#{$value} { overflow: $value !important; }\n}\n","// stylelint-disable declaration-no-important\n\n// Common values\n@each $position in $positions {\n .position-#{$position} { position: $position !important; }\n}\n\n// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.sticky-top {\n @supports (position: sticky) {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n}\n","//\n// Screenreaders\n//\n\n.sr-only {\n @include sr-only();\n}\n\n.sr-only-focusable {\n @include sr-only-focusable();\n}\n","// Only display content to screen readers\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin sr-only() {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable() {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n }\n}\n","// stylelint-disable declaration-no-important\n\n.shadow-sm { box-shadow: $box-shadow-sm !important; }\n.shadow { box-shadow: $box-shadow !important; }\n.shadow-lg { box-shadow: $box-shadow-lg !important; }\n.shadow-none { box-shadow: none !important; }\n","// stylelint-disable declaration-no-important\n\n// Width and height\n\n@each $prop, $abbrev in (width: w, height: h) {\n @each $size, $length in $sizes {\n .#{$abbrev}-#{$size} { #{$prop}: $length !important; }\n }\n}\n\n.mw-100 { max-width: 100% !important; }\n.mh-100 { max-height: 100% !important; }\n\n// Viewport additional helpers\n\n.min-vw-100 { min-width: 100vw !important; }\n.min-vh-100 { min-height: 100vh !important; }\n\n.vw-100 { width: 100vw !important; }\n.vh-100 { height: 100vh !important; }\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)\n @each $size, $length in $spacers {\n @if $size != 0 {\n .m#{$infix}-n#{$size} { margin: -$length !important; }\n .mt#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-top: -$length !important;\n }\n .mr#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-right: -$length !important;\n }\n .mb#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-bottom: -$length !important;\n }\n .ml#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-left: -$length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n // Just in case `pointer-events: none` is set on a parent\n pointer-events: auto;\n content: \"\";\n // IE10 bugfix, see https://stackoverflow.com/questions/16947967/ie10-hover-pseudo-class-doesnt-work-without-background-color\n background-color: rgba(0, 0, 0, 0);\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Text\n//\n\n.text-monospace { font-family: $font-family-monospace !important; }\n\n// Alignment\n\n.text-justify { text-align: justify !important; }\n.text-wrap { white-space: normal !important; }\n.text-nowrap { white-space: nowrap !important; }\n.text-truncate { @include text-truncate(); }\n\n// Responsive alignment\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .text#{$infix}-left { text-align: left !important; }\n .text#{$infix}-right { text-align: right !important; }\n .text#{$infix}-center { text-align: center !important; }\n }\n}\n\n// Transformation\n\n.text-lowercase { text-transform: lowercase !important; }\n.text-uppercase { text-transform: uppercase !important; }\n.text-capitalize { text-transform: capitalize !important; }\n\n// Weight and italics\n\n.font-weight-light { font-weight: $font-weight-light !important; }\n.font-weight-lighter { font-weight: $font-weight-lighter !important; }\n.font-weight-normal { font-weight: $font-weight-normal !important; }\n.font-weight-bold { font-weight: $font-weight-bold !important; }\n.font-weight-bolder { font-weight: $font-weight-bolder !important; }\n.font-italic { font-style: italic !important; }\n\n// Contextual colors\n\n.text-white { color: $white !important; }\n\n@each $color, $value in $theme-colors {\n @include text-emphasis-variant(\".text-#{$color}\", $value, true);\n}\n\n.text-body { color: $body-color !important; }\n.text-muted { color: $text-muted !important; }\n\n.text-black-50 { color: rgba($black, .5) !important; }\n.text-white-50 { color: rgba($white, .5) !important; }\n\n// Misc\n\n.text-hide {\n @include text-hide($ignore-warning: true);\n}\n\n.text-decoration-none { text-decoration: none !important; }\n\n.text-break {\n word-break: break-word !important; // Deprecated, but avoids issues with flex containers\n word-wrap: break-word !important; // Used instead of `overflow-wrap` for IE & Edge Legacy\n}\n\n// Reset\n\n.text-reset { color: inherit !important; }\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","// stylelint-disable declaration-no-important\n\n// Typography\n\n@mixin text-emphasis-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n color: $color !important;\n }\n @if $emphasized-link-hover-darken-percentage != 0 {\n a#{$parent} {\n @include hover-focus() {\n color: darken($color, $emphasized-link-hover-darken-percentage) !important;\n }\n }\n }\n @include deprecate(\"`text-emphasis-variant()`\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n","// CSS image replacement\n@mixin text-hide($ignore-warning: false) {\n // stylelint-disable-next-line font-family-no-missing-generic-family-keyword\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n\n @include deprecate(\"`text-hide()`\", \"v4.1.0\", \"v5\", $ignore-warning);\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Visibility utilities\n//\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type\n\n// Source: https://github.com/h5bp/main.css/blob/master/src/_print.css\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request:\n// https://www.phpied.com/delay-loading-your-print-css/\n// ==========================================================================\n\n@if $enable-print-styles {\n @media print {\n *,\n *::before,\n *::after {\n // Bootstrap specific; comment out `color` and `background`\n //color: $black !important; // Black prints faster\n text-shadow: none !important;\n //background: transparent !important;\n box-shadow: none !important;\n }\n\n a {\n &:not(.btn) {\n text-decoration: underline;\n }\n }\n\n // Bootstrap specific; comment the following selector out\n //a[href]::after {\n // content: \" (\" attr(href) \")\";\n //}\n\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n\n // Bootstrap specific; comment the following selector out\n //\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n //\n\n //a[href^=\"#\"]::after,\n //a[href^=\"javascript:\"]::after {\n // content: \"\";\n //}\n\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: $border-width solid $gray-500; // Bootstrap custom code; using `$border-width` instead of 1px\n page-break-inside: avoid;\n }\n\n //\n // Printing Tables:\n // https://web.archive.org/web/20180815150934/http://css-discuss.incutio.com/wiki/Printing_Tables\n //\n\n thead {\n display: table-header-group;\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Specify a size and min-width to make printing closer across browsers.\n // We don't set margin here because it breaks `size` in Chrome. We also\n // don't use `!important` on `size` as it breaks in Chrome.\n @page {\n size: $print-page-size;\n }\n body {\n min-width: $print-body-min-width !important;\n }\n .container {\n min-width: $print-body-min-width !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .badge {\n border: $border-width solid $black;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: $white !important;\n }\n }\n\n .table-bordered {\n th,\n td {\n border: 1px solid $gray-300 !important;\n }\n }\n\n .table-dark {\n color: inherit;\n\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $table-border-color;\n }\n }\n\n .table .thead-dark th {\n color: inherit;\n border-color: $table-border-color;\n }\n\n // Bootstrap specific changes end\n }\n}\n"]} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap.min.css b/vendor/twbs/bootstrap/dist/css/bootstrap.min.css index 286cde4c0..ef399d21c 100644 --- a/vendor/twbs/bootstrap/dist/css/bootstrap.min.css +++ b/vendor/twbs/bootstrap/dist/css/bootstrap.min.css @@ -1,7 +1,7 @@ /*! - * Bootstrap v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors - * Copyright 2011-2020 Twitter, Inc. + * Bootstrap v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;overflow:hidden;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50%/100% 100% no-repeat}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} /*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap.min.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap.min.css.map index 30a397279..78a0c1230 100644 --- a/vendor/twbs/bootstrap/dist/css/bootstrap.min.css.map +++ b/vendor/twbs/bootstrap/dist/css/bootstrap.min.css.map @@ -1 +1 @@ -{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/utilities/_interactions.scss","../../scss/utilities/_overflow.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_stretched-link.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/_print.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"utilities\";\n@import \"print\";\n","// Do not forget to update getting-started/theming.md!\n:root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `<th>` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n // making it impossible to interact with the content\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-wrap: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n -ms-flex-order: -1;\n order: -1;\n}\n\n.order-last {\n -ms-flex-order: 13;\n order: 13;\n}\n\n.order-0 {\n -ms-flex-order: 0;\n order: 0;\n}\n\n.order-1 {\n -ms-flex-order: 1;\n order: 1;\n}\n\n.order-2 {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.order-3 {\n -ms-flex-order: 3;\n order: 3;\n}\n\n.order-4 {\n -ms-flex-order: 4;\n order: 4;\n}\n\n.order-5 {\n -ms-flex-order: 5;\n order: 5;\n}\n\n.order-6 {\n -ms-flex-order: 6;\n order: 6;\n}\n\n.order-7 {\n -ms-flex-order: 7;\n order: 7;\n}\n\n.order-8 {\n -ms-flex-order: 8;\n order: 8;\n}\n\n.order-9 {\n -ms-flex-order: 9;\n order: 9;\n}\n\n.order-10 {\n -ms-flex-order: 10;\n order: 10;\n}\n\n.order-11 {\n -ms-flex-order: 11;\n order: 11;\n}\n\n.order-12 {\n -ms-flex-order: 12;\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-sm-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-sm-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-sm-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-sm-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-sm-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-sm-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-sm-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-sm-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-sm-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-sm-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-sm-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-sm-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-sm-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-sm-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-md-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-md-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-md-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-md-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-md-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-md-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-md-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-md-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-md-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-md-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-md-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-md-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-md-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-md-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-lg-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-lg-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-lg-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-lg-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-lg-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-lg-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-lg-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-lg-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-lg-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-lg-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-lg-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-lg-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-lg-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-lg-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-xl-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-xl-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-xl-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-xl-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-xl-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-xl-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-xl-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-xl-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-xl-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-xl-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-xl-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-xl-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-xl-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-xl-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::-webkit-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\ninput[type=\"date\"].form-control,\ninput[type=\"time\"].form-control,\ninput[type=\"datetime-local\"].form-control,\ninput[type=\"month\"].form-control {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n font-size: 1rem;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input[disabled] ~ .form-check-label,\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-align: center;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n -ms-flex-align: center;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\n.btn:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: -ms-inline-flexbox;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: stretch;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: -ms-flexbox;\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n z-index: 1;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n -webkit-print-color-adjust: exact;\n color-adjust: exact;\n}\n\n.custom-control-inline {\n display: -ms-inline-flexbox;\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1;\n width: 1rem;\n height: 1.25rem;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n -webkit-transform: translateX(0.75rem);\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input[disabled] ~ .custom-file-label,\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: 1.4rem;\n padding: 0;\n background-color: transparent;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n -webkit-transition: none;\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -moz-appearance: none;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n -moz-transition: none;\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n -ms-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n -ms-transition: none;\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: justify;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar .container,\n.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: justify;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n -ms-flex-preferred-size: 100%;\n flex-basis: 100%;\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n min-height: 1px;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n -ms-flex: 1 0 0%;\n flex: 1 0 0%;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n }\n .card-group > .card {\n -ms-flex: 1 0 0%;\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n -webkit-column-count: 3;\n -moz-column-count: 3;\n column-count: 3;\n -webkit-column-gap: 1.25rem;\n -moz-column-gap: 1.25rem;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion {\n overflow-anchor: none;\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:last-of-type) {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card > .card-header {\n border-radius: 0;\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item {\n display: -ms-flexbox;\n display: flex;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: -ms-flexbox;\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 3;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 3;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: -ms-flexbox;\n display: flex;\n height: 1rem;\n overflow: hidden;\n line-height: 0;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n overflow: hidden;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n -webkit-animation: progress-bar-stripes 1s linear infinite;\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n -webkit-animation: none;\n animation: none;\n }\n}\n\n.media {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: start;\n align-items: flex-start;\n}\n\n.media-body {\n -ms-flex: 1;\n flex: 1;\n}\n\n.list-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: 0.25rem;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n margin-top: -1px;\n border-top-width: 1px;\n}\n\n.list-group-horizontal {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n.list-group-flush {\n border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n -ms-flex-preferred-size: 350px;\n flex-basis: 350px;\n max-width: 350px;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: -webkit-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n -webkit-transform: translate(0, -50px);\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n -webkit-transform: none;\n transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n -webkit-transform: scale(1.02);\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n display: -ms-flexbox;\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n height: -webkit-min-content;\n height: -moz-min-content;\n height: min-content;\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-pack: justify;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: end;\n justify-content: flex-end;\n padding: 0.75rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: calc(0.3rem - 1px);\n border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n margin: 0.25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n height: -webkit-min-content;\n height: -moz-min-content;\n height: min-content;\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n -ms-touch-action: pan-y;\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n transition: -webkit-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n -webkit-transform: translateX(100%);\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n -webkit-transform: translateX(-100%);\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n -webkit-transform: none;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n -ms-flex: 0 1 auto;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@-webkit-keyframes spinner-border {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes spinner-border {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n -webkit-animation: spinner-border .75s linear infinite;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n@keyframes spinner-grow {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n -webkit-animation: spinner-grow .75s linear infinite;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n}\n\n.d-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-md-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-print-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n}\n\n.flex-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n}\n\n.justify-content-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n}\n\n.align-items-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n}\n\n.align-items-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n}\n\n.align-items-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n}\n\n.align-items-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n}\n\n.align-content-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n}\n\n.align-content-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n}\n\n.align-content-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n}\n\n.align-content-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n}\n\n.align-content-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n}\n\n.align-self-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n}\n\n.align-self-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n}\n\n.align-self-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n}\n\n.align-self-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n}\n\n.align-self-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-sm-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-sm-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-sm-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-sm-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-sm-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-sm-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-sm-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-sm-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-md-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-md-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-md-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-md-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-md-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-md-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-md-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-md-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-md-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-md-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-md-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-md-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-md-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-md-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-md-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-md-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-lg-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-lg-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-lg-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-lg-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-lg-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-lg-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-lg-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-lg-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-xl-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-xl-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-xl-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-xl-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-xl-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-xl-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-xl-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-xl-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n -moz-user-select: all !important;\n -ms-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n -moz-user-select: auto !important;\n -ms-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n -ms-user-select: none !important;\n user-select: none !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports ((position: -webkit-sticky) or (position: sticky)) {\n .sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n word-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","/*!\n * Bootstrap v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-wrap: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\ninput[type=\"date\"].form-control,\ninput[type=\"time\"].form-control,\ninput[type=\"datetime-local\"].form-control,\ninput[type=\"month\"].form-control {\n appearance: none;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n font-size: 1rem;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input[disabled] ~ .form-check-label,\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\n.btn:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n z-index: 1;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n color-adjust: exact;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1;\n width: 1rem;\n height: 1.25rem;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input[disabled] ~ .custom-file-label,\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: 1.4rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar .container,\n.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n min-height: 1px;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n flex-shrink: 0;\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n display: flex;\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n flex: 1 0 0%;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion {\n overflow-anchor: none;\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:last-of-type) {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card > .card-header {\n border-radius: 0;\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item {\n display: flex;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 3;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 3;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n line-height: 0;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: 0.25rem;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n margin-top: -1px;\n border-top-width: 1px;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n.list-group-flush {\n border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n flex-basis: 350px;\n max-width: 350px;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n height: min-content;\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: 0.75rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: calc(0.3rem - 1px);\n border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n margin: 0.25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n height: min-content;\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n word-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { @include font-size($h1-font-size); }\nh2, .h2 { @include font-size($h2-font-size); }\nh3, .h3 { @include font-size($h3-font-size); }\nh4, .h4 { @include font-size($h4-font-size); }\nh5, .h5 { @include font-size($h5-font-size); }\nh6, .h6 { @include font-size($h6-font-size); }\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n @include font-size($display1-size);\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n @include font-size($display2-size);\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n @include font-size($display3-size);\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n @include font-size($display4-size);\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n @include font-size($small-font-size);\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size(90%);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n @include font-size($blockquote-font-size);\n}\n\n.blockquote-footer {\n display: block;\n @include font-size($blockquote-small-font-size);\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled() {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer / 2;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid() {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n @include deprecate(\"`img-retina()`\", \"v4.3.0\", \"v5\");\n}\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-right-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-left-radius($radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n","// Inline code\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n @include font-size(100%);\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n @include deprecate(\"The `make-container-max-widths` mixin\", \"v4.5.2\", \"v5\");\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @if $columns > 0 {\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n }\n\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n @if $columns > 0 {\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n margin-bottom: $spacer;\n color: $table-color;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: 2 * $table-border-width;\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover() {\n color: $table-hover-color;\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover() {\n color: $table-dark-hover-color;\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background, $border: null) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n\n @if $border != null {\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $border;\n }\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover() {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n height: $input-height;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on `<select>`s in IE10+.\n &::-ms-expand {\n background-color: transparent;\n border: 0;\n }\n\n // Remove select outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $input-color;\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n @include form-control-focus($ignore-warning: true);\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled,\n &[readonly] {\n background-color: $input-disabled-bg;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n &.form-control {\n appearance: none; // Fix appearance for date inputs in Safari\n }\n}\n\nselect.form-control {\n &:focus::-ms-value {\n // Suppress the nested default white text on blue background highlight given to\n // the selected option text when the (still closed) <select> receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<label>/<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n line-height: $input-line-height;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n line-height: $input-line-height-lg;\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n line-height: $input-line-height-sm;\n}\n\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n @include font-size($input-font-size);\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n line-height: $input-line-height-sm;\n @include border-radius($input-border-radius-sm);\n}\n\n.form-control-lg {\n height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n line-height: $input-line-height-lg;\n @include border-radius($input-border-radius-lg);\n}\n\n// stylelint-disable-next-line no-duplicate-selectors\nselect.form-control {\n &[size],\n &[multiple] {\n height: auto;\n }\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: $form-group-margin-bottom;\n}\n\n.form-text {\n display: block;\n margin-top: $form-text-margin-top;\n}\n\n\n// Form grid\n//\n// Special replacement for our grid system's `.row` for tighter form layouts.\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$form-grid-gutter-width / 2;\n margin-left: -$form-grid-gutter-width / 2;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: $form-grid-gutter-width / 2;\n padding-left: $form-grid-gutter-width / 2;\n }\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.form-check {\n position: relative;\n display: block;\n padding-left: $form-check-input-gutter;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: $form-check-input-margin-y;\n margin-left: -$form-check-input-gutter;\n\n // Use [disabled] and :disabled for workaround https://github.com/twbs/bootstrap/issues/28247\n &[disabled] ~ .form-check-label,\n &:disabled ~ .form-check-label {\n color: $text-muted;\n }\n}\n\n.form-check-label {\n margin-bottom: 0; // Override default `<label>` bottom margin\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0; // Override base .form-check\n margin-right: $form-check-inline-margin-x;\n\n // Undo .form-check-input defaults and add some `margin-right`.\n .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: $form-check-inline-input-margin-x;\n margin-left: 0;\n }\n}\n\n\n// Form validation\n//\n// Provide feedback to users when form field values are valid or invalid. Works\n// primarily for client-side validation via scoped `:invalid` and `:valid`\n// pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for\n// server side validation.\n\n@each $state, $data in $form-validation-states {\n @include form-validation-state($state, map-get($data, color), map-get($data, icon));\n}\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center; // Prevent shorter elements from growing to same height as others (e.g., small buttons growing to normal sized button height)\n\n // Because we use flex, the initial sizing of checkboxes is collapsed and\n // doesn't occupy the full-width (which is what we want for xs grid tier),\n // so we force that here.\n .form-check {\n width: 100%;\n }\n\n // Kick in the inline\n @include media-breakpoint-up(sm) {\n label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n\n // Inline-block all the things for \"inline\"\n .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n\n // Allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n // Make static controls behave like regular ones\n .form-control-plaintext {\n display: inline-block;\n }\n\n .input-group,\n .custom-select {\n width: auto;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match.\n .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: $form-check-input-margin-x;\n margin-left: 0;\n }\n\n .custom-control {\n align-items: center;\n justify-content: center;\n }\n .custom-control-label {\n margin-bottom: 0;\n }\n }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-prefers-reduced-motion-media-query and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `$input-focus-border-color` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n@mixin form-control-focus($ignore-warning: false) {\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n @include deprecate(\"The `form-control-focus()` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n\n// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state($state, $color, $icon) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: color-yiq($color);\n background-color: rgba($color, $form-feedback-tooltip-opacity);\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .custom-select {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $custom-select-feedback-icon-padding-right;\n background: $custom-select-background, escape-svg($icon) $custom-select-bg no-repeat $custom-select-feedback-icon-position / $custom-select-feedback-icon-size;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n ~ .form-check-label {\n color: $color;\n }\n\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n }\n\n .custom-control-input {\n @include form-validation-state-selector($state) {\n ~ .custom-control-label {\n color: $color;\n\n &::before {\n border-color: $color;\n }\n }\n\n &:checked {\n ~ .custom-control-label::before {\n border-color: lighten($color, 10%);\n @include gradient-bg(lighten($color, 10%));\n }\n }\n\n &:focus {\n ~ .custom-control-label::before {\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n\n &:not(:checked) ~ .custom-control-label::before {\n border-color: $color;\n }\n }\n }\n }\n\n // custom file\n .custom-file-input {\n @include form-validation-state-selector($state) {\n ~ .custom-file-label {\n border-color: $color;\n }\n\n &:focus {\n ~ .custom-file-label {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n }\n}\n","// Gradients\n\n@mixin gradient-bg($color) {\n @if $enable-gradients {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x;\n } @else {\n background-color: $color;\n }\n}\n\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n background-repeat: repeat-x;\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n background-repeat: repeat-x;\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n background-repeat: repeat-x;\n}\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Base styles\n//\n\n.btn {\n display: inline-block;\n font-family: $btn-font-family;\n font-weight: $btn-font-weight;\n color: $body-color;\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n user-select: none;\n background-color: transparent;\n border: $btn-border-width solid transparent;\n @include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-line-height, $btn-border-radius);\n @include transition($btn-transition);\n\n @include hover() {\n color: $body-color;\n text-decoration: none;\n }\n\n &:focus,\n &.focus {\n outline: 0;\n box-shadow: $btn-focus-box-shadow;\n }\n\n // Disabled comes first so active can properly restyle\n &.disabled,\n &:disabled {\n opacity: $btn-disabled-opacity;\n @include box-shadow(none);\n }\n\n &:not(:disabled):not(.disabled) {\n cursor: if($enable-pointer-cursor-for-buttons, pointer, null);\n\n &:active,\n &.active {\n @include box-shadow($btn-active-box-shadow);\n\n &:focus {\n @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);\n }\n }\n }\n}\n\n// Future-proof disabling of clicks on `<a>` elements\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n\n//\n// Alternate buttons\n//\n\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @include button-variant($value, $value);\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n font-weight: $font-weight-normal;\n color: $link-color;\n text-decoration: $link-decoration;\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n\n &:focus,\n &.focus {\n text-decoration: $link-hover-decoration;\n }\n\n &:disabled,\n &.disabled {\n color: $btn-link-disabled-color;\n pointer-events: none;\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-line-height-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-line-height-sm, $btn-border-radius-sm);\n}\n\n\n//\n// Block button\n//\n\n.btn-block {\n display: block;\n width: 100%;\n\n // Vertically space out multiple block buttons\n + .btn-block {\n margin-top: $btn-block-spacing-y;\n }\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n@mixin button-variant($background, $border, $hover-background: darken($background, 7.5%), $hover-border: darken($border, 10%), $active-background: darken($background, 10%), $active-border: darken($border, 12.5%)) {\n color: color-yiq($background);\n @include gradient-bg($background);\n border-color: $border;\n @include box-shadow($btn-box-shadow);\n\n @include hover() {\n color: color-yiq($hover-background);\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n }\n\n &:focus,\n &.focus {\n color: color-yiq($hover-background);\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n @if $enable-shadows {\n @include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);\n }\n }\n\n // Disabled comes first so active can properly restyle\n &.disabled,\n &:disabled {\n color: color-yiq($background);\n background-color: $background;\n border-color: $border;\n // Remove CSS gradients if they're enabled\n @if $enable-gradients {\n background-image: none;\n }\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n @if $enable-gradients {\n background-image: none; // Remove the gradient for the pressed/active state\n }\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows and $btn-active-box-shadow != none {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);\n }\n }\n }\n}\n\n@mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) {\n color: $color;\n border-color: $color;\n\n @include hover() {\n color: $color-hover;\n background-color: $active-background;\n border-color: $active-border;\n }\n\n &:focus,\n &.focus {\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n\n &.disabled,\n &:disabled {\n color: $color;\n background-color: transparent;\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows and $btn-active-box-shadow != none {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n }\n }\n}\n\n// Button sizes\n@mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n line-height: $line-height;\n // Manually declare to provide an override to the browser default\n @include border-radius($border-radius, 0);\n}\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n}\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: $zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: $dropdown-min-width;\n padding: $dropdown-padding-y $dropdown-padding-x;\n margin: $dropdown-spacer 0 0; // override default ul\n @include font-size($dropdown-font-size);\n color: $dropdown-color;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: $dropdown-bg;\n background-clip: padding-box;\n border: $dropdown-border-width solid $dropdown-border-color;\n @include border-radius($dropdown-border-radius);\n @include box-shadow($dropdown-box-shadow);\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-left {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu#{$infix}-right {\n right: 0;\n left: auto;\n }\n }\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropright {\n .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(right);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropleft {\n .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(left);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n// When enabled Popper.js, reset basic dropdown position\n// stylelint-disable-next-line no-duplicate-selectors\n.dropdown-menu {\n &[x-placement^=\"top\"],\n &[x-placement^=\"right\"],\n &[x-placement^=\"bottom\"],\n &[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n }\n}\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n @include nav-divider($dropdown-divider-bg, $dropdown-divider-margin-y, true);\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n clear: both;\n font-weight: $font-weight-normal;\n color: $dropdown-link-color;\n text-align: inherit; // For `<button>`s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n\n // Prevent dropdown overflow if there's no padding\n // See https://github.com/twbs/bootstrap/pull/27703\n @if $dropdown-padding-y == 0 {\n &:first-child {\n @include border-top-radius($dropdown-inner-border-radius);\n }\n\n &:last-child {\n @include border-bottom-radius($dropdown-inner-border-radius);\n }\n }\n\n @include hover-focus() {\n color: $dropdown-link-hover-color;\n text-decoration: none;\n @include gradient-bg($dropdown-link-hover-bg);\n }\n\n &.active,\n &:active {\n color: $dropdown-link-active-color;\n text-decoration: none;\n @include gradient-bg($dropdown-link-active-bg);\n }\n\n &.disabled,\n &:disabled {\n color: $dropdown-link-disabled-color;\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n @if $enable-gradients {\n background-image: none;\n }\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: $dropdown-header-padding;\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: $dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n color: $dropdown-link-color;\n}\n","@mixin caret-down() {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up() {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-right() {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-left() {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down();\n } @else if $direction == up {\n @include caret-up();\n } @else if $direction == right {\n @include caret-right();\n }\n }\n\n @if $direction == left {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @include caret-left();\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n@mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y, $ignore-warning: false) {\n height: 0;\n margin: $margin-y 0;\n overflow: hidden;\n border-top: 1px solid $color;\n @include deprecate(\"The `nav-divider()` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n @include hover() {\n z-index: 1;\n }\n &:focus,\n &:active,\n &.active {\n z-index: 1;\n }\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n // Prevent double borders when buttons are next to each other\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-left: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-right-radius(0);\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) > .btn {\n @include border-left-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropright &::after {\n margin-left: 0;\n }\n\n .dropleft &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n.btn-group-toggle {\n > .btn,\n > .btn-group > .btn {\n margin-bottom: 0; // Override default `<label>` value\n\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-control-plaintext,\n > .custom-select,\n > .custom-file {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n margin-bottom: 0;\n\n + .form-control,\n + .custom-select,\n + .custom-file {\n margin-left: -$input-border-width;\n }\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .custom-select:focus,\n > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n }\n\n // Bring the custom file input above the label\n > .custom-file .custom-file-input:focus {\n z-index: 4;\n }\n\n > .form-control,\n > .custom-select {\n &:not(:last-child) { @include border-right-radius(0); }\n &:not(:first-child) { @include border-left-radius(0); }\n }\n\n // Custom file inputs have more complex markup, thus requiring different\n // border-radius overrides.\n > .custom-file {\n display: flex;\n align-items: center;\n\n &:not(:last-child) .custom-file-label,\n &:not(:last-child) .custom-file-label::after { @include border-right-radius(0); }\n &:not(:first-child) .custom-file-label { @include border-left-radius(0); }\n }\n}\n\n\n// Prepend and append\n//\n// While it requires one extra layer of HTML for each, dedicated prepend and\n// append elements allow us to 1) be less clever, 2) simplify our selectors, and\n// 3) support HTML5 form validation.\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 3;\n }\n }\n\n .btn + .btn,\n .btn + .input-group-text,\n .input-group-text + .input-group-text,\n .input-group-text + .btn {\n margin-left: -$input-border-width;\n }\n}\n\n.input-group-prepend { margin-right: -$input-border-width; }\n.input-group-append { margin-left: -$input-border-width; }\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-padding-y $input-padding-x;\n margin-bottom: 0; // Allow use of <label> elements by overriding our default margin-bottom\n @include font-size($input-font-size); // Match inputs\n font-weight: $font-weight-normal;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: $input-height-lg;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n line-height: $input-line-height-lg;\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: $input-height-sm;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n line-height: $input-line-height-sm;\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: $custom-select-padding-x + $custom-select-indicator-padding;\n}\n\n\n// Prepend and append rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n @include border-right-radius(0);\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n @include border-left-radius(0);\n}\n","// Embedded icons from Open Iconic.\n// Released under MIT and copyright 2014 Waybury.\n// https://useiconic.com/open\n\n\n// Checkboxes and radios\n//\n// Base class takes care of all the key behavioral aspects.\n\n.custom-control {\n position: relative;\n z-index: 1;\n display: block;\n min-height: $font-size-base * $line-height-base;\n padding-left: $custom-control-gutter + $custom-control-indicator-size;\n color-adjust: exact; // Keep themed appearance for print\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: $custom-control-spacer-x;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1; // Put the input behind the label so it doesn't overlay text\n width: $custom-control-indicator-size;\n height: ($font-size-base * $line-height-base + $custom-control-indicator-size) / 2;\n opacity: 0;\n\n &:checked ~ .custom-control-label::before {\n color: $custom-control-indicator-checked-color;\n border-color: $custom-control-indicator-checked-border-color;\n @include gradient-bg($custom-control-indicator-checked-bg);\n @include box-shadow($custom-control-indicator-checked-box-shadow);\n }\n\n &:focus ~ .custom-control-label::before {\n // the mixin is not used here to make sure there is feedback\n @if $enable-shadows {\n box-shadow: $input-box-shadow, $custom-control-indicator-focus-box-shadow;\n } @else {\n box-shadow: $custom-control-indicator-focus-box-shadow;\n }\n }\n\n &:focus:not(:checked) ~ .custom-control-label::before {\n border-color: $custom-control-indicator-focus-border-color;\n }\n\n &:not(:disabled):active ~ .custom-control-label::before {\n color: $custom-control-indicator-active-color;\n background-color: $custom-control-indicator-active-bg;\n border-color: $custom-control-indicator-active-border-color;\n @include box-shadow($custom-control-indicator-active-box-shadow);\n }\n\n // Use [disabled] and :disabled to work around https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .custom-control-label {\n color: $custom-control-label-disabled-color;\n\n &::before {\n background-color: $custom-control-indicator-disabled-bg;\n }\n }\n }\n}\n\n// Custom control indicators\n//\n// Build the custom controls out of pseudo-elements.\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n color: $custom-control-label-color;\n vertical-align: top;\n cursor: $custom-control-cursor;\n\n // Background-color and (when enabled) gradient\n &::before {\n position: absolute;\n top: ($font-size-base * $line-height-base - $custom-control-indicator-size) / 2;\n left: -($custom-control-gutter + $custom-control-indicator-size);\n display: block;\n width: $custom-control-indicator-size;\n height: $custom-control-indicator-size;\n pointer-events: none;\n content: \"\";\n background-color: $custom-control-indicator-bg;\n border: $custom-control-indicator-border-color solid $custom-control-indicator-border-width;\n @include box-shadow($custom-control-indicator-box-shadow);\n }\n\n // Foreground (icon)\n &::after {\n position: absolute;\n top: ($font-size-base * $line-height-base - $custom-control-indicator-size) / 2;\n left: -($custom-control-gutter + $custom-control-indicator-size);\n display: block;\n width: $custom-control-indicator-size;\n height: $custom-control-indicator-size;\n content: \"\";\n background: no-repeat 50% / #{$custom-control-indicator-bg-size};\n }\n}\n\n\n// Checkboxes\n//\n// Tweak just a few things for checkboxes.\n\n.custom-checkbox {\n .custom-control-label::before {\n @include border-radius($custom-checkbox-indicator-border-radius);\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::after {\n background-image: escape-svg($custom-checkbox-indicator-icon-checked);\n }\n }\n\n .custom-control-input:indeterminate ~ .custom-control-label {\n &::before {\n border-color: $custom-checkbox-indicator-indeterminate-border-color;\n @include gradient-bg($custom-checkbox-indicator-indeterminate-bg);\n @include box-shadow($custom-checkbox-indicator-indeterminate-box-shadow);\n }\n &::after {\n background-image: escape-svg($custom-checkbox-indicator-icon-indeterminate);\n }\n }\n\n .custom-control-input:disabled {\n &:checked ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n &:indeterminate ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n }\n}\n\n// Radios\n//\n// Tweak just a few things for radios.\n\n.custom-radio {\n .custom-control-label::before {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $custom-radio-indicator-border-radius;\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::after {\n background-image: escape-svg($custom-radio-indicator-icon-checked);\n }\n }\n\n .custom-control-input:disabled {\n &:checked ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n }\n}\n\n\n// switches\n//\n// Tweak a few things for switches\n\n.custom-switch {\n padding-left: $custom-switch-width + $custom-control-gutter;\n\n .custom-control-label {\n &::before {\n left: -($custom-switch-width + $custom-control-gutter);\n width: $custom-switch-width;\n pointer-events: all;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $custom-switch-indicator-border-radius;\n }\n\n &::after {\n top: add(($font-size-base * $line-height-base - $custom-control-indicator-size) / 2, $custom-control-indicator-border-width * 2);\n left: add(-($custom-switch-width + $custom-control-gutter), $custom-control-indicator-border-width * 2);\n width: $custom-switch-indicator-size;\n height: $custom-switch-indicator-size;\n background-color: $custom-control-indicator-border-color;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $custom-switch-indicator-border-radius;\n @include transition(transform .15s ease-in-out, $custom-forms-transition);\n }\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::after {\n background-color: $custom-control-indicator-bg;\n transform: translateX($custom-switch-width - $custom-control-indicator-size);\n }\n }\n\n .custom-control-input:disabled {\n &:checked ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n }\n}\n\n\n// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n//\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: $custom-select-height;\n padding: $custom-select-padding-y ($custom-select-padding-x + $custom-select-indicator-padding) $custom-select-padding-y $custom-select-padding-x;\n font-family: $custom-select-font-family;\n @include font-size($custom-select-font-size);\n font-weight: $custom-select-font-weight;\n line-height: $custom-select-line-height;\n color: $custom-select-color;\n vertical-align: middle;\n background: $custom-select-bg $custom-select-background;\n border: $custom-select-border-width solid $custom-select-border-color;\n @include border-radius($custom-select-border-radius, 0);\n @include box-shadow($custom-select-box-shadow);\n appearance: none;\n\n &:focus {\n border-color: $custom-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($custom-select-box-shadow, $custom-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $custom-select-focus-box-shadow;\n }\n\n &::-ms-value {\n // For visual consistency with other platforms/browsers,\n // suppress the default white text on blue background highlight given to\n // the selected option text when the (still closed) <select> receives focus\n // in IE and (under certain conditions) Edge.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: $custom-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $custom-select-disabled-color;\n background-color: $custom-select-disabled-bg;\n }\n\n // Hides the default caret in IE11\n &::-ms-expand {\n display: none;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $custom-select-color;\n }\n}\n\n.custom-select-sm {\n height: $custom-select-height-sm;\n padding-top: $custom-select-padding-y-sm;\n padding-bottom: $custom-select-padding-y-sm;\n padding-left: $custom-select-padding-x-sm;\n @include font-size($custom-select-font-size-sm);\n}\n\n.custom-select-lg {\n height: $custom-select-height-lg;\n padding-top: $custom-select-padding-y-lg;\n padding-bottom: $custom-select-padding-y-lg;\n padding-left: $custom-select-padding-x-lg;\n @include font-size($custom-select-font-size-lg);\n}\n\n\n// File\n//\n// Custom file input.\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: $custom-file-height;\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: $custom-file-height;\n margin: 0;\n opacity: 0;\n\n &:focus ~ .custom-file-label {\n border-color: $custom-file-focus-border-color;\n box-shadow: $custom-file-focus-box-shadow;\n }\n\n // Use [disabled] and :disabled to work around https://github.com/twbs/bootstrap/issues/28247\n &[disabled] ~ .custom-file-label,\n &:disabled ~ .custom-file-label {\n background-color: $custom-file-disabled-bg;\n }\n\n @each $lang, $value in $custom-file-text {\n &:lang(#{$lang}) ~ .custom-file-label::after {\n content: $value;\n }\n }\n\n ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n }\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: $custom-file-height;\n padding: $custom-file-padding-y $custom-file-padding-x;\n font-family: $custom-file-font-family;\n font-weight: $custom-file-font-weight;\n line-height: $custom-file-line-height;\n color: $custom-file-color;\n background-color: $custom-file-bg;\n border: $custom-file-border-width solid $custom-file-border-color;\n @include border-radius($custom-file-border-radius);\n @include box-shadow($custom-file-box-shadow);\n\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: $custom-file-height-inner;\n padding: $custom-file-padding-y $custom-file-padding-x;\n line-height: $custom-file-line-height;\n color: $custom-file-button-color;\n content: \"Browse\";\n @include gradient-bg($custom-file-button-bg);\n border-left: inherit;\n @include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0);\n }\n}\n\n// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.custom-range {\n width: 100%;\n height: add($custom-range-thumb-height, $custom-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: none;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }\n &::-ms-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n margin-top: ($custom-range-track-height - $custom-range-thumb-height) / 2; // Webkit specific\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n @include transition($custom-forms-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent; // Why?\n cursor: $custom-range-track-cursor;\n background-color: $custom-range-track-bg;\n border-color: transparent;\n @include border-radius($custom-range-track-border-radius);\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n @include transition($custom-forms-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent;\n cursor: $custom-range-track-cursor;\n background-color: $custom-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($custom-range-track-border-radius);\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-ms-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n margin-top: 0; // Edge specific\n margin-right: $custom-range-thumb-focus-box-shadow-width; // Workaround that overflowed box-shadow is hidden.\n margin-left: $custom-range-thumb-focus-box-shadow-width; // Workaround that overflowed box-shadow is hidden.\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n @include transition($custom-forms-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-ms-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent;\n cursor: $custom-range-track-cursor;\n background-color: transparent;\n border-color: transparent;\n border-width: $custom-range-thumb-height / 2;\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-ms-fill-lower {\n background-color: $custom-range-track-bg;\n @include border-radius($custom-range-track-border-radius);\n }\n\n &::-ms-fill-upper {\n margin-right: 15px; // arbitrary?\n background-color: $custom-range-track-bg;\n @include border-radius($custom-range-track-border-radius);\n }\n\n &:disabled {\n &::-webkit-slider-thumb {\n background-color: $custom-range-thumb-disabled-bg;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: default;\n }\n\n &::-moz-range-thumb {\n background-color: $custom-range-thumb-disabled-bg;\n }\n\n &::-moz-range-track {\n cursor: default;\n }\n\n &::-ms-thumb {\n background-color: $custom-range-thumb-disabled-bg;\n }\n }\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n @include transition($custom-forms-transition);\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: $nav-link-padding-y $nav-link-padding-x;\n text-decoration: if($link-decoration == none, null, none);\n\n @include hover-focus() {\n text-decoration: none;\n }\n\n // Disabled state lightens text\n &.disabled {\n color: $nav-link-disabled-color;\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;\n\n .nav-item {\n margin-bottom: -$nav-tabs-border-width;\n }\n\n .nav-link {\n border: $nav-tabs-border-width solid transparent;\n @include border-top-radius($nav-tabs-border-radius);\n\n @include hover-focus() {\n border-color: $nav-tabs-link-hover-border-color;\n }\n\n &.disabled {\n color: $nav-link-disabled-color;\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: $nav-tabs-link-active-color;\n background-color: $nav-tabs-link-active-bg;\n border-color: $nav-tabs-link-active-border-color;\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: -$nav-tabs-border-width;\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n .nav-link {\n @include border-radius($nav-pills-border-radius);\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: $nav-pills-link-active-color;\n background-color: $nav-pills-link-active-bg;\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Contents\n//\n// Navbar\n// Navbar brand\n// Navbar nav\n// Navbar text\n// Navbar divider\n// Responsive navbar\n// Navbar position\n// Navbar themes\n\n\n// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: $navbar-padding-y $navbar-padding-x;\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n %container-flex-properties {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n }\n\n .container,\n .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n display: inline-block;\n padding-top: $navbar-brand-padding-y;\n padding-bottom: $navbar-brand-padding-y;\n margin-right: $navbar-padding-x;\n @include font-size($navbar-brand-font-size);\n line-height: inherit;\n white-space: nowrap;\n\n @include hover-focus() {\n text-decoration: none;\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-link {\n padding-right: 0;\n padding-left: 0;\n }\n\n .dropdown-menu {\n position: static;\n float: none;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n display: inline-block;\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: $navbar-toggler-padding-y $navbar-toggler-padding-x;\n @include font-size($navbar-toggler-font-size);\n line-height: 1;\n background-color: transparent; // remove default button style\n border: $border-width solid transparent; // remove default button style\n @include border-radius($navbar-toggler-border-radius);\n\n @include hover-focus() {\n text-decoration: none;\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n %container-navbar-expand-#{$breakpoint} {\n padding-right: 0;\n padding-left: 0;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-navbar-expand-#{$breakpoint};\n }\n\n @each $size, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($size, $container-max-widths)} {\n @extend %container-navbar-expand-#{$breakpoint};\n }\n }\n }\n\n @include media-breakpoint-up($next) {\n flex-flow: row nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: $navbar-nav-link-padding-x;\n padding-left: $navbar-nav-link-padding-x;\n }\n }\n\n // For nesting containers, have to redeclare for alignment purposes\n %container-nesting-#{$breakpoint} {\n flex-wrap: nowrap;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-nesting-#{$breakpoint};\n }\n\n @each $size, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($size, $container-max-widths)} {\n @extend %container-nesting-#{$breakpoint};\n }\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n\n // Changes flex-bases to auto because of an IE10 bug\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n }\n }\n }\n}\n\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n// Dark links against a light background\n.navbar-light {\n .navbar-brand {\n color: $navbar-light-brand-color;\n\n @include hover-focus() {\n color: $navbar-light-brand-hover-color;\n }\n }\n\n .navbar-nav {\n .nav-link {\n color: $navbar-light-color;\n\n @include hover-focus() {\n color: $navbar-light-hover-color;\n }\n\n &.disabled {\n color: $navbar-light-disabled-color;\n }\n }\n\n .show > .nav-link,\n .active > .nav-link,\n .nav-link.show,\n .nav-link.active {\n color: $navbar-light-active-color;\n }\n }\n\n .navbar-toggler {\n color: $navbar-light-color;\n border-color: $navbar-light-toggler-border-color;\n }\n\n .navbar-toggler-icon {\n background-image: escape-svg($navbar-light-toggler-icon-bg);\n }\n\n .navbar-text {\n color: $navbar-light-color;\n a {\n color: $navbar-light-active-color;\n\n @include hover-focus() {\n color: $navbar-light-active-color;\n }\n }\n }\n}\n\n// White links against a dark background\n.navbar-dark {\n .navbar-brand {\n color: $navbar-dark-brand-color;\n\n @include hover-focus() {\n color: $navbar-dark-brand-hover-color;\n }\n }\n\n .navbar-nav {\n .nav-link {\n color: $navbar-dark-color;\n\n @include hover-focus() {\n color: $navbar-dark-hover-color;\n }\n\n &.disabled {\n color: $navbar-dark-disabled-color;\n }\n }\n\n .show > .nav-link,\n .active > .nav-link,\n .nav-link.show,\n .nav-link.active {\n color: $navbar-dark-active-color;\n }\n }\n\n .navbar-toggler {\n color: $navbar-dark-color;\n border-color: $navbar-dark-toggler-border-color;\n }\n\n .navbar-toggler-icon {\n background-image: escape-svg($navbar-dark-toggler-icon-bg);\n }\n\n .navbar-text {\n color: $navbar-dark-color;\n a {\n color: $navbar-dark-active-color;\n\n @include hover-focus() {\n color: $navbar-dark-active-color;\n }\n }\n }\n}\n","//\n// Base styles\n//\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: $card-height;\n word-wrap: break-word;\n background-color: $card-bg;\n background-clip: border-box;\n border: $card-border-width solid $card-border-color;\n @include border-radius($card-border-radius);\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius($card-inner-border-radius);\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius($card-inner-border-radius);\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n // Workaround for the image size bug in IE\n // See: https://github.com/twbs/bootstrap/pull/28855\n min-height: 1px;\n padding: $card-spacer-x;\n color: $card-color;\n}\n\n.card-title {\n margin-bottom: $card-spacer-y;\n}\n\n.card-subtitle {\n margin-top: -$card-spacer-y / 2;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n @include hover() {\n text-decoration: none;\n }\n\n + .card-link {\n margin-left: $card-spacer-x;\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: $card-spacer-y $card-spacer-x;\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: $card-cap-color;\n background-color: $card-cap-bg;\n border-bottom: $card-border-width solid $card-border-color;\n\n &:first-child {\n @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);\n }\n}\n\n.card-footer {\n padding: $card-spacer-y $card-spacer-x;\n color: $card-cap-color;\n background-color: $card-cap-bg;\n border-top: $card-border-width solid $card-border-color;\n\n &:last-child {\n @include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius);\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: -$card-spacer-x / 2;\n margin-bottom: -$card-spacer-y;\n margin-left: -$card-spacer-x / 2;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -$card-spacer-x / 2;\n margin-left: -$card-spacer-x / 2;\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: $card-img-overlay-padding;\n @include border-radius($card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n flex-shrink: 0; // For IE: https://github.com/twbs/bootstrap/issues/29396\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n @include border-top-radius($card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n @include border-bottom-radius($card-inner-border-radius);\n}\n\n\n// Card deck\n\n.card-deck {\n .card {\n margin-bottom: $card-deck-margin;\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n margin-right: -$card-deck-margin;\n margin-left: -$card-deck-margin;\n\n .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-right: $card-deck-margin;\n margin-bottom: 0; // Override the default\n margin-left: $card-deck-margin;\n }\n }\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: $card-group-margin;\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:not(:last-child) {\n @include border-right-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-right-radius: 0;\n }\n }\n\n &:not(:first-child) {\n @include border-left-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-left-radius: 0;\n }\n }\n }\n }\n }\n}\n\n\n//\n// Columns\n//\n\n.card-columns {\n .card {\n margin-bottom: $card-columns-margin;\n }\n\n @include media-breakpoint-up(sm) {\n column-count: $card-columns-count;\n column-gap: $card-columns-gap;\n orphans: 1;\n widows: 1;\n\n .card {\n display: inline-block; // Don't let them vertically span multiple columns\n width: 100%; // Don't let their width change\n }\n }\n}\n\n\n//\n// Accordion\n//\n\n.accordion {\n overflow-anchor: none;\n\n > .card {\n overflow: hidden;\n\n &:not(:last-of-type) {\n border-bottom: 0;\n @include border-bottom-radius(0);\n }\n\n &:not(:first-of-type) {\n @include border-top-radius(0);\n }\n\n > .card-header {\n @include border-radius(0);\n margin-bottom: -$card-border-width;\n }\n }\n}\n",".breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: $breadcrumb-padding-y $breadcrumb-padding-x;\n margin-bottom: $breadcrumb-margin-bottom;\n @include font-size($breadcrumb-font-size);\n list-style: none;\n background-color: $breadcrumb-bg;\n @include border-radius($breadcrumb-border-radius);\n}\n\n.breadcrumb-item {\n display: flex;\n\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: $breadcrumb-item-padding;\n\n &::before {\n display: inline-block; // Suppress underlining of the separator in modern browsers\n padding-right: $breadcrumb-item-padding;\n color: $breadcrumb-divider-color;\n content: escape-svg($breadcrumb-divider);\n }\n }\n\n // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built\n // without `<ul>`s. The `::before` pseudo-element generates an element\n // *within* the .breadcrumb-item and thereby inherits the `text-decoration`.\n //\n // To trick IE into suppressing the underline, we give the pseudo-element an\n // underline and then immediately remove it.\n + .breadcrumb-item:hover::before {\n text-decoration: underline;\n }\n // stylelint-disable-next-line no-duplicate-selectors\n + .breadcrumb-item:hover::before {\n text-decoration: none;\n }\n\n &.active {\n color: $breadcrumb-active-color;\n }\n}\n",".pagination {\n display: flex;\n @include list-unstyled();\n @include border-radius();\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: $pagination-padding-y $pagination-padding-x;\n margin-left: -$pagination-border-width;\n line-height: $pagination-line-height;\n color: $pagination-color;\n text-decoration: if($link-decoration == none, null, none);\n background-color: $pagination-bg;\n border: $pagination-border-width solid $pagination-border-color;\n\n &:hover {\n z-index: 2;\n color: $pagination-hover-color;\n text-decoration: none;\n background-color: $pagination-hover-bg;\n border-color: $pagination-hover-border-color;\n }\n\n &:focus {\n z-index: 3;\n outline: $pagination-focus-outline;\n box-shadow: $pagination-focus-box-shadow;\n }\n}\n\n.page-item {\n &:first-child {\n .page-link {\n margin-left: 0;\n @include border-left-radius($border-radius);\n }\n }\n &:last-child {\n .page-link {\n @include border-right-radius($border-radius);\n }\n }\n\n &.active .page-link {\n z-index: 3;\n color: $pagination-active-color;\n background-color: $pagination-active-bg;\n border-color: $pagination-active-border-color;\n }\n\n &.disabled .page-link {\n color: $pagination-disabled-color;\n pointer-events: none;\n // Opinionated: remove the \"hand\" cursor set previously for .page-link\n cursor: auto;\n background-color: $pagination-disabled-bg;\n border-color: $pagination-disabled-border-color;\n }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $border-radius-sm);\n}\n","// Pagination\n\n@mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n .page-link {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n line-height: $line-height;\n }\n\n .page-item {\n &:first-child {\n .page-link {\n @include border-left-radius($border-radius);\n }\n }\n &:last-child {\n .page-link {\n @include border-right-radius($border-radius);\n }\n }\n }\n}\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n display: inline-block;\n padding: $badge-padding-y $badge-padding-x;\n @include font-size($badge-font-size);\n font-weight: $badge-font-weight;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius($badge-border-radius);\n @include transition($badge-transition);\n\n @at-root a#{&} {\n @include hover-focus() {\n text-decoration: none;\n }\n }\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n// Pill badges\n//\n// Make them extra rounded with a modifier to replace v3's badges.\n\n.badge-pill {\n padding-right: $badge-pill-padding-x;\n padding-left: $badge-pill-padding-x;\n @include border-radius($badge-pill-border-radius);\n}\n\n// Colors\n//\n// Contextual variations (linked badges get darker on :hover).\n\n@each $color, $value in $theme-colors {\n .badge-#{$color} {\n @include badge-variant($value);\n }\n}\n","@mixin badge-variant($bg) {\n color: color-yiq($bg);\n background-color: $bg;\n\n @at-root a#{&} {\n @include hover-focus() {\n color: color-yiq($bg);\n background-color: darken($bg, 10%);\n }\n\n &:focus,\n &.focus {\n outline: 0;\n box-shadow: 0 0 0 $badge-focus-width rgba($bg, .5);\n }\n }\n}\n",".jumbotron {\n padding: $jumbotron-padding ($jumbotron-padding / 2);\n margin-bottom: $jumbotron-padding;\n color: $jumbotron-color;\n background-color: $jumbotron-bg;\n @include border-radius($border-radius-lg);\n\n @include media-breakpoint-up(sm) {\n padding: ($jumbotron-padding * 2) $jumbotron-padding;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n @include border-radius(0);\n}\n","//\n// Base styles\n//\n\n.alert {\n position: relative;\n padding: $alert-padding-y $alert-padding-x;\n margin-bottom: $alert-margin-bottom;\n border: $alert-border-width solid transparent;\n @include border-radius($alert-border-radius);\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $close-font-size + $alert-padding-x * 2;\n\n // Adjust close link position\n .close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: $alert-padding-y $alert-padding-x;\n color: inherit;\n }\n}\n\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n@each $color, $value in $theme-colors {\n .alert-#{$color} {\n @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level));\n }\n}\n","@mixin alert-variant($background, $border, $color) {\n color: $color;\n @include gradient-bg($background);\n border-color: $border;\n\n hr {\n border-top-color: darken($border, 5%);\n }\n\n .alert-link {\n color: darken($color, 10%);\n }\n}\n","// Disable animation if transitions are disabled\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n from { background-position: $progress-height 0; }\n to { background-position: 0 0; }\n }\n}\n\n.progress {\n display: flex;\n height: $progress-height;\n overflow: hidden; // force rounded corners by cropping it\n line-height: 0;\n @include font-size($progress-font-size);\n background-color: $progress-bg;\n @include border-radius($progress-border-radius);\n @include box-shadow($progress-box-shadow);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: $progress-bar-color;\n text-align: center;\n white-space: nowrap;\n background-color: $progress-bar-bg;\n @include transition($progress-bar-transition);\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: $progress-height $progress-height;\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: progress-bar-stripes $progress-bar-animation-timing;\n\n @if $enable-prefers-reduced-motion-media-query {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n",".media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius($list-group-border-radius);\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: $list-group-action-color;\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n @include hover-focus() {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: $list-group-action-hover-color;\n text-decoration: none;\n background-color: $list-group-hover-bg;\n }\n\n &:active {\n color: $list-group-action-active-color;\n background-color: $list-group-action-active-bg;\n }\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: $list-group-item-padding-y $list-group-item-padding-x;\n color: $list-group-color;\n text-decoration: if($link-decoration == none, null, none);\n background-color: $list-group-bg;\n border: $list-group-border-width solid $list-group-border-color;\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: $list-group-disabled-color;\n pointer-events: none;\n background-color: $list-group-disabled-bg;\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: $list-group-active-color;\n background-color: $list-group-active-bg;\n border-color: $list-group-active-border-color;\n }\n\n & + & {\n border-top-width: 0;\n\n &.active {\n margin-top: -$list-group-border-width;\n border-top-width: $list-group-border-width;\n }\n }\n}\n\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child {\n @include border-bottom-left-radius($list-group-border-radius);\n @include border-top-right-radius(0);\n }\n\n &:last-child {\n @include border-top-right-radius($list-group-border-radius);\n @include border-bottom-left-radius(0);\n }\n\n &.active {\n margin-top: 0;\n }\n\n + .list-group-item {\n border-top-width: $list-group-border-width;\n border-left-width: 0;\n\n &.active {\n margin-left: -$list-group-border-width;\n border-left-width: $list-group-border-width;\n }\n }\n }\n }\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n @include border-radius(0);\n\n > .list-group-item {\n border-width: 0 0 $list-group-border-width;\n\n &:last-child {\n border-bottom-width: 0;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $color, $value in $theme-colors {\n @include list-group-item-variant($color, theme-color-level($color, -9), theme-color-level($color, 6));\n}\n","// List Groups\n\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n @include hover-focus() {\n color: $color;\n background-color: darken($background, 5%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n",".close {\n float: right;\n @include font-size($close-font-size);\n font-weight: $close-font-weight;\n line-height: 1;\n color: $close-color;\n text-shadow: $close-text-shadow;\n opacity: .5;\n\n // Override <a>'s hover style\n @include hover() {\n color: $close-color;\n text-decoration: none;\n }\n\n &:not(:disabled):not(.disabled) {\n @include hover-focus() {\n opacity: .75;\n }\n }\n}\n\n// Additional properties for button version\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n// stylelint-disable-next-line selector-no-qualifying-type\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n}\n\n// Future-proof disabling of clicks on `<a>` elements\n\n// stylelint-disable-next-line selector-no-qualifying-type\na.close.disabled {\n pointer-events: none;\n}\n",".toast {\n // Prevents from shrinking in IE11, when in a flex container\n // See https://github.com/twbs/bootstrap/issues/28341\n flex-basis: $toast-max-width;\n max-width: $toast-max-width;\n @include font-size($toast-font-size);\n color: $toast-color;\n background-color: $toast-background-color;\n background-clip: padding-box;\n border: $toast-border-width solid $toast-border-color;\n box-shadow: $toast-box-shadow;\n opacity: 0;\n @include border-radius($toast-border-radius);\n\n &:not(:last-child) {\n margin-bottom: $toast-padding-x;\n }\n\n &.showing {\n opacity: 1;\n }\n\n &.show {\n display: block;\n opacity: 1;\n }\n\n &.hide {\n display: none;\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: $toast-padding-y $toast-padding-x;\n color: $toast-header-color;\n background-color: $toast-header-background-color;\n background-clip: padding-box;\n border-bottom: $toast-border-width solid $toast-header-border-color;\n @include border-top-radius(subtract($toast-border-radius, $toast-border-width));\n}\n\n.toast-body {\n padding: $toast-padding-x; // apply to both vertical and horizontal\n}\n","// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n.modal-open {\n // Kill the scroll on the body\n overflow: hidden;\n\n .modal {\n overflow-x: hidden;\n overflow-y: auto;\n }\n}\n\n// Container that the modal scrolls within\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex-modal;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: $modal-dialog-margin;\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n display: flex; // IE10/11\n max-height: subtract(100%, $modal-dialog-margin * 2);\n\n .modal-content {\n max-height: subtract(100vh, $modal-dialog-margin * 2); // IE10/11\n overflow: hidden;\n }\n\n .modal-header,\n .modal-footer {\n flex-shrink: 0;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: subtract(100%, $modal-dialog-margin * 2);\n\n // Ensure `modal-dialog-centered` extends the full height of the view (IE10/11)\n &::before {\n display: block; // IE10\n height: subtract(100vh, $modal-dialog-margin * 2);\n height: min-content; // Reset height to 0 except on IE\n content: \"\";\n }\n\n // Ensure `.modal-body` shows scrollbar (IE10/11)\n &.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n\n .modal-content {\n max-height: none;\n }\n\n &::before {\n content: none;\n }\n }\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: $modal-content-color;\n pointer-events: auto;\n background-color: $modal-content-bg;\n background-clip: padding-box;\n border: $modal-content-border-width solid $modal-content-border-color;\n @include border-radius($modal-content-border-radius);\n @include box-shadow($modal-content-box-shadow-xs);\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex-modal-backdrop;\n width: 100vw;\n height: 100vh;\n background-color: $modal-backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $modal-backdrop-opacity; }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n align-items: flex-start; // so the close btn always stays on the upper right corner\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: $modal-header-padding;\n border-bottom: $modal-header-border-width solid $modal-header-border-color;\n @include border-top-radius($modal-content-inner-border-radius);\n\n .close {\n padding: $modal-header-padding;\n // auto on the left force icon to the right even when there is no .modal-title\n margin: (-$modal-header-padding-y) (-$modal-header-padding-x) (-$modal-header-padding-y) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: $modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when there should be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: $modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: $modal-inner-padding - $modal-footer-margin-between / 2;\n border-top: $modal-footer-border-width solid $modal-footer-border-color;\n @include border-bottom-radius($modal-content-inner-border-radius);\n\n // Place margin between footer elements\n // This solution is far from ideal because of the universal selector usage,\n // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n > * {\n margin: $modal-footer-margin-between / 2;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: $modal-md;\n margin: $modal-dialog-margin-y-sm-up auto;\n }\n\n .modal-dialog-scrollable {\n max-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);\n\n .modal-content {\n max-height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);\n }\n }\n\n .modal-dialog-centered {\n min-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);\n\n &::before {\n height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);\n height: min-content;\n }\n }\n\n .modal-content {\n @include box-shadow($modal-content-box-shadow-sm-up);\n }\n\n .modal-sm { max-width: $modal-sm; }\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg,\n .modal-xl {\n max-width: $modal-lg;\n }\n}\n\n@include media-breakpoint-up(xl) {\n .modal-xl { max-width: $modal-xl; }\n}\n","// Base class\n.tooltip {\n position: absolute;\n z-index: $zindex-tooltip;\n display: block;\n margin: $tooltip-margin;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size($tooltip-font-size);\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: $tooltip-opacity; }\n\n .arrow {\n position: absolute;\n display: block;\n width: $tooltip-arrow-width;\n height: $tooltip-arrow-height;\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top {\n padding: $tooltip-arrow-height 0;\n\n .arrow {\n bottom: 0;\n\n &::before {\n top: 0;\n border-width: $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;\n border-top-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-right {\n padding: 0 $tooltip-arrow-height;\n\n .arrow {\n left: 0;\n width: $tooltip-arrow-height;\n height: $tooltip-arrow-width;\n\n &::before {\n right: 0;\n border-width: ($tooltip-arrow-width / 2) $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;\n border-right-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-bottom {\n padding: $tooltip-arrow-height 0;\n\n .arrow {\n top: 0;\n\n &::before {\n bottom: 0;\n border-width: 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;\n border-bottom-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-left {\n padding: 0 $tooltip-arrow-height;\n\n .arrow {\n right: 0;\n width: $tooltip-arrow-height;\n height: $tooltip-arrow-width;\n\n &::before {\n left: 0;\n border-width: ($tooltip-arrow-width / 2) 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;\n border-left-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-auto {\n &[x-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[x-placement^=\"right\"] {\n @extend .bs-tooltip-right;\n }\n &[x-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[x-placement^=\"left\"] {\n @extend .bs-tooltip-left;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: $tooltip-max-width;\n padding: $tooltip-padding-y $tooltip-padding-x;\n color: $tooltip-color;\n text-align: center;\n background-color: $tooltip-bg;\n @include border-radius($tooltip-border-radius);\n}\n","@mixin reset-text() {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n}\n",".popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: $zindex-popover;\n display: block;\n max-width: $popover-max-width;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size($popover-font-size);\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: $popover-bg;\n background-clip: padding-box;\n border: $popover-border-width solid $popover-border-color;\n @include border-radius($popover-border-radius);\n @include box-shadow($popover-box-shadow);\n\n .arrow {\n position: absolute;\n display: block;\n width: $popover-arrow-width;\n height: $popover-arrow-height;\n margin: 0 $popover-border-radius;\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-popover-top {\n margin-bottom: $popover-arrow-height;\n\n > .arrow {\n bottom: subtract(-$popover-arrow-height, $popover-border-width);\n\n &::before {\n bottom: 0;\n border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-top-color: $popover-arrow-outer-color;\n }\n\n &::after {\n bottom: $popover-border-width;\n border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-top-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-right {\n margin-left: $popover-arrow-height;\n\n > .arrow {\n left: subtract(-$popover-arrow-height, $popover-border-width);\n width: $popover-arrow-height;\n height: $popover-arrow-width;\n margin: $popover-border-radius 0; // make sure the arrow does not touch the popover's rounded corners\n\n &::before {\n left: 0;\n border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-right-color: $popover-arrow-outer-color;\n }\n\n &::after {\n left: $popover-border-width;\n border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-right-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-bottom {\n margin-top: $popover-arrow-height;\n\n > .arrow {\n top: subtract(-$popover-arrow-height, $popover-border-width);\n\n &::before {\n top: 0;\n border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);\n border-bottom-color: $popover-arrow-outer-color;\n }\n\n &::after {\n top: $popover-border-width;\n border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);\n border-bottom-color: $popover-arrow-color;\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: $popover-arrow-width;\n margin-left: -$popover-arrow-width / 2;\n content: \"\";\n border-bottom: $popover-border-width solid $popover-header-bg;\n }\n}\n\n.bs-popover-left {\n margin-right: $popover-arrow-height;\n\n > .arrow {\n right: subtract(-$popover-arrow-height, $popover-border-width);\n width: $popover-arrow-height;\n height: $popover-arrow-width;\n margin: $popover-border-radius 0; // make sure the arrow does not touch the popover's rounded corners\n\n &::before {\n right: 0;\n border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;\n border-left-color: $popover-arrow-outer-color;\n }\n\n &::after {\n right: $popover-border-width;\n border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;\n border-left-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-auto {\n &[x-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[x-placement^=\"right\"] {\n @extend .bs-popover-right;\n }\n &[x-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[x-placement^=\"left\"] {\n @extend .bs-popover-left;\n }\n}\n\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: $popover-header-padding-y $popover-header-padding-x;\n margin-bottom: 0; // Reset the default from Reboot\n @include font-size($font-size-base);\n color: $popover-header-color;\n background-color: $popover-header-bg;\n border-bottom: $popover-border-width solid darken($popover-header-bg, 5%);\n @include border-top-radius($popover-inner-border-radius);\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: $popover-body-padding-y $popover-body-padding-x;\n color: $popover-body-color;\n}\n","// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-left and .carousel-item-right is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-left and .active.carousel-item-right is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-left and .carousel-item-prev.carousel-item-right\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-left,\n .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-left,\n .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n color: $carousel-control-color;\n text-align: center;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n @include hover-focus() {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n @if $enable-gradients {\n background-image: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));\n }\n}\n.carousel-control-next {\n right: 0;\n @if $enable-gradients {\n background-image: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));\n }\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background: no-repeat 50% / 100% 100%;\n}\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n\n// Optional indicator pips\n//\n// Add an ordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0; // override <ol> default\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-left: $carousel-control-width;\n list-style: none;\n\n li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: .5;\n @include transition($carousel-indicator-transition);\n }\n\n .active {\n opacity: 1;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: (100% - $carousel-caption-width) / 2;\n bottom: 20px;\n left: (100% - $carousel-caption-width) / 2;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: $carousel-caption-color;\n text-align: center;\n}\n","@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n","//\n// Rotating border\n//\n\n@keyframes spinner-border {\n to { transform: rotate(360deg); }\n}\n\n.spinner-border {\n display: inline-block;\n width: $spinner-width;\n height: $spinner-height;\n vertical-align: text-bottom;\n border: $spinner-border-width solid currentColor;\n border-right-color: transparent;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: $spinner-width-sm;\n height: $spinner-height-sm;\n border-width: $spinner-border-width-sm;\n}\n\n//\n// Growing circle\n//\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: $spinner-width;\n height: $spinner-height;\n vertical-align: text-bottom;\n background-color: currentColor;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n opacity: 0;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: $spinner-width-sm;\n height: $spinner-height-sm;\n}\n","// stylelint-disable declaration-no-important\n\n.align-baseline { vertical-align: baseline !important; } // Browser default\n.align-top { vertical-align: top !important; }\n.align-middle { vertical-align: middle !important; }\n.align-bottom { vertical-align: bottom !important; }\n.align-text-bottom { vertical-align: text-bottom !important; }\n.align-text-top { vertical-align: text-top !important; }\n","// stylelint-disable declaration-no-important\n\n// Contextual backgrounds\n\n@mixin bg-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n background-color: $color !important;\n }\n a#{$parent},\n button#{$parent} {\n @include hover-focus() {\n background-color: darken($color, 10%) !important;\n }\n }\n @include deprecate(\"The `bg-variant` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n\n@mixin bg-gradient-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;\n }\n @include deprecate(\"The `bg-gradient-variant` mixin\", \"v4.5.0\", \"v5\", $ignore-warning);\n}\n","// stylelint-disable declaration-no-important\n\n@each $color, $value in $theme-colors {\n @include bg-variant(\".bg-#{$color}\", $value, true);\n}\n\n@if $enable-gradients {\n @each $color, $value in $theme-colors {\n @include bg-gradient-variant(\".bg-gradient-#{$color}\", $value, true);\n }\n}\n\n.bg-white {\n background-color: $white !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n","// stylelint-disable property-disallowed-list, declaration-no-important\n\n//\n// Border\n//\n\n.border { border: $border-width solid $border-color !important; }\n.border-top { border-top: $border-width solid $border-color !important; }\n.border-right { border-right: $border-width solid $border-color !important; }\n.border-bottom { border-bottom: $border-width solid $border-color !important; }\n.border-left { border-left: $border-width solid $border-color !important; }\n\n.border-0 { border: 0 !important; }\n.border-top-0 { border-top: 0 !important; }\n.border-right-0 { border-right: 0 !important; }\n.border-bottom-0 { border-bottom: 0 !important; }\n.border-left-0 { border-left: 0 !important; }\n\n@each $color, $value in $theme-colors {\n .border-#{$color} {\n border-color: $value !important;\n }\n}\n\n.border-white {\n border-color: $white !important;\n}\n\n//\n// Border-radius\n//\n\n.rounded-sm {\n border-radius: $border-radius-sm !important;\n}\n\n.rounded {\n border-radius: $border-radius !important;\n}\n\n.rounded-top {\n border-top-left-radius: $border-radius !important;\n border-top-right-radius: $border-radius !important;\n}\n\n.rounded-right {\n border-top-right-radius: $border-radius !important;\n border-bottom-right-radius: $border-radius !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n\n.rounded-left {\n border-top-left-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n\n.rounded-lg {\n border-radius: $border-radius-lg !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: $rounded-pill !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $value in $displays {\n .d#{$infix}-#{$value} { display: $value !important; }\n }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n @each $value in $displays {\n .d-print-#{$value} { display: $value !important; }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n\n &::before {\n display: block;\n content: \"\";\n }\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n}\n\n@each $embed-responsive-aspect-ratio in $embed-responsive-aspect-ratios {\n $embed-responsive-aspect-ratio-x: nth($embed-responsive-aspect-ratio, 1);\n $embed-responsive-aspect-ratio-y: nth($embed-responsive-aspect-ratio, 2);\n\n .embed-responsive-#{$embed-responsive-aspect-ratio-x}by#{$embed-responsive-aspect-ratio-y} {\n &::before {\n padding-top: percentage($embed-responsive-aspect-ratio-y / $embed-responsive-aspect-ratio-x);\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .float#{$infix}-left { float: left !important; }\n .float#{$infix}-right { float: right !important; }\n .float#{$infix}-none { float: none !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n@each $value in $user-selects {\n .user-select-#{$value} { user-select: $value !important; }\n}\n","// stylelint-disable declaration-no-important\n\n@each $value in $overflows {\n .overflow-#{$value} { overflow: $value !important; }\n}\n","// stylelint-disable declaration-no-important\n\n// Common values\n@each $position in $positions {\n .position-#{$position} { position: $position !important; }\n}\n\n// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.sticky-top {\n @supports (position: sticky) {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n}\n","//\n// Screenreaders\n//\n\n.sr-only {\n @include sr-only();\n}\n\n.sr-only-focusable {\n @include sr-only-focusable();\n}\n","// Only display content to screen readers\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin sr-only() {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable() {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n }\n}\n","// stylelint-disable declaration-no-important\n\n.shadow-sm { box-shadow: $box-shadow-sm !important; }\n.shadow { box-shadow: $box-shadow !important; }\n.shadow-lg { box-shadow: $box-shadow-lg !important; }\n.shadow-none { box-shadow: none !important; }\n","// stylelint-disable declaration-no-important\n\n// Width and height\n\n@each $prop, $abbrev in (width: w, height: h) {\n @each $size, $length in $sizes {\n .#{$abbrev}-#{$size} { #{$prop}: $length !important; }\n }\n}\n\n.mw-100 { max-width: 100% !important; }\n.mh-100 { max-height: 100% !important; }\n\n// Viewport additional helpers\n\n.min-vw-100 { min-width: 100vw !important; }\n.min-vh-100 { min-height: 100vh !important; }\n\n.vw-100 { width: 100vw !important; }\n.vh-100 { height: 100vh !important; }\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)\n @each $size, $length in $spacers {\n @if $size != 0 {\n .m#{$infix}-n#{$size} { margin: -$length !important; }\n .mt#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-top: -$length !important;\n }\n .mr#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-right: -$length !important;\n }\n .mb#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-bottom: -$length !important;\n }\n .ml#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-left: -$length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n // Just in case `pointer-events: none` is set on a parent\n pointer-events: auto;\n content: \"\";\n // IE10 bugfix, see https://stackoverflow.com/questions/16947967/ie10-hover-pseudo-class-doesnt-work-without-background-color\n background-color: rgba(0, 0, 0, 0);\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Text\n//\n\n.text-monospace { font-family: $font-family-monospace !important; }\n\n// Alignment\n\n.text-justify { text-align: justify !important; }\n.text-wrap { white-space: normal !important; }\n.text-nowrap { white-space: nowrap !important; }\n.text-truncate { @include text-truncate(); }\n\n// Responsive alignment\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .text#{$infix}-left { text-align: left !important; }\n .text#{$infix}-right { text-align: right !important; }\n .text#{$infix}-center { text-align: center !important; }\n }\n}\n\n// Transformation\n\n.text-lowercase { text-transform: lowercase !important; }\n.text-uppercase { text-transform: uppercase !important; }\n.text-capitalize { text-transform: capitalize !important; }\n\n// Weight and italics\n\n.font-weight-light { font-weight: $font-weight-light !important; }\n.font-weight-lighter { font-weight: $font-weight-lighter !important; }\n.font-weight-normal { font-weight: $font-weight-normal !important; }\n.font-weight-bold { font-weight: $font-weight-bold !important; }\n.font-weight-bolder { font-weight: $font-weight-bolder !important; }\n.font-italic { font-style: italic !important; }\n\n// Contextual colors\n\n.text-white { color: $white !important; }\n\n@each $color, $value in $theme-colors {\n @include text-emphasis-variant(\".text-#{$color}\", $value, true);\n}\n\n.text-body { color: $body-color !important; }\n.text-muted { color: $text-muted !important; }\n\n.text-black-50 { color: rgba($black, .5) !important; }\n.text-white-50 { color: rgba($white, .5) !important; }\n\n// Misc\n\n.text-hide {\n @include text-hide($ignore-warning: true);\n}\n\n.text-decoration-none { text-decoration: none !important; }\n\n.text-break {\n word-break: break-word !important; // Deprecated, but avoids issues with flex containers\n word-wrap: break-word !important; // Used instead of `overflow-wrap` for IE & Edge Legacy\n}\n\n// Reset\n\n.text-reset { color: inherit !important; }\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","// stylelint-disable declaration-no-important\n\n// Typography\n\n@mixin text-emphasis-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n color: $color !important;\n }\n @if $emphasized-link-hover-darken-percentage != 0 {\n a#{$parent} {\n @include hover-focus() {\n color: darken($color, $emphasized-link-hover-darken-percentage) !important;\n }\n }\n }\n @include deprecate(\"`text-emphasis-variant()`\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n","// CSS image replacement\n@mixin text-hide($ignore-warning: false) {\n // stylelint-disable-next-line font-family-no-missing-generic-family-keyword\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n\n @include deprecate(\"`text-hide()`\", \"v4.1.0\", \"v5\", $ignore-warning);\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Visibility utilities\n//\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type\n\n// Source: https://github.com/h5bp/main.css/blob/master/src/_print.css\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request:\n// https://www.phpied.com/delay-loading-your-print-css/\n// ==========================================================================\n\n@if $enable-print-styles {\n @media print {\n *,\n *::before,\n *::after {\n // Bootstrap specific; comment out `color` and `background`\n //color: $black !important; // Black prints faster\n text-shadow: none !important;\n //background: transparent !important;\n box-shadow: none !important;\n }\n\n a {\n &:not(.btn) {\n text-decoration: underline;\n }\n }\n\n // Bootstrap specific; comment the following selector out\n //a[href]::after {\n // content: \" (\" attr(href) \")\";\n //}\n\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n\n // Bootstrap specific; comment the following selector out\n //\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n //\n\n //a[href^=\"#\"]::after,\n //a[href^=\"javascript:\"]::after {\n // content: \"\";\n //}\n\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: $border-width solid $gray-500; // Bootstrap custom code; using `$border-width` instead of 1px\n page-break-inside: avoid;\n }\n\n //\n // Printing Tables:\n // https://web.archive.org/web/20180815150934/http://css-discuss.incutio.com/wiki/Printing_Tables\n //\n\n thead {\n display: table-header-group;\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Specify a size and min-width to make printing closer across browsers.\n // We don't set margin here because it breaks `size` in Chrome. We also\n // don't use `!important` on `size` as it breaks in Chrome.\n @page {\n size: $print-page-size;\n }\n body {\n min-width: $print-body-min-width !important;\n }\n .container {\n min-width: $print-body-min-width !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .badge {\n border: $border-width solid $black;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: $white !important;\n }\n }\n\n .table-bordered {\n th,\n td {\n border: 1px solid $gray-300 !important;\n }\n }\n\n .table-dark {\n color: inherit;\n\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $table-border-color;\n }\n }\n\n .table .thead-dark th {\n color: inherit;\n border-color: $table-border-color;\n }\n\n // Bootstrap specific changes end\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/utilities/_interactions.scss","../../scss/utilities/_overflow.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_stretched-link.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/_print.scss"],"names":[],"mappings":"AAAA;;;;;ACAA,MAGI,OAAA,QAAA,SAAA,QAAA,SAAA,QAAA,OAAA,QAAA,MAAA,QAAA,SAAA,QAAA,SAAA,QAAA,QAAA,QAAA,OAAA,QAAA,OAAA,QAAA,QAAA,KAAA,OAAA,QAAA,YAAA,QAIA,UAAA,QAAA,YAAA,QAAA,UAAA,QAAA,OAAA,QAAA,UAAA,QAAA,SAAA,QAAA,QAAA,QAAA,OAAA,QAIA,gBAAA,EAAA,gBAAA,MAAA,gBAAA,MAAA,gBAAA,MAAA,gBAAA,OAKF,yBAAA,aAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,mBACA,wBAAA,cAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,UCCF,ECqBA,QADA,SDjBE,WAAA,WAGF,KACE,YAAA,WACA,YAAA,KACA,yBAAA,KACA,4BAAA,YAMF,QAAA,MAAA,WAAA,OAAA,OAAA,OAAA,OAAA,KAAA,IAAA,QACE,QAAA,MAUF,KACE,OAAA,EACA,YAAA,aAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,mBEgFI,UAAA,KF9EJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,WAAA,KACA,iBAAA,KGYF,0CHCE,QAAA,YASF,GACE,WAAA,YACA,OAAA,EACA,SAAA,QAaF,GAAA,GAAA,GAAA,GAAA,GAAA,GACE,WAAA,EACA,cAAA,MAOF,EACE,WAAA,EACA,cAAA,KChBF,0BD2BA,YAEE,gBAAA,UACA,wBAAA,UAAA,OAAA,gBAAA,UAAA,OACA,OAAA,KACA,cAAA,EACA,iCAAA,KAAA,yBAAA,KAGF,QACE,cAAA,KACA,WAAA,OACA,YAAA,QCrBF,GDwBA,GCzBA,GD4BE,WAAA,EACA,cAAA,KAGF,MCxBA,MACA,MAFA,MD6BE,cAAA,EAGF,GACE,YAAA,IAGF,GACE,cAAA,MACA,YAAA,EAGF,WACE,OAAA,EAAA,EAAA,KAGF,ECzBA,OD2BE,YAAA,OAGF,MExFI,UAAA,IFiGJ,IC9BA,IDgCE,SAAA,SEnGE,UAAA,IFqGF,YAAA,EACA,eAAA,SAGF,IAAM,OAAA,OACN,IAAM,IAAA,MAON,EACE,MAAA,QACA,gBAAA,KACA,iBAAA,YIhLA,QJmLE,MAAA,QACA,gBAAA,UASJ,2BACE,MAAA,QACA,gBAAA,KI/LA,iCJkME,MAAA,QACA,gBAAA,KC/BJ,KACA,IDuCA,ICtCA,KD0CE,YAAA,cAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,UEpJE,UAAA,IFwJJ,IAEE,WAAA,EAEA,cAAA,KAEA,SAAA,KAGA,mBAAA,UAQF,OAEE,OAAA,EAAA,EAAA,KAQF,IACE,eAAA,OACA,aAAA,KAGF,IAGE,SAAA,OACA,eAAA,OAQF,MACE,gBAAA,SAGF,QACE,YAAA,OACA,eAAA,OACA,MAAA,QACA,WAAA,KACA,aAAA,OAOF,GAEE,WAAA,QACA,WAAA,qBAQF,MAEE,QAAA,aACA,cAAA,MAMF,OAEE,cAAA,EAQF,iCACE,QAAA,EChFF,ODmFA,MCjFA,SADA,OAEA,SDqFE,OAAA,EACA,YAAA,QE5PE,UAAA,QF8PF,YAAA,QAGF,OCnFA,MDqFE,SAAA,QAGF,OCnFA,ODqFE,eAAA,KGnFF,cH0FE,OAAA,QAMF,OACE,UAAA,OCtFF,cACA,aACA,cD2FA,OAIE,mBAAA,OC1FF,6BACA,4BACA,6BD6FE,sBAKI,OAAA,QC7FN,gCACA,+BACA,gCDiGA,yBAIE,QAAA,EACA,aAAA,KChGF,qBDmGA,kBAEE,WAAA,WACA,QAAA,EAIF,SACE,SAAA,KAEA,OAAA,SAGF,SAME,UAAA,EAEA,QAAA,EACA,OAAA,EACA,OAAA,EAKF,OACE,QAAA,MACA,MAAA,KACA,UAAA,KACA,QAAA,EACA,cAAA,MEnSI,UAAA,OFqSJ,YAAA,QACA,MAAA,QACA,YAAA,OAGF,SACE,eAAA,SG7GF,yCFGA,yCDgHE,OAAA,KG9GF,cHsHE,eAAA,KACA,mBAAA,KGlHF,yCH0HE,mBAAA,KAQF,6BACE,KAAA,QACA,mBAAA,OAOF,OACE,QAAA,aAGF,QACE,QAAA,UACA,OAAA,QAGF,SACE,QAAA,KG/HF,SHqIE,QAAA,eC9HF,IAAK,IAAK,IAAK,IAAK,IAAK,II9VzB,GAAA,GAAA,GAAA,GAAA,GAAA,GAEE,cAAA,MAEA,YAAA,IACA,YAAA,IAIF,IAAA,GHgHM,UAAA,OG/GN,IAAA,GH+GM,UAAA,KG9GN,IAAA,GH8GM,UAAA,QG7GN,IAAA,GH6GM,UAAA,OG5GN,IAAA,GH4GM,UAAA,QG3GN,IAAA,GH2GM,UAAA,KGzGN,MHyGM,UAAA,QGvGJ,YAAA,IAIF,WHmGM,UAAA,KGjGJ,YAAA,IACA,YAAA,IAEF,WH8FM,UAAA,OG5FJ,YAAA,IACA,YAAA,IAEF,WHyFM,UAAA,OGvFJ,YAAA,IACA,YAAA,IAEF,WHoFM,UAAA,OGlFJ,YAAA,IACA,YAAA,IL6BF,GKpBE,WAAA,KACA,cAAA,KACA,OAAA,EACA,WAAA,IAAA,MAAA,eJ6WF,OIrWA,MHMI,UAAA,IGHF,YAAA,IJwWF,MIrWA,KAEE,QAAA,KACA,iBAAA,QAQF,eC/EE,aAAA,EACA,WAAA,KDmFF,aCpFE,aAAA,EACA,WAAA,KDsFF,kBACE,QAAA,aADF,mCAII,aAAA,MAUJ,YHjCI,UAAA,IGmCF,eAAA,UAIF,YACE,cAAA,KHeI,UAAA,QGXN,mBACE,QAAA,MH7CE,UAAA,IG+CF,MAAA,QAHF,2BAMI,QAAA,aEnHJ,WCIE,UAAA,KAGA,OAAA,KDDF,eACE,QAAA,OACA,iBAAA,KACA,OAAA,IAAA,MAAA,QEEE,cAAA,ODPF,UAAA,KAGA,OAAA,KDcF,QAEE,QAAA,aAGF,YACE,cAAA,MACA,YAAA,EAGF,gBLkCI,UAAA,IKhCF,MAAA,QGvCF,KRuEI,UAAA,MQrEF,MAAA,QACA,UAAA,WAGA,OACE,MAAA,QAKJ,IACE,QAAA,MAAA,MR0DE,UAAA,MQxDF,MAAA,KACA,iBAAA,QDCE,cAAA,MCLJ,QASI,QAAA,ERkDA,UAAA,KQhDA,YAAA,IVwMJ,IUjME,QAAA,MRyCE,UAAA,MQvCF,MAAA,QAHF,SR0CI,UAAA,QQlCA,MAAA,QACA,WAAA,OAKJ,gBACE,WAAA,MACA,WAAA,OCxCA,WVwhBF,iBAGA,cADA,cADA,cAGA,cW7hBE,MAAA,KACA,cAAA,KACA,aAAA,KACA,aAAA,KACA,YAAA,KCmDE,yBFzCE,WAAA,cACE,UAAA,OEwCJ,yBFzCE,WAAA,cAAA,cACE,UAAA,OEwCJ,yBFzCE,WAAA,cAAA,cAAA,cACE,UAAA,OEwCJ,0BFzCE,WAAA,cAAA,cAAA,cAAA,cACE,UAAA,QA4BN,KCnCA,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,aAAA,MACA,YAAA,MDsCA,YACE,aAAA,EACA,YAAA,EAFF,iBV2hBF,0BUrhBM,cAAA,EACA,aAAA,EGtDJ,KAAA,OAAA,QAAA,QAAA,QAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,ObglBF,UAEqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aAFqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aAFkJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,aAEqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aanlBI,SAAA,SACA,MAAA,KACA,cAAA,KACA,aAAA,KAsBE,KACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,cFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,cFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,cFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,cFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,cFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,cFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,UFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,OFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,QFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,QFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,QFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,aAAwB,eAAA,GAAA,MAAA,GAExB,YAAuB,eAAA,GAAA,MAAA,GAGrB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,UAAwB,eAAA,GAAA,MAAA,GAAxB,UAAwB,eAAA,GAAA,MAAA,GAAxB,UAAwB,eAAA,GAAA,MAAA,GAOpB,UFhBV,YAAA,UEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,IEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,IEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,IEgBU,WFhBV,YAAA,WEgBU,WFhBV,YAAA,WCKE,yBC3BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,iBFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,aFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,UFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAOpB,aFhBV,YAAA,EEgBU,aFhBV,YAAA,UEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,cFhBV,YAAA,WEgBU,cFhBV,YAAA,YCKE,yBC3BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,iBFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,aFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,UFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAOpB,aFhBV,YAAA,EEgBU,aFhBV,YAAA,UEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,cFhBV,YAAA,WEgBU,cFhBV,YAAA,YCKE,yBC3BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,iBFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,aFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,UFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAOpB,aFhBV,YAAA,EEgBU,aFhBV,YAAA,UEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,cFhBV,YAAA,WEgBU,cFhBV,YAAA,YCKE,0BC3BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,iBFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,aFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,UFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAOpB,aFhBV,YAAA,EEgBU,aFhBV,YAAA,UEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,cFhBV,YAAA,WEgBU,cFhBV,YAAA,YGnDF,OACE,MAAA,KACA,cAAA,KACA,MAAA,Qd4nDF,Uc/nDA,UAQI,QAAA,OACA,eAAA,IACA,WAAA,IAAA,MAAA,QAVJ,gBAcI,eAAA,OACA,cAAA,IAAA,MAAA,QAfJ,mBAmBI,WAAA,IAAA,MAAA,Qd4nDJ,acnnDA,aAGI,QAAA,MASJ,gBACE,OAAA,IAAA,MAAA,Qd+mDF,mBchnDA,mBAKI,OAAA,IAAA,MAAA,QdgnDJ,yBcrnDA,yBAWM,oBAAA,IdinDN,8BAFA,qBc1mDA,qBd2mDA,2BctmDI,OAAA,EAQJ,yCAEI,iBAAA,gBX/DF,4BW2EI,MAAA,QACA,iBAAA,iBCnFJ,efkrDF,kBADA,kBe7qDM,iBAAA,QfqrDN,2BAFA,kBevrDE,kBfwrDF,wBe5qDQ,aAAA,QZLN,kCYiBM,iBAAA,QALN,qCf+qDF,qCetqDU,iBAAA,QA5BR,iBfwsDF,oBADA,oBensDM,iBAAA,Qf2sDN,6BAFA,oBe7sDE,oBf8sDF,0BelsDQ,aAAA,QZLN,oCYiBM,iBAAA,QALN,uCfqsDF,uCe5rDU,iBAAA,QA5BR,ef8tDF,kBADA,kBeztDM,iBAAA,QfiuDN,2BAFA,kBenuDE,kBfouDF,wBextDQ,aAAA,QZLN,kCYiBM,iBAAA,QALN,qCf2tDF,qCeltDU,iBAAA,QA5BR,YfovDF,eADA,ee/uDM,iBAAA,QfuvDN,wBAFA,eezvDE,ef0vDF,qBe9uDQ,aAAA,QZLN,+BYiBM,iBAAA,QALN,kCfivDF,kCexuDU,iBAAA,QA5BR,ef0wDF,kBADA,kBerwDM,iBAAA,Qf6wDN,2BAFA,kBe/wDE,kBfgxDF,wBepwDQ,aAAA,QZLN,kCYiBM,iBAAA,QALN,qCfuwDF,qCe9vDU,iBAAA,QA5BR,cfgyDF,iBADA,iBe3xDM,iBAAA,QfmyDN,0BAFA,iBeryDE,iBfsyDF,uBe1xDQ,aAAA,QZLN,iCYiBM,iBAAA,QALN,oCf6xDF,oCepxDU,iBAAA,QA5BR,afszDF,gBADA,gBejzDM,iBAAA,QfyzDN,yBAFA,gBe3zDE,gBf4zDF,sBehzDQ,aAAA,QZLN,gCYiBM,iBAAA,QALN,mCfmzDF,mCe1yDU,iBAAA,QA5BR,Yf40DF,eADA,eev0DM,iBAAA,Qf+0DN,wBAFA,eej1DE,efk1DF,qBet0DQ,aAAA,QZLN,+BYiBM,iBAAA,QALN,kCfy0DF,kCeh0DU,iBAAA,QA5BR,cfk2DF,iBADA,iBe71DM,iBAAA,iBZGJ,iCYiBM,iBAAA,iBALN,oCfw1DF,oCe/0DU,iBAAA,iBD8EV,sBAGM,MAAA,KACA,iBAAA,QACA,aAAA,QALN,uBAWM,MAAA,QACA,iBAAA,QACA,aAAA,QAKN,YACE,MAAA,KACA,iBAAA,QdmwDF,ecrwDA,edswDA,qBc/vDI,aAAA,QAPJ,2BAWI,OAAA,EAXJ,oDAgBM,iBAAA,sBXrIJ,uCW4IM,MAAA,KACA,iBAAA,uBFhFJ,4BEiGA,qBAEI,QAAA,MACA,MAAA,KACA,WAAA,KACA,2BAAA,MALH,qCASK,OAAA,GF1GN,4BEiGA,qBAEI,QAAA,MACA,MAAA,KACA,WAAA,KACA,2BAAA,MALH,qCASK,OAAA,GF1GN,4BEiGA,qBAEI,QAAA,MACA,MAAA,KACA,WAAA,KACA,2BAAA,MALH,qCASK,OAAA,GF1GN,6BEiGA,qBAEI,QAAA,MACA,MAAA,KACA,WAAA,KACA,2BAAA,MALH,qCASK,OAAA,GAdV,kBAOQ,QAAA,MACA,MAAA,KACA,WAAA,KACA,2BAAA,MAVR,kCAcU,OAAA,EE7KV,cACE,QAAA,MACA,MAAA,KACA,OAAA,2BACA,QAAA,QAAA,OfqHI,UAAA,KelHJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,QRAE,cAAA,OSFE,WAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCDdN,cCeQ,WAAA,MDfR,0BAsBI,iBAAA,YACA,OAAA,EAvBJ,6BA4BI,MAAA,YACA,YAAA,EAAA,EAAA,EAAA,QEtBF,oBACE,MAAA,QACA,iBAAA,KACA,aAAA,QACA,QAAA,EAKE,WAAA,EAAA,EAAA,EAAA,MAAA,oBFhBN,yCAqCI,MAAA,QAEA,QAAA,EAvCJ,gCAqCI,MAAA,QAEA,QAAA,EAvCJ,oCAqCI,MAAA,QAEA,QAAA,EAvCJ,qCAqCI,MAAA,QAEA,QAAA,EAvCJ,2BAqCI,MAAA,QAEA,QAAA,EAvCJ,uBAAA,wBAiDI,iBAAA,QAEA,QAAA,EAIJ,8BhB89DA,wCACA,+BAFA,8BgBx9DI,mBAAA,KAAA,gBAAA,KAAA,WAAA,KAIJ,qCAOI,MAAA,QACA,iBAAA,KAKJ,mBhBq9DA,oBgBn9DE,QAAA,MACA,MAAA,KAUF,gBACE,YAAA,oBACA,eAAA,oBACA,cAAA,Ef3BE,UAAA,Qe6BF,YAAA,IAGF,mBACE,YAAA,kBACA,eAAA,kBfqBI,UAAA,QenBJ,YAAA,IAGF,mBACE,YAAA,mBACA,eAAA,mBfcI,UAAA,QeZJ,YAAA,IASF,wBACE,QAAA,MACA,MAAA,KACA,QAAA,QAAA,EACA,cAAA,EfDI,UAAA,KeGJ,YAAA,IACA,MAAA,QACA,iBAAA,YACA,OAAA,MAAA,YACA,aAAA,IAAA,EAVF,wCAAA,wCAcI,cAAA,EACA,aAAA,EAYJ,iBACE,OAAA,0BACA,QAAA,OAAA,Mf1BI,UAAA,Qe4BJ,YAAA,IRzIE,cAAA,MQ6IJ,iBACE,OAAA,yBACA,QAAA,MAAA,KflCI,UAAA,QeoCJ,YAAA,IRjJE,cAAA,MQsJJ,8BAAA,0BAGI,OAAA,KAIJ,sBACE,OAAA,KAQF,YACE,cAAA,KAGF,WACE,QAAA,MACA,WAAA,OAQF,UACE,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,aAAA,KACA,YAAA,KAJF,ehB07DA,wBgBl7DI,cAAA,IACA,aAAA,IASJ,YACE,SAAA,SACA,QAAA,MACA,aAAA,QAGF,kBACE,SAAA,SACA,WAAA,MACA,YAAA,ShBi7DF,6CgBp7DA,8CAQI,MAAA,QAIJ,kBACE,cAAA,EAGF,mBACE,QAAA,mBAAA,QAAA,YACA,eAAA,OAAA,YAAA,OACA,aAAA,EACA,aAAA,OAJF,qCAQI,SAAA,OACA,WAAA,EACA,aAAA,SACA,YAAA,EE7MF,gBACE,QAAA,KACA,MAAA,KACA,WAAA,OjByBA,UAAA,IiBvBA,MAAA,QAGF,eACE,SAAA,SACA,IAAA,KACA,KAAA,EACA,QAAA,EACA,QAAA,KACA,UAAA,KACA,QAAA,OAAA,MACA,WAAA,MjBmEE,UAAA,QiBjEF,YAAA,IACA,MAAA,KACA,iBAAA,mBV9CA,cAAA,OUmDA,8BlB8nEJ,uCkB5nEM,KAAA,IlBkoEN,0BACA,yBkB1qEI,sClBwqEJ,qCkB1nEM,QAAA,MA9CF,uBAAA,mCAoDE,aAAA,QAGE,cAAA,qBACA,iBAAA,gQACA,kBAAA,UACA,oBAAA,MAAA,wBAAA,OACA,gBAAA,sBAAA,sBA3DJ,6BAAA,yCA+DI,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBAhEJ,2CAAA,+BAyEI,cAAA,qBACA,oBAAA,IAAA,wBAAA,MAAA,wBA1EJ,wBAAA,oCAiFE,aAAA,QAGE,cAAA,wBACA,WAAA,+KAAA,MAAA,OAAA,MAAA,CAAA,IAAA,KAAA,SAAA,CAAA,KAAA,gQAAA,OAAA,MAAA,OAAA,CAAA,sBAAA,sBAAA,UArFJ,8BAAA,0CAyFI,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBA1FJ,6CAAA,yDAkGI,MAAA,QlB+mEiD,2CACzD,0CkBltEI,uDlBitEJ,sDkB1mEQ,QAAA,MAvGJ,qDAAA,iEA+GI,MAAA,QA/GJ,6DAAA,yEAkHM,aAAA,QAlHN,qEAAA,iFAwHM,aAAA,QClJN,iBAAA,QD0BA,mEAAA,+EA+HM,WAAA,EAAA,EAAA,EAAA,MAAA,oBA/HN,iFAAA,6FAmIM,aAAA,QAnIN,+CAAA,2DA6II,aAAA,QA7IJ,qDAAA,iEAkJM,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBAvIR,kBACE,QAAA,KACA,MAAA,KACA,WAAA,OjByBA,UAAA,IiBvBA,MAAA,QAGF,iBACE,SAAA,SACA,IAAA,KACA,KAAA,EACA,QAAA,EACA,QAAA,KACA,UAAA,KACA,QAAA,OAAA,MACA,WAAA,MjBmEE,UAAA,QiBjEF,YAAA,IACA,MAAA,KACA,iBAAA,mBV9CA,cAAA,OUmDA,gClBwuEJ,yCkBtuEM,KAAA,IlB4uEN,8BACA,6BkBpxEI,0ClBkxEJ,yCkBpuEM,QAAA,MA9CF,yBAAA,qCAoDE,aAAA,QAGE,cAAA,qBACA,iBAAA,2TACA,kBAAA,UACA,oBAAA,MAAA,wBAAA,OACA,gBAAA,sBAAA,sBA3DJ,+BAAA,2CA+DI,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBAhEJ,6CAAA,iCAyEI,cAAA,qBACA,oBAAA,IAAA,wBAAA,MAAA,wBA1EJ,0BAAA,sCAiFE,aAAA,QAGE,cAAA,wBACA,WAAA,+KAAA,MAAA,OAAA,MAAA,CAAA,IAAA,KAAA,SAAA,CAAA,KAAA,2TAAA,OAAA,MAAA,OAAA,CAAA,sBAAA,sBAAA,UArFJ,gCAAA,4CAyFI,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBA1FJ,+CAAA,2DAkGI,MAAA,QlBytEqD,+CAC7D,8CkB5zEI,2DlB2zEJ,0DkBptEQ,QAAA,MAvGJ,uDAAA,mEA+GI,MAAA,QA/GJ,+DAAA,2EAkHM,aAAA,QAlHN,uEAAA,mFAwHM,aAAA,QClJN,iBAAA,QD0BA,qEAAA,iFA+HM,WAAA,EAAA,EAAA,EAAA,MAAA,oBA/HN,mFAAA,+FAmIM,aAAA,QAnIN,iDAAA,6DA6II,aAAA,QA7IJ,uDAAA,mEAkJM,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBF+FV,aACE,QAAA,YAAA,QAAA,KACA,cAAA,IAAA,KAAA,UAAA,IAAA,KACA,eAAA,OAAA,YAAA,OAHF,yBASI,MAAA,KJ/NA,yBIsNJ,mBAeM,QAAA,YAAA,QAAA,KACA,eAAA,OAAA,YAAA,OACA,cAAA,OAAA,gBAAA,OACA,cAAA,EAlBN,yBAuBM,QAAA,YAAA,QAAA,KACA,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,cAAA,IAAA,KAAA,UAAA,IAAA,KACA,eAAA,OAAA,YAAA,OACA,cAAA,EA3BN,2BAgCM,QAAA,aACA,MAAA,KACA,eAAA,OAlCN,qCAuCM,QAAA,ahBgnEJ,4BgBvpEF,0BA4CM,MAAA,KA5CN,yBAkDM,QAAA,YAAA,QAAA,KACA,eAAA,OAAA,YAAA,OACA,cAAA,OAAA,gBAAA,OACA,MAAA,KACA,aAAA,EAtDN,+BAyDM,SAAA,SACA,kBAAA,EAAA,YAAA,EACA,WAAA,EACA,aAAA,OACA,YAAA,EA7DN,6BAiEM,eAAA,OAAA,YAAA,OACA,cAAA,OAAA,gBAAA,OAlEN,mCAqEM,cAAA,GIjVN,KACE,QAAA,aAEA,YAAA,IACA,MAAA,QACA,WAAA,OAGA,eAAA,OACA,oBAAA,KAAA,iBAAA,KAAA,gBAAA,KAAA,YAAA,KACA,iBAAA,YACA,OAAA,IAAA,MAAA,YCuFA,QAAA,QAAA,OpBuBI,UAAA,KoBrBJ,YAAA,IbxFE,cAAA,OSFE,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCGdN,KHeQ,WAAA,MdTN,WiBUE,MAAA,QACA,gBAAA,KAjBJ,WAAA,WAsBI,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBAvBJ,cAAA,cA6BI,QAAA,IA7BJ,mCAkCI,OAAA,QAcJ,epB+7EA,wBoB77EE,eAAA,KASA,aC3DA,MAAA,KFAE,iBAAA,QEEF,aAAA,QlBIA,mBkBAE,MAAA,KFNA,iBAAA,QEQA,aAAA,QAGF,mBAAA,mBAEE,MAAA,KFbA,iBAAA,QEeA,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,MAAA,oBAKJ,sBAAA,sBAEE,MAAA,KACA,iBAAA,QACA,aAAA,QAOF,kDAAA,kDrBy+EF,mCqBt+EI,MAAA,KACA,iBAAA,QAIA,aAAA,QAEA,wDAAA,wDrBs+EJ,yCqBj+EQ,WAAA,EAAA,EAAA,EAAA,MAAA,oBDQN,eC3DA,MAAA,KFAE,iBAAA,QEEF,aAAA,QlBIA,qBkBAE,MAAA,KFNA,iBAAA,QEQA,aAAA,QAGF,qBAAA,qBAEE,MAAA,KFbA,iBAAA,QEeA,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,MAAA,qBAKJ,wBAAA,wBAEE,MAAA,KACA,iBAAA,QACA,aAAA,QAOF,oDAAA,oDrB8gFF,qCqB3gFI,MAAA,KACA,iBAAA,QAIA,aAAA,QAEA,0DAAA,0DrB2gFJ,2CqBtgFQ,WAAA,EAAA,EAAA,EAAA,MAAA,qBDQN,aC3DA,MAAA,KFAE,iBAAA,QEEF,aAAA,QlBIA,mBkBAE,MAAA,KFNA,iBAAA,QEQA,aAAA,QAGF,mBAAA,mBAEE,MAAA,KFbA,iBAAA,QEeA,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,MAAA,mBAKJ,sBAAA,sBAEE,MAAA,KACA,iBAAA,QACA,aAAA,QAOF,kDAAA,kDrBmjFF,mCqBhjFI,MAAA,KACA,iBAAA,QAIA,aAAA,QAEA,wDAAA,wDrBgjFJ,yCqB3iFQ,WAAA,EAAA,EAAA,EAAA,MAAA,mBDQN,UC3DA,MAAA,KFAE,iBAAA,QEEF,aAAA,QlBIA,gBkBAE,MAAA,KFNA,iBAAA,QEQA,aAAA,QAGF,gBAAA,gBAEE,MAAA,KFbA,iBAAA,QEeA,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,MAAA,oBAKJ,mBAAA,mBAEE,MAAA,KACA,iBAAA,QACA,aAAA,QAOF,+CAAA,+CrBwlFF,gCqBrlFI,MAAA,KACA,iBAAA,QAIA,aAAA,QAEA,qDAAA,qDrBqlFJ,sCqBhlFQ,WAAA,EAAA,EAAA,EAAA,MAAA,oBDQN,aC3DA,MAAA,QFAE,iBAAA,QEEF,aAAA,QlBIA,mBkBAE,MAAA,QFNA,iBAAA,QEQA,aAAA,QAGF,mBAAA,mBAEE,MAAA,QFbA,iBAAA,QEeA,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,MAAA,oBAKJ,sBAAA,sBAEE,MAAA,QACA,iBAAA,QACA,aAAA,QAOF,kDAAA,kDrB6nFF,mCqB1nFI,MAAA,QACA,iBAAA,QAIA,aAAA,QAEA,wDAAA,wDrB0nFJ,yCqBrnFQ,WAAA,EAAA,EAAA,EAAA,MAAA,oBDQN,YC3DA,MAAA,KFAE,iBAAA,QEEF,aAAA,QlBIA,kBkBAE,MAAA,KFNA,iBAAA,QEQA,aAAA,QAGF,kBAAA,kBAEE,MAAA,KFbA,iBAAA,QEeA,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,MAAA,mBAKJ,qBAAA,qBAEE,MAAA,KACA,iBAAA,QACA,aAAA,QAOF,iDAAA,iDrBkqFF,kCqB/pFI,MAAA,KACA,iBAAA,QAIA,aAAA,QAEA,uDAAA,uDrB+pFJ,wCqB1pFQ,WAAA,EAAA,EAAA,EAAA,MAAA,mBDQN,WC3DA,MAAA,QFAE,iBAAA,QEEF,aAAA,QlBIA,iBkBAE,MAAA,QFNA,iBAAA,QEQA,aAAA,QAGF,iBAAA,iBAEE,MAAA,QFbA,iBAAA,QEeA,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,MAAA,qBAKJ,oBAAA,oBAEE,MAAA,QACA,iBAAA,QACA,aAAA,QAOF,gDAAA,gDrBusFF,iCqBpsFI,MAAA,QACA,iBAAA,QAIA,aAAA,QAEA,sDAAA,sDrBosFJ,uCqB/rFQ,WAAA,EAAA,EAAA,EAAA,MAAA,qBDQN,UC3DA,MAAA,KFAE,iBAAA,QEEF,aAAA,QlBIA,gBkBAE,MAAA,KFNA,iBAAA,QEQA,aAAA,QAGF,gBAAA,gBAEE,MAAA,KFbA,iBAAA,QEeA,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,MAAA,kBAKJ,mBAAA,mBAEE,MAAA,KACA,iBAAA,QACA,aAAA,QAOF,+CAAA,+CrB4uFF,gCqBzuFI,MAAA,KACA,iBAAA,QAIA,aAAA,QAEA,qDAAA,qDrByuFJ,sCqBpuFQ,WAAA,EAAA,EAAA,EAAA,MAAA,kBDcN,qBCPA,MAAA,QACA,aAAA,QlBrDA,2BkBwDE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,2BAAA,2BAEE,WAAA,EAAA,EAAA,EAAA,MAAA,mBAGF,8BAAA,8BAEE,MAAA,QACA,iBAAA,YAGF,0DAAA,0DrBkuFF,2CqB/tFI,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,gEAAA,gErBkuFJ,iDqB7tFQ,WAAA,EAAA,EAAA,EAAA,MAAA,mBDzBN,uBCPA,MAAA,QACA,aAAA,QlBrDA,6BkBwDE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,6BAAA,6BAEE,WAAA,EAAA,EAAA,EAAA,MAAA,qBAGF,gCAAA,gCAEE,MAAA,QACA,iBAAA,YAGF,4DAAA,4DrBkwFF,6CqB/vFI,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,kEAAA,kErBkwFJ,mDqB7vFQ,WAAA,EAAA,EAAA,EAAA,MAAA,qBDzBN,qBCPA,MAAA,QACA,aAAA,QlBrDA,2BkBwDE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,2BAAA,2BAEE,WAAA,EAAA,EAAA,EAAA,MAAA,mBAGF,8BAAA,8BAEE,MAAA,QACA,iBAAA,YAGF,0DAAA,0DrBkyFF,2CqB/xFI,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,gEAAA,gErBkyFJ,iDqB7xFQ,WAAA,EAAA,EAAA,EAAA,MAAA,mBDzBN,kBCPA,MAAA,QACA,aAAA,QlBrDA,wBkBwDE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,wBAAA,wBAEE,WAAA,EAAA,EAAA,EAAA,MAAA,oBAGF,2BAAA,2BAEE,MAAA,QACA,iBAAA,YAGF,uDAAA,uDrBk0FF,wCqB/zFI,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,6DAAA,6DrBk0FJ,8CqB7zFQ,WAAA,EAAA,EAAA,EAAA,MAAA,oBDzBN,qBCPA,MAAA,QACA,aAAA,QlBrDA,2BkBwDE,MAAA,QACA,iBAAA,QACA,aAAA,QAGF,2BAAA,2BAEE,WAAA,EAAA,EAAA,EAAA,MAAA,mBAGF,8BAAA,8BAEE,MAAA,QACA,iBAAA,YAGF,0DAAA,0DrBk2FF,2CqB/1FI,MAAA,QACA,iBAAA,QACA,aAAA,QAEA,gEAAA,gErBk2FJ,iDqB71FQ,WAAA,EAAA,EAAA,EAAA,MAAA,mBDzBN,oBCPA,MAAA,QACA,aAAA,QlBrDA,0BkBwDE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,0BAAA,0BAEE,WAAA,EAAA,EAAA,EAAA,MAAA,mBAGF,6BAAA,6BAEE,MAAA,QACA,iBAAA,YAGF,yDAAA,yDrBk4FF,0CqB/3FI,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,+DAAA,+DrBk4FJ,gDqB73FQ,WAAA,EAAA,EAAA,EAAA,MAAA,mBDzBN,mBCPA,MAAA,QACA,aAAA,QlBrDA,yBkBwDE,MAAA,QACA,iBAAA,QACA,aAAA,QAGF,yBAAA,yBAEE,WAAA,EAAA,EAAA,EAAA,MAAA,qBAGF,4BAAA,4BAEE,MAAA,QACA,iBAAA,YAGF,wDAAA,wDrBk6FF,yCqB/5FI,MAAA,QACA,iBAAA,QACA,aAAA,QAEA,8DAAA,8DrBk6FJ,+CqB75FQ,WAAA,EAAA,EAAA,EAAA,MAAA,qBDzBN,kBCPA,MAAA,QACA,aAAA,QlBrDA,wBkBwDE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,wBAAA,wBAEE,WAAA,EAAA,EAAA,EAAA,MAAA,kBAGF,2BAAA,2BAEE,MAAA,QACA,iBAAA,YAGF,uDAAA,uDrBk8FF,wCqB/7FI,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,6DAAA,6DrBk8FJ,8CqB77FQ,WAAA,EAAA,EAAA,EAAA,MAAA,kBDdR,UACE,YAAA,IACA,MAAA,QACA,gBAAA,KjBzEA,gBiB4EE,MAAA,QACA,gBAAA,UAPJ,gBAAA,gBAYI,gBAAA,UAZJ,mBAAA,mBAiBI,MAAA,QACA,eAAA,KAWJ,mBAAA,QCPE,QAAA,MAAA,KpBuBI,UAAA,QoBrBJ,YAAA,IbxFE,cAAA,MYiGJ,mBAAA,QCXE,QAAA,OAAA,MpBuBI,UAAA,QoBrBJ,YAAA,IbxFE,cAAA,MY0GJ,WACE,QAAA,MACA,MAAA,KAFF,sBAMI,WAAA,MpB48FJ,6BADA,4BoBt8FA,6BAII,MAAA,KE3IJ,MLgBM,WAAA,QAAA,KAAA,OAIA,uCKpBN,MLqBQ,WAAA,MKrBR,iBAII,QAAA,EAIJ,qBAEI,QAAA,KAIJ,YACE,SAAA,SACA,OAAA,EACA,SAAA,OLDI,WAAA,OAAA,KAAA,KAIA,uCKNN,YLOQ,WAAA,MjB8lGR,UACA,UAFA,WuBjnGA,QAIE,SAAA,SAGF,iBACE,YAAA,OCoBE,wBACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAhCJ,WAAA,KAAA,MACA,aAAA,KAAA,MAAA,YACA,cAAA,EACA,YAAA,KAAA,MAAA,YAqDE,8BACE,YAAA,ED1CN,eACE,SAAA,SACA,IAAA,KACA,KAAA,EACA,QAAA,KACA,QAAA,KACA,MAAA,KACA,UAAA,MACA,QAAA,MAAA,EACA,OAAA,QAAA,EAAA,EtBsGI,UAAA,KsBpGJ,MAAA,QACA,WAAA,KACA,WAAA,KACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,gBfdE,cAAA,OeuBA,oBACE,MAAA,KACA,KAAA,EAGF,qBACE,MAAA,EACA,KAAA,KXYF,yBWnBA,uBACE,MAAA,KACA,KAAA,EAGF,wBACE,MAAA,EACA,KAAA,MXYF,yBWnBA,uBACE,MAAA,KACA,KAAA,EAGF,wBACE,MAAA,EACA,KAAA,MXYF,yBWnBA,uBACE,MAAA,KACA,KAAA,EAGF,wBACE,MAAA,EACA,KAAA,MXYF,0BWnBA,uBACE,MAAA,KACA,KAAA,EAGF,wBACE,MAAA,EACA,KAAA,MAON,uBAEI,IAAA,KACA,OAAA,KACA,WAAA,EACA,cAAA,QC/BA,gCACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAzBJ,WAAA,EACA,aAAA,KAAA,MAAA,YACA,cAAA,KAAA,MACA,YAAA,KAAA,MAAA,YA8CE,sCACE,YAAA,EDUN,0BAEI,IAAA,EACA,MAAA,KACA,KAAA,KACA,WAAA,EACA,YAAA,QC7CA,mCACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAlBJ,WAAA,KAAA,MAAA,YACA,aAAA,EACA,cAAA,KAAA,MAAA,YACA,YAAA,KAAA,MAuCE,yCACE,YAAA,EA7BF,mCDmDE,eAAA,EAKN,yBAEI,IAAA,EACA,MAAA,KACA,KAAA,KACA,WAAA,EACA,aAAA,QC9DA,kCACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAJF,kCAgBI,QAAA,KAGF,mCACE,QAAA,aACA,aAAA,OACA,eAAA,OACA,QAAA,GA9BN,WAAA,KAAA,MAAA,YACA,aAAA,KAAA,MACA,cAAA,KAAA,MAAA,YAiCE,wCACE,YAAA,EAVA,mCDiDA,eAAA,EAON,oCAAA,kCAAA,mCAAA,iCAKI,MAAA,KACA,OAAA,KAKJ,kBE9GE,OAAA,EACA,OAAA,MAAA,EACA,SAAA,OACA,WAAA,IAAA,MAAA,QFkHF,eACE,QAAA,MACA,MAAA,KACA,QAAA,OAAA,OACA,MAAA,KACA,YAAA,IACA,MAAA,QACA,WAAA,QAEA,YAAA,OACA,iBAAA,YACA,OAAA,EpBrHA,qBAAA,qBoBoIE,MAAA,QACA,gBAAA,KJ/IA,iBAAA,QIoHJ,sBAAA,sBAiCI,MAAA,KACA,gBAAA,KJtJA,iBAAA,QIoHJ,wBAAA,wBAwCI,MAAA,QACA,eAAA,KACA,iBAAA,YAQJ,oBACE,QAAA,MAIF,iBACE,QAAA,MACA,QAAA,MAAA,OACA,cAAA,EtBrDI,UAAA,QsBuDJ,MAAA,QACA,YAAA,OAIF,oBACE,QAAA,MACA,QAAA,OAAA,OACA,MAAA,QG3LF,W1Bu2GA,oB0Br2GE,SAAA,SACA,QAAA,mBAAA,QAAA,YACA,eAAA,O1B22GF,yB0B/2GA,gBAOI,SAAA,SACA,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,K1B82GJ,+BG72GE,sBuBII,QAAA,E1Bg3GN,gCADA,gCADA,+B0B33GA,uBAAA,uBAAA,sBAkBM,QAAA,EAMN,aACE,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,cAAA,MAAA,gBAAA,WAHF,0BAMI,MAAA,K1Bi3GJ,wC0B72GA,kCAII,YAAA,K1B82GJ,4C0Bl3GA,uDlBHI,wBAAA,EACA,2BAAA,ER03GJ,6C0Bx3GA,kClBWI,uBAAA,EACA,0BAAA,EkBmBJ,uBACE,cAAA,SACA,aAAA,SAFF,8B1Bq2GA,yCADA,sC0B71GI,YAAA,EAGF,yCACE,aAAA,EAIJ,0CAAA,+BACE,cAAA,QACA,aAAA,QAGF,0CAAA,+BACE,cAAA,OACA,aAAA,OAoBF,oBACE,mBAAA,OAAA,eAAA,OACA,eAAA,MAAA,YAAA,WACA,cAAA,OAAA,gBAAA,OAHF,yB1Bu1GA,+B0Bh1GI,MAAA,K1Bq1GJ,iD0B51GA,2CAYI,WAAA,K1Bq1GJ,qD0Bj2GA,gElBrEI,2BAAA,EACA,0BAAA,ER26GJ,sD0Bv2GA,2ClBnFI,uBAAA,EACA,wBAAA,EkB0HJ,uB1Bq0GA,kC0Bl0GI,cAAA,E1Bu0GJ,4C0B10GA,yC1B40GA,uDADA,oD0Bp0GM,SAAA,SACA,KAAA,cACA,eAAA,KCzJN,aACE,SAAA,SACA,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,eAAA,QAAA,YAAA,QACA,MAAA,K3B2+GF,0BADA,4B2B/+GA,2B3B8+GA,qC2Bn+GI,SAAA,SACA,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,GACA,UAAA,EACA,cAAA,E3Bq/GJ,uCADA,yCADA,wCADA,yCADA,2CADA,0CAJA,wCADA,0C2B1/GA,yC3B8/GA,kDADA,oDADA,mD2Bx+GM,YAAA,K3Bs/GN,sEADA,kC2BzgHA,iCA4BI,QAAA,EA5BJ,mDAiCI,QAAA,E3Bk/GJ,8C2BnhHA,6CnB0CI,uBAAA,EACA,0BAAA,EmB3CJ,0BA4CI,QAAA,YAAA,QAAA,KACA,eAAA,OAAA,YAAA,O3Bm/GJ,+D2BhiHA,8DnB0CI,uBAAA,EACA,0BAAA,ER4/GJ,0FADA,kE2BtiHA,iEnB4BI,wBAAA,EACA,2BAAA,ERihHJ,uFADA,+D2B7iHA,8DnB4BI,wBAAA,EACA,2BAAA,ERuhHJ,oB2Bz+GA,qBAEE,QAAA,YAAA,QAAA,K3B6+GF,yB2B/+GA,0BAQI,SAAA,SACA,QAAA,E3B4+GJ,+B2Br/GA,gCAYM,QAAA,E3Bi/GN,8BACA,2CAEA,2CADA,wD2B//GA,+B3B0/GA,4CAEA,4CADA,yD2Bv+GI,YAAA,KAIJ,qBAAuB,aAAA,KACvB,oBAAsB,YAAA,KAQtB,kBACE,QAAA,YAAA,QAAA,KACA,eAAA,OAAA,YAAA,OACA,QAAA,QAAA,OACA,cAAA,E1BSI,UAAA,K0BPJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,WAAA,OACA,YAAA,OACA,iBAAA,QACA,OAAA,IAAA,MAAA,QnB5GE,cAAA,OR8lHJ,uC2B9/GA,oCAkBI,WAAA,E3Bi/GJ,+B2Bv+GA,4CAEE,OAAA,yB3B0+GF,+B2Bv+GA,8B3B2+GA,yCAFA,sDACA,0CAFA,uD2Bl+GE,QAAA,MAAA,K1B1BI,UAAA,Q0B4BJ,YAAA,InBzIE,cAAA,MRonHJ,+B2Bv+GA,4CAEE,OAAA,0B3B0+GF,+B2Bv+GA,8B3B2+GA,yCAFA,sDACA,0CAFA,uD2Bl+GE,QAAA,OAAA,M1B3CI,UAAA,Q0B6CJ,YAAA,InB1JE,cAAA,MmB8JJ,+B3Bu+GA,+B2Br+GE,cAAA,Q3B6+GF,yEACA,sFAHA,4EACA,yFAGA,wFACA,+E2Br+GA,uC3B+9GA,oDQ1nHI,wBAAA,EACA,2BAAA,EmBqKJ,sC3Bg+GA,mDAGA,qEACA,kFAHA,yDACA,sEQ1nHI,uBAAA,EACA,0BAAA,EoBxCJ,gBACE,SAAA,SACA,QAAA,EACA,QAAA,MACA,WAAA,OACA,aAAA,OACA,2BAAA,MAAA,aAAA,MAGF,uBACE,QAAA,mBAAA,QAAA,YACA,aAAA,KAGF,sBACE,SAAA,SACA,KAAA,EACA,QAAA,GACA,MAAA,KACA,OAAA,QACA,QAAA,EANF,4DASI,MAAA,KACA,aAAA,QT3BA,iBAAA,QSiBJ,0DAoBM,WAAA,EAAA,EAAA,EAAA,MAAA,oBApBN,wEAyBI,aAAA,QAzBJ,0EA6BI,MAAA,KACA,iBAAA,QACA,aAAA,QA/BJ,qDAAA,sDAuCM,MAAA,QAvCN,6DAAA,8DA0CQ,iBAAA,QAUR,sBACE,SAAA,SACA,cAAA,EAEA,eAAA,IAJF,8BASI,SAAA,SACA,IAAA,OACA,KAAA,QACA,QAAA,MACA,MAAA,KACA,OAAA,KACA,eAAA,KACA,QAAA,GACA,iBAAA,KACA,OAAA,QAAA,MAAA,IAlBJ,6BAwBI,SAAA,SACA,IAAA,OACA,KAAA,QACA,QAAA,MACA,MAAA,KACA,OAAA,KACA,QAAA,GACA,WAAA,GAAA,CAAA,IAAA,IAAA,UASJ,+CpBjGI,cAAA,OoBiGJ,4EAOM,iBAAA,iNAPN,mFAaM,aAAA,QT1HF,iBAAA,QS6GJ,kFAkBM,iBAAA,8JAlBN,sFT7GI,iBAAA,mBS6GJ,4FT7GI,iBAAA,mBSiJJ,4CAGI,cAAA,IAHJ,yEAQM,iBAAA,6JARN,mFTjJI,iBAAA,mBSyKJ,eACE,aAAA,QADF,6CAKM,KAAA,SACA,MAAA,QACA,eAAA,IAEA,cAAA,MATN,4CAaM,IAAA,mBACA,KAAA,qBACA,MAAA,iBACA,OAAA,iBACA,iBAAA,QAEA,cAAA,MXlLA,WAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,WAAA,CAAA,kBAAA,KAAA,YAAA,WAAA,UAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAAA,WAAA,UAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,WAAA,CAAA,kBAAA,KAAA,YAIA,uCW2JN,4CX1JQ,WAAA,MW0JR,0EA0BM,iBAAA,KACA,kBAAA,mBAAA,UAAA,mBA3BN,oFTzKI,iBAAA,mBSsNJ,eACE,QAAA,aACA,MAAA,KACA,OAAA,2BACA,QAAA,QAAA,QAAA,QAAA,O3BjGI,UAAA,K2BoGJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,eAAA,OACA,WAAA,KAAA,+KAAA,MAAA,OAAA,MAAA,CAAA,IAAA,KAAA,UACA,OAAA,IAAA,MAAA,QpBtNE,cAAA,OoByNF,mBAAA,KAAA,gBAAA,KAAA,WAAA,KAfF,qBAkBI,aAAA,QACA,QAAA,EAKE,WAAA,EAAA,EAAA,EAAA,MAAA,oBAxBN,gCAiCM,MAAA,QACA,iBAAA,KAlCN,yBAAA,qCAwCI,OAAA,KACA,cAAA,OACA,iBAAA,KA1CJ,wBA8CI,MAAA,QACA,iBAAA,QA/CJ,2BAoDI,QAAA,KApDJ,8BAyDI,MAAA,YACA,YAAA,EAAA,EAAA,EAAA,QAIJ,kBACE,OAAA,0BACA,YAAA,OACA,eAAA,OACA,aAAA,M3B/JI,UAAA,Q2BmKN,kBACE,OAAA,yBACA,YAAA,MACA,eAAA,MACA,aAAA,K3BvKI,UAAA,Q2BgLN,aACE,SAAA,SACA,QAAA,aACA,MAAA,KACA,OAAA,2BACA,cAAA,EAGF,mBACE,SAAA,SACA,QAAA,EACA,MAAA,KACA,OAAA,2BACA,OAAA,EACA,SAAA,OACA,QAAA,EAPF,4CAUI,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,MAAA,oB5BumHJ,+C4BlnHA,gDAiBI,iBAAA,QAjBJ,sDAsBM,QAAA,SAtBN,0DA2BI,QAAA,kBAIJ,mBACE,SAAA,SACA,IAAA,EACA,MAAA,EACA,KAAA,EACA,QAAA,EACA,OAAA,2BACA,QAAA,QAAA,OACA,SAAA,OAEA,YAAA,IACA,YAAA,IACA,MAAA,QACA,iBAAA,KACA,OAAA,IAAA,MAAA,QpBlVE,cAAA,OoBoUJ,0BAmBI,SAAA,SACA,IAAA,EACA,MAAA,EACA,OAAA,EACA,QAAA,EACA,QAAA,MACA,OAAA,qBACA,QAAA,QAAA,OACA,YAAA,IACA,MAAA,QACA,QAAA,ST7WA,iBAAA,QS+WA,YAAA,QpBnWA,cAAA,EAAA,OAAA,OAAA,EoB8WJ,cACE,MAAA,KACA,OAAA,OACA,QAAA,EACA,iBAAA,YACA,mBAAA,KAAA,gBAAA,KAAA,WAAA,KALF,oBAQI,QAAA,EARJ,0CAY8B,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,MAAA,oBAZ9B,sCAa8B,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,MAAA,oBAb9B,+BAc8B,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,MAAA,oBAd9B,gCAkBI,OAAA,EAlBJ,oCAsBI,MAAA,KACA,OAAA,KACA,WAAA,QTlZA,iBAAA,QSoZA,OAAA,EpBxYA,cAAA,KSFE,mBAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAAA,WAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YW8YF,mBAAA,KAAA,WAAA,KX1YE,uCW4WN,oCX3WQ,mBAAA,KAAA,WAAA,MW2WR,2CT1XI,iBAAA,QS0XJ,6CAsCI,MAAA,KACA,OAAA,MACA,MAAA,YACA,OAAA,QACA,iBAAA,QACA,aAAA,YpBzZA,cAAA,KoB8WJ,gCAiDI,MAAA,KACA,OAAA,KT5aA,iBAAA,QS8aA,OAAA,EpBlaA,cAAA,KSFE,gBAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAAA,WAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YWwaF,gBAAA,KAAA,WAAA,KXpaE,uCW4WN,gCX3WQ,gBAAA,KAAA,WAAA,MW2WR,uCT1XI,iBAAA,QS0XJ,gCAgEI,MAAA,KACA,OAAA,MACA,MAAA,YACA,OAAA,QACA,iBAAA,QACA,aAAA,YpBnbA,cAAA,KoB8WJ,yBA2EI,MAAA,KACA,OAAA,KACA,WAAA,EACA,aAAA,MACA,YAAA,MTzcA,iBAAA,QS2cA,OAAA,EpB/bA,cAAA,KSFE,eAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAAA,WAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YWqcF,WAAA,KXjcE,uCW4WN,yBX3WQ,eAAA,KAAA,WAAA,MW2WR,gCT1XI,iBAAA,QS0XJ,yBA6FI,MAAA,KACA,OAAA,MACA,MAAA,YACA,OAAA,QACA,iBAAA,YACA,aAAA,YACA,aAAA,MAnGJ,8BAwGI,iBAAA,QpBtdA,cAAA,KoB8WJ,8BA6GI,aAAA,KACA,iBAAA,QpB5dA,cAAA,KoB8WJ,6CAoHM,iBAAA,QApHN,sDAwHM,OAAA,QAxHN,yCA4HM,iBAAA,QA5HN,yCAgIM,OAAA,QAhIN,kCAoIM,iBAAA,QAKN,8B5BknHA,mBACA,eiB5mIM,WAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCWqfN,8B5BynHE,mBACA,eiB9mIM,WAAA,MYhBR,KACE,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,aAAA,EACA,cAAA,EACA,WAAA,KAGF,UACE,QAAA,MACA,QAAA,MAAA,K1BCA,gBAAA,gB0BGE,gBAAA,KANJ,mBAWI,MAAA,QACA,eAAA,KACA,OAAA,QAQJ,UACE,cAAA,IAAA,MAAA,QADF,oBAII,cAAA,KACA,OAAA,IAAA,MAAA,YrBZA,uBAAA,OACA,wBAAA,OLZF,0BAAA,0B0B2BI,aAAA,QAAA,QAAA,QATN,6BAaM,MAAA,QACA,iBAAA,YACA,aAAA,Y7BsoIN,mC6BrpIA,2BAqBI,MAAA,QACA,iBAAA,KACA,aAAA,QAAA,QAAA,KAvBJ,yBA4BI,WAAA,KrBnCA,uBAAA,EACA,wBAAA,EqB6CJ,qBrBvDI,cAAA,OqBuDJ,4B7B+nIA,2B6BxnII,MAAA,KACA,iBAAA,Q7B6nIJ,oB6BpnIA,oBAGI,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,WAAA,O7BunIJ,yB6BnnIA,yBAGI,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,WAAA,OASJ,uBAEI,QAAA,KAFJ,qBAKI,QAAA,MCpGJ,QACE,SAAA,SACA,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,eAAA,OAAA,YAAA,OACA,cAAA,QAAA,gBAAA,cACA,QAAA,MAAA,KANF,mB9BkuIA,yBAAwE,sBAAvB,sBAAvB,sBAAqE,sB8BvtI3F,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,eAAA,OAAA,YAAA,OACA,cAAA,QAAA,gBAAA,cAoBJ,cACE,QAAA,aACA,YAAA,SACA,eAAA,SACA,aAAA,K7BwEI,UAAA,Q6BtEJ,YAAA,QACA,YAAA,O3B1CA,oBAAA,oB2B6CE,gBAAA,KASJ,YACE,QAAA,YAAA,QAAA,KACA,mBAAA,OAAA,eAAA,OACA,aAAA,EACA,cAAA,EACA,WAAA,KALF,sBAQI,cAAA,EACA,aAAA,EATJ,2BAaI,SAAA,OACA,MAAA,KASJ,aACE,QAAA,aACA,YAAA,MACA,eAAA,MAYF,iBACE,wBAAA,KAAA,WAAA,KACA,kBAAA,EAAA,UAAA,EAGA,eAAA,OAAA,YAAA,OAIF,gBACE,QAAA,OAAA,O7BSI,UAAA,Q6BPJ,YAAA,EACA,iBAAA,YACA,OAAA,IAAA,MAAA,YtBxGE,cAAA,OLFF,sBAAA,sB2B8GE,gBAAA,KAMJ,qBACE,QAAA,aACA,MAAA,MACA,OAAA,MACA,eAAA,OACA,QAAA,GACA,WAAA,GAAA,CAAA,KAAA,KAAA,UAGF,mBACE,WAAA,KACA,WAAA,KlBtEE,4BkBgFC,6B9BmrIH,mCAA4G,gCAAnC,gCAAnC,gCAAyG,gC8BhrIvI,cAAA,EACA,aAAA,GlBjGN,yBkB6FA,kBAoBI,cAAA,IAAA,OAAA,UAAA,IAAA,OACA,cAAA,MAAA,gBAAA,WArBH,8BAwBK,mBAAA,IAAA,eAAA,IAxBL,6CA2BO,SAAA,SA3BP,wCA+BO,cAAA,MACA,aAAA,MAhCP,6B9B4sIH,mCAA4G,gCAAnC,gCAAnC,gCAAyG,gC8BtqIvI,cAAA,OAAA,UAAA,OAtCL,qCAqDK,SAAA,QArDL,mCAyDK,QAAA,sBAAA,QAAA,eAGA,wBAAA,KAAA,WAAA,KA5DL,kCAgEK,QAAA,MlBhJN,4BkBgFC,6B9BguIH,mCAA4G,gCAAnC,gCAAnC,gCAAyG,gC8B7tIvI,cAAA,EACA,aAAA,GlBjGN,yBkB6FA,kBAoBI,cAAA,IAAA,OAAA,UAAA,IAAA,OACA,cAAA,MAAA,gBAAA,WArBH,8BAwBK,mBAAA,IAAA,eAAA,IAxBL,6CA2BO,SAAA,SA3BP,wCA+BO,cAAA,MACA,aAAA,MAhCP,6B9ByvIH,mCAA4G,gCAAnC,gCAAnC,gCAAyG,gC8BntIvI,cAAA,OAAA,UAAA,OAtCL,qCAqDK,SAAA,QArDL,mCAyDK,QAAA,sBAAA,QAAA,eAGA,wBAAA,KAAA,WAAA,KA5DL,kCAgEK,QAAA,MlBhJN,4BkBgFC,6B9B6wIH,mCAA4G,gCAAnC,gCAAnC,gCAAyG,gC8B1wIvI,cAAA,EACA,aAAA,GlBjGN,yBkB6FA,kBAoBI,cAAA,IAAA,OAAA,UAAA,IAAA,OACA,cAAA,MAAA,gBAAA,WArBH,8BAwBK,mBAAA,IAAA,eAAA,IAxBL,6CA2BO,SAAA,SA3BP,wCA+BO,cAAA,MACA,aAAA,MAhCP,6B9BsyIH,mCAA4G,gCAAnC,gCAAnC,gCAAyG,gC8BhwIvI,cAAA,OAAA,UAAA,OAtCL,qCAqDK,SAAA,QArDL,mCAyDK,QAAA,sBAAA,QAAA,eAGA,wBAAA,KAAA,WAAA,KA5DL,kCAgEK,QAAA,MlBhJN,6BkBgFC,6B9B0zIH,mCAA4G,gCAAnC,gCAAnC,gCAAyG,gC8BvzIvI,cAAA,EACA,aAAA,GlBjGN,0BkB6FA,kBAoBI,cAAA,IAAA,OAAA,UAAA,IAAA,OACA,cAAA,MAAA,gBAAA,WArBH,8BAwBK,mBAAA,IAAA,eAAA,IAxBL,6CA2BO,SAAA,SA3BP,wCA+BO,cAAA,MACA,aAAA,MAhCP,6B9Bm1IH,mCAA4G,gCAAnC,gCAAnC,gCAAyG,gC8B7yIvI,cAAA,OAAA,UAAA,OAtCL,qCAqDK,SAAA,QArDL,mCAyDK,QAAA,sBAAA,QAAA,eAGA,wBAAA,KAAA,WAAA,KA5DL,kCAgEK,QAAA,MArEV,eAyBQ,cAAA,IAAA,OAAA,UAAA,IAAA,OACA,cAAA,MAAA,gBAAA,WA1BR,0B9Bk3IA,gCAAmG,6BAAhC,6BAAhC,6BAAgG,6B8B12IzH,cAAA,EACA,aAAA,EATV,2BA6BU,mBAAA,IAAA,eAAA,IA7BV,0CAgCY,SAAA,SAhCZ,qCAoCY,cAAA,MACA,aAAA,MArCZ,0B9Bs4IA,gCAAmG,6BAAhC,6BAAhC,6BAAgG,6B8B31IzH,cAAA,OAAA,UAAA,OA3CV,kCA0DU,SAAA,QA1DV,gCA8DU,QAAA,sBAAA,QAAA,eAGA,wBAAA,KAAA,WAAA,KAjEV,+BAqEU,QAAA,KAaV,4BAEI,MAAA,e3BxNF,kCAAA,kC2B2NI,MAAA,eALN,oCAWM,MAAA,e3BjOJ,0CAAA,0C2BoOM,MAAA,eAdR,6CAkBQ,MAAA,e9B20IR,4CAEA,2CADA,yC8B91IA,0CA0BM,MAAA,eA1BN,8BA+BI,MAAA,eACA,aAAA,eAhCJ,mCAoCI,iBAAA,kQApCJ,2BAwCI,MAAA,eAxCJ,6BA0CM,MAAA,e3BhQJ,mCAAA,mC2BmQM,MAAA,eAOR,2BAEI,MAAA,K3B5QF,iCAAA,iC2B+QI,MAAA,KALN,mCAWM,MAAA,qB3BrRJ,yCAAA,yC2BwRM,MAAA,sBAdR,4CAkBQ,MAAA,sB9Bu0IR,2CAEA,0CADA,wC8B11IA,yCA0BM,MAAA,KA1BN,6BA+BI,MAAA,qBACA,aAAA,qBAhCJ,kCAoCI,iBAAA,wQApCJ,0BAwCI,MAAA,qBAxCJ,4BA0CM,MAAA,K3BpTJ,kCAAA,kC2BuTM,MAAA,KCnUR,MACE,SAAA,SACA,QAAA,YAAA,QAAA,KACA,mBAAA,OAAA,eAAA,OACA,UAAA,EAEA,UAAA,WACA,iBAAA,KACA,gBAAA,WACA,OAAA,IAAA,MAAA,iBvBKE,cAAA,OuBdJ,SAaI,aAAA,EACA,YAAA,EAdJ,kBAkBI,WAAA,QACA,cAAA,QAnBJ,8BAsBM,iBAAA,EvBCF,uBAAA,mBACA,wBAAA,mBuBxBJ,6BA2BM,oBAAA,EvBUF,2BAAA,mBACA,0BAAA,mBuBtCJ,+B/B+qJA,+B+B3oJI,WAAA,EAIJ,WAGE,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAGA,WAAA,IACA,QAAA,QAIF,YACE,cAAA,OAGF,eACE,WAAA,SACA,cAAA,EAGF,sBACE,cAAA,E5BrDA,iB4B0DE,gBAAA,KAFJ,sBAMI,YAAA,QAQJ,aACE,QAAA,OAAA,QACA,cAAA,EAEA,iBAAA,gBACA,cAAA,IAAA,MAAA,iBALF,yBvBhEI,cAAA,mBAAA,mBAAA,EAAA,EuB4EJ,aACE,QAAA,OAAA,QAEA,iBAAA,gBACA,WAAA,IAAA,MAAA,iBAJF,wBvB5EI,cAAA,EAAA,EAAA,mBAAA,mBuB4FJ,kBACE,aAAA,SACA,cAAA,QACA,YAAA,SACA,cAAA,EAGF,mBACE,aAAA,SACA,YAAA,SAIF,kBACE,SAAA,SACA,IAAA,EACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,QvB/GE,cAAA,mBuBmHJ,U/B2nJA,iBADA,c+BvnJE,kBAAA,EAAA,YAAA,EACA,MAAA,KAGF,U/B2nJA,cQ5uJI,uBAAA,mBACA,wBAAA,mBuBqHJ,U/B4nJA,iBQpuJI,2BAAA,mBACA,0BAAA,mBuB+GJ,iBAEI,cAAA,KnB/FA,yBmB6FJ,WAMI,QAAA,YAAA,QAAA,KACA,cAAA,IAAA,KAAA,UAAA,IAAA,KACA,aAAA,MACA,YAAA,MATJ,iBAaM,SAAA,EAAA,EAAA,GAAA,KAAA,EAAA,EAAA,GACA,aAAA,KACA,cAAA,EACA,YAAA,MAUN,kBAII,cAAA,KnB3HA,yBmBuHJ,YAQI,QAAA,YAAA,QAAA,KACA,cAAA,IAAA,KAAA,UAAA,IAAA,KATJ,kBAcM,SAAA,EAAA,EAAA,GAAA,KAAA,EAAA,EAAA,GACA,cAAA,EAfN,wBAkBQ,YAAA,EACA,YAAA,EAnBR,mCvBjJI,wBAAA,EACA,2BAAA,ER8xJF,gD+B9oJF,iDA8BY,wBAAA,E/BonJV,gD+BlpJF,oDAmCY,2BAAA,EAnCZ,oCvBnII,uBAAA,EACA,0BAAA,ER4xJF,iD+B1pJF,kDA6CY,uBAAA,E/BinJV,iD+B9pJF,qDAkDY,0BAAA,GAaZ,oBAEI,cAAA,OnBxLA,yBmBsLJ,cAMI,qBAAA,EAAA,kBAAA,EAAA,aAAA,EACA,mBAAA,QAAA,gBAAA,QAAA,WAAA,QACA,QAAA,EACA,OAAA,EATJ,oBAYM,QAAA,aACA,MAAA,MAUN,WACE,gBAAA,KADF,iBAII,SAAA,OAJJ,oCAOM,cAAA,EvBvOF,2BAAA,EACA,0BAAA,EuB+NJ,qCvB9OI,uBAAA,EACA,wBAAA,EuB6OJ,8BvBvPI,cAAA,EuBwQE,cAAA,KC1RN,YACE,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,QAAA,OAAA,KACA,cAAA,KAEA,WAAA,KACA,iBAAA,QxBWE,cAAA,OwBPJ,kCAGI,aAAA,MAHJ,0CAMM,MAAA,KACA,cAAA,MACA,MAAA,QACA,QAAA,IATN,gDAoBI,gBAAA,UApBJ,gDAwBI,gBAAA,KAxBJ,wBA4BI,MAAA,QCvCJ,YACE,QAAA,YAAA,QAAA,K5BGA,aAAA,EACA,WAAA,KGaE,cAAA,OyBZJ,WACE,SAAA,SACA,QAAA,MACA,QAAA,MAAA,OACA,YAAA,KACA,YAAA,KACA,MAAA,QAEA,iBAAA,KACA,OAAA,IAAA,MAAA,QATF,iBAYI,QAAA,EACA,MAAA,QACA,gBAAA,KACA,iBAAA,QACA,aAAA,QAhBJ,iBAoBI,QAAA,EACA,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBAIJ,kCAGM,YAAA,EzBaF,uBAAA,OACA,0BAAA,OyBjBJ,iCzBEI,wBAAA,OACA,2BAAA,OyBHJ,6BAcI,QAAA,EACA,MAAA,KACA,iBAAA,QACA,aAAA,QAjBJ,+BAqBI,MAAA,QACA,eAAA,KAEA,OAAA,KACA,iBAAA,KACA,aAAA,QCvDF,0BACE,QAAA,OAAA,OjC2HE,UAAA,QiCzHF,YAAA,IAKE,iD1BqCF,uBAAA,MACA,0BAAA,M0BjCE,gD1BkBF,wBAAA,MACA,2BAAA,M0BhCF,0BACE,QAAA,OAAA,MjC2HE,UAAA,QiCzHF,YAAA,IAKE,iD1BqCF,uBAAA,MACA,0BAAA,M0BjCE,gD1BkBF,wBAAA,MACA,2BAAA,M2B9BJ,OACE,QAAA,aACA,QAAA,MAAA,KlCiEE,UAAA,IkC/DF,YAAA,IACA,YAAA,EACA,WAAA,OACA,YAAA,OACA,eAAA,S3BKE,cAAA,OSFE,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCkBfN,OlBgBQ,WAAA,MdLN,cAAA,cgCGI,gBAAA,KAdN,aAoBI,QAAA,KAKJ,YACE,SAAA,SACA,IAAA,KAOF,YACE,cAAA,KACA,aAAA,K3BvBE,cAAA,M2BgCF,eCjDA,MAAA,KACA,iBAAA,QjCcA,sBAAA,sBiCVI,MAAA,KACA,iBAAA,QAHI,sBAAA,sBAQJ,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,MAAA,mBDqCJ,iBCjDA,MAAA,KACA,iBAAA,QjCcA,wBAAA,wBiCVI,MAAA,KACA,iBAAA,QAHI,wBAAA,wBAQJ,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,MAAA,qBDqCJ,eCjDA,MAAA,KACA,iBAAA,QjCcA,sBAAA,sBiCVI,MAAA,KACA,iBAAA,QAHI,sBAAA,sBAQJ,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,MAAA,mBDqCJ,YCjDA,MAAA,KACA,iBAAA,QjCcA,mBAAA,mBiCVI,MAAA,KACA,iBAAA,QAHI,mBAAA,mBAQJ,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,MAAA,oBDqCJ,eCjDA,MAAA,QACA,iBAAA,QjCcA,sBAAA,sBiCVI,MAAA,QACA,iBAAA,QAHI,sBAAA,sBAQJ,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,MAAA,mBDqCJ,cCjDA,MAAA,KACA,iBAAA,QjCcA,qBAAA,qBiCVI,MAAA,KACA,iBAAA,QAHI,qBAAA,qBAQJ,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,MAAA,mBDqCJ,aCjDA,MAAA,QACA,iBAAA,QjCcA,oBAAA,oBiCVI,MAAA,QACA,iBAAA,QAHI,oBAAA,oBAQJ,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,MAAA,qBDqCJ,YCjDA,MAAA,KACA,iBAAA,QjCcA,mBAAA,mBiCVI,MAAA,KACA,iBAAA,QAHI,mBAAA,mBAQJ,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,MAAA,kBCbN,WACE,QAAA,KAAA,KACA,cAAA,KAEA,iBAAA,Q7BcE,cAAA,MI0CA,yByB5DJ,WAQI,QAAA,KAAA,MAIJ,iBACE,cAAA,EACA,aAAA,E7BIE,cAAA,E8BdJ,OACE,SAAA,SACA,QAAA,OAAA,QACA,cAAA,KACA,OAAA,IAAA,MAAA,Y9BUE,cAAA,O8BLJ,eAEE,MAAA,QAIF,YACE,YAAA,IAQF,mBACE,cAAA,KADF,0BAKI,SAAA,SACA,IAAA,EACA,MAAA,EACA,QAAA,EACA,QAAA,OAAA,QACA,MAAA,QAUF,eC/CA,MAAA,QpBKE,iBAAA,QoBHF,aAAA,QAEA,kBACE,iBAAA,QAGF,2BACE,MAAA,QDsCF,iBC/CA,MAAA,QpBKE,iBAAA,QoBHF,aAAA,QAEA,oBACE,iBAAA,QAGF,6BACE,MAAA,QDsCF,eC/CA,MAAA,QpBKE,iBAAA,QoBHF,aAAA,QAEA,kBACE,iBAAA,QAGF,2BACE,MAAA,QDsCF,YC/CA,MAAA,QpBKE,iBAAA,QoBHF,aAAA,QAEA,eACE,iBAAA,QAGF,wBACE,MAAA,QDsCF,eC/CA,MAAA,QpBKE,iBAAA,QoBHF,aAAA,QAEA,kBACE,iBAAA,QAGF,2BACE,MAAA,QDsCF,cC/CA,MAAA,QpBKE,iBAAA,QoBHF,aAAA,QAEA,iBACE,iBAAA,QAGF,0BACE,MAAA,QDsCF,aC/CA,MAAA,QpBKE,iBAAA,QoBHF,aAAA,QAEA,gBACE,iBAAA,QAGF,yBACE,MAAA,QDsCF,YC/CA,MAAA,QpBKE,iBAAA,QoBHF,aAAA,QAEA,eACE,iBAAA,QAGF,wBACE,MAAA,QCRF,wCACE,KAAO,oBAAA,KAAA,EACP,GAAK,oBAAA,EAAA,GAFP,gCACE,KAAO,oBAAA,KAAA,EACP,GAAK,oBAAA,EAAA,GAIT,UACE,QAAA,YAAA,QAAA,KACA,OAAA,KACA,SAAA,OACA,YAAA,EvCmHI,UAAA,OuCjHJ,iBAAA,QhCIE,cAAA,OgCCJ,cACE,QAAA,YAAA,QAAA,KACA,mBAAA,OAAA,eAAA,OACA,cAAA,OAAA,gBAAA,OACA,SAAA,OACA,MAAA,KACA,WAAA,OACA,YAAA,OACA,iBAAA,QvBXI,WAAA,MAAA,IAAA,KAIA,uCuBDN,cvBEQ,WAAA,MuBUR,sBrBYE,iBAAA,iKqBVA,gBAAA,KAAA,KAIA,uBACE,kBAAA,GAAA,OAAA,SAAA,qBAAA,UAAA,GAAA,OAAA,SAAA,qBAGE,uCAJJ,uBAKM,kBAAA,KAAA,UAAA,MC1CR,OACE,QAAA,YAAA,QAAA,KACA,eAAA,MAAA,YAAA,WAGF,YACE,SAAA,EAAA,KAAA,ECFF,YACE,QAAA,YAAA,QAAA,KACA,mBAAA,OAAA,eAAA,OAGA,aAAA,EACA,cAAA,ElCQE,cAAA,OkCEJ,wBACE,MAAA,KACA,MAAA,QACA,WAAA,QvCPA,8BAAA,8BuCWE,QAAA,EACA,MAAA,QACA,gBAAA,KACA,iBAAA,QAVJ,+BAcI,MAAA,QACA,iBAAA,QASJ,iBACE,SAAA,SACA,QAAA,MACA,QAAA,OAAA,QAGA,iBAAA,KACA,OAAA,IAAA,MAAA,iBAPF,6BlCjBI,uBAAA,QACA,wBAAA,QkCgBJ,4BlCHI,2BAAA,QACA,0BAAA,QkCEJ,0BAAA,0BAmBI,MAAA,QACA,eAAA,KACA,iBAAA,KArBJ,wBA0BI,QAAA,EACA,MAAA,KACA,iBAAA,QACA,aAAA,QA7BJ,kCAiCI,iBAAA,EAjCJ,yCAoCM,WAAA,KACA,iBAAA,IAcF,uBACE,mBAAA,IAAA,eAAA,IADF,oDlCtBA,0BAAA,OAZA,wBAAA,EkCkCA,mDlClCA,wBAAA,OAYA,0BAAA,EkCsBA,+CAeM,WAAA,EAfN,yDAmBM,iBAAA,IACA,kBAAA,EApBN,gEAuBQ,YAAA,KACA,kBAAA,I9B3DR,yB8BmCA,0BACE,mBAAA,IAAA,eAAA,IADF,uDlCtBA,0BAAA,OAZA,wBAAA,EkCkCA,sDlClCA,wBAAA,OAYA,0BAAA,EkCsBA,kDAeM,WAAA,EAfN,4DAmBM,iBAAA,IACA,kBAAA,EApBN,mEAuBQ,YAAA,KACA,kBAAA,K9B3DR,yB8BmCA,0BACE,mBAAA,IAAA,eAAA,IADF,uDlCtBA,0BAAA,OAZA,wBAAA,EkCkCA,sDlClCA,wBAAA,OAYA,0BAAA,EkCsBA,kDAeM,WAAA,EAfN,4DAmBM,iBAAA,IACA,kBAAA,EApBN,mEAuBQ,YAAA,KACA,kBAAA,K9B3DR,yB8BmCA,0BACE,mBAAA,IAAA,eAAA,IADF,uDlCtBA,0BAAA,OAZA,wBAAA,EkCkCA,sDlClCA,wBAAA,OAYA,0BAAA,EkCsBA,kDAeM,WAAA,EAfN,4DAmBM,iBAAA,IACA,kBAAA,EApBN,mEAuBQ,YAAA,KACA,kBAAA,K9B3DR,0B8BmCA,0BACE,mBAAA,IAAA,eAAA,IADF,uDlCtBA,0BAAA,OAZA,wBAAA,EkCkCA,sDlClCA,wBAAA,OAYA,0BAAA,EkCsBA,kDAeM,WAAA,EAfN,4DAmBM,iBAAA,IACA,kBAAA,EApBN,mEAuBQ,YAAA,KACA,kBAAA,KAcZ,kBlCnHI,cAAA,EkCmHJ,mCAII,aAAA,EAAA,EAAA,IAJJ,8CAOM,oBAAA,ECzIJ,yBACE,MAAA,QACA,iBAAA,QxCWF,sDAAA,sDwCPM,MAAA,QACA,iBAAA,QAPN,uDAWM,MAAA,KACA,iBAAA,QACA,aAAA,QAbN,2BACE,MAAA,QACA,iBAAA,QxCWF,wDAAA,wDwCPM,MAAA,QACA,iBAAA,QAPN,yDAWM,MAAA,KACA,iBAAA,QACA,aAAA,QAbN,yBACE,MAAA,QACA,iBAAA,QxCWF,sDAAA,sDwCPM,MAAA,QACA,iBAAA,QAPN,uDAWM,MAAA,KACA,iBAAA,QACA,aAAA,QAbN,sBACE,MAAA,QACA,iBAAA,QxCWF,mDAAA,mDwCPM,MAAA,QACA,iBAAA,QAPN,oDAWM,MAAA,KACA,iBAAA,QACA,aAAA,QAbN,yBACE,MAAA,QACA,iBAAA,QxCWF,sDAAA,sDwCPM,MAAA,QACA,iBAAA,QAPN,uDAWM,MAAA,KACA,iBAAA,QACA,aAAA,QAbN,wBACE,MAAA,QACA,iBAAA,QxCWF,qDAAA,qDwCPM,MAAA,QACA,iBAAA,QAPN,sDAWM,MAAA,KACA,iBAAA,QACA,aAAA,QAbN,uBACE,MAAA,QACA,iBAAA,QxCWF,oDAAA,oDwCPM,MAAA,QACA,iBAAA,QAPN,qDAWM,MAAA,KACA,iBAAA,QACA,aAAA,QAbN,sBACE,MAAA,QACA,iBAAA,QxCWF,mDAAA,mDwCPM,MAAA,QACA,iBAAA,QAPN,oDAWM,MAAA,KACA,iBAAA,QACA,aAAA,QChBR,OACE,MAAA,M3C8HI,UAAA,O2C5HJ,YAAA,IACA,YAAA,EACA,MAAA,KACA,YAAA,EAAA,IAAA,EAAA,KACA,QAAA,GzCKA,ayCDE,MAAA,KACA,gBAAA,KzCIF,2CAAA,2CyCCI,QAAA,IAWN,aACE,QAAA,EACA,iBAAA,YACA,OAAA,EAMF,iBACE,eAAA,KCtCF,OAGE,wBAAA,MAAA,WAAA,MACA,UAAA,M5C2HI,UAAA,Q4CxHJ,iBAAA,sBACA,gBAAA,YACA,OAAA,IAAA,MAAA,eACA,WAAA,EAAA,OAAA,OAAA,eACA,QAAA,ErCOE,cAAA,OqClBJ,wBAeI,cAAA,OAfJ,eAmBI,QAAA,EAnBJ,YAuBI,QAAA,MACA,QAAA,EAxBJ,YA4BI,QAAA,KAIJ,cACE,QAAA,YAAA,QAAA,KACA,eAAA,OAAA,YAAA,OACA,QAAA,OAAA,OACA,MAAA,QACA,iBAAA,sBACA,gBAAA,YACA,cAAA,IAAA,MAAA,gBrCZE,uBAAA,mBACA,wBAAA,mBqCeJ,YACE,QAAA,OCtCF,YAEE,SAAA,OAFF,mBAKI,WAAA,OACA,WAAA,KAKJ,OACE,SAAA,MACA,IAAA,EACA,KAAA,EACA,QAAA,KACA,QAAA,KACA,MAAA,KACA,OAAA,KACA,SAAA,OAGA,QAAA,EAOF,cACE,SAAA,SACA,MAAA,KACA,OAAA,MAEA,eAAA,KAGA,0B7B3BI,WAAA,kBAAA,IAAA,SAAA,WAAA,UAAA,IAAA,SAAA,WAAA,UAAA,IAAA,QAAA,CAAA,kBAAA,IAAA,S6B6BF,kBAAA,mBAAA,UAAA,mB7BzBE,uC6BuBJ,0B7BtBM,WAAA,M6B0BN,0BACE,kBAAA,KAAA,UAAA,KAIF,kCACE,kBAAA,YAAA,UAAA,YAIJ,yBACE,QAAA,YAAA,QAAA,KACA,WAAA,kBAFF,wCAKI,WAAA,mBACA,SAAA,O9CizLJ,uC8CvzLA,uCAWI,kBAAA,EAAA,YAAA,EAXJ,qCAeI,WAAA,KAIJ,uBACE,QAAA,YAAA,QAAA,KACA,eAAA,OAAA,YAAA,OACA,WAAA,kBAHF,+BAOI,QAAA,MACA,OAAA,mBACA,OAAA,oBAAA,OAAA,iBAAA,OAAA,YACA,QAAA,GAVJ,+CAeI,mBAAA,OAAA,eAAA,OACA,cAAA,OAAA,gBAAA,OACA,OAAA,KAjBJ,8DAoBM,WAAA,KApBN,uDAwBM,QAAA,KAMN,eACE,SAAA,SACA,QAAA,YAAA,QAAA,KACA,mBAAA,OAAA,eAAA,OACA,MAAA,KAGA,eAAA,KACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,etClGE,cAAA,MsCsGF,QAAA,EAIF,gBACE,SAAA,MACA,IAAA,EACA,KAAA,EACA,QAAA,KACA,MAAA,MACA,OAAA,MACA,iBAAA,KAPF,qBAUW,QAAA,EAVX,qBAWW,QAAA,GAKX,cACE,QAAA,YAAA,QAAA,KACA,eAAA,MAAA,YAAA,WACA,cAAA,QAAA,gBAAA,cACA,QAAA,KAAA,KACA,cAAA,IAAA,MAAA,QtCtHE,uBAAA,kBACA,wBAAA,kBsCgHJ,qBASI,QAAA,KAAA,KAEA,OAAA,MAAA,MAAA,MAAA,KAKJ,aACE,cAAA,EACA,YAAA,IAKF,YACE,SAAA,SAGA,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,QAAA,KAIF,cACE,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,eAAA,OAAA,YAAA,OACA,cAAA,IAAA,gBAAA,SACA,QAAA,OACA,WAAA,IAAA,MAAA,QtCzIE,2BAAA,kBACA,0BAAA,kBsCkIJ,gBAaI,OAAA,OAKJ,yBACE,SAAA,SACA,IAAA,QACA,MAAA,KACA,OAAA,KACA,SAAA,OlCvIE,yBkCzBJ,cAuKI,UAAA,MACA,OAAA,QAAA,KAlJJ,yBAsJI,WAAA,oBAtJJ,wCAyJM,WAAA,qBAtIN,uBA2II,WAAA,oBA3IJ,+BA8IM,OAAA,qBACA,OAAA,oBAAA,OAAA,iBAAA,OAAA,YAQJ,UAAY,UAAA,OlCvKV,yBkC2KF,U9CwyLA,U8CtyLE,UAAA,OlC7KA,0BkCkLF,UAAY,UAAA,QC7Od,SACE,SAAA,SACA,QAAA,KACA,QAAA,MACA,OAAA,ECJA,YAAA,aAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,mBAEA,WAAA,OACA,YAAA,IACA,YAAA,IACA,WAAA,KACA,WAAA,MACA,gBAAA,KACA,YAAA,KACA,eAAA,KACA,eAAA,OACA,WAAA,OACA,aAAA,OACA,YAAA,OACA,WAAA,K/CgHI,UAAA,Q8CpHJ,UAAA,WACA,QAAA,EAXF,cAaW,QAAA,GAbX,gBAgBI,SAAA,SACA,QAAA,MACA,MAAA,MACA,OAAA,MAnBJ,wBAsBM,SAAA,SACA,QAAA,GACA,aAAA,YACA,aAAA,MAKN,mCAAA,gBACE,QAAA,MAAA,EADF,0CAAA,uBAII,OAAA,EAJJ,kDAAA,+BAOM,IAAA,EACA,aAAA,MAAA,MAAA,EACA,iBAAA,KAKN,qCAAA,kBACE,QAAA,EAAA,MADF,4CAAA,yBAII,KAAA,EACA,MAAA,MACA,OAAA,MANJ,oDAAA,iCASM,MAAA,EACA,aAAA,MAAA,MAAA,MAAA,EACA,mBAAA,KAKN,sCAAA,mBACE,QAAA,MAAA,EADF,6CAAA,0BAII,IAAA,EAJJ,qDAAA,kCAOM,OAAA,EACA,aAAA,EAAA,MAAA,MACA,oBAAA,KAKN,oCAAA,iBACE,QAAA,EAAA,MADF,2CAAA,wBAII,MAAA,EACA,MAAA,MACA,OAAA,MANJ,mDAAA,gCASM,KAAA,EACA,aAAA,MAAA,EAAA,MAAA,MACA,kBAAA,KAqBN,eACE,UAAA,MACA,QAAA,OAAA,MACA,MAAA,KACA,WAAA,OACA,iBAAA,KvC9FE,cAAA,OyClBJ,SACE,SAAA,SACA,IAAA,EACA,KAAA,EACA,QAAA,KACA,QAAA,MACA,UAAA,MDLA,YAAA,aAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,mBAEA,WAAA,OACA,YAAA,IACA,YAAA,IACA,WAAA,KACA,WAAA,MACA,gBAAA,KACA,YAAA,KACA,eAAA,KACA,eAAA,OACA,WAAA,OACA,aAAA,OACA,YAAA,OACA,WAAA,K/CgHI,UAAA,QgDnHJ,UAAA,WACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,ezCGE,cAAA,MyClBJ,gBAoBI,SAAA,SACA,QAAA,MACA,MAAA,KACA,OAAA,MACA,OAAA,EAAA,MAxBJ,uBAAA,wBA4BM,SAAA,SACA,QAAA,MACA,QAAA,GACA,aAAA,YACA,aAAA,MAKN,mCAAA,gBACE,cAAA,MADF,0CAAA,uBAII,OAAA,mBAJJ,kDAAA,+BAOM,OAAA,EACA,aAAA,MAAA,MAAA,EACA,iBAAA,gBATN,iDAAA,8BAaM,OAAA,IACA,aAAA,MAAA,MAAA,EACA,iBAAA,KAKN,qCAAA,kBACE,YAAA,MADF,4CAAA,yBAII,KAAA,mBACA,MAAA,MACA,OAAA,KACA,OAAA,MAAA,EAPJ,oDAAA,iCAUM,KAAA,EACA,aAAA,MAAA,MAAA,MAAA,EACA,mBAAA,gBAZN,mDAAA,gCAgBM,KAAA,IACA,aAAA,MAAA,MAAA,MAAA,EACA,mBAAA,KAKN,sCAAA,mBACE,WAAA,MADF,6CAAA,0BAII,IAAA,mBAJJ,qDAAA,kCAOM,IAAA,EACA,aAAA,EAAA,MAAA,MAAA,MACA,oBAAA,gBATN,oDAAA,iCAaM,IAAA,IACA,aAAA,EAAA,MAAA,MAAA,MACA,oBAAA,KAfN,8DAAA,2CAqBI,SAAA,SACA,IAAA,EACA,KAAA,IACA,QAAA,MACA,MAAA,KACA,YAAA,OACA,QAAA,GACA,cAAA,IAAA,MAAA,QAIJ,oCAAA,iBACE,aAAA,MADF,2CAAA,wBAII,MAAA,mBACA,MAAA,MACA,OAAA,KACA,OAAA,MAAA,EAPJ,mDAAA,gCAUM,MAAA,EACA,aAAA,MAAA,EAAA,MAAA,MACA,kBAAA,gBAZN,kDAAA,+BAgBM,MAAA,IACA,aAAA,MAAA,EAAA,MAAA,MACA,kBAAA,KAsBN,gBACE,QAAA,MAAA,OACA,cAAA,EhD3BI,UAAA,KgD8BJ,iBAAA,QACA,cAAA,IAAA,MAAA,QzCnIE,uBAAA,kBACA,wBAAA,kByC4HJ,sBAUI,QAAA,KAIJ,cACE,QAAA,MAAA,OACA,MAAA,QC3JF,UACE,SAAA,SAGF,wBACE,iBAAA,MAAA,aAAA,MAGF,gBACE,SAAA,SACA,MAAA,KACA,SAAA,OCvBA,uBACE,QAAA,MACA,MAAA,KACA,QAAA,GDwBJ,eACE,SAAA,SACA,QAAA,KACA,MAAA,KACA,MAAA,KACA,aAAA,MACA,4BAAA,OAAA,oBAAA,OjClBI,WAAA,kBAAA,IAAA,YAAA,WAAA,UAAA,IAAA,YAAA,WAAA,UAAA,IAAA,WAAA,CAAA,kBAAA,IAAA,YAIA,uCiCQN,ejCPQ,WAAA,MjB8zMR,oBACA,oBkD9yMA,sBAGE,QAAA,MlDgzMF,4BkD7yMA,6CAEE,kBAAA,iBAAA,UAAA,iBlDizMF,2BkD9yMA,8CAEE,kBAAA,kBAAA,UAAA,kBAQF,8BAEI,QAAA,EACA,oBAAA,QACA,kBAAA,KAAA,UAAA,KlD6yMJ,sDACA,uDkDlzMA,qCAUI,QAAA,EACA,QAAA,EAXJ,0ClDwzMA,2CkDxyMI,QAAA,EACA,QAAA,EjC5DE,WAAA,QAAA,GAAA,IAIA,uCiCuCN,0ClDg0ME,2CiBt2MM,WAAA,MjB42MR,uBkD3yMA,uBAEE,SAAA,SACA,IAAA,EACA,OAAA,EACA,QAAA,EAEA,QAAA,YAAA,QAAA,KACA,eAAA,OAAA,YAAA,OACA,cAAA,OAAA,gBAAA,OACA,MAAA,IACA,MAAA,KACA,WAAA,OACA,QAAA,GjCnFI,WAAA,QAAA,KAAA,KAIA,uCjBi4MJ,uBkD/zMF,uBjCjEQ,WAAA,MjBu4MR,6BADA,6BG34ME,6BAAA,6B+CwFE,MAAA,KACA,gBAAA,KACA,QAAA,EACA,QAAA,GAGJ,uBACE,KAAA,EAKF,uBACE,MAAA,ElDuzMF,4BkDhzMA,4BAEE,QAAA,aACA,MAAA,KACA,OAAA,KACA,WAAA,GAAA,CAAA,KAAA,KAAA,UAEF,4BACE,iBAAA,qMAEF,4BACE,iBAAA,sMASF,qBACE,SAAA,SACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,GACA,QAAA,YAAA,QAAA,KACA,cAAA,OAAA,gBAAA,OACA,aAAA,EAEA,aAAA,IACA,YAAA,IACA,WAAA,KAZF,wBAeI,WAAA,YACA,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,OAAA,IACA,aAAA,IACA,YAAA,IACA,YAAA,OACA,OAAA,QACA,iBAAA,KACA,gBAAA,YAEA,WAAA,KAAA,MAAA,YACA,cAAA,KAAA,MAAA,YACA,QAAA,GjC5JE,WAAA,QAAA,IAAA,KAIA,uCiC4HN,wBjC3HQ,WAAA,MiC2HR,6BAiCI,QAAA,EASJ,kBACE,SAAA,SACA,MAAA,IACA,OAAA,KACA,KAAA,IACA,QAAA,GACA,YAAA,KACA,eAAA,KACA,MAAA,KACA,WAAA,OE/LF,kCACE,GAAK,kBAAA,eAAA,UAAA,gBADP,0BACE,GAAK,kBAAA,eAAA,UAAA,gBAGP,gBACE,QAAA,aACA,MAAA,KACA,OAAA,KACA,eAAA,YACA,OAAA,MAAA,MAAA,aACA,mBAAA,YAEA,cAAA,IACA,kBAAA,KAAA,OAAA,SAAA,eAAA,UAAA,KAAA,OAAA,SAAA,eAGF,mBACE,MAAA,KACA,OAAA,KACA,aAAA,KAOF,gCACE,GACE,kBAAA,SAAA,UAAA,SAEF,IACE,QAAA,EACA,kBAAA,KAAA,UAAA,MANJ,wBACE,GACE,kBAAA,SAAA,UAAA,SAEF,IACE,QAAA,EACA,kBAAA,KAAA,UAAA,MAIJ,cACE,QAAA,aACA,MAAA,KACA,OAAA,KACA,eAAA,YACA,iBAAA,aAEA,cAAA,IACA,QAAA,EACA,kBAAA,KAAA,OAAA,SAAA,aAAA,UAAA,KAAA,OAAA,SAAA,aAGF,iBACE,MAAA,KACA,OAAA,KAIA,uCACE,gBpDmgNF,coDjgNI,2BAAA,KAAA,mBAAA,MC3DN,gBAAqB,eAAA,mBACrB,WAAqB,eAAA,cACrB,cAAqB,eAAA,iBACrB,cAAqB,eAAA,iBACrB,mBAAqB,eAAA,sBACrB,gBAAqB,eAAA,mBCFnB,YACE,iBAAA,kBnDUF,mBAAA,mBHklNF,wBADA,wBsDtlNM,iBAAA,kBANJ,cACE,iBAAA,kBnDUF,qBAAA,qBH4lNF,0BADA,0BsDhmNM,iBAAA,kBANJ,YACE,iBAAA,kBnDUF,mBAAA,mBHsmNF,wBADA,wBsD1mNM,iBAAA,kBANJ,SACE,iBAAA,kBnDUF,gBAAA,gBHgnNF,qBADA,qBsDpnNM,iBAAA,kBANJ,YACE,iBAAA,kBnDUF,mBAAA,mBH0nNF,wBADA,wBsD9nNM,iBAAA,kBANJ,WACE,iBAAA,kBnDUF,kBAAA,kBHooNF,uBADA,uBsDxoNM,iBAAA,kBANJ,UACE,iBAAA,kBnDUF,iBAAA,iBH8oNF,sBADA,sBsDlpNM,iBAAA,kBANJ,SACE,iBAAA,kBnDUF,gBAAA,gBHwpNF,qBADA,qBsD5pNM,iBAAA,kBCCN,UACE,iBAAA,eAGF,gBACE,iBAAA,sBCXF,QAAkB,OAAA,IAAA,MAAA,kBAClB,YAAkB,WAAA,IAAA,MAAA,kBAClB,cAAkB,aAAA,IAAA,MAAA,kBAClB,eAAkB,cAAA,IAAA,MAAA,kBAClB,aAAkB,YAAA,IAAA,MAAA,kBAElB,UAAmB,OAAA,YACnB,cAAmB,WAAA,YACnB,gBAAmB,aAAA,YACnB,iBAAmB,cAAA,YACnB,eAAmB,YAAA,YAGjB,gBACE,aAAA,kBADF,kBACE,aAAA,kBADF,gBACE,aAAA,kBADF,aACE,aAAA,kBADF,gBACE,aAAA,kBADF,eACE,aAAA,kBADF,cACE,aAAA,kBADF,aACE,aAAA,kBAIJ,cACE,aAAA,eAOF,YACE,cAAA,gBAGF,SACE,cAAA,iBAGF,aACE,uBAAA,iBACA,wBAAA,iBAGF,eACE,wBAAA,iBACA,2BAAA,iBAGF,gBACE,2BAAA,iBACA,0BAAA,iBAGF,cACE,uBAAA,iBACA,0BAAA,iBAGF,YACE,cAAA,gBAGF,gBACE,cAAA,cAGF,cACE,cAAA,gBAGF,WACE,cAAA,YLxEA,iBACE,QAAA,MACA,MAAA,KACA,QAAA,GMOE,QAAwB,QAAA,eAAxB,UAAwB,QAAA,iBAAxB,gBAAwB,QAAA,uBAAxB,SAAwB,QAAA,gBAAxB,SAAwB,QAAA,gBAAxB,aAAwB,QAAA,oBAAxB,cAAwB,QAAA,qBAAxB,QAAwB,QAAA,sBAAA,QAAA,eAAxB,eAAwB,QAAA,6BAAA,QAAA,sB7CiD1B,yB6CjDE,WAAwB,QAAA,eAAxB,aAAwB,QAAA,iBAAxB,mBAAwB,QAAA,uBAAxB,YAAwB,QAAA,gBAAxB,YAAwB,QAAA,gBAAxB,gBAAwB,QAAA,oBAAxB,iBAAwB,QAAA,qBAAxB,WAAwB,QAAA,sBAAA,QAAA,eAAxB,kBAAwB,QAAA,6BAAA,QAAA,uB7CiD1B,yB6CjDE,WAAwB,QAAA,eAAxB,aAAwB,QAAA,iBAAxB,mBAAwB,QAAA,uBAAxB,YAAwB,QAAA,gBAAxB,YAAwB,QAAA,gBAAxB,gBAAwB,QAAA,oBAAxB,iBAAwB,QAAA,qBAAxB,WAAwB,QAAA,sBAAA,QAAA,eAAxB,kBAAwB,QAAA,6BAAA,QAAA,uB7CiD1B,yB6CjDE,WAAwB,QAAA,eAAxB,aAAwB,QAAA,iBAAxB,mBAAwB,QAAA,uBAAxB,YAAwB,QAAA,gBAAxB,YAAwB,QAAA,gBAAxB,gBAAwB,QAAA,oBAAxB,iBAAwB,QAAA,qBAAxB,WAAwB,QAAA,sBAAA,QAAA,eAAxB,kBAAwB,QAAA,6BAAA,QAAA,uB7CiD1B,0B6CjDE,WAAwB,QAAA,eAAxB,aAAwB,QAAA,iBAAxB,mBAAwB,QAAA,uBAAxB,YAAwB,QAAA,gBAAxB,YAAwB,QAAA,gBAAxB,gBAAwB,QAAA,oBAAxB,iBAAwB,QAAA,qBAAxB,WAAwB,QAAA,sBAAA,QAAA,eAAxB,kBAAwB,QAAA,6BAAA,QAAA,uBAU9B,aAEI,cAAqB,QAAA,eAArB,gBAAqB,QAAA,iBAArB,sBAAqB,QAAA,uBAArB,eAAqB,QAAA,gBAArB,eAAqB,QAAA,gBAArB,mBAAqB,QAAA,oBAArB,oBAAqB,QAAA,qBAArB,cAAqB,QAAA,sBAAA,QAAA,eAArB,qBAAqB,QAAA,6BAAA,QAAA,uBCrBzB,kBACE,SAAA,SACA,QAAA,MACA,MAAA,KACA,QAAA,EACA,SAAA,OALF,0BAQI,QAAA,MACA,QAAA,GATJ,yC1DqgOA,wBADA,yBAEA,yBACA,wB0Dt/NI,SAAA,SACA,IAAA,EACA,OAAA,EACA,KAAA,EACA,MAAA,KACA,OAAA,KACA,OAAA,EAQF,gCAEI,YAAA,WAFJ,gCAEI,YAAA,OAFJ,+BAEI,YAAA,IAFJ,+BAEI,YAAA,KCzBF,UAAgC,mBAAA,cAAA,eAAA,cAChC,aAAgC,mBAAA,iBAAA,eAAA,iBAChC,kBAAgC,mBAAA,sBAAA,eAAA,sBAChC,qBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,WAA8B,cAAA,eAAA,UAAA,eAC9B,aAA8B,cAAA,iBAAA,UAAA,iBAC9B,mBAA8B,cAAA,uBAAA,UAAA,uBAC9B,WAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,aAA8B,kBAAA,YAAA,UAAA,YAC9B,aAA8B,kBAAA,YAAA,UAAA,YAC9B,eAA8B,kBAAA,YAAA,YAAA,YAC9B,eAA8B,kBAAA,YAAA,YAAA,YAE9B,uBAAoC,cAAA,gBAAA,gBAAA,qBACpC,qBAAoC,cAAA,cAAA,gBAAA,mBACpC,wBAAoC,cAAA,iBAAA,gBAAA,iBACpC,yBAAoC,cAAA,kBAAA,gBAAA,wBACpC,wBAAoC,cAAA,qBAAA,gBAAA,uBAEpC,mBAAiC,eAAA,gBAAA,YAAA,qBACjC,iBAAiC,eAAA,cAAA,YAAA,mBACjC,oBAAiC,eAAA,iBAAA,YAAA,iBACjC,sBAAiC,eAAA,mBAAA,YAAA,mBACjC,qBAAiC,eAAA,kBAAA,YAAA,kBAEjC,qBAAkC,mBAAA,gBAAA,cAAA,qBAClC,mBAAkC,mBAAA,cAAA,cAAA,mBAClC,sBAAkC,mBAAA,iBAAA,cAAA,iBAClC,uBAAkC,mBAAA,kBAAA,cAAA,wBAClC,sBAAkC,mBAAA,qBAAA,cAAA,uBAClC,uBAAkC,mBAAA,kBAAA,cAAA,kBAElC,iBAAgC,oBAAA,eAAA,WAAA,eAChC,kBAAgC,oBAAA,gBAAA,WAAA,qBAChC,gBAAgC,oBAAA,cAAA,WAAA,mBAChC,mBAAgC,oBAAA,iBAAA,WAAA,iBAChC,qBAAgC,oBAAA,mBAAA,WAAA,mBAChC,oBAAgC,oBAAA,kBAAA,WAAA,kB/CYhC,yB+ClDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mB/CYhC,yB+ClDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mB/CYhC,yB+ClDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mB/CYhC,0B+ClDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBC1ChC,YAAwB,MAAA,eACxB,aAAwB,MAAA,gBACxB,YAAwB,MAAA,ehDoDxB,yBgDtDA,eAAwB,MAAA,eACxB,gBAAwB,MAAA,gBACxB,eAAwB,MAAA,gBhDoDxB,yBgDtDA,eAAwB,MAAA,eACxB,gBAAwB,MAAA,gBACxB,eAAwB,MAAA,gBhDoDxB,yBgDtDA,eAAwB,MAAA,eACxB,gBAAwB,MAAA,gBACxB,eAAwB,MAAA,gBhDoDxB,0BgDtDA,eAAwB,MAAA,eACxB,gBAAwB,MAAA,gBACxB,eAAwB,MAAA,gBCL1B,iBAAyB,oBAAA,cAAA,iBAAA,cAAA,YAAA,cAAzB,kBAAyB,oBAAA,eAAA,iBAAA,eAAA,gBAAA,eAAA,YAAA,eAAzB,kBAAyB,oBAAA,eAAA,iBAAA,eAAA,gBAAA,eAAA,YAAA,eCAzB,eAAsB,SAAA,eAAtB,iBAAsB,SAAA,iBCCtB,iBAAyB,SAAA,iBAAzB,mBAAyB,SAAA,mBAAzB,mBAAyB,SAAA,mBAAzB,gBAAyB,SAAA,gBAAzB,iBAAyB,SAAA,yBAAA,SAAA,iBAK3B,WACE,SAAA,MACA,IAAA,EACA,MAAA,EACA,KAAA,EACA,QAAA,KAGF,cACE,SAAA,MACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,KAI4B,2DAD9B,YAEI,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,MCzBJ,SCEE,SAAA,SACA,MAAA,IACA,OAAA,IACA,QAAA,EACA,OAAA,KACA,SAAA,OACA,KAAA,cACA,YAAA,OACA,OAAA,EAUA,0BAAA,yBAEE,SAAA,OACA,MAAA,KACA,OAAA,KACA,SAAA,QACA,KAAA,KACA,YAAA,OC7BJ,WAAa,WAAA,EAAA,QAAA,OAAA,2BACb,QAAU,WAAA,EAAA,MAAA,KAAA,0BACV,WAAa,WAAA,EAAA,KAAA,KAAA,2BACb,aAAe,WAAA,eCCX,MAAuB,MAAA,cAAvB,MAAuB,MAAA,cAAvB,MAAuB,MAAA,cAAvB,OAAuB,MAAA,eAAvB,QAAuB,MAAA,eAAvB,MAAuB,OAAA,cAAvB,MAAuB,OAAA,cAAvB,MAAuB,OAAA,cAAvB,OAAuB,OAAA,eAAvB,QAAuB,OAAA,eAI3B,QAAU,UAAA,eACV,QAAU,WAAA,eAIV,YAAc,UAAA,gBACd,YAAc,WAAA,gBAEd,QAAU,MAAA,gBACV,QAAU,OAAA,gBCTF,KAAgC,OAAA,YAChC,MpE89PR,MoE59PU,WAAA,YAEF,MpE+9PR,MoE79PU,aAAA,YAEF,MpEg+PR,MoE99PU,cAAA,YAEF,MpEi+PR,MoE/9PU,YAAA,YAfF,KAAgC,OAAA,iBAChC,MpEs/PR,MoEp/PU,WAAA,iBAEF,MpEu/PR,MoEr/PU,aAAA,iBAEF,MpEw/PR,MoEt/PU,cAAA,iBAEF,MpEy/PR,MoEv/PU,YAAA,iBAfF,KAAgC,OAAA,gBAChC,MpE8gQR,MoE5gQU,WAAA,gBAEF,MpE+gQR,MoE7gQU,aAAA,gBAEF,MpEghQR,MoE9gQU,cAAA,gBAEF,MpEihQR,MoE/gQU,YAAA,gBAfF,KAAgC,OAAA,eAChC,MpEsiQR,MoEpiQU,WAAA,eAEF,MpEuiQR,MoEriQU,aAAA,eAEF,MpEwiQR,MoEtiQU,cAAA,eAEF,MpEyiQR,MoEviQU,YAAA,eAfF,KAAgC,OAAA,iBAChC,MpE8jQR,MoE5jQU,WAAA,iBAEF,MpE+jQR,MoE7jQU,aAAA,iBAEF,MpEgkQR,MoE9jQU,cAAA,iBAEF,MpEikQR,MoE/jQU,YAAA,iBAfF,KAAgC,OAAA,eAChC,MpEslQR,MoEplQU,WAAA,eAEF,MpEulQR,MoErlQU,aAAA,eAEF,MpEwlQR,MoEtlQU,cAAA,eAEF,MpEylQR,MoEvlQU,YAAA,eAfF,KAAgC,QAAA,YAChC,MpE8mQR,MoE5mQU,YAAA,YAEF,MpE+mQR,MoE7mQU,cAAA,YAEF,MpEgnQR,MoE9mQU,eAAA,YAEF,MpEinQR,MoE/mQU,aAAA,YAfF,KAAgC,QAAA,iBAChC,MpEsoQR,MoEpoQU,YAAA,iBAEF,MpEuoQR,MoEroQU,cAAA,iBAEF,MpEwoQR,MoEtoQU,eAAA,iBAEF,MpEyoQR,MoEvoQU,aAAA,iBAfF,KAAgC,QAAA,gBAChC,MpE8pQR,MoE5pQU,YAAA,gBAEF,MpE+pQR,MoE7pQU,cAAA,gBAEF,MpEgqQR,MoE9pQU,eAAA,gBAEF,MpEiqQR,MoE/pQU,aAAA,gBAfF,KAAgC,QAAA,eAChC,MpEsrQR,MoEprQU,YAAA,eAEF,MpEurQR,MoErrQU,cAAA,eAEF,MpEwrQR,MoEtrQU,eAAA,eAEF,MpEyrQR,MoEvrQU,aAAA,eAfF,KAAgC,QAAA,iBAChC,MpE8sQR,MoE5sQU,YAAA,iBAEF,MpE+sQR,MoE7sQU,cAAA,iBAEF,MpEgtQR,MoE9sQU,eAAA,iBAEF,MpEitQR,MoE/sQU,aAAA,iBAfF,KAAgC,QAAA,eAChC,MpEsuQR,MoEpuQU,YAAA,eAEF,MpEuuQR,MoEruQU,cAAA,eAEF,MpEwuQR,MoEtuQU,eAAA,eAEF,MpEyuQR,MoEvuQU,aAAA,eAQF,MAAwB,OAAA,kBACxB,OpEuuQR,OoEruQU,WAAA,kBAEF,OpEwuQR,OoEtuQU,aAAA,kBAEF,OpEyuQR,OoEvuQU,cAAA,kBAEF,OpE0uQR,OoExuQU,YAAA,kBAfF,MAAwB,OAAA,iBACxB,OpE+vQR,OoE7vQU,WAAA,iBAEF,OpEgwQR,OoE9vQU,aAAA,iBAEF,OpEiwQR,OoE/vQU,cAAA,iBAEF,OpEkwQR,OoEhwQU,YAAA,iBAfF,MAAwB,OAAA,gBACxB,OpEuxQR,OoErxQU,WAAA,gBAEF,OpEwxQR,OoEtxQU,aAAA,gBAEF,OpEyxQR,OoEvxQU,cAAA,gBAEF,OpE0xQR,OoExxQU,YAAA,gBAfF,MAAwB,OAAA,kBACxB,OpE+yQR,OoE7yQU,WAAA,kBAEF,OpEgzQR,OoE9yQU,aAAA,kBAEF,OpEizQR,OoE/yQU,cAAA,kBAEF,OpEkzQR,OoEhzQU,YAAA,kBAfF,MAAwB,OAAA,gBACxB,OpEu0QR,OoEr0QU,WAAA,gBAEF,OpEw0QR,OoEt0QU,aAAA,gBAEF,OpEy0QR,OoEv0QU,cAAA,gBAEF,OpE00QR,OoEx0QU,YAAA,gBAMN,QAAmB,OAAA,eACnB,SpE00QJ,SoEx0QM,WAAA,eAEF,SpE20QJ,SoEz0QM,aAAA,eAEF,SpE40QJ,SoE10QM,cAAA,eAEF,SpE60QJ,SoE30QM,YAAA,exDTF,yBwDlDI,QAAgC,OAAA,YAChC,SpE84QN,SoE54QQ,WAAA,YAEF,SpE84QN,SoE54QQ,aAAA,YAEF,SpE84QN,SoE54QQ,cAAA,YAEF,SpE84QN,SoE54QQ,YAAA,YAfF,QAAgC,OAAA,iBAChC,SpEi6QN,SoE/5QQ,WAAA,iBAEF,SpEi6QN,SoE/5QQ,aAAA,iBAEF,SpEi6QN,SoE/5QQ,cAAA,iBAEF,SpEi6QN,SoE/5QQ,YAAA,iBAfF,QAAgC,OAAA,gBAChC,SpEo7QN,SoEl7QQ,WAAA,gBAEF,SpEo7QN,SoEl7QQ,aAAA,gBAEF,SpEo7QN,SoEl7QQ,cAAA,gBAEF,SpEo7QN,SoEl7QQ,YAAA,gBAfF,QAAgC,OAAA,eAChC,SpEu8QN,SoEr8QQ,WAAA,eAEF,SpEu8QN,SoEr8QQ,aAAA,eAEF,SpEu8QN,SoEr8QQ,cAAA,eAEF,SpEu8QN,SoEr8QQ,YAAA,eAfF,QAAgC,OAAA,iBAChC,SpE09QN,SoEx9QQ,WAAA,iBAEF,SpE09QN,SoEx9QQ,aAAA,iBAEF,SpE09QN,SoEx9QQ,cAAA,iBAEF,SpE09QN,SoEx9QQ,YAAA,iBAfF,QAAgC,OAAA,eAChC,SpE6+QN,SoE3+QQ,WAAA,eAEF,SpE6+QN,SoE3+QQ,aAAA,eAEF,SpE6+QN,SoE3+QQ,cAAA,eAEF,SpE6+QN,SoE3+QQ,YAAA,eAfF,QAAgC,QAAA,YAChC,SpEggRN,SoE9/QQ,YAAA,YAEF,SpEggRN,SoE9/QQ,cAAA,YAEF,SpEggRN,SoE9/QQ,eAAA,YAEF,SpEggRN,SoE9/QQ,aAAA,YAfF,QAAgC,QAAA,iBAChC,SpEmhRN,SoEjhRQ,YAAA,iBAEF,SpEmhRN,SoEjhRQ,cAAA,iBAEF,SpEmhRN,SoEjhRQ,eAAA,iBAEF,SpEmhRN,SoEjhRQ,aAAA,iBAfF,QAAgC,QAAA,gBAChC,SpEsiRN,SoEpiRQ,YAAA,gBAEF,SpEsiRN,SoEpiRQ,cAAA,gBAEF,SpEsiRN,SoEpiRQ,eAAA,gBAEF,SpEsiRN,SoEpiRQ,aAAA,gBAfF,QAAgC,QAAA,eAChC,SpEyjRN,SoEvjRQ,YAAA,eAEF,SpEyjRN,SoEvjRQ,cAAA,eAEF,SpEyjRN,SoEvjRQ,eAAA,eAEF,SpEyjRN,SoEvjRQ,aAAA,eAfF,QAAgC,QAAA,iBAChC,SpE4kRN,SoE1kRQ,YAAA,iBAEF,SpE4kRN,SoE1kRQ,cAAA,iBAEF,SpE4kRN,SoE1kRQ,eAAA,iBAEF,SpE4kRN,SoE1kRQ,aAAA,iBAfF,QAAgC,QAAA,eAChC,SpE+lRN,SoE7lRQ,YAAA,eAEF,SpE+lRN,SoE7lRQ,cAAA,eAEF,SpE+lRN,SoE7lRQ,eAAA,eAEF,SpE+lRN,SoE7lRQ,aAAA,eAQF,SAAwB,OAAA,kBACxB,UpE2lRN,UoEzlRQ,WAAA,kBAEF,UpE2lRN,UoEzlRQ,aAAA,kBAEF,UpE2lRN,UoEzlRQ,cAAA,kBAEF,UpE2lRN,UoEzlRQ,YAAA,kBAfF,SAAwB,OAAA,iBACxB,UpE8mRN,UoE5mRQ,WAAA,iBAEF,UpE8mRN,UoE5mRQ,aAAA,iBAEF,UpE8mRN,UoE5mRQ,cAAA,iBAEF,UpE8mRN,UoE5mRQ,YAAA,iBAfF,SAAwB,OAAA,gBACxB,UpEioRN,UoE/nRQ,WAAA,gBAEF,UpEioRN,UoE/nRQ,aAAA,gBAEF,UpEioRN,UoE/nRQ,cAAA,gBAEF,UpEioRN,UoE/nRQ,YAAA,gBAfF,SAAwB,OAAA,kBACxB,UpEopRN,UoElpRQ,WAAA,kBAEF,UpEopRN,UoElpRQ,aAAA,kBAEF,UpEopRN,UoElpRQ,cAAA,kBAEF,UpEopRN,UoElpRQ,YAAA,kBAfF,SAAwB,OAAA,gBACxB,UpEuqRN,UoErqRQ,WAAA,gBAEF,UpEuqRN,UoErqRQ,aAAA,gBAEF,UpEuqRN,UoErqRQ,cAAA,gBAEF,UpEuqRN,UoErqRQ,YAAA,gBAMN,WAAmB,OAAA,eACnB,YpEqqRF,YoEnqRI,WAAA,eAEF,YpEqqRF,YoEnqRI,aAAA,eAEF,YpEqqRF,YoEnqRI,cAAA,eAEF,YpEqqRF,YoEnqRI,YAAA,gBxDTF,yBwDlDI,QAAgC,OAAA,YAChC,SpEuuRN,SoEruRQ,WAAA,YAEF,SpEuuRN,SoEruRQ,aAAA,YAEF,SpEuuRN,SoEruRQ,cAAA,YAEF,SpEuuRN,SoEruRQ,YAAA,YAfF,QAAgC,OAAA,iBAChC,SpE0vRN,SoExvRQ,WAAA,iBAEF,SpE0vRN,SoExvRQ,aAAA,iBAEF,SpE0vRN,SoExvRQ,cAAA,iBAEF,SpE0vRN,SoExvRQ,YAAA,iBAfF,QAAgC,OAAA,gBAChC,SpE6wRN,SoE3wRQ,WAAA,gBAEF,SpE6wRN,SoE3wRQ,aAAA,gBAEF,SpE6wRN,SoE3wRQ,cAAA,gBAEF,SpE6wRN,SoE3wRQ,YAAA,gBAfF,QAAgC,OAAA,eAChC,SpEgyRN,SoE9xRQ,WAAA,eAEF,SpEgyRN,SoE9xRQ,aAAA,eAEF,SpEgyRN,SoE9xRQ,cAAA,eAEF,SpEgyRN,SoE9xRQ,YAAA,eAfF,QAAgC,OAAA,iBAChC,SpEmzRN,SoEjzRQ,WAAA,iBAEF,SpEmzRN,SoEjzRQ,aAAA,iBAEF,SpEmzRN,SoEjzRQ,cAAA,iBAEF,SpEmzRN,SoEjzRQ,YAAA,iBAfF,QAAgC,OAAA,eAChC,SpEs0RN,SoEp0RQ,WAAA,eAEF,SpEs0RN,SoEp0RQ,aAAA,eAEF,SpEs0RN,SoEp0RQ,cAAA,eAEF,SpEs0RN,SoEp0RQ,YAAA,eAfF,QAAgC,QAAA,YAChC,SpEy1RN,SoEv1RQ,YAAA,YAEF,SpEy1RN,SoEv1RQ,cAAA,YAEF,SpEy1RN,SoEv1RQ,eAAA,YAEF,SpEy1RN,SoEv1RQ,aAAA,YAfF,QAAgC,QAAA,iBAChC,SpE42RN,SoE12RQ,YAAA,iBAEF,SpE42RN,SoE12RQ,cAAA,iBAEF,SpE42RN,SoE12RQ,eAAA,iBAEF,SpE42RN,SoE12RQ,aAAA,iBAfF,QAAgC,QAAA,gBAChC,SpE+3RN,SoE73RQ,YAAA,gBAEF,SpE+3RN,SoE73RQ,cAAA,gBAEF,SpE+3RN,SoE73RQ,eAAA,gBAEF,SpE+3RN,SoE73RQ,aAAA,gBAfF,QAAgC,QAAA,eAChC,SpEk5RN,SoEh5RQ,YAAA,eAEF,SpEk5RN,SoEh5RQ,cAAA,eAEF,SpEk5RN,SoEh5RQ,eAAA,eAEF,SpEk5RN,SoEh5RQ,aAAA,eAfF,QAAgC,QAAA,iBAChC,SpEq6RN,SoEn6RQ,YAAA,iBAEF,SpEq6RN,SoEn6RQ,cAAA,iBAEF,SpEq6RN,SoEn6RQ,eAAA,iBAEF,SpEq6RN,SoEn6RQ,aAAA,iBAfF,QAAgC,QAAA,eAChC,SpEw7RN,SoEt7RQ,YAAA,eAEF,SpEw7RN,SoEt7RQ,cAAA,eAEF,SpEw7RN,SoEt7RQ,eAAA,eAEF,SpEw7RN,SoEt7RQ,aAAA,eAQF,SAAwB,OAAA,kBACxB,UpEo7RN,UoEl7RQ,WAAA,kBAEF,UpEo7RN,UoEl7RQ,aAAA,kBAEF,UpEo7RN,UoEl7RQ,cAAA,kBAEF,UpEo7RN,UoEl7RQ,YAAA,kBAfF,SAAwB,OAAA,iBACxB,UpEu8RN,UoEr8RQ,WAAA,iBAEF,UpEu8RN,UoEr8RQ,aAAA,iBAEF,UpEu8RN,UoEr8RQ,cAAA,iBAEF,UpEu8RN,UoEr8RQ,YAAA,iBAfF,SAAwB,OAAA,gBACxB,UpE09RN,UoEx9RQ,WAAA,gBAEF,UpE09RN,UoEx9RQ,aAAA,gBAEF,UpE09RN,UoEx9RQ,cAAA,gBAEF,UpE09RN,UoEx9RQ,YAAA,gBAfF,SAAwB,OAAA,kBACxB,UpE6+RN,UoE3+RQ,WAAA,kBAEF,UpE6+RN,UoE3+RQ,aAAA,kBAEF,UpE6+RN,UoE3+RQ,cAAA,kBAEF,UpE6+RN,UoE3+RQ,YAAA,kBAfF,SAAwB,OAAA,gBACxB,UpEggSN,UoE9/RQ,WAAA,gBAEF,UpEggSN,UoE9/RQ,aAAA,gBAEF,UpEggSN,UoE9/RQ,cAAA,gBAEF,UpEggSN,UoE9/RQ,YAAA,gBAMN,WAAmB,OAAA,eACnB,YpE8/RF,YoE5/RI,WAAA,eAEF,YpE8/RF,YoE5/RI,aAAA,eAEF,YpE8/RF,YoE5/RI,cAAA,eAEF,YpE8/RF,YoE5/RI,YAAA,gBxDTF,yBwDlDI,QAAgC,OAAA,YAChC,SpEgkSN,SoE9jSQ,WAAA,YAEF,SpEgkSN,SoE9jSQ,aAAA,YAEF,SpEgkSN,SoE9jSQ,cAAA,YAEF,SpEgkSN,SoE9jSQ,YAAA,YAfF,QAAgC,OAAA,iBAChC,SpEmlSN,SoEjlSQ,WAAA,iBAEF,SpEmlSN,SoEjlSQ,aAAA,iBAEF,SpEmlSN,SoEjlSQ,cAAA,iBAEF,SpEmlSN,SoEjlSQ,YAAA,iBAfF,QAAgC,OAAA,gBAChC,SpEsmSN,SoEpmSQ,WAAA,gBAEF,SpEsmSN,SoEpmSQ,aAAA,gBAEF,SpEsmSN,SoEpmSQ,cAAA,gBAEF,SpEsmSN,SoEpmSQ,YAAA,gBAfF,QAAgC,OAAA,eAChC,SpEynSN,SoEvnSQ,WAAA,eAEF,SpEynSN,SoEvnSQ,aAAA,eAEF,SpEynSN,SoEvnSQ,cAAA,eAEF,SpEynSN,SoEvnSQ,YAAA,eAfF,QAAgC,OAAA,iBAChC,SpE4oSN,SoE1oSQ,WAAA,iBAEF,SpE4oSN,SoE1oSQ,aAAA,iBAEF,SpE4oSN,SoE1oSQ,cAAA,iBAEF,SpE4oSN,SoE1oSQ,YAAA,iBAfF,QAAgC,OAAA,eAChC,SpE+pSN,SoE7pSQ,WAAA,eAEF,SpE+pSN,SoE7pSQ,aAAA,eAEF,SpE+pSN,SoE7pSQ,cAAA,eAEF,SpE+pSN,SoE7pSQ,YAAA,eAfF,QAAgC,QAAA,YAChC,SpEkrSN,SoEhrSQ,YAAA,YAEF,SpEkrSN,SoEhrSQ,cAAA,YAEF,SpEkrSN,SoEhrSQ,eAAA,YAEF,SpEkrSN,SoEhrSQ,aAAA,YAfF,QAAgC,QAAA,iBAChC,SpEqsSN,SoEnsSQ,YAAA,iBAEF,SpEqsSN,SoEnsSQ,cAAA,iBAEF,SpEqsSN,SoEnsSQ,eAAA,iBAEF,SpEqsSN,SoEnsSQ,aAAA,iBAfF,QAAgC,QAAA,gBAChC,SpEwtSN,SoEttSQ,YAAA,gBAEF,SpEwtSN,SoEttSQ,cAAA,gBAEF,SpEwtSN,SoEttSQ,eAAA,gBAEF,SpEwtSN,SoEttSQ,aAAA,gBAfF,QAAgC,QAAA,eAChC,SpE2uSN,SoEzuSQ,YAAA,eAEF,SpE2uSN,SoEzuSQ,cAAA,eAEF,SpE2uSN,SoEzuSQ,eAAA,eAEF,SpE2uSN,SoEzuSQ,aAAA,eAfF,QAAgC,QAAA,iBAChC,SpE8vSN,SoE5vSQ,YAAA,iBAEF,SpE8vSN,SoE5vSQ,cAAA,iBAEF,SpE8vSN,SoE5vSQ,eAAA,iBAEF,SpE8vSN,SoE5vSQ,aAAA,iBAfF,QAAgC,QAAA,eAChC,SpEixSN,SoE/wSQ,YAAA,eAEF,SpEixSN,SoE/wSQ,cAAA,eAEF,SpEixSN,SoE/wSQ,eAAA,eAEF,SpEixSN,SoE/wSQ,aAAA,eAQF,SAAwB,OAAA,kBACxB,UpE6wSN,UoE3wSQ,WAAA,kBAEF,UpE6wSN,UoE3wSQ,aAAA,kBAEF,UpE6wSN,UoE3wSQ,cAAA,kBAEF,UpE6wSN,UoE3wSQ,YAAA,kBAfF,SAAwB,OAAA,iBACxB,UpEgySN,UoE9xSQ,WAAA,iBAEF,UpEgySN,UoE9xSQ,aAAA,iBAEF,UpEgySN,UoE9xSQ,cAAA,iBAEF,UpEgySN,UoE9xSQ,YAAA,iBAfF,SAAwB,OAAA,gBACxB,UpEmzSN,UoEjzSQ,WAAA,gBAEF,UpEmzSN,UoEjzSQ,aAAA,gBAEF,UpEmzSN,UoEjzSQ,cAAA,gBAEF,UpEmzSN,UoEjzSQ,YAAA,gBAfF,SAAwB,OAAA,kBACxB,UpEs0SN,UoEp0SQ,WAAA,kBAEF,UpEs0SN,UoEp0SQ,aAAA,kBAEF,UpEs0SN,UoEp0SQ,cAAA,kBAEF,UpEs0SN,UoEp0SQ,YAAA,kBAfF,SAAwB,OAAA,gBACxB,UpEy1SN,UoEv1SQ,WAAA,gBAEF,UpEy1SN,UoEv1SQ,aAAA,gBAEF,UpEy1SN,UoEv1SQ,cAAA,gBAEF,UpEy1SN,UoEv1SQ,YAAA,gBAMN,WAAmB,OAAA,eACnB,YpEu1SF,YoEr1SI,WAAA,eAEF,YpEu1SF,YoEr1SI,aAAA,eAEF,YpEu1SF,YoEr1SI,cAAA,eAEF,YpEu1SF,YoEr1SI,YAAA,gBxDTF,0BwDlDI,QAAgC,OAAA,YAChC,SpEy5SN,SoEv5SQ,WAAA,YAEF,SpEy5SN,SoEv5SQ,aAAA,YAEF,SpEy5SN,SoEv5SQ,cAAA,YAEF,SpEy5SN,SoEv5SQ,YAAA,YAfF,QAAgC,OAAA,iBAChC,SpE46SN,SoE16SQ,WAAA,iBAEF,SpE46SN,SoE16SQ,aAAA,iBAEF,SpE46SN,SoE16SQ,cAAA,iBAEF,SpE46SN,SoE16SQ,YAAA,iBAfF,QAAgC,OAAA,gBAChC,SpE+7SN,SoE77SQ,WAAA,gBAEF,SpE+7SN,SoE77SQ,aAAA,gBAEF,SpE+7SN,SoE77SQ,cAAA,gBAEF,SpE+7SN,SoE77SQ,YAAA,gBAfF,QAAgC,OAAA,eAChC,SpEk9SN,SoEh9SQ,WAAA,eAEF,SpEk9SN,SoEh9SQ,aAAA,eAEF,SpEk9SN,SoEh9SQ,cAAA,eAEF,SpEk9SN,SoEh9SQ,YAAA,eAfF,QAAgC,OAAA,iBAChC,SpEq+SN,SoEn+SQ,WAAA,iBAEF,SpEq+SN,SoEn+SQ,aAAA,iBAEF,SpEq+SN,SoEn+SQ,cAAA,iBAEF,SpEq+SN,SoEn+SQ,YAAA,iBAfF,QAAgC,OAAA,eAChC,SpEw/SN,SoEt/SQ,WAAA,eAEF,SpEw/SN,SoEt/SQ,aAAA,eAEF,SpEw/SN,SoEt/SQ,cAAA,eAEF,SpEw/SN,SoEt/SQ,YAAA,eAfF,QAAgC,QAAA,YAChC,SpE2gTN,SoEzgTQ,YAAA,YAEF,SpE2gTN,SoEzgTQ,cAAA,YAEF,SpE2gTN,SoEzgTQ,eAAA,YAEF,SpE2gTN,SoEzgTQ,aAAA,YAfF,QAAgC,QAAA,iBAChC,SpE8hTN,SoE5hTQ,YAAA,iBAEF,SpE8hTN,SoE5hTQ,cAAA,iBAEF,SpE8hTN,SoE5hTQ,eAAA,iBAEF,SpE8hTN,SoE5hTQ,aAAA,iBAfF,QAAgC,QAAA,gBAChC,SpEijTN,SoE/iTQ,YAAA,gBAEF,SpEijTN,SoE/iTQ,cAAA,gBAEF,SpEijTN,SoE/iTQ,eAAA,gBAEF,SpEijTN,SoE/iTQ,aAAA,gBAfF,QAAgC,QAAA,eAChC,SpEokTN,SoElkTQ,YAAA,eAEF,SpEokTN,SoElkTQ,cAAA,eAEF,SpEokTN,SoElkTQ,eAAA,eAEF,SpEokTN,SoElkTQ,aAAA,eAfF,QAAgC,QAAA,iBAChC,SpEulTN,SoErlTQ,YAAA,iBAEF,SpEulTN,SoErlTQ,cAAA,iBAEF,SpEulTN,SoErlTQ,eAAA,iBAEF,SpEulTN,SoErlTQ,aAAA,iBAfF,QAAgC,QAAA,eAChC,SpE0mTN,SoExmTQ,YAAA,eAEF,SpE0mTN,SoExmTQ,cAAA,eAEF,SpE0mTN,SoExmTQ,eAAA,eAEF,SpE0mTN,SoExmTQ,aAAA,eAQF,SAAwB,OAAA,kBACxB,UpEsmTN,UoEpmTQ,WAAA,kBAEF,UpEsmTN,UoEpmTQ,aAAA,kBAEF,UpEsmTN,UoEpmTQ,cAAA,kBAEF,UpEsmTN,UoEpmTQ,YAAA,kBAfF,SAAwB,OAAA,iBACxB,UpEynTN,UoEvnTQ,WAAA,iBAEF,UpEynTN,UoEvnTQ,aAAA,iBAEF,UpEynTN,UoEvnTQ,cAAA,iBAEF,UpEynTN,UoEvnTQ,YAAA,iBAfF,SAAwB,OAAA,gBACxB,UpE4oTN,UoE1oTQ,WAAA,gBAEF,UpE4oTN,UoE1oTQ,aAAA,gBAEF,UpE4oTN,UoE1oTQ,cAAA,gBAEF,UpE4oTN,UoE1oTQ,YAAA,gBAfF,SAAwB,OAAA,kBACxB,UpE+pTN,UoE7pTQ,WAAA,kBAEF,UpE+pTN,UoE7pTQ,aAAA,kBAEF,UpE+pTN,UoE7pTQ,cAAA,kBAEF,UpE+pTN,UoE7pTQ,YAAA,kBAfF,SAAwB,OAAA,gBACxB,UpEkrTN,UoEhrTQ,WAAA,gBAEF,UpEkrTN,UoEhrTQ,aAAA,gBAEF,UpEkrTN,UoEhrTQ,cAAA,gBAEF,UpEkrTN,UoEhrTQ,YAAA,gBAMN,WAAmB,OAAA,eACnB,YpEgrTF,YoE9qTI,WAAA,eAEF,YpEgrTF,YoE9qTI,aAAA,eAEF,YpEgrTF,YoE9qTI,cAAA,eAEF,YpEgrTF,YoE9qTI,YAAA,gBCjEN,uBAEI,SAAA,SACA,IAAA,EACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,EAEA,eAAA,KACA,QAAA,GAEA,iBAAA,cCVJ,gBAAkB,YAAA,cAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,oBAIlB,cAAiB,WAAA,kBACjB,WAAiB,YAAA,iBACjB,aAAiB,YAAA,iBACjB,eCTE,SAAA,OACA,cAAA,SACA,YAAA,ODeE,WAAwB,WAAA,eACxB,YAAwB,WAAA,gBACxB,aAAwB,WAAA,iB1DqCxB,yB0DvCA,cAAwB,WAAA,eACxB,eAAwB,WAAA,gBACxB,gBAAwB,WAAA,kB1DqCxB,yB0DvCA,cAAwB,WAAA,eACxB,eAAwB,WAAA,gBACxB,gBAAwB,WAAA,kB1DqCxB,yB0DvCA,cAAwB,WAAA,eACxB,eAAwB,WAAA,gBACxB,gBAAwB,WAAA,kB1DqCxB,0B0DvCA,cAAwB,WAAA,eACxB,eAAwB,WAAA,gBACxB,gBAAwB,WAAA,kBAM5B,gBAAmB,eAAA,oBACnB,gBAAmB,eAAA,oBACnB,iBAAmB,eAAA,qBAInB,mBAAuB,YAAA,cACvB,qBAAuB,YAAA,kBACvB,oBAAuB,YAAA,cACvB,kBAAuB,YAAA,cACvB,oBAAuB,YAAA,iBACvB,aAAuB,WAAA,iBAIvB,YAAc,MAAA,eEvCZ,cACE,MAAA,kBrEUF,qBAAA,qBqELM,MAAA,kBANN,gBACE,MAAA,kBrEUF,uBAAA,uBqELM,MAAA,kBANN,cACE,MAAA,kBrEUF,qBAAA,qBqELM,MAAA,kBANN,WACE,MAAA,kBrEUF,kBAAA,kBqELM,MAAA,kBANN,cACE,MAAA,kBrEUF,qBAAA,qBqELM,MAAA,kBANN,aACE,MAAA,kBrEUF,oBAAA,oBqELM,MAAA,kBANN,YACE,MAAA,kBrEUF,mBAAA,mBqELM,MAAA,kBANN,WACE,MAAA,kBrEUF,kBAAA,kBqELM,MAAA,kBFuCR,WAAa,MAAA,kBACb,YAAc,MAAA,kBAEd,eAAiB,MAAA,yBACjB,eAAiB,MAAA,+BAIjB,WGvDE,KAAA,CAAA,CAAA,EAAA,EACA,MAAA,YACA,YAAA,KACA,iBAAA,YACA,OAAA,EHuDF,sBAAwB,gBAAA,eAExB,YACE,WAAA,qBACA,UAAA,qBAKF,YAAc,MAAA,kBIjEd,SACE,WAAA,kBAGF,WACE,WAAA,iBCAA,a5EOF,EC49TE,QADA,S2E59TI,YAAA,eAEA,WAAA,eAGF,YAEI,gBAAA,UASJ,mBACE,QAAA,KAAA,YAAA,I5E8LN,I4E/KM,YAAA,mB3E28TJ,W2Ez8TE,IAEE,OAAA,IAAA,MAAA,QACA,kBAAA,MAQF,MACE,QAAA,mB3Eq8TJ,I2El8TE,GAEE,kBAAA,M3Eo8TJ,GACA,G2El8TE,EAGE,QAAA,EACA,OAAA,EAGF,G3Eg8TF,G2E97TI,iBAAA,MAQF,MACE,KAAA,G5E5CN,K4E+CM,UAAA,gBAEF,WACE,UAAA,gB7C9EN,Q6CmFM,QAAA,KxC/FN,OwCkGM,OAAA,IAAA,MAAA,K7DnGN,O6DuGM,gBAAA,mBADF,U3E07TF,U2Er7TM,iBAAA,e3Ey7TN,mBc5/TF,mB6D0EQ,OAAA,IAAA,MAAA,kB7DWR,Y6DNM,MAAA,Q3Es7TJ,wBAFA,ee1iUA,ef2iUA,qB2E/6TM,aAAA,Q7DlBR,sB6DuBM,MAAA,QACA,aAAA","sourcesContent":["/*!\n * Bootstrap v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"utilities\";\n@import \"print\";\n",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `<th>` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n // making it impossible to interact with the content\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-wrap: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n -ms-flex-order: -1;\n order: -1;\n}\n\n.order-last {\n -ms-flex-order: 13;\n order: 13;\n}\n\n.order-0 {\n -ms-flex-order: 0;\n order: 0;\n}\n\n.order-1 {\n -ms-flex-order: 1;\n order: 1;\n}\n\n.order-2 {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.order-3 {\n -ms-flex-order: 3;\n order: 3;\n}\n\n.order-4 {\n -ms-flex-order: 4;\n order: 4;\n}\n\n.order-5 {\n -ms-flex-order: 5;\n order: 5;\n}\n\n.order-6 {\n -ms-flex-order: 6;\n order: 6;\n}\n\n.order-7 {\n -ms-flex-order: 7;\n order: 7;\n}\n\n.order-8 {\n -ms-flex-order: 8;\n order: 8;\n}\n\n.order-9 {\n -ms-flex-order: 9;\n order: 9;\n}\n\n.order-10 {\n -ms-flex-order: 10;\n order: 10;\n}\n\n.order-11 {\n -ms-flex-order: 11;\n order: 11;\n}\n\n.order-12 {\n -ms-flex-order: 12;\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-sm-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-sm-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-sm-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-sm-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-sm-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-sm-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-sm-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-sm-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-sm-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-sm-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-sm-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-sm-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-sm-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-sm-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-md-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-md-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-md-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-md-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-md-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-md-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-md-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-md-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-md-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-md-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-md-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-md-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-md-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-md-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-lg-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-lg-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-lg-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-lg-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-lg-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-lg-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-lg-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-lg-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-lg-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-lg-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-lg-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-lg-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-lg-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-lg-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-xl-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-xl-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-xl-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-xl-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-xl-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-xl-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-xl-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-xl-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-xl-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-xl-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-xl-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-xl-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-xl-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-xl-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::-webkit-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\ninput[type=\"date\"].form-control,\ninput[type=\"time\"].form-control,\ninput[type=\"datetime-local\"].form-control,\ninput[type=\"month\"].form-control {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n font-size: 1rem;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input[disabled] ~ .form-check-label,\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-align: center;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.form-row > .col > .valid-tooltip,\n.form-row > [class*=\"col-\"] > .valid-tooltip {\n left: 5px;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right 0.75rem center/8px 10px no-repeat, #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat;\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.form-row > .col > .invalid-tooltip,\n.form-row > [class*=\"col-\"] > .invalid-tooltip {\n left: 5px;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right 0.75rem center/8px 10px no-repeat, #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat;\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n -ms-flex-align: center;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\n.btn:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #e9ecef;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #adb5bd;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: -ms-inline-flexbox;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: stretch;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group:not(.has-validation) > .form-control:not(:last-child),\n.input-group:not(.has-validation) > .custom-select:not(:last-child),\n.input-group:not(.has-validation) > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > .form-control:nth-last-child(n + 3),\n.input-group.has-validation > .custom-select:nth-last-child(n + 3),\n.input-group.has-validation > .custom-file:nth-last-child(n + 3) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: -ms-flexbox;\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn,\n.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text,\n.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn,\n.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n z-index: 1;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n -webkit-print-color-adjust: exact;\n color-adjust: exact;\n}\n\n.custom-control-inline {\n display: -ms-inline-flexbox;\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1;\n width: 1rem;\n height: 1.25rem;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: 50% / 50% 50% no-repeat;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n -webkit-transform: translateX(0.75rem);\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right 0.75rem center/8px 10px no-repeat;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n overflow: hidden;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input[disabled] ~ .custom-file-label,\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n overflow: hidden;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: 1.4rem;\n padding: 0;\n background-color: transparent;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: 0;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n -webkit-transition: none;\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -moz-appearance: none;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n -moz-transition: none;\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n -ms-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n -ms-transition: none;\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-link {\n margin-bottom: -1px;\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: justify;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar .container,\n.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: justify;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n -ms-flex-preferred-size: 100%;\n flex-basis: 100%;\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: 50% / 100% 100% no-repeat;\n}\n\n.navbar-nav-scroll {\n max-height: 75vh;\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n min-height: 1px;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n -ms-flex: 1 0 0%;\n flex: 1 0 0%;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n }\n .card-group > .card {\n -ms-flex: 1 0 0%;\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n -webkit-column-count: 3;\n -moz-column-count: 3;\n column-count: 3;\n -webkit-column-gap: 1.25rem;\n -moz-column-gap: 1.25rem;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion {\n overflow-anchor: none;\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:last-of-type) {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card > .card-header {\n border-radius: 0;\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: -ms-flexbox;\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 3;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 3;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: -ms-flexbox;\n display: flex;\n height: 1rem;\n overflow: hidden;\n line-height: 0;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n overflow: hidden;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n -webkit-animation: 1s linear infinite progress-bar-stripes;\n animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n -webkit-animation: none;\n animation: none;\n }\n}\n\n.media {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: start;\n align-items: flex-start;\n}\n\n.media-body {\n -ms-flex: 1;\n flex: 1;\n}\n\n.list-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: 0.25rem;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n margin-top: -1px;\n border-top-width: 1px;\n}\n\n.list-group-horizontal {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n.list-group-flush {\n border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n -ms-flex-preferred-size: 350px;\n flex-basis: 350px;\n max-width: 350px;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: -webkit-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n -webkit-transform: translate(0, -50px);\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n -webkit-transform: none;\n transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n -webkit-transform: scale(1.02);\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n display: -ms-flexbox;\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n height: -webkit-min-content;\n height: -moz-min-content;\n height: min-content;\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-pack: justify;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: end;\n justify-content: flex-end;\n padding: 0.75rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: calc(0.3rem - 1px);\n border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n margin: 0.25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n height: -webkit-min-content;\n height: -moz-min-content;\n height: min-content;\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n -ms-touch-action: pan-y;\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n transition: -webkit-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n -webkit-transform: translateX(100%);\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n -webkit-transform: translateX(-100%);\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n -webkit-transform: none;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: 50% / 100% 100% no-repeat;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n -ms-flex: 0 1 auto;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@-webkit-keyframes spinner-border {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes spinner-border {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n -webkit-animation: .75s linear infinite spinner-border;\n animation: .75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n@keyframes spinner-grow {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n -webkit-animation: .75s linear infinite spinner-grow;\n animation: .75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n -webkit-animation-duration: 1.5s;\n animation-duration: 1.5s;\n }\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n}\n\n.d-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-md-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-print-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n}\n\n.flex-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n}\n\n.justify-content-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n}\n\n.align-items-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n}\n\n.align-items-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n}\n\n.align-items-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n}\n\n.align-items-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n}\n\n.align-content-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n}\n\n.align-content-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n}\n\n.align-content-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n}\n\n.align-content-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n}\n\n.align-content-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n}\n\n.align-self-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n}\n\n.align-self-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n}\n\n.align-self-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n}\n\n.align-self-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n}\n\n.align-self-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-sm-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-sm-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-sm-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-sm-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-sm-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-sm-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-sm-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-sm-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-md-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-md-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-md-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-md-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-md-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-md-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-md-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-md-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-md-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-md-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-md-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-md-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-md-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-md-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-md-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-md-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-lg-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-lg-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-lg-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-lg-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-lg-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-lg-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-lg-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-lg-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-xl-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-xl-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-xl-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-xl-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-xl-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-xl-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-xl-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-xl-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n -moz-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n -moz-user-select: auto !important;\n -ms-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n -ms-user-select: none !important;\n user-select: none !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports ((position: -webkit-sticky) or (position: sticky)) {\n .sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n word-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","/*!\n * Bootstrap v4.6.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-wrap: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\ninput[type=\"date\"].form-control,\ninput[type=\"time\"].form-control,\ninput[type=\"datetime-local\"].form-control,\ninput[type=\"month\"].form-control {\n appearance: none;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n font-size: 1rem;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input[disabled] ~ .form-check-label,\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.form-row > .col > .valid-tooltip,\n.form-row > [class*=\"col-\"] > .valid-tooltip {\n left: 5px;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right 0.75rem center/8px 10px no-repeat, #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat;\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.form-row > .col > .invalid-tooltip,\n.form-row > [class*=\"col-\"] > .invalid-tooltip {\n left: 5px;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right 0.75rem center/8px 10px no-repeat, #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat;\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\n.btn:not(:disabled):not(.disabled) {\n cursor: pointer;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #e9ecef;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #adb5bd;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group:not(.has-validation) > .form-control:not(:last-child),\n.input-group:not(.has-validation) > .custom-select:not(:last-child),\n.input-group:not(.has-validation) > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > .form-control:nth-last-child(n + 3),\n.input-group.has-validation > .custom-select:nth-last-child(n + 3),\n.input-group.has-validation > .custom-file:nth-last-child(n + 3) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn,\n.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text,\n.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn,\n.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n z-index: 1;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n color-adjust: exact;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1;\n width: 1rem;\n height: 1.25rem;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: 50% / 50% 50% no-repeat;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") right 0.75rem center/8px 10px no-repeat;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n overflow: hidden;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input[disabled] ~ .custom-file-label,\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n overflow: hidden;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: 1.4rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: 0;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-link {\n margin-bottom: -1px;\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar .container,\n.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: 50% / 100% 100% no-repeat;\n}\n\n.navbar-nav-scroll {\n max-height: 75vh;\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n min-height: 1px;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n flex-shrink: 0;\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n display: flex;\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n flex: 1 0 0%;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion {\n overflow-anchor: none;\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:last-of-type) {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card > .card-header {\n border-radius: 0;\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 3;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 3;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n line-height: 0;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: 0.25rem;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n margin-top: -1px;\n border-top-width: 1px;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n.list-group-flush {\n border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n flex-basis: 350px;\n max-width: 350px;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n height: min-content;\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: 0.75rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: calc(0.3rem - 1px);\n border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n margin: 0.25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n height: min-content;\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: 50% / 100% 100% no-repeat;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: .75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n animation: .75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n animation-duration: 1.5s;\n }\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n word-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// stylelint-disable selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { @include font-size($h1-font-size); }\nh2, .h2 { @include font-size($h2-font-size); }\nh3, .h3 { @include font-size($h3-font-size); }\nh4, .h4 { @include font-size($h4-font-size); }\nh5, .h5 { @include font-size($h5-font-size); }\nh6, .h6 { @include font-size($h6-font-size); }\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n @include font-size($display1-size);\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n @include font-size($display2-size);\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n @include font-size($display3-size);\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n @include font-size($display4-size);\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n @include font-size($small-font-size);\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size(90%);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n @include font-size($blockquote-font-size);\n}\n\n.blockquote-footer {\n display: block;\n @include font-size($blockquote-small-font-size);\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled() {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer / 2;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid() {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n @include deprecate(\"`img-retina()`\", \"v4.3.0\", \"v5\");\n}\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-right-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-left-radius($radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n","// Inline code\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n @include font-size(100%);\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n @include deprecate(\"The `make-container-max-widths` mixin\", \"v4.5.2\", \"v5\");\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @if $columns > 0 {\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n }\n\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n @if $columns > 0 {\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n margin-bottom: $spacer;\n color: $table-color;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: 2 * $table-border-width;\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover() {\n color: $table-hover-color;\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover() {\n color: $table-dark-hover-color;\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background, $border: null) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n\n @if $border != null {\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $border;\n }\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover() {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n height: $input-height;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on `<select>`s in IE10+.\n &::-ms-expand {\n background-color: transparent;\n border: 0;\n }\n\n // Remove select outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $input-color;\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n @include form-control-focus($ignore-warning: true);\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled,\n &[readonly] {\n background-color: $input-disabled-bg;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n &.form-control {\n appearance: none; // Fix appearance for date inputs in Safari\n }\n}\n\nselect.form-control {\n &:focus::-ms-value {\n // Suppress the nested default white text on blue background highlight given to\n // the selected option text when the (still closed) <select> receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<label>/<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n line-height: $input-line-height;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n line-height: $input-line-height-lg;\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n line-height: $input-line-height-sm;\n}\n\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n @include font-size($input-font-size);\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n line-height: $input-line-height-sm;\n @include border-radius($input-border-radius-sm);\n}\n\n.form-control-lg {\n height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n line-height: $input-line-height-lg;\n @include border-radius($input-border-radius-lg);\n}\n\n// stylelint-disable-next-line no-duplicate-selectors\nselect.form-control {\n &[size],\n &[multiple] {\n height: auto;\n }\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: $form-group-margin-bottom;\n}\n\n.form-text {\n display: block;\n margin-top: $form-text-margin-top;\n}\n\n\n// Form grid\n//\n// Special replacement for our grid system's `.row` for tighter form layouts.\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$form-grid-gutter-width / 2;\n margin-left: -$form-grid-gutter-width / 2;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: $form-grid-gutter-width / 2;\n padding-left: $form-grid-gutter-width / 2;\n }\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.form-check {\n position: relative;\n display: block;\n padding-left: $form-check-input-gutter;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: $form-check-input-margin-y;\n margin-left: -$form-check-input-gutter;\n\n // Use [disabled] and :disabled for workaround https://github.com/twbs/bootstrap/issues/28247\n &[disabled] ~ .form-check-label,\n &:disabled ~ .form-check-label {\n color: $text-muted;\n }\n}\n\n.form-check-label {\n margin-bottom: 0; // Override default `<label>` bottom margin\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0; // Override base .form-check\n margin-right: $form-check-inline-margin-x;\n\n // Undo .form-check-input defaults and add some `margin-right`.\n .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: $form-check-inline-input-margin-x;\n margin-left: 0;\n }\n}\n\n\n// Form validation\n//\n// Provide feedback to users when form field values are valid or invalid. Works\n// primarily for client-side validation via scoped `:invalid` and `:valid`\n// pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for\n// server side validation.\n\n@each $state, $data in $form-validation-states {\n @include form-validation-state($state, map-get($data, color), map-get($data, icon));\n}\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center; // Prevent shorter elements from growing to same height as others (e.g., small buttons growing to normal sized button height)\n\n // Because we use flex, the initial sizing of checkboxes is collapsed and\n // doesn't occupy the full-width (which is what we want for xs grid tier),\n // so we force that here.\n .form-check {\n width: 100%;\n }\n\n // Kick in the inline\n @include media-breakpoint-up(sm) {\n label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n\n // Inline-block all the things for \"inline\"\n .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n\n // Allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n // Make static controls behave like regular ones\n .form-control-plaintext {\n display: inline-block;\n }\n\n .input-group,\n .custom-select {\n width: auto;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match.\n .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: $form-check-input-margin-x;\n margin-left: 0;\n }\n\n .custom-control {\n align-items: center;\n justify-content: center;\n }\n .custom-control-label {\n margin-bottom: 0;\n }\n }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-prefers-reduced-motion-media-query and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `$input-focus-border-color` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n@mixin form-control-focus($ignore-warning: false) {\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n @include deprecate(\"The `form-control-focus()` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n\n// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state($state, $color, $icon) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: color-yiq($color);\n background-color: rgba($color, $form-feedback-tooltip-opacity);\n @include border-radius($form-feedback-tooltip-border-radius);\n\n // See https://github.com/twbs/bootstrap/pull/31557\n // Align tooltip to form elements\n .form-row > .col > &,\n .form-row > [class*=\"col-\"] > & {\n left: $form-grid-gutter-width / 2;\n }\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .custom-select {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $custom-select-feedback-icon-padding-right;\n background: $custom-select-background, $custom-select-bg escape-svg($icon) $custom-select-feedback-icon-position / $custom-select-feedback-icon-size no-repeat;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n ~ .form-check-label {\n color: $color;\n }\n\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n }\n\n .custom-control-input {\n @include form-validation-state-selector($state) {\n ~ .custom-control-label {\n color: $color;\n\n &::before {\n border-color: $color;\n }\n }\n\n &:checked {\n ~ .custom-control-label::before {\n border-color: lighten($color, 10%);\n @include gradient-bg(lighten($color, 10%));\n }\n }\n\n &:focus {\n ~ .custom-control-label::before {\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n\n &:not(:checked) ~ .custom-control-label::before {\n border-color: $color;\n }\n }\n }\n }\n\n // custom file\n .custom-file-input {\n @include form-validation-state-selector($state) {\n ~ .custom-file-label {\n border-color: $color;\n }\n\n &:focus {\n ~ .custom-file-label {\n border-color: $color;\n box-shadow: 0 0 0 $input-focus-width rgba($color, .25);\n }\n }\n }\n }\n}\n","// Gradients\n\n@mixin gradient-bg($color) {\n @if $enable-gradients {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x;\n } @else {\n background-color: $color;\n }\n}\n\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n background-repeat: repeat-x;\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n background-repeat: repeat-x;\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n background-repeat: repeat-x;\n}\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n background-repeat: no-repeat;\n}\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Base styles\n//\n\n.btn {\n display: inline-block;\n font-family: $btn-font-family;\n font-weight: $btn-font-weight;\n color: $body-color;\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n user-select: none;\n background-color: transparent;\n border: $btn-border-width solid transparent;\n @include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-line-height, $btn-border-radius);\n @include transition($btn-transition);\n\n @include hover() {\n color: $body-color;\n text-decoration: none;\n }\n\n &:focus,\n &.focus {\n outline: 0;\n box-shadow: $btn-focus-box-shadow;\n }\n\n // Disabled comes first so active can properly restyle\n &.disabled,\n &:disabled {\n opacity: $btn-disabled-opacity;\n @include box-shadow(none);\n }\n\n &:not(:disabled):not(.disabled) {\n cursor: if($enable-pointer-cursor-for-buttons, pointer, null);\n\n &:active,\n &.active {\n @include box-shadow($btn-active-box-shadow);\n\n &:focus {\n @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);\n }\n }\n }\n}\n\n// Future-proof disabling of clicks on `<a>` elements\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n\n//\n// Alternate buttons\n//\n\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @include button-variant($value, $value);\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n font-weight: $font-weight-normal;\n color: $link-color;\n text-decoration: $link-decoration;\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n\n &:focus,\n &.focus {\n text-decoration: $link-hover-decoration;\n }\n\n &:disabled,\n &.disabled {\n color: $btn-link-disabled-color;\n pointer-events: none;\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-line-height-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-line-height-sm, $btn-border-radius-sm);\n}\n\n\n//\n// Block button\n//\n\n.btn-block {\n display: block;\n width: 100%;\n\n // Vertically space out multiple block buttons\n + .btn-block {\n margin-top: $btn-block-spacing-y;\n }\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n@mixin button-variant($background, $border, $hover-background: darken($background, 7.5%), $hover-border: darken($border, 10%), $active-background: darken($background, 10%), $active-border: darken($border, 12.5%)) {\n color: color-yiq($background);\n @include gradient-bg($background);\n border-color: $border;\n @include box-shadow($btn-box-shadow);\n\n @include hover() {\n color: color-yiq($hover-background);\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n }\n\n &:focus,\n &.focus {\n color: color-yiq($hover-background);\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n @if $enable-shadows {\n @include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);\n }\n }\n\n // Disabled comes first so active can properly restyle\n &.disabled,\n &:disabled {\n color: color-yiq($background);\n background-color: $background;\n border-color: $border;\n // Remove CSS gradients if they're enabled\n @if $enable-gradients {\n background-image: none;\n }\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n @if $enable-gradients {\n background-image: none; // Remove the gradient for the pressed/active state\n }\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows and $btn-active-box-shadow != none {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);\n }\n }\n }\n}\n\n@mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) {\n color: $color;\n border-color: $color;\n\n @include hover() {\n color: $color-hover;\n background-color: $active-background;\n border-color: $active-border;\n }\n\n &:focus,\n &.focus {\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n\n &.disabled,\n &:disabled {\n color: $color;\n background-color: transparent;\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows and $btn-active-box-shadow != none {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n }\n }\n}\n\n// Button sizes\n@mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n line-height: $line-height;\n // Manually declare to provide an override to the browser default\n @include border-radius($border-radius, 0);\n}\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n}\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: $zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: $dropdown-min-width;\n padding: $dropdown-padding-y $dropdown-padding-x;\n margin: $dropdown-spacer 0 0; // override default ul\n @include font-size($dropdown-font-size);\n color: $dropdown-color;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: $dropdown-bg;\n background-clip: padding-box;\n border: $dropdown-border-width solid $dropdown-border-color;\n @include border-radius($dropdown-border-radius);\n @include box-shadow($dropdown-box-shadow);\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-left {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu#{$infix}-right {\n right: 0;\n left: auto;\n }\n }\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropright {\n .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(right);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropleft {\n .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(left);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n// When Popper is enabled, reset the basic dropdown position\n// stylelint-disable-next-line no-duplicate-selectors\n.dropdown-menu {\n &[x-placement^=\"top\"],\n &[x-placement^=\"right\"],\n &[x-placement^=\"bottom\"],\n &[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n }\n}\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n @include nav-divider($dropdown-divider-bg, $dropdown-divider-margin-y, true);\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n clear: both;\n font-weight: $font-weight-normal;\n color: $dropdown-link-color;\n text-align: inherit; // For `<button>`s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n\n // Prevent dropdown overflow if there's no padding\n // See https://github.com/twbs/bootstrap/pull/27703\n @if $dropdown-padding-y == 0 {\n &:first-child {\n @include border-top-radius($dropdown-inner-border-radius);\n }\n\n &:last-child {\n @include border-bottom-radius($dropdown-inner-border-radius);\n }\n }\n\n @include hover-focus() {\n color: $dropdown-link-hover-color;\n text-decoration: none;\n @include gradient-bg($dropdown-link-hover-bg);\n }\n\n &.active,\n &:active {\n color: $dropdown-link-active-color;\n text-decoration: none;\n @include gradient-bg($dropdown-link-active-bg);\n }\n\n &.disabled,\n &:disabled {\n color: $dropdown-link-disabled-color;\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n @if $enable-gradients {\n background-image: none;\n }\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: $dropdown-header-padding;\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: $dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n color: $dropdown-link-color;\n}\n","@mixin caret-down() {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up() {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-right() {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-left() {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down();\n } @else if $direction == up {\n @include caret-up();\n } @else if $direction == right {\n @include caret-right();\n }\n }\n\n @if $direction == left {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @include caret-left();\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n@mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y, $ignore-warning: false) {\n height: 0;\n margin: $margin-y 0;\n overflow: hidden;\n border-top: 1px solid $color;\n @include deprecate(\"The `nav-divider()` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n @include hover() {\n z-index: 1;\n }\n &:focus,\n &:active,\n &.active {\n z-index: 1;\n }\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n // Prevent double borders when buttons are next to each other\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-left: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-right-radius(0);\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) > .btn {\n @include border-left-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropright &::after {\n margin-left: 0;\n }\n\n .dropleft &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n.btn-group-toggle {\n > .btn,\n > .btn-group > .btn {\n margin-bottom: 0; // Override default `<label>` value\n\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-control-plaintext,\n > .custom-select,\n > .custom-file {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n margin-bottom: 0;\n\n + .form-control,\n + .custom-select,\n + .custom-file {\n margin-left: -$input-border-width;\n }\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .custom-select:focus,\n > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n }\n\n // Bring the custom file input above the label\n > .custom-file .custom-file-input:focus {\n z-index: 4;\n }\n\n > .form-control,\n > .custom-select {\n &:not(:first-child) { @include border-left-radius(0); }\n }\n\n // Custom file inputs have more complex markup, thus requiring different\n // border-radius overrides.\n > .custom-file {\n display: flex;\n align-items: center;\n\n &:not(:last-child) .custom-file-label,\n &:not(:first-child) .custom-file-label { @include border-left-radius(0); }\n }\n\n &:not(.has-validation) {\n > .form-control:not(:last-child),\n > .custom-select:not(:last-child),\n > .custom-file:not(:last-child) .custom-file-label::after {\n @include border-right-radius(0);\n }\n }\n\n &.has-validation {\n > .form-control:nth-last-child(n + 3),\n > .custom-select:nth-last-child(n + 3),\n > .custom-file:nth-last-child(n + 3) .custom-file-label::after {\n @include border-right-radius(0);\n }\n }\n}\n\n\n// Prepend and append\n//\n// While it requires one extra layer of HTML for each, dedicated prepend and\n// append elements allow us to 1) be less clever, 2) simplify our selectors, and\n// 3) support HTML5 form validation.\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 3;\n }\n }\n\n .btn + .btn,\n .btn + .input-group-text,\n .input-group-text + .input-group-text,\n .input-group-text + .btn {\n margin-left: -$input-border-width;\n }\n}\n\n.input-group-prepend { margin-right: -$input-border-width; }\n.input-group-append { margin-left: -$input-border-width; }\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-padding-y $input-padding-x;\n margin-bottom: 0; // Allow use of <label> elements by overriding our default margin-bottom\n @include font-size($input-font-size); // Match inputs\n font-weight: $font-weight-normal;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: $input-height-lg;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n line-height: $input-line-height-lg;\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: $input-height-sm;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n line-height: $input-line-height-sm;\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: $custom-select-padding-x + $custom-select-indicator-padding;\n}\n\n\n// Prepend and append rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn,\n.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text,\n.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn,\n.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n @include border-right-radius(0);\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n @include border-left-radius(0);\n}\n","// Embedded icons from Open Iconic.\n// Released under MIT and copyright 2014 Waybury.\n// https://useiconic.com/open\n\n\n// Checkboxes and radios\n//\n// Base class takes care of all the key behavioral aspects.\n\n.custom-control {\n position: relative;\n z-index: 1;\n display: block;\n min-height: $font-size-base * $line-height-base;\n padding-left: $custom-control-gutter + $custom-control-indicator-size;\n color-adjust: exact; // Keep themed appearance for print\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: $custom-control-spacer-x;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1; // Put the input behind the label so it doesn't overlay text\n width: $custom-control-indicator-size;\n height: ($font-size-base * $line-height-base + $custom-control-indicator-size) / 2;\n opacity: 0;\n\n &:checked ~ .custom-control-label::before {\n color: $custom-control-indicator-checked-color;\n border-color: $custom-control-indicator-checked-border-color;\n @include gradient-bg($custom-control-indicator-checked-bg);\n @include box-shadow($custom-control-indicator-checked-box-shadow);\n }\n\n &:focus ~ .custom-control-label::before {\n // the mixin is not used here to make sure there is feedback\n @if $enable-shadows {\n box-shadow: $input-box-shadow, $custom-control-indicator-focus-box-shadow;\n } @else {\n box-shadow: $custom-control-indicator-focus-box-shadow;\n }\n }\n\n &:focus:not(:checked) ~ .custom-control-label::before {\n border-color: $custom-control-indicator-focus-border-color;\n }\n\n &:not(:disabled):active ~ .custom-control-label::before {\n color: $custom-control-indicator-active-color;\n background-color: $custom-control-indicator-active-bg;\n border-color: $custom-control-indicator-active-border-color;\n @include box-shadow($custom-control-indicator-active-box-shadow);\n }\n\n // Use [disabled] and :disabled to work around https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .custom-control-label {\n color: $custom-control-label-disabled-color;\n\n &::before {\n background-color: $custom-control-indicator-disabled-bg;\n }\n }\n }\n}\n\n// Custom control indicators\n//\n// Build the custom controls out of pseudo-elements.\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n color: $custom-control-label-color;\n vertical-align: top;\n cursor: $custom-control-cursor;\n\n // Background-color and (when enabled) gradient\n &::before {\n position: absolute;\n top: ($font-size-base * $line-height-base - $custom-control-indicator-size) / 2;\n left: -($custom-control-gutter + $custom-control-indicator-size);\n display: block;\n width: $custom-control-indicator-size;\n height: $custom-control-indicator-size;\n pointer-events: none;\n content: \"\";\n background-color: $custom-control-indicator-bg;\n border: $custom-control-indicator-border-color solid $custom-control-indicator-border-width;\n @include box-shadow($custom-control-indicator-box-shadow);\n }\n\n // Foreground (icon)\n &::after {\n position: absolute;\n top: ($font-size-base * $line-height-base - $custom-control-indicator-size) / 2;\n left: -($custom-control-gutter + $custom-control-indicator-size);\n display: block;\n width: $custom-control-indicator-size;\n height: $custom-control-indicator-size;\n content: \"\";\n background: 50% / #{$custom-control-indicator-bg-size} no-repeat;\n }\n}\n\n\n// Checkboxes\n//\n// Tweak just a few things for checkboxes.\n\n.custom-checkbox {\n .custom-control-label::before {\n @include border-radius($custom-checkbox-indicator-border-radius);\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::after {\n background-image: escape-svg($custom-checkbox-indicator-icon-checked);\n }\n }\n\n .custom-control-input:indeterminate ~ .custom-control-label {\n &::before {\n border-color: $custom-checkbox-indicator-indeterminate-border-color;\n @include gradient-bg($custom-checkbox-indicator-indeterminate-bg);\n @include box-shadow($custom-checkbox-indicator-indeterminate-box-shadow);\n }\n &::after {\n background-image: escape-svg($custom-checkbox-indicator-icon-indeterminate);\n }\n }\n\n .custom-control-input:disabled {\n &:checked ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n &:indeterminate ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n }\n}\n\n// Radios\n//\n// Tweak just a few things for radios.\n\n.custom-radio {\n .custom-control-label::before {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $custom-radio-indicator-border-radius;\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::after {\n background-image: escape-svg($custom-radio-indicator-icon-checked);\n }\n }\n\n .custom-control-input:disabled {\n &:checked ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n }\n}\n\n\n// switches\n//\n// Tweak a few things for switches\n\n.custom-switch {\n padding-left: $custom-switch-width + $custom-control-gutter;\n\n .custom-control-label {\n &::before {\n left: -($custom-switch-width + $custom-control-gutter);\n width: $custom-switch-width;\n pointer-events: all;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $custom-switch-indicator-border-radius;\n }\n\n &::after {\n top: add(($font-size-base * $line-height-base - $custom-control-indicator-size) / 2, $custom-control-indicator-border-width * 2);\n left: add(-($custom-switch-width + $custom-control-gutter), $custom-control-indicator-border-width * 2);\n width: $custom-switch-indicator-size;\n height: $custom-switch-indicator-size;\n background-color: $custom-control-indicator-border-color;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $custom-switch-indicator-border-radius;\n @include transition(transform .15s ease-in-out, $custom-forms-transition);\n }\n }\n\n .custom-control-input:checked ~ .custom-control-label {\n &::after {\n background-color: $custom-control-indicator-bg;\n transform: translateX($custom-switch-width - $custom-control-indicator-size);\n }\n }\n\n .custom-control-input:disabled {\n &:checked ~ .custom-control-label::before {\n @include gradient-bg($custom-control-indicator-checked-disabled-bg);\n }\n }\n}\n\n\n// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n//\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: $custom-select-height;\n padding: $custom-select-padding-y ($custom-select-padding-x + $custom-select-indicator-padding) $custom-select-padding-y $custom-select-padding-x;\n font-family: $custom-select-font-family;\n @include font-size($custom-select-font-size);\n font-weight: $custom-select-font-weight;\n line-height: $custom-select-line-height;\n color: $custom-select-color;\n vertical-align: middle;\n background: $custom-select-bg $custom-select-background;\n border: $custom-select-border-width solid $custom-select-border-color;\n @include border-radius($custom-select-border-radius, 0);\n @include box-shadow($custom-select-box-shadow);\n appearance: none;\n\n &:focus {\n border-color: $custom-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($custom-select-box-shadow, $custom-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $custom-select-focus-box-shadow;\n }\n\n &::-ms-value {\n // For visual consistency with other platforms/browsers,\n // suppress the default white text on blue background highlight given to\n // the selected option text when the (still closed) <select> receives focus\n // in IE and (under certain conditions) Edge.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: $custom-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $custom-select-disabled-color;\n background-color: $custom-select-disabled-bg;\n }\n\n // Hides the default caret in IE11\n &::-ms-expand {\n display: none;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $custom-select-color;\n }\n}\n\n.custom-select-sm {\n height: $custom-select-height-sm;\n padding-top: $custom-select-padding-y-sm;\n padding-bottom: $custom-select-padding-y-sm;\n padding-left: $custom-select-padding-x-sm;\n @include font-size($custom-select-font-size-sm);\n}\n\n.custom-select-lg {\n height: $custom-select-height-lg;\n padding-top: $custom-select-padding-y-lg;\n padding-bottom: $custom-select-padding-y-lg;\n padding-left: $custom-select-padding-x-lg;\n @include font-size($custom-select-font-size-lg);\n}\n\n\n// File\n//\n// Custom file input.\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: $custom-file-height;\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: $custom-file-height;\n margin: 0;\n overflow: hidden;\n opacity: 0;\n\n &:focus ~ .custom-file-label {\n border-color: $custom-file-focus-border-color;\n box-shadow: $custom-file-focus-box-shadow;\n }\n\n // Use [disabled] and :disabled to work around https://github.com/twbs/bootstrap/issues/28247\n &[disabled] ~ .custom-file-label,\n &:disabled ~ .custom-file-label {\n background-color: $custom-file-disabled-bg;\n }\n\n @each $lang, $value in $custom-file-text {\n &:lang(#{$lang}) ~ .custom-file-label::after {\n content: $value;\n }\n }\n\n ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n }\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: $custom-file-height;\n padding: $custom-file-padding-y $custom-file-padding-x;\n overflow: hidden;\n font-family: $custom-file-font-family;\n font-weight: $custom-file-font-weight;\n line-height: $custom-file-line-height;\n color: $custom-file-color;\n background-color: $custom-file-bg;\n border: $custom-file-border-width solid $custom-file-border-color;\n @include border-radius($custom-file-border-radius);\n @include box-shadow($custom-file-box-shadow);\n\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: $custom-file-height-inner;\n padding: $custom-file-padding-y $custom-file-padding-x;\n line-height: $custom-file-line-height;\n color: $custom-file-button-color;\n content: \"Browse\";\n @include gradient-bg($custom-file-button-bg);\n border-left: inherit;\n @include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0);\n }\n}\n\n// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.custom-range {\n width: 100%;\n height: add($custom-range-thumb-height, $custom-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }\n &::-ms-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n margin-top: ($custom-range-track-height - $custom-range-thumb-height) / 2; // Webkit specific\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n @include transition($custom-forms-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent; // Why?\n cursor: $custom-range-track-cursor;\n background-color: $custom-range-track-bg;\n border-color: transparent;\n @include border-radius($custom-range-track-border-radius);\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n @include transition($custom-forms-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent;\n cursor: $custom-range-track-cursor;\n background-color: $custom-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($custom-range-track-border-radius);\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-ms-thumb {\n width: $custom-range-thumb-width;\n height: $custom-range-thumb-height;\n margin-top: 0; // Edge specific\n margin-right: $custom-range-thumb-focus-box-shadow-width; // Workaround that overflowed box-shadow is hidden.\n margin-left: $custom-range-thumb-focus-box-shadow-width; // Workaround that overflowed box-shadow is hidden.\n @include gradient-bg($custom-range-thumb-bg);\n border: $custom-range-thumb-border;\n @include border-radius($custom-range-thumb-border-radius);\n @include box-shadow($custom-range-thumb-box-shadow);\n @include transition($custom-forms-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($custom-range-thumb-active-bg);\n }\n }\n\n &::-ms-track {\n width: $custom-range-track-width;\n height: $custom-range-track-height;\n color: transparent;\n cursor: $custom-range-track-cursor;\n background-color: transparent;\n border-color: transparent;\n border-width: $custom-range-thumb-height / 2;\n @include box-shadow($custom-range-track-box-shadow);\n }\n\n &::-ms-fill-lower {\n background-color: $custom-range-track-bg;\n @include border-radius($custom-range-track-border-radius);\n }\n\n &::-ms-fill-upper {\n margin-right: 15px; // arbitrary?\n background-color: $custom-range-track-bg;\n @include border-radius($custom-range-track-border-radius);\n }\n\n &:disabled {\n &::-webkit-slider-thumb {\n background-color: $custom-range-thumb-disabled-bg;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: default;\n }\n\n &::-moz-range-thumb {\n background-color: $custom-range-thumb-disabled-bg;\n }\n\n &::-moz-range-track {\n cursor: default;\n }\n\n &::-ms-thumb {\n background-color: $custom-range-thumb-disabled-bg;\n }\n }\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n @include transition($custom-forms-transition);\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: $nav-link-padding-y $nav-link-padding-x;\n text-decoration: if($link-decoration == none, null, none);\n\n @include hover-focus() {\n text-decoration: none;\n }\n\n // Disabled state lightens text\n &.disabled {\n color: $nav-link-disabled-color;\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;\n\n .nav-link {\n margin-bottom: -$nav-tabs-border-width;\n border: $nav-tabs-border-width solid transparent;\n @include border-top-radius($nav-tabs-border-radius);\n\n @include hover-focus() {\n border-color: $nav-tabs-link-hover-border-color;\n }\n\n &.disabled {\n color: $nav-link-disabled-color;\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: $nav-tabs-link-active-color;\n background-color: $nav-tabs-link-active-bg;\n border-color: $nav-tabs-link-active-border-color;\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: -$nav-tabs-border-width;\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n .nav-link {\n @include border-radius($nav-pills-border-radius);\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: $nav-pills-link-active-color;\n background-color: $nav-pills-link-active-bg;\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Contents\n//\n// Navbar\n// Navbar brand\n// Navbar nav\n// Navbar text\n// Navbar divider\n// Responsive navbar\n// Navbar position\n// Navbar themes\n\n\n// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: $navbar-padding-y $navbar-padding-x;\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n %container-flex-properties {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n }\n\n .container,\n .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n display: inline-block;\n padding-top: $navbar-brand-padding-y;\n padding-bottom: $navbar-brand-padding-y;\n margin-right: $navbar-padding-x;\n @include font-size($navbar-brand-font-size);\n line-height: inherit;\n white-space: nowrap;\n\n @include hover-focus() {\n text-decoration: none;\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-link {\n padding-right: 0;\n padding-left: 0;\n }\n\n .dropdown-menu {\n position: static;\n float: none;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n display: inline-block;\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: $navbar-toggler-padding-y $navbar-toggler-padding-x;\n @include font-size($navbar-toggler-font-size);\n line-height: 1;\n background-color: transparent; // remove default button style\n border: $border-width solid transparent; // remove default button style\n @include border-radius($navbar-toggler-border-radius);\n\n @include hover-focus() {\n text-decoration: none;\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: 50% / 100% 100% no-repeat;\n}\n\n.navbar-nav-scroll {\n max-height: $navbar-nav-scroll-max-height;\n overflow-y: auto;\n}\n\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n %container-navbar-expand-#{$breakpoint} {\n padding-right: 0;\n padding-left: 0;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-navbar-expand-#{$breakpoint};\n }\n\n @each $size, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($size, $container-max-widths)} {\n @extend %container-navbar-expand-#{$breakpoint};\n }\n }\n }\n\n @include media-breakpoint-up($next) {\n flex-flow: row nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: $navbar-nav-link-padding-x;\n padding-left: $navbar-nav-link-padding-x;\n }\n }\n\n // For nesting containers, have to redeclare for alignment purposes\n %container-nesting-#{$breakpoint} {\n flex-wrap: nowrap;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-nesting-#{$breakpoint};\n }\n\n @each $size, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($size, $container-max-widths)} {\n @extend %container-nesting-#{$breakpoint};\n }\n }\n\n .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n\n // Changes flex-bases to auto because of an IE10 bug\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n }\n }\n }\n}\n\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n// Dark links against a light background\n.navbar-light {\n .navbar-brand {\n color: $navbar-light-brand-color;\n\n @include hover-focus() {\n color: $navbar-light-brand-hover-color;\n }\n }\n\n .navbar-nav {\n .nav-link {\n color: $navbar-light-color;\n\n @include hover-focus() {\n color: $navbar-light-hover-color;\n }\n\n &.disabled {\n color: $navbar-light-disabled-color;\n }\n }\n\n .show > .nav-link,\n .active > .nav-link,\n .nav-link.show,\n .nav-link.active {\n color: $navbar-light-active-color;\n }\n }\n\n .navbar-toggler {\n color: $navbar-light-color;\n border-color: $navbar-light-toggler-border-color;\n }\n\n .navbar-toggler-icon {\n background-image: escape-svg($navbar-light-toggler-icon-bg);\n }\n\n .navbar-text {\n color: $navbar-light-color;\n a {\n color: $navbar-light-active-color;\n\n @include hover-focus() {\n color: $navbar-light-active-color;\n }\n }\n }\n}\n\n// White links against a dark background\n.navbar-dark {\n .navbar-brand {\n color: $navbar-dark-brand-color;\n\n @include hover-focus() {\n color: $navbar-dark-brand-hover-color;\n }\n }\n\n .navbar-nav {\n .nav-link {\n color: $navbar-dark-color;\n\n @include hover-focus() {\n color: $navbar-dark-hover-color;\n }\n\n &.disabled {\n color: $navbar-dark-disabled-color;\n }\n }\n\n .show > .nav-link,\n .active > .nav-link,\n .nav-link.show,\n .nav-link.active {\n color: $navbar-dark-active-color;\n }\n }\n\n .navbar-toggler {\n color: $navbar-dark-color;\n border-color: $navbar-dark-toggler-border-color;\n }\n\n .navbar-toggler-icon {\n background-image: escape-svg($navbar-dark-toggler-icon-bg);\n }\n\n .navbar-text {\n color: $navbar-dark-color;\n a {\n color: $navbar-dark-active-color;\n\n @include hover-focus() {\n color: $navbar-dark-active-color;\n }\n }\n }\n}\n","//\n// Base styles\n//\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: $card-height;\n word-wrap: break-word;\n background-color: $card-bg;\n background-clip: border-box;\n border: $card-border-width solid $card-border-color;\n @include border-radius($card-border-radius);\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius($card-inner-border-radius);\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius($card-inner-border-radius);\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n // Workaround for the image size bug in IE\n // See: https://github.com/twbs/bootstrap/pull/28855\n min-height: 1px;\n padding: $card-spacer-x;\n color: $card-color;\n}\n\n.card-title {\n margin-bottom: $card-spacer-y;\n}\n\n.card-subtitle {\n margin-top: -$card-spacer-y / 2;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n @include hover() {\n text-decoration: none;\n }\n\n + .card-link {\n margin-left: $card-spacer-x;\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: $card-spacer-y $card-spacer-x;\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: $card-cap-color;\n background-color: $card-cap-bg;\n border-bottom: $card-border-width solid $card-border-color;\n\n &:first-child {\n @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);\n }\n}\n\n.card-footer {\n padding: $card-spacer-y $card-spacer-x;\n color: $card-cap-color;\n background-color: $card-cap-bg;\n border-top: $card-border-width solid $card-border-color;\n\n &:last-child {\n @include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius);\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: -$card-spacer-x / 2;\n margin-bottom: -$card-spacer-y;\n margin-left: -$card-spacer-x / 2;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -$card-spacer-x / 2;\n margin-left: -$card-spacer-x / 2;\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: $card-img-overlay-padding;\n @include border-radius($card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n flex-shrink: 0; // For IE: https://github.com/twbs/bootstrap/issues/29396\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n @include border-top-radius($card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n @include border-bottom-radius($card-inner-border-radius);\n}\n\n\n// Card deck\n\n.card-deck {\n .card {\n margin-bottom: $card-deck-margin;\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n margin-right: -$card-deck-margin;\n margin-left: -$card-deck-margin;\n\n .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-right: $card-deck-margin;\n margin-bottom: 0; // Override the default\n margin-left: $card-deck-margin;\n }\n }\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: $card-group-margin;\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:not(:last-child) {\n @include border-right-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-right-radius: 0;\n }\n }\n\n &:not(:first-child) {\n @include border-left-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-left-radius: 0;\n }\n }\n }\n }\n }\n}\n\n\n//\n// Columns\n//\n\n.card-columns {\n .card {\n margin-bottom: $card-columns-margin;\n }\n\n @include media-breakpoint-up(sm) {\n column-count: $card-columns-count;\n column-gap: $card-columns-gap;\n orphans: 1;\n widows: 1;\n\n .card {\n display: inline-block; // Don't let them vertically span multiple columns\n width: 100%; // Don't let their width change\n }\n }\n}\n\n\n//\n// Accordion\n//\n\n.accordion {\n overflow-anchor: none;\n\n > .card {\n overflow: hidden;\n\n &:not(:last-of-type) {\n border-bottom: 0;\n @include border-bottom-radius(0);\n }\n\n &:not(:first-of-type) {\n @include border-top-radius(0);\n }\n\n > .card-header {\n @include border-radius(0);\n margin-bottom: -$card-border-width;\n }\n }\n}\n",".breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: $breadcrumb-padding-y $breadcrumb-padding-x;\n margin-bottom: $breadcrumb-margin-bottom;\n @include font-size($breadcrumb-font-size);\n list-style: none;\n background-color: $breadcrumb-bg;\n @include border-radius($breadcrumb-border-radius);\n}\n\n.breadcrumb-item {\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: $breadcrumb-item-padding;\n\n &::before {\n float: left; // Suppress inline spacings and underlining of the separator\n padding-right: $breadcrumb-item-padding;\n color: $breadcrumb-divider-color;\n content: escape-svg($breadcrumb-divider);\n }\n }\n\n // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built\n // without `<ul>`s. The `::before` pseudo-element generates an element\n // *within* the .breadcrumb-item and thereby inherits the `text-decoration`.\n //\n // To trick IE into suppressing the underline, we give the pseudo-element an\n // underline and then immediately remove it.\n + .breadcrumb-item:hover::before {\n text-decoration: underline;\n }\n // stylelint-disable-next-line no-duplicate-selectors\n + .breadcrumb-item:hover::before {\n text-decoration: none;\n }\n\n &.active {\n color: $breadcrumb-active-color;\n }\n}\n",".pagination {\n display: flex;\n @include list-unstyled();\n @include border-radius();\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: $pagination-padding-y $pagination-padding-x;\n margin-left: -$pagination-border-width;\n line-height: $pagination-line-height;\n color: $pagination-color;\n text-decoration: if($link-decoration == none, null, none);\n background-color: $pagination-bg;\n border: $pagination-border-width solid $pagination-border-color;\n\n &:hover {\n z-index: 2;\n color: $pagination-hover-color;\n text-decoration: none;\n background-color: $pagination-hover-bg;\n border-color: $pagination-hover-border-color;\n }\n\n &:focus {\n z-index: 3;\n outline: $pagination-focus-outline;\n box-shadow: $pagination-focus-box-shadow;\n }\n}\n\n.page-item {\n &:first-child {\n .page-link {\n margin-left: 0;\n @include border-left-radius($border-radius);\n }\n }\n &:last-child {\n .page-link {\n @include border-right-radius($border-radius);\n }\n }\n\n &.active .page-link {\n z-index: 3;\n color: $pagination-active-color;\n background-color: $pagination-active-bg;\n border-color: $pagination-active-border-color;\n }\n\n &.disabled .page-link {\n color: $pagination-disabled-color;\n pointer-events: none;\n // Opinionated: remove the \"hand\" cursor set previously for .page-link\n cursor: auto;\n background-color: $pagination-disabled-bg;\n border-color: $pagination-disabled-border-color;\n }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $pagination-border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $pagination-border-radius-sm);\n}\n","// Pagination\n\n@mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n .page-link {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n line-height: $line-height;\n }\n\n .page-item {\n &:first-child {\n .page-link {\n @include border-left-radius($border-radius);\n }\n }\n &:last-child {\n .page-link {\n @include border-right-radius($border-radius);\n }\n }\n }\n}\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n display: inline-block;\n padding: $badge-padding-y $badge-padding-x;\n @include font-size($badge-font-size);\n font-weight: $badge-font-weight;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius($badge-border-radius);\n @include transition($badge-transition);\n\n @at-root a#{&} {\n @include hover-focus() {\n text-decoration: none;\n }\n }\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n// Pill badges\n//\n// Make them extra rounded with a modifier to replace v3's badges.\n\n.badge-pill {\n padding-right: $badge-pill-padding-x;\n padding-left: $badge-pill-padding-x;\n @include border-radius($badge-pill-border-radius);\n}\n\n// Colors\n//\n// Contextual variations (linked badges get darker on :hover).\n\n@each $color, $value in $theme-colors {\n .badge-#{$color} {\n @include badge-variant($value);\n }\n}\n","@mixin badge-variant($bg) {\n color: color-yiq($bg);\n background-color: $bg;\n\n @at-root a#{&} {\n @include hover-focus() {\n color: color-yiq($bg);\n background-color: darken($bg, 10%);\n }\n\n &:focus,\n &.focus {\n outline: 0;\n box-shadow: 0 0 0 $badge-focus-width rgba($bg, .5);\n }\n }\n}\n",".jumbotron {\n padding: $jumbotron-padding ($jumbotron-padding / 2);\n margin-bottom: $jumbotron-padding;\n color: $jumbotron-color;\n background-color: $jumbotron-bg;\n @include border-radius($border-radius-lg);\n\n @include media-breakpoint-up(sm) {\n padding: ($jumbotron-padding * 2) $jumbotron-padding;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n @include border-radius(0);\n}\n","//\n// Base styles\n//\n\n.alert {\n position: relative;\n padding: $alert-padding-y $alert-padding-x;\n margin-bottom: $alert-margin-bottom;\n border: $alert-border-width solid transparent;\n @include border-radius($alert-border-radius);\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $close-font-size + $alert-padding-x * 2;\n\n // Adjust close link position\n .close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: $alert-padding-y $alert-padding-x;\n color: inherit;\n }\n}\n\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n@each $color, $value in $theme-colors {\n .alert-#{$color} {\n @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level));\n }\n}\n","@mixin alert-variant($background, $border, $color) {\n color: $color;\n @include gradient-bg($background);\n border-color: $border;\n\n hr {\n border-top-color: darken($border, 5%);\n }\n\n .alert-link {\n color: darken($color, 10%);\n }\n}\n","// Disable animation if transitions are disabled\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n from { background-position: $progress-height 0; }\n to { background-position: 0 0; }\n }\n}\n\n.progress {\n display: flex;\n height: $progress-height;\n overflow: hidden; // force rounded corners by cropping it\n line-height: 0;\n @include font-size($progress-font-size);\n background-color: $progress-bg;\n @include border-radius($progress-border-radius);\n @include box-shadow($progress-box-shadow);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: $progress-bar-color;\n text-align: center;\n white-space: nowrap;\n background-color: $progress-bar-bg;\n @include transition($progress-bar-transition);\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: $progress-height $progress-height;\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: $progress-bar-animation-timing progress-bar-stripes;\n\n @if $enable-prefers-reduced-motion-media-query {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n",".media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius($list-group-border-radius);\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: $list-group-action-color;\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n @include hover-focus() {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: $list-group-action-hover-color;\n text-decoration: none;\n background-color: $list-group-hover-bg;\n }\n\n &:active {\n color: $list-group-action-active-color;\n background-color: $list-group-action-active-bg;\n }\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: $list-group-item-padding-y $list-group-item-padding-x;\n color: $list-group-color;\n text-decoration: if($link-decoration == none, null, none);\n background-color: $list-group-bg;\n border: $list-group-border-width solid $list-group-border-color;\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: $list-group-disabled-color;\n pointer-events: none;\n background-color: $list-group-disabled-bg;\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: $list-group-active-color;\n background-color: $list-group-active-bg;\n border-color: $list-group-active-border-color;\n }\n\n & + & {\n border-top-width: 0;\n\n &.active {\n margin-top: -$list-group-border-width;\n border-top-width: $list-group-border-width;\n }\n }\n}\n\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child {\n @include border-bottom-left-radius($list-group-border-radius);\n @include border-top-right-radius(0);\n }\n\n &:last-child {\n @include border-top-right-radius($list-group-border-radius);\n @include border-bottom-left-radius(0);\n }\n\n &.active {\n margin-top: 0;\n }\n\n + .list-group-item {\n border-top-width: $list-group-border-width;\n border-left-width: 0;\n\n &.active {\n margin-left: -$list-group-border-width;\n border-left-width: $list-group-border-width;\n }\n }\n }\n }\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n @include border-radius(0);\n\n > .list-group-item {\n border-width: 0 0 $list-group-border-width;\n\n &:last-child {\n border-bottom-width: 0;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $color, $value in $theme-colors {\n @include list-group-item-variant($color, theme-color-level($color, -9), theme-color-level($color, 6));\n}\n","// List Groups\n\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n @include hover-focus() {\n color: $color;\n background-color: darken($background, 5%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n",".close {\n float: right;\n @include font-size($close-font-size);\n font-weight: $close-font-weight;\n line-height: 1;\n color: $close-color;\n text-shadow: $close-text-shadow;\n opacity: .5;\n\n // Override <a>'s hover style\n @include hover() {\n color: $close-color;\n text-decoration: none;\n }\n\n &:not(:disabled):not(.disabled) {\n @include hover-focus() {\n opacity: .75;\n }\n }\n}\n\n// Additional properties for button version\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n// stylelint-disable-next-line selector-no-qualifying-type\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n}\n\n// Future-proof disabling of clicks on `<a>` elements\n\n// stylelint-disable-next-line selector-no-qualifying-type\na.close.disabled {\n pointer-events: none;\n}\n",".toast {\n // Prevents from shrinking in IE11, when in a flex container\n // See https://github.com/twbs/bootstrap/issues/28341\n flex-basis: $toast-max-width;\n max-width: $toast-max-width;\n @include font-size($toast-font-size);\n color: $toast-color;\n background-color: $toast-background-color;\n background-clip: padding-box;\n border: $toast-border-width solid $toast-border-color;\n box-shadow: $toast-box-shadow;\n opacity: 0;\n @include border-radius($toast-border-radius);\n\n &:not(:last-child) {\n margin-bottom: $toast-padding-x;\n }\n\n &.showing {\n opacity: 1;\n }\n\n &.show {\n display: block;\n opacity: 1;\n }\n\n &.hide {\n display: none;\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: $toast-padding-y $toast-padding-x;\n color: $toast-header-color;\n background-color: $toast-header-background-color;\n background-clip: padding-box;\n border-bottom: $toast-border-width solid $toast-header-border-color;\n @include border-top-radius(subtract($toast-border-radius, $toast-border-width));\n}\n\n.toast-body {\n padding: $toast-padding-x; // apply to both vertical and horizontal\n}\n","// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n.modal-open {\n // Kill the scroll on the body\n overflow: hidden;\n\n .modal {\n overflow-x: hidden;\n overflow-y: auto;\n }\n}\n\n// Container that the modal scrolls within\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex-modal;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: $modal-dialog-margin;\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n display: flex; // IE10/11\n max-height: subtract(100%, $modal-dialog-margin * 2);\n\n .modal-content {\n max-height: subtract(100vh, $modal-dialog-margin * 2); // IE10/11\n overflow: hidden;\n }\n\n .modal-header,\n .modal-footer {\n flex-shrink: 0;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: subtract(100%, $modal-dialog-margin * 2);\n\n // Ensure `modal-dialog-centered` extends the full height of the view (IE10/11)\n &::before {\n display: block; // IE10\n height: subtract(100vh, $modal-dialog-margin * 2);\n height: min-content; // Reset height to 0 except on IE\n content: \"\";\n }\n\n // Ensure `.modal-body` shows scrollbar (IE10/11)\n &.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n\n .modal-content {\n max-height: none;\n }\n\n &::before {\n content: none;\n }\n }\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: $modal-content-color;\n pointer-events: auto;\n background-color: $modal-content-bg;\n background-clip: padding-box;\n border: $modal-content-border-width solid $modal-content-border-color;\n @include border-radius($modal-content-border-radius);\n @include box-shadow($modal-content-box-shadow-xs);\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex-modal-backdrop;\n width: 100vw;\n height: 100vh;\n background-color: $modal-backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $modal-backdrop-opacity; }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n align-items: flex-start; // so the close btn always stays on the upper right corner\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: $modal-header-padding;\n border-bottom: $modal-header-border-width solid $modal-header-border-color;\n @include border-top-radius($modal-content-inner-border-radius);\n\n .close {\n padding: $modal-header-padding;\n // auto on the left force icon to the right even when there is no .modal-title\n margin: (-$modal-header-padding-y) (-$modal-header-padding-x) (-$modal-header-padding-y) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: $modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when there should be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: $modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: $modal-inner-padding - $modal-footer-margin-between / 2;\n border-top: $modal-footer-border-width solid $modal-footer-border-color;\n @include border-bottom-radius($modal-content-inner-border-radius);\n\n // Place margin between footer elements\n // This solution is far from ideal because of the universal selector usage,\n // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n > * {\n margin: $modal-footer-margin-between / 2;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: $modal-md;\n margin: $modal-dialog-margin-y-sm-up auto;\n }\n\n .modal-dialog-scrollable {\n max-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);\n\n .modal-content {\n max-height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);\n }\n }\n\n .modal-dialog-centered {\n min-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);\n\n &::before {\n height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);\n height: min-content;\n }\n }\n\n .modal-content {\n @include box-shadow($modal-content-box-shadow-sm-up);\n }\n\n .modal-sm { max-width: $modal-sm; }\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg,\n .modal-xl {\n max-width: $modal-lg;\n }\n}\n\n@include media-breakpoint-up(xl) {\n .modal-xl { max-width: $modal-xl; }\n}\n","// Base class\n.tooltip {\n position: absolute;\n z-index: $zindex-tooltip;\n display: block;\n margin: $tooltip-margin;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size($tooltip-font-size);\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: $tooltip-opacity; }\n\n .arrow {\n position: absolute;\n display: block;\n width: $tooltip-arrow-width;\n height: $tooltip-arrow-height;\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top {\n padding: $tooltip-arrow-height 0;\n\n .arrow {\n bottom: 0;\n\n &::before {\n top: 0;\n border-width: $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;\n border-top-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-right {\n padding: 0 $tooltip-arrow-height;\n\n .arrow {\n left: 0;\n width: $tooltip-arrow-height;\n height: $tooltip-arrow-width;\n\n &::before {\n right: 0;\n border-width: ($tooltip-arrow-width / 2) $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;\n border-right-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-bottom {\n padding: $tooltip-arrow-height 0;\n\n .arrow {\n top: 0;\n\n &::before {\n bottom: 0;\n border-width: 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;\n border-bottom-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-left {\n padding: 0 $tooltip-arrow-height;\n\n .arrow {\n right: 0;\n width: $tooltip-arrow-height;\n height: $tooltip-arrow-width;\n\n &::before {\n left: 0;\n border-width: ($tooltip-arrow-width / 2) 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;\n border-left-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-auto {\n &[x-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[x-placement^=\"right\"] {\n @extend .bs-tooltip-right;\n }\n &[x-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[x-placement^=\"left\"] {\n @extend .bs-tooltip-left;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: $tooltip-max-width;\n padding: $tooltip-padding-y $tooltip-padding-x;\n color: $tooltip-color;\n text-align: center;\n background-color: $tooltip-bg;\n @include border-radius($tooltip-border-radius);\n}\n","@mixin reset-text() {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n}\n",".popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: $zindex-popover;\n display: block;\n max-width: $popover-max-width;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size($popover-font-size);\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: $popover-bg;\n background-clip: padding-box;\n border: $popover-border-width solid $popover-border-color;\n @include border-radius($popover-border-radius);\n @include box-shadow($popover-box-shadow);\n\n .arrow {\n position: absolute;\n display: block;\n width: $popover-arrow-width;\n height: $popover-arrow-height;\n margin: 0 $popover-border-radius;\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-popover-top {\n margin-bottom: $popover-arrow-height;\n\n > .arrow {\n bottom: subtract(-$popover-arrow-height, $popover-border-width);\n\n &::before {\n bottom: 0;\n border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-top-color: $popover-arrow-outer-color;\n }\n\n &::after {\n bottom: $popover-border-width;\n border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-top-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-right {\n margin-left: $popover-arrow-height;\n\n > .arrow {\n left: subtract(-$popover-arrow-height, $popover-border-width);\n width: $popover-arrow-height;\n height: $popover-arrow-width;\n margin: $popover-border-radius 0; // make sure the arrow does not touch the popover's rounded corners\n\n &::before {\n left: 0;\n border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-right-color: $popover-arrow-outer-color;\n }\n\n &::after {\n left: $popover-border-width;\n border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;\n border-right-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-bottom {\n margin-top: $popover-arrow-height;\n\n > .arrow {\n top: subtract(-$popover-arrow-height, $popover-border-width);\n\n &::before {\n top: 0;\n border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);\n border-bottom-color: $popover-arrow-outer-color;\n }\n\n &::after {\n top: $popover-border-width;\n border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);\n border-bottom-color: $popover-arrow-color;\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: $popover-arrow-width;\n margin-left: -$popover-arrow-width / 2;\n content: \"\";\n border-bottom: $popover-border-width solid $popover-header-bg;\n }\n}\n\n.bs-popover-left {\n margin-right: $popover-arrow-height;\n\n > .arrow {\n right: subtract(-$popover-arrow-height, $popover-border-width);\n width: $popover-arrow-height;\n height: $popover-arrow-width;\n margin: $popover-border-radius 0; // make sure the arrow does not touch the popover's rounded corners\n\n &::before {\n right: 0;\n border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;\n border-left-color: $popover-arrow-outer-color;\n }\n\n &::after {\n right: $popover-border-width;\n border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;\n border-left-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-auto {\n &[x-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[x-placement^=\"right\"] {\n @extend .bs-popover-right;\n }\n &[x-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[x-placement^=\"left\"] {\n @extend .bs-popover-left;\n }\n}\n\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: $popover-header-padding-y $popover-header-padding-x;\n margin-bottom: 0; // Reset the default from Reboot\n @include font-size($font-size-base);\n color: $popover-header-color;\n background-color: $popover-header-bg;\n border-bottom: $popover-border-width solid darken($popover-header-bg, 5%);\n @include border-top-radius($popover-inner-border-radius);\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: $popover-body-padding-y $popover-body-padding-x;\n color: $popover-body-color;\n}\n","// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-left and .carousel-item-right is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-left and .active.carousel-item-right is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-left and .carousel-item-prev.carousel-item-right\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-left,\n .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-left,\n .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n color: $carousel-control-color;\n text-align: center;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n @include hover-focus() {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n @if $enable-gradients {\n background-image: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));\n }\n}\n.carousel-control-next {\n right: 0;\n @if $enable-gradients {\n background-image: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));\n }\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background: 50% / 100% 100% no-repeat;\n}\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n\n// Optional indicator pips\n//\n// Add an ordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0; // override <ol> default\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-left: $carousel-control-width;\n list-style: none;\n\n li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: .5;\n @include transition($carousel-indicator-transition);\n }\n\n .active {\n opacity: 1;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: (100% - $carousel-caption-width) / 2;\n bottom: 20px;\n left: (100% - $carousel-caption-width) / 2;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: $carousel-caption-color;\n text-align: center;\n}\n","@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n","//\n// Rotating border\n//\n\n@keyframes spinner-border {\n to { transform: rotate(360deg); }\n}\n\n.spinner-border {\n display: inline-block;\n width: $spinner-width;\n height: $spinner-height;\n vertical-align: text-bottom;\n border: $spinner-border-width solid currentColor;\n border-right-color: transparent;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: .75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n width: $spinner-width-sm;\n height: $spinner-height-sm;\n border-width: $spinner-border-width-sm;\n}\n\n//\n// Growing circle\n//\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: $spinner-width;\n height: $spinner-height;\n vertical-align: text-bottom;\n background-color: currentColor;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n opacity: 0;\n animation: .75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n width: $spinner-width-sm;\n height: $spinner-height-sm;\n}\n\n@if $enable-prefers-reduced-motion-media-query {\n @media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n animation-duration: 1.5s;\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n.align-baseline { vertical-align: baseline !important; } // Browser default\n.align-top { vertical-align: top !important; }\n.align-middle { vertical-align: middle !important; }\n.align-bottom { vertical-align: bottom !important; }\n.align-text-bottom { vertical-align: text-bottom !important; }\n.align-text-top { vertical-align: text-top !important; }\n","// stylelint-disable declaration-no-important\n\n// Contextual backgrounds\n\n@mixin bg-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n background-color: $color !important;\n }\n a#{$parent},\n button#{$parent} {\n @include hover-focus() {\n background-color: darken($color, 10%) !important;\n }\n }\n @include deprecate(\"The `bg-variant` mixin\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n\n@mixin bg-gradient-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;\n }\n @include deprecate(\"The `bg-gradient-variant` mixin\", \"v4.5.0\", \"v5\", $ignore-warning);\n}\n","// stylelint-disable declaration-no-important\n\n@each $color, $value in $theme-colors {\n @include bg-variant(\".bg-#{$color}\", $value, true);\n}\n\n@if $enable-gradients {\n @each $color, $value in $theme-colors {\n @include bg-gradient-variant(\".bg-gradient-#{$color}\", $value, true);\n }\n}\n\n.bg-white {\n background-color: $white !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n","// stylelint-disable property-disallowed-list, declaration-no-important\n\n//\n// Border\n//\n\n.border { border: $border-width solid $border-color !important; }\n.border-top { border-top: $border-width solid $border-color !important; }\n.border-right { border-right: $border-width solid $border-color !important; }\n.border-bottom { border-bottom: $border-width solid $border-color !important; }\n.border-left { border-left: $border-width solid $border-color !important; }\n\n.border-0 { border: 0 !important; }\n.border-top-0 { border-top: 0 !important; }\n.border-right-0 { border-right: 0 !important; }\n.border-bottom-0 { border-bottom: 0 !important; }\n.border-left-0 { border-left: 0 !important; }\n\n@each $color, $value in $theme-colors {\n .border-#{$color} {\n border-color: $value !important;\n }\n}\n\n.border-white {\n border-color: $white !important;\n}\n\n//\n// Border-radius\n//\n\n.rounded-sm {\n border-radius: $border-radius-sm !important;\n}\n\n.rounded {\n border-radius: $border-radius !important;\n}\n\n.rounded-top {\n border-top-left-radius: $border-radius !important;\n border-top-right-radius: $border-radius !important;\n}\n\n.rounded-right {\n border-top-right-radius: $border-radius !important;\n border-bottom-right-radius: $border-radius !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n\n.rounded-left {\n border-top-left-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n\n.rounded-lg {\n border-radius: $border-radius-lg !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: $rounded-pill !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $value in $displays {\n .d#{$infix}-#{$value} { display: $value !important; }\n }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n @each $value in $displays {\n .d-print-#{$value} { display: $value !important; }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n\n &::before {\n display: block;\n content: \"\";\n }\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n}\n\n@each $embed-responsive-aspect-ratio in $embed-responsive-aspect-ratios {\n $embed-responsive-aspect-ratio-x: nth($embed-responsive-aspect-ratio, 1);\n $embed-responsive-aspect-ratio-y: nth($embed-responsive-aspect-ratio, 2);\n\n .embed-responsive-#{$embed-responsive-aspect-ratio-x}by#{$embed-responsive-aspect-ratio-y} {\n &::before {\n padding-top: percentage($embed-responsive-aspect-ratio-y / $embed-responsive-aspect-ratio-x);\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .float#{$infix}-left { float: left !important; }\n .float#{$infix}-right { float: right !important; }\n .float#{$infix}-none { float: none !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n@each $value in $user-selects {\n .user-select-#{$value} { user-select: $value !important; }\n}\n","// stylelint-disable declaration-no-important\n\n@each $value in $overflows {\n .overflow-#{$value} { overflow: $value !important; }\n}\n","// stylelint-disable declaration-no-important\n\n// Common values\n@each $position in $positions {\n .position-#{$position} { position: $position !important; }\n}\n\n// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.sticky-top {\n @supports (position: sticky) {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n}\n","//\n// Screenreaders\n//\n\n.sr-only {\n @include sr-only();\n}\n\n.sr-only-focusable {\n @include sr-only-focusable();\n}\n","// Only display content to screen readers\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin sr-only() {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable() {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n }\n}\n","// stylelint-disable declaration-no-important\n\n.shadow-sm { box-shadow: $box-shadow-sm !important; }\n.shadow { box-shadow: $box-shadow !important; }\n.shadow-lg { box-shadow: $box-shadow-lg !important; }\n.shadow-none { box-shadow: none !important; }\n","// stylelint-disable declaration-no-important\n\n// Width and height\n\n@each $prop, $abbrev in (width: w, height: h) {\n @each $size, $length in $sizes {\n .#{$abbrev}-#{$size} { #{$prop}: $length !important; }\n }\n}\n\n.mw-100 { max-width: 100% !important; }\n.mh-100 { max-height: 100% !important; }\n\n// Viewport additional helpers\n\n.min-vw-100 { min-width: 100vw !important; }\n.min-vh-100 { min-height: 100vh !important; }\n\n.vw-100 { width: 100vw !important; }\n.vh-100 { height: 100vh !important; }\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)\n @each $size, $length in $spacers {\n @if $size != 0 {\n .m#{$infix}-n#{$size} { margin: -$length !important; }\n .mt#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-top: -$length !important;\n }\n .mr#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-right: -$length !important;\n }\n .mb#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-bottom: -$length !important;\n }\n .ml#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-left: -$length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n // Just in case `pointer-events: none` is set on a parent\n pointer-events: auto;\n content: \"\";\n // IE10 bugfix, see https://stackoverflow.com/questions/16947967/ie10-hover-pseudo-class-doesnt-work-without-background-color\n background-color: rgba(0, 0, 0, 0);\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Text\n//\n\n.text-monospace { font-family: $font-family-monospace !important; }\n\n// Alignment\n\n.text-justify { text-align: justify !important; }\n.text-wrap { white-space: normal !important; }\n.text-nowrap { white-space: nowrap !important; }\n.text-truncate { @include text-truncate(); }\n\n// Responsive alignment\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .text#{$infix}-left { text-align: left !important; }\n .text#{$infix}-right { text-align: right !important; }\n .text#{$infix}-center { text-align: center !important; }\n }\n}\n\n// Transformation\n\n.text-lowercase { text-transform: lowercase !important; }\n.text-uppercase { text-transform: uppercase !important; }\n.text-capitalize { text-transform: capitalize !important; }\n\n// Weight and italics\n\n.font-weight-light { font-weight: $font-weight-light !important; }\n.font-weight-lighter { font-weight: $font-weight-lighter !important; }\n.font-weight-normal { font-weight: $font-weight-normal !important; }\n.font-weight-bold { font-weight: $font-weight-bold !important; }\n.font-weight-bolder { font-weight: $font-weight-bolder !important; }\n.font-italic { font-style: italic !important; }\n\n// Contextual colors\n\n.text-white { color: $white !important; }\n\n@each $color, $value in $theme-colors {\n @include text-emphasis-variant(\".text-#{$color}\", $value, true);\n}\n\n.text-body { color: $body-color !important; }\n.text-muted { color: $text-muted !important; }\n\n.text-black-50 { color: rgba($black, .5) !important; }\n.text-white-50 { color: rgba($white, .5) !important; }\n\n// Misc\n\n.text-hide {\n @include text-hide($ignore-warning: true);\n}\n\n.text-decoration-none { text-decoration: none !important; }\n\n.text-break {\n word-break: break-word !important; // Deprecated, but avoids issues with flex containers\n word-wrap: break-word !important; // Used instead of `overflow-wrap` for IE & Edge Legacy\n}\n\n// Reset\n\n.text-reset { color: inherit !important; }\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","// stylelint-disable declaration-no-important\n\n// Typography\n\n@mixin text-emphasis-variant($parent, $color, $ignore-warning: false) {\n #{$parent} {\n color: $color !important;\n }\n @if $emphasized-link-hover-darken-percentage != 0 {\n a#{$parent} {\n @include hover-focus() {\n color: darken($color, $emphasized-link-hover-darken-percentage) !important;\n }\n }\n }\n @include deprecate(\"`text-emphasis-variant()`\", \"v4.4.0\", \"v5\", $ignore-warning);\n}\n","// CSS image replacement\n@mixin text-hide($ignore-warning: false) {\n // stylelint-disable-next-line font-family-no-missing-generic-family-keyword\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n\n @include deprecate(\"`text-hide()`\", \"v4.1.0\", \"v5\", $ignore-warning);\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Visibility utilities\n//\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type\n\n// Source: https://github.com/h5bp/main.css/blob/master/src/_print.css\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request:\n// https://www.phpied.com/delay-loading-your-print-css/\n// ==========================================================================\n\n@if $enable-print-styles {\n @media print {\n *,\n *::before,\n *::after {\n // Bootstrap specific; comment out `color` and `background`\n //color: $black !important; // Black prints faster\n text-shadow: none !important;\n //background: transparent !important;\n box-shadow: none !important;\n }\n\n a {\n &:not(.btn) {\n text-decoration: underline;\n }\n }\n\n // Bootstrap specific; comment the following selector out\n //a[href]::after {\n // content: \" (\" attr(href) \")\";\n //}\n\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n\n // Bootstrap specific; comment the following selector out\n //\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n //\n\n //a[href^=\"#\"]::after,\n //a[href^=\"javascript:\"]::after {\n // content: \"\";\n //}\n\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: $border-width solid $gray-500; // Bootstrap custom code; using `$border-width` instead of 1px\n page-break-inside: avoid;\n }\n\n //\n // Printing Tables:\n // https://web.archive.org/web/20180815150934/http://css-discuss.incutio.com/wiki/Printing_Tables\n //\n\n thead {\n display: table-header-group;\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Specify a size and min-width to make printing closer across browsers.\n // We don't set margin here because it breaks `size` in Chrome. We also\n // don't use `!important` on `size` as it breaks in Chrome.\n @page {\n size: $print-page-size;\n }\n body {\n min-width: $print-body-min-width !important;\n }\n .container {\n min-width: $print-body-min-width !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .badge {\n border: $border-width solid $black;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: $white !important;\n }\n }\n\n .table-bordered {\n th,\n td {\n border: 1px solid $gray-300 !important;\n }\n }\n\n .table-dark {\n color: inherit;\n\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $table-border-color;\n }\n }\n\n .table .thead-dark th {\n color: inherit;\n border-color: $table-border-color;\n }\n\n // Bootstrap specific changes end\n }\n}\n"]} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js index 5fda309c9..d5c19832a 100644 --- a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js +++ b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js @@ -1,6 +1,6 @@ /*! - * Bootstrap v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { @@ -55,7 +55,7 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): util.js + * Bootstrap (v4.6.0): util.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -234,7 +234,7 @@ */ var NAME = 'alert'; - var VERSION = '4.5.3'; + var VERSION = '4.6.0'; var DATA_KEY = 'bs.alert'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; @@ -390,7 +390,7 @@ */ var NAME$1 = 'button'; - var VERSION$1 = '4.5.3'; + var VERSION$1 = '4.6.0'; var DATA_KEY$1 = 'bs.button'; var EVENT_KEY$1 = "." + DATA_KEY$1; var DATA_API_KEY$1 = '.data-api'; @@ -589,7 +589,7 @@ */ var NAME$2 = 'carousel'; - var VERSION$2 = '4.5.3'; + var VERSION$2 = '4.6.0'; var DATA_KEY$2 = 'bs.carousel'; var EVENT_KEY$2 = "." + DATA_KEY$2; var DATA_API_KEY$2 = '.data-api'; @@ -729,6 +729,8 @@ } if (this._config.interval && !this._isPaused) { + this._updateInterval(); + this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); } }; @@ -970,6 +972,23 @@ } }; + _proto._updateInterval = function _updateInterval() { + var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM); + + if (!element) { + return; + } + + var elementInterval = parseInt(element.getAttribute('data-interval'), 10); + + if (elementInterval) { + this._config.defaultInterval = this._config.defaultInterval || this._config.interval; + this._config.interval = elementInterval; + } else { + this._config.interval = this._config.defaultInterval || this._config.interval; + } + }; + _proto._slide = function _slide(direction, element) { var _this4 = this; @@ -1020,6 +1039,7 @@ this._setActiveIndicatorElement(nextElement); + this._activeElement = nextElement; var slidEvent = $__default['default'].Event(EVENT_SLID, { relatedTarget: nextElement, direction: eventDirectionName, @@ -1032,15 +1052,6 @@ Util.reflow(nextElement); $__default['default'](activeElement).addClass(directionalClassName); $__default['default'](nextElement).addClass(directionalClassName); - var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); - - if (nextElementInterval) { - this._config.defaultInterval = this._config.defaultInterval || this._config.interval; - this._config.interval = nextElementInterval; - } else { - this._config.interval = this._config.defaultInterval || this._config.interval; - } - var transitionDuration = Util.getTransitionDurationFromElement(activeElement); $__default['default'](activeElement).one(Util.TRANSITION_END, function () { $__default['default'](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$1); @@ -1177,7 +1188,7 @@ */ var NAME$3 = 'collapse'; - var VERSION$3 = '4.5.3'; + var VERSION$3 = '4.6.0'; var DATA_KEY$3 = 'bs.collapse'; var EVENT_KEY$3 = "." + DATA_KEY$3; var DATA_API_KEY$3 = '.data-api'; @@ -4140,7 +4151,7 @@ */ var NAME$4 = 'dropdown'; - var VERSION$4 = '4.5.3'; + var VERSION$4 = '4.6.0'; var DATA_KEY$4 = 'bs.dropdown'; var EVENT_KEY$4 = "." + DATA_KEY$4; var DATA_API_KEY$4 = '.data-api'; @@ -4257,7 +4268,7 @@ if (showEvent.isDefaultPrevented()) { return; - } // Disable totally Popper.js for Dropdown in Navbar + } // Totally disable Popper for Dropdowns in Navbar if (!this._inNavbar && usePopper) { @@ -4266,7 +4277,7 @@ * Popper - https://popper.js.org */ if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); + throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); } var referenceElement = this._element; @@ -4434,7 +4445,7 @@ boundariesElement: this._config.boundary } } - }; // Disable Popper.js if we have a static display + }; // Disable Popper if we have a static display if (this._config.display === 'static') { popperConfig.modifiers.applyStyle = { @@ -4654,7 +4665,7 @@ */ var NAME$5 = 'modal'; - var VERSION$5 = '4.5.3'; + var VERSION$5 = '4.6.0'; var DATA_KEY$5 = 'bs.modal'; var EVENT_KEY$5 = "." + DATA_KEY$5; var DATA_API_KEY$5 = '.data-api'; @@ -4854,38 +4865,34 @@ _proto._triggerBackdropTransition = function _triggerBackdropTransition() { var _this3 = this; - if (this._config.backdrop === 'static') { - var hideEventPrevented = $__default['default'].Event(EVENT_HIDE_PREVENTED); - $__default['default'](this._element).trigger(hideEventPrevented); + var hideEventPrevented = $__default['default'].Event(EVENT_HIDE_PREVENTED); + $__default['default'](this._element).trigger(hideEventPrevented); - if (hideEventPrevented.isDefaultPrevented()) { - return; - } + if (hideEventPrevented.isDefaultPrevented()) { + return; + } - var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; + var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; + + if (!isModalOverflowing) { + this._element.style.overflowY = 'hidden'; + } + + this._element.classList.add(CLASS_NAME_STATIC); + + var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog); + $__default['default'](this._element).off(Util.TRANSITION_END); + $__default['default'](this._element).one(Util.TRANSITION_END, function () { + _this3._element.classList.remove(CLASS_NAME_STATIC); if (!isModalOverflowing) { - this._element.style.overflowY = 'hidden'; + $__default['default'](_this3._element).one(Util.TRANSITION_END, function () { + _this3._element.style.overflowY = ''; + }).emulateTransitionEnd(_this3._element, modalTransitionDuration); } + }).emulateTransitionEnd(modalTransitionDuration); - this._element.classList.add(CLASS_NAME_STATIC); - - var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog); - $__default['default'](this._element).off(Util.TRANSITION_END); - $__default['default'](this._element).one(Util.TRANSITION_END, function () { - _this3._element.classList.remove(CLASS_NAME_STATIC); - - if (!isModalOverflowing) { - $__default['default'](_this3._element).one(Util.TRANSITION_END, function () { - _this3._element.style.overflowY = ''; - }).emulateTransitionEnd(_this3._element, modalTransitionDuration); - } - }).emulateTransitionEnd(modalTransitionDuration); - - this._element.focus(); - } else { - this.hide(); - } + this._element.focus(); }; _proto._showElement = function _showElement(relatedTarget) { @@ -5040,7 +5047,11 @@ return; } - _this9._triggerBackdropTransition(); + if (_this9._config.backdrop === 'static') { + _this9._triggerBackdropTransition(); + } else { + _this9.hide(); + } }); if (animate) { @@ -5264,7 +5275,7 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): tools/sanitizer.js + * Bootstrap (v4.6.0): tools/sanitizer.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -5390,7 +5401,7 @@ */ var NAME$6 = 'tooltip'; - var VERSION$6 = '4.5.3'; + var VERSION$6 = '4.6.0'; var DATA_KEY$6 = 'bs.tooltip'; var EVENT_KEY$6 = "." + DATA_KEY$6; var JQUERY_NO_CONFLICT$6 = $__default['default'].fn[NAME$6]; @@ -5410,6 +5421,7 @@ container: '(string|element|boolean)', fallbackPlacement: '(string|array)', boundary: '(string|element)', + customClass: '(string|function)', sanitize: 'boolean', sanitizeFn: '(null|function)', whiteList: 'object', @@ -5435,6 +5447,7 @@ container: false, fallbackPlacement: 'flip', boundary: 'scrollParent', + customClass: '', sanitize: true, sanitizeFn: null, whiteList: DefaultWhitelist, @@ -5471,7 +5484,7 @@ var Tooltip = /*#__PURE__*/function () { function Tooltip(element, config) { if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); + throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); } // private @@ -5605,7 +5618,8 @@ $__default['default'](this.element).trigger(this.constructor.Event.INSERTED); this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment)); - $__default['default'](tip).addClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we add extra + $__default['default'](tip).addClass(CLASS_NAME_SHOW$4); + $__default['default'](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; // only needed because of broken event delegation on iOS // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html @@ -6103,7 +6117,7 @@ */ var NAME$7 = 'popover'; - var VERSION$7 = '4.5.3'; + var VERSION$7 = '4.6.0'; var DATA_KEY$7 = 'bs.popover'; var EVENT_KEY$7 = "." + DATA_KEY$7; var JQUERY_NO_CONFLICT$7 = $__default['default'].fn[NAME$7]; @@ -6283,7 +6297,7 @@ */ var NAME$8 = 'scrollspy'; - var VERSION$8 = '4.5.3'; + var VERSION$8 = '4.6.0'; var DATA_KEY$8 = 'bs.scrollspy'; var EVENT_KEY$8 = "." + DATA_KEY$8; var DATA_API_KEY$6 = '.data-api'; @@ -6575,7 +6589,7 @@ */ var NAME$9 = 'tab'; - var VERSION$9 = '4.5.3'; + var VERSION$9 = '4.6.0'; var DATA_KEY$9 = 'bs.tab'; var EVENT_KEY$9 = "." + DATA_KEY$9; var DATA_API_KEY$7 = '.data-api'; @@ -6801,7 +6815,7 @@ */ var NAME$a = 'toast'; - var VERSION$a = '4.5.3'; + var VERSION$a = '4.6.0'; var DATA_KEY$a = 'bs.toast'; var EVENT_KEY$a = "." + DATA_KEY$a; var JQUERY_NO_CONFLICT$a = $__default['default'].fn[NAME$a]; diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js.map b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js.map index 0ffc67bdb..60270c32b 100644 --- a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js.map +++ b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"bootstrap.bundle.js","sources":["../../js/src/util.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/popper.js/dist/esm/popper.js","../../js/src/dropdown.js","../../js/src/modal.js","../../js/src/tools/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (_) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n this.shouldAvoidTriggerChange = false\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $(input).trigger('change')\n }\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $element.data(DATA_KEY, data)\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n }\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n const $element = $(this._element)\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n DIRECTION_NEXT :\n DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, event => this.pause(event))\n .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, e => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n $(this._element).on(EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter(foundElem => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$element.data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this._config.offset(data.offsets, this._element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n if (this._config.backdrop === 'static') {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n } else {\n this.hide()\n }\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n}\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n}\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: data => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: data => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this.config.offset(data.offsets, this.element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n event => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, event => this._enter(event))\n .on(eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div></div>'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map(element => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .addClass(CLASS_NAME_ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(SELECTOR_NAV_ITEMS)\n .children(SELECTOR_NAV_LINKS)\n .addClass(CLASS_NAME_ACTIVE)\n }\n\n $(this._scrollElement).trigger(EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = '> li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(CLASS_NAME_ACTIVE) ||\n $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(EVENT_HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(EVENT_HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n $(container).find(SELECTOR_ACTIVE_UL) :\n $(container).children(SELECTOR_ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(CLASS_NAME_SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(CLASS_NAME_ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n SELECTOR_DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(CLASS_NAME_ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(CLASS_NAME_ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n Util.reflow(element)\n\n if (element.classList.contains(CLASS_NAME_FADE)) {\n element.classList.add(CLASS_NAME_SHOW)\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 500\n}\n\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast {\n constructor(element, config) {\n this._element = element\n this._config = this._getConfig(config)\n this._timeout = null\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n show() {\n const showEvent = $.Event(EVENT_SHOW)\n\n $(this._element).trigger(showEvent)\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n $(this._element).trigger(EVENT_SHOWN)\n\n if (this._config.autohide) {\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n Util.reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._close()\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n\n $.removeData(this._element, DATA_KEY)\n this._element = null\n this._config = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...$(this._element).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _setListeners() {\n $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n }\n\n _close() {\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n $(this._element).trigger(EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new Toast(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Toast._jQueryInterface\n$.fn[NAME].Constructor = Toast\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Toast._jQueryInterface\n}\n\nexport default Toast\n"],"names":["TRANSITION_END","MAX_UID","MILLISECONDS_MULTIPLIER","toType","obj","toString","call","match","toLowerCase","getSpecialTransitionEndEvent","bindType","delegateType","handle","event","$","target","is","handleObj","handler","apply","arguments","undefined","transitionEndEmulator","duration","called","one","Util","setTimeout","triggerTransitionEnd","setTransitionEndSupport","fn","emulateTransitionEnd","special","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","trigger","supportsTransitionEnd","Boolean","isElement","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","expectedTypes","value","valueType","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","TypeError","version","jquery","minMajor","ltMajor","minMinor","minPatch","maxMajor","NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","SELECTOR_DISMISS","EVENT_CLOSE","EVENT_CLOSED","EVENT_CLICK_DATA_API","CLASS_NAME_ALERT","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","_element","close","rootElement","_getRootElement","customEvent","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","parent","closest","closeEvent","Event","removeClass","hasClass","_destroyElement","detach","remove","_jQueryInterface","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","Constructor","noConflict","CLASS_NAME_ACTIVE","CLASS_NAME_BUTTON","CLASS_NAME_FOCUS","SELECTOR_DATA_TOGGLE_CARROT","SELECTOR_DATA_TOGGLES","SELECTOR_DATA_TOGGLE","SELECTOR_DATA_TOGGLES_BUTTONS","SELECTOR_INPUT","SELECTOR_ACTIVE","SELECTOR_BUTTON","EVENT_FOCUS_BLUR_DATA_API","EVENT_LOAD_DATA_API","Button","shouldAvoidTriggerChange","toggle","triggerChangeEvent","addAriaPressed","input","type","checked","classList","contains","activeElement","focus","hasAttribute","setAttribute","toggleClass","avoidTriggerChange","button","initialButton","inputBtn","tagName","window","buttons","slice","querySelectorAll","i","len","length","add","ARROW_LEFT_KEYCODE","ARROW_RIGHT_KEYCODE","TOUCHEVENT_COMPAT_WAIT","SWIPE_THRESHOLD","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","DIRECTION_NEXT","DIRECTION_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","EVENT_DRAG_START","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_RIGHT","CLASS_NAME_LEFT","CLASS_NAME_NEXT","CLASS_NAME_PREV","CLASS_NAME_POINTER_EVENT","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM","SELECTOR_ITEM_IMG","SELECTOR_NEXT_PREV","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","clearInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","direction","off","_handleSwipe","absDeltax","abs","_keydown","_addTouchEventListeners","start","originalEvent","pointerType","clientX","touches","move","end","clearTimeout","e","which","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","isGoingToWrap","delta","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","children","addClass","activeElementIndex","nextElement","nextElementIndex","isCycling","directionalClassName","orderClassName","slidEvent","nextElementInterval","parseInt","defaultInterval","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","DIMENSION_WIDTH","DIMENSION_HEIGHT","SELECTOR_ACTIVES","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","not","startEvent","dimension","_getDimension","style","attr","setTransitioning","complete","capitalizedDimension","scrollSize","getBoundingClientRect","triggerArrayLength","$elem","isTransitioning","hasWidth","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","selectors","$target","_extends","ESCAPE_KEYCODE","SPACE_KEYCODE","TAB_KEYCODE","ARROW_UP_KEYCODE","ARROW_DOWN_KEYCODE","RIGHT_MOUSE_BUTTON_WHICH","REGEXP_KEYDOWN","EVENT_CLICK","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DISABLED","CLASS_NAME_DROPUP","CLASS_NAME_DROPRIGHT","CLASS_NAME_DROPLEFT","CLASS_NAME_MENURIGHT","CLASS_NAME_POSITION_STATIC","SELECTOR_FORM_CHILD","SELECTOR_MENU","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","offset","flip","boundary","reference","display","popperConfig","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","Popper","referenceElement","_getPopperConfig","body","noop","hideEvent","destroy","update","scheduleUpdate","stopPropagation","constructor","_getPlacement","$parentDropdown","placement","_getOffset","offsets","modifiers","enabled","preventOverflow","boundariesElement","applyStyle","toggles","context","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","backdrop","EVENT_HIDE_PREVENTED","EVENT_FOCUSIN","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_KEYDOWN_DISMISS","EVENT_MOUSEUP_DISMISS","EVENT_MOUSEDOWN_DISMISS","CLASS_NAME_SCROLLABLE","CLASS_NAME_SCROLLBAR_MEASURER","CLASS_NAME_BACKDROP","CLASS_NAME_OPEN","CLASS_NAME_STATIC","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","SELECTOR_DATA_DISMISS","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","forEach","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","clientHeight","overflowY","modalTransitionDuration","modalBody","Node","ELEMENT_NODE","appendChild","removeAttribute","scrollTop","_enforceFocus","shownEvent","transitionComplete","has","_resetAdjustments","_resetScrollbar","_removeBackdrop","callback","animate","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","paddingLeft","paddingRight","rect","round","left","right","innerWidth","_getScrollbarWidth","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","marginRight","calculatedMargin","padding","elements","margin","scrollDiv","scrollbarWidth","width","clientWidth","removeChild","uriAttrs","ARIA_ATTRIBUTE_PATTERN","DefaultWhitelist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attrName","nodeName","nodeValue","regExp","attrRegex","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","domParser","DOMParser","createdDocument","parseFromString","whitelistKeys","keys","el","elName","attributeList","attributes","whitelistedAttributes","concat","innerHTML","CLASS_PREFIX","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","animation","template","title","delay","html","container","fallbackPlacement","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","HOVER_STATE_SHOW","HOVER_STATE_OUT","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","SELECTOR_TOOLTIP_INNER","SELECTOR_ARROW","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","dataKey","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","ownerDocument","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","_fixTransition","prevHoverState","_cleanTipClass","getTitle","setElementContent","content","empty","append","text","defaultBsConfig","behavior","arrow","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","find","triggers","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","key","$tip","tabClass","join","popperData","instance","popper","initConfigAnimation","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","_getContent","method","EVENT_ACTIVATE","EVENT_SCROLL","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_DATA_SPY","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_ITEMS","SELECTOR_DROPDOWN_TOGGLE","METHOD_OFFSET","METHOD_POSITION","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targets","map","targetSelector","targetBCR","height","top","sort","pageYOffset","max","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","isActiveTarget","queries","$link","parents","node","scrollSpys","scrollSpysLength","$spy","CLASS_NAME_DROPDOWN_MENU","SELECTOR_ACTIVE_UL","SELECTOR_DROPDOWN_ACTIVE_CHILD","Tab","previous","listElement","itemSelector","makeArray","hiddenEvent","activeElements","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","CLASS_NAME_HIDE","CLASS_NAME_SHOWING","autohide","Toast","_clearTimeout","_close"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;;;;;;EASA;;;;;;EAMA,IAAMA,cAAc,GAAG,eAAvB;EACA,IAAMC,OAAO,GAAG,OAAhB;EACA,IAAMC,uBAAuB,GAAG,IAAhC;;EAGA,SAASC,MAAT,CAAgBC,GAAhB,EAAqB;EACnB,MAAIA,GAAG,KAAK,IAAR,IAAgB,OAAOA,GAAP,KAAe,WAAnC,EAAgD;EAC9C,gBAAUA,GAAV;EACD;;EAED,SAAO,GAAGC,QAAH,CAAYC,IAAZ,CAAiBF,GAAjB,EAAsBG,KAAtB,CAA4B,aAA5B,EAA2C,CAA3C,EAA8CC,WAA9C,EAAP;EACD;;EAED,SAASC,4BAAT,GAAwC;EACtC,SAAO;EACLC,IAAAA,QAAQ,EAAEV,cADL;EAELW,IAAAA,YAAY,EAAEX,cAFT;EAGLY,IAAAA,MAHK,kBAGEC,KAHF,EAGS;EACZ,UAAIC,qBAAC,CAACD,KAAK,CAACE,MAAP,CAAD,CAAgBC,EAAhB,CAAmB,IAAnB,CAAJ,EAA8B;EAC5B,eAAOH,KAAK,CAACI,SAAN,CAAgBC,OAAhB,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC,CAAP,CAD4B;EAE7B;;EAED,aAAOC,SAAP;EACD;EATI,GAAP;EAWD;;EAED,SAASC,qBAAT,CAA+BC,QAA/B,EAAyC;EAAA;;EACvC,MAAIC,MAAM,GAAG,KAAb;EAEAV,EAAAA,qBAAC,CAAC,IAAD,CAAD,CAAQW,GAAR,CAAYC,IAAI,CAAC1B,cAAjB,EAAiC,YAAM;EACrCwB,IAAAA,MAAM,GAAG,IAAT;EACD,GAFD;EAIAG,EAAAA,UAAU,CAAC,YAAM;EACf,QAAI,CAACH,MAAL,EAAa;EACXE,MAAAA,IAAI,CAACE,oBAAL,CAA0B,KAA1B;EACD;EACF,GAJS,EAIPL,QAJO,CAAV;EAMA,SAAO,IAAP;EACD;;EAED,SAASM,uBAAT,GAAmC;EACjCf,EAAAA,qBAAC,CAACgB,EAAF,CAAKC,oBAAL,GAA4BT,qBAA5B;EACAR,EAAAA,qBAAC,CAACD,KAAF,CAAQmB,OAAR,CAAgBN,IAAI,CAAC1B,cAArB,IAAuCS,4BAA4B,EAAnE;EACD;EAED;;;;;;;MAMMiB,IAAI,GAAG;EACX1B,EAAAA,cAAc,EAAE,iBADL;EAGXiC,EAAAA,MAHW,kBAGJC,MAHI,EAGI;EACb,OAAG;EACDA,MAAAA,MAAM,IAAI,CAAC,EAAEC,IAAI,CAACC,MAAL,KAAgBnC,OAAlB,CAAX,CADC;EAEF,KAFD,QAESoC,QAAQ,CAACC,cAAT,CAAwBJ,MAAxB,CAFT;;EAIA,WAAOA,MAAP;EACD,GATU;EAWXK,EAAAA,sBAXW,kCAWYC,OAXZ,EAWqB;EAC9B,QAAIC,QAAQ,GAAGD,OAAO,CAACE,YAAR,CAAqB,aAArB,CAAf;;EAEA,QAAI,CAACD,QAAD,IAAaA,QAAQ,KAAK,GAA9B,EAAmC;EACjC,UAAME,QAAQ,GAAGH,OAAO,CAACE,YAAR,CAAqB,MAArB,CAAjB;EACAD,MAAAA,QAAQ,GAAGE,QAAQ,IAAIA,QAAQ,KAAK,GAAzB,GAA+BA,QAAQ,CAACC,IAAT,EAA/B,GAAiD,EAA5D;EACD;;EAED,QAAI;EACF,aAAOP,QAAQ,CAACQ,aAAT,CAAuBJ,QAAvB,IAAmCA,QAAnC,GAA8C,IAArD;EACD,KAFD,CAEE,OAAOK,CAAP,EAAU;EACV,aAAO,IAAP;EACD;EACF,GAxBU;EA0BXC,EAAAA,gCA1BW,4CA0BsBP,OA1BtB,EA0B+B;EACxC,QAAI,CAACA,OAAL,EAAc;EACZ,aAAO,CAAP;EACD,KAHuC;;;EAMxC,QAAIQ,kBAAkB,GAAGlC,qBAAC,CAAC0B,OAAD,CAAD,CAAWS,GAAX,CAAe,qBAAf,CAAzB;EACA,QAAIC,eAAe,GAAGpC,qBAAC,CAAC0B,OAAD,CAAD,CAAWS,GAAX,CAAe,kBAAf,CAAtB;EAEA,QAAME,uBAAuB,GAAGC,UAAU,CAACJ,kBAAD,CAA1C;EACA,QAAMK,oBAAoB,GAAGD,UAAU,CAACF,eAAD,CAAvC,CAVwC;;EAaxC,QAAI,CAACC,uBAAD,IAA4B,CAACE,oBAAjC,EAAuD;EACrD,aAAO,CAAP;EACD,KAfuC;;;EAkBxCL,IAAAA,kBAAkB,GAAGA,kBAAkB,CAACM,KAAnB,CAAyB,GAAzB,EAA8B,CAA9B,CAArB;EACAJ,IAAAA,eAAe,GAAGA,eAAe,CAACI,KAAhB,CAAsB,GAAtB,EAA2B,CAA3B,CAAlB;EAEA,WAAO,CAACF,UAAU,CAACJ,kBAAD,CAAV,GAAiCI,UAAU,CAACF,eAAD,CAA5C,IAAiEhD,uBAAxE;EACD,GAhDU;EAkDXqD,EAAAA,MAlDW,kBAkDJf,OAlDI,EAkDK;EACd,WAAOA,OAAO,CAACgB,YAAf;EACD,GApDU;EAsDX5B,EAAAA,oBAtDW,gCAsDUY,OAtDV,EAsDmB;EAC5B1B,IAAAA,qBAAC,CAAC0B,OAAD,CAAD,CAAWiB,OAAX,CAAmBzD,cAAnB;EACD,GAxDU;EA0DX0D,EAAAA,qBA1DW,mCA0Da;EACtB,WAAOC,OAAO,CAAC3D,cAAD,CAAd;EACD,GA5DU;EA8DX4D,EAAAA,SA9DW,qBA8DDxD,GA9DC,EA8DI;EACb,WAAO,CAACA,GAAG,CAAC,CAAD,CAAH,IAAUA,GAAX,EAAgByD,QAAvB;EACD,GAhEU;EAkEXC,EAAAA,eAlEW,2BAkEKC,aAlEL,EAkEoBC,MAlEpB,EAkE4BC,WAlE5B,EAkEyC;EAClD,SAAK,IAAMC,QAAX,IAAuBD,WAAvB,EAAoC;EAClC,UAAIE,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgC/D,IAAhC,CAAqC2D,WAArC,EAAkDC,QAAlD,CAAJ,EAAiE;EAC/D,YAAMI,aAAa,GAAGL,WAAW,CAACC,QAAD,CAAjC;EACA,YAAMK,KAAK,GAAGP,MAAM,CAACE,QAAD,CAApB;EACA,YAAMM,SAAS,GAAGD,KAAK,IAAI7C,IAAI,CAACkC,SAAL,CAAeW,KAAf,CAAT,GAChB,SADgB,GACJpE,MAAM,CAACoE,KAAD,CADpB;;EAGA,YAAI,CAAC,IAAIE,MAAJ,CAAWH,aAAX,EAA0BI,IAA1B,CAA+BF,SAA/B,CAAL,EAAgD;EAC9C,gBAAM,IAAIG,KAAJ,CACDZ,aAAa,CAACa,WAAd,EAAH,yBACWV,QADX,2BACuCM,SADvC,sCAEsBF,aAFtB,SADI,CAAN;EAID;EACF;EACF;EACF,GAlFU;EAoFXO,EAAAA,cApFW,0BAoFIrC,OApFJ,EAoFa;EACtB,QAAI,CAACH,QAAQ,CAACyC,eAAT,CAAyBC,YAA9B,EAA4C;EAC1C,aAAO,IAAP;EACD,KAHqB;;;EAMtB,QAAI,OAAOvC,OAAO,CAACwC,WAAf,KAA+B,UAAnC,EAA+C;EAC7C,UAAMC,IAAI,GAAGzC,OAAO,CAACwC,WAAR,EAAb;EACA,aAAOC,IAAI,YAAYC,UAAhB,GAA6BD,IAA7B,GAAoC,IAA3C;EACD;;EAED,QAAIzC,OAAO,YAAY0C,UAAvB,EAAmC;EACjC,aAAO1C,OAAP;EACD,KAbqB;;;EAgBtB,QAAI,CAACA,OAAO,CAAC2C,UAAb,EAAyB;EACvB,aAAO,IAAP;EACD;;EAED,WAAOzD,IAAI,CAACmD,cAAL,CAAoBrC,OAAO,CAAC2C,UAA5B,CAAP;EACD,GAzGU;EA2GXC,EAAAA,eA3GW,6BA2GO;EAChB,QAAI,OAAOtE,qBAAP,KAAa,WAAjB,EAA8B;EAC5B,YAAM,IAAIuE,SAAJ,CAAc,kGAAd,CAAN;EACD;;EAED,QAAMC,OAAO,GAAGxE,qBAAC,CAACgB,EAAF,CAAKyD,MAAL,CAAYjC,KAAZ,CAAkB,GAAlB,EAAuB,CAAvB,EAA0BA,KAA1B,CAAgC,GAAhC,CAAhB;EACA,QAAMkC,QAAQ,GAAG,CAAjB;EACA,QAAMC,OAAO,GAAG,CAAhB;EACA,QAAMC,QAAQ,GAAG,CAAjB;EACA,QAAMC,QAAQ,GAAG,CAAjB;EACA,QAAMC,QAAQ,GAAG,CAAjB;;EAEA,QAAIN,OAAO,CAAC,CAAD,CAAP,GAAaG,OAAb,IAAwBH,OAAO,CAAC,CAAD,CAAP,GAAaI,QAArC,IAAiDJ,OAAO,CAAC,CAAD,CAAP,KAAeE,QAAf,IAA2BF,OAAO,CAAC,CAAD,CAAP,KAAeI,QAA1C,IAAsDJ,OAAO,CAAC,CAAD,CAAP,GAAaK,QAApH,IAAgIL,OAAO,CAAC,CAAD,CAAP,IAAcM,QAAlJ,EAA4J;EAC1J,YAAM,IAAIjB,KAAJ,CAAU,8EAAV,CAAN;EACD;EACF;EA1HU;EA6HbjD,IAAI,CAAC0D,eAAL;EACAvD,uBAAuB;;ECzLvB;;;;;;EAMA,IAAMgE,IAAI,GAAG,OAAb;EACA,IAAMC,OAAO,GAAG,OAAhB;EACA,IAAMC,QAAQ,GAAG,UAAjB;EACA,IAAMC,SAAS,SAAOD,QAAtB;EACA,IAAME,YAAY,GAAG,WAArB;EACA,IAAMC,kBAAkB,GAAGpF,qBAAC,CAACgB,EAAF,CAAK+D,IAAL,CAA3B;EAEA,IAAMM,gBAAgB,GAAG,wBAAzB;EAEA,IAAMC,WAAW,aAAWJ,SAA5B;EACA,IAAMK,YAAY,cAAYL,SAA9B;EACA,IAAMM,oBAAoB,aAAWN,SAAX,GAAuBC,YAAjD;EAEA,IAAMM,gBAAgB,GAAG,OAAzB;EACA,IAAMC,eAAe,GAAG,MAAxB;EACA,IAAMC,eAAe,GAAG,MAAxB;EAEA;;;;;;MAMMC;EACJ,iBAAYlE,OAAZ,EAAqB;EACnB,SAAKmE,QAAL,GAAgBnE,OAAhB;EACD;;;;;EAQD;WAEAoE,QAAA,eAAMpE,OAAN,EAAe;EACb,QAAIqE,WAAW,GAAG,KAAKF,QAAvB;;EACA,QAAInE,OAAJ,EAAa;EACXqE,MAAAA,WAAW,GAAG,KAAKC,eAAL,CAAqBtE,OAArB,CAAd;EACD;;EAED,QAAMuE,WAAW,GAAG,KAAKC,kBAAL,CAAwBH,WAAxB,CAApB;;EAEA,QAAIE,WAAW,CAACE,kBAAZ,EAAJ,EAAsC;EACpC;EACD;;EAED,SAAKC,cAAL,CAAoBL,WAApB;EACD;;WAEDM,UAAA,mBAAU;EACRrG,IAAAA,qBAAC,CAACsG,UAAF,CAAa,KAAKT,QAAlB,EAA4BZ,QAA5B;EACA,SAAKY,QAAL,GAAgB,IAAhB;EACD;;;WAIDG,kBAAA,yBAAgBtE,OAAhB,EAAyB;EACvB,QAAMC,QAAQ,GAAGf,IAAI,CAACa,sBAAL,CAA4BC,OAA5B,CAAjB;EACA,QAAI6E,MAAM,GAAG,KAAb;;EAEA,QAAI5E,QAAJ,EAAc;EACZ4E,MAAAA,MAAM,GAAGhF,QAAQ,CAACQ,aAAT,CAAuBJ,QAAvB,CAAT;EACD;;EAED,QAAI,CAAC4E,MAAL,EAAa;EACXA,MAAAA,MAAM,GAAGvG,qBAAC,CAAC0B,OAAD,CAAD,CAAW8E,OAAX,OAAuBf,gBAAvB,EAA2C,CAA3C,CAAT;EACD;;EAED,WAAOc,MAAP;EACD;;WAEDL,qBAAA,4BAAmBxE,OAAnB,EAA4B;EAC1B,QAAM+E,UAAU,GAAGzG,qBAAC,CAAC0G,KAAF,CAAQpB,WAAR,CAAnB;EAEAtF,IAAAA,qBAAC,CAAC0B,OAAD,CAAD,CAAWiB,OAAX,CAAmB8D,UAAnB;EACA,WAAOA,UAAP;EACD;;WAEDL,iBAAA,wBAAe1E,OAAf,EAAwB;EAAA;;EACtB1B,IAAAA,qBAAC,CAAC0B,OAAD,CAAD,CAAWiF,WAAX,CAAuBhB,eAAvB;;EAEA,QAAI,CAAC3F,qBAAC,CAAC0B,OAAD,CAAD,CAAWkF,QAAX,CAAoBlB,eAApB,CAAL,EAA2C;EACzC,WAAKmB,eAAL,CAAqBnF,OAArB;;EACA;EACD;;EAED,QAAMQ,kBAAkB,GAAGtB,IAAI,CAACqB,gCAAL,CAAsCP,OAAtC,CAA3B;EAEA1B,IAAAA,qBAAC,CAAC0B,OAAD,CAAD,CACGf,GADH,CACOC,IAAI,CAAC1B,cADZ,EAC4B,UAAAa,KAAK;EAAA,aAAI,KAAI,CAAC8G,eAAL,CAAqBnF,OAArB,EAA8B3B,KAA9B,CAAJ;EAAA,KADjC,EAEGkB,oBAFH,CAEwBiB,kBAFxB;EAGD;;WAED2E,kBAAA,yBAAgBnF,OAAhB,EAAyB;EACvB1B,IAAAA,qBAAC,CAAC0B,OAAD,CAAD,CACGoF,MADH,GAEGnE,OAFH,CAEW4C,YAFX,EAGGwB,MAHH;EAID;;;UAIMC,mBAAP,0BAAwB9D,MAAxB,EAAgC;EAC9B,WAAO,KAAK+D,IAAL,CAAU,YAAY;EAC3B,UAAMC,QAAQ,GAAGlH,qBAAC,CAAC,IAAD,CAAlB;EACA,UAAImH,IAAI,GAAGD,QAAQ,CAACC,IAAT,CAAclC,QAAd,CAAX;;EAEA,UAAI,CAACkC,IAAL,EAAW;EACTA,QAAAA,IAAI,GAAG,IAAIvB,KAAJ,CAAU,IAAV,CAAP;EACAsB,QAAAA,QAAQ,CAACC,IAAT,CAAclC,QAAd,EAAwBkC,IAAxB;EACD;;EAED,UAAIjE,MAAM,KAAK,OAAf,EAAwB;EACtBiE,QAAAA,IAAI,CAACjE,MAAD,CAAJ,CAAa,IAAb;EACD;EACF,KAZM,CAAP;EAaD;;UAEMkE,iBAAP,wBAAsBC,aAAtB,EAAqC;EACnC,WAAO,UAAUtH,KAAV,EAAiB;EACtB,UAAIA,KAAJ,EAAW;EACTA,QAAAA,KAAK,CAACuH,cAAN;EACD;;EAEDD,MAAAA,aAAa,CAACvB,KAAd,CAAoB,IAApB;EACD,KAND;EAOD;;;;0BAlGoB;EACnB,aAAOd,OAAP;EACD;;;;;EAmGH;;;;;;;AAMAhF,uBAAC,CAACuB,QAAD,CAAD,CAAYgG,EAAZ,CACE/B,oBADF,EAEEH,gBAFF,EAGEO,KAAK,CAACwB,cAAN,CAAqB,IAAIxB,KAAJ,EAArB,CAHF;EAMA;;;;;;AAMA5F,uBAAC,CAACgB,EAAF,CAAK+D,IAAL,IAAaa,KAAK,CAACoB,gBAAnB;AACAhH,uBAAC,CAACgB,EAAF,CAAK+D,IAAL,EAAWyC,WAAX,GAAyB5B,KAAzB;;AACA5F,uBAAC,CAACgB,EAAF,CAAK+D,IAAL,EAAW0C,UAAX,GAAwB,YAAM;EAC5BzH,EAAAA,qBAAC,CAACgB,EAAF,CAAK+D,IAAL,IAAaK,kBAAb;EACA,SAAOQ,KAAK,CAACoB,gBAAb;EACD,CAHD;;EC9JA;;;;;;EAMA,IAAMjC,MAAI,GAAG,QAAb;EACA,IAAMC,SAAO,GAAG,OAAhB;EACA,IAAMC,UAAQ,GAAG,WAAjB;EACA,IAAMC,WAAS,SAAOD,UAAtB;EACA,IAAME,cAAY,GAAG,WAArB;EACA,IAAMC,oBAAkB,GAAGpF,qBAAC,CAACgB,EAAF,CAAK+D,MAAL,CAA3B;EAEA,IAAM2C,iBAAiB,GAAG,QAA1B;EACA,IAAMC,iBAAiB,GAAG,KAA1B;EACA,IAAMC,gBAAgB,GAAG,OAAzB;EAEA,IAAMC,2BAA2B,GAAG,yBAApC;EACA,IAAMC,qBAAqB,GAAG,yBAA9B;EACA,IAAMC,oBAAoB,GAAG,wBAA7B;EACA,IAAMC,6BAA6B,GAAG,8BAAtC;EACA,IAAMC,cAAc,GAAG,4BAAvB;EACA,IAAMC,eAAe,GAAG,SAAxB;EACA,IAAMC,eAAe,GAAG,MAAxB;EAEA,IAAM3C,sBAAoB,aAAWN,WAAX,GAAuBC,cAAjD;EACA,IAAMiD,yBAAyB,GAAG,UAAQlD,WAAR,GAAoBC,cAApB,mBACDD,WADC,GACWC,cADX,CAAlC;EAEA,IAAMkD,mBAAmB,YAAUnD,WAAV,GAAsBC,cAA/C;EAEA;;;;;;MAMMmD;EACJ,kBAAY5G,OAAZ,EAAqB;EACnB,SAAKmE,QAAL,GAAgBnE,OAAhB;EACA,SAAK6G,wBAAL,GAAgC,KAAhC;EACD;;;;;EAQD;WAEAC,SAAA,kBAAS;EACP,QAAIC,kBAAkB,GAAG,IAAzB;EACA,QAAIC,cAAc,GAAG,IAArB;EACA,QAAM3C,WAAW,GAAG/F,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiBW,OAAjB,CAAyBsB,qBAAzB,EAAgD,CAAhD,CAApB;;EAEA,QAAI/B,WAAJ,EAAiB;EACf,UAAM4C,KAAK,GAAG,KAAK9C,QAAL,CAAc9D,aAAd,CAA4BkG,cAA5B,CAAd;;EAEA,UAAIU,KAAJ,EAAW;EACT,YAAIA,KAAK,CAACC,IAAN,KAAe,OAAnB,EAA4B;EAC1B,cAAID,KAAK,CAACE,OAAN,IAAiB,KAAKhD,QAAL,CAAciD,SAAd,CAAwBC,QAAxB,CAAiCrB,iBAAjC,CAArB,EAA0E;EACxEe,YAAAA,kBAAkB,GAAG,KAArB;EACD,WAFD,MAEO;EACL,gBAAMO,aAAa,GAAGjD,WAAW,CAAChE,aAAZ,CAA0BmG,eAA1B,CAAtB;;EAEA,gBAAIc,aAAJ,EAAmB;EACjBhJ,cAAAA,qBAAC,CAACgJ,aAAD,CAAD,CAAiBrC,WAAjB,CAA6Be,iBAA7B;EACD;EACF;EACF;;EAED,YAAIe,kBAAJ,EAAwB;EACtB;EACA,cAAIE,KAAK,CAACC,IAAN,KAAe,UAAf,IAA6BD,KAAK,CAACC,IAAN,KAAe,OAAhD,EAAyD;EACvDD,YAAAA,KAAK,CAACE,OAAN,GAAgB,CAAC,KAAKhD,QAAL,CAAciD,SAAd,CAAwBC,QAAxB,CAAiCrB,iBAAjC,CAAjB;EACD;;EAED,cAAI,CAAC,KAAKa,wBAAV,EAAoC;EAClCvI,YAAAA,qBAAC,CAAC2I,KAAD,CAAD,CAAShG,OAAT,CAAiB,QAAjB;EACD;EACF;;EAEDgG,QAAAA,KAAK,CAACM,KAAN;EACAP,QAAAA,cAAc,GAAG,KAAjB;EACD;EACF;;EAED,QAAI,EAAE,KAAK7C,QAAL,CAAcqD,YAAd,CAA2B,UAA3B,KAA0C,KAAKrD,QAAL,CAAciD,SAAd,CAAwBC,QAAxB,CAAiC,UAAjC,CAA5C,CAAJ,EAA+F;EAC7F,UAAIL,cAAJ,EAAoB;EAClB,aAAK7C,QAAL,CAAcsD,YAAd,CAA2B,cAA3B,EAA2C,CAAC,KAAKtD,QAAL,CAAciD,SAAd,CAAwBC,QAAxB,CAAiCrB,iBAAjC,CAA5C;EACD;;EAED,UAAIe,kBAAJ,EAAwB;EACtBzI,QAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiBuD,WAAjB,CAA6B1B,iBAA7B;EACD;EACF;EACF;;WAEDrB,UAAA,mBAAU;EACRrG,IAAAA,qBAAC,CAACsG,UAAF,CAAa,KAAKT,QAAlB,EAA4BZ,UAA5B;EACA,SAAKY,QAAL,GAAgB,IAAhB;EACD;;;WAIMmB,mBAAP,0BAAwB9D,MAAxB,EAAgCmG,kBAAhC,EAAoD;EAClD,WAAO,KAAKpC,IAAL,CAAU,YAAY;EAC3B,UAAMC,QAAQ,GAAGlH,qBAAC,CAAC,IAAD,CAAlB;EACA,UAAImH,IAAI,GAAGD,QAAQ,CAACC,IAAT,CAAclC,UAAd,CAAX;;EAEA,UAAI,CAACkC,IAAL,EAAW;EACTA,QAAAA,IAAI,GAAG,IAAImB,MAAJ,CAAW,IAAX,CAAP;EACApB,QAAAA,QAAQ,CAACC,IAAT,CAAclC,UAAd,EAAwBkC,IAAxB;EACD;;EAEDA,MAAAA,IAAI,CAACoB,wBAAL,GAAgCc,kBAAhC;;EAEA,UAAInG,MAAM,KAAK,QAAf,EAAyB;EACvBiE,QAAAA,IAAI,CAACjE,MAAD,CAAJ;EACD;EACF,KAdM,CAAP;EAeD;;;;0BA7EoB;EACnB,aAAO8B,SAAP;EACD;;;;;EA8EH;;;;;;;AAMAhF,uBAAC,CAACuB,QAAD,CAAD,CACGgG,EADH,CACM/B,sBADN,EAC4BqC,2BAD5B,EACyD,UAAA9H,KAAK,EAAI;EAC9D,MAAIuJ,MAAM,GAAGvJ,KAAK,CAACE,MAAnB;EACA,MAAMsJ,aAAa,GAAGD,MAAtB;;EAEA,MAAI,CAACtJ,qBAAC,CAACsJ,MAAD,CAAD,CAAU1C,QAAV,CAAmBe,iBAAnB,CAAL,EAA4C;EAC1C2B,IAAAA,MAAM,GAAGtJ,qBAAC,CAACsJ,MAAD,CAAD,CAAU9C,OAAV,CAAkB2B,eAAlB,EAAmC,CAAnC,CAAT;EACD;;EAED,MAAI,CAACmB,MAAD,IAAWA,MAAM,CAACJ,YAAP,CAAoB,UAApB,CAAX,IAA8CI,MAAM,CAACR,SAAP,CAAiBC,QAAjB,CAA0B,UAA1B,CAAlD,EAAyF;EACvFhJ,IAAAA,KAAK,CAACuH,cAAN,GADuF;EAExF,GAFD,MAEO;EACL,QAAMkC,QAAQ,GAAGF,MAAM,CAACvH,aAAP,CAAqBkG,cAArB,CAAjB;;EAEA,QAAIuB,QAAQ,KAAKA,QAAQ,CAACN,YAAT,CAAsB,UAAtB,KAAqCM,QAAQ,CAACV,SAAT,CAAmBC,QAAnB,CAA4B,UAA5B,CAA1C,CAAZ,EAAgG;EAC9FhJ,MAAAA,KAAK,CAACuH,cAAN,GAD8F;;EAE9F;EACD;;EAED,QAAIiC,aAAa,CAACE,OAAd,KAA0B,OAA1B,IAAqCH,MAAM,CAACG,OAAP,KAAmB,OAA5D,EAAqE;EACnEnB,MAAAA,MAAM,CAACtB,gBAAP,CAAwBxH,IAAxB,CAA6BQ,qBAAC,CAACsJ,MAAD,CAA9B,EAAwC,QAAxC,EAAkDC,aAAa,CAACE,OAAd,KAA0B,OAA5E;EACD;EACF;EACF,CAvBH,EAwBGlC,EAxBH,CAwBMa,yBAxBN,EAwBiCP,2BAxBjC,EAwB8D,UAAA9H,KAAK,EAAI;EACnE,MAAMuJ,MAAM,GAAGtJ,qBAAC,CAACD,KAAK,CAACE,MAAP,CAAD,CAAgBuG,OAAhB,CAAwB2B,eAAxB,EAAyC,CAAzC,CAAf;EACAnI,EAAAA,qBAAC,CAACsJ,MAAD,CAAD,CAAUF,WAAV,CAAsBxB,gBAAtB,EAAwC,eAAehE,IAAf,CAAoB7D,KAAK,CAAC6I,IAA1B,CAAxC;EACD,CA3BH;AA6BA5I,uBAAC,CAAC0J,MAAD,CAAD,CAAUnC,EAAV,CAAac,mBAAb,EAAkC,YAAM;EACtC;EAEA;EACA,MAAIsB,OAAO,GAAG,GAAGC,KAAH,CAASpK,IAAT,CAAc+B,QAAQ,CAACsI,gBAAT,CAA0B7B,6BAA1B,CAAd,CAAd;;EACA,OAAK,IAAI8B,CAAC,GAAG,CAAR,EAAWC,GAAG,GAAGJ,OAAO,CAACK,MAA9B,EAAsCF,CAAC,GAAGC,GAA1C,EAA+CD,CAAC,EAAhD,EAAoD;EAClD,QAAMR,MAAM,GAAGK,OAAO,CAACG,CAAD,CAAtB;EACA,QAAMnB,KAAK,GAAGW,MAAM,CAACvH,aAAP,CAAqBkG,cAArB,CAAd;;EACA,QAAIU,KAAK,CAACE,OAAN,IAAiBF,KAAK,CAACO,YAAN,CAAmB,SAAnB,CAArB,EAAoD;EAClDI,MAAAA,MAAM,CAACR,SAAP,CAAiBmB,GAAjB,CAAqBvC,iBAArB;EACD,KAFD,MAEO;EACL4B,MAAAA,MAAM,CAACR,SAAP,CAAiB/B,MAAjB,CAAwBW,iBAAxB;EACD;EACF,GAbqC;;;EAgBtCiC,EAAAA,OAAO,GAAG,GAAGC,KAAH,CAASpK,IAAT,CAAc+B,QAAQ,CAACsI,gBAAT,CAA0B9B,oBAA1B,CAAd,CAAV;;EACA,OAAK,IAAI+B,EAAC,GAAG,CAAR,EAAWC,IAAG,GAAGJ,OAAO,CAACK,MAA9B,EAAsCF,EAAC,GAAGC,IAA1C,EAA+CD,EAAC,EAAhD,EAAoD;EAClD,QAAMR,OAAM,GAAGK,OAAO,CAACG,EAAD,CAAtB;;EACA,QAAIR,OAAM,CAAC1H,YAAP,CAAoB,cAApB,MAAwC,MAA5C,EAAoD;EAClD0H,MAAAA,OAAM,CAACR,SAAP,CAAiBmB,GAAjB,CAAqBvC,iBAArB;EACD,KAFD,MAEO;EACL4B,MAAAA,OAAM,CAACR,SAAP,CAAiB/B,MAAjB,CAAwBW,iBAAxB;EACD;EACF;EACF,CAzBD;EA2BA;;;;;;AAMA1H,uBAAC,CAACgB,EAAF,CAAK+D,MAAL,IAAauD,MAAM,CAACtB,gBAApB;AACAhH,uBAAC,CAACgB,EAAF,CAAK+D,MAAL,EAAWyC,WAAX,GAAyBc,MAAzB;;AACAtI,uBAAC,CAACgB,EAAF,CAAK+D,MAAL,EAAW0C,UAAX,GAAwB,YAAM;EAC5BzH,EAAAA,qBAAC,CAACgB,EAAF,CAAK+D,MAAL,IAAaK,oBAAb;EACA,SAAOkD,MAAM,CAACtB,gBAAd;EACD,CAHD;;ECjMA;;;;;;EAMA,IAAMjC,MAAI,GAAG,UAAb;EACA,IAAMC,SAAO,GAAG,OAAhB;EACA,IAAMC,UAAQ,GAAG,aAAjB;EACA,IAAMC,WAAS,SAAOD,UAAtB;EACA,IAAME,cAAY,GAAG,WAArB;EACA,IAAMC,oBAAkB,GAAGpF,qBAAC,CAACgB,EAAF,CAAK+D,MAAL,CAA3B;EACA,IAAMmF,kBAAkB,GAAG,EAA3B;;EACA,IAAMC,mBAAmB,GAAG,EAA5B;;EACA,IAAMC,sBAAsB,GAAG,GAA/B;;EACA,IAAMC,eAAe,GAAG,EAAxB;EAEA,IAAMC,OAAO,GAAG;EACdC,EAAAA,QAAQ,EAAE,IADI;EAEdC,EAAAA,QAAQ,EAAE,IAFI;EAGdC,EAAAA,KAAK,EAAE,KAHO;EAIdC,EAAAA,KAAK,EAAE,OAJO;EAKdC,EAAAA,IAAI,EAAE,IALQ;EAMdC,EAAAA,KAAK,EAAE;EANO,CAAhB;EASA,IAAMC,WAAW,GAAG;EAClBN,EAAAA,QAAQ,EAAE,kBADQ;EAElBC,EAAAA,QAAQ,EAAE,SAFQ;EAGlBC,EAAAA,KAAK,EAAE,kBAHW;EAIlBC,EAAAA,KAAK,EAAE,kBAJW;EAKlBC,EAAAA,IAAI,EAAE,SALY;EAMlBC,EAAAA,KAAK,EAAE;EANW,CAApB;EASA,IAAME,cAAc,GAAG,MAAvB;EACA,IAAMC,cAAc,GAAG,MAAvB;EACA,IAAMC,cAAc,GAAG,MAAvB;EACA,IAAMC,eAAe,GAAG,OAAxB;EAEA,IAAMC,WAAW,aAAWhG,WAA5B;EACA,IAAMiG,UAAU,YAAUjG,WAA1B;EACA,IAAMkG,aAAa,eAAalG,WAAhC;EACA,IAAMmG,gBAAgB,kBAAgBnG,WAAtC;EACA,IAAMoG,gBAAgB,kBAAgBpG,WAAtC;EACA,IAAMqG,gBAAgB,kBAAgBrG,WAAtC;EACA,IAAMsG,eAAe,iBAAetG,WAApC;EACA,IAAMuG,cAAc,gBAAcvG,WAAlC;EACA,IAAMwG,iBAAiB,mBAAiBxG,WAAxC;EACA,IAAMyG,eAAe,iBAAezG,WAApC;EACA,IAAM0G,gBAAgB,iBAAe1G,WAArC;EACA,IAAMmD,qBAAmB,YAAUnD,WAAV,GAAsBC,cAA/C;EACA,IAAMK,sBAAoB,aAAWN,WAAX,GAAuBC,cAAjD;EAEA,IAAM0G,mBAAmB,GAAG,UAA5B;EACA,IAAMnE,mBAAiB,GAAG,QAA1B;EACA,IAAMoE,gBAAgB,GAAG,OAAzB;EACA,IAAMC,gBAAgB,GAAG,qBAAzB;EACA,IAAMC,eAAe,GAAG,oBAAxB;EACA,IAAMC,eAAe,GAAG,oBAAxB;EACA,IAAMC,eAAe,GAAG,oBAAxB;EACA,IAAMC,wBAAwB,GAAG,eAAjC;EAEA,IAAMjE,iBAAe,GAAG,SAAxB;EACA,IAAMkE,oBAAoB,GAAG,uBAA7B;EACA,IAAMC,aAAa,GAAG,gBAAtB;EACA,IAAMC,iBAAiB,GAAG,oBAA1B;EACA,IAAMC,kBAAkB,GAAG,0CAA3B;EACA,IAAMC,mBAAmB,GAAG,sBAA5B;EACA,IAAMC,mBAAmB,GAAG,+BAA5B;EACA,IAAMC,kBAAkB,GAAG,wBAA3B;EAEA,IAAMC,WAAW,GAAG;EAClBC,EAAAA,KAAK,EAAE,OADW;EAElBC,EAAAA,GAAG,EAAE;EAFa,CAApB;EAKA;;;;;;MAKMC;EACJ,oBAAYpL,OAAZ,EAAqBwB,MAArB,EAA6B;EAC3B,SAAK6J,MAAL,GAAc,IAAd;EACA,SAAKC,SAAL,GAAiB,IAAjB;EACA,SAAKC,cAAL,GAAsB,IAAtB;EACA,SAAKC,SAAL,GAAiB,KAAjB;EACA,SAAKC,UAAL,GAAkB,KAAlB;EACA,SAAKC,YAAL,GAAoB,IAApB;EACA,SAAKC,WAAL,GAAmB,CAAnB;EACA,SAAKC,WAAL,GAAmB,CAAnB;EAEA,SAAKC,OAAL,GAAe,KAAKC,UAAL,CAAgBtK,MAAhB,CAAf;EACA,SAAK2C,QAAL,GAAgBnE,OAAhB;EACA,SAAK+L,kBAAL,GAA0B,KAAK5H,QAAL,CAAc9D,aAAd,CAA4ByK,mBAA5B,CAA1B;EACA,SAAKkB,eAAL,GAAuB,kBAAkBnM,QAAQ,CAACyC,eAA3B,IAA8C2J,SAAS,CAACC,cAAV,GAA2B,CAAhG;EACA,SAAKC,aAAL,GAAqBhL,OAAO,CAAC6G,MAAM,CAACoE,YAAP,IAAuBpE,MAAM,CAACqE,cAA/B,CAA5B;;EAEA,SAAKC,kBAAL;EACD;;;;;EAYD;WAEAC,OAAA,gBAAO;EACL,QAAI,CAAC,KAAKd,UAAV,EAAsB;EACpB,WAAKe,MAAL,CAAYpD,cAAZ;EACD;EACF;;WAEDqD,kBAAA,2BAAkB;EAChB,QAAMjH,QAAQ,GAAGlH,qBAAC,CAAC,KAAK6F,QAAN,CAAlB,CADgB;EAGhB;;EACA,QAAI,CAACtE,QAAQ,CAAC6M,MAAV,IACDlH,QAAQ,CAAChH,EAAT,CAAY,UAAZ,KAA2BgH,QAAQ,CAAC/E,GAAT,CAAa,YAAb,MAA+B,QAD7D,EACwE;EACtE,WAAK8L,IAAL;EACD;EACF;;WAEDI,OAAA,gBAAO;EACL,QAAI,CAAC,KAAKlB,UAAV,EAAsB;EACpB,WAAKe,MAAL,CAAYnD,cAAZ;EACD;EACF;;WAEDL,QAAA,eAAM3K,KAAN,EAAa;EACX,QAAI,CAACA,KAAL,EAAY;EACV,WAAKmN,SAAL,GAAiB,IAAjB;EACD;;EAED,QAAI,KAAKrH,QAAL,CAAc9D,aAAd,CAA4BwK,kBAA5B,CAAJ,EAAqD;EACnD3L,MAAAA,IAAI,CAACE,oBAAL,CAA0B,KAAK+E,QAA/B;EACA,WAAKyI,KAAL,CAAW,IAAX;EACD;;EAEDC,IAAAA,aAAa,CAAC,KAAKvB,SAAN,CAAb;EACA,SAAKA,SAAL,GAAiB,IAAjB;EACD;;WAEDsB,QAAA,eAAMvO,KAAN,EAAa;EACX,QAAI,CAACA,KAAL,EAAY;EACV,WAAKmN,SAAL,GAAiB,KAAjB;EACD;;EAED,QAAI,KAAKF,SAAT,EAAoB;EAClBuB,MAAAA,aAAa,CAAC,KAAKvB,SAAN,CAAb;EACA,WAAKA,SAAL,GAAiB,IAAjB;EACD;;EAED,QAAI,KAAKO,OAAL,CAAahD,QAAb,IAAyB,CAAC,KAAK2C,SAAnC,EAA8C;EAC5C,WAAKF,SAAL,GAAiBwB,WAAW,CAC1B,CAACjN,QAAQ,CAACkN,eAAT,GAA2B,KAAKN,eAAhC,GAAkD,KAAKF,IAAxD,EAA8DS,IAA9D,CAAmE,IAAnE,CAD0B,EAE1B,KAAKnB,OAAL,CAAahD,QAFa,CAA5B;EAID;EACF;;WAEDoE,KAAA,YAAGC,KAAH,EAAU;EAAA;;EACR,SAAK3B,cAAL,GAAsB,KAAKpH,QAAL,CAAc9D,aAAd,CAA4BqK,oBAA5B,CAAtB;;EAEA,QAAMyC,WAAW,GAAG,KAAKC,aAAL,CAAmB,KAAK7B,cAAxB,CAApB;;EAEA,QAAI2B,KAAK,GAAG,KAAK7B,MAAL,CAAY/C,MAAZ,GAAqB,CAA7B,IAAkC4E,KAAK,GAAG,CAA9C,EAAiD;EAC/C;EACD;;EAED,QAAI,KAAKzB,UAAT,EAAqB;EACnBnN,MAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiBlF,GAAjB,CAAqBwK,UAArB,EAAiC;EAAA,eAAM,KAAI,CAACwD,EAAL,CAAQC,KAAR,CAAN;EAAA,OAAjC;EACA;EACD;;EAED,QAAIC,WAAW,KAAKD,KAApB,EAA2B;EACzB,WAAKlE,KAAL;EACA,WAAK4D,KAAL;EACA;EACD;;EAED,QAAMS,SAAS,GAAGH,KAAK,GAAGC,WAAR,GAChB/D,cADgB,GAEhBC,cAFF;;EAIA,SAAKmD,MAAL,CAAYa,SAAZ,EAAuB,KAAKhC,MAAL,CAAY6B,KAAZ,CAAvB;EACD;;WAEDvI,UAAA,mBAAU;EACRrG,IAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiBmJ,GAAjB,CAAqB9J,WAArB;EACAlF,IAAAA,qBAAC,CAACsG,UAAF,CAAa,KAAKT,QAAlB,EAA4BZ,UAA5B;EAEA,SAAK8H,MAAL,GAAc,IAAd;EACA,SAAKQ,OAAL,GAAe,IAAf;EACA,SAAK1H,QAAL,GAAgB,IAAhB;EACA,SAAKmH,SAAL,GAAiB,IAAjB;EACA,SAAKE,SAAL,GAAiB,IAAjB;EACA,SAAKC,UAAL,GAAkB,IAAlB;EACA,SAAKF,cAAL,GAAsB,IAAtB;EACA,SAAKQ,kBAAL,GAA0B,IAA1B;EACD;;;WAIDD,aAAA,oBAAWtK,MAAX,EAAmB;EACjBA,IAAAA,MAAM,gBACDoH,OADC,EAEDpH,MAFC,CAAN;EAIAtC,IAAAA,IAAI,CAACoC,eAAL,CAAqB+B,MAArB,EAA2B7B,MAA3B,EAAmC2H,WAAnC;EACA,WAAO3H,MAAP;EACD;;WAED+L,eAAA,wBAAe;EACb,QAAMC,SAAS,GAAG7N,IAAI,CAAC8N,GAAL,CAAS,KAAK7B,WAAd,CAAlB;;EAEA,QAAI4B,SAAS,IAAI7E,eAAjB,EAAkC;EAChC;EACD;;EAED,QAAM0E,SAAS,GAAGG,SAAS,GAAG,KAAK5B,WAAnC;EAEA,SAAKA,WAAL,GAAmB,CAAnB,CATa;;EAYb,QAAIyB,SAAS,GAAG,CAAhB,EAAmB;EACjB,WAAKV,IAAL;EACD,KAdY;;;EAiBb,QAAIU,SAAS,GAAG,CAAhB,EAAmB;EACjB,WAAKd,IAAL;EACD;EACF;;WAEDD,qBAAA,8BAAqB;EAAA;;EACnB,QAAI,KAAKT,OAAL,CAAa/C,QAAjB,EAA2B;EACzBxK,MAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiB0B,EAAjB,CAAoB6D,aAApB,EAAmC,UAAArL,KAAK;EAAA,eAAI,MAAI,CAACqP,QAAL,CAAcrP,KAAd,CAAJ;EAAA,OAAxC;EACD;;EAED,QAAI,KAAKwN,OAAL,CAAa7C,KAAb,KAAuB,OAA3B,EAAoC;EAClC1K,MAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CACG0B,EADH,CACM8D,gBADN,EACwB,UAAAtL,KAAK;EAAA,eAAI,MAAI,CAAC2K,KAAL,CAAW3K,KAAX,CAAJ;EAAA,OAD7B,EAEGwH,EAFH,CAEM+D,gBAFN,EAEwB,UAAAvL,KAAK;EAAA,eAAI,MAAI,CAACuO,KAAL,CAAWvO,KAAX,CAAJ;EAAA,OAF7B;EAGD;;EAED,QAAI,KAAKwN,OAAL,CAAa3C,KAAjB,EAAwB;EACtB,WAAKyE,uBAAL;EACD;EACF;;WAEDA,0BAAA,mCAA0B;EAAA;;EACxB,QAAI,CAAC,KAAK3B,eAAV,EAA2B;EACzB;EACD;;EAED,QAAM4B,KAAK,GAAG,SAARA,KAAQ,CAAAvP,KAAK,EAAI;EACrB,UAAI,MAAI,CAAC8N,aAAL,IAAsBlB,WAAW,CAAC5M,KAAK,CAACwP,aAAN,CAAoBC,WAApB,CAAgC1L,WAAhC,EAAD,CAArC,EAAsF;EACpF,QAAA,MAAI,CAACuJ,WAAL,GAAmBtN,KAAK,CAACwP,aAAN,CAAoBE,OAAvC;EACD,OAFD,MAEO,IAAI,CAAC,MAAI,CAAC5B,aAAV,EAAyB;EAC9B,QAAA,MAAI,CAACR,WAAL,GAAmBtN,KAAK,CAACwP,aAAN,CAAoBG,OAApB,CAA4B,CAA5B,EAA+BD,OAAlD;EACD;EACF,KAND;;EAQA,QAAME,IAAI,GAAG,SAAPA,IAAO,CAAA5P,KAAK,EAAI;EACpB;EACA,UAAIA,KAAK,CAACwP,aAAN,CAAoBG,OAApB,IAA+B3P,KAAK,CAACwP,aAAN,CAAoBG,OAApB,CAA4B1F,MAA5B,GAAqC,CAAxE,EAA2E;EACzE,QAAA,MAAI,CAACsD,WAAL,GAAmB,CAAnB;EACD,OAFD,MAEO;EACL,QAAA,MAAI,CAACA,WAAL,GAAmBvN,KAAK,CAACwP,aAAN,CAAoBG,OAApB,CAA4B,CAA5B,EAA+BD,OAA/B,GAAyC,MAAI,CAACpC,WAAjE;EACD;EACF,KAPD;;EASA,QAAMuC,GAAG,GAAG,SAANA,GAAM,CAAA7P,KAAK,EAAI;EACnB,UAAI,MAAI,CAAC8N,aAAL,IAAsBlB,WAAW,CAAC5M,KAAK,CAACwP,aAAN,CAAoBC,WAApB,CAAgC1L,WAAhC,EAAD,CAArC,EAAsF;EACpF,QAAA,MAAI,CAACwJ,WAAL,GAAmBvN,KAAK,CAACwP,aAAN,CAAoBE,OAApB,GAA8B,MAAI,CAACpC,WAAtD;EACD;;EAED,MAAA,MAAI,CAAC4B,YAAL;;EACA,UAAI,MAAI,CAAC1B,OAAL,CAAa7C,KAAb,KAAuB,OAA3B,EAAoC;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,QAAA,MAAI,CAACA,KAAL;;EACA,YAAI,MAAI,CAAC0C,YAAT,EAAuB;EACrByC,UAAAA,YAAY,CAAC,MAAI,CAACzC,YAAN,CAAZ;EACD;;EAED,QAAA,MAAI,CAACA,YAAL,GAAoBvM,UAAU,CAAC,UAAAd,KAAK;EAAA,iBAAI,MAAI,CAACuO,KAAL,CAAWvO,KAAX,CAAJ;EAAA,SAAN,EAA6BqK,sBAAsB,GAAG,MAAI,CAACmD,OAAL,CAAahD,QAAnE,CAA9B;EACD;EACF,KAtBD;;EAwBAvK,IAAAA,qBAAC,CAAC,KAAK6F,QAAL,CAAcgE,gBAAd,CAA+ByC,iBAA/B,CAAD,CAAD,CACG/E,EADH,CACMqE,gBADN,EACwB,UAAAkE,CAAC;EAAA,aAAIA,CAAC,CAACxI,cAAF,EAAJ;EAAA,KADzB;;EAGA,QAAI,KAAKuG,aAAT,EAAwB;EACtB7N,MAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiB0B,EAAjB,CAAoBmE,iBAApB,EAAuC,UAAA3L,KAAK;EAAA,eAAIuP,KAAK,CAACvP,KAAD,CAAT;EAAA,OAA5C;EACAC,MAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiB0B,EAAjB,CAAoBoE,eAApB,EAAqC,UAAA5L,KAAK;EAAA,eAAI6P,GAAG,CAAC7P,KAAD,CAAP;EAAA,OAA1C;;EAEA,WAAK8F,QAAL,CAAciD,SAAd,CAAwBmB,GAAxB,CAA4BkC,wBAA5B;EACD,KALD,MAKO;EACLnM,MAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiB0B,EAAjB,CAAoBgE,gBAApB,EAAsC,UAAAxL,KAAK;EAAA,eAAIuP,KAAK,CAACvP,KAAD,CAAT;EAAA,OAA3C;EACAC,MAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiB0B,EAAjB,CAAoBiE,eAApB,EAAqC,UAAAzL,KAAK;EAAA,eAAI4P,IAAI,CAAC5P,KAAD,CAAR;EAAA,OAA1C;EACAC,MAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiB0B,EAAjB,CAAoBkE,cAApB,EAAoC,UAAA1L,KAAK;EAAA,eAAI6P,GAAG,CAAC7P,KAAD,CAAP;EAAA,OAAzC;EACD;EACF;;WAEDqP,WAAA,kBAASrP,KAAT,EAAgB;EACd,QAAI,kBAAkB6D,IAAlB,CAAuB7D,KAAK,CAACE,MAAN,CAAawJ,OAApC,CAAJ,EAAkD;EAChD;EACD;;EAED,YAAQ1J,KAAK,CAACgQ,KAAd;EACE,WAAK7F,kBAAL;EACEnK,QAAAA,KAAK,CAACuH,cAAN;EACA,aAAK+G,IAAL;EACA;;EACF,WAAKlE,mBAAL;EACEpK,QAAAA,KAAK,CAACuH,cAAN;EACA,aAAK2G,IAAL;EACA;EARJ;EAWD;;WAEDa,gBAAA,uBAAcpN,OAAd,EAAuB;EACrB,SAAKqL,MAAL,GAAcrL,OAAO,IAAIA,OAAO,CAAC2C,UAAnB,GACZ,GAAGuF,KAAH,CAASpK,IAAT,CAAckC,OAAO,CAAC2C,UAAR,CAAmBwF,gBAAnB,CAAoCwC,aAApC,CAAd,CADY,GAEZ,EAFF;EAGA,WAAO,KAAKU,MAAL,CAAYiD,OAAZ,CAAoBtO,OAApB,CAAP;EACD;;WAEDuO,sBAAA,6BAAoBlB,SAApB,EAA+B/F,aAA/B,EAA8C;EAC5C,QAAMkH,eAAe,GAAGnB,SAAS,KAAKjE,cAAtC;EACA,QAAMqF,eAAe,GAAGpB,SAAS,KAAKhE,cAAtC;;EACA,QAAM8D,WAAW,GAAG,KAAKC,aAAL,CAAmB9F,aAAnB,CAApB;;EACA,QAAMoH,aAAa,GAAG,KAAKrD,MAAL,CAAY/C,MAAZ,GAAqB,CAA3C;EACA,QAAMqG,aAAa,GAAGF,eAAe,IAAItB,WAAW,KAAK,CAAnC,IACEqB,eAAe,IAAIrB,WAAW,KAAKuB,aAD3D;;EAGA,QAAIC,aAAa,IAAI,CAAC,KAAK9C,OAAL,CAAa5C,IAAnC,EAAyC;EACvC,aAAO3B,aAAP;EACD;;EAED,QAAMsH,KAAK,GAAGvB,SAAS,KAAKhE,cAAd,GAA+B,CAAC,CAAhC,GAAoC,CAAlD;EACA,QAAMwF,SAAS,GAAG,CAAC1B,WAAW,GAAGyB,KAAf,IAAwB,KAAKvD,MAAL,CAAY/C,MAAtD;EAEA,WAAOuG,SAAS,KAAK,CAAC,CAAf,GACL,KAAKxD,MAAL,CAAY,KAAKA,MAAL,CAAY/C,MAAZ,GAAqB,CAAjC,CADK,GACiC,KAAK+C,MAAL,CAAYwD,SAAZ,CADxC;EAED;;WAEDC,qBAAA,4BAAmBC,aAAnB,EAAkCC,kBAAlC,EAAsD;EACpD,QAAMC,WAAW,GAAG,KAAK7B,aAAL,CAAmB2B,aAAnB,CAApB;;EACA,QAAMG,SAAS,GAAG,KAAK9B,aAAL,CAAmB,KAAKjJ,QAAL,CAAc9D,aAAd,CAA4BqK,oBAA5B,CAAnB,CAAlB;;EACA,QAAMyE,UAAU,GAAG7Q,qBAAC,CAAC0G,KAAF,CAAQwE,WAAR,EAAqB;EACtCuF,MAAAA,aAAa,EAAbA,aADsC;EAEtC1B,MAAAA,SAAS,EAAE2B,kBAF2B;EAGtCI,MAAAA,IAAI,EAAEF,SAHgC;EAItCjC,MAAAA,EAAE,EAAEgC;EAJkC,KAArB,CAAnB;EAOA3Q,IAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiBlD,OAAjB,CAAyBkO,UAAzB;EAEA,WAAOA,UAAP;EACD;;WAEDE,6BAAA,oCAA2BrP,OAA3B,EAAoC;EAClC,QAAI,KAAK+L,kBAAT,EAA6B;EAC3B,UAAMuD,UAAU,GAAG,GAAGpH,KAAH,CAASpK,IAAT,CAAc,KAAKiO,kBAAL,CAAwB5D,gBAAxB,CAAyC3B,iBAAzC,CAAd,CAAnB;EACAlI,MAAAA,qBAAC,CAACgR,UAAD,CAAD,CAAcrK,WAAd,CAA0Be,mBAA1B;;EAEA,UAAMuJ,aAAa,GAAG,KAAKxD,kBAAL,CAAwByD,QAAxB,CACpB,KAAKpC,aAAL,CAAmBpN,OAAnB,CADoB,CAAtB;;EAIA,UAAIuP,aAAJ,EAAmB;EACjBjR,QAAAA,qBAAC,CAACiR,aAAD,CAAD,CAAiBE,QAAjB,CAA0BzJ,mBAA1B;EACD;EACF;EACF;;WAEDwG,SAAA,gBAAOa,SAAP,EAAkBrN,OAAlB,EAA2B;EAAA;;EACzB,QAAMsH,aAAa,GAAG,KAAKnD,QAAL,CAAc9D,aAAd,CAA4BqK,oBAA5B,CAAtB;;EACA,QAAMgF,kBAAkB,GAAG,KAAKtC,aAAL,CAAmB9F,aAAnB,CAA3B;;EACA,QAAMqI,WAAW,GAAG3P,OAAO,IAAIsH,aAAa,IAC1C,KAAKiH,mBAAL,CAAyBlB,SAAzB,EAAoC/F,aAApC,CADF;;EAEA,QAAMsI,gBAAgB,GAAG,KAAKxC,aAAL,CAAmBuC,WAAnB,CAAzB;;EACA,QAAME,SAAS,GAAG1O,OAAO,CAAC,KAAKmK,SAAN,CAAzB;EAEA,QAAIwE,oBAAJ;EACA,QAAIC,cAAJ;EACA,QAAIf,kBAAJ;;EAEA,QAAI3B,SAAS,KAAKjE,cAAlB,EAAkC;EAChC0G,MAAAA,oBAAoB,GAAGxF,eAAvB;EACAyF,MAAAA,cAAc,GAAGxF,eAAjB;EACAyE,MAAAA,kBAAkB,GAAG1F,cAArB;EACD,KAJD,MAIO;EACLwG,MAAAA,oBAAoB,GAAGzF,gBAAvB;EACA0F,MAAAA,cAAc,GAAGvF,eAAjB;EACAwE,MAAAA,kBAAkB,GAAGzF,eAArB;EACD;;EAED,QAAIoG,WAAW,IAAIrR,qBAAC,CAACqR,WAAD,CAAD,CAAezK,QAAf,CAAwBc,mBAAxB,CAAnB,EAA+D;EAC7D,WAAKyF,UAAL,GAAkB,KAAlB;EACA;EACD;;EAED,QAAM0D,UAAU,GAAG,KAAKL,kBAAL,CAAwBa,WAAxB,EAAqCX,kBAArC,CAAnB;;EACA,QAAIG,UAAU,CAAC1K,kBAAX,EAAJ,EAAqC;EACnC;EACD;;EAED,QAAI,CAAC6C,aAAD,IAAkB,CAACqI,WAAvB,EAAoC;EAClC;EACA;EACD;;EAED,SAAKlE,UAAL,GAAkB,IAAlB;;EAEA,QAAIoE,SAAJ,EAAe;EACb,WAAK7G,KAAL;EACD;;EAED,SAAKqG,0BAAL,CAAgCM,WAAhC;;EAEA,QAAMK,SAAS,GAAG1R,qBAAC,CAAC0G,KAAF,CAAQyE,UAAR,EAAoB;EACpCsF,MAAAA,aAAa,EAAEY,WADqB;EAEpCtC,MAAAA,SAAS,EAAE2B,kBAFyB;EAGpCI,MAAAA,IAAI,EAAEM,kBAH8B;EAIpCzC,MAAAA,EAAE,EAAE2C;EAJgC,KAApB,CAAlB;;EAOA,QAAItR,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiBe,QAAjB,CAA0BkF,gBAA1B,CAAJ,EAAiD;EAC/C9L,MAAAA,qBAAC,CAACqR,WAAD,CAAD,CAAeF,QAAf,CAAwBM,cAAxB;EAEA7Q,MAAAA,IAAI,CAAC6B,MAAL,CAAY4O,WAAZ;EAEArR,MAAAA,qBAAC,CAACgJ,aAAD,CAAD,CAAiBmI,QAAjB,CAA0BK,oBAA1B;EACAxR,MAAAA,qBAAC,CAACqR,WAAD,CAAD,CAAeF,QAAf,CAAwBK,oBAAxB;EAEA,UAAMG,mBAAmB,GAAGC,QAAQ,CAACP,WAAW,CAACzP,YAAZ,CAAyB,eAAzB,CAAD,EAA4C,EAA5C,CAApC;;EACA,UAAI+P,mBAAJ,EAAyB;EACvB,aAAKpE,OAAL,CAAasE,eAAb,GAA+B,KAAKtE,OAAL,CAAasE,eAAb,IAAgC,KAAKtE,OAAL,CAAahD,QAA5E;EACA,aAAKgD,OAAL,CAAahD,QAAb,GAAwBoH,mBAAxB;EACD,OAHD,MAGO;EACL,aAAKpE,OAAL,CAAahD,QAAb,GAAwB,KAAKgD,OAAL,CAAasE,eAAb,IAAgC,KAAKtE,OAAL,CAAahD,QAArE;EACD;;EAED,UAAMrI,kBAAkB,GAAGtB,IAAI,CAACqB,gCAAL,CAAsC+G,aAAtC,CAA3B;EAEAhJ,MAAAA,qBAAC,CAACgJ,aAAD,CAAD,CACGrI,GADH,CACOC,IAAI,CAAC1B,cADZ,EAC4B,YAAM;EAC9Bc,QAAAA,qBAAC,CAACqR,WAAD,CAAD,CACG1K,WADH,CACkB6K,oBADlB,SAC0CC,cAD1C,EAEGN,QAFH,CAEYzJ,mBAFZ;EAIA1H,QAAAA,qBAAC,CAACgJ,aAAD,CAAD,CAAiBrC,WAAjB,CAAgCe,mBAAhC,SAAqD+J,cAArD,SAAuED,oBAAvE;EAEA,QAAA,MAAI,CAACrE,UAAL,GAAkB,KAAlB;EAEAtM,QAAAA,UAAU,CAAC;EAAA,iBAAMb,qBAAC,CAAC,MAAI,CAAC6F,QAAN,CAAD,CAAiBlD,OAAjB,CAAyB+O,SAAzB,CAAN;EAAA,SAAD,EAA4C,CAA5C,CAAV;EACD,OAXH,EAYGzQ,oBAZH,CAYwBiB,kBAZxB;EAaD,KA/BD,MA+BO;EACLlC,MAAAA,qBAAC,CAACgJ,aAAD,CAAD,CAAiBrC,WAAjB,CAA6Be,mBAA7B;EACA1H,MAAAA,qBAAC,CAACqR,WAAD,CAAD,CAAeF,QAAf,CAAwBzJ,mBAAxB;EAEA,WAAKyF,UAAL,GAAkB,KAAlB;EACAnN,MAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiBlD,OAAjB,CAAyB+O,SAAzB;EACD;;EAED,QAAIH,SAAJ,EAAe;EACb,WAAKjD,KAAL;EACD;EACF;;;aAIMtH,mBAAP,0BAAwB9D,MAAxB,EAAgC;EAC9B,WAAO,KAAK+D,IAAL,CAAU,YAAY;EAC3B,UAAIE,IAAI,GAAGnH,qBAAC,CAAC,IAAD,CAAD,CAAQmH,IAAR,CAAalC,UAAb,CAAX;;EACA,UAAIsI,OAAO,gBACNjD,OADM,EAENtK,qBAAC,CAAC,IAAD,CAAD,CAAQmH,IAAR,EAFM,CAAX;;EAKA,UAAI,OAAOjE,MAAP,KAAkB,QAAtB,EAAgC;EAC9BqK,QAAAA,OAAO,gBACFA,OADE,EAEFrK,MAFE,CAAP;EAID;;EAED,UAAM4O,MAAM,GAAG,OAAO5O,MAAP,KAAkB,QAAlB,GAA6BA,MAA7B,GAAsCqK,OAAO,CAAC9C,KAA7D;;EAEA,UAAI,CAACtD,IAAL,EAAW;EACTA,QAAAA,IAAI,GAAG,IAAI2F,QAAJ,CAAa,IAAb,EAAmBS,OAAnB,CAAP;EACAvN,QAAAA,qBAAC,CAAC,IAAD,CAAD,CAAQmH,IAAR,CAAalC,UAAb,EAAuBkC,IAAvB;EACD;;EAED,UAAI,OAAOjE,MAAP,KAAkB,QAAtB,EAAgC;EAC9BiE,QAAAA,IAAI,CAACwH,EAAL,CAAQzL,MAAR;EACD,OAFD,MAEO,IAAI,OAAO4O,MAAP,KAAkB,QAAtB,EAAgC;EACrC,YAAI,OAAO3K,IAAI,CAAC2K,MAAD,CAAX,KAAwB,WAA5B,EAAyC;EACvC,gBAAM,IAAIvN,SAAJ,wBAAkCuN,MAAlC,QAAN;EACD;;EAED3K,QAAAA,IAAI,CAAC2K,MAAD,CAAJ;EACD,OANM,MAMA,IAAIvE,OAAO,CAAChD,QAAR,IAAoBgD,OAAO,CAACwE,IAAhC,EAAsC;EAC3C5K,QAAAA,IAAI,CAACuD,KAAL;EACAvD,QAAAA,IAAI,CAACmH,KAAL;EACD;EACF,KAjCM,CAAP;EAkCD;;aAEM0D,uBAAP,8BAA4BjS,KAA5B,EAAmC;EACjC,QAAM4B,QAAQ,GAAGf,IAAI,CAACa,sBAAL,CAA4B,IAA5B,CAAjB;;EAEA,QAAI,CAACE,QAAL,EAAe;EACb;EACD;;EAED,QAAM1B,MAAM,GAAGD,qBAAC,CAAC2B,QAAD,CAAD,CAAY,CAAZ,CAAf;;EAEA,QAAI,CAAC1B,MAAD,IAAW,CAACD,qBAAC,CAACC,MAAD,CAAD,CAAU2G,QAAV,CAAmBiF,mBAAnB,CAAhB,EAAyD;EACvD;EACD;;EAED,QAAM3I,MAAM,gBACPlD,qBAAC,CAACC,MAAD,CAAD,CAAUkH,IAAV,EADO,EAEPnH,qBAAC,CAAC,IAAD,CAAD,CAAQmH,IAAR,EAFO,CAAZ;;EAIA,QAAM8K,UAAU,GAAG,KAAKrQ,YAAL,CAAkB,eAAlB,CAAnB;;EAEA,QAAIqQ,UAAJ,EAAgB;EACd/O,MAAAA,MAAM,CAACqH,QAAP,GAAkB,KAAlB;EACD;;EAEDuC,IAAAA,QAAQ,CAAC9F,gBAAT,CAA0BxH,IAA1B,CAA+BQ,qBAAC,CAACC,MAAD,CAAhC,EAA0CiD,MAA1C;;EAEA,QAAI+O,UAAJ,EAAgB;EACdjS,MAAAA,qBAAC,CAACC,MAAD,CAAD,CAAUkH,IAAV,CAAelC,UAAf,EAAyB0J,EAAzB,CAA4BsD,UAA5B;EACD;;EAEDlS,IAAAA,KAAK,CAACuH,cAAN;EACD;;;;0BAtcoB;EACnB,aAAOtC,SAAP;EACD;;;0BAEoB;EACnB,aAAOsF,OAAP;EACD;;;;;EAmcH;;;;;;;AAMAtK,uBAAC,CAACuB,QAAD,CAAD,CAAYgG,EAAZ,CAAe/B,sBAAf,EAAqCiH,mBAArC,EAA0DK,QAAQ,CAACkF,oBAAnE;AAEAhS,uBAAC,CAAC0J,MAAD,CAAD,CAAUnC,EAAV,CAAac,qBAAb,EAAkC,YAAM;EACtC,MAAM6J,SAAS,GAAG,GAAGtI,KAAH,CAASpK,IAAT,CAAc+B,QAAQ,CAACsI,gBAAT,CAA0B6C,kBAA1B,CAAd,CAAlB;;EACA,OAAK,IAAI5C,CAAC,GAAG,CAAR,EAAWC,GAAG,GAAGmI,SAAS,CAAClI,MAAhC,EAAwCF,CAAC,GAAGC,GAA5C,EAAiDD,CAAC,EAAlD,EAAsD;EACpD,QAAMqI,SAAS,GAAGnS,qBAAC,CAACkS,SAAS,CAACpI,CAAD,CAAV,CAAnB;;EACAgD,IAAAA,QAAQ,CAAC9F,gBAAT,CAA0BxH,IAA1B,CAA+B2S,SAA/B,EAA0CA,SAAS,CAAChL,IAAV,EAA1C;EACD;EACF,CAND;EAQA;;;;;;AAMAnH,uBAAC,CAACgB,EAAF,CAAK+D,MAAL,IAAa+H,QAAQ,CAAC9F,gBAAtB;AACAhH,uBAAC,CAACgB,EAAF,CAAK+D,MAAL,EAAWyC,WAAX,GAAyBsF,QAAzB;;AACA9M,uBAAC,CAACgB,EAAF,CAAK+D,MAAL,EAAW0C,UAAX,GAAwB,YAAM;EAC5BzH,EAAAA,qBAAC,CAACgB,EAAF,CAAK+D,MAAL,IAAaK,oBAAb;EACA,SAAO0H,QAAQ,CAAC9F,gBAAhB;EACD,CAHD;;ECzkBA;;;;;;EAMA,IAAMjC,MAAI,GAAG,UAAb;EACA,IAAMC,SAAO,GAAG,OAAhB;EACA,IAAMC,UAAQ,GAAG,aAAjB;EACA,IAAMC,WAAS,SAAOD,UAAtB;EACA,IAAME,cAAY,GAAG,WAArB;EACA,IAAMC,oBAAkB,GAAGpF,qBAAC,CAACgB,EAAF,CAAK+D,MAAL,CAA3B;EAEA,IAAMuF,SAAO,GAAG;EACd9B,EAAAA,MAAM,EAAE,IADM;EAEdjC,EAAAA,MAAM,EAAE;EAFM,CAAhB;EAKA,IAAMsE,aAAW,GAAG;EAClBrC,EAAAA,MAAM,EAAE,SADU;EAElBjC,EAAAA,MAAM,EAAE;EAFU,CAApB;EAKA,IAAM6L,UAAU,YAAUlN,WAA1B;EACA,IAAMmN,WAAW,aAAWnN,WAA5B;EACA,IAAMoN,UAAU,YAAUpN,WAA1B;EACA,IAAMqN,YAAY,cAAYrN,WAA9B;EACA,IAAMM,sBAAoB,aAAWN,WAAX,GAAuBC,cAAjD;EAEA,IAAMQ,iBAAe,GAAG,MAAxB;EACA,IAAM6M,mBAAmB,GAAG,UAA5B;EACA,IAAMC,qBAAqB,GAAG,YAA9B;EACA,IAAMC,oBAAoB,GAAG,WAA7B;EAEA,IAAMC,eAAe,GAAG,OAAxB;EACA,IAAMC,gBAAgB,GAAG,QAAzB;EAEA,IAAMC,gBAAgB,GAAG,oBAAzB;EACA,IAAM9K,sBAAoB,GAAG,0BAA7B;EAEA;;;;;;MAMM+K;EACJ,oBAAYpR,OAAZ,EAAqBwB,MAArB,EAA6B;EAC3B,SAAK6P,gBAAL,GAAwB,KAAxB;EACA,SAAKlN,QAAL,GAAgBnE,OAAhB;EACA,SAAK6L,OAAL,GAAe,KAAKC,UAAL,CAAgBtK,MAAhB,CAAf;EACA,SAAK8P,aAAL,GAAqB,GAAGpJ,KAAH,CAASpK,IAAT,CAAc+B,QAAQ,CAACsI,gBAAT,CACjC,wCAAmCnI,OAAO,CAACuR,EAA3C,4DAC0CvR,OAAO,CAACuR,EADlD,SADiC,CAAd,CAArB;EAKA,QAAMC,UAAU,GAAG,GAAGtJ,KAAH,CAASpK,IAAT,CAAc+B,QAAQ,CAACsI,gBAAT,CAA0B9B,sBAA1B,CAAd,CAAnB;;EACA,SAAK,IAAI+B,CAAC,GAAG,CAAR,EAAWC,GAAG,GAAGmJ,UAAU,CAAClJ,MAAjC,EAAyCF,CAAC,GAAGC,GAA7C,EAAkDD,CAAC,EAAnD,EAAuD;EACrD,UAAMqJ,IAAI,GAAGD,UAAU,CAACpJ,CAAD,CAAvB;EACA,UAAMnI,QAAQ,GAAGf,IAAI,CAACa,sBAAL,CAA4B0R,IAA5B,CAAjB;EACA,UAAMC,aAAa,GAAG,GAAGxJ,KAAH,CAASpK,IAAT,CAAc+B,QAAQ,CAACsI,gBAAT,CAA0BlI,QAA1B,CAAd,EACnB0R,MADmB,CACZ,UAAAC,SAAS;EAAA,eAAIA,SAAS,KAAK5R,OAAlB;EAAA,OADG,CAAtB;;EAGA,UAAIC,QAAQ,KAAK,IAAb,IAAqByR,aAAa,CAACpJ,MAAd,GAAuB,CAAhD,EAAmD;EACjD,aAAKuJ,SAAL,GAAiB5R,QAAjB;;EACA,aAAKqR,aAAL,CAAmBQ,IAAnB,CAAwBL,IAAxB;EACD;EACF;;EAED,SAAKM,OAAL,GAAe,KAAKlG,OAAL,CAAahH,MAAb,GAAsB,KAAKmN,UAAL,EAAtB,GAA0C,IAAzD;;EAEA,QAAI,CAAC,KAAKnG,OAAL,CAAahH,MAAlB,EAA0B;EACxB,WAAKoN,yBAAL,CAA+B,KAAK9N,QAApC,EAA8C,KAAKmN,aAAnD;EACD;;EAED,QAAI,KAAKzF,OAAL,CAAa/E,MAAjB,EAAyB;EACvB,WAAKA,MAAL;EACD;EACF;;;;;EAYD;WAEAA,SAAA,kBAAS;EACP,QAAIxI,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiBe,QAAjB,CAA0BjB,iBAA1B,CAAJ,EAAgD;EAC9C,WAAKiO,IAAL;EACD,KAFD,MAEO;EACL,WAAKC,IAAL;EACD;EACF;;WAEDA,OAAA,gBAAO;EAAA;;EACL,QAAI,KAAKd,gBAAL,IACF/S,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiBe,QAAjB,CAA0BjB,iBAA1B,CADF,EAC8C;EAC5C;EACD;;EAED,QAAImO,OAAJ;EACA,QAAIC,WAAJ;;EAEA,QAAI,KAAKN,OAAT,EAAkB;EAChBK,MAAAA,OAAO,GAAG,GAAGlK,KAAH,CAASpK,IAAT,CAAc,KAAKiU,OAAL,CAAa5J,gBAAb,CAA8BgJ,gBAA9B,CAAd,EACPQ,MADO,CACA,UAAAF,IAAI,EAAI;EACd,YAAI,OAAO,KAAI,CAAC5F,OAAL,CAAahH,MAApB,KAA+B,QAAnC,EAA6C;EAC3C,iBAAO4M,IAAI,CAACvR,YAAL,CAAkB,aAAlB,MAAqC,KAAI,CAAC2L,OAAL,CAAahH,MAAzD;EACD;;EAED,eAAO4M,IAAI,CAACrK,SAAL,CAAeC,QAAf,CAAwByJ,mBAAxB,CAAP;EACD,OAPO,CAAV;;EASA,UAAIsB,OAAO,CAAC9J,MAAR,KAAmB,CAAvB,EAA0B;EACxB8J,QAAAA,OAAO,GAAG,IAAV;EACD;EACF;;EAED,QAAIA,OAAJ,EAAa;EACXC,MAAAA,WAAW,GAAG/T,qBAAC,CAAC8T,OAAD,CAAD,CAAWE,GAAX,CAAe,KAAKT,SAApB,EAA+BpM,IAA/B,CAAoClC,UAApC,CAAd;;EACA,UAAI8O,WAAW,IAAIA,WAAW,CAAChB,gBAA/B,EAAiD;EAC/C;EACD;EACF;;EAED,QAAMkB,UAAU,GAAGjU,qBAAC,CAAC0G,KAAF,CAAQ0L,UAAR,CAAnB;EACApS,IAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiBlD,OAAjB,CAAyBsR,UAAzB;;EACA,QAAIA,UAAU,CAAC9N,kBAAX,EAAJ,EAAqC;EACnC;EACD;;EAED,QAAI2N,OAAJ,EAAa;EACXhB,MAAAA,QAAQ,CAAC9L,gBAAT,CAA0BxH,IAA1B,CAA+BQ,qBAAC,CAAC8T,OAAD,CAAD,CAAWE,GAAX,CAAe,KAAKT,SAApB,CAA/B,EAA+D,MAA/D;;EACA,UAAI,CAACQ,WAAL,EAAkB;EAChB/T,QAAAA,qBAAC,CAAC8T,OAAD,CAAD,CAAW3M,IAAX,CAAgBlC,UAAhB,EAA0B,IAA1B;EACD;EACF;;EAED,QAAMiP,SAAS,GAAG,KAAKC,aAAL,EAAlB;;EAEAnU,IAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CACGc,WADH,CACe6L,mBADf,EAEGrB,QAFH,CAEYsB,qBAFZ;EAIA,SAAK5M,QAAL,CAAcuO,KAAd,CAAoBF,SAApB,IAAiC,CAAjC;;EAEA,QAAI,KAAKlB,aAAL,CAAmBhJ,MAAvB,EAA+B;EAC7BhK,MAAAA,qBAAC,CAAC,KAAKgT,aAAN,CAAD,CACGrM,WADH,CACe+L,oBADf,EAEG2B,IAFH,CAEQ,eAFR,EAEyB,IAFzB;EAGD;;EAED,SAAKC,gBAAL,CAAsB,IAAtB;;EAEA,QAAMC,QAAQ,GAAG,SAAXA,QAAW,GAAM;EACrBvU,MAAAA,qBAAC,CAAC,KAAI,CAAC6F,QAAN,CAAD,CACGc,WADH,CACe8L,qBADf,EAEGtB,QAFH,CAEeqB,mBAFf,SAEsC7M,iBAFtC;EAIA,MAAA,KAAI,CAACE,QAAL,CAAcuO,KAAd,CAAoBF,SAApB,IAAiC,EAAjC;;EAEA,MAAA,KAAI,CAACI,gBAAL,CAAsB,KAAtB;;EAEAtU,MAAAA,qBAAC,CAAC,KAAI,CAAC6F,QAAN,CAAD,CAAiBlD,OAAjB,CAAyB0P,WAAzB;EACD,KAVD;;EAYA,QAAMmC,oBAAoB,GAAGN,SAAS,CAAC,CAAD,CAAT,CAAapQ,WAAb,KAA6BoQ,SAAS,CAACtK,KAAV,CAAgB,CAAhB,CAA1D;EACA,QAAM6K,UAAU,cAAYD,oBAA5B;EACA,QAAMtS,kBAAkB,GAAGtB,IAAI,CAACqB,gCAAL,CAAsC,KAAK4D,QAA3C,CAA3B;EAEA7F,IAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CACGlF,GADH,CACOC,IAAI,CAAC1B,cADZ,EAC4BqV,QAD5B,EAEGtT,oBAFH,CAEwBiB,kBAFxB;EAIA,SAAK2D,QAAL,CAAcuO,KAAd,CAAoBF,SAApB,IAAoC,KAAKrO,QAAL,CAAc4O,UAAd,CAApC;EACD;;WAEDb,OAAA,gBAAO;EAAA;;EACL,QAAI,KAAKb,gBAAL,IACF,CAAC/S,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiBe,QAAjB,CAA0BjB,iBAA1B,CADH,EAC+C;EAC7C;EACD;;EAED,QAAMsO,UAAU,GAAGjU,qBAAC,CAAC0G,KAAF,CAAQ4L,UAAR,CAAnB;EACAtS,IAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiBlD,OAAjB,CAAyBsR,UAAzB;;EACA,QAAIA,UAAU,CAAC9N,kBAAX,EAAJ,EAAqC;EACnC;EACD;;EAED,QAAM+N,SAAS,GAAG,KAAKC,aAAL,EAAlB;;EAEA,SAAKtO,QAAL,CAAcuO,KAAd,CAAoBF,SAApB,IAAoC,KAAKrO,QAAL,CAAc6O,qBAAd,GAAsCR,SAAtC,CAApC;EAEAtT,IAAAA,IAAI,CAAC6B,MAAL,CAAY,KAAKoD,QAAjB;EAEA7F,IAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CACGsL,QADH,CACYsB,qBADZ,EAEG9L,WAFH,CAEkB6L,mBAFlB,SAEyC7M,iBAFzC;EAIA,QAAMgP,kBAAkB,GAAG,KAAK3B,aAAL,CAAmBhJ,MAA9C;;EACA,QAAI2K,kBAAkB,GAAG,CAAzB,EAA4B;EAC1B,WAAK,IAAI7K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6K,kBAApB,EAAwC7K,CAAC,EAAzC,EAA6C;EAC3C,YAAMnH,OAAO,GAAG,KAAKqQ,aAAL,CAAmBlJ,CAAnB,CAAhB;EACA,YAAMnI,QAAQ,GAAGf,IAAI,CAACa,sBAAL,CAA4BkB,OAA5B,CAAjB;;EAEA,YAAIhB,QAAQ,KAAK,IAAjB,EAAuB;EACrB,cAAMiT,KAAK,GAAG5U,qBAAC,CAAC,GAAG4J,KAAH,CAASpK,IAAT,CAAc+B,QAAQ,CAACsI,gBAAT,CAA0BlI,QAA1B,CAAd,CAAD,CAAf;;EACA,cAAI,CAACiT,KAAK,CAAChO,QAAN,CAAejB,iBAAf,CAAL,EAAsC;EACpC3F,YAAAA,qBAAC,CAAC2C,OAAD,CAAD,CAAWwO,QAAX,CAAoBuB,oBAApB,EACG2B,IADH,CACQ,eADR,EACyB,KADzB;EAED;EACF;EACF;EACF;;EAED,SAAKC,gBAAL,CAAsB,IAAtB;;EAEA,QAAMC,QAAQ,GAAG,SAAXA,QAAW,GAAM;EACrB,MAAA,MAAI,CAACD,gBAAL,CAAsB,KAAtB;;EACAtU,MAAAA,qBAAC,CAAC,MAAI,CAAC6F,QAAN,CAAD,CACGc,WADH,CACe8L,qBADf,EAEGtB,QAFH,CAEYqB,mBAFZ,EAGG7P,OAHH,CAGW4P,YAHX;EAID,KAND;;EAQA,SAAK1M,QAAL,CAAcuO,KAAd,CAAoBF,SAApB,IAAiC,EAAjC;EACA,QAAMhS,kBAAkB,GAAGtB,IAAI,CAACqB,gCAAL,CAAsC,KAAK4D,QAA3C,CAA3B;EAEA7F,IAAAA,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CACGlF,GADH,CACOC,IAAI,CAAC1B,cADZ,EAC4BqV,QAD5B,EAEGtT,oBAFH,CAEwBiB,kBAFxB;EAGD;;WAEDoS,mBAAA,0BAAiBO,eAAjB,EAAkC;EAChC,SAAK9B,gBAAL,GAAwB8B,eAAxB;EACD;;WAEDxO,UAAA,mBAAU;EACRrG,IAAAA,qBAAC,CAACsG,UAAF,CAAa,KAAKT,QAAlB,EAA4BZ,UAA5B;EAEA,SAAKsI,OAAL,GAAe,IAAf;EACA,SAAKkG,OAAL,GAAe,IAAf;EACA,SAAK5N,QAAL,GAAgB,IAAhB;EACA,SAAKmN,aAAL,GAAqB,IAArB;EACA,SAAKD,gBAAL,GAAwB,IAAxB;EACD;;;WAIDvF,aAAA,oBAAWtK,MAAX,EAAmB;EACjBA,IAAAA,MAAM,gBACDoH,SADC,EAEDpH,MAFC,CAAN;EAIAA,IAAAA,MAAM,CAACsF,MAAP,GAAgB3F,OAAO,CAACK,MAAM,CAACsF,MAAR,CAAvB,CALiB;;EAMjB5H,IAAAA,IAAI,CAACoC,eAAL,CAAqB+B,MAArB,EAA2B7B,MAA3B,EAAmC2H,aAAnC;EACA,WAAO3H,MAAP;EACD;;WAEDiR,gBAAA,yBAAgB;EACd,QAAMW,QAAQ,GAAG9U,qBAAC,CAAC,KAAK6F,QAAN,CAAD,CAAiBe,QAAjB,CAA0B+L,eAA1B,CAAjB;EACA,WAAOmC,QAAQ,GAAGnC,eAAH,GAAqBC,gBAApC;EACD;;WAEDc,aAAA,sBAAa;EAAA;;EACX,QAAInN,MAAJ;;EAEA,QAAI3F,IAAI,CAACkC,SAAL,CAAe,KAAKyK,OAAL,CAAahH,MAA5B,CAAJ,EAAyC;EACvCA,MAAAA,MAAM,GAAG,KAAKgH,OAAL,CAAahH,MAAtB,CADuC;;EAIvC,UAAI,OAAO,KAAKgH,OAAL,CAAahH,MAAb,CAAoB9B,MAA3B,KAAsC,WAA1C,EAAuD;EACrD8B,QAAAA,MAAM,GAAG,KAAKgH,OAAL,CAAahH,MAAb,CAAoB,CAApB,CAAT;EACD;EACF,KAPD,MAOO;EACLA,MAAAA,MAAM,GAAGhF,QAAQ,CAACQ,aAAT,CAAuB,KAAKwL,OAAL,CAAahH,MAApC,CAAT;EACD;;EAED,QAAM5E,QAAQ,iDAA4C,KAAK4L,OAAL,CAAahH,MAAzD,QAAd;EACA,QAAM2K,QAAQ,GAAG,GAAGtH,KAAH,CAASpK,IAAT,CAAc+G,MAAM,CAACsD,gBAAP,CAAwBlI,QAAxB,CAAd,CAAjB;EAEA3B,IAAAA,qBAAC,CAACkR,QAAD,CAAD,CAAYjK,IAAZ,CAAiB,UAAC6C,CAAD,EAAIpI,OAAJ,EAAgB;EAC/B,MAAA,MAAI,CAACiS,yBAAL,CACEb,QAAQ,CAACiC,qBAAT,CAA+BrT,OAA/B,CADF,EAEE,CAACA,OAAD,CAFF;EAID,KALD;EAOA,WAAO6E,MAAP;EACD;;WAEDoN,4BAAA,mCAA0BjS,OAA1B,EAAmCsT,YAAnC,EAAiD;EAC/C,QAAMC,MAAM,GAAGjV,qBAAC,CAAC0B,OAAD,CAAD,CAAWkF,QAAX,CAAoBjB,iBAApB,CAAf;;EAEA,QAAIqP,YAAY,CAAChL,MAAjB,EAAyB;EACvBhK,MAAAA,qBAAC,CAACgV,YAAD,CAAD,CACG5L,WADH,CACesJ,oBADf,EACqC,CAACuC,MADtC,EAEGZ,IAFH,CAEQ,eAFR,EAEyBY,MAFzB;EAGD;EACF;;;aAIMF,wBAAP,+BAA6BrT,OAA7B,EAAsC;EACpC,QAAMC,QAAQ,GAAGf,IAAI,CAACa,sBAAL,CAA4BC,OAA5B,CAAjB;EACA,WAAOC,QAAQ,GAAGJ,QAAQ,CAACQ,aAAT,CAAuBJ,QAAvB,CAAH,GAAsC,IAArD;EACD;;aAEMqF,mBAAP,0BAAwB9D,MAAxB,EAAgC;EAC9B,WAAO,KAAK+D,IAAL,CAAU,YAAY;EAC3B,UAAMC,QAAQ,GAAGlH,qBAAC,CAAC,IAAD,CAAlB;EACA,UAAImH,IAAI,GAAGD,QAAQ,CAACC,IAAT,CAAclC,UAAd,CAAX;;EACA,UAAMsI,OAAO,gBACRjD,SADQ,EAERpD,QAAQ,CAACC,IAAT,EAFQ,EAGP,OAAOjE,MAAP,KAAkB,QAAlB,IAA8BA,MAA9B,GAAuCA,MAAvC,GAAgD,EAHzC,CAAb;;EAMA,UAAI,CAACiE,IAAD,IAASoG,OAAO,CAAC/E,MAAjB,IAA2B,OAAOtF,MAAP,KAAkB,QAA7C,IAAyD,YAAYU,IAAZ,CAAiBV,MAAjB,CAA7D,EAAuF;EACrFqK,QAAAA,OAAO,CAAC/E,MAAR,GAAiB,KAAjB;EACD;;EAED,UAAI,CAACrB,IAAL,EAAW;EACTA,QAAAA,IAAI,GAAG,IAAI2L,QAAJ,CAAa,IAAb,EAAmBvF,OAAnB,CAAP;EACArG,QAAAA,QAAQ,CAACC,IAAT,CAAclC,UAAd,EAAwBkC,IAAxB;EACD;;EAED,UAAI,OAAOjE,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,YAAI,OAAOiE,IAAI,CAACjE,MAAD,CAAX,KAAwB,WAA5B,EAAyC;EACvC,gBAAM,IAAIqB,SAAJ,wBAAkCrB,MAAlC,QAAN;EACD;;EAEDiE,QAAAA,IAAI,CAACjE,MAAD,CAAJ;EACD;EACF,KAzBM,CAAP;EA0BD;;;;0BAnQoB;EACnB,aAAO8B,SAAP;EACD;;;0BAEoB;EACnB,aAAOsF,SAAP;EACD;;;;;EAgQH;;;;;;;AAMAtK,uBAAC,CAACuB,QAAD,CAAD,CAAYgG,EAAZ,CAAe/B,sBAAf,EAAqCuC,sBAArC,EAA2D,UAAUhI,KAAV,EAAiB;EAC1E;EACA,MAAIA,KAAK,CAACmV,aAAN,CAAoBzL,OAApB,KAAgC,GAApC,EAAyC;EACvC1J,IAAAA,KAAK,CAACuH,cAAN;EACD;;EAED,MAAM6N,QAAQ,GAAGnV,qBAAC,CAAC,IAAD,CAAlB;EACA,MAAM2B,QAAQ,GAAGf,IAAI,CAACa,sBAAL,CAA4B,IAA5B,CAAjB;EACA,MAAM2T,SAAS,GAAG,GAAGxL,KAAH,CAASpK,IAAT,CAAc+B,QAAQ,CAACsI,gBAAT,CAA0BlI,QAA1B,CAAd,CAAlB;EAEA3B,EAAAA,qBAAC,CAACoV,SAAD,CAAD,CAAanO,IAAb,CAAkB,YAAY;EAC5B,QAAMoO,OAAO,GAAGrV,qBAAC,CAAC,IAAD,CAAjB;EACA,QAAMmH,IAAI,GAAGkO,OAAO,CAAClO,IAAR,CAAalC,UAAb,CAAb;EACA,QAAM/B,MAAM,GAAGiE,IAAI,GAAG,QAAH,GAAcgO,QAAQ,CAAChO,IAAT,EAAjC;;EACA2L,IAAAA,QAAQ,CAAC9L,gBAAT,CAA0BxH,IAA1B,CAA+B6V,OAA/B,EAAwCnS,MAAxC;EACD,GALD;EAMD,CAhBD;EAkBA;;;;;;AAMAlD,uBAAC,CAACgB,EAAF,CAAK+D,MAAL,IAAa+N,QAAQ,CAAC9L,gBAAtB;AACAhH,uBAAC,CAACgB,EAAF,CAAK+D,MAAL,EAAWyC,WAAX,GAAyBsL,QAAzB;;AACA9S,uBAAC,CAACgB,EAAF,CAAK+D,MAAL,EAAW0C,UAAX,GAAwB,YAAM;EAC5BzH,EAAAA,qBAAC,CAACgB,EAAF,CAAK+D,MAAL,IAAaK,oBAAb;EACA,SAAO0N,QAAQ,CAAC9L,gBAAhB;EACD,CAHD;;EClYA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,OAAO,SAAS,KAAK,WAAW,CAAC;AACrH;EACA,IAAI,eAAe,GAAG,YAAY;EAClC,EAAE,IAAI,qBAAqB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;EAC7D,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;EAC5D,IAAI,IAAI,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;EACjF,MAAM,OAAO,CAAC,CAAC;EACf,KAAK;EACL,GAAG;EACH,EAAE,OAAO,CAAC,CAAC;EACX,CAAC,EAAE,CAAC;AACJ;EACA,SAAS,iBAAiB,CAAC,EAAE,EAAE;EAC/B,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC;EACrB,EAAE,OAAO,YAAY;EACrB,IAAI,IAAI,MAAM,EAAE;EAChB,MAAM,OAAO;EACb,KAAK;EACL,IAAI,MAAM,GAAG,IAAI,CAAC;EAClB,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,YAAY;EAC9C,MAAM,MAAM,GAAG,KAAK,CAAC;EACrB,MAAM,EAAE,EAAE,CAAC;EACX,KAAK,CAAC,CAAC;EACP,GAAG,CAAC;EACJ,CAAC;AACD;EACA,SAAS,YAAY,CAAC,EAAE,EAAE;EAC1B,EAAE,IAAI,SAAS,GAAG,KAAK,CAAC;EACxB,EAAE,OAAO,YAAY;EACrB,IAAI,IAAI,CAAC,SAAS,EAAE;EACpB,MAAM,SAAS,GAAG,IAAI,CAAC;EACvB,MAAM,UAAU,CAAC,YAAY;EAC7B,QAAQ,SAAS,GAAG,KAAK,CAAC;EAC1B,QAAQ,EAAE,EAAE,CAAC;EACb,OAAO,EAAE,eAAe,CAAC,CAAC;EAC1B,KAAK;EACL,GAAG,CAAC;EACJ,CAAC;AACD;EACA,IAAI,kBAAkB,GAAG,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC;AACrD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,QAAQ,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,YAAY,CAAC;AACrE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,UAAU,CAAC,eAAe,EAAE;EACrC,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;EACnB,EAAE,OAAO,eAAe,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,mBAAmB,CAAC;EAC3F,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,wBAAwB,CAAC,OAAO,EAAE,QAAQ,EAAE;EACrD,EAAE,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE;EAC9B,IAAI,OAAO,EAAE,CAAC;EACd,GAAG;EACH;EACA,EAAE,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC;EACjD,EAAE,IAAI,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EACnD,EAAE,OAAO,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;EACxC,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,aAAa,CAAC,OAAO,EAAE;EAChC,EAAE,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE;EACnC,IAAI,OAAO,OAAO,CAAC;EACnB,GAAG;EACH,EAAE,OAAO,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;EAC5C,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,eAAe,CAAC,OAAO,EAAE;EAClC;EACA,EAAE,IAAI,CAAC,OAAO,EAAE;EAChB,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC;EACzB,GAAG;AACH;EACA,EAAE,QAAQ,OAAO,CAAC,QAAQ;EAC1B,IAAI,KAAK,MAAM,CAAC;EAChB,IAAI,KAAK,MAAM;EACf,MAAM,OAAO,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC;EACxC,IAAI,KAAK,WAAW;EACpB,MAAM,OAAO,OAAO,CAAC,IAAI,CAAC;EAC1B,GAAG;AACH;EACA;AACA;EACA,EAAE,IAAI,qBAAqB,GAAG,wBAAwB,CAAC,OAAO,CAAC;EAC/D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ;EAC/C,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS;EACjD,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC;AAClD;EACA,EAAE,IAAI,uBAAuB,CAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC,EAAE;EACtE,IAAI,OAAO,OAAO,CAAC;EACnB,GAAG;AACH;EACA,EAAE,OAAO,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;EACjD,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,gBAAgB,CAAC,SAAS,EAAE;EACrC,EAAE,OAAO,SAAS,IAAI,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC;EACpF,CAAC;AACD;EACA,IAAI,MAAM,GAAG,SAAS,IAAI,CAAC,EAAE,MAAM,CAAC,oBAAoB,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;EACnF,IAAI,MAAM,GAAG,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC9D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,IAAI,CAAC,OAAO,EAAE;EACvB,EAAE,IAAI,OAAO,KAAK,EAAE,EAAE;EACtB,IAAI,OAAO,MAAM,CAAC;EAClB,GAAG;EACH,EAAE,IAAI,OAAO,KAAK,EAAE,EAAE;EACtB,IAAI,OAAO,MAAM,CAAC;EAClB,GAAG;EACH,EAAE,OAAO,MAAM,IAAI,MAAM,CAAC;EAC1B,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,eAAe,CAAC,OAAO,EAAE;EAClC,EAAE,IAAI,CAAC,OAAO,EAAE;EAChB,IAAI,OAAO,QAAQ,CAAC,eAAe,CAAC;EACpC,GAAG;AACH;EACA,EAAE,IAAI,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;AACvD;EACA;EACA,EAAE,IAAI,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC;EAClD;EACA,EAAE,OAAO,YAAY,KAAK,cAAc,IAAI,OAAO,CAAC,kBAAkB,EAAE;EACxE,IAAI,YAAY,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,kBAAkB,EAAE,YAAY,CAAC;EACvE,GAAG;AACH;EACA,EAAE,IAAI,QAAQ,GAAG,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC;AACvD;EACA,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;EAC/D,IAAI,OAAO,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;EACtF,GAAG;AACH;EACA;EACA;EACA,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,wBAAwB,CAAC,YAAY,EAAE,UAAU,CAAC,KAAK,QAAQ,EAAE;EACtI,IAAI,OAAO,eAAe,CAAC,YAAY,CAAC,CAAC;EACzC,GAAG;AACH;EACA,EAAE,OAAO,YAAY,CAAC;EACtB,CAAC;AACD;EACA,SAAS,iBAAiB,CAAC,OAAO,EAAE;EACpC,EAAE,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;AAClC;EACA,EAAE,IAAI,QAAQ,KAAK,MAAM,EAAE;EAC3B,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG;EACH,EAAE,OAAO,QAAQ,KAAK,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,OAAO,CAAC;EACvF,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,OAAO,CAAC,IAAI,EAAE;EACvB,EAAE,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;EAChC,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EACpC,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE;EACpD;EACA,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;EAC1E,IAAI,OAAO,QAAQ,CAAC,eAAe,CAAC;EACpC,GAAG;AACH;EACA;EACA,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,uBAAuB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,2BAA2B,CAAC;EAC5F,EAAE,IAAI,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;EAC1C,EAAE,IAAI,GAAG,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACxC;EACA;EACA,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;EACrC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;EAC3B,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;EACvB,EAAE,IAAI,uBAAuB,GAAG,KAAK,CAAC,uBAAuB,CAAC;AAC9D;EACA;AACA;EACA,EAAE,IAAI,QAAQ,KAAK,uBAAuB,IAAI,QAAQ,KAAK,uBAAuB,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;EAC3G,IAAI,IAAI,iBAAiB,CAAC,uBAAuB,CAAC,EAAE;EACpD,MAAM,OAAO,uBAAuB,CAAC;EACrC,KAAK;AACL;EACA,IAAI,OAAO,eAAe,CAAC,uBAAuB,CAAC,CAAC;EACpD,GAAG;AACH;EACA;EACA,EAAE,IAAI,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;EACvC,EAAE,IAAI,YAAY,CAAC,IAAI,EAAE;EACzB,IAAI,OAAO,sBAAsB,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EAC/D,GAAG,MAAM;EACT,IAAI,OAAO,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;EACpE,GAAG;EACH,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,SAAS,CAAC,OAAO,EAAE;EAC5B,EAAE,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACvF;EACA,EAAE,IAAI,SAAS,GAAG,IAAI,KAAK,KAAK,GAAG,WAAW,GAAG,YAAY,CAAC;EAC9D,EAAE,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;AAClC;EACA,EAAE,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;EAClD,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC;EACrD,IAAI,IAAI,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,gBAAgB,IAAI,IAAI,CAAC;EAC1E,IAAI,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;EACvC,GAAG;AACH;EACA,EAAE,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;EAC5B,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE;EACtC,EAAE,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAC3F;EACA,EAAE,IAAI,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EAC5C,EAAE,IAAI,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;EAC9C,EAAE,IAAI,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;EACnC,EAAE,IAAI,CAAC,GAAG,IAAI,SAAS,GAAG,QAAQ,CAAC;EACnC,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS,GAAG,QAAQ,CAAC;EACtC,EAAE,IAAI,CAAC,IAAI,IAAI,UAAU,GAAG,QAAQ,CAAC;EACrC,EAAE,IAAI,CAAC,KAAK,IAAI,UAAU,GAAG,QAAQ,CAAC;EACtC,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA,SAAS,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE;EACtC,EAAE,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC;EAC5C,EAAE,IAAI,KAAK,GAAG,KAAK,KAAK,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AACpD;EACA,EAAE,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;EACzG,CAAC;AACD;EACA,SAAS,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE;EAClD,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,IAAI,IAAI,KAAK,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,IAAI,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAC/U,CAAC;AACD;EACA,SAAS,cAAc,CAAC,QAAQ,EAAE;EAClC,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;EAC3B,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC;EACtC,EAAE,IAAI,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACzD;EACA,EAAE,OAAO;EACT,IAAI,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC;EACxD,IAAI,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC;EACtD,GAAG,CAAC;EACJ,CAAC;AACD;EACA,IAAI,cAAc,GAAG,UAAU,QAAQ,EAAE,WAAW,EAAE;EACtD,EAAE,IAAI,EAAE,QAAQ,YAAY,WAAW,CAAC,EAAE;EAC1C,IAAI,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;EAC7D,GAAG;EACH,CAAC,CAAC;AACF;EACA,IAAI,WAAW,GAAG,YAAY;EAC9B,EAAE,SAAS,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE;EAC3C,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC3C,MAAM,IAAI,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAChC,MAAM,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,KAAK,CAAC;EAC7D,MAAM,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;EACrC,MAAM,IAAI,OAAO,IAAI,UAAU,EAAE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;EAC5D,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;EAChE,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,UAAU,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE;EACzD,IAAI,IAAI,UAAU,EAAE,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;EACxE,IAAI,IAAI,WAAW,EAAE,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;EAChE,IAAI,OAAO,WAAW,CAAC;EACvB,GAAG,CAAC;EACJ,CAAC,EAAE,CAAC;AACJ;AACA;AACA;AACA;AACA;EACA,IAAI,cAAc,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;EAChD,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE;EAClB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE;EACpC,MAAM,KAAK,EAAE,KAAK;EAClB,MAAM,UAAU,EAAE,IAAI;EACtB,MAAM,YAAY,EAAE,IAAI;EACxB,MAAM,QAAQ,EAAE,IAAI;EACpB,KAAK,CAAC,CAAC;EACP,GAAG,MAAM;EACT,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;EACrB,GAAG;AACH;EACA,EAAE,OAAO,GAAG,CAAC;EACb,CAAC,CAAC;AACF;EACA,IAAIsO,UAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,UAAU,MAAM,EAAE;EAClD,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC7C,IAAI,IAAI,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC9B;EACA,IAAI,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;EAC5B,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;EAC7D,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;EAClC,OAAO;EACP,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,aAAa,CAAC,OAAO,EAAE;EAChC,EAAE,OAAOA,UAAQ,CAAC,EAAE,EAAE,OAAO,EAAE;EAC/B,IAAI,KAAK,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK;EACvC,IAAI,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM;EACxC,GAAG,CAAC,CAAC;EACL,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,qBAAqB,CAAC,OAAO,EAAE;EACxC,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;AAChB;EACA;EACA;EACA;EACA,EAAE,IAAI;EACN,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE;EAClB,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;EAC7C,MAAM,IAAI,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EAChD,MAAM,IAAI,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;EAClD,MAAM,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC;EAC5B,MAAM,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC;EAC9B,MAAM,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;EAC/B,MAAM,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC;EAC/B,KAAK,MAAM;EACX,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;EAC7C,KAAK;EACL,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE;AAChB;EACA,EAAE,IAAI,MAAM,GAAG;EACf,IAAI,IAAI,EAAE,IAAI,CAAC,IAAI;EACnB,IAAI,GAAG,EAAE,IAAI,CAAC,GAAG;EACjB,IAAI,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI;EACjC,IAAI,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG;EAClC,GAAG,CAAC;AACJ;EACA;EACA,EAAE,IAAI,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;EACvF,EAAE,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC;EACjE,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC;AACrE;EACA,EAAE,IAAI,cAAc,GAAG,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;EACnD,EAAE,IAAI,aAAa,GAAG,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC;AACpD;EACA;EACA;EACA,EAAE,IAAI,cAAc,IAAI,aAAa,EAAE;EACvC,IAAI,IAAI,MAAM,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;EACnD,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;EAClD,IAAI,aAAa,IAAI,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACjD;EACA,IAAI,MAAM,CAAC,KAAK,IAAI,cAAc,CAAC;EACnC,IAAI,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC;EACnC,GAAG;AACH;EACA,EAAE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;EAC/B,CAAC;AACD;EACA,SAAS,oCAAoC,CAAC,QAAQ,EAAE,MAAM,EAAE;EAChE,EAAE,IAAI,aAAa,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAChG;EACA,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EACxB,EAAE,IAAI,MAAM,GAAG,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC;EAC1C,EAAE,IAAI,YAAY,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;EACrD,EAAE,IAAI,UAAU,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;EACjD,EAAE,IAAI,YAAY,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC/C;EACA,EAAE,IAAI,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;EAChD,EAAE,IAAI,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;EACzD,EAAE,IAAI,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AAC3D;EACA;EACA,EAAE,IAAI,aAAa,IAAI,MAAM,EAAE;EAC/B,IAAI,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;EACjD,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EACnD,GAAG;EACH,EAAE,IAAI,OAAO,GAAG,aAAa,CAAC;EAC9B,IAAI,GAAG,EAAE,YAAY,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,GAAG,cAAc;EAC3D,IAAI,IAAI,EAAE,YAAY,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,eAAe;EAC/D,IAAI,KAAK,EAAE,YAAY,CAAC,KAAK;EAC7B,IAAI,MAAM,EAAE,YAAY,CAAC,MAAM;EAC/B,GAAG,CAAC,CAAC;EACL,EAAE,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;EACxB,EAAE,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;AACzB;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE;EACzB,IAAI,IAAI,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;EACjD,IAAI,IAAI,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACnD;EACA,IAAI,OAAO,CAAC,GAAG,IAAI,cAAc,GAAG,SAAS,CAAC;EAC9C,IAAI,OAAO,CAAC,MAAM,IAAI,cAAc,GAAG,SAAS,CAAC;EACjD,IAAI,OAAO,CAAC,IAAI,IAAI,eAAe,GAAG,UAAU,CAAC;EACjD,IAAI,OAAO,CAAC,KAAK,IAAI,eAAe,GAAG,UAAU,CAAC;AAClD;EACA;EACA,IAAI,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;EAClC,IAAI,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;EACpC,GAAG;AACH;EACA,EAAE,IAAI,MAAM,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,MAAM,KAAK,YAAY,IAAI,YAAY,CAAC,QAAQ,KAAK,MAAM,EAAE;EAC9H,IAAI,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;EAC7C,GAAG;AACH;EACA,EAAE,OAAO,OAAO,CAAC;EACjB,CAAC;AACD;EACA,SAAS,6CAA6C,CAAC,OAAO,EAAE;EAChE,EAAE,IAAI,aAAa,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAChG;EACA,EAAE,IAAI,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC;EACnD,EAAE,IAAI,cAAc,GAAG,oCAAoC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EAC3E,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;EACjE,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;AACpE;EACA,EAAE,IAAI,SAAS,GAAG,CAAC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACvD,EAAE,IAAI,UAAU,GAAG,CAAC,aAAa,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AAChE;EACA,EAAE,IAAI,MAAM,GAAG;EACf,IAAI,GAAG,EAAE,SAAS,GAAG,cAAc,CAAC,GAAG,GAAG,cAAc,CAAC,SAAS;EAClE,IAAI,IAAI,EAAE,UAAU,GAAG,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,UAAU;EACtE,IAAI,KAAK,EAAE,KAAK;EAChB,IAAI,MAAM,EAAE,MAAM;EAClB,GAAG,CAAC;AACJ;EACA,EAAE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;EAC/B,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,OAAO,CAAC,OAAO,EAAE;EAC1B,EAAE,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;EAClC,EAAE,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;EAClD,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG;EACH,EAAE,IAAI,wBAAwB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,OAAO,EAAE;EACjE,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;EACH,EAAE,IAAI,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;EAC1C,EAAE,IAAI,CAAC,UAAU,EAAE;EACnB,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG;EACH,EAAE,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;EAC7B,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA,SAAS,4BAA4B,CAAC,OAAO,EAAE;EAC/C;EACA,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,EAAE,EAAE;EACpD,IAAI,OAAO,QAAQ,CAAC,eAAe,CAAC;EACpC,GAAG;EACH,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;EACjC,EAAE,OAAO,EAAE,IAAI,wBAAwB,CAAC,EAAE,EAAE,WAAW,CAAC,KAAK,MAAM,EAAE;EACrE,IAAI,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;EAC1B,GAAG;EACH,EAAE,OAAO,EAAE,IAAI,QAAQ,CAAC,eAAe,CAAC;EACxC,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE;EACtE,EAAE,IAAI,aAAa,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAChG;EACA;AACA;EACA,EAAE,IAAI,UAAU,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;EACvC,EAAE,IAAI,YAAY,GAAG,aAAa,GAAG,4BAA4B,CAAC,MAAM,CAAC,GAAG,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;AACxI;EACA;EACA,EAAE,IAAI,iBAAiB,KAAK,UAAU,EAAE;EACxC,IAAI,UAAU,GAAG,6CAA6C,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;EAC5F,GAAG,MAAM;EACT;EACA,IAAI,IAAI,cAAc,GAAG,KAAK,CAAC,CAAC;EAChC,IAAI,IAAI,iBAAiB,KAAK,cAAc,EAAE;EAC9C,MAAM,cAAc,GAAG,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;EACjE,MAAM,IAAI,cAAc,CAAC,QAAQ,KAAK,MAAM,EAAE;EAC9C,QAAQ,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC;EAC9D,OAAO;EACP,KAAK,MAAM,IAAI,iBAAiB,KAAK,QAAQ,EAAE;EAC/C,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC;EAC5D,KAAK,MAAM;EACX,MAAM,cAAc,GAAG,iBAAiB,CAAC;EACzC,KAAK;AACL;EACA,IAAI,IAAI,OAAO,GAAG,oCAAoC,CAAC,cAAc,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;AACpG;EACA;EACA,IAAI,IAAI,cAAc,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;EACtE,MAAM,IAAI,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC;EAChE,UAAU,MAAM,GAAG,eAAe,CAAC,MAAM;EACzC,UAAU,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;AACxC;EACA,MAAM,UAAU,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;EACxD,MAAM,UAAU,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;EAC/C,MAAM,UAAU,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;EAC3D,MAAM,UAAU,CAAC,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;EAC9C,KAAK,MAAM;EACX;EACA,MAAM,UAAU,GAAG,OAAO,CAAC;EAC3B,KAAK;EACL,GAAG;AACH;EACA;EACA,EAAE,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;EACzB,EAAE,IAAI,eAAe,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC;EACpD,EAAE,UAAU,CAAC,IAAI,IAAI,eAAe,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;EACnE,EAAE,UAAU,CAAC,GAAG,IAAI,eAAe,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;EACjE,EAAE,UAAU,CAAC,KAAK,IAAI,eAAe,GAAG,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;EACrE,EAAE,UAAU,CAAC,MAAM,IAAI,eAAe,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;AACvE;EACA,EAAE,OAAO,UAAU,CAAC;EACpB,CAAC;AACD;EACA,SAAS,OAAO,CAAC,IAAI,EAAE;EACvB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;EACxB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC3B;EACA,EAAE,OAAO,KAAK,GAAG,MAAM,CAAC;EACxB,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE;EACxF,EAAE,IAAI,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACtF;EACA,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;EACxC,IAAI,OAAO,SAAS,CAAC;EACrB,GAAG;AACH;EACA,EAAE,IAAI,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAChF;EACA,EAAE,IAAI,KAAK,GAAG;EACd,IAAI,GAAG,EAAE;EACT,MAAM,KAAK,EAAE,UAAU,CAAC,KAAK;EAC7B,MAAM,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG;EAC1C,KAAK;EACL,IAAI,KAAK,EAAE;EACX,MAAM,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;EAC7C,MAAM,MAAM,EAAE,UAAU,CAAC,MAAM;EAC/B,KAAK;EACL,IAAI,MAAM,EAAE;EACZ,MAAM,KAAK,EAAE,UAAU,CAAC,KAAK;EAC7B,MAAM,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;EAChD,KAAK;EACL,IAAI,IAAI,EAAE;EACV,MAAM,KAAK,EAAE,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI;EAC3C,MAAM,MAAM,EAAE,UAAU,CAAC,MAAM;EAC/B,KAAK;EACL,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EAC1D,IAAI,OAAOA,UAAQ,CAAC;EACpB,MAAM,GAAG,EAAE,GAAG;EACd,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;EACnB,MAAM,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;EAC/B,KAAK,CAAC,CAAC;EACP,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;EAC1B,IAAI,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;EAC3B,GAAG,CAAC,CAAC;AACL;EACA,EAAE,IAAI,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,KAAK,EAAE;EAC1D,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;EAC3B,QAAQ,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;EAC9B,IAAI,OAAO,KAAK,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC;EACxE,GAAG,CAAC,CAAC;AACL;EACA,EAAE,IAAI,iBAAiB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC/F;EACA,EAAE,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C;EACA,EAAE,OAAO,iBAAiB,IAAI,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,EAAE,CAAC,CAAC;EAChE,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE;EACvD,EAAE,IAAI,aAAa,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAC/F;EACA,EAAE,IAAI,kBAAkB,GAAG,aAAa,GAAG,4BAA4B,CAAC,MAAM,CAAC,GAAG,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;EAC9I,EAAE,OAAO,oCAAoC,CAAC,SAAS,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;EAC5F,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,aAAa,CAAC,OAAO,EAAE;EAChC,EAAE,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC;EACjD,EAAE,IAAI,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;EAChD,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;EACnF,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;EACnF,EAAE,IAAI,MAAM,GAAG;EACf,IAAI,KAAK,EAAE,OAAO,CAAC,WAAW,GAAG,CAAC;EAClC,IAAI,MAAM,EAAE,OAAO,CAAC,YAAY,GAAG,CAAC;EACpC,GAAG,CAAC;EACJ,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,oBAAoB,CAAC,SAAS,EAAE;EACzC,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;EAC5E,EAAE,OAAO,SAAS,CAAC,OAAO,CAAC,wBAAwB,EAAE,UAAU,OAAO,EAAE;EACxE,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;EACzB,GAAG,CAAC,CAAC;EACL,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE;EAC/D,EAAE,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC;EACA;EACA,EAAE,IAAI,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AACzC;EACA;EACA,EAAE,IAAI,aAAa,GAAG;EACtB,IAAI,KAAK,EAAE,UAAU,CAAC,KAAK;EAC3B,IAAI,MAAM,EAAE,UAAU,CAAC,MAAM;EAC7B,GAAG,CAAC;AACJ;EACA;EACA,EAAE,IAAI,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;EAC5D,EAAE,IAAI,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;EAC1C,EAAE,IAAI,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;EAC/C,EAAE,IAAI,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;EACjD,EAAE,IAAI,oBAAoB,GAAG,CAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC3D;EACA,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;EACzH,EAAE,IAAI,SAAS,KAAK,aAAa,EAAE;EACnC,IAAI,aAAa,CAAC,aAAa,CAAC,GAAG,gBAAgB,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;EACtG,GAAG,MAAM;EACT,IAAI,aAAa,CAAC,aAAa,CAAC,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC;EACzF,GAAG;AACH;EACA,EAAE,OAAO,aAAa,CAAC;EACvB,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE;EAC1B;EACA,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;EAC5B,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAC3B,GAAG;AACH;EACA;EACA,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9B,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;EACrC;EACA,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE;EACjC,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,UAAU,GAAG,EAAE;EACxC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;EACjC,KAAK,CAAC,CAAC;EACP,GAAG;AACH;EACA;EACA,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,EAAE;EACvC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;EAC/B,GAAG,CAAC,CAAC;EACL,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;EAC5B,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,YAAY,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;EAC7C,EAAE,IAAI,cAAc,GAAG,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/G;EACA,EAAE,cAAc,CAAC,OAAO,CAAC,UAAU,QAAQ,EAAE;EAC7C,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE;EAC9B;EACA,MAAM,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;EAC5E,KAAK;EACL,IAAI,IAAI,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC;EACjD,IAAI,IAAI,QAAQ,CAAC,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE;EAC5C;EACA;EACA;EACA,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;EAC/D,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACrE;EACA,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EAChC,KAAK;EACL,GAAG,CAAC,CAAC;AACL;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,MAAM,GAAG;EAClB;EACA,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;EAC9B,IAAI,OAAO;EACX,GAAG;AACH;EACA,EAAE,IAAI,IAAI,GAAG;EACb,IAAI,QAAQ,EAAE,IAAI;EAClB,IAAI,MAAM,EAAE,EAAE;EACd,IAAI,WAAW,EAAE,EAAE;EACnB,IAAI,UAAU,EAAE,EAAE;EAClB,IAAI,OAAO,EAAE,KAAK;EAClB,IAAI,OAAO,EAAE,EAAE;EACf,GAAG,CAAC;AACJ;EACA;EACA,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACpH;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzM;EACA;EACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC;AAC1C;EACA,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;AAClD;EACA;EACA,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAC9F;EACA,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,OAAO,GAAG,UAAU,CAAC;AACnF;EACA;EACA,EAAE,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC5C;EACA;EACA;EACA,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;EAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;EAChC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;EAChC,GAAG,MAAM;EACT,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;EAChC,GAAG;EACH,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,iBAAiB,CAAC,SAAS,EAAE,YAAY,EAAE;EACpD,EAAE,OAAO,SAAS,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE;EACxC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI;EACxB,QAAQ,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;EAC/B,IAAI,OAAO,OAAO,IAAI,IAAI,KAAK,YAAY,CAAC;EAC5C,GAAG,CAAC,CAAC;EACL,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,wBAAwB,CAAC,QAAQ,EAAE;EAC5C,EAAE,IAAI,QAAQ,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;EACrD,EAAE,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvE;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC5C,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC7B,IAAI,IAAI,OAAO,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;EAC9D,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,WAAW,EAAE;EAC7D,MAAM,OAAO,OAAO,CAAC;EACrB,KAAK;EACL,GAAG;EACH,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,OAAO,GAAG;EACnB,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;AAChC;EACA;EACA,EAAE,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;EACvD,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;EAC/C,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;EACpC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;EAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;EAChC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;EACjC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;EAClC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;EACtC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC;EAClE,GAAG;AACH;EACA,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC/B;EACA;EACA;EACA,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;EACpC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACpD,GAAG;EACH,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,SAAS,CAAC,OAAO,EAAE;EAC5B,EAAE,IAAI,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;EAC5C,EAAE,OAAO,aAAa,GAAG,aAAa,CAAC,WAAW,GAAG,MAAM,CAAC;EAC5D,CAAC;AACD;EACA,SAAS,qBAAqB,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE;EAC7E,EAAE,IAAI,MAAM,GAAG,YAAY,CAAC,QAAQ,KAAK,MAAM,CAAC;EAChD,EAAE,IAAI,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,WAAW,GAAG,YAAY,CAAC;EAC9E,EAAE,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D;EACA,EAAE,IAAI,CAAC,MAAM,EAAE;EACf,IAAI,qBAAqB,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;EAC9F,GAAG;EACH,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EAC7B,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE;EACrE;EACA,EAAE,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;EAClC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACxF;EACA;EACA,EAAE,IAAI,aAAa,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;EACjD,EAAE,qBAAqB,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;EACzF,EAAE,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC;EACtC,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;AAC7B;EACA,EAAE,OAAO,KAAK,CAAC;EACf,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,oBAAoB,GAAG;EAChC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;EACjC,IAAI,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;EACpG,GAAG;EACH,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,oBAAoB,CAAC,SAAS,EAAE,KAAK,EAAE;EAChD;EACA,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;AACxE;EACA;EACA,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,MAAM,EAAE;EAChD,IAAI,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;EAC5D,GAAG,CAAC,CAAC;AACL;EACA;EACA,EAAE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;EAC3B,EAAE,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC;EAC3B,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;EAC7B,EAAE,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;EAC9B,EAAE,OAAO,KAAK,CAAC;EACf,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,qBAAqB,GAAG;EACjC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;EAChC,IAAI,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;EAC9C,IAAI,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;EAClE,GAAG;EACH,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,SAAS,CAAC,CAAC,EAAE;EACtB,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1D,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE;EACpC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EAC9C,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;EAClB;EACA,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;EAC/G,MAAM,IAAI,GAAG,IAAI,CAAC;EAClB,KAAK;EACL,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;EAC9C,GAAG,CAAC,CAAC;EACL,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE;EAC5C,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EAClD,IAAI,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;EACjC,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE;EACzB,MAAM,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;EACnD,KAAK,MAAM;EACX,MAAM,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;EACpC,KAAK;EACL,GAAG,CAAC,CAAC;EACL,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,UAAU,CAAC,IAAI,EAAE;EAC1B;EACA;EACA;EACA;EACA,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/C;EACA;EACA;EACA,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACvD;EACA;EACA,EAAE,IAAI,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE;EACjE,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;EACnD,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE;EAC9E;EACA,EAAE,IAAI,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;AAC9F;EACA;EACA;EACA;EACA,EAAE,IAAI,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzK;EACA,EAAE,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AAChD;EACA;EACA;EACA,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,aAAa,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC;AAChF;EACA,EAAE,OAAO,OAAO,CAAC;EACjB,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE;EAC9C,EAAE,IAAI,aAAa,GAAG,IAAI,CAAC,OAAO;EAClC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM;EACnC,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;EAC1C,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;EACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzB;EACA,EAAE,IAAI,OAAO,GAAG,SAAS,OAAO,CAAC,CAAC,EAAE;EACpC,IAAI,OAAO,CAAC,CAAC;EACb,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;EAC9C,EAAE,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxC;EACA,EAAE,IAAI,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;EACpE,EAAE,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;EACvD,EAAE,IAAI,eAAe,GAAG,cAAc,GAAG,CAAC,KAAK,WAAW,GAAG,CAAC,CAAC;EAC/D,EAAE,IAAI,YAAY,GAAG,cAAc,GAAG,CAAC,KAAK,CAAC,IAAI,WAAW,GAAG,CAAC,KAAK,CAAC,CAAC;AACvE;EACA,EAAE,IAAI,mBAAmB,GAAG,CAAC,WAAW,GAAG,OAAO,GAAG,UAAU,IAAI,WAAW,IAAI,eAAe,GAAG,KAAK,GAAG,KAAK,CAAC;EAClH,EAAE,IAAI,iBAAiB,GAAG,CAAC,WAAW,GAAG,OAAO,GAAG,KAAK,CAAC;AACzD;EACA,EAAE,OAAO;EACT,IAAI,IAAI,EAAE,mBAAmB,CAAC,YAAY,IAAI,CAAC,WAAW,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;EAC1G,IAAI,GAAG,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC;EACtC,IAAI,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC;EAC5C,IAAI,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC;EAC5C,GAAG,CAAC;EACJ,CAAC;AACD;EACA,IAAI,SAAS,GAAG,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAClE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE;EACrC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;EACnB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;EACpB,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACnC;EACA;AACA;EACA,EAAE,IAAI,2BAA2B,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,QAAQ,EAAE;EACtF,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC;EAC1C,GAAG,CAAC,CAAC,eAAe,CAAC;EACrB,EAAE,IAAI,2BAA2B,KAAK,SAAS,EAAE;EACjD,IAAI,OAAO,CAAC,IAAI,CAAC,+HAA+H,CAAC,CAAC;EAClJ,GAAG;EACH,EAAE,IAAI,eAAe,GAAG,2BAA2B,KAAK,SAAS,GAAG,2BAA2B,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1H;EACA,EAAE,IAAI,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;EAC3D,EAAE,IAAI,gBAAgB,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;AAC7D;EACA;EACA,EAAE,IAAI,MAAM,GAAG;EACf,IAAI,QAAQ,EAAE,MAAM,CAAC,QAAQ;EAC7B,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnF;EACA,EAAE,IAAI,KAAK,GAAG,CAAC,KAAK,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;EAChD,EAAE,IAAI,KAAK,GAAG,CAAC,KAAK,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAC/C;EACA;EACA;EACA;EACA,EAAE,IAAI,gBAAgB,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;AAC/D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC;EACnB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC;EACnB,EAAE,IAAI,KAAK,KAAK,QAAQ,EAAE;EAC1B;EACA;EACA,IAAI,IAAI,YAAY,CAAC,QAAQ,KAAK,MAAM,EAAE;EAC1C,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;EACxD,KAAK,MAAM;EACX,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;EACtD,KAAK;EACL,GAAG,MAAM;EACT,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;EACtB,GAAG;EACH,EAAE,IAAI,KAAK,KAAK,OAAO,EAAE;EACzB,IAAI,IAAI,YAAY,CAAC,QAAQ,KAAK,MAAM,EAAE;EAC1C,MAAM,IAAI,GAAG,CAAC,YAAY,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;EACvD,KAAK,MAAM;EACX,MAAM,IAAI,GAAG,CAAC,gBAAgB,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;EACrD,KAAK;EACL,GAAG,MAAM;EACT,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;EACxB,GAAG;EACH,EAAE,IAAI,eAAe,IAAI,gBAAgB,EAAE;EAC3C,IAAI,MAAM,CAAC,gBAAgB,CAAC,GAAG,cAAc,GAAG,IAAI,GAAG,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC;EAC/E,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;EACtB,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;EACtB,IAAI,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC;EACpC,GAAG,MAAM;EACT;EACA,IAAI,IAAI,SAAS,GAAG,KAAK,KAAK,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;EAChD,IAAI,IAAI,UAAU,GAAG,KAAK,KAAK,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;EAChD,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC;EACpC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC;EACtC,IAAI,MAAM,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;EAC7C,GAAG;AACH;EACA;EACA,EAAE,IAAI,UAAU,GAAG;EACnB,IAAI,aAAa,EAAE,IAAI,CAAC,SAAS;EACjC,GAAG,CAAC;AACJ;EACA;EACA,EAAE,IAAI,CAAC,UAAU,GAAGA,UAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;EAC9D,EAAE,IAAI,CAAC,MAAM,GAAGA,UAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;EAClD,EAAE,IAAI,CAAC,WAAW,GAAGA,UAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACxE;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,kBAAkB,CAAC,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE;EACtE,EAAE,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE;EACnD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;EACzB,IAAI,OAAO,IAAI,KAAK,cAAc,CAAC;EACnC,GAAG,CAAC,CAAC;AACL;EACA,EAAE,IAAI,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,QAAQ,EAAE;EACtE,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,aAAa,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;EACpG,GAAG,CAAC,CAAC;AACL;EACA,EAAE,IAAI,CAAC,UAAU,EAAE;EACnB,IAAI,IAAI,WAAW,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,CAAC;EACjD,IAAI,IAAI,SAAS,GAAG,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC;EAC9C,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,2BAA2B,GAAG,WAAW,GAAG,2DAA2D,GAAG,WAAW,GAAG,GAAG,CAAC,CAAC;EAC1J,GAAG;EACH,EAAE,OAAO,UAAU,CAAC;EACpB,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE;EAC9B,EAAE,IAAI,mBAAmB,CAAC;AAC1B;EACA;EACA,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE;EAC7E,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;AACH;EACA,EAAE,IAAI,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;AACrC;EACA;EACA,EAAE,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;EACxC,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AACpE;EACA;EACA,IAAI,IAAI,CAAC,YAAY,EAAE;EACvB,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;EACL,GAAG,MAAM;EACT;EACA;EACA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;EACtD,MAAM,OAAO,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;EACpF,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;EACL,GAAG;AACH;EACA,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EAC/C,EAAE,IAAI,aAAa,GAAG,IAAI,CAAC,OAAO;EAClC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM;EACnC,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;AAC1C;EACA,EAAE,IAAI,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/D;EACA,EAAE,IAAI,GAAG,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;EAC5C,EAAE,IAAI,eAAe,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC;EACpD,EAAE,IAAI,IAAI,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;EAC3C,EAAE,IAAI,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;EAC5C,EAAE,IAAI,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;EAC/C,EAAE,IAAI,gBAAgB,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1D;EACA;EACA;EACA;EACA;AACA;EACA;EACA,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE;EAC3D,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC;EACvF,GAAG;EACH;EACA,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE;EAC3D,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;EACrF,GAAG;EACH,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3D;EACA;EACA,EAAE,IAAI,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,gBAAgB,GAAG,CAAC,CAAC;AAC3E;EACA;EACA;EACA,EAAE,IAAI,GAAG,GAAG,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;EAC3D,EAAE,IAAI,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC;EACrE,EAAE,IAAI,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,GAAG,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC;EAC/E,EAAE,IAAI,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAC3F;EACA;EACA,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAgB,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/E;EACA,EAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;EACnC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,mBAAmB,GAAG,EAAE,EAAE,cAAc,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,mBAAmB,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAC3L;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,oBAAoB,CAAC,SAAS,EAAE;EACzC,EAAE,IAAI,SAAS,KAAK,KAAK,EAAE;EAC3B,IAAI,OAAO,OAAO,CAAC;EACnB,GAAG,MAAM,IAAI,SAAS,KAAK,OAAO,EAAE;EACpC,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG;EACH,EAAE,OAAO,SAAS,CAAC;EACnB,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,UAAU,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAClM;EACA;EACA,IAAI,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,SAAS,CAAC,SAAS,EAAE;EAC9B,EAAE,IAAI,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAC1F;EACA,EAAE,IAAI,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;EACjD,EAAE,IAAI,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;EACrF,EAAE,OAAO,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC;EACvC,CAAC;AACD;EACA,IAAI,SAAS,GAAG;EAChB,EAAE,IAAI,EAAE,MAAM;EACd,EAAE,SAAS,EAAE,WAAW;EACxB,EAAE,gBAAgB,EAAE,kBAAkB;EACtC,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;EAC7B;EACA,EAAE,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;EAC3D,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;AACH;EACA,EAAE,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,iBAAiB,EAAE;EACjE;EACA,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;AACH;EACA,EAAE,IAAI,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAChJ;EACA,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EAC/C,EAAE,IAAI,iBAAiB,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;EAC1D,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACrD;EACA,EAAE,IAAI,SAAS,GAAG,EAAE,CAAC;AACrB;EACA,EAAE,QAAQ,OAAO,CAAC,QAAQ;EAC1B,IAAI,KAAK,SAAS,CAAC,IAAI;EACvB,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;EACjD,MAAM,MAAM;EACZ,IAAI,KAAK,SAAS,CAAC,SAAS;EAC5B,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;EACvC,MAAM,MAAM;EACZ,IAAI,KAAK,SAAS,CAAC,gBAAgB;EACnC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;EAC7C,MAAM,MAAM;EACZ,IAAI;EACJ,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;EACnC,GAAG;AACH;EACA,EAAE,SAAS,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,KAAK,EAAE;EAC3C,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,KAAK,GAAG,CAAC,EAAE;EAC9D,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;AACL;EACA,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EAC7C,IAAI,iBAAiB,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACxD;EACA,IAAI,IAAI,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;EAC5C,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;AAC5C;EACA;EACA,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;EAC3B,IAAI,IAAI,WAAW,GAAG,SAAS,KAAK,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,SAAS,KAAK,OAAO,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,KAAK,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACjV;EACA,IAAI,IAAI,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;EAC3E,IAAI,IAAI,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;EAC9E,IAAI,IAAI,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;EACxE,IAAI,IAAI,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACjF;EACA,IAAI,IAAI,mBAAmB,GAAG,SAAS,KAAK,MAAM,IAAI,aAAa,IAAI,SAAS,KAAK,OAAO,IAAI,cAAc,IAAI,SAAS,KAAK,KAAK,IAAI,YAAY,IAAI,SAAS,KAAK,QAAQ,IAAI,eAAe,CAAC;AACnM;EACA;EACA,IAAI,IAAI,UAAU,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE;EACA;EACA,IAAI,IAAI,qBAAqB,GAAG,CAAC,CAAC,OAAO,CAAC,cAAc,KAAK,UAAU,IAAI,SAAS,KAAK,OAAO,IAAI,aAAa,IAAI,UAAU,IAAI,SAAS,KAAK,KAAK,IAAI,cAAc,IAAI,CAAC,UAAU,IAAI,SAAS,KAAK,OAAO,IAAI,YAAY,IAAI,CAAC,UAAU,IAAI,SAAS,KAAK,KAAK,IAAI,eAAe,CAAC,CAAC;AAC3R;EACA;EACA,IAAI,IAAI,yBAAyB,GAAG,CAAC,CAAC,OAAO,CAAC,uBAAuB,KAAK,UAAU,IAAI,SAAS,KAAK,OAAO,IAAI,cAAc,IAAI,UAAU,IAAI,SAAS,KAAK,KAAK,IAAI,aAAa,IAAI,CAAC,UAAU,IAAI,SAAS,KAAK,OAAO,IAAI,eAAe,IAAI,CAAC,UAAU,IAAI,SAAS,KAAK,KAAK,IAAI,YAAY,CAAC,CAAC;AACxS;EACA,IAAI,IAAI,gBAAgB,GAAG,qBAAqB,IAAI,yBAAyB,CAAC;AAC9E;EACA,IAAI,IAAI,WAAW,IAAI,mBAAmB,IAAI,gBAAgB,EAAE;EAChE;EACA,MAAM,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAC1B;EACA,MAAM,IAAI,WAAW,IAAI,mBAAmB,EAAE;EAC9C,QAAQ,SAAS,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;EACzC,OAAO;AACP;EACA,MAAM,IAAI,gBAAgB,EAAE;EAC5B,QAAQ,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;EACpD,OAAO;AACP;EACA,MAAM,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,EAAE,CAAC,CAAC;AACtE;EACA;EACA;EACA,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,GAAGA,UAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9I;EACA,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;EACjE,KAAK;EACL,GAAG,CAAC,CAAC;EACL,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,YAAY,CAAC,IAAI,EAAE;EAC5B,EAAE,IAAI,aAAa,GAAG,IAAI,CAAC,OAAO;EAClC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM;EACnC,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;AAC1C;EACA,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EAC/C,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;EACzB,EAAE,IAAI,UAAU,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;EAC/D,EAAE,IAAI,IAAI,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;EAC7C,EAAE,IAAI,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;EAC3C,EAAE,IAAI,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AACpD;EACA,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE;EAC/C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;EACjF,GAAG;EACH,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE;EAC/C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;EACzD,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE;EACpE;EACA,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;EACrD,EAAE,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB;EACA;EACA,EAAE,IAAI,CAAC,KAAK,EAAE;EACd,IAAI,OAAO,GAAG,CAAC;EACf,GAAG;AACH;EACA,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;EAC/B,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC;EACzB,IAAI,QAAQ,IAAI;EAChB,MAAM,KAAK,IAAI;EACf,QAAQ,OAAO,GAAG,aAAa,CAAC;EAChC,QAAQ,MAAM;EACd,MAAM,KAAK,GAAG,CAAC;EACf,MAAM,KAAK,IAAI,CAAC;EAChB,MAAM;EACN,QAAQ,OAAO,GAAG,gBAAgB,CAAC;EACnC,KAAK;AACL;EACA,IAAI,IAAI,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;EACtC,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;EAC3C,GAAG,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;EAC7C;EACA,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC;EACtB,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;EACvB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;EACtF,KAAK,MAAM;EACX,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;EACpF,KAAK;EACL,IAAI,OAAO,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC;EAC9B,GAAG,MAAM;EACT;EACA;EACA,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG;EACH,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE;EAC7E,EAAE,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvB;EACA;EACA;EACA;EACA,EAAE,IAAI,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAClE;EACA;EACA;EACA,EAAE,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE;EAC9D,IAAI,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;EACvB,GAAG,CAAC,CAAC;AACL;EACA;EACA;EACA,EAAE,IAAI,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE;EAClE,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;EACtC,GAAG,CAAC,CAAC,CAAC;AACN;EACA,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;EACpE,IAAI,OAAO,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;EACjG,GAAG;AACH;EACA;EACA;EACA,EAAE,IAAI,UAAU,GAAG,aAAa,CAAC;EACjC,EAAE,IAAI,GAAG,GAAG,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3M;EACA;EACA,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE;EACrC;EACA,IAAI,IAAI,WAAW,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,IAAI,QAAQ,GAAG,OAAO,CAAC;EAClF,IAAI,IAAI,iBAAiB,GAAG,KAAK,CAAC;EAClC,IAAI,OAAO,EAAE;EACb;EACA;EACA,KAAK,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;EAC5B,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;EAClE,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;EAC5B,QAAQ,iBAAiB,GAAG,IAAI,CAAC;EACjC,QAAQ,OAAO,CAAC,CAAC;EACjB,OAAO,MAAM,IAAI,iBAAiB,EAAE;EACpC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;EAC7B,QAAQ,iBAAiB,GAAG,KAAK,CAAC;EAClC,QAAQ,OAAO,CAAC,CAAC;EACjB,OAAO,MAAM;EACb,QAAQ,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EAC3B,OAAO;EACP,KAAK,EAAE,EAAE,CAAC;EACV;EACA,KAAK,GAAG,CAAC,UAAU,GAAG,EAAE;EACxB,MAAM,OAAO,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;EACxE,KAAK,CAAC,CAAC;EACP,GAAG,CAAC,CAAC;AACL;EACA;EACA,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE;EACnC,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,MAAM,EAAE;EACvC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;EAC3B,QAAQ,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EACnE,OAAO;EACP,KAAK,CAAC,CAAC;EACP,GAAG,CAAC,CAAC;EACL,EAAE,OAAO,OAAO,CAAC;EACjB,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE;EAC5B,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;EAC3B,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS;EAChC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO;EAClC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM;EACnC,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;AAC1C;EACA,EAAE,IAAI,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C;EACA,EAAE,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC;EACvB,EAAE,IAAI,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE;EAC1B,IAAI,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;EAC3B,GAAG,MAAM;EACT,IAAI,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;EACpE,GAAG;AACH;EACA,EAAE,IAAI,aAAa,KAAK,MAAM,EAAE;EAChC,IAAI,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;EAC7B,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;EAC9B,GAAG,MAAM,IAAI,aAAa,KAAK,OAAO,EAAE;EACxC,IAAI,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;EAC7B,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;EAC9B,GAAG,MAAM,IAAI,aAAa,KAAK,KAAK,EAAE;EACtC,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;EAC9B,IAAI,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;EAC7B,GAAG,MAAM,IAAI,aAAa,KAAK,QAAQ,EAAE;EACzC,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;EAC9B,IAAI,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;EAC7B,GAAG;AACH;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;EACvB,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE;EACxC,EAAE,IAAI,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC7F;EACA;EACA;EACA;EACA,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,KAAK,iBAAiB,EAAE;EACrD,IAAI,iBAAiB,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;EAC3D,GAAG;AACH;EACA;EACA;EACA;EACA,EAAE,IAAI,aAAa,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;EAC5D,EAAE,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;EAChD,EAAE,IAAI,GAAG,GAAG,YAAY,CAAC,GAAG;EAC5B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI;EAC9B,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;AAC9C;EACA,EAAE,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC;EACxB,EAAE,YAAY,CAAC,IAAI,GAAG,EAAE,CAAC;EACzB,EAAE,YAAY,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;AACnC;EACA,EAAE,IAAI,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AACxI;EACA;EACA;EACA,EAAE,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;EACzB,EAAE,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;EAC3B,EAAE,YAAY,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;AAC1C;EACA,EAAE,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;AAClC;EACA,EAAE,IAAI,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;EAC/B,EAAE,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACnC;EACA,EAAE,IAAI,KAAK,GAAG;EACd,IAAI,OAAO,EAAE,SAAS,OAAO,CAAC,SAAS,EAAE;EACzC,MAAM,IAAI,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;EACpC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;EACrF,QAAQ,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;EACnE,OAAO;EACP,MAAM,OAAO,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;EAClD,KAAK;EACL,IAAI,SAAS,EAAE,SAAS,SAAS,CAAC,SAAS,EAAE;EAC7C,MAAM,IAAI,QAAQ,GAAG,SAAS,KAAK,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;EAC5D,MAAM,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;EACnC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;EACrF,QAAQ,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;EAC3H,OAAO;EACP,MAAM,OAAO,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;EACjD,KAAK;EACL,GAAG,CAAC;AACJ;EACA,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,SAAS,EAAE;EACrC,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,GAAG,WAAW,CAAC;EACnF,IAAI,MAAM,GAAGA,UAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;EAC1D,GAAG,CAAC,CAAC;AACL;EACA,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAC/B;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,KAAK,CAAC,IAAI,EAAE;EACrB,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;EACjC,EAAE,IAAI,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9C,EAAE,IAAI,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C;EACA;EACA,EAAE,IAAI,cAAc,EAAE;EACtB,IAAI,IAAI,aAAa,GAAG,IAAI,CAAC,OAAO;EACpC,QAAQ,SAAS,GAAG,aAAa,CAAC,SAAS;EAC3C,QAAQ,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;AACtC;EACA,IAAI,IAAI,UAAU,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;EACrE,IAAI,IAAI,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;EAC3C,IAAI,IAAI,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AACtD;EACA,IAAI,IAAI,YAAY,GAAG;EACvB,MAAM,KAAK,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;EACtD,MAAM,GAAG,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;EACnG,KAAK,CAAC;AACN;EACA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAGA,UAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;EAC7E,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,IAAI,CAAC,IAAI,EAAE;EACpB,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE;EAC/E,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;AACH;EACA,EAAE,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;EACvC,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,QAAQ,EAAE;EAChE,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,iBAAiB,CAAC;EAC/C,GAAG,CAAC,CAAC,UAAU,CAAC;AAChB;EACA,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE;EAC5H;EACA,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;EAC5B,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;AACL;EACA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACrB,IAAI,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC;EAChD,GAAG,MAAM;EACT;EACA,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;EAC7B,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;AACL;EACA,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;EACtB,IAAI,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,GAAG,KAAK,CAAC;EACnD,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,KAAK,CAAC,IAAI,EAAE;EACrB,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;EACjC,EAAE,IAAI,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9C,EAAE,IAAI,aAAa,GAAG,IAAI,CAAC,OAAO;EAClC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM;EACnC,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;AAC1C;EACA,EAAE,IAAI,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAChE;EACA,EAAE,IAAI,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACrE;EACA,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,cAAc,GAAG,MAAM,CAAC,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5H;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;EACnD,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC9C;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,SAAS,GAAG;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,KAAK,EAAE;EACT;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,KAAK;EACb,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,MAAM,EAAE;EACV;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,MAAM;EACd;EACA;EACA;EACA,IAAI,MAAM,EAAE,CAAC;EACb,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,eAAe,EAAE;EACnB;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,eAAe;EACvB;EACA;EACA;EACA;EACA;EACA,IAAI,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC;EAChD;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,CAAC;EACd;EACA;EACA;EACA;EACA;EACA,IAAI,iBAAiB,EAAE,cAAc;EACrC,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,YAAY,EAAE;EAChB;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,YAAY;EACpB,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,KAAK,EAAE;EACT;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,KAAK;EACb;EACA,IAAI,OAAO,EAAE,WAAW;EACxB,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,EAAE;EACR;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,IAAI;EACZ;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,QAAQ,EAAE,MAAM;EACpB;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,CAAC;EACd;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,iBAAiB,EAAE,UAAU;EACjC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,cAAc,EAAE,KAAK;EACzB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,uBAAuB,EAAE,KAAK;EAClC,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,KAAK,EAAE;EACT;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,KAAK;EAClB;EACA,IAAI,EAAE,EAAE,KAAK;EACb,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,EAAE;EACR;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,IAAI;EACZ,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,YAAY,EAAE;EAChB;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,YAAY;EACpB;EACA;EACA;EACA;EACA;EACA,IAAI,eAAe,EAAE,IAAI;EACzB;EACA;EACA;EACA;EACA;EACA,IAAI,CAAC,EAAE,QAAQ;EACf;EACA;EACA;EACA;EACA;EACA,IAAI,CAAC,EAAE,OAAO;EACd,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,UAAU,EAAE;EACd;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,UAAU;EAClB;EACA,IAAI,MAAM,EAAE,gBAAgB;EAC5B;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,eAAe,EAAE,SAAS;EAC9B,GAAG;EACH,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,QAAQ,GAAG;EACf;EACA;EACA;EACA;EACA,EAAE,SAAS,EAAE,QAAQ;AACrB;EACA;EACA;EACA;EACA;EACA,EAAE,aAAa,EAAE,KAAK;AACtB;EACA;EACA;EACA;EACA;EACA,EAAE,aAAa,EAAE,IAAI;AACrB;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,eAAe,EAAE,KAAK;AACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,QAAQ,EAAE,SAAS,QAAQ,GAAG,EAAE;AAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,QAAQ,EAAE,SAAS,QAAQ,GAAG,EAAE;AAClC;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,SAAS,EAAE,SAAS;EACtB,CAAC,CAAC;AACF;EACA;EACA;EACA;E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"} \ No newline at end of file +{"version":3,"file":"bootstrap.bundle.js","sources":["../../js/src/util.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/popper.js/dist/esm/popper.js","../../js/src/dropdown.js","../../js/src/modal.js","../../js/src/tools/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (_) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n this.shouldAvoidTriggerChange = false\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $(input).trigger('change')\n }\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $element.data(DATA_KEY, data)\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n }\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n const $element = $(this._element)\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._updateInterval()\n\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n DIRECTION_NEXT :\n DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, event => this.pause(event))\n .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, e => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n $(this._element).on(EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n if (!element) {\n return\n }\n\n const elementInterval = parseInt(element.getAttribute('data-interval'), 10)\n\n if (elementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = elementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n this._activeElement = nextElement\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter(foundElem => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$element.data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Totally disable Popper for Dropdowns in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this._config.offset(data.offsets, this._element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n customClass: '(string|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n}\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n customClass: '',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n}\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n $(tip).addClass(this.config.customClass)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: data => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: data => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this.config.offset(data.offsets, this.element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n event => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, event => this._enter(event))\n .on(eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div></div>'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map(element => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .addClass(CLASS_NAME_ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(SELECTOR_NAV_ITEMS)\n .children(SELECTOR_NAV_LINKS)\n .addClass(CLASS_NAME_ACTIVE)\n }\n\n $(this._scrollElement).trigger(EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = '> li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(CLASS_NAME_ACTIVE) ||\n $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(EVENT_HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(EVENT_HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n $(container).find(SELECTOR_ACTIVE_UL) :\n $(container).children(SELECTOR_ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(CLASS_NAME_SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(CLASS_NAME_ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n SELECTOR_DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(CLASS_NAME_ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(CLASS_NAME_ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n Util.reflow(element)\n\n if (element.classList.contains(CLASS_NAME_FADE)) {\n element.classList.add(CLASS_NAME_SHOW)\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 500\n}\n\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast {\n constructor(element, config) {\n this._element = element\n this._config = this._getConfig(config)\n this._timeout = null\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n show() {\n const showEvent = $.Event(EVENT_SHOW)\n\n $(this._element).trigger(showEvent)\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n $(this._element).trigger(EVENT_SHOWN)\n\n if (this._config.autohide) {\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n Util.reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._close()\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n\n $.removeData(this._element, DATA_KEY)\n this._element = null\n this._config = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...$(this._element).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _setListeners() {\n $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n }\n\n _close() {\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n $(this._element).trigger(EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new Toast(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Toast._jQueryInterface\n$.fn[NAME].Constructor = Toast\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Toast._jQueryInterface\n}\n\nexport default Toast\n"],"names":["TRANSITION_END","MAX_UID","MILLISECONDS_MULTIPLIER","toType","obj","toString","call","match","toLowerCase","getSpecialTransitionEndEvent","bindType","delegateType","handle","event","$","target","is","handleObj","handler","apply","arguments","undefined","transitionEndEmulator","duration","called","one","Util","setTimeout","triggerTransitionEnd","setTransitionEndSupport","fn","emulateTransitionEnd","special","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","trigger","supportsTransitionEnd","Boolean","isElement","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","expectedTypes","value","valueType","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","TypeError","version","jquery","minMajor","ltMajor","minMinor","minPatch","maxMajor","NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","SELECTOR_DISMISS","EVENT_CLOSE","EVENT_CLOSED","EVENT_CLICK_DATA_API","CLASS_NAME_ALERT","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","_element","close","rootElement","_getRootElement","customEvent","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","parent","closest","closeEvent","Event","removeClass","hasClass","_destroyElement","detach","remove","_jQueryInterface","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","Constructor","noConflict","CLASS_NAME_ACTIVE","CLASS_NAME_BUTTON","CLASS_NAME_FOCUS","SELECTOR_DATA_TOGGLE_CARROT","SELECTOR_DATA_TOGGLES","SELECTOR_DATA_TOGGLE","SELECTOR_DATA_TOGGLES_BUTTONS","SELECTOR_INPUT","SELECTOR_ACTIVE","SELECTOR_BUTTON","EVENT_FOCUS_BLUR_DATA_API","EVENT_LOAD_DATA_API","Button","shouldAvoidTriggerChange","toggle","triggerChangeEvent","addAriaPressed","input","type","checked","classList","contains","activeElement","focus","hasAttribute","setAttribute","toggleClass","avoidTriggerChange","button","initialButton","inputBtn","tagName","window","buttons","slice","querySelectorAll","i","len","length","add","ARROW_LEFT_KEYCODE","ARROW_RIGHT_KEYCODE","TOUCHEVENT_COMPAT_WAIT","SWIPE_THRESHOLD","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","DIRECTION_NEXT","DIRECTION_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","EVENT_DRAG_START","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_RIGHT","CLASS_NAME_LEFT","CLASS_NAME_NEXT","CLASS_NAME_PREV","CLASS_NAME_POINTER_EVENT","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM","SELECTOR_ITEM_IMG","SELECTOR_NEXT_PREV","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","clearInterval","_updateInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","direction","off","_handleSwipe","absDeltax","abs","_keydown","_addTouchEventListeners","start","originalEvent","pointerType","clientX","touches","move","end","clearTimeout","e","which","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","isGoingToWrap","delta","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","children","addClass","elementInterval","parseInt","defaultInterval","activeElementIndex","nextElement","nextElementIndex","isCycling","directionalClassName","orderClassName","slidEvent","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","DIMENSION_WIDTH","DIMENSION_HEIGHT","SELECTOR_ACTIVES","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","not","startEvent","dimension","_getDimension","style","attr","setTransitioning","complete","capitalizedDimension","scrollSize","getBoundingClientRect","triggerArrayLength","$elem","isTransitioning","hasWidth","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","selectors","$target","_extends","ESCAPE_KEYCODE","SPACE_KEYCODE","TAB_KEYCODE","ARROW_UP_KEYCODE","ARROW_DOWN_KEYCODE","RIGHT_MOUSE_BUTTON_WHICH","REGEXP_KEYDOWN","EVENT_CLICK","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DISABLED","CLASS_NAME_DROPUP","CLASS_NAME_DROPRIGHT","CLASS_NAME_DROPLEFT","CLASS_NAME_MENURIGHT","CLASS_NAME_POSITION_STATIC","SELECTOR_FORM_CHILD","SELECTOR_MENU","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","offset","flip","boundary","reference","display","popperConfig","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","Popper","referenceElement","_getPopperConfig","body","noop","hideEvent","destroy","update","scheduleUpdate","stopPropagation","constructor","_getPlacement","$parentDropdown","placement","_getOffset","offsets","modifiers","enabled","preventOverflow","boundariesElement","applyStyle","toggles","context","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","backdrop","EVENT_HIDE_PREVENTED","EVENT_FOCUSIN","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_KEYDOWN_DISMISS","EVENT_MOUSEUP_DISMISS","EVENT_MOUSEDOWN_DISMISS","CLASS_NAME_SCROLLABLE","CLASS_NAME_SCROLLBAR_MEASURER","CLASS_NAME_BACKDROP","CLASS_NAME_OPEN","CLASS_NAME_STATIC","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","SELECTOR_DATA_DISMISS","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","forEach","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","clientHeight","overflowY","modalTransitionDuration","modalBody","Node","ELEMENT_NODE","appendChild","removeAttribute","scrollTop","_enforceFocus","shownEvent","transitionComplete","has","_resetAdjustments","_resetScrollbar","_removeBackdrop","callback","animate","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","paddingLeft","paddingRight","rect","round","left","right","innerWidth","_getScrollbarWidth","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","marginRight","calculatedMargin","padding","elements","margin","scrollDiv","scrollbarWidth","width","clientWidth","removeChild","uriAttrs","ARIA_ATTRIBUTE_PATTERN","DefaultWhitelist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attrName","nodeName","nodeValue","regExp","attrRegex","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","domParser","DOMParser","createdDocument","parseFromString","whitelistKeys","keys","el","elName","attributeList","attributes","whitelistedAttributes","concat","innerHTML","CLASS_PREFIX","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","animation","template","title","delay","html","container","fallbackPlacement","customClass","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","HOVER_STATE_SHOW","HOVER_STATE_OUT","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","SELECTOR_TOOLTIP_INNER","SELECTOR_ARROW","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","dataKey","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","ownerDocument","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","_fixTransition","prevHoverState","_cleanTipClass","getTitle","setElementContent","content","empty","append","text","defaultBsConfig","behavior","arrow","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","find","triggers","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","key","$tip","tabClass","join","popperData","instance","popper","initConfigAnimation","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","_getContent","method","EVENT_ACTIVATE","EVENT_SCROLL","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_DATA_SPY","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_ITEMS","SELECTOR_DROPDOWN_TOGGLE","METHOD_OFFSET","METHOD_POSITION","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targets","map","targetSelector","targetBCR","height","top","sort","pageYOffset","max","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","isActiveTarget","queries","$link","parents","node","scrollSpys","scrollSpysLength","$spy","CLASS_NAME_DROPDOWN_MENU","SELECTOR_ACTIVE_UL","SELECTOR_DROPDOWN_ACTIVE_CHILD","Tab","previous","listElement","itemSelector","makeArray","hiddenEvent","activeElements","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","CLASS_NAME_HIDE","CLASS_NAME_SHOWING","autohide","Toast","_clearTimeout","_close"],"mappings":"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;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,eAAe,EAAE;EACnB;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,eAAe;EACvB;EACA;EACA;EACA;EACA;EACA,IAAI,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC;EAChD;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,CAAC;EACd;EACA;EACA;EACA;EACA;EACA,IAAI,iBAAiB,EAAE,cAAc;EACrC,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,YAAY,EAAE;EAChB;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,YAAY;EACpB,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,KAAK,EAAE;EACT;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,KAAK;EACb;EACA,IAAI,OAAO,EAAE,WAAW;EACxB,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,EAAE;EACR;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,IAAI;EACZ;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,QAAQ,EAAE,MAAM;EACpB;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,CAAC;EACd;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,iBAAiB,EAAE,UAAU;EACjC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,cAAc,EAAE,KAAK;EACzB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,uBAAuB,EAAE,KAAK;EAClC,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,KAAK,EAAE;EACT;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,KAAK;EAClB;EACA,IAAI,EAAE,EAAE,KAAK;EACb,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,EAAE;EACR;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,IAAI;EACZ,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,YAAY,EAAE;EAChB;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,YAAY;EACpB;EACA;EACA;EACA;EACA;EACA,IAAI,eAAe,EAAE,IAAI;EACzB;EACA;EACA;EACA;EACA;EACA,IAAI,CAAC,EAAE,QAAQ;EACf;EACA;EACA;EACA;EACA;EACA,IAAI,CAAC,EAAE,OAAO;EACd,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,UAAU,EAAE;EACd;EACA,IAAI,KAAK,EAAE,GAAG;EACd;EACA,IAAI,OAAO,EAAE,IAAI;EACjB;EACA,IAAI,EAAE,EAAE,UAAU;EAClB;EACA,IAAI,MAAM,EAAE,gBAAgB;EAC5B;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,eAAe,EAAE,SAAS;EAC9B,GAAG;EACH,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E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"} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js index ef603dadf..7961bdaf8 100644 --- a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js +++ b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js @@ -1,7 +1,7 @@ /*! - * Bootstrap v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 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")):"function"==typeof define&&define.amd?define(["exports","jquery"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap={},t.jQuery)}(this,(function(t,e){"use strict";function n(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var i=n(e);function o(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 r(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}function a(){return(a=Object.assign||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}).apply(this,arguments)}function s(t){var e=this,n=!1;return i.default(this).one(l.TRANSITION_END,(function(){n=!0})),setTimeout((function(){n||l.triggerTransitionEnd(e)}),t),this}var l={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=i.default(t).css("transition-duration"),n=i.default(t).css("transition-delay"),o=parseFloat(e),r=parseFloat(n);return o||r?(e=e.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(e)+parseFloat(n))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){i.default(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},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],r=e[i],a=r&&l.isElement(r)?"element":null===(s=r)||"undefined"==typeof s?""+s:{}.toString.call(s).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(a))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+a+'" but expected type "'+o+'".')}var s},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?l.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof i.default)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=i.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")}};l.jQueryDetection(),i.default.fn.emulateTransitionEnd=s,i.default.event.special[l.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(i.default(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var u="alert",f=i.default.fn[u],d=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(){i.default.removeData(this._element,"bs.alert"),this._element=null},e._getRootElement=function(t){var e=l.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=i.default(t).closest(".alert")[0]),n},e._triggerCloseEvent=function(t){var e=i.default.Event("close.bs.alert");return i.default(t).trigger(e),e},e._removeElement=function(t){var e=this;if(i.default(t).removeClass("show"),i.default(t).hasClass("fade")){var n=l.getTransitionDurationFromElement(t);i.default(t).one(l.TRANSITION_END,(function(n){return e._destroyElement(t,n)})).emulateTransitionEnd(n)}else this._destroyElement(t)},e._destroyElement=function(t){i.default(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.alert");o||(o=new t(this),n.data("bs.alert",o)),"close"===e&&o[e](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();i.default(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',d._handleDismiss(new d)),i.default.fn[u]=d._jQueryInterface,i.default.fn[u].Constructor=d,i.default.fn[u].noConflict=function(){return i.default.fn[u]=f,d._jQueryInterface};var c=i.default.fn.button,h=function(){function t(t){this._element=t,this.shouldAvoidTriggerChange=!1}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,n=i.default(this._element).closest('[data-toggle="buttons"]')[0];if(n){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var r=n.querySelector(".active");r&&i.default(r).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),this.shouldAvoidTriggerChange||i.default(o).trigger("change")),o.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&i.default(this._element).toggleClass("active"))},e.dispose=function(){i.default.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(e,n){return this.each((function(){var o=i.default(this),r=o.data("bs.button");r||(r=new t(this),o.data("bs.button",r)),r.shouldAvoidTriggerChange=n,"toggle"===e&&r[e]()}))},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();i.default(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=t.target,n=e;if(i.default(e).hasClass("btn")||(e=i.default(e).closest(".btn")[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var o=e.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();"INPUT"!==n.tagName&&"LABEL"===e.tagName||h._jQueryInterface.call(i.default(e),"toggle","INPUT"===n.tagName)}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=i.default(t.target).closest(".btn")[0];i.default(e).toggleClass("focus",/^focus(in)?$/.test(t.type))})),i.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('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}for(var r=0,a=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;r<a;r++){var s=t[r];"true"===s.getAttribute("aria-pressed")?s.classList.add("active"):s.classList.remove("active")}})),i.default.fn.button=h._jQueryInterface,i.default.fn.button.Constructor=h,i.default.fn.button.noConflict=function(){return i.default.fn.button=c,h._jQueryInterface};var p="carousel",m=".bs.carousel",g=i.default.fn[p],v={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},_={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},b={TOUCH:"touch",PEN:"pen"},y=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("next")},e.nextWhenVisible=function(){var t=i.default(this._element);!document.hidden&&t.is(":visible")&&"hidden"!==t.css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide("prev")},e.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(l.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._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(".active.carousel-item");var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)i.default(this._element).one("slid.bs.carousel",(function(){return e.to(t)}));else{if(n===t)return this.pause(),void this.cycle();var o=t>n?"next":"prev";this._slide(o,this._items[t])}},e.dispose=function(){i.default(this._element).off(m),i.default.removeData(this._element,"bs.carousel"),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=a({},v,t),l.typeCheckConfig(p,t,_),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&&i.default(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&i.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&&b[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},n=function(e){t._pointerEvent&&b[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))};i.default(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(i.default(this._element).on("pointerdown.bs.carousel",(function(t){return e(t)})),i.default(this._element).on("pointerup.bs.carousel",(function(t){return n(t)})),this._element.classList.add("pointer-event")):(i.default(this._element).on("touchstart.bs.carousel",(function(t){return e(t)})),i.default(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),i.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="next"===t,i="prev"===t,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var a=(o+("prev"===t?-1:1))%this._items.length;return-1===a?this._items[this._items.length-1]:this._items[a]},e._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),r=i.default.Event("slide.bs.carousel",{relatedTarget:t,direction:e,from:o,to:n});return i.default(this._element).trigger(r),r},e._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));i.default(e).removeClass("active");var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&i.default(n).addClass("active")}},e._slide=function(t,e){var n,o,r,a=this,s=this._element.querySelector(".active.carousel-item"),u=this._getItemIndex(s),f=e||s&&this._getItemByDirection(t,s),d=this._getItemIndex(f),c=Boolean(this._interval);if("next"===t?(n="carousel-item-left",o="carousel-item-next",r="left"):(n="carousel-item-right",o="carousel-item-prev",r="right"),f&&i.default(f).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(f,r).isDefaultPrevented()&&s&&f){this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(f);var h=i.default.Event("slid.bs.carousel",{relatedTarget:f,direction:r,from:u,to:d});if(i.default(this._element).hasClass("slide")){i.default(f).addClass(o),l.reflow(f),i.default(s).addClass(n),i.default(f).addClass(n);var p=parseInt(f.getAttribute("data-interval"),10);p?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=p):this._config.interval=this._config.defaultInterval||this._config.interval;var m=l.getTransitionDurationFromElement(s);i.default(s).one(l.TRANSITION_END,(function(){i.default(f).removeClass(n+" "+o).addClass("active"),i.default(s).removeClass("active "+o+" "+n),a._isSliding=!1,setTimeout((function(){return i.default(a._element).trigger(h)}),0)})).emulateTransitionEnd(m)}else i.default(s).removeClass("active"),i.default(f).addClass("active"),this._isSliding=!1,i.default(this._element).trigger(h);c&&this.cycle()}},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this).data("bs.carousel"),o=a({},v,i.default(this).data());"object"==typeof e&&(o=a({},o,e));var r="string"==typeof e?e:o.slide;if(n||(n=new t(this,o),i.default(this).data("bs.carousel",n)),"number"==typeof e)n.to(e);else if("string"==typeof r){if("undefined"==typeof n[r])throw new TypeError('No method named "'+r+'"');n[r]()}else o.interval&&o.ride&&(n.pause(),n.cycle())}))},t._dataApiClickHandler=function(e){var n=l.getSelectorFromElement(this);if(n){var o=i.default(n)[0];if(o&&i.default(o).hasClass("carousel")){var r=a({},i.default(o).data(),i.default(this).data()),s=this.getAttribute("data-slide-to");s&&(r.interval=!1),t._jQueryInterface.call(i.default(o),r),s&&i.default(o).data("bs.carousel").to(s),e.preventDefault()}}},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return v}}]),t}();i.default(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",y._dataApiClickHandler),i.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 o=i.default(t[e]);y._jQueryInterface.call(o,o.data())}})),i.default.fn[p]=y._jQueryInterface,i.default.fn[p].Constructor=y,i.default.fn[p].noConflict=function(){return i.default.fn[p]=g,y._jQueryInterface};var w="collapse",E=i.default.fn[w],T={toggle:!0,parent:""},C={toggle:"boolean",parent:"(string|element)"},S=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('[data-toggle="collapse"]')),i=0,o=n.length;i<o;i++){var r=n[i],a=l.getSelectorFromElement(r),s=[].slice.call(document.querySelectorAll(a)).filter((function(e){return e===t}));null!==a&&s.length>0&&(this._selector=a,this._triggerArray.push(r))}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(){i.default(this._element).hasClass("show")?this.hide():this.show()},e.show=function(){var e,n,o=this;if(!this._isTransitioning&&!i.default(this._element).hasClass("show")&&(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(e=null),!(e&&(n=i.default(e).not(this._selector).data("bs.collapse"))&&n._isTransitioning))){var r=i.default.Event("show.bs.collapse");if(i.default(this._element).trigger(r),!r.isDefaultPrevented()){e&&(t._jQueryInterface.call(i.default(e).not(this._selector),"hide"),n||i.default(e).data("bs.collapse",null));var a=this._getDimension();i.default(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[a]=0,this._triggerArray.length&&i.default(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var s="scroll"+(a[0].toUpperCase()+a.slice(1)),u=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,(function(){i.default(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[a]="",o.setTransitioning(!1),i.default(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(u),this._element.style[a]=this._element[s]+"px"}}},e.hide=function(){var t=this;if(!this._isTransitioning&&i.default(this._element).hasClass("show")){var e=i.default.Event("hide.bs.collapse");if(i.default(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",l.reflow(this._element),i.default(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var r=0;r<o;r++){var a=this._triggerArray[r],s=l.getSelectorFromElement(a);if(null!==s)i.default([].slice.call(document.querySelectorAll(s))).hasClass("show")||i.default(a).addClass("collapsed").attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var u=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,(function(){t.setTransitioning(!1),i.default(t._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(u)}}},e.setTransitioning=function(t){this._isTransitioning=t},e.dispose=function(){i.default.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},e._getConfig=function(t){return(t=a({},T,t)).toggle=Boolean(t.toggle),l.typeCheckConfig(w,t,C),t},e._getDimension=function(){return i.default(this._element).hasClass("width")?"width":"height"},e._getParent=function(){var e,n=this;l.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 o='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',r=[].slice.call(e.querySelectorAll(o));return i.default(r).each((function(e,i){n._addAriaAndCollapsedClass(t._getTargetFromElement(i),[i])})),e},e._addAriaAndCollapsedClass=function(t,e){var n=i.default(t).hasClass("show");e.length&&i.default(e).toggleClass("collapsed",!n).attr("aria-expanded",n)},t._getTargetFromElement=function(t){var e=l.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.collapse"),r=a({},T,n.data(),"object"==typeof e&&e?e:{});if(!o&&r.toggle&&"string"==typeof e&&/show|hide/.test(e)&&(r.toggle=!1),o||(o=new t(this,r),n.data("bs.collapse",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return T}}]),t}();i.default(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var e=i.default(this),n=l.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(n));i.default(o).each((function(){var t=i.default(this),n=t.data("bs.collapse")?"toggle":e.data();S._jQueryInterface.call(t,n)}))})),i.default.fn[w]=S._jQueryInterface,i.default.fn[w].Constructor=S,i.default.fn[w].noConflict=function(){return i.default.fn[w]=E,S._jQueryInterface};var D="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,N=function(){for(var t=["Edge","Trident","Firefox"],e=0;e<t.length;e+=1)if(D&&navigator.userAgent.indexOf(t[e])>=0)return 1;return 0}();var k=D&&window.Promise?function(t){var e=!1;return function(){e||(e=!0,window.Promise.resolve().then((function(){e=!1,t()})))}}:function(t){var e=!1;return function(){e||(e=!0,setTimeout((function(){e=!1,t()}),N))}};function A(t){return t&&"[object Function]"==={}.toString.call(t)}function I(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function O(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function x(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=I(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?t:x(O(t))}function j(t){return t&&t.referenceNode?t.referenceNode:t}var L=D&&!(!window.MSInputMethodContext||!document.documentMode),P=D&&/MSIE 10/.test(navigator.userAgent);function F(t){return 11===t?L:10===t?P:L||P}function R(t){if(!t)return document.documentElement;for(var e=F(10)?document.body:null,n=t.offsetParent||null;n===e&&t.nextElementSibling;)n=(t=t.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===I(n,"position")?R(n):n:t?t.ownerDocument.documentElement:document.documentElement}function H(t){return null!==t.parentNode?H(t.parentNode):t}function M(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;var n=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?t:e,o=n?e:t,r=document.createRange();r.setStart(i,0),r.setEnd(o,0);var a,s,l=r.commonAncestorContainer;if(t!==l&&e!==l||i.contains(o))return"BODY"===(s=(a=l).nodeName)||"HTML"!==s&&R(a.firstElementChild)!==a?R(l):l;var u=H(t);return u.host?M(u.host,e):M(t,H(e).host)}function B(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===e?"scrollTop":"scrollLeft",i=t.nodeName;if("BODY"===i||"HTML"===i){var o=t.ownerDocument.documentElement,r=t.ownerDocument.scrollingElement||o;return r[n]}return t[n]}function q(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=B(e,"top"),o=B(e,"left"),r=n?-1:1;return t.top+=i*r,t.bottom+=i*r,t.left+=o*r,t.right+=o*r,t}function Q(t,e){var n="x"===e?"Left":"Top",i="Left"===n?"Right":"Bottom";return parseFloat(t["border"+n+"Width"])+parseFloat(t["border"+i+"Width"])}function W(t,e,n,i){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],F(10)?parseInt(n["offset"+t])+parseInt(i["margin"+("Height"===t?"Top":"Left")])+parseInt(i["margin"+("Height"===t?"Bottom":"Right")]):0)}function U(t){var e=t.body,n=t.documentElement,i=F(10)&&getComputedStyle(n);return{height:W("Height",e,n,i),width:W("Width",e,n,i)}}var V=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},Y=function(){function t(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)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),z=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},X=Object.assign||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};function K(t){return X({},t,{right:t.left+t.width,bottom:t.top+t.height})}function G(t){var e={};try{if(F(10)){e=t.getBoundingClientRect();var n=B(t,"top"),i=B(t,"left");e.top+=n,e.left+=i,e.bottom+=n,e.right+=i}else e=t.getBoundingClientRect()}catch(t){}var o={left:e.left,top:e.top,width:e.right-e.left,height:e.bottom-e.top},r="HTML"===t.nodeName?U(t.ownerDocument):{},a=r.width||t.clientWidth||o.width,s=r.height||t.clientHeight||o.height,l=t.offsetWidth-a,u=t.offsetHeight-s;if(l||u){var f=I(t);l-=Q(f,"x"),u-=Q(f,"y"),o.width-=l,o.height-=u}return K(o)}function $(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=F(10),o="HTML"===e.nodeName,r=G(t),a=G(e),s=x(t),l=I(e),u=parseFloat(l.borderTopWidth),f=parseFloat(l.borderLeftWidth);n&&o&&(a.top=Math.max(a.top,0),a.left=Math.max(a.left,0));var d=K({top:r.top-a.top-u,left:r.left-a.left-f,width:r.width,height:r.height});if(d.marginTop=0,d.marginLeft=0,!i&&o){var c=parseFloat(l.marginTop),h=parseFloat(l.marginLeft);d.top-=u-c,d.bottom-=u-c,d.left-=f-h,d.right-=f-h,d.marginTop=c,d.marginLeft=h}return(i&&!n?e.contains(s):e===s&&"BODY"!==s.nodeName)&&(d=q(d,e)),d}function J(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.ownerDocument.documentElement,i=$(t,n),o=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),a=e?0:B(n),s=e?0:B(n,"left"),l={top:a-i.top+i.marginTop,left:s-i.left+i.marginLeft,width:o,height:r};return K(l)}function Z(t){var e=t.nodeName;if("BODY"===e||"HTML"===e)return!1;if("fixed"===I(t,"position"))return!0;var n=O(t);return!!n&&Z(n)}function tt(t){if(!t||!t.parentElement||F())return document.documentElement;for(var e=t.parentElement;e&&"none"===I(e,"transform");)e=e.parentElement;return e||document.documentElement}function et(t,e,n,i){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},a=o?tt(t):M(t,j(e));if("viewport"===i)r=J(a,o);else{var s=void 0;"scrollParent"===i?"BODY"===(s=x(O(e))).nodeName&&(s=t.ownerDocument.documentElement):s="window"===i?t.ownerDocument.documentElement:i;var l=$(s,a,o);if("HTML"!==s.nodeName||Z(a))r=l;else{var u=U(t.ownerDocument),f=u.height,d=u.width;r.top+=l.top-l.marginTop,r.bottom=f+l.top,r.left+=l.left-l.marginLeft,r.right=d+l.left}}var c="number"==typeof(n=n||0);return r.left+=c?n:n.left||0,r.top+=c?n:n.top||0,r.right-=c?n:n.right||0,r.bottom-=c?n:n.bottom||0,r}function nt(t){return t.width*t.height}function it(t,e,n,i,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var a=et(n,i,r,o),s={top:{width:a.width,height:e.top-a.top},right:{width:a.right-e.right,height:a.height},bottom:{width:a.width,height:a.bottom-e.bottom},left:{width:e.left-a.left,height:a.height}},l=Object.keys(s).map((function(t){return X({key:t},s[t],{area:nt(s[t])})})).sort((function(t,e){return e.area-t.area})),u=l.filter((function(t){var e=t.width,i=t.height;return e>=n.clientWidth&&i>=n.clientHeight})),f=u.length>0?u[0].key:l[0].key,d=t.split("-")[1];return f+(d?"-"+d:"")}function ot(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,o=i?tt(e):M(e,j(n));return $(n,o,i)}function rt(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),n=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),i=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:t.offsetWidth+i,height:t.offsetHeight+n}}function at(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,(function(t){return e[t]}))}function st(t,e,n){n=n.split("-")[0];var i=rt(t),o={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),a=r?"top":"left",s=r?"left":"top",l=r?"height":"width",u=r?"width":"height";return o[a]=e[a]+e[l]/2-i[l]/2,o[s]=n===s?e[s]-i[u]:e[at(s)],o}function lt(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function ut(t,e,n){return(void 0===n?t:t.slice(0,function(t,e,n){if(Array.prototype.findIndex)return t.findIndex((function(t){return t[e]===n}));var i=lt(t,(function(t){return t[e]===n}));return t.indexOf(i)}(t,"name",n))).forEach((function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=t.function||t.fn;t.enabled&&A(n)&&(e.offsets.popper=K(e.offsets.popper),e.offsets.reference=K(e.offsets.reference),e=n(e,t))})),e}function ft(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=ot(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=it(this.options.placement,t.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),t.originalPlacement=t.placement,t.positionFixed=this.options.positionFixed,t.offsets.popper=st(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=ut(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}function dt(t,e){return t.some((function(t){var n=t.name;return t.enabled&&n===e}))}function ct(t){for(var e=[!1,"ms","Webkit","Moz","O"],n=t.charAt(0).toUpperCase()+t.slice(1),i=0;i<e.length;i++){var o=e[i],r=o?""+o+n:t;if("undefined"!=typeof document.body.style[r])return r}return null}function ht(){return this.state.isDestroyed=!0,dt(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[ct("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function pt(t){var e=t.ownerDocument;return e?e.defaultView:window}function mt(t,e,n,i){n.updateBound=i,pt(t).addEventListener("resize",n.updateBound,{passive:!0});var o=x(t);return function t(e,n,i,o){var r="BODY"===e.nodeName,a=r?e.ownerDocument.defaultView:e;a.addEventListener(n,i,{passive:!0}),r||t(x(a.parentNode),n,i,o),o.push(a)}(o,"scroll",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function gt(){this.state.eventsEnabled||(this.state=mt(this.reference,this.options,this.state,this.scheduleUpdate))}function vt(){var t,e;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(t=this.reference,e=this.state,pt(t).removeEventListener("resize",e.updateBound),e.scrollParents.forEach((function(t){t.removeEventListener("scroll",e.updateBound)})),e.updateBound=null,e.scrollParents=[],e.scrollElement=null,e.eventsEnabled=!1,e))}function _t(t){return""!==t&&!isNaN(parseFloat(t))&&isFinite(t)}function bt(t,e){Object.keys(e).forEach((function(n){var i="";-1!==["width","height","top","right","bottom","left"].indexOf(n)&&_t(e[n])&&(i="px"),t.style[n]=e[n]+i}))}var yt=D&&/Firefox/i.test(navigator.userAgent);function wt(t,e,n){var i=lt(t,(function(t){return t.name===e})),o=!!i&&t.some((function(t){return t.name===n&&t.enabled&&t.order<i.order}));if(!o){var r="`"+e+"`",a="`"+n+"`";console.warn(a+" modifier is required by "+r+" modifier in order to work, be sure to include it before "+r+"!")}return o}var Et=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],Tt=Et.slice(3);function Ct(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Tt.indexOf(t),i=Tt.slice(n+1).concat(Tt.slice(0,n));return e?i.reverse():i}var St="flip",Dt="clockwise",Nt="counterclockwise";function kt(t,e,n,i){var o=[0,0],r=-1!==["right","left"].indexOf(i),a=t.split(/(\+|\-)/).map((function(t){return t.trim()})),s=a.indexOf(lt(a,(function(t){return-1!==t.search(/,|\s/)})));a[s]&&-1===a[s].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,u=-1!==s?[a.slice(0,s).concat([a[s].split(l)[0]]),[a[s].split(l)[1]].concat(a.slice(s+1))]:[a];return(u=u.map((function(t,i){var o=(1===i?!r:r)?"height":"width",a=!1;return t.reduce((function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,a=!0,t):a?(t[t.length-1]+=e,a=!1,t):t.concat(e)}),[]).map((function(t){return function(t,e,n,i){var o=t.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],a=o[2];if(!r)return t;if(0===a.indexOf("%")){var s=void 0;switch(a){case"%p":s=n;break;case"%":case"%r":default:s=i}return K(s)[e]/100*r}if("vh"===a||"vw"===a){return("vh"===a?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r}return r}(t,o,e,n)}))}))).forEach((function(t,e){t.forEach((function(n,i){_t(n)&&(o[e]+=n*("-"===t[i-1]?-1:1))}))})),o}var At={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(t){var e=t.placement,n=e.split("-")[0],i=e.split("-")[1];if(i){var o=t.offsets,r=o.reference,a=o.popper,s=-1!==["bottom","top"].indexOf(n),l=s?"left":"top",u=s?"width":"height",f={start:z({},l,r[l]),end:z({},l,r[l]+r[u]-a[u])};t.offsets.popper=X({},a,f[i])}return t}},offset:{order:200,enabled:!0,fn:function(t,e){var n=e.offset,i=t.placement,o=t.offsets,r=o.popper,a=o.reference,s=i.split("-")[0],l=void 0;return l=_t(+n)?[+n,0]:kt(n,r,a,s),"left"===s?(r.top+=l[0],r.left-=l[1]):"right"===s?(r.top+=l[0],r.left+=l[1]):"top"===s?(r.left+=l[0],r.top-=l[1]):"bottom"===s&&(r.left+=l[0],r.top+=l[1]),t.popper=r,t},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(t,e){var n=e.boundariesElement||R(t.instance.popper);t.instance.reference===n&&(n=R(n));var i=ct("transform"),o=t.instance.popper.style,r=o.top,a=o.left,s=o[i];o.top="",o.left="",o[i]="";var l=et(t.instance.popper,t.instance.reference,e.padding,n,t.positionFixed);o.top=r,o.left=a,o[i]=s,e.boundaries=l;var u=e.priority,f=t.offsets.popper,d={primary:function(t){var n=f[t];return f[t]<l[t]&&!e.escapeWithReference&&(n=Math.max(f[t],l[t])),z({},t,n)},secondary:function(t){var n="right"===t?"left":"top",i=f[n];return f[t]>l[t]&&!e.escapeWithReference&&(i=Math.min(f[n],l[t]-("right"===t?f.width:f.height))),z({},n,i)}};return u.forEach((function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";f=X({},f,d[e](t))})),t.offsets.popper=f,t},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(t){var e=t.offsets,n=e.popper,i=e.reference,o=t.placement.split("-")[0],r=Math.floor,a=-1!==["top","bottom"].indexOf(o),s=a?"right":"bottom",l=a?"left":"top",u=a?"width":"height";return n[s]<r(i[l])&&(t.offsets.popper[l]=r(i[l])-n[u]),n[l]>r(i[s])&&(t.offsets.popper[l]=r(i[s])),t}},arrow:{order:500,enabled:!0,fn:function(t,e){var n;if(!wt(t.instance.modifiers,"arrow","keepTogether"))return t;var i=e.element;if("string"==typeof i){if(!(i=t.instance.popper.querySelector(i)))return t}else if(!t.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),t;var o=t.placement.split("-")[0],r=t.offsets,a=r.popper,s=r.reference,l=-1!==["left","right"].indexOf(o),u=l?"height":"width",f=l?"Top":"Left",d=f.toLowerCase(),c=l?"left":"top",h=l?"bottom":"right",p=rt(i)[u];s[h]-p<a[d]&&(t.offsets.popper[d]-=a[d]-(s[h]-p)),s[d]+p>a[h]&&(t.offsets.popper[d]+=s[d]+p-a[h]),t.offsets.popper=K(t.offsets.popper);var m=s[d]+s[u]/2-p/2,g=I(t.instance.popper),v=parseFloat(g["margin"+f]),_=parseFloat(g["border"+f+"Width"]),b=m-t.offsets.popper[d]-v-_;return b=Math.max(Math.min(a[u]-p,b),0),t.arrowElement=i,t.offsets.arrow=(z(n={},d,Math.round(b)),z(n,c,""),n),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(t,e){if(dt(t.instance.modifiers,"inner"))return t;if(t.flipped&&t.placement===t.originalPlacement)return t;var n=et(t.instance.popper,t.instance.reference,e.padding,e.boundariesElement,t.positionFixed),i=t.placement.split("-")[0],o=at(i),r=t.placement.split("-")[1]||"",a=[];switch(e.behavior){case St:a=[i,o];break;case Dt:a=Ct(i);break;case Nt:a=Ct(i,!0);break;default:a=e.behavior}return a.forEach((function(s,l){if(i!==s||a.length===l+1)return t;i=t.placement.split("-")[0],o=at(i);var u=t.offsets.popper,f=t.offsets.reference,d=Math.floor,c="left"===i&&d(u.right)>d(f.left)||"right"===i&&d(u.left)<d(f.right)||"top"===i&&d(u.bottom)>d(f.top)||"bottom"===i&&d(u.top)<d(f.bottom),h=d(u.left)<d(n.left),p=d(u.right)>d(n.right),m=d(u.top)<d(n.top),g=d(u.bottom)>d(n.bottom),v="left"===i&&h||"right"===i&&p||"top"===i&&m||"bottom"===i&&g,_=-1!==["top","bottom"].indexOf(i),b=!!e.flipVariations&&(_&&"start"===r&&h||_&&"end"===r&&p||!_&&"start"===r&&m||!_&&"end"===r&&g),y=!!e.flipVariationsByContent&&(_&&"start"===r&&p||_&&"end"===r&&h||!_&&"start"===r&&g||!_&&"end"===r&&m),w=b||y;(c||v||w)&&(t.flipped=!0,(c||v)&&(i=a[l+1]),w&&(r=function(t){return"end"===t?"start":"start"===t?"end":t}(r)),t.placement=i+(r?"-"+r:""),t.offsets.popper=X({},t.offsets.popper,st(t.instance.popper,t.offsets.reference,t.placement)),t=ut(t.instance.modifiers,t,"flip"))})),t},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(t){var e=t.placement,n=e.split("-")[0],i=t.offsets,o=i.popper,r=i.reference,a=-1!==["left","right"].indexOf(n),s=-1===["top","left"].indexOf(n);return o[a?"left":"top"]=r[n]-(s?o[a?"width":"height"]:0),t.placement=at(e),t.offsets.popper=K(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!wt(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,n=lt(t.instance.modifiers,(function(t){return"preventOverflow"===t.name})).boundaries;if(e.bottom<n.top||e.left>n.right||e.top>n.bottom||e.right<n.left){if(!0===t.hide)return t;t.hide=!0,t.attributes["x-out-of-boundaries"]=""}else{if(!1===t.hide)return t;t.hide=!1,t.attributes["x-out-of-boundaries"]=!1}return t}},computeStyle:{order:850,enabled:!0,fn:function(t,e){var n=e.x,i=e.y,o=t.offsets.popper,r=lt(t.instance.modifiers,(function(t){return"applyStyle"===t.name})).gpuAcceleration;void 0!==r&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var a=void 0!==r?r:e.gpuAcceleration,s=R(t.instance.popper),l=G(s),u={position:o.position},f=function(t,e){var n=t.offsets,i=n.popper,o=n.reference,r=Math.round,a=Math.floor,s=function(t){return t},l=r(o.width),u=r(i.width),f=-1!==["left","right"].indexOf(t.placement),d=-1!==t.placement.indexOf("-"),c=e?f||d||l%2==u%2?r:a:s,h=e?r:s;return{left:c(l%2==1&&u%2==1&&!d&&e?i.left-1:i.left),top:h(i.top),bottom:h(i.bottom),right:c(i.right)}}(t,window.devicePixelRatio<2||!yt),d="bottom"===n?"top":"bottom",c="right"===i?"left":"right",h=ct("transform"),p=void 0,m=void 0;if(m="bottom"===d?"HTML"===s.nodeName?-s.clientHeight+f.bottom:-l.height+f.bottom:f.top,p="right"===c?"HTML"===s.nodeName?-s.clientWidth+f.right:-l.width+f.right:f.left,a&&h)u[h]="translate3d("+p+"px, "+m+"px, 0)",u[d]=0,u[c]=0,u.willChange="transform";else{var g="bottom"===d?-1:1,v="right"===c?-1:1;u[d]=m*g,u[c]=p*v,u.willChange=d+", "+c}var _={"x-placement":t.placement};return t.attributes=X({},_,t.attributes),t.styles=X({},u,t.styles),t.arrowStyles=X({},t.offsets.arrow,t.arrowStyles),t},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(t){var e,n;return bt(t.instance.popper,t.styles),e=t.instance.popper,n=t.attributes,Object.keys(n).forEach((function(t){!1!==n[t]?e.setAttribute(t,n[t]):e.removeAttribute(t)})),t.arrowElement&&Object.keys(t.arrowStyles).length&&bt(t.arrowElement,t.arrowStyles),t},onLoad:function(t,e,n,i,o){var r=ot(o,e,t,n.positionFixed),a=it(n.placement,r,e,t,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return e.setAttribute("x-placement",a),bt(e,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},It=function(){function t(e,n){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};V(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(i.update)},this.update=k(this.update.bind(this)),this.options=X({},t.Defaults,o),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(X({},t.Defaults.modifiers,o.modifiers)).forEach((function(e){i.options.modifiers[e]=X({},t.Defaults.modifiers[e]||{},o.modifiers?o.modifiers[e]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(t){return X({name:t},i.options.modifiers[t])})).sort((function(t,e){return t.order-e.order})),this.modifiers.forEach((function(t){t.enabled&&A(t.onLoad)&&t.onLoad(i.reference,i.popper,i.options,t,i.state)})),this.update();var r=this.options.eventsEnabled;r&&this.enableEventListeners(),this.state.eventsEnabled=r}return Y(t,[{key:"update",value:function(){return ft.call(this)}},{key:"destroy",value:function(){return ht.call(this)}},{key:"enableEventListeners",value:function(){return gt.call(this)}},{key:"disableEventListeners",value:function(){return vt.call(this)}}]),t}();It.Utils=("undefined"!=typeof window?window:global).PopperUtils,It.placements=Et,It.Defaults=At;var Ot="dropdown",xt=i.default.fn[Ot],jt=new RegExp("38|40|27"),Lt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},Pt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},Ft=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&&!i.default(this._element).hasClass("disabled")){var e=i.default(this._menu).hasClass("show");t._clearMenus(),e||this.show(!0)}},e.show=function(e){if(void 0===e&&(e=!1),!(this._element.disabled||i.default(this._element).hasClass("disabled")||i.default(this._menu).hasClass("show"))){var n={relatedTarget:this._element},o=i.default.Event("show.bs.dropdown",n),r=t._getParentFromElement(this._element);if(i.default(r).trigger(o),!o.isDefaultPrevented()){if(!this._inNavbar&&e){if("undefined"==typeof It)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var a=this._element;"parent"===this._config.reference?a=r:l.isElement(this._config.reference)&&(a=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(a=this._config.reference[0])),"scrollParent"!==this._config.boundary&&i.default(r).addClass("position-static"),this._popper=new It(a,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===i.default(r).closest(".navbar-nav").length&&i.default(document.body).children().on("mouseover",null,i.default.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),i.default(this._menu).toggleClass("show"),i.default(r).toggleClass("show").trigger(i.default.Event("shown.bs.dropdown",n))}}},e.hide=function(){if(!this._element.disabled&&!i.default(this._element).hasClass("disabled")&&i.default(this._menu).hasClass("show")){var e={relatedTarget:this._element},n=i.default.Event("hide.bs.dropdown",e),o=t._getParentFromElement(this._element);i.default(o).trigger(n),n.isDefaultPrevented()||(this._popper&&this._popper.destroy(),i.default(this._menu).toggleClass("show"),i.default(o).toggleClass("show").trigger(i.default.Event("hidden.bs.dropdown",e)))}},e.dispose=function(){i.default.removeData(this._element,"bs.dropdown"),i.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;i.default(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},e._getConfig=function(t){return t=a({},this.constructor.Default,i.default(this._element).data(),t),l.typeCheckConfig(Ot,t,this.constructor.DefaultType),t},e._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}return this._menu},e._getPlacement=function(){var t=i.default(this._element.parentNode),e="bottom-start";return t.hasClass("dropup")?e=i.default(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?e="right-start":t.hasClass("dropleft")?e="left-start":i.default(this._menu).hasClass("dropdown-menu-right")&&(e="bottom-end"),e},e._detectNavbar=function(){return i.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=a({},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}),a({},t,this._config.popperConfig)},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this).data("bs.dropdown");if(n||(n=new t(this,"object"==typeof e?e:null),i.default(this).data("bs.dropdown",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('[data-toggle="dropdown"]')),o=0,r=n.length;o<r;o++){var a=t._getParentFromElement(n[o]),s=i.default(n[o]).data("bs.dropdown"),l={relatedTarget:n[o]};if(e&&"click"===e.type&&(l.clickEvent=e),s){var u=s._menu;if(i.default(a).hasClass("show")&&!(e&&("click"===e.type&&/input|textarea/i.test(e.target.tagName)||"keyup"===e.type&&9===e.which)&&i.default.contains(a,e.target))){var f=i.default.Event("hide.bs.dropdown",l);i.default(a).trigger(f),f.isDefaultPrevented()||("ontouchstart"in document.documentElement&&i.default(document.body).children().off("mouseover",null,i.default.noop),n[o].setAttribute("aria-expanded","false"),s._popper&&s._popper.destroy(),i.default(u).removeClass("show"),i.default(a).removeClass("show").trigger(i.default.Event("hidden.bs.dropdown",l)))}}}},t._getParentFromElement=function(t){var e,n=l.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||i.default(e.target).closest(".dropdown-menu").length):!jt.test(e.which))&&!this.disabled&&!i.default(this).hasClass("disabled")){var n=t._getParentFromElement(this),o=i.default(n).hasClass("show");if(o||27!==e.which){if(e.preventDefault(),e.stopPropagation(),!o||27===e.which||32===e.which)return 27===e.which&&i.default(n.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void i.default(this).trigger("click");var r=[].slice.call(n.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return i.default(t).is(":visible")}));if(0!==r.length){var a=r.indexOf(e.target);38===e.which&&a>0&&a--,40===e.which&&a<r.length-1&&a++,a<0&&(a=0),r[a].focus()}}}},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return Lt}},{key:"DefaultType",get:function(){return Pt}}]),t}();i.default(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',Ft._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",Ft._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",Ft._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),Ft._jQueryInterface.call(i.default(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),i.default.fn[Ot]=Ft._jQueryInterface,i.default.fn[Ot].Constructor=Ft,i.default.fn[Ot].noConflict=function(){return i.default.fn[Ot]=xt,Ft._jQueryInterface};var Rt=i.default.fn.modal,Ht={backdrop:!0,keyboard:!0,focus:!0,show:!0},Mt={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},Bt=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){i.default(this._element).hasClass("fade")&&(this._isTransitioning=!0);var n=i.default.Event("show.bs.modal",{relatedTarget:t});i.default(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),i.default(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return e.hide(t)})),i.default(this._dialog).on("mousedown.dismiss.bs.modal",(function(){i.default(e._element).one("mouseup.dismiss.bs.modal",(function(t){i.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=i.default.Event("hide.bs.modal");if(i.default(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var o=i.default(this._element).hasClass("fade");if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),i.default(document).off("focusin.bs.modal"),i.default(this._element).removeClass("show"),i.default(this._element).off("click.dismiss.bs.modal"),i.default(this._dialog).off("mousedown.dismiss.bs.modal"),o){var r=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,(function(t){return e._hideModal(t)})).emulateTransitionEnd(r)}else this._hideModal()}}},e.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return i.default(t).off(".bs.modal")})),i.default(document).off("focusin.bs.modal"),i.default.removeData(this._element,"bs.modal"),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=a({},Ht,t),l.typeCheckConfig("modal",t,Mt),t},e._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var e=i.default.Event("hidePrevented.bs.modal");if(i.default(this._element).trigger(e),e.isDefaultPrevented())return;var n=this._element.scrollHeight>document.documentElement.clientHeight;n||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");var o=l.getTransitionDurationFromElement(this._dialog);i.default(this._element).off(l.TRANSITION_END),i.default(this._element).one(l.TRANSITION_END,(function(){t._element.classList.remove("modal-static"),n||i.default(t._element).one(l.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,o)})).emulateTransitionEnd(o),this._element.focus()}else this.hide()},e._showElement=function(t){var e=this,n=i.default(this._element).hasClass("fade"),o=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"),i.default(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,n&&l.reflow(this._element),i.default(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var r=i.default.Event("shown.bs.modal",{relatedTarget:t}),a=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,i.default(e._element).trigger(r)};if(n){var s=l.getTransitionDurationFromElement(this._dialog);i.default(this._dialog).one(l.TRANSITION_END,a).emulateTransitionEnd(s)}else a()},e._enforceFocus=function(){var t=this;i.default(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(e){document!==e.target&&t._element!==e.target&&0===i.default(t._element).has(e.target).length&&t._element.focus()}))},e._setEscapeEvent=function(){var t=this;this._isShown?i.default(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||i.default(this._element).off("keydown.dismiss.bs.modal")},e._setResizeEvent=function(){var t=this;this._isShown?i.default(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):i.default(window).off("resize.bs.modal")},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(){i.default(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),i.default(t._element).trigger("hidden.bs.modal")}))},e._removeBackdrop=function(){this._backdrop&&(i.default(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(t){var e=this,n=i.default(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",n&&this._backdrop.classList.add(n),i.default(this._backdrop).appendTo(document.body),i.default(this._element).on("click.dismiss.bs.modal",(function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&e._triggerBackdropTransition()})),n&&l.reflow(this._backdrop),i.default(this._backdrop).addClass("show"),!t)return;if(!n)return void t();var o=l.getTransitionDurationFromElement(this._backdrop);i.default(this._backdrop).one(l.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){i.default(this._backdrop).removeClass("show");var r=function(){e._removeBackdrop(),t&&t()};if(i.default(this._element).hasClass("fade")){var a=l.getTransitionDurationFromElement(this._backdrop);i.default(this._backdrop).one(l.TRANSITION_END,r).emulateTransitionEnd(a)}else r()}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(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),n=[].slice.call(document.querySelectorAll(".sticky-top"));i.default(e).each((function(e,n){var o=n.style.paddingRight,r=i.default(n).css("padding-right");i.default(n).data("padding-right",o).css("padding-right",parseFloat(r)+t._scrollbarWidth+"px")})),i.default(n).each((function(e,n){var o=n.style.marginRight,r=i.default(n).css("margin-right");i.default(n).data("margin-right",o).css("margin-right",parseFloat(r)-t._scrollbarWidth+"px")}));var o=document.body.style.paddingRight,r=i.default(document.body).css("padding-right");i.default(document.body).data("padding-right",o).css("padding-right",parseFloat(r)+this._scrollbarWidth+"px")}i.default(document.body).addClass("modal-open")},e._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));i.default(t).each((function(t,e){var n=i.default(e).data("padding-right");i.default(e).removeData("padding-right"),e.style.paddingRight=n||""}));var e=[].slice.call(document.querySelectorAll(".sticky-top"));i.default(e).each((function(t,e){var n=i.default(e).data("margin-right");"undefined"!=typeof n&&i.default(e).css("margin-right",n).removeData("margin-right")}));var n=i.default(document.body).data("padding-right");i.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 o=i.default(this).data("bs.modal"),r=a({},Ht,i.default(this).data(),"object"==typeof e&&e?e:{});if(o||(o=new t(this,r),i.default(this).data("bs.modal",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e](n)}else r.show&&o.show(n)}))},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return Ht}}]),t}();i.default(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var e,n=this,o=l.getSelectorFromElement(this);o&&(e=document.querySelector(o));var r=i.default(e).data("bs.modal")?"toggle":a({},i.default(e).data(),i.default(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var s=i.default(e).one("show.bs.modal",(function(t){t.isDefaultPrevented()||s.one("hidden.bs.modal",(function(){i.default(n).is(":visible")&&n.focus()}))}));Bt._jQueryInterface.call(i.default(e),r,this)})),i.default.fn.modal=Bt._jQueryInterface,i.default.fn.modal.Constructor=Bt,i.default.fn.modal.noConflict=function(){return i.default.fn.modal=Rt,Bt._jQueryInterface};var qt=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Qt={"*":["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:[]},Wt=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,Ut=/^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 Vt(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),r=[].slice.call(i.body.querySelectorAll("*")),a=function(t,n){var i=r[t],a=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var s=[].slice.call(i.attributes),l=[].concat(e["*"]||[],e[a]||[]);s.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===qt.indexOf(n)||Boolean(t.nodeValue.match(Wt)||t.nodeValue.match(Ut));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1})(t,l)||i.removeAttribute(t.nodeName)}))},s=0,l=r.length;s<l;s++)a(s);return i.body.innerHTML}var Yt="tooltip",zt=i.default.fn[Yt],Xt=new RegExp("(^|\\s)bs-tooltip\\S+","g"),Kt=["sanitize","whiteList","sanitizeFn"],Gt={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)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},$t={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Jt={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Qt,popperConfig:null},Zt={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"},te=function(){function t(t,e){if("undefined"==typeof It)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=i.default(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(i.default(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),i.default.removeData(this.element,this.constructor.DATA_KEY),i.default(this.element).off(this.constructor.EVENT_KEY),i.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&i.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===i.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=i.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){i.default(this.element).trigger(e);var n=l.findShadowRoot(this.element),o=i.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!o)return;var r=this.getTipElement(),a=l.getUID(this.constructor.NAME);r.setAttribute("id",a),this.element.setAttribute("aria-describedby",a),this.setContent(),this.config.animation&&i.default(r).addClass("fade");var s="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,u=this._getAttachment(s);this.addAttachmentClass(u);var f=this._getContainer();i.default(r).data(this.constructor.DATA_KEY,this),i.default.contains(this.element.ownerDocument.documentElement,this.tip)||i.default(r).appendTo(f),i.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new It(this.element,r,this._getPopperConfig(u)),i.default(r).addClass("show"),"ontouchstart"in document.documentElement&&i.default(document.body).children().on("mouseover",null,i.default.noop);var d=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,i.default(t.element).trigger(t.constructor.Event.SHOWN),"out"===e&&t._leave(null,t)};if(i.default(this.tip).hasClass("fade")){var c=l.getTransitionDurationFromElement(this.tip);i.default(this.tip).one(l.TRANSITION_END,d).emulateTransitionEnd(c)}else d()}},e.hide=function(t){var e=this,n=this.getTipElement(),o=i.default.Event(this.constructor.Event.HIDE),r=function(){"show"!==e._hoverState&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),i.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(i.default(this.element).trigger(o),!o.isDefaultPrevented()){if(i.default(n).removeClass("show"),"ontouchstart"in document.documentElement&&i.default(document.body).children().off("mouseover",null,i.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,i.default(this.tip).hasClass("fade")){var a=l.getTransitionDurationFromElement(n);i.default(n).one(l.TRANSITION_END,r).emulateTransitionEnd(a)}else r();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(t){i.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(i.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),i.default(t).removeClass("fade show")},e.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Vt(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?i.default(e).parent().is(t)||t.empty().append(e):t.text(i.default(e).text())},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return a({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=a({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:l.isElement(this.config.container)?i.default(this.config.container):i.default(document).find(this.config.container)},e._getAttachment=function(t){return $t[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)i.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var n="hover"===e?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===e?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;i.default(t.element).on(n,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},i.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=a({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||i.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),i.default(e.getTipElement()).hasClass("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){"show"===e._hoverState&&e.show()}),e.config.delay.show):e.show())},e._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||i.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){"out"===e._hoverState&&e.hide()}),e.config.delay.hide):e.hide())},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=i.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==Kt.indexOf(t)&&delete e[t]})),"number"==typeof(t=a({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),l.typeCheckConfig(Yt,t,this.constructor.DefaultType),t.sanitize&&(t.template=Vt(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=i.default(this.getTipElement()),e=t.attr("class").match(Xt);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(i.default(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.tooltip"),r="object"==typeof e&&e;if((o||!/dispose|hide/.test(e))&&(o||(o=new t(this,r),n.data("bs.tooltip",o)),"string"==typeof e)){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return Jt}},{key:"NAME",get:function(){return Yt}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return Zt}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return Gt}}]),t}();i.default.fn[Yt]=te._jQueryInterface,i.default.fn[Yt].Constructor=te,i.default.fn[Yt].noConflict=function(){return i.default.fn[Yt]=zt,te._jQueryInterface};var ee="popover",ne=i.default.fn[ee],ie=new RegExp("(^|\\s)bs-popover\\S+","g"),oe=a({},te.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),re=a({},te.DefaultType,{content:"(string|element|function)"}),ae={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"},se=function(t){var e,n;function o(){return t.apply(this,arguments)||this}n=t,(e=o).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n;var a=o.prototype;return a.isWithContent=function(){return this.getTitle()||this._getContent()},a.addAttachmentClass=function(t){i.default(this.getTipElement()).addClass("bs-popover-"+t)},a.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},a.setContent=function(){var t=i.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},a._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},a._cleanTipClass=function(){var t=i.default(this.getTipElement()),e=t.attr("class").match(ie);null!==e&&e.length>0&&t.removeClass(e.join(""))},o._jQueryInterface=function(t){return this.each((function(){var e=i.default(this).data("bs.popover"),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new o(this,n),i.default(this).data("bs.popover",e)),"string"==typeof t)){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}}))},r(o,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return oe}},{key:"NAME",get:function(){return ee}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return ae}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return re}}]),o}(te);i.default.fn[ee]=se._jQueryInterface,i.default.fn[ee].Constructor=se,i.default.fn[ee].noConflict=function(){return i.default.fn[ee]=ne,se._jQueryInterface};var le="scrollspy",ue=i.default.fn[le],fe={offset:10,method:"auto",target:""},de={offset:"number",method:"string",target:"(string|element)"},ce=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,i.default(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return n._process(t)})),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?"offset":"position",n="auto"===this._config.method?e:this._config.method,o="position"===n?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var e,r=l.getSelectorFromElement(t);if(r&&(e=document.querySelector(r)),e){var a=e.getBoundingClientRect();if(a.width||a.height)return[i.default(e)[n]().top+o,r]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){i.default.removeData(this._element,"bs.scrollspy"),i.default(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=a({},fe,"object"==typeof t&&t?t:{})).target&&l.isElement(t.target)){var e=i.default(t.target).attr("id");e||(e=l.getUID(le),i.default(t.target).attr("id",e)),t.target="#"+e}return l.typeCheckConfig(le,t,de),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=i.default([].slice.call(document.querySelectorAll(e.join(","))));n.hasClass("dropdown-item")?(n.closest(".dropdown").find(".dropdown-toggle").addClass("active"),n.addClass("active")):(n.addClass("active"),n.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),n.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),i.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("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this).data("bs.scrollspy");if(n||(n=new t(this,"object"==typeof e&&e),i.default(this).data("bs.scrollspy",n)),"string"==typeof e){if("undefined"==typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return fe}}]),t}();i.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=i.default(t[e]);ce._jQueryInterface.call(n,n.data())}})),i.default.fn[le]=ce._jQueryInterface,i.default.fn[le].Constructor=ce,i.default.fn[le].noConflict=function(){return i.default.fn[le]=ue,ce._jQueryInterface};var he=i.default.fn.tab,pe=function(){function t(t){this._element=t}var e=t.prototype;return e.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&i.default(this._element).hasClass("active")||i.default(this._element).hasClass("disabled"))){var e,n,o=i.default(this._element).closest(".nav, .list-group")[0],r=l.getSelectorFromElement(this._element);if(o){var a="UL"===o.nodeName||"OL"===o.nodeName?"> li > .active":".active";n=(n=i.default.makeArray(i.default(o).find(a)))[n.length-1]}var s=i.default.Event("hide.bs.tab",{relatedTarget:this._element}),u=i.default.Event("show.bs.tab",{relatedTarget:n});if(n&&i.default(n).trigger(s),i.default(this._element).trigger(u),!u.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(e=document.querySelector(r)),this._activate(this._element,o);var f=function(){var e=i.default.Event("hidden.bs.tab",{relatedTarget:t._element}),o=i.default.Event("shown.bs.tab",{relatedTarget:n});i.default(n).trigger(e),i.default(t._element).trigger(o)};e?this._activate(e,e.parentNode,f):f()}}},e.dispose=function(){i.default.removeData(this._element,"bs.tab"),this._element=null},e._activate=function(t,e,n){var o=this,r=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?i.default(e).children(".active"):i.default(e).find("> li > .active"))[0],a=n&&r&&i.default(r).hasClass("fade"),s=function(){return o._transitionComplete(t,r,n)};if(r&&a){var u=l.getTransitionDurationFromElement(r);i.default(r).removeClass("show").one(l.TRANSITION_END,s).emulateTransitionEnd(u)}else s()},e._transitionComplete=function(t,e,n){if(e){i.default(e).removeClass("active");var o=i.default(e.parentNode).find("> .dropdown-menu .active")[0];o&&i.default(o).removeClass("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(i.default(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),l.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&i.default(t.parentNode).hasClass("dropdown-menu")){var r=i.default(t).closest(".dropdown")[0];if(r){var a=[].slice.call(r.querySelectorAll(".dropdown-toggle"));i.default(a).addClass("active")}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.tab");if(o||(o=new t(this),n.data("bs.tab",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();i.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),pe._jQueryInterface.call(i.default(this),"show")})),i.default.fn.tab=pe._jQueryInterface,i.default.fn.tab.Constructor=pe,i.default.fn.tab.noConflict=function(){return i.default.fn.tab=he,pe._jQueryInterface};var me=i.default.fn.toast,ge={animation:"boolean",autohide:"boolean",delay:"number"},ve={animation:!0,autohide:!0,delay:500},_e=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=i.default.Event("show.bs.toast");if(i.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var n=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),i.default(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),l.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,n).emulateTransitionEnd(o)}else n()}},e.hide=function(){if(this._element.classList.contains("show")){var t=i.default.Event("hide.bs.toast");i.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),i.default(this._element).off("click.dismiss.bs.toast"),i.default.removeData(this._element,"bs.toast"),this._element=null,this._config=null},e._getConfig=function(t){return t=a({},ve,i.default(this._element).data(),"object"==typeof t&&t?t:{}),l.typeCheckConfig("toast",t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;i.default(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add("hide"),i.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var n=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.toast");if(o||(o=new t(this,"object"==typeof e&&e),n.data("bs.toast",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e](this)}}))},r(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"DefaultType",get:function(){return ge}},{key:"Default",get:function(){return ve}}]),t}();i.default.fn.toast=_e._jQueryInterface,i.default.fn.toast.Constructor=_e,i.default.fn.toast.noConflict=function(){return i.default.fn.toast=me,_e._jQueryInterface},t.Alert=d,t.Button=h,t.Carousel=y,t.Collapse=S,t.Dropdown=Ft,t.Modal=Bt,t.Popover=se,t.Scrollspy=ce,t.Tab=pe,t.Toast=_e,t.Tooltip=te,t.Util=l,Object.defineProperty(t,"__esModule",{value:!0})})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap={},t.jQuery)}(this,(function(t,e){"use strict";function n(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var i=n(e);function o(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 r(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}function a(){return(a=Object.assign||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}).apply(this,arguments)}function s(t){var e=this,n=!1;return i.default(this).one(l.TRANSITION_END,(function(){n=!0})),setTimeout((function(){n||l.triggerTransitionEnd(e)}),t),this}var l={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=i.default(t).css("transition-duration"),n=i.default(t).css("transition-delay"),o=parseFloat(e),r=parseFloat(n);return o||r?(e=e.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(e)+parseFloat(n))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){i.default(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},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],r=e[i],a=r&&l.isElement(r)?"element":null===(s=r)||"undefined"==typeof s?""+s:{}.toString.call(s).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(a))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+a+'" but expected type "'+o+'".')}var s},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?l.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof i.default)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=i.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")}};l.jQueryDetection(),i.default.fn.emulateTransitionEnd=s,i.default.event.special[l.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(i.default(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var u="alert",f=i.default.fn[u],d=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(){i.default.removeData(this._element,"bs.alert"),this._element=null},e._getRootElement=function(t){var e=l.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=i.default(t).closest(".alert")[0]),n},e._triggerCloseEvent=function(t){var e=i.default.Event("close.bs.alert");return i.default(t).trigger(e),e},e._removeElement=function(t){var e=this;if(i.default(t).removeClass("show"),i.default(t).hasClass("fade")){var n=l.getTransitionDurationFromElement(t);i.default(t).one(l.TRANSITION_END,(function(n){return e._destroyElement(t,n)})).emulateTransitionEnd(n)}else this._destroyElement(t)},e._destroyElement=function(t){i.default(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.alert");o||(o=new t(this),n.data("bs.alert",o)),"close"===e&&o[e](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}}]),t}();i.default(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',d._handleDismiss(new d)),i.default.fn[u]=d._jQueryInterface,i.default.fn[u].Constructor=d,i.default.fn[u].noConflict=function(){return i.default.fn[u]=f,d._jQueryInterface};var c=i.default.fn.button,h=function(){function t(t){this._element=t,this.shouldAvoidTriggerChange=!1}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,n=i.default(this._element).closest('[data-toggle="buttons"]')[0];if(n){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var r=n.querySelector(".active");r&&i.default(r).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),this.shouldAvoidTriggerChange||i.default(o).trigger("change")),o.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&i.default(this._element).toggleClass("active"))},e.dispose=function(){i.default.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(e,n){return this.each((function(){var o=i.default(this),r=o.data("bs.button");r||(r=new t(this),o.data("bs.button",r)),r.shouldAvoidTriggerChange=n,"toggle"===e&&r[e]()}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}}]),t}();i.default(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=t.target,n=e;if(i.default(e).hasClass("btn")||(e=i.default(e).closest(".btn")[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var o=e.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();"INPUT"!==n.tagName&&"LABEL"===e.tagName||h._jQueryInterface.call(i.default(e),"toggle","INPUT"===n.tagName)}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=i.default(t.target).closest(".btn")[0];i.default(e).toggleClass("focus",/^focus(in)?$/.test(t.type))})),i.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('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}for(var r=0,a=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;r<a;r++){var s=t[r];"true"===s.getAttribute("aria-pressed")?s.classList.add("active"):s.classList.remove("active")}})),i.default.fn.button=h._jQueryInterface,i.default.fn.button.Constructor=h,i.default.fn.button.noConflict=function(){return i.default.fn.button=c,h._jQueryInterface};var p="carousel",m=".bs.carousel",g=i.default.fn[p],v={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},_={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},b={TOUCH:"touch",PEN:"pen"},y=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("next")},e.nextWhenVisible=function(){var t=i.default(this._element);!document.hidden&&t.is(":visible")&&"hidden"!==t.css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide("prev")},e.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(l.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(".active.carousel-item");var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)i.default(this._element).one("slid.bs.carousel",(function(){return e.to(t)}));else{if(n===t)return this.pause(),void this.cycle();var o=t>n?"next":"prev";this._slide(o,this._items[t])}},e.dispose=function(){i.default(this._element).off(m),i.default.removeData(this._element,"bs.carousel"),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=a({},v,t),l.typeCheckConfig(p,t,_),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&&i.default(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&i.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&&b[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},n=function(e){t._pointerEvent&&b[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))};i.default(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(i.default(this._element).on("pointerdown.bs.carousel",(function(t){return e(t)})),i.default(this._element).on("pointerup.bs.carousel",(function(t){return n(t)})),this._element.classList.add("pointer-event")):(i.default(this._element).on("touchstart.bs.carousel",(function(t){return e(t)})),i.default(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),i.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="next"===t,i="prev"===t,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var a=(o+("prev"===t?-1:1))%this._items.length;return-1===a?this._items[this._items.length-1]:this._items[a]},e._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),r=i.default.Event("slide.bs.carousel",{relatedTarget:t,direction:e,from:o,to:n});return i.default(this._element).trigger(r),r},e._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));i.default(e).removeClass("active");var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&i.default(n).addClass("active")}},e._updateInterval=function(){var t=this._activeElement||this._element.querySelector(".active.carousel-item");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,o,r,a=this,s=this._element.querySelector(".active.carousel-item"),u=this._getItemIndex(s),f=e||s&&this._getItemByDirection(t,s),d=this._getItemIndex(f),c=Boolean(this._interval);if("next"===t?(n="carousel-item-left",o="carousel-item-next",r="left"):(n="carousel-item-right",o="carousel-item-prev",r="right"),f&&i.default(f).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(f,r).isDefaultPrevented()&&s&&f){this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(f),this._activeElement=f;var h=i.default.Event("slid.bs.carousel",{relatedTarget:f,direction:r,from:u,to:d});if(i.default(this._element).hasClass("slide")){i.default(f).addClass(o),l.reflow(f),i.default(s).addClass(n),i.default(f).addClass(n);var p=l.getTransitionDurationFromElement(s);i.default(s).one(l.TRANSITION_END,(function(){i.default(f).removeClass(n+" "+o).addClass("active"),i.default(s).removeClass("active "+o+" "+n),a._isSliding=!1,setTimeout((function(){return i.default(a._element).trigger(h)}),0)})).emulateTransitionEnd(p)}else i.default(s).removeClass("active"),i.default(f).addClass("active"),this._isSliding=!1,i.default(this._element).trigger(h);c&&this.cycle()}},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this).data("bs.carousel"),o=a({},v,i.default(this).data());"object"==typeof e&&(o=a({},o,e));var r="string"==typeof e?e:o.slide;if(n||(n=new t(this,o),i.default(this).data("bs.carousel",n)),"number"==typeof e)n.to(e);else if("string"==typeof r){if("undefined"==typeof n[r])throw new TypeError('No method named "'+r+'"');n[r]()}else o.interval&&o.ride&&(n.pause(),n.cycle())}))},t._dataApiClickHandler=function(e){var n=l.getSelectorFromElement(this);if(n){var o=i.default(n)[0];if(o&&i.default(o).hasClass("carousel")){var r=a({},i.default(o).data(),i.default(this).data()),s=this.getAttribute("data-slide-to");s&&(r.interval=!1),t._jQueryInterface.call(i.default(o),r),s&&i.default(o).data("bs.carousel").to(s),e.preventDefault()}}},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return v}}]),t}();i.default(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",y._dataApiClickHandler),i.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 o=i.default(t[e]);y._jQueryInterface.call(o,o.data())}})),i.default.fn[p]=y._jQueryInterface,i.default.fn[p].Constructor=y,i.default.fn[p].noConflict=function(){return i.default.fn[p]=g,y._jQueryInterface};var w="collapse",E=i.default.fn[w],T={toggle:!0,parent:""},C={toggle:"boolean",parent:"(string|element)"},S=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('[data-toggle="collapse"]')),i=0,o=n.length;i<o;i++){var r=n[i],a=l.getSelectorFromElement(r),s=[].slice.call(document.querySelectorAll(a)).filter((function(e){return e===t}));null!==a&&s.length>0&&(this._selector=a,this._triggerArray.push(r))}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(){i.default(this._element).hasClass("show")?this.hide():this.show()},e.show=function(){var e,n,o=this;if(!this._isTransitioning&&!i.default(this._element).hasClass("show")&&(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(e=null),!(e&&(n=i.default(e).not(this._selector).data("bs.collapse"))&&n._isTransitioning))){var r=i.default.Event("show.bs.collapse");if(i.default(this._element).trigger(r),!r.isDefaultPrevented()){e&&(t._jQueryInterface.call(i.default(e).not(this._selector),"hide"),n||i.default(e).data("bs.collapse",null));var a=this._getDimension();i.default(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[a]=0,this._triggerArray.length&&i.default(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var s="scroll"+(a[0].toUpperCase()+a.slice(1)),u=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,(function(){i.default(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[a]="",o.setTransitioning(!1),i.default(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(u),this._element.style[a]=this._element[s]+"px"}}},e.hide=function(){var t=this;if(!this._isTransitioning&&i.default(this._element).hasClass("show")){var e=i.default.Event("hide.bs.collapse");if(i.default(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",l.reflow(this._element),i.default(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var r=0;r<o;r++){var a=this._triggerArray[r],s=l.getSelectorFromElement(a);if(null!==s)i.default([].slice.call(document.querySelectorAll(s))).hasClass("show")||i.default(a).addClass("collapsed").attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var u=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,(function(){t.setTransitioning(!1),i.default(t._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(u)}}},e.setTransitioning=function(t){this._isTransitioning=t},e.dispose=function(){i.default.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},e._getConfig=function(t){return(t=a({},T,t)).toggle=Boolean(t.toggle),l.typeCheckConfig(w,t,C),t},e._getDimension=function(){return i.default(this._element).hasClass("width")?"width":"height"},e._getParent=function(){var e,n=this;l.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 o='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',r=[].slice.call(e.querySelectorAll(o));return i.default(r).each((function(e,i){n._addAriaAndCollapsedClass(t._getTargetFromElement(i),[i])})),e},e._addAriaAndCollapsedClass=function(t,e){var n=i.default(t).hasClass("show");e.length&&i.default(e).toggleClass("collapsed",!n).attr("aria-expanded",n)},t._getTargetFromElement=function(t){var e=l.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.collapse"),r=a({},T,n.data(),"object"==typeof e&&e?e:{});if(!o&&r.toggle&&"string"==typeof e&&/show|hide/.test(e)&&(r.toggle=!1),o||(o=new t(this,r),n.data("bs.collapse",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return T}}]),t}();i.default(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var e=i.default(this),n=l.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(n));i.default(o).each((function(){var t=i.default(this),n=t.data("bs.collapse")?"toggle":e.data();S._jQueryInterface.call(t,n)}))})),i.default.fn[w]=S._jQueryInterface,i.default.fn[w].Constructor=S,i.default.fn[w].noConflict=function(){return i.default.fn[w]=E,S._jQueryInterface};var D="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,N=function(){for(var t=["Edge","Trident","Firefox"],e=0;e<t.length;e+=1)if(D&&navigator.userAgent.indexOf(t[e])>=0)return 1;return 0}();var k=D&&window.Promise?function(t){var e=!1;return function(){e||(e=!0,window.Promise.resolve().then((function(){e=!1,t()})))}}:function(t){var e=!1;return function(){e||(e=!0,setTimeout((function(){e=!1,t()}),N))}};function A(t){return t&&"[object Function]"==={}.toString.call(t)}function I(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function O(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function x(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=I(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?t:x(O(t))}function j(t){return t&&t.referenceNode?t.referenceNode:t}var L=D&&!(!window.MSInputMethodContext||!document.documentMode),P=D&&/MSIE 10/.test(navigator.userAgent);function F(t){return 11===t?L:10===t?P:L||P}function R(t){if(!t)return document.documentElement;for(var e=F(10)?document.body:null,n=t.offsetParent||null;n===e&&t.nextElementSibling;)n=(t=t.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===I(n,"position")?R(n):n:t?t.ownerDocument.documentElement:document.documentElement}function H(t){return null!==t.parentNode?H(t.parentNode):t}function M(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;var n=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?t:e,o=n?e:t,r=document.createRange();r.setStart(i,0),r.setEnd(o,0);var a,s,l=r.commonAncestorContainer;if(t!==l&&e!==l||i.contains(o))return"BODY"===(s=(a=l).nodeName)||"HTML"!==s&&R(a.firstElementChild)!==a?R(l):l;var u=H(t);return u.host?M(u.host,e):M(t,H(e).host)}function q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===e?"scrollTop":"scrollLeft",i=t.nodeName;if("BODY"===i||"HTML"===i){var o=t.ownerDocument.documentElement,r=t.ownerDocument.scrollingElement||o;return r[n]}return t[n]}function B(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=q(e,"top"),o=q(e,"left"),r=n?-1:1;return t.top+=i*r,t.bottom+=i*r,t.left+=o*r,t.right+=o*r,t}function Q(t,e){var n="x"===e?"Left":"Top",i="Left"===n?"Right":"Bottom";return parseFloat(t["border"+n+"Width"])+parseFloat(t["border"+i+"Width"])}function W(t,e,n,i){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],F(10)?parseInt(n["offset"+t])+parseInt(i["margin"+("Height"===t?"Top":"Left")])+parseInt(i["margin"+("Height"===t?"Bottom":"Right")]):0)}function U(t){var e=t.body,n=t.documentElement,i=F(10)&&getComputedStyle(n);return{height:W("Height",e,n,i),width:W("Width",e,n,i)}}var V=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},Y=function(){function t(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)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),z=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},X=Object.assign||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};function K(t){return X({},t,{right:t.left+t.width,bottom:t.top+t.height})}function G(t){var e={};try{if(F(10)){e=t.getBoundingClientRect();var n=q(t,"top"),i=q(t,"left");e.top+=n,e.left+=i,e.bottom+=n,e.right+=i}else e=t.getBoundingClientRect()}catch(t){}var o={left:e.left,top:e.top,width:e.right-e.left,height:e.bottom-e.top},r="HTML"===t.nodeName?U(t.ownerDocument):{},a=r.width||t.clientWidth||o.width,s=r.height||t.clientHeight||o.height,l=t.offsetWidth-a,u=t.offsetHeight-s;if(l||u){var f=I(t);l-=Q(f,"x"),u-=Q(f,"y"),o.width-=l,o.height-=u}return K(o)}function $(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=F(10),o="HTML"===e.nodeName,r=G(t),a=G(e),s=x(t),l=I(e),u=parseFloat(l.borderTopWidth),f=parseFloat(l.borderLeftWidth);n&&o&&(a.top=Math.max(a.top,0),a.left=Math.max(a.left,0));var d=K({top:r.top-a.top-u,left:r.left-a.left-f,width:r.width,height:r.height});if(d.marginTop=0,d.marginLeft=0,!i&&o){var c=parseFloat(l.marginTop),h=parseFloat(l.marginLeft);d.top-=u-c,d.bottom-=u-c,d.left-=f-h,d.right-=f-h,d.marginTop=c,d.marginLeft=h}return(i&&!n?e.contains(s):e===s&&"BODY"!==s.nodeName)&&(d=B(d,e)),d}function J(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.ownerDocument.documentElement,i=$(t,n),o=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),a=e?0:q(n),s=e?0:q(n,"left"),l={top:a-i.top+i.marginTop,left:s-i.left+i.marginLeft,width:o,height:r};return K(l)}function Z(t){var e=t.nodeName;if("BODY"===e||"HTML"===e)return!1;if("fixed"===I(t,"position"))return!0;var n=O(t);return!!n&&Z(n)}function tt(t){if(!t||!t.parentElement||F())return document.documentElement;for(var e=t.parentElement;e&&"none"===I(e,"transform");)e=e.parentElement;return e||document.documentElement}function et(t,e,n,i){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},a=o?tt(t):M(t,j(e));if("viewport"===i)r=J(a,o);else{var s=void 0;"scrollParent"===i?"BODY"===(s=x(O(e))).nodeName&&(s=t.ownerDocument.documentElement):s="window"===i?t.ownerDocument.documentElement:i;var l=$(s,a,o);if("HTML"!==s.nodeName||Z(a))r=l;else{var u=U(t.ownerDocument),f=u.height,d=u.width;r.top+=l.top-l.marginTop,r.bottom=f+l.top,r.left+=l.left-l.marginLeft,r.right=d+l.left}}var c="number"==typeof(n=n||0);return r.left+=c?n:n.left||0,r.top+=c?n:n.top||0,r.right-=c?n:n.right||0,r.bottom-=c?n:n.bottom||0,r}function nt(t){return t.width*t.height}function it(t,e,n,i,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var a=et(n,i,r,o),s={top:{width:a.width,height:e.top-a.top},right:{width:a.right-e.right,height:a.height},bottom:{width:a.width,height:a.bottom-e.bottom},left:{width:e.left-a.left,height:a.height}},l=Object.keys(s).map((function(t){return X({key:t},s[t],{area:nt(s[t])})})).sort((function(t,e){return e.area-t.area})),u=l.filter((function(t){var e=t.width,i=t.height;return e>=n.clientWidth&&i>=n.clientHeight})),f=u.length>0?u[0].key:l[0].key,d=t.split("-")[1];return f+(d?"-"+d:"")}function ot(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,o=i?tt(e):M(e,j(n));return $(n,o,i)}function rt(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),n=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),i=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:t.offsetWidth+i,height:t.offsetHeight+n}}function at(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,(function(t){return e[t]}))}function st(t,e,n){n=n.split("-")[0];var i=rt(t),o={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),a=r?"top":"left",s=r?"left":"top",l=r?"height":"width",u=r?"width":"height";return o[a]=e[a]+e[l]/2-i[l]/2,o[s]=n===s?e[s]-i[u]:e[at(s)],o}function lt(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function ut(t,e,n){return(void 0===n?t:t.slice(0,function(t,e,n){if(Array.prototype.findIndex)return t.findIndex((function(t){return t[e]===n}));var i=lt(t,(function(t){return t[e]===n}));return t.indexOf(i)}(t,"name",n))).forEach((function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=t.function||t.fn;t.enabled&&A(n)&&(e.offsets.popper=K(e.offsets.popper),e.offsets.reference=K(e.offsets.reference),e=n(e,t))})),e}function ft(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=ot(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=it(this.options.placement,t.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),t.originalPlacement=t.placement,t.positionFixed=this.options.positionFixed,t.offsets.popper=st(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=ut(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}function dt(t,e){return t.some((function(t){var n=t.name;return t.enabled&&n===e}))}function ct(t){for(var e=[!1,"ms","Webkit","Moz","O"],n=t.charAt(0).toUpperCase()+t.slice(1),i=0;i<e.length;i++){var o=e[i],r=o?""+o+n:t;if("undefined"!=typeof document.body.style[r])return r}return null}function ht(){return this.state.isDestroyed=!0,dt(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[ct("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function pt(t){var e=t.ownerDocument;return e?e.defaultView:window}function mt(t,e,n,i){n.updateBound=i,pt(t).addEventListener("resize",n.updateBound,{passive:!0});var o=x(t);return function t(e,n,i,o){var r="BODY"===e.nodeName,a=r?e.ownerDocument.defaultView:e;a.addEventListener(n,i,{passive:!0}),r||t(x(a.parentNode),n,i,o),o.push(a)}(o,"scroll",n.updateBound,n.scrollParents),n.scrollElement=o,n.eventsEnabled=!0,n}function gt(){this.state.eventsEnabled||(this.state=mt(this.reference,this.options,this.state,this.scheduleUpdate))}function vt(){var t,e;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(t=this.reference,e=this.state,pt(t).removeEventListener("resize",e.updateBound),e.scrollParents.forEach((function(t){t.removeEventListener("scroll",e.updateBound)})),e.updateBound=null,e.scrollParents=[],e.scrollElement=null,e.eventsEnabled=!1,e))}function _t(t){return""!==t&&!isNaN(parseFloat(t))&&isFinite(t)}function bt(t,e){Object.keys(e).forEach((function(n){var i="";-1!==["width","height","top","right","bottom","left"].indexOf(n)&&_t(e[n])&&(i="px"),t.style[n]=e[n]+i}))}var yt=D&&/Firefox/i.test(navigator.userAgent);function wt(t,e,n){var i=lt(t,(function(t){return t.name===e})),o=!!i&&t.some((function(t){return t.name===n&&t.enabled&&t.order<i.order}));if(!o){var r="`"+e+"`",a="`"+n+"`";console.warn(a+" modifier is required by "+r+" modifier in order to work, be sure to include it before "+r+"!")}return o}var Et=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],Tt=Et.slice(3);function Ct(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Tt.indexOf(t),i=Tt.slice(n+1).concat(Tt.slice(0,n));return e?i.reverse():i}var St="flip",Dt="clockwise",Nt="counterclockwise";function kt(t,e,n,i){var o=[0,0],r=-1!==["right","left"].indexOf(i),a=t.split(/(\+|\-)/).map((function(t){return t.trim()})),s=a.indexOf(lt(a,(function(t){return-1!==t.search(/,|\s/)})));a[s]&&-1===a[s].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,u=-1!==s?[a.slice(0,s).concat([a[s].split(l)[0]]),[a[s].split(l)[1]].concat(a.slice(s+1))]:[a];return(u=u.map((function(t,i){var o=(1===i?!r:r)?"height":"width",a=!1;return t.reduce((function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,a=!0,t):a?(t[t.length-1]+=e,a=!1,t):t.concat(e)}),[]).map((function(t){return function(t,e,n,i){var o=t.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],a=o[2];if(!r)return t;if(0===a.indexOf("%")){var s=void 0;switch(a){case"%p":s=n;break;case"%":case"%r":default:s=i}return K(s)[e]/100*r}if("vh"===a||"vw"===a)return("vh"===a?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r;return r}(t,o,e,n)}))}))).forEach((function(t,e){t.forEach((function(n,i){_t(n)&&(o[e]+=n*("-"===t[i-1]?-1:1))}))})),o}var At={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(t){var e=t.placement,n=e.split("-")[0],i=e.split("-")[1];if(i){var o=t.offsets,r=o.reference,a=o.popper,s=-1!==["bottom","top"].indexOf(n),l=s?"left":"top",u=s?"width":"height",f={start:z({},l,r[l]),end:z({},l,r[l]+r[u]-a[u])};t.offsets.popper=X({},a,f[i])}return t}},offset:{order:200,enabled:!0,fn:function(t,e){var n=e.offset,i=t.placement,o=t.offsets,r=o.popper,a=o.reference,s=i.split("-")[0],l=void 0;return l=_t(+n)?[+n,0]:kt(n,r,a,s),"left"===s?(r.top+=l[0],r.left-=l[1]):"right"===s?(r.top+=l[0],r.left+=l[1]):"top"===s?(r.left+=l[0],r.top-=l[1]):"bottom"===s&&(r.left+=l[0],r.top+=l[1]),t.popper=r,t},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(t,e){var n=e.boundariesElement||R(t.instance.popper);t.instance.reference===n&&(n=R(n));var i=ct("transform"),o=t.instance.popper.style,r=o.top,a=o.left,s=o[i];o.top="",o.left="",o[i]="";var l=et(t.instance.popper,t.instance.reference,e.padding,n,t.positionFixed);o.top=r,o.left=a,o[i]=s,e.boundaries=l;var u=e.priority,f=t.offsets.popper,d={primary:function(t){var n=f[t];return f[t]<l[t]&&!e.escapeWithReference&&(n=Math.max(f[t],l[t])),z({},t,n)},secondary:function(t){var n="right"===t?"left":"top",i=f[n];return f[t]>l[t]&&!e.escapeWithReference&&(i=Math.min(f[n],l[t]-("right"===t?f.width:f.height))),z({},n,i)}};return u.forEach((function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";f=X({},f,d[e](t))})),t.offsets.popper=f,t},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(t){var e=t.offsets,n=e.popper,i=e.reference,o=t.placement.split("-")[0],r=Math.floor,a=-1!==["top","bottom"].indexOf(o),s=a?"right":"bottom",l=a?"left":"top",u=a?"width":"height";return n[s]<r(i[l])&&(t.offsets.popper[l]=r(i[l])-n[u]),n[l]>r(i[s])&&(t.offsets.popper[l]=r(i[s])),t}},arrow:{order:500,enabled:!0,fn:function(t,e){var n;if(!wt(t.instance.modifiers,"arrow","keepTogether"))return t;var i=e.element;if("string"==typeof i){if(!(i=t.instance.popper.querySelector(i)))return t}else if(!t.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),t;var o=t.placement.split("-")[0],r=t.offsets,a=r.popper,s=r.reference,l=-1!==["left","right"].indexOf(o),u=l?"height":"width",f=l?"Top":"Left",d=f.toLowerCase(),c=l?"left":"top",h=l?"bottom":"right",p=rt(i)[u];s[h]-p<a[d]&&(t.offsets.popper[d]-=a[d]-(s[h]-p)),s[d]+p>a[h]&&(t.offsets.popper[d]+=s[d]+p-a[h]),t.offsets.popper=K(t.offsets.popper);var m=s[d]+s[u]/2-p/2,g=I(t.instance.popper),v=parseFloat(g["margin"+f]),_=parseFloat(g["border"+f+"Width"]),b=m-t.offsets.popper[d]-v-_;return b=Math.max(Math.min(a[u]-p,b),0),t.arrowElement=i,t.offsets.arrow=(z(n={},d,Math.round(b)),z(n,c,""),n),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(t,e){if(dt(t.instance.modifiers,"inner"))return t;if(t.flipped&&t.placement===t.originalPlacement)return t;var n=et(t.instance.popper,t.instance.reference,e.padding,e.boundariesElement,t.positionFixed),i=t.placement.split("-")[0],o=at(i),r=t.placement.split("-")[1]||"",a=[];switch(e.behavior){case St:a=[i,o];break;case Dt:a=Ct(i);break;case Nt:a=Ct(i,!0);break;default:a=e.behavior}return a.forEach((function(s,l){if(i!==s||a.length===l+1)return t;i=t.placement.split("-")[0],o=at(i);var u=t.offsets.popper,f=t.offsets.reference,d=Math.floor,c="left"===i&&d(u.right)>d(f.left)||"right"===i&&d(u.left)<d(f.right)||"top"===i&&d(u.bottom)>d(f.top)||"bottom"===i&&d(u.top)<d(f.bottom),h=d(u.left)<d(n.left),p=d(u.right)>d(n.right),m=d(u.top)<d(n.top),g=d(u.bottom)>d(n.bottom),v="left"===i&&h||"right"===i&&p||"top"===i&&m||"bottom"===i&&g,_=-1!==["top","bottom"].indexOf(i),b=!!e.flipVariations&&(_&&"start"===r&&h||_&&"end"===r&&p||!_&&"start"===r&&m||!_&&"end"===r&&g),y=!!e.flipVariationsByContent&&(_&&"start"===r&&p||_&&"end"===r&&h||!_&&"start"===r&&g||!_&&"end"===r&&m),w=b||y;(c||v||w)&&(t.flipped=!0,(c||v)&&(i=a[l+1]),w&&(r=function(t){return"end"===t?"start":"start"===t?"end":t}(r)),t.placement=i+(r?"-"+r:""),t.offsets.popper=X({},t.offsets.popper,st(t.instance.popper,t.offsets.reference,t.placement)),t=ut(t.instance.modifiers,t,"flip"))})),t},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(t){var e=t.placement,n=e.split("-")[0],i=t.offsets,o=i.popper,r=i.reference,a=-1!==["left","right"].indexOf(n),s=-1===["top","left"].indexOf(n);return o[a?"left":"top"]=r[n]-(s?o[a?"width":"height"]:0),t.placement=at(e),t.offsets.popper=K(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!wt(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,n=lt(t.instance.modifiers,(function(t){return"preventOverflow"===t.name})).boundaries;if(e.bottom<n.top||e.left>n.right||e.top>n.bottom||e.right<n.left){if(!0===t.hide)return t;t.hide=!0,t.attributes["x-out-of-boundaries"]=""}else{if(!1===t.hide)return t;t.hide=!1,t.attributes["x-out-of-boundaries"]=!1}return t}},computeStyle:{order:850,enabled:!0,fn:function(t,e){var n=e.x,i=e.y,o=t.offsets.popper,r=lt(t.instance.modifiers,(function(t){return"applyStyle"===t.name})).gpuAcceleration;void 0!==r&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var a=void 0!==r?r:e.gpuAcceleration,s=R(t.instance.popper),l=G(s),u={position:o.position},f=function(t,e){var n=t.offsets,i=n.popper,o=n.reference,r=Math.round,a=Math.floor,s=function(t){return t},l=r(o.width),u=r(i.width),f=-1!==["left","right"].indexOf(t.placement),d=-1!==t.placement.indexOf("-"),c=e?f||d||l%2==u%2?r:a:s,h=e?r:s;return{left:c(l%2==1&&u%2==1&&!d&&e?i.left-1:i.left),top:h(i.top),bottom:h(i.bottom),right:c(i.right)}}(t,window.devicePixelRatio<2||!yt),d="bottom"===n?"top":"bottom",c="right"===i?"left":"right",h=ct("transform"),p=void 0,m=void 0;if(m="bottom"===d?"HTML"===s.nodeName?-s.clientHeight+f.bottom:-l.height+f.bottom:f.top,p="right"===c?"HTML"===s.nodeName?-s.clientWidth+f.right:-l.width+f.right:f.left,a&&h)u[h]="translate3d("+p+"px, "+m+"px, 0)",u[d]=0,u[c]=0,u.willChange="transform";else{var g="bottom"===d?-1:1,v="right"===c?-1:1;u[d]=m*g,u[c]=p*v,u.willChange=d+", "+c}var _={"x-placement":t.placement};return t.attributes=X({},_,t.attributes),t.styles=X({},u,t.styles),t.arrowStyles=X({},t.offsets.arrow,t.arrowStyles),t},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(t){var e,n;return bt(t.instance.popper,t.styles),e=t.instance.popper,n=t.attributes,Object.keys(n).forEach((function(t){!1!==n[t]?e.setAttribute(t,n[t]):e.removeAttribute(t)})),t.arrowElement&&Object.keys(t.arrowStyles).length&&bt(t.arrowElement,t.arrowStyles),t},onLoad:function(t,e,n,i,o){var r=ot(o,e,t,n.positionFixed),a=it(n.placement,r,e,t,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return e.setAttribute("x-placement",a),bt(e,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},It=function(){function t(e,n){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};V(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(i.update)},this.update=k(this.update.bind(this)),this.options=X({},t.Defaults,o),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(X({},t.Defaults.modifiers,o.modifiers)).forEach((function(e){i.options.modifiers[e]=X({},t.Defaults.modifiers[e]||{},o.modifiers?o.modifiers[e]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(t){return X({name:t},i.options.modifiers[t])})).sort((function(t,e){return t.order-e.order})),this.modifiers.forEach((function(t){t.enabled&&A(t.onLoad)&&t.onLoad(i.reference,i.popper,i.options,t,i.state)})),this.update();var r=this.options.eventsEnabled;r&&this.enableEventListeners(),this.state.eventsEnabled=r}return Y(t,[{key:"update",value:function(){return ft.call(this)}},{key:"destroy",value:function(){return ht.call(this)}},{key:"enableEventListeners",value:function(){return gt.call(this)}},{key:"disableEventListeners",value:function(){return vt.call(this)}}]),t}();It.Utils=("undefined"!=typeof window?window:global).PopperUtils,It.placements=Et,It.Defaults=At;var Ot="dropdown",xt=i.default.fn[Ot],jt=new RegExp("38|40|27"),Lt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},Pt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},Ft=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&&!i.default(this._element).hasClass("disabled")){var e=i.default(this._menu).hasClass("show");t._clearMenus(),e||this.show(!0)}},e.show=function(e){if(void 0===e&&(e=!1),!(this._element.disabled||i.default(this._element).hasClass("disabled")||i.default(this._menu).hasClass("show"))){var n={relatedTarget:this._element},o=i.default.Event("show.bs.dropdown",n),r=t._getParentFromElement(this._element);if(i.default(r).trigger(o),!o.isDefaultPrevented()){if(!this._inNavbar&&e){if("undefined"==typeof It)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");var a=this._element;"parent"===this._config.reference?a=r:l.isElement(this._config.reference)&&(a=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(a=this._config.reference[0])),"scrollParent"!==this._config.boundary&&i.default(r).addClass("position-static"),this._popper=new It(a,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===i.default(r).closest(".navbar-nav").length&&i.default(document.body).children().on("mouseover",null,i.default.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),i.default(this._menu).toggleClass("show"),i.default(r).toggleClass("show").trigger(i.default.Event("shown.bs.dropdown",n))}}},e.hide=function(){if(!this._element.disabled&&!i.default(this._element).hasClass("disabled")&&i.default(this._menu).hasClass("show")){var e={relatedTarget:this._element},n=i.default.Event("hide.bs.dropdown",e),o=t._getParentFromElement(this._element);i.default(o).trigger(n),n.isDefaultPrevented()||(this._popper&&this._popper.destroy(),i.default(this._menu).toggleClass("show"),i.default(o).toggleClass("show").trigger(i.default.Event("hidden.bs.dropdown",e)))}},e.dispose=function(){i.default.removeData(this._element,"bs.dropdown"),i.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;i.default(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},e._getConfig=function(t){return t=a({},this.constructor.Default,i.default(this._element).data(),t),l.typeCheckConfig(Ot,t,this.constructor.DefaultType),t},e._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}return this._menu},e._getPlacement=function(){var t=i.default(this._element.parentNode),e="bottom-start";return t.hasClass("dropup")?e=i.default(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?e="right-start":t.hasClass("dropleft")?e="left-start":i.default(this._menu).hasClass("dropdown-menu-right")&&(e="bottom-end"),e},e._detectNavbar=function(){return i.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=a({},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}),a({},t,this._config.popperConfig)},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this).data("bs.dropdown");if(n||(n=new t(this,"object"==typeof e?e:null),i.default(this).data("bs.dropdown",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('[data-toggle="dropdown"]')),o=0,r=n.length;o<r;o++){var a=t._getParentFromElement(n[o]),s=i.default(n[o]).data("bs.dropdown"),l={relatedTarget:n[o]};if(e&&"click"===e.type&&(l.clickEvent=e),s){var u=s._menu;if(i.default(a).hasClass("show")&&!(e&&("click"===e.type&&/input|textarea/i.test(e.target.tagName)||"keyup"===e.type&&9===e.which)&&i.default.contains(a,e.target))){var f=i.default.Event("hide.bs.dropdown",l);i.default(a).trigger(f),f.isDefaultPrevented()||("ontouchstart"in document.documentElement&&i.default(document.body).children().off("mouseover",null,i.default.noop),n[o].setAttribute("aria-expanded","false"),s._popper&&s._popper.destroy(),i.default(u).removeClass("show"),i.default(a).removeClass("show").trigger(i.default.Event("hidden.bs.dropdown",l)))}}}},t._getParentFromElement=function(t){var e,n=l.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||i.default(e.target).closest(".dropdown-menu").length):!jt.test(e.which))&&!this.disabled&&!i.default(this).hasClass("disabled")){var n=t._getParentFromElement(this),o=i.default(n).hasClass("show");if(o||27!==e.which){if(e.preventDefault(),e.stopPropagation(),!o||27===e.which||32===e.which)return 27===e.which&&i.default(n.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void i.default(this).trigger("click");var r=[].slice.call(n.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return i.default(t).is(":visible")}));if(0!==r.length){var a=r.indexOf(e.target);38===e.which&&a>0&&a--,40===e.which&&a<r.length-1&&a++,a<0&&(a=0),r[a].focus()}}}},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return Lt}},{key:"DefaultType",get:function(){return Pt}}]),t}();i.default(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',Ft._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",Ft._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",Ft._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),Ft._jQueryInterface.call(i.default(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),i.default.fn[Ot]=Ft._jQueryInterface,i.default.fn[Ot].Constructor=Ft,i.default.fn[Ot].noConflict=function(){return i.default.fn[Ot]=xt,Ft._jQueryInterface};var Rt=i.default.fn.modal,Ht={backdrop:!0,keyboard:!0,focus:!0,show:!0},Mt={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},qt=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){i.default(this._element).hasClass("fade")&&(this._isTransitioning=!0);var n=i.default.Event("show.bs.modal",{relatedTarget:t});i.default(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),i.default(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return e.hide(t)})),i.default(this._dialog).on("mousedown.dismiss.bs.modal",(function(){i.default(e._element).one("mouseup.dismiss.bs.modal",(function(t){i.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=i.default.Event("hide.bs.modal");if(i.default(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var o=i.default(this._element).hasClass("fade");if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),i.default(document).off("focusin.bs.modal"),i.default(this._element).removeClass("show"),i.default(this._element).off("click.dismiss.bs.modal"),i.default(this._dialog).off("mousedown.dismiss.bs.modal"),o){var r=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,(function(t){return e._hideModal(t)})).emulateTransitionEnd(r)}else this._hideModal()}}},e.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return i.default(t).off(".bs.modal")})),i.default(document).off("focusin.bs.modal"),i.default.removeData(this._element,"bs.modal"),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=a({},Ht,t),l.typeCheckConfig("modal",t,Mt),t},e._triggerBackdropTransition=function(){var t=this,e=i.default.Event("hidePrevented.bs.modal");if(i.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("modal-static");var o=l.getTransitionDurationFromElement(this._dialog);i.default(this._element).off(l.TRANSITION_END),i.default(this._element).one(l.TRANSITION_END,(function(){t._element.classList.remove("modal-static"),n||i.default(t._element).one(l.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,o)})).emulateTransitionEnd(o),this._element.focus()}},e._showElement=function(t){var e=this,n=i.default(this._element).hasClass("fade"),o=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"),i.default(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,n&&l.reflow(this._element),i.default(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var r=i.default.Event("shown.bs.modal",{relatedTarget:t}),a=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,i.default(e._element).trigger(r)};if(n){var s=l.getTransitionDurationFromElement(this._dialog);i.default(this._dialog).one(l.TRANSITION_END,a).emulateTransitionEnd(s)}else a()},e._enforceFocus=function(){var t=this;i.default(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(e){document!==e.target&&t._element!==e.target&&0===i.default(t._element).has(e.target).length&&t._element.focus()}))},e._setEscapeEvent=function(){var t=this;this._isShown?i.default(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||i.default(this._element).off("keydown.dismiss.bs.modal")},e._setResizeEvent=function(){var t=this;this._isShown?i.default(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):i.default(window).off("resize.bs.modal")},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(){i.default(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),i.default(t._element).trigger("hidden.bs.modal")}))},e._removeBackdrop=function(){this._backdrop&&(i.default(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(t){var e=this,n=i.default(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",n&&this._backdrop.classList.add(n),i.default(this._backdrop).appendTo(document.body),i.default(this._element).on("click.dismiss.bs.modal",(function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._triggerBackdropTransition():e.hide())})),n&&l.reflow(this._backdrop),i.default(this._backdrop).addClass("show"),!t)return;if(!n)return void t();var o=l.getTransitionDurationFromElement(this._backdrop);i.default(this._backdrop).one(l.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){i.default(this._backdrop).removeClass("show");var r=function(){e._removeBackdrop(),t&&t()};if(i.default(this._element).hasClass("fade")){var a=l.getTransitionDurationFromElement(this._backdrop);i.default(this._backdrop).one(l.TRANSITION_END,r).emulateTransitionEnd(a)}else r()}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(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),n=[].slice.call(document.querySelectorAll(".sticky-top"));i.default(e).each((function(e,n){var o=n.style.paddingRight,r=i.default(n).css("padding-right");i.default(n).data("padding-right",o).css("padding-right",parseFloat(r)+t._scrollbarWidth+"px")})),i.default(n).each((function(e,n){var o=n.style.marginRight,r=i.default(n).css("margin-right");i.default(n).data("margin-right",o).css("margin-right",parseFloat(r)-t._scrollbarWidth+"px")}));var o=document.body.style.paddingRight,r=i.default(document.body).css("padding-right");i.default(document.body).data("padding-right",o).css("padding-right",parseFloat(r)+this._scrollbarWidth+"px")}i.default(document.body).addClass("modal-open")},e._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));i.default(t).each((function(t,e){var n=i.default(e).data("padding-right");i.default(e).removeData("padding-right"),e.style.paddingRight=n||""}));var e=[].slice.call(document.querySelectorAll(".sticky-top"));i.default(e).each((function(t,e){var n=i.default(e).data("margin-right");"undefined"!=typeof n&&i.default(e).css("margin-right",n).removeData("margin-right")}));var n=i.default(document.body).data("padding-right");i.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 o=i.default(this).data("bs.modal"),r=a({},Ht,i.default(this).data(),"object"==typeof e&&e?e:{});if(o||(o=new t(this,r),i.default(this).data("bs.modal",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e](n)}else r.show&&o.show(n)}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return Ht}}]),t}();i.default(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var e,n=this,o=l.getSelectorFromElement(this);o&&(e=document.querySelector(o));var r=i.default(e).data("bs.modal")?"toggle":a({},i.default(e).data(),i.default(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var s=i.default(e).one("show.bs.modal",(function(t){t.isDefaultPrevented()||s.one("hidden.bs.modal",(function(){i.default(n).is(":visible")&&n.focus()}))}));qt._jQueryInterface.call(i.default(e),r,this)})),i.default.fn.modal=qt._jQueryInterface,i.default.fn.modal.Constructor=qt,i.default.fn.modal.noConflict=function(){return i.default.fn.modal=Rt,qt._jQueryInterface};var Bt=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Qt={"*":["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:[]},Wt=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,Ut=/^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 Vt(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),r=[].slice.call(i.body.querySelectorAll("*")),a=function(t,n){var i=r[t],a=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var s=[].slice.call(i.attributes),l=[].concat(e["*"]||[],e[a]||[]);s.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===Bt.indexOf(n)||Boolean(t.nodeValue.match(Wt)||t.nodeValue.match(Ut));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,r=i.length;o<r;o++)if(n.match(i[o]))return!0;return!1})(t,l)||i.removeAttribute(t.nodeName)}))},s=0,l=r.length;s<l;s++)a(s);return i.body.innerHTML}var Yt="tooltip",zt=i.default.fn[Yt],Xt=new RegExp("(^|\\s)bs-tooltip\\S+","g"),Kt=["sanitize","whiteList","sanitizeFn"],Gt={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)"},$t={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Jt={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',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:Qt,popperConfig:null},Zt={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"},te=function(){function t(t,e){if("undefined"==typeof It)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=i.default(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(i.default(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),i.default.removeData(this.element,this.constructor.DATA_KEY),i.default(this.element).off(this.constructor.EVENT_KEY),i.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&i.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===i.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=i.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){i.default(this.element).trigger(e);var n=l.findShadowRoot(this.element),o=i.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!o)return;var r=this.getTipElement(),a=l.getUID(this.constructor.NAME);r.setAttribute("id",a),this.element.setAttribute("aria-describedby",a),this.setContent(),this.config.animation&&i.default(r).addClass("fade");var s="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,u=this._getAttachment(s);this.addAttachmentClass(u);var f=this._getContainer();i.default(r).data(this.constructor.DATA_KEY,this),i.default.contains(this.element.ownerDocument.documentElement,this.tip)||i.default(r).appendTo(f),i.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new It(this.element,r,this._getPopperConfig(u)),i.default(r).addClass("show"),i.default(r).addClass(this.config.customClass),"ontouchstart"in document.documentElement&&i.default(document.body).children().on("mouseover",null,i.default.noop);var d=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,i.default(t.element).trigger(t.constructor.Event.SHOWN),"out"===e&&t._leave(null,t)};if(i.default(this.tip).hasClass("fade")){var c=l.getTransitionDurationFromElement(this.tip);i.default(this.tip).one(l.TRANSITION_END,d).emulateTransitionEnd(c)}else d()}},e.hide=function(t){var e=this,n=this.getTipElement(),o=i.default.Event(this.constructor.Event.HIDE),r=function(){"show"!==e._hoverState&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),i.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(i.default(this.element).trigger(o),!o.isDefaultPrevented()){if(i.default(n).removeClass("show"),"ontouchstart"in document.documentElement&&i.default(document.body).children().off("mouseover",null,i.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,i.default(this.tip).hasClass("fade")){var a=l.getTransitionDurationFromElement(n);i.default(n).one(l.TRANSITION_END,r).emulateTransitionEnd(a)}else r();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(t){i.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(i.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),i.default(t).removeClass("fade show")},e.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Vt(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?i.default(e).parent().is(t)||t.empty().append(e):t.text(i.default(e).text())},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return a({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=a({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:l.isElement(this.config.container)?i.default(this.config.container):i.default(document).find(this.config.container)},e._getAttachment=function(t){return $t[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)i.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var n="hover"===e?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===e?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;i.default(t.element).on(n,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},i.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=a({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||i.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),i.default(e.getTipElement()).hasClass("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){"show"===e._hoverState&&e.show()}),e.config.delay.show):e.show())},e._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||i.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){"out"===e._hoverState&&e.hide()}),e.config.delay.hide):e.hide())},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=i.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==Kt.indexOf(t)&&delete e[t]})),"number"==typeof(t=a({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),l.typeCheckConfig(Yt,t,this.constructor.DefaultType),t.sanitize&&(t.template=Vt(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=i.default(this.getTipElement()),e=t.attr("class").match(Xt);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(i.default(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.tooltip"),r="object"==typeof e&&e;if((o||!/dispose|hide/.test(e))&&(o||(o=new t(this,r),n.data("bs.tooltip",o)),"string"==typeof e)){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return Jt}},{key:"NAME",get:function(){return Yt}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return Zt}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return Gt}}]),t}();i.default.fn[Yt]=te._jQueryInterface,i.default.fn[Yt].Constructor=te,i.default.fn[Yt].noConflict=function(){return i.default.fn[Yt]=zt,te._jQueryInterface};var ee="popover",ne=i.default.fn[ee],ie=new RegExp("(^|\\s)bs-popover\\S+","g"),oe=a({},te.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),re=a({},te.DefaultType,{content:"(string|element|function)"}),ae={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"},se=function(t){var e,n;function o(){return t.apply(this,arguments)||this}n=t,(e=o).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n;var a=o.prototype;return a.isWithContent=function(){return this.getTitle()||this._getContent()},a.addAttachmentClass=function(t){i.default(this.getTipElement()).addClass("bs-popover-"+t)},a.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},a.setContent=function(){var t=i.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},a._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},a._cleanTipClass=function(){var t=i.default(this.getTipElement()),e=t.attr("class").match(ie);null!==e&&e.length>0&&t.removeClass(e.join(""))},o._jQueryInterface=function(t){return this.each((function(){var e=i.default(this).data("bs.popover"),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new o(this,n),i.default(this).data("bs.popover",e)),"string"==typeof t)){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}}))},r(o,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return oe}},{key:"NAME",get:function(){return ee}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return ae}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return re}}]),o}(te);i.default.fn[ee]=se._jQueryInterface,i.default.fn[ee].Constructor=se,i.default.fn[ee].noConflict=function(){return i.default.fn[ee]=ne,se._jQueryInterface};var le="scrollspy",ue=i.default.fn[le],fe={offset:10,method:"auto",target:""},de={offset:"number",method:"string",target:"(string|element)"},ce=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,i.default(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return n._process(t)})),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?"offset":"position",n="auto"===this._config.method?e:this._config.method,o="position"===n?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var e,r=l.getSelectorFromElement(t);if(r&&(e=document.querySelector(r)),e){var a=e.getBoundingClientRect();if(a.width||a.height)return[i.default(e)[n]().top+o,r]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){i.default.removeData(this._element,"bs.scrollspy"),i.default(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=a({},fe,"object"==typeof t&&t?t:{})).target&&l.isElement(t.target)){var e=i.default(t.target).attr("id");e||(e=l.getUID(le),i.default(t.target).attr("id",e)),t.target="#"+e}return l.typeCheckConfig(le,t,de),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=i.default([].slice.call(document.querySelectorAll(e.join(","))));n.hasClass("dropdown-item")?(n.closest(".dropdown").find(".dropdown-toggle").addClass("active"),n.addClass("active")):(n.addClass("active"),n.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),n.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),i.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("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this).data("bs.scrollspy");if(n||(n=new t(this,"object"==typeof e&&e),i.default(this).data("bs.scrollspy",n)),"string"==typeof e){if("undefined"==typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return fe}}]),t}();i.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=i.default(t[e]);ce._jQueryInterface.call(n,n.data())}})),i.default.fn[le]=ce._jQueryInterface,i.default.fn[le].Constructor=ce,i.default.fn[le].noConflict=function(){return i.default.fn[le]=ue,ce._jQueryInterface};var he=i.default.fn.tab,pe=function(){function t(t){this._element=t}var e=t.prototype;return e.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&i.default(this._element).hasClass("active")||i.default(this._element).hasClass("disabled"))){var e,n,o=i.default(this._element).closest(".nav, .list-group")[0],r=l.getSelectorFromElement(this._element);if(o){var a="UL"===o.nodeName||"OL"===o.nodeName?"> li > .active":".active";n=(n=i.default.makeArray(i.default(o).find(a)))[n.length-1]}var s=i.default.Event("hide.bs.tab",{relatedTarget:this._element}),u=i.default.Event("show.bs.tab",{relatedTarget:n});if(n&&i.default(n).trigger(s),i.default(this._element).trigger(u),!u.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(e=document.querySelector(r)),this._activate(this._element,o);var f=function(){var e=i.default.Event("hidden.bs.tab",{relatedTarget:t._element}),o=i.default.Event("shown.bs.tab",{relatedTarget:n});i.default(n).trigger(e),i.default(t._element).trigger(o)};e?this._activate(e,e.parentNode,f):f()}}},e.dispose=function(){i.default.removeData(this._element,"bs.tab"),this._element=null},e._activate=function(t,e,n){var o=this,r=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?i.default(e).children(".active"):i.default(e).find("> li > .active"))[0],a=n&&r&&i.default(r).hasClass("fade"),s=function(){return o._transitionComplete(t,r,n)};if(r&&a){var u=l.getTransitionDurationFromElement(r);i.default(r).removeClass("show").one(l.TRANSITION_END,s).emulateTransitionEnd(u)}else s()},e._transitionComplete=function(t,e,n){if(e){i.default(e).removeClass("active");var o=i.default(e.parentNode).find("> .dropdown-menu .active")[0];o&&i.default(o).removeClass("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(i.default(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),l.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&i.default(t.parentNode).hasClass("dropdown-menu")){var r=i.default(t).closest(".dropdown")[0];if(r){var a=[].slice.call(r.querySelectorAll(".dropdown-toggle"));i.default(a).addClass("active")}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.tab");if(o||(o=new t(this),n.data("bs.tab",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}}]),t}();i.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),pe._jQueryInterface.call(i.default(this),"show")})),i.default.fn.tab=pe._jQueryInterface,i.default.fn.tab.Constructor=pe,i.default.fn.tab.noConflict=function(){return i.default.fn.tab=he,pe._jQueryInterface};var me=i.default.fn.toast,ge={animation:"boolean",autohide:"boolean",delay:"number"},ve={animation:!0,autohide:!0,delay:500},_e=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=i.default.Event("show.bs.toast");if(i.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var n=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),i.default(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),l.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,n).emulateTransitionEnd(o)}else n()}},e.hide=function(){if(this._element.classList.contains("show")){var t=i.default.Event("hide.bs.toast");i.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),i.default(this._element).off("click.dismiss.bs.toast"),i.default.removeData(this._element,"bs.toast"),this._element=null,this._config=null},e._getConfig=function(t){return t=a({},ve,i.default(this._element).data(),"object"==typeof t&&t?t:{}),l.typeCheckConfig("toast",t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;i.default(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add("hide"),i.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var n=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.toast");if(o||(o=new t(this,"object"==typeof e&&e),n.data("bs.toast",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e](this)}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"DefaultType",get:function(){return ge}},{key:"Default",get:function(){return ve}}]),t}();i.default.fn.toast=_e._jQueryInterface,i.default.fn.toast.Constructor=_e,i.default.fn.toast.noConflict=function(){return i.default.fn.toast=me,_e._jQueryInterface},t.Alert=d,t.Button=h,t.Carousel=y,t.Collapse=S,t.Dropdown=Ft,t.Modal=qt,t.Popover=se,t.Scrollspy=ce,t.Tab=pe,t.Toast=_e,t.Tooltip=te,t.Util=l,Object.defineProperty(t,"__esModule",{value:!0})})); //# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js.map b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js.map index 4146d43c2..7fcd06e5c 100644 --- a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js.map +++ b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../js/src/util.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/popper.js/dist/esm/popper.js","../../js/src/dropdown.js","../../js/src/modal.js","../../js/src/tools/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"names":["transitionEndEmulator","duration","_this","this","called","$","one","Util","TRANSITION_END","setTimeout","triggerTransitionEnd","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","trigger","supportsTransitionEnd","Boolean","isElement","obj","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","call","expectedTypes","value","valueType","toString","match","toLowerCase","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","TypeError","version","fn","jquery","emulateTransitionEnd","event","special","bindType","delegateType","handle","target","is","handleObj","handler","apply","arguments","NAME","JQUERY_NO_CONFLICT","Alert","_element","close","rootElement","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","parent","closest","closeEvent","Event","removeClass","hasClass","_destroyElement","detach","remove","_jQueryInterface","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","Constructor","noConflict","Button","shouldAvoidTriggerChange","toggle","triggerChangeEvent","addAriaPressed","input","type","checked","classList","contains","activeElement","focus","hasAttribute","setAttribute","toggleClass","avoidTriggerChange","button","initialButton","inputBtn","tagName","window","buttons","slice","querySelectorAll","i","len","length","add","EVENT_KEY","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","clearInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","direction","off","_extends","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","start","originalEvent","pointerType","clientX","touches","end","clearTimeout","e","move","which","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","children","addClass","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","nextElementInterval","parseInt","defaultInterval","CLASS_NAME_ACTIVE","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","not","startEvent","dimension","_getDimension","style","attr","setTransitioning","scrollSize","CLASS_NAME_COLLAPSE","getBoundingClientRect","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","selectors","$target","isBrowser","timeoutDuration","longerTimeoutBrowsers","userAgent","debounce","Promise","resolve","then","scheduled","isFunction","functionToCheck","getStyleComputedProperty","ownerDocument","defaultView","getComputedStyle","getParentNode","nodeName","host","getScrollParent","body","_getStyleComputedProp","overflow","overflowX","overflowY","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","offsetParent","nextElementSibling","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","side","undefined","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","getSize","computedStyle","max","getWindowSizes","height","width","classCallCheck","instance","createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","key","protoProps","staticProps","assign","source","getClientRect","offsets","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","padding","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","placement","refRect","rects","sortedAreas","keys","map","area","sort","a","b","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","runModifiers","modifiers","ends","prop","findIndex","cur","forEach","console","warn","enabled","update","isDestroyed","arrowStyles","attributes","flipped","options","positionFixed","flip","originalPlacement","position","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","name","getSupportedPropertyName","prefixes","upperProp","charAt","toCheck","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","setupEventListeners","updateBound","addEventListener","passive","scrollElement","attachToScrollParents","callback","scrollParents","isBody","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","removeEventListener","isNumeric","n","isNaN","isFinite","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","concat","reverse","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","Defaults","shift","shiftvariation","_data$offsets","isVertical","shiftOffsets","preventOverflow","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","round","placementOpposite","flipOrder","behavior","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","v","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","x-placement","applyStyle","onLoad","modifierOptions","Popper","requestAnimationFrame","Utils","global","PopperUtils","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","boundary","display","popperConfig","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","noop","hideEvent","stopPropagation","constructor","_getPlacement","$parentDropdown","_getOffset","toggles","context","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","EVENT_CLICK_DATA_API","backdrop","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","modalTransitionDuration","modalBody","ELEMENT_NODE","appendChild","_enforceFocus","shownEvent","transitionComplete","_this5","has","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","animate","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","paddingLeft","paddingRight","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","calculatedMargin","elements","margin","scrollDiv","scrollbarWidth","_this11","uriAttrs","DefaultWhitelist","*","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","DOMParser","parseFromString","whitelistKeys","_loop","elName","attributeList","whitelistedAttributes","allowedAttributeList","attrName","nodeValue","regExp","attrRegex","allowedAttribute","innerHTML","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","animation","template","title","delay","container","fallbackPlacement","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","dataKey","DATA_KEY","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","complete","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","setElementContent","CLASS_NAME_FADE","content","text","empty","append","_handlePopperPlacementChange","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","$tip","tabClass","join","popperData","initConfigAnimation","Popover","_getContent","method","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","pageYOffset","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","parents","SELECTOR_NAV_LINKS","scrollSpys","$spy","Tab","previous","listElement","itemSelector","makeArray","hiddenEvent","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","autohide","Toast","_clearTimeout","_close"],"mappings":"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","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (_) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n this.shouldAvoidTriggerChange = false\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $(input).trigger('change')\n }\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $element.data(DATA_KEY, data)\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n }\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n const $element = $(this._element)\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n DIRECTION_NEXT :\n DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, event => this.pause(event))\n .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, e => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n $(this._element).on(EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter(foundElem => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$element.data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this._config.offset(data.offsets, this._element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n if (this._config.backdrop === 'static') {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n } else {\n this.hide()\n }\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n}\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n}\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: data => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: data => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this.config.offset(data.offsets, this.element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n event => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, event => this._enter(event))\n .on(eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div></div>'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map(element => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .addClass(CLASS_NAME_ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(SELECTOR_NAV_ITEMS)\n .children(SELECTOR_NAV_LINKS)\n .addClass(CLASS_NAME_ACTIVE)\n }\n\n $(this._scrollElement).trigger(EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = '> li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(CLASS_NAME_ACTIVE) ||\n $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(EVENT_HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(EVENT_HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n $(container).find(SELECTOR_ACTIVE_UL) :\n $(container).children(SELECTOR_ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(CLASS_NAME_SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(CLASS_NAME_ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n SELECTOR_DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(CLASS_NAME_ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(CLASS_NAME_ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n Util.reflow(element)\n\n if (element.classList.contains(CLASS_NAME_FADE)) {\n element.classList.add(CLASS_NAME_SHOW)\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 500\n}\n\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast {\n constructor(element, config) {\n this._element = element\n this._config = this._getConfig(config)\n this._timeout = null\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n show() {\n const showEvent = $.Event(EVENT_SHOW)\n\n $(this._element).trigger(showEvent)\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n $(this._element).trigger(EVENT_SHOWN)\n\n if (this._config.autohide) {\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n Util.reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._close()\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n\n $.removeData(this._element, DATA_KEY)\n this._element = null\n this._config = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...$(this._element).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _setListeners() {\n $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n }\n\n _close() {\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n $(this._element).trigger(EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new Toast(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Toast._jQueryInterface\n$.fn[NAME].Constructor = Toast\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Toast._jQueryInterface\n}\n\nexport default Toast\n"]} \ No newline at end of file +{"version":3,"sources":["../../js/src/util.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/popper.js/dist/esm/popper.js","../../js/src/dropdown.js","../../js/src/modal.js","../../js/src/tools/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"names":["transitionEndEmulator","duration","_this","this","called","$","one","Util","TRANSITION_END","setTimeout","triggerTransitionEnd","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","trigger","supportsTransitionEnd","Boolean","isElement","obj","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","call","expectedTypes","value","valueType","toString","match","toLowerCase","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","TypeError","version","fn","jquery","emulateTransitionEnd","event","special","bindType","delegateType","handle","target","is","handleObj","handler","apply","arguments","NAME","JQUERY_NO_CONFLICT","Alert","_element","close","rootElement","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","parent","closest","closeEvent","Event","removeClass","hasClass","_destroyElement","detach","remove","_jQueryInterface","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","Constructor","noConflict","Button","shouldAvoidTriggerChange","toggle","triggerChangeEvent","addAriaPressed","input","type","checked","classList","contains","activeElement","focus","hasAttribute","setAttribute","toggleClass","avoidTriggerChange","button","initialButton","inputBtn","tagName","window","buttons","slice","querySelectorAll","i","len","length","add","EVENT_KEY","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","clearInterval","_updateInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","direction","off","_extends","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","start","originalEvent","pointerType","clientX","touches","end","clearTimeout","e","move","which","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","children","addClass","elementInterval","parseInt","defaultInterval","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","CLASS_NAME_ACTIVE","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","not","startEvent","dimension","_getDimension","style","attr","setTransitioning","scrollSize","CLASS_NAME_COLLAPSE","getBoundingClientRect","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","selectors","$target","isBrowser","timeoutDuration","longerTimeoutBrowsers","userAgent","debounce","Promise","resolve","then","scheduled","isFunction","functionToCheck","getStyleComputedProperty","ownerDocument","defaultView","getComputedStyle","getParentNode","nodeName","host","getScrollParent","body","_getStyleComputedProp","overflow","overflowX","overflowY","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","offsetParent","nextElementSibling","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","side","undefined","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","getSize","computedStyle","max","getWindowSizes","height","width","classCallCheck","instance","createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","key","protoProps","staticProps","assign","source","getClientRect","offsets","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","padding","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","placement","refRect","rects","sortedAreas","keys","map","area","sort","a","b","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","runModifiers","modifiers","ends","prop","findIndex","cur","forEach","console","warn","enabled","update","isDestroyed","arrowStyles","attributes","flipped","options","positionFixed","flip","originalPlacement","position","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","name","getSupportedPropertyName","prefixes","upperProp","charAt","toCheck","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","setupEventListeners","updateBound","addEventListener","passive","scrollElement","attachToScrollParents","callback","scrollParents","isBody","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","removeEventListener","isNumeric","n","isNaN","isFinite","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","concat","reverse","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","Defaults","shift","shiftvariation","_data$offsets","isVertical","shiftOffsets","preventOverflow","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","round","placementOpposite","flipOrder","behavior","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","v","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","x-placement","applyStyle","onLoad","modifierOptions","Popper","requestAnimationFrame","Utils","global","PopperUtils","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","boundary","display","popperConfig","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","noop","hideEvent","stopPropagation","constructor","_getPlacement","$parentDropdown","_getOffset","toggles","context","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","EVENT_CLICK_DATA_API","backdrop","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","modalTransitionDuration","modalBody","ELEMENT_NODE","appendChild","_enforceFocus","shownEvent","transitionComplete","_this5","has","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","animate","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","paddingLeft","paddingRight","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","calculatedMargin","elements","margin","scrollDiv","scrollbarWidth","_this11","uriAttrs","DefaultWhitelist","*","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","DOMParser","parseFromString","whitelistKeys","_loop","elName","attributeList","whitelistedAttributes","allowedAttributeList","attrName","nodeValue","regExp","attrRegex","allowedAttribute","innerHTML","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","animation","template","title","delay","container","fallbackPlacement","customClass","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","dataKey","DATA_KEY","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","complete","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","setElementContent","CLASS_NAME_FADE","content","text","empty","append","_handlePopperPlacementChange","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","$tip","tabClass","join","popperData","initConfigAnimation","Popover","_getContent","method","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","pageYOffset","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","parents","SELECTOR_NAV_LINKS","scrollSpys","$spy","Tab","previous","listElement","itemSelector","makeArray","hiddenEvent","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","autohide","Toast","_clearTimeout","_close"],"mappings":"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","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (_) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n this.shouldAvoidTriggerChange = false\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $(input).trigger('change')\n }\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $element.data(DATA_KEY, data)\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n }\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n const $element = $(this._element)\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._updateInterval()\n\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n DIRECTION_NEXT :\n DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, event => this.pause(event))\n .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, e => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n $(this._element).on(EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n if (!element) {\n return\n }\n\n const elementInterval = parseInt(element.getAttribute('data-interval'), 10)\n\n if (elementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = elementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n this._activeElement = nextElement\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter(foundElem => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$element.data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Totally disable Popper for Dropdowns in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this._config.offset(data.offsets, this._element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n customClass: '(string|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n}\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n customClass: '',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n}\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n $(tip).addClass(this.config.customClass)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: data => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: data => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this.config.offset(data.offsets, this.element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n event => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, event => this._enter(event))\n .on(eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div></div>'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map(element => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .addClass(CLASS_NAME_ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(SELECTOR_NAV_ITEMS)\n .children(SELECTOR_NAV_LINKS)\n .addClass(CLASS_NAME_ACTIVE)\n }\n\n $(this._scrollElement).trigger(EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = '> li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(CLASS_NAME_ACTIVE) ||\n $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(EVENT_HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(EVENT_HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n $(container).find(SELECTOR_ACTIVE_UL) :\n $(container).children(SELECTOR_ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(CLASS_NAME_SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(CLASS_NAME_ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n SELECTOR_DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(CLASS_NAME_ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(CLASS_NAME_ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n Util.reflow(element)\n\n if (element.classList.contains(CLASS_NAME_FADE)) {\n element.classList.add(CLASS_NAME_SHOW)\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 500\n}\n\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast {\n constructor(element, config) {\n this._element = element\n this._config = this._getConfig(config)\n this._timeout = null\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n show() {\n const showEvent = $.Event(EVENT_SHOW)\n\n $(this._element).trigger(showEvent)\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n $(this._element).trigger(EVENT_SHOWN)\n\n if (this._config.autohide) {\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n Util.reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._close()\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n\n $.removeData(this._element, DATA_KEY)\n this._element = null\n this._config = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...$(this._element).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _setListeners() {\n $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n }\n\n _close() {\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n $(this._element).trigger(EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new Toast(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Toast._jQueryInterface\n$.fn[NAME].Constructor = Toast\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Toast._jQueryInterface\n}\n\nexport default Toast\n"]} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.js b/vendor/twbs/bootstrap/dist/js/bootstrap.js index 8b95e652f..f46c53e6f 100644 --- a/vendor/twbs/bootstrap/dist/js/bootstrap.js +++ b/vendor/twbs/bootstrap/dist/js/bootstrap.js @@ -1,6 +1,6 @@ /*! - * Bootstrap v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { @@ -56,7 +56,7 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): util.js + * Bootstrap (v4.6.0): util.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -235,7 +235,7 @@ */ var NAME = 'alert'; - var VERSION = '4.5.3'; + var VERSION = '4.6.0'; var DATA_KEY = 'bs.alert'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; @@ -391,7 +391,7 @@ */ var NAME$1 = 'button'; - var VERSION$1 = '4.5.3'; + var VERSION$1 = '4.6.0'; var DATA_KEY$1 = 'bs.button'; var EVENT_KEY$1 = "." + DATA_KEY$1; var DATA_API_KEY$1 = '.data-api'; @@ -590,7 +590,7 @@ */ var NAME$2 = 'carousel'; - var VERSION$2 = '4.5.3'; + var VERSION$2 = '4.6.0'; var DATA_KEY$2 = 'bs.carousel'; var EVENT_KEY$2 = "." + DATA_KEY$2; var DATA_API_KEY$2 = '.data-api'; @@ -730,6 +730,8 @@ } if (this._config.interval && !this._isPaused) { + this._updateInterval(); + this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); } }; @@ -971,6 +973,23 @@ } }; + _proto._updateInterval = function _updateInterval() { + var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM); + + if (!element) { + return; + } + + var elementInterval = parseInt(element.getAttribute('data-interval'), 10); + + if (elementInterval) { + this._config.defaultInterval = this._config.defaultInterval || this._config.interval; + this._config.interval = elementInterval; + } else { + this._config.interval = this._config.defaultInterval || this._config.interval; + } + }; + _proto._slide = function _slide(direction, element) { var _this4 = this; @@ -1021,6 +1040,7 @@ this._setActiveIndicatorElement(nextElement); + this._activeElement = nextElement; var slidEvent = $__default['default'].Event(EVENT_SLID, { relatedTarget: nextElement, direction: eventDirectionName, @@ -1033,15 +1053,6 @@ Util.reflow(nextElement); $__default['default'](activeElement).addClass(directionalClassName); $__default['default'](nextElement).addClass(directionalClassName); - var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); - - if (nextElementInterval) { - this._config.defaultInterval = this._config.defaultInterval || this._config.interval; - this._config.interval = nextElementInterval; - } else { - this._config.interval = this._config.defaultInterval || this._config.interval; - } - var transitionDuration = Util.getTransitionDurationFromElement(activeElement); $__default['default'](activeElement).one(Util.TRANSITION_END, function () { $__default['default'](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$1); @@ -1178,7 +1189,7 @@ */ var NAME$3 = 'collapse'; - var VERSION$3 = '4.5.3'; + var VERSION$3 = '4.6.0'; var DATA_KEY$3 = 'bs.collapse'; var EVENT_KEY$3 = "." + DATA_KEY$3; var DATA_API_KEY$3 = '.data-api'; @@ -1527,7 +1538,7 @@ */ var NAME$4 = 'dropdown'; - var VERSION$4 = '4.5.3'; + var VERSION$4 = '4.6.0'; var DATA_KEY$4 = 'bs.dropdown'; var EVENT_KEY$4 = "." + DATA_KEY$4; var DATA_API_KEY$4 = '.data-api'; @@ -1644,7 +1655,7 @@ if (showEvent.isDefaultPrevented()) { return; - } // Disable totally Popper.js for Dropdown in Navbar + } // Totally disable Popper for Dropdowns in Navbar if (!this._inNavbar && usePopper) { @@ -1653,7 +1664,7 @@ * Popper - https://popper.js.org */ if (typeof Popper__default['default'] === 'undefined') { - throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); + throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); } var referenceElement = this._element; @@ -1821,7 +1832,7 @@ boundariesElement: this._config.boundary } } - }; // Disable Popper.js if we have a static display + }; // Disable Popper if we have a static display if (this._config.display === 'static') { popperConfig.modifiers.applyStyle = { @@ -2041,7 +2052,7 @@ */ var NAME$5 = 'modal'; - var VERSION$5 = '4.5.3'; + var VERSION$5 = '4.6.0'; var DATA_KEY$5 = 'bs.modal'; var EVENT_KEY$5 = "." + DATA_KEY$5; var DATA_API_KEY$5 = '.data-api'; @@ -2241,38 +2252,34 @@ _proto._triggerBackdropTransition = function _triggerBackdropTransition() { var _this3 = this; - if (this._config.backdrop === 'static') { - var hideEventPrevented = $__default['default'].Event(EVENT_HIDE_PREVENTED); - $__default['default'](this._element).trigger(hideEventPrevented); + var hideEventPrevented = $__default['default'].Event(EVENT_HIDE_PREVENTED); + $__default['default'](this._element).trigger(hideEventPrevented); - if (hideEventPrevented.isDefaultPrevented()) { - return; - } + if (hideEventPrevented.isDefaultPrevented()) { + return; + } - var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; + var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; + + if (!isModalOverflowing) { + this._element.style.overflowY = 'hidden'; + } + + this._element.classList.add(CLASS_NAME_STATIC); + + var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog); + $__default['default'](this._element).off(Util.TRANSITION_END); + $__default['default'](this._element).one(Util.TRANSITION_END, function () { + _this3._element.classList.remove(CLASS_NAME_STATIC); if (!isModalOverflowing) { - this._element.style.overflowY = 'hidden'; + $__default['default'](_this3._element).one(Util.TRANSITION_END, function () { + _this3._element.style.overflowY = ''; + }).emulateTransitionEnd(_this3._element, modalTransitionDuration); } + }).emulateTransitionEnd(modalTransitionDuration); - this._element.classList.add(CLASS_NAME_STATIC); - - var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog); - $__default['default'](this._element).off(Util.TRANSITION_END); - $__default['default'](this._element).one(Util.TRANSITION_END, function () { - _this3._element.classList.remove(CLASS_NAME_STATIC); - - if (!isModalOverflowing) { - $__default['default'](_this3._element).one(Util.TRANSITION_END, function () { - _this3._element.style.overflowY = ''; - }).emulateTransitionEnd(_this3._element, modalTransitionDuration); - } - }).emulateTransitionEnd(modalTransitionDuration); - - this._element.focus(); - } else { - this.hide(); - } + this._element.focus(); }; _proto._showElement = function _showElement(relatedTarget) { @@ -2427,7 +2434,11 @@ return; } - _this9._triggerBackdropTransition(); + if (_this9._config.backdrop === 'static') { + _this9._triggerBackdropTransition(); + } else { + _this9.hide(); + } }); if (animate) { @@ -2651,7 +2662,7 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): tools/sanitizer.js + * Bootstrap (v4.6.0): tools/sanitizer.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -2777,7 +2788,7 @@ */ var NAME$6 = 'tooltip'; - var VERSION$6 = '4.5.3'; + var VERSION$6 = '4.6.0'; var DATA_KEY$6 = 'bs.tooltip'; var EVENT_KEY$6 = "." + DATA_KEY$6; var JQUERY_NO_CONFLICT$6 = $__default['default'].fn[NAME$6]; @@ -2797,6 +2808,7 @@ container: '(string|element|boolean)', fallbackPlacement: '(string|array)', boundary: '(string|element)', + customClass: '(string|function)', sanitize: 'boolean', sanitizeFn: '(null|function)', whiteList: 'object', @@ -2822,6 +2834,7 @@ container: false, fallbackPlacement: 'flip', boundary: 'scrollParent', + customClass: '', sanitize: true, sanitizeFn: null, whiteList: DefaultWhitelist, @@ -2858,7 +2871,7 @@ var Tooltip = /*#__PURE__*/function () { function Tooltip(element, config) { if (typeof Popper__default['default'] === 'undefined') { - throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); + throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); } // private @@ -2992,7 +3005,8 @@ $__default['default'](this.element).trigger(this.constructor.Event.INSERTED); this._popper = new Popper__default['default'](this.element, tip, this._getPopperConfig(attachment)); - $__default['default'](tip).addClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we add extra + $__default['default'](tip).addClass(CLASS_NAME_SHOW$4); + $__default['default'](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; // only needed because of broken event delegation on iOS // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html @@ -3490,7 +3504,7 @@ */ var NAME$7 = 'popover'; - var VERSION$7 = '4.5.3'; + var VERSION$7 = '4.6.0'; var DATA_KEY$7 = 'bs.popover'; var EVENT_KEY$7 = "." + DATA_KEY$7; var JQUERY_NO_CONFLICT$7 = $__default['default'].fn[NAME$7]; @@ -3670,7 +3684,7 @@ */ var NAME$8 = 'scrollspy'; - var VERSION$8 = '4.5.3'; + var VERSION$8 = '4.6.0'; var DATA_KEY$8 = 'bs.scrollspy'; var EVENT_KEY$8 = "." + DATA_KEY$8; var DATA_API_KEY$6 = '.data-api'; @@ -3962,7 +3976,7 @@ */ var NAME$9 = 'tab'; - var VERSION$9 = '4.5.3'; + var VERSION$9 = '4.6.0'; var DATA_KEY$9 = 'bs.tab'; var EVENT_KEY$9 = "." + DATA_KEY$9; var DATA_API_KEY$7 = '.data-api'; @@ -4188,7 +4202,7 @@ */ var NAME$a = 'toast'; - var VERSION$a = '4.5.3'; + var VERSION$a = '4.6.0'; var DATA_KEY$a = 'bs.toast'; var EVENT_KEY$a = "." + DATA_KEY$a; var JQUERY_NO_CONFLICT$a = $__default['default'].fn[NAME$a]; diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.js.map b/vendor/twbs/bootstrap/dist/js/bootstrap.js.map index 3fb136f51..252423aaa 100644 --- a/vendor/twbs/bootstrap/dist/js/bootstrap.js.map +++ b/vendor/twbs/bootstrap/dist/js/bootstrap.js.map @@ -1 +1 @@ -{"version":3,"file":"bootstrap.js","sources":["../../js/src/util.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/modal.js","../../js/src/tools/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (_) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n this.shouldAvoidTriggerChange = false\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $(input).trigger('change')\n }\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $element.data(DATA_KEY, data)\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n }\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n const $element = $(this._element)\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n DIRECTION_NEXT :\n DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, event => this.pause(event))\n .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, e => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n $(this._element).on(EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter(foundElem => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$element.data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this._config.offset(data.offsets, this._element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n if (this._config.backdrop === 'static') {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n } else {\n this.hide()\n }\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n}\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n}\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: data => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: data => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this.config.offset(data.offsets, this.element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n event => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, event => this._enter(event))\n .on(eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div></div>'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map(element => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .addClass(CLASS_NAME_ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(SELECTOR_NAV_ITEMS)\n .children(SELECTOR_NAV_LINKS)\n .addClass(CLASS_NAME_ACTIVE)\n }\n\n $(this._scrollElement).trigger(EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = '> li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(CLASS_NAME_ACTIVE) ||\n $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(EVENT_HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(EVENT_HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n $(container).find(SELECTOR_ACTIVE_UL) :\n $(container).children(SELECTOR_ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(CLASS_NAME_SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(CLASS_NAME_ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n SELECTOR_DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(CLASS_NAME_ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(CLASS_NAME_ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n Util.reflow(element)\n\n if (element.classList.contains(CLASS_NAME_FADE)) {\n element.classList.add(CLASS_NAME_SHOW)\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 500\n}\n\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast {\n constructor(element, config) {\n this._element = element\n this._config = this._getConfig(config)\n this._timeout = null\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n show() {\n const showEvent = $.Event(EVENT_SHOW)\n\n $(this._element).trigger(showEvent)\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n $(this._element).trigger(EVENT_SHOWN)\n\n if (this._config.autohide) {\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n Util.reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._close()\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n\n $.removeData(this._element, DATA_KEY)\n this._element = null\n this._config = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...$(this._element).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _setListeners() {\n $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n }\n\n _close() {\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n $(this._element).trigger(EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new Toast(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Toast._jQueryInterface\n$.fn[NAME].Constructor = Toast\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Toast._jQueryInterface\n}\n\nexport default Toast\n"],"names":["TRANSITION_END","MAX_UID","MILLISECONDS_MULTIPLIER","toType","obj","toString","call","match","toLowerCase","getSpecialTransitionEndEvent","bindType","delegateType","handle","event","$","target","is","handleObj","handler","apply","arguments","undefined","transitionEndEmulator","duration","called","one","Util","setTimeout","triggerTransitionEnd","setTransitionEndSupport","fn","emulateTransitionEnd","special","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","trigger","supportsTransitionEnd","Boolean","isElement","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","expectedTypes","value","valueType","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","TypeError","version","jquery","minMajor","ltMajor","minMinor","minPatch","maxMajor","NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","SELECTOR_DISMISS","EVENT_CLOSE","EVENT_CLOSED","EVENT_CLICK_DATA_API","CLASS_NAME_ALERT","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","_element","close","rootElement","_getRootElement","customEvent","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","parent","closest","closeEvent","Event","removeClass","hasClass","_destroyElement","detach","remove","_jQueryInterface","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","Constructor","noConflict","CLASS_NAME_ACTIVE","CLASS_NAME_BUTTON","CLASS_NAME_FOCUS","SELECTOR_DATA_TOGGLE_CARROT","SELECTOR_DATA_TOGGLES","SELECTOR_DATA_TOGGLE","SELECTOR_DATA_TOGGLES_BUTTONS","SELECTOR_INPUT","SELECTOR_ACTIVE","SELECTOR_BUTTON","EVENT_FOCUS_BLUR_DATA_API","EVENT_LOAD_DATA_API","Button","shouldAvoidTriggerChange","toggle","triggerChangeEvent","addAriaPressed","input","type","checked","classList","contains","activeElement","focus","hasAttribute","setAttribute","toggleClass","avoidTriggerChange","button","initialButton","inputBtn","tagName","window","buttons","slice","querySelectorAll","i","len","length","add","ARROW_LEFT_KEYCODE","ARROW_RIGHT_KEYCODE","TOUCHEVENT_COMPAT_WAIT","SWIPE_THRESHOLD","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","DIRECTION_NEXT","DIRECTION_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","EVENT_DRAG_START","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_RIGHT","CLASS_NAME_LEFT","CLASS_NAME_NEXT","CLASS_NAME_PREV","CLASS_NAME_POINTER_EVENT","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM","SELECTOR_ITEM_IMG","SELECTOR_NEXT_PREV","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","clearInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","direction","off","_handleSwipe","absDeltax","abs","_keydown","_addTouchEventListeners","start","originalEvent","pointerType","clientX","touches","move","end","clearTimeout","e","which","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","isGoingToWrap","delta","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","children","addClass","activeElementIndex","nextElement","nextElementIndex","isCycling","directionalClassName","orderClassName","slidEvent","nextElementInterval","parseInt","defaultInterval","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","DIMENSION_WIDTH","DIMENSION_HEIGHT","SELECTOR_ACTIVES","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","not","startEvent","dimension","_getDimension","style","attr","setTransitioning","complete","capitalizedDimension","scrollSize","getBoundingClientRect","triggerArrayLength","$elem","isTransitioning","hasWidth","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","selectors","$target","ESCAPE_KEYCODE","SPACE_KEYCODE","TAB_KEYCODE","ARROW_UP_KEYCODE","ARROW_DOWN_KEYCODE","RIGHT_MOUSE_BUTTON_WHICH","REGEXP_KEYDOWN","EVENT_CLICK","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DISABLED","CLASS_NAME_DROPUP","CLASS_NAME_DROPRIGHT","CLASS_NAME_DROPLEFT","CLASS_NAME_MENURIGHT","CLASS_NAME_POSITION_STATIC","SELECTOR_FORM_CHILD","SELECTOR_MENU","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","offset","flip","boundary","reference","display","popperConfig","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","Popper","referenceElement","_getPopperConfig","body","noop","hideEvent","destroy","update","scheduleUpdate","stopPropagation","constructor","_getPlacement","$parentDropdown","placement","_getOffset","offsets","modifiers","enabled","preventOverflow","boundariesElement","applyStyle","toggles","context","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","backdrop","EVENT_HIDE_PREVENTED","EVENT_FOCUSIN","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_KEYDOWN_DISMISS","EVENT_MOUSEUP_DISMISS","EVENT_MOUSEDOWN_DISMISS","CLASS_NAME_SCROLLABLE","CLASS_NAME_SCROLLBAR_MEASURER","CLASS_NAME_BACKDROP","CLASS_NAME_OPEN","CLASS_NAME_STATIC","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","SELECTOR_DATA_DISMISS","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","forEach","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","clientHeight","overflowY","modalTransitionDuration","modalBody","Node","ELEMENT_NODE","appendChild","removeAttribute","scrollTop","_enforceFocus","shownEvent","transitionComplete","has","_resetAdjustments","_resetScrollbar","_removeBackdrop","callback","animate","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","paddingLeft","paddingRight","rect","round","left","right","innerWidth","_getScrollbarWidth","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","marginRight","calculatedMargin","padding","elements","margin","scrollDiv","scrollbarWidth","width","clientWidth","removeChild","uriAttrs","ARIA_ATTRIBUTE_PATTERN","DefaultWhitelist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attrName","nodeName","nodeValue","regExp","attrRegex","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","domParser","DOMParser","createdDocument","parseFromString","whitelistKeys","keys","el","elName","attributeList","attributes","whitelistedAttributes","concat","innerHTML","CLASS_PREFIX","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","animation","template","title","delay","html","container","fallbackPlacement","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","HOVER_STATE_SHOW","HOVER_STATE_OUT","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","SELECTOR_TOOLTIP_INNER","SELECTOR_ARROW","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","dataKey","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","ownerDocument","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","_fixTransition","prevHoverState","_cleanTipClass","getTitle","setElementContent","content","empty","append","text","defaultBsConfig","behavior","arrow","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","find","triggers","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","key","$tip","tabClass","join","popperData","instance","popper","initConfigAnimation","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","_getContent","method","EVENT_ACTIVATE","EVENT_SCROLL","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_DATA_SPY","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_ITEMS","SELECTOR_DROPDOWN_TOGGLE","METHOD_OFFSET","METHOD_POSITION","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targets","map","targetSelector","targetBCR","height","top","sort","pageYOffset","max","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","isActiveTarget","queries","$link","parents","node","scrollSpys","scrollSpysLength","$spy","CLASS_NAME_DROPDOWN_MENU","SELECTOR_ACTIVE_UL","SELECTOR_DROPDOWN_ACTIVE_CHILD","Tab","previous","listElement","itemSelector","makeArray","hiddenEvent","activeElements","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","CLASS_NAME_HIDE","CLASS_NAME_SHOWING","autohide","Toast","_clearTimeout","_close"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"bootstrap.js","sources":["../../js/src/util.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/modal.js","../../js/src/tools/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (_) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n this.shouldAvoidTriggerChange = false\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $(input).trigger('change')\n }\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $element.data(DATA_KEY, data)\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n }\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n const $element = $(this._element)\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._updateInterval()\n\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n DIRECTION_NEXT :\n DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, event => this.pause(event))\n .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, e => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n $(this._element).on(EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n if (!element) {\n return\n }\n\n const elementInterval = parseInt(element.getAttribute('data-interval'), 10)\n\n if (elementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = elementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n this._activeElement = nextElement\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter(foundElem => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$element.data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Totally disable Popper for Dropdowns in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this._config.offset(data.offsets, this._element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n customClass: '(string|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n}\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n customClass: '',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n}\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n $(tip).addClass(this.config.customClass)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: data => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: data => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this.config.offset(data.offsets, this.element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n event => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, event => this._enter(event))\n .on(eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div></div>'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map(element => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .addClass(CLASS_NAME_ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(SELECTOR_NAV_ITEMS)\n .children(SELECTOR_NAV_LINKS)\n .addClass(CLASS_NAME_ACTIVE)\n }\n\n $(this._scrollElement).trigger(EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = '> li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(CLASS_NAME_ACTIVE) ||\n $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(EVENT_HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(EVENT_HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n $(container).find(SELECTOR_ACTIVE_UL) :\n $(container).children(SELECTOR_ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(CLASS_NAME_SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(CLASS_NAME_ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n SELECTOR_DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(CLASS_NAME_ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(CLASS_NAME_ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n Util.reflow(element)\n\n if (element.classList.contains(CLASS_NAME_FADE)) {\n element.classList.add(CLASS_NAME_SHOW)\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 500\n}\n\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast {\n constructor(element, config) {\n this._element = element\n this._config = this._getConfig(config)\n this._timeout = null\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n show() {\n const showEvent = $.Event(EVENT_SHOW)\n\n $(this._element).trigger(showEvent)\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n $(this._element).trigger(EVENT_SHOWN)\n\n if (this._config.autohide) {\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n Util.reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._close()\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n\n $.removeData(this._element, DATA_KEY)\n this._element = null\n this._config = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...$(this._element).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _setListeners() {\n $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n }\n\n _close() {\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n $(this._element).trigger(EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new Toast(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Toast._jQueryInterface\n$.fn[NAME].Constructor = Toast\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Toast._jQueryInterface\n}\n\nexport default Toast\n"],"names":["TRANSITION_END","MAX_UID","MILLISECONDS_MULTIPLIER","toType","obj","toString","call","match","toLowerCase","getSpecialTransitionEndEvent","bindType","delegateType","handle","event","$","target","is","handleObj","handler","apply","arguments","undefined","transitionEndEmulator","duration","called","one","Util","setTimeout","triggerTransitionEnd","setTransitionEndSupport","fn","emulateTransitionEnd","special","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","trigger","supportsTransitionEnd","Boolean","isElement","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","expectedTypes","value","valueType","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","TypeError","version","jquery","minMajor","ltMajor","minMinor","minPatch","maxMajor","NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","SELECTOR_DISMISS","EVENT_CLOSE","EVENT_CLOSED","EVENT_CLICK_DATA_API","CLASS_NAME_ALERT","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","_element","close","rootElement","_getRootElement","customEvent","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","parent","closest","closeEvent","Event","removeClass","hasClass","_destroyElement","detach","remove","_jQueryInterface","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","Constructor","noConflict","CLASS_NAME_ACTIVE","CLASS_NAME_BUTTON","CLASS_NAME_FOCUS","SELECTOR_DATA_TOGGLE_CARROT","SELECTOR_DATA_TOGGLES","SELECTOR_DATA_TOGGLE","SELECTOR_DATA_TOGGLES_BUTTONS","SELECTOR_INPUT","SELECTOR_ACTIVE","SELECTOR_BUTTON","EVENT_FOCUS_BLUR_DATA_API","EVENT_LOAD_DATA_API","Button","shouldAvoidTriggerChange","toggle","triggerChangeEvent","addAriaPressed","input","type","checked","classList","contains","activeElement","focus","hasAttribute","setAttribute","toggleClass","avoidTriggerChange","button","initialButton","inputBtn","tagName","window","buttons","slice","querySelectorAll","i","len","length","add","ARROW_LEFT_KEYCODE","ARROW_RIGHT_KEYCODE","TOUCHEVENT_COMPAT_WAIT","SWIPE_THRESHOLD","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","DIRECTION_NEXT","DIRECTION_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","EVENT_DRAG_START","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_RIGHT","CLASS_NAME_LEFT","CLASS_NAME_NEXT","CLASS_NAME_PREV","CLASS_NAME_POINTER_EVENT","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM","SELECTOR_ITEM_IMG","SELECTOR_NEXT_PREV","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","clearInterval","_updateInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","direction","off","_handleSwipe","absDeltax","abs","_keydown","_addTouchEventListeners","start","originalEvent","pointerType","clientX","touches","move","end","clearTimeout","e","which","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","isGoingToWrap","delta","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","children","addClass","elementInterval","parseInt","defaultInterval","activeElementIndex","nextElement","nextElementIndex","isCycling","directionalClassName","orderClassName","slidEvent","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","DIMENSION_WIDTH","DIMENSION_HEIGHT","SELECTOR_ACTIVES","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","not","startEvent","dimension","_getDimension","style","attr","setTransitioning","complete","capitalizedDimension","scrollSize","getBoundingClientRect","triggerArrayLength","$elem","isTransitioning","hasWidth","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","selectors","$target","ESCAPE_KEYCODE","SPACE_KEYCODE","TAB_KEYCODE","ARROW_UP_KEYCODE","ARROW_DOWN_KEYCODE","RIGHT_MOUSE_BUTTON_WHICH","REGEXP_KEYDOWN","EVENT_CLICK","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DISABLED","CLASS_NAME_DROPUP","CLASS_NAME_DROPRIGHT","CLASS_NAME_DROPLEFT","CLASS_NAME_MENURIGHT","CLASS_NAME_POSITION_STATIC","SELECTOR_FORM_CHILD","SELECTOR_MENU","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","offset","flip","boundary","reference","display","popperConfig","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","Popper","referenceElement","_getPopperConfig","body","noop","hideEvent","destroy","update","scheduleUpdate","stopPropagation","constructor","_getPlacement","$parentDropdown","placement","_getOffset","offsets","modifiers","enabled","preventOverflow","boundariesElement","applyStyle","toggles","context","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","backdrop","EVENT_HIDE_PREVENTED","EVENT_FOCUSIN","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_KEYDOWN_DISMISS","EVENT_MOUSEUP_DISMISS","EVENT_MOUSEDOWN_DISMISS","CLASS_NAME_SCROLLABLE","CLASS_NAME_SCROLLBAR_MEASURER","CLASS_NAME_BACKDROP","CLASS_NAME_OPEN","CLASS_NAME_STATIC","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","SELECTOR_DATA_DISMISS","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","forEach","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","clientHeight","overflowY","modalTransitionDuration","modalBody","Node","ELEMENT_NODE","appendChild","removeAttribute","scrollTop","_enforceFocus","shownEvent","transitionComplete","has","_resetAdjustments","_resetScrollbar","_removeBackdrop","callback","animate","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","paddingLeft","paddingRight","rect","round","left","right","innerWidth","_getScrollbarWidth","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","marginRight","calculatedMargin","padding","elements","margin","scrollDiv","scrollbarWidth","width","clientWidth","removeChild","uriAttrs","ARIA_ATTRIBUTE_PATTERN","DefaultWhitelist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attrName","nodeName","nodeValue","regExp","attrRegex","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","domParser","DOMParser","createdDocument","parseFromString","whitelistKeys","keys","el","elName","attributeList","attributes","whitelistedAttributes","concat","innerHTML","CLASS_PREFIX","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","animation","template","title","delay","html","container","fallbackPlacement","customClass","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","HOVER_STATE_SHOW","HOVER_STATE_OUT","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","SELECTOR_TOOLTIP_INNER","SELECTOR_ARROW","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","dataKey","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","ownerDocument","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","_fixTransition","prevHoverState","_cleanTipClass","getTitle","setElementContent","content","empty","append","text","defaultBsConfig","behavior","arrow","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","find","triggers","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","key","$tip","tabClass","join","popperData","instance","popper","initConfigAnimation","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","_getContent","method","EVENT_ACTIVATE","EVENT_SCROLL","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_DATA_SPY","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_ITEMS","SELECTOR_DROPDOWN_TOGGLE","METHOD_OFFSET","METHOD_POSITION","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targets","map","targetSelector","targetBCR","height","top","sort","pageYOffset","max","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","isActiveTarget","queries","$link","parents","node","scrollSpys","scrollSpysLength","$spy","CLASS_NAME_DROPDOWN_MENU","SELECTOR_ACTIVE_UL","SELECTOR_DROPDOWN_ACTIVE_CHILD","Tab","previous","listElement","itemSelector","makeArray","hiddenEvent","activeElements","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","CLASS_NAME_HIDE","CLASS_NAME_SHOWING","autohide","Toast","_clearTimeout","_close"],"mappings":"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"} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.min.js b/vendor/twbs/bootstrap/dist/js/bootstrap.min.js index cd995a6bd..44d24b32f 100644 --- a/vendor/twbs/bootstrap/dist/js/bootstrap.min.js +++ b/vendor/twbs/bootstrap/dist/js/bootstrap.min.js @@ -1,7 +1,7 @@ /*! - * Bootstrap v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 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),t}function r(){return(r=Object.assign||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}).apply(this,arguments)}function u(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}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("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},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=u,o.default.event.special[d.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(o.default(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var f="alert",c=o.default.fn[f],h=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,"bs.alert"),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("bs.alert");i||(i=new t(this),n.data("bs.alert",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.5.3"}}]),t}();o.default(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),o.default.fn[f]=h._jQueryInterface,o.default.fn[f].Constructor=h,o.default.fn[f].noConflict=function(){return o.default.fn[f]=c,h._jQueryInterface};var g=o.default.fn.button,m=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('input:not([type="hidden"])');if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains("active"))t=!1;else{var a=n.querySelector(".active");a&&o.default(a).removeClass("active")}t&&("checkbox"!==i.type&&"radio"!==i.type||(i.checked=!this._element.classList.contains("active")),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("active")),t&&o.default(this._element).toggleClass("active"))},e.dispose=function(){o.default.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(e,n){return this.each((function(){var i=o.default(this),a=i.data("bs.button");a||(a=new t(this),i.data("bs.button",a)),a.shouldAvoidTriggerChange=n,"toggle"===e&&a[e]()}))},l(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();o.default(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=t.target,n=e;if(o.default(e).hasClass("btn")||(e=o.default(e).closest(".btn")[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var i=e.querySelector('input:not([type="hidden"])');if(i&&(i.hasAttribute("disabled")||i.classList.contains("disabled")))return void t.preventDefault();"INPUT"!==n.tagName&&"LABEL"===e.tagName||m._jQueryInterface.call(o.default(e),"toggle","INPUT"===n.tagName)}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=o.default(t.target).closest(".btn")[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('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}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("active"):l.classList.remove("active")}})),o.default.fn.button=m._jQueryInterface,o.default.fn.button.Constructor=m,o.default.fn.button.noConflict=function(){return o.default.fn.button=g,m._jQueryInterface};var p="carousel",_=".bs.carousel",v=o.default.fn[p],b={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},y={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},E={TOUCH:"touch",PEN:"pen"},w=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("next")},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("prev")},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._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(".active.carousel-item");var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)o.default(this._element).one("slid.bs.carousel",(function(){return e.to(t)}));else{if(n===t)return this.pause(),void this.cycle();var i=t>n?"next":"prev";this._slide(i,this._items[t])}},e.dispose=function(){o.default(this._element).off(_),o.default.removeData(this._element,"bs.carousel"),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({},b,t),d.typeCheckConfig(p,t,y),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&&E[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},n=function(e){t._pointerEvent&&E[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){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=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="next"===t,i="prev"===t,o=this._getItemIndex(e),a=this._items.length-1;if((i&&0===o||n&&o===a)&&!this._config.wrap)return e;var s=(o+("prev"===t?-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(".active.carousel-item")),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("active");var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&o.default(n).addClass("active")}},e._slide=function(t,e){var n,i,a,s=this,l=this._element.querySelector(".active.carousel-item"),r=this._getItemIndex(l),u=e||l&&this._getItemByDirection(t,l),f=this._getItemIndex(u),c=Boolean(this._interval);if("next"===t?(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("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(u,a).isDefaultPrevented()&&l&&u){this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(u);var h=o.default.Event("slid.bs.carousel",{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=parseInt(u.getAttribute("data-interval"),10);g?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=g):this._config.interval=this._config.defaultInterval||this._config.interval;var m=d.getTransitionDurationFromElement(l);o.default(l).one(d.TRANSITION_END,(function(){o.default(u).removeClass(n+" "+i).addClass("active"),o.default(l).removeClass("active "+i+" "+n),s._isSliding=!1,setTimeout((function(){return o.default(s._element).trigger(h)}),0)})).emulateTransitionEnd(m)}else o.default(l).removeClass("active"),o.default(u).addClass("active"),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("bs.carousel"),i=r({},b,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("bs.carousel",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("bs.carousel").to(s),e.preventDefault()}}},l(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return b}}]),t}();o.default(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",w._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]);w._jQueryInterface.call(i,i.data())}})),o.default.fn[p]=w._jQueryInterface,o.default.fn[p].Constructor=w,o.default.fn[p].noConflict=function(){return o.default.fn[p]=v,w._jQueryInterface};var T="collapse",C=o.default.fn[T],S={toggle:!0,parent:""},N={toggle:"boolean",parent:"(string|element)"},D=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('[data-toggle="collapse"]')),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("show")?this.hide():this.show()},e.show=function(){var e,n,i=this;if(!this._isTransitioning&&!o.default(this._element).hasClass("show")&&(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("collapse")}))).length&&(e=null),!(e&&(n=o.default(e).not(this._selector).data("bs.collapse"))&&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("bs.collapse",null));var s=this._getDimension();o.default(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[s]=0,this._triggerArray.length&&o.default(this._triggerArray).removeClass("collapsed").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("collapsing").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("show")){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("collapsing").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);if(null!==l)o.default([].slice.call(document.querySelectorAll(l))).hasClass("show")||o.default(s).addClass("collapsed").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("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(r)}}},e.setTransitioning=function(t){this._isTransitioning=t},e.dispose=function(){o.default.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},e._getConfig=function(t){return(t=r({},S,t)).toggle=Boolean(t.toggle),d.typeCheckConfig(T,t,N),t},e._getDimension=function(){return o.default(this._element).hasClass("width")?"width":"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("show");e.length&&o.default(e).toggleClass("collapsed",!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("bs.collapse"),a=r({},S,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("bs.collapse",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.5.3"}},{key:"Default",get:function(){return S}}]),t}();o.default(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(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("bs.collapse")?"toggle":e.data();D._jQueryInterface.call(t,n)}))})),o.default.fn[T]=D._jQueryInterface,o.default.fn[T].Constructor=D,o.default.fn[T].noConflict=function(){return o.default.fn[T]=C,D._jQueryInterface};var k="dropdown",A=o.default.fn[k],I=new RegExp("38|40|27"),j={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},O={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},x=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("disabled")){var e=o.default(this._menu).hasClass("show");t._clearMenus(),e||this.show(!0)}},e.show=function(e){if(void 0===e&&(e=!1),!(this._element.disabled||o.default(this._element).hasClass("disabled")||o.default(this._menu).hasClass("show"))){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.js (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("show"),o.default(s).toggleClass("show").trigger(o.default.Event("shown.bs.dropdown",n))}}},e.hide=function(){if(!this._element.disabled&&!o.default(this._element).hasClass("disabled")&&o.default(this._menu).hasClass("show")){var e={relatedTarget:this._element},n=o.default.Event("hide.bs.dropdown",e),i=t._getParentFromElement(this._element);o.default(i).trigger(n),n.isDefaultPrevented()||(this._popper&&this._popper.destroy(),o.default(this._menu).toggleClass("show"),o.default(i).toggleClass("show").trigger(o.default.Event("hidden.bs.dropdown",e)))}},e.dispose=function(){o.default.removeData(this._element,"bs.dropdown"),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(k,t,this.constructor.DefaultType),t},e._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}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("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?e="right-start":t.hasClass("dropleft")?e="left-start":o.default(this._menu).hasClass("dropdown-menu-right")&&(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("bs.dropdown");if(n||(n=new t(this,"object"==typeof e?e:null),o.default(this).data("bs.dropdown",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('[data-toggle="dropdown"]')),i=0,a=n.length;i<a;i++){var s=t._getParentFromElement(n[i]),l=o.default(n[i]).data("bs.dropdown"),r={relatedTarget:n[i]};if(e&&"click"===e.type&&(r.clickEvent=e),l){var u=l._menu;if(o.default(s).hasClass("show")&&!(e&&("click"===e.type&&/input|textarea/i.test(e.target.tagName)||"keyup"===e.type&&9===e.which)&&o.default.contains(s,e.target))){var d=o.default.Event("hide.bs.dropdown",r);o.default(s).trigger(d),d.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("show"),o.default(s).removeClass("show").trigger(o.default.Event("hidden.bs.dropdown",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(".dropdown-menu").length):!I.test(e.which))&&!this.disabled&&!o.default(this).hasClass("disabled")){var n=t._getParentFromElement(this),i=o.default(n).hasClass("show");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('[data-toggle="dropdown"]')).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.5.3"}},{key:"Default",get:function(){return j}},{key:"DefaultType",get:function(){return O}}]),t}();o.default(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',x._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",x._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",x._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),x._jQueryInterface.call(o.default(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),o.default.fn[k]=x._jQueryInterface,o.default.fn[k].Constructor=x,o.default.fn[k].noConflict=function(){return o.default.fn[k]=A,x._jQueryInterface};var P=o.default.fn.modal,R={backdrop:!0,keyboard:!0,focus:!0,show:!0},L={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},q=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){o.default(this._element).hasClass("fade")&&(this._isTransitioning=!0);var n=o.default.Event("show.bs.modal",{relatedTarget:t});o.default(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),o.default(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return e.hide(t)})),o.default(this._dialog).on("mousedown.dismiss.bs.modal",(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("fade");if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),o.default(document).off("focusin.bs.modal"),o.default(this._element).removeClass("show"),o.default(this._element).off("click.dismiss.bs.modal"),o.default(this._dialog).off("mousedown.dismiss.bs.modal"),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("focusin.bs.modal"),o.default.removeData(this._element,"bs.modal"),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({},R,t),d.typeCheckConfig("modal",t,L),t},e._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var e=o.default.Event("hidePrevented.bs.modal");if(o.default(this._element).trigger(e),e.isDefaultPrevented())return;var n=this._element.scrollHeight>document.documentElement.clientHeight;n||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");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("modal-static"),n||o.default(t._element).one(d.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,i)})).emulateTransitionEnd(i),this._element.focus()}else this.hide()},e._showElement=function(t){var e=this,n=o.default(this._element).hasClass("fade"),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("show"),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("focusin.bs.modal").on("focusin.bs.modal",(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("keydown.dismiss.bs.modal",(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("keydown.dismiss.bs.modal")},e._setResizeEvent=function(){var t=this;this._isShown?o.default(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):o.default(window).off("resize.bs.modal")},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("modal-open"),t._resetAdjustments(),t._resetScrollbar(),o.default(t._element).trigger("hidden.bs.modal")}))},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("fade")?"fade":"";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("click.dismiss.bs.modal",(function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&e._triggerBackdropTransition()})),n&&d.reflow(this._backdrop),o.default(this._backdrop).addClass("show"),!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("show");var a=function(){e._removeBackdrop(),t&&t()};if(o.default(this._element).hasClass("fade")){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(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),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("modal-open")},e._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));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("bs.modal"),a=r({},R,o.default(this).data(),"object"==typeof e&&e?e:{});if(i||(i=new t(this,a),o.default(this).data("bs.modal",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.5.3"}},{key:"Default",get:function(){return R}}]),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("bs.modal")?"toggle":r({},o.default(e).data(),o.default(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var s=o.default(e).one("show.bs.modal",(function(t){t.isDefaultPrevented()||s.one("hidden.bs.modal",(function(){o.default(n).is(":visible")&&n.focus()}))}));q._jQueryInterface.call(o.default(e),a,this)})),o.default.fn.modal=q._jQueryInterface,o.default.fn.modal.Constructor=q,o.default.fn.modal.noConflict=function(){return o.default.fn.modal=P,q._jQueryInterface};var F=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Q={"*":["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:[]},B=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,H=/^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 U(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===F.indexOf(n)||Boolean(t.nodeValue.match(B)||t.nodeValue.match(H));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,a=i.length;o<a;o++)if(n.match(i[o]))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 M="tooltip",W=o.default.fn[M],V=new RegExp("(^|\\s)bs-tooltip\\S+","g"),z=["sanitize","whiteList","sanitizeFn"],K={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)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},X={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Y={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Q,popperConfig:null},$={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"},J=function(){function t(t,e){if("undefined"==typeof a.default)throw new TypeError("Bootstrap's tooltips require Popper.js (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("show"))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("fade");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("show"),"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),"out"===e&&t._leave(null,t)};if(o.default(this.tip).hasClass("fade")){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(){"show"!==e._hoverState&&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("show"),"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("fade")){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=U(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 X[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="hover"===e?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,i="hover"===e?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?"focus":"hover"]=!0),o.default(e.getTipElement()).hasClass("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){"show"===e._hoverState&&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?"focus":"hover"]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){"out"===e._hoverState&&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!==z.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(M,t,this.constructor.DefaultType),t.sanitize&&(t.template=U(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(V);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("fade"),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("bs.tooltip"),a="object"==typeof e&&e;if((i||!/dispose|hide/.test(e))&&(i||(i=new t(this,a),n.data("bs.tooltip",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.5.3"}},{key:"Default",get:function(){return Y}},{key:"NAME",get:function(){return M}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return $}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return K}}]),t}();o.default.fn[M]=J._jQueryInterface,o.default.fn[M].Constructor=J,o.default.fn[M].noConflict=function(){return o.default.fn[M]=W,J._jQueryInterface};var G="popover",Z=o.default.fn[G],tt=new RegExp("(^|\\s)bs-popover\\S+","g"),et=r({},J.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),nt=r({},J.DefaultType,{content:"(string|element|function)"}),it={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"},ot=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,e.__proto__=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(tt);null!==e&&e.length>0&&t.removeClass(e.join(""))},i._jQueryInterface=function(t){return this.each((function(){var e=o.default(this).data("bs.popover"),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new i(this,n),o.default(this).data("bs.popover",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.5.3"}},{key:"Default",get:function(){return et}},{key:"NAME",get:function(){return G}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return it}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return nt}}]),i}(J);o.default.fn[G]=ot._jQueryInterface,o.default.fn[G].Constructor=ot,o.default.fn[G].noConflict=function(){return o.default.fn[G]=Z,ot._jQueryInterface};var at="scrollspy",st=o.default.fn[at],lt={offset:10,method:"auto",target:""},rt={offset:"number",method:"string",target:"(string|element)"},ut=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":"position",n="auto"===this._config.method?e:this._config.method,i="position"===n?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((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){o.default.removeData(this._element,"bs.scrollspy"),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({},lt,"object"==typeof t&&t?t:{})).target&&d.isElement(t.target)){var e=o.default(t.target).attr("id");e||(e=d.getUID(at),o.default(t.target).attr("id",e)),t.target="#"+e}return d.typeCheckConfig(at,t,rt),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("active"),n.addClass("active")):(n.addClass("active"),n.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),n.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),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("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data("bs.scrollspy");if(n||(n=new t(this,"object"==typeof e&&e),o.default(this).data("bs.scrollspy",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.5.3"}},{key:"Default",get:function(){return lt}}]),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]);ut._jQueryInterface.call(n,n.data())}})),o.default.fn[at]=ut._jQueryInterface,o.default.fn[at].Constructor=ut,o.default.fn[at].noConflict=function(){return o.default.fn[at]=st,ut._jQueryInterface};var dt=o.default.fn.tab,ft=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("active")||o.default(this._element).hasClass("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?"> li > .active":".active";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,"bs.tab"),this._element=null},e._activate=function(t,e,n){var i=this,a=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?o.default(e).children(".active"):o.default(e).find("> li > .active"))[0],s=n&&a&&o.default(a).hasClass("fade"),l=function(){return i._transitionComplete(t,a,n)};if(a&&s){var r=d.getTransitionDurationFromElement(a);o.default(a).removeClass("show").one(d.TRANSITION_END,l).emulateTransitionEnd(r)}else l()},e._transitionComplete=function(t,e,n){if(e){o.default(e).removeClass("active");var i=o.default(e.parentNode).find("> .dropdown-menu .active")[0];i&&o.default(i).removeClass("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(o.default(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),d.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&o.default(t.parentNode).hasClass("dropdown-menu")){var a=o.default(t).closest(".dropdown")[0];if(a){var s=[].slice.call(a.querySelectorAll(".dropdown-toggle"));o.default(s).addClass("active")}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.tab");if(i||(i=new t(this),n.data("bs.tab",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.5.3"}}]),t}();o.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),ft._jQueryInterface.call(o.default(this),"show")})),o.default.fn.tab=ft._jQueryInterface,o.default.fn.tab.Constructor=ft,o.default.fn.tab.noConflict=function(){return o.default.fn.tab=dt,ft._jQueryInterface};var ct=o.default.fn.toast,ht={animation:"boolean",autohide:"boolean",delay:"number"},gt={animation:!0,autohide:!0,delay:500},mt=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("showing"),t._element.classList.add("show"),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("hide"),d.reflow(this._element),this._element.classList.add("showing"),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("show")){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("show")&&this._element.classList.remove("show"),o.default(this._element).off("click.dismiss.bs.toast"),o.default.removeData(this._element,"bs.toast"),this._element=null,this._config=null},e._getConfig=function(t){return t=r({},gt,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("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add("hide"),o.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),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("bs.toast");if(i||(i=new t(this,"object"==typeof e&&e),n.data("bs.toast",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.5.3"}},{key:"DefaultType",get:function(){return ht}},{key:"Default",get:function(){return gt}}]),t}();o.default.fn.toast=mt._jQueryInterface,o.default.fn.toast.Constructor=mt,o.default.fn.toast.noConflict=function(){return o.default.fn.toast=ct,mt._jQueryInterface},t.Alert=h,t.Button=m,t.Carousel=w,t.Collapse=D,t.Dropdown=x,t.Modal=q,t.Popover=ot,t.Scrollspy=ut,t.Tab=ft,t.Toast=mt,t.Tooltip=J,t.Util=d,Object.defineProperty(t,"__esModule",{value:!0})})); +!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),t}function r(){return(r=Object.assign||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}).apply(this,arguments)}function u(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}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("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},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=u,o.default.event.special[d.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(o.default(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var f="alert",c=o.default.fn[f],h=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,"bs.alert"),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("bs.alert");i||(i=new t(this),n.data("bs.alert",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.0"}}]),t}();o.default(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),o.default.fn[f]=h._jQueryInterface,o.default.fn[f].Constructor=h,o.default.fn[f].noConflict=function(){return o.default.fn[f]=c,h._jQueryInterface};var g=o.default.fn.button,m=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('input:not([type="hidden"])');if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains("active"))t=!1;else{var a=n.querySelector(".active");a&&o.default(a).removeClass("active")}t&&("checkbox"!==i.type&&"radio"!==i.type||(i.checked=!this._element.classList.contains("active")),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("active")),t&&o.default(this._element).toggleClass("active"))},e.dispose=function(){o.default.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(e,n){return this.each((function(){var i=o.default(this),a=i.data("bs.button");a||(a=new t(this),i.data("bs.button",a)),a.shouldAvoidTriggerChange=n,"toggle"===e&&a[e]()}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}}]),t}();o.default(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=t.target,n=e;if(o.default(e).hasClass("btn")||(e=o.default(e).closest(".btn")[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var i=e.querySelector('input:not([type="hidden"])');if(i&&(i.hasAttribute("disabled")||i.classList.contains("disabled")))return void t.preventDefault();"INPUT"!==n.tagName&&"LABEL"===e.tagName||m._jQueryInterface.call(o.default(e),"toggle","INPUT"===n.tagName)}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=o.default(t.target).closest(".btn")[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('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}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("active"):l.classList.remove("active")}})),o.default.fn.button=m._jQueryInterface,o.default.fn.button.Constructor=m,o.default.fn.button.noConflict=function(){return o.default.fn.button=g,m._jQueryInterface};var p="carousel",_=".bs.carousel",v=o.default.fn[p],b={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},y={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},E={TOUCH:"touch",PEN:"pen"},w=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("next")},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("prev")},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(".active.carousel-item");var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)o.default(this._element).one("slid.bs.carousel",(function(){return e.to(t)}));else{if(n===t)return this.pause(),void this.cycle();var i=t>n?"next":"prev";this._slide(i,this._items[t])}},e.dispose=function(){o.default(this._element).off(_),o.default.removeData(this._element,"bs.carousel"),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({},b,t),d.typeCheckConfig(p,t,y),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&&E[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},n=function(e){t._pointerEvent&&E[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){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=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="next"===t,i="prev"===t,o=this._getItemIndex(e),a=this._items.length-1;if((i&&0===o||n&&o===a)&&!this._config.wrap)return e;var s=(o+("prev"===t?-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(".active.carousel-item")),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("active");var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&o.default(n).addClass("active")}},e._updateInterval=function(){var t=this._activeElement||this._element.querySelector(".active.carousel-item");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(".active.carousel-item"),r=this._getItemIndex(l),u=e||l&&this._getItemByDirection(t,l),f=this._getItemIndex(u),c=Boolean(this._interval);if("next"===t?(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("active"))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("slid.bs.carousel",{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("active"),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("active"),o.default(u).addClass("active"),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("bs.carousel"),i=r({},b,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("bs.carousel",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("bs.carousel").to(s),e.preventDefault()}}},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return b}}]),t}();o.default(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",w._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]);w._jQueryInterface.call(i,i.data())}})),o.default.fn[p]=w._jQueryInterface,o.default.fn[p].Constructor=w,o.default.fn[p].noConflict=function(){return o.default.fn[p]=v,w._jQueryInterface};var T="collapse",C=o.default.fn[T],S={toggle:!0,parent:""},N={toggle:"boolean",parent:"(string|element)"},D=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('[data-toggle="collapse"]')),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("show")?this.hide():this.show()},e.show=function(){var e,n,i=this;if(!this._isTransitioning&&!o.default(this._element).hasClass("show")&&(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("collapse")}))).length&&(e=null),!(e&&(n=o.default(e).not(this._selector).data("bs.collapse"))&&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("bs.collapse",null));var s=this._getDimension();o.default(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[s]=0,this._triggerArray.length&&o.default(this._triggerArray).removeClass("collapsed").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("collapsing").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("show")){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("collapsing").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);if(null!==l)o.default([].slice.call(document.querySelectorAll(l))).hasClass("show")||o.default(s).addClass("collapsed").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("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(r)}}},e.setTransitioning=function(t){this._isTransitioning=t},e.dispose=function(){o.default.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},e._getConfig=function(t){return(t=r({},S,t)).toggle=Boolean(t.toggle),d.typeCheckConfig(T,t,N),t},e._getDimension=function(){return o.default(this._element).hasClass("width")?"width":"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("show");e.length&&o.default(e).toggleClass("collapsed",!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("bs.collapse"),a=r({},S,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("bs.collapse",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.0"}},{key:"Default",get:function(){return S}}]),t}();o.default(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(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("bs.collapse")?"toggle":e.data();D._jQueryInterface.call(t,n)}))})),o.default.fn[T]=D._jQueryInterface,o.default.fn[T].Constructor=D,o.default.fn[T].noConflict=function(){return o.default.fn[T]=C,D._jQueryInterface};var k="dropdown",A=o.default.fn[k],I=new RegExp("38|40|27"),j={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},O={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},x=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("disabled")){var e=o.default(this._menu).hasClass("show");t._clearMenus(),e||this.show(!0)}},e.show=function(e){if(void 0===e&&(e=!1),!(this._element.disabled||o.default(this._element).hasClass("disabled")||o.default(this._menu).hasClass("show"))){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("show"),o.default(s).toggleClass("show").trigger(o.default.Event("shown.bs.dropdown",n))}}},e.hide=function(){if(!this._element.disabled&&!o.default(this._element).hasClass("disabled")&&o.default(this._menu).hasClass("show")){var e={relatedTarget:this._element},n=o.default.Event("hide.bs.dropdown",e),i=t._getParentFromElement(this._element);o.default(i).trigger(n),n.isDefaultPrevented()||(this._popper&&this._popper.destroy(),o.default(this._menu).toggleClass("show"),o.default(i).toggleClass("show").trigger(o.default.Event("hidden.bs.dropdown",e)))}},e.dispose=function(){o.default.removeData(this._element,"bs.dropdown"),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(k,t,this.constructor.DefaultType),t},e._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}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("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?e="right-start":t.hasClass("dropleft")?e="left-start":o.default(this._menu).hasClass("dropdown-menu-right")&&(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("bs.dropdown");if(n||(n=new t(this,"object"==typeof e?e:null),o.default(this).data("bs.dropdown",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('[data-toggle="dropdown"]')),i=0,a=n.length;i<a;i++){var s=t._getParentFromElement(n[i]),l=o.default(n[i]).data("bs.dropdown"),r={relatedTarget:n[i]};if(e&&"click"===e.type&&(r.clickEvent=e),l){var u=l._menu;if(o.default(s).hasClass("show")&&!(e&&("click"===e.type&&/input|textarea/i.test(e.target.tagName)||"keyup"===e.type&&9===e.which)&&o.default.contains(s,e.target))){var d=o.default.Event("hide.bs.dropdown",r);o.default(s).trigger(d),d.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("show"),o.default(s).removeClass("show").trigger(o.default.Event("hidden.bs.dropdown",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(".dropdown-menu").length):!I.test(e.which))&&!this.disabled&&!o.default(this).hasClass("disabled")){var n=t._getParentFromElement(this),i=o.default(n).hasClass("show");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('[data-toggle="dropdown"]')).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.0"}},{key:"Default",get:function(){return j}},{key:"DefaultType",get:function(){return O}}]),t}();o.default(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',x._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",x._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",x._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),x._jQueryInterface.call(o.default(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),o.default.fn[k]=x._jQueryInterface,o.default.fn[k].Constructor=x,o.default.fn[k].noConflict=function(){return o.default.fn[k]=A,x._jQueryInterface};var P=o.default.fn.modal,R={backdrop:!0,keyboard:!0,focus:!0,show:!0},L={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},q=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){o.default(this._element).hasClass("fade")&&(this._isTransitioning=!0);var n=o.default.Event("show.bs.modal",{relatedTarget:t});o.default(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),o.default(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return e.hide(t)})),o.default(this._dialog).on("mousedown.dismiss.bs.modal",(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("fade");if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),o.default(document).off("focusin.bs.modal"),o.default(this._element).removeClass("show"),o.default(this._element).off("click.dismiss.bs.modal"),o.default(this._dialog).off("mousedown.dismiss.bs.modal"),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("focusin.bs.modal"),o.default.removeData(this._element,"bs.modal"),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({},R,t),d.typeCheckConfig("modal",t,L),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("modal-static");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("modal-static"),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("fade"),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("show"),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("focusin.bs.modal").on("focusin.bs.modal",(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("keydown.dismiss.bs.modal",(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("keydown.dismiss.bs.modal")},e._setResizeEvent=function(){var t=this;this._isShown?o.default(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):o.default(window).off("resize.bs.modal")},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("modal-open"),t._resetAdjustments(),t._resetScrollbar(),o.default(t._element).trigger("hidden.bs.modal")}))},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("fade")?"fade":"";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("click.dismiss.bs.modal",(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("show"),!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("show");var a=function(){e._removeBackdrop(),t&&t()};if(o.default(this._element).hasClass("fade")){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(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),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("modal-open")},e._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));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("bs.modal"),a=r({},R,o.default(this).data(),"object"==typeof e&&e?e:{});if(i||(i=new t(this,a),o.default(this).data("bs.modal",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.0"}},{key:"Default",get:function(){return R}}]),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("bs.modal")?"toggle":r({},o.default(e).data(),o.default(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var s=o.default(e).one("show.bs.modal",(function(t){t.isDefaultPrevented()||s.one("hidden.bs.modal",(function(){o.default(n).is(":visible")&&n.focus()}))}));q._jQueryInterface.call(o.default(e),a,this)})),o.default.fn.modal=q._jQueryInterface,o.default.fn.modal.Constructor=q,o.default.fn.modal.noConflict=function(){return o.default.fn.modal=P,q._jQueryInterface};var F=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Q={"*":["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:[]},B=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,H=/^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 U(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===F.indexOf(n)||Boolean(t.nodeValue.match(B)||t.nodeValue.match(H));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,a=i.length;o<a;o++)if(n.match(i[o]))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 M="tooltip",W=o.default.fn[M],V=new RegExp("(^|\\s)bs-tooltip\\S+","g"),z=["sanitize","whiteList","sanitizeFn"],K={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)"},X={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Y={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',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:Q,popperConfig:null},$={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"},J=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("show"))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("fade");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("show"),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),"out"===e&&t._leave(null,t)};if(o.default(this.tip).hasClass("fade")){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(){"show"!==e._hoverState&&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("show"),"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("fade")){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=U(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 X[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="hover"===e?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,i="hover"===e?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?"focus":"hover"]=!0),o.default(e.getTipElement()).hasClass("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){"show"===e._hoverState&&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?"focus":"hover"]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){"out"===e._hoverState&&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!==z.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(M,t,this.constructor.DefaultType),t.sanitize&&(t.template=U(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(V);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("fade"),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("bs.tooltip"),a="object"==typeof e&&e;if((i||!/dispose|hide/.test(e))&&(i||(i=new t(this,a),n.data("bs.tooltip",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.0"}},{key:"Default",get:function(){return Y}},{key:"NAME",get:function(){return M}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return $}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return K}}]),t}();o.default.fn[M]=J._jQueryInterface,o.default.fn[M].Constructor=J,o.default.fn[M].noConflict=function(){return o.default.fn[M]=W,J._jQueryInterface};var G="popover",Z=o.default.fn[G],tt=new RegExp("(^|\\s)bs-popover\\S+","g"),et=r({},J.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),nt=r({},J.DefaultType,{content:"(string|element|function)"}),it={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"},ot=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,e.__proto__=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(tt);null!==e&&e.length>0&&t.removeClass(e.join(""))},i._jQueryInterface=function(t){return this.each((function(){var e=o.default(this).data("bs.popover"),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new i(this,n),o.default(this).data("bs.popover",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.0"}},{key:"Default",get:function(){return et}},{key:"NAME",get:function(){return G}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return it}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return nt}}]),i}(J);o.default.fn[G]=ot._jQueryInterface,o.default.fn[G].Constructor=ot,o.default.fn[G].noConflict=function(){return o.default.fn[G]=Z,ot._jQueryInterface};var at="scrollspy",st=o.default.fn[at],lt={offset:10,method:"auto",target:""},rt={offset:"number",method:"string",target:"(string|element)"},ut=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":"position",n="auto"===this._config.method?e:this._config.method,i="position"===n?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((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){o.default.removeData(this._element,"bs.scrollspy"),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({},lt,"object"==typeof t&&t?t:{})).target&&d.isElement(t.target)){var e=o.default(t.target).attr("id");e||(e=d.getUID(at),o.default(t.target).attr("id",e)),t.target="#"+e}return d.typeCheckConfig(at,t,rt),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("active"),n.addClass("active")):(n.addClass("active"),n.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),n.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),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("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data("bs.scrollspy");if(n||(n=new t(this,"object"==typeof e&&e),o.default(this).data("bs.scrollspy",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.0"}},{key:"Default",get:function(){return lt}}]),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]);ut._jQueryInterface.call(n,n.data())}})),o.default.fn[at]=ut._jQueryInterface,o.default.fn[at].Constructor=ut,o.default.fn[at].noConflict=function(){return o.default.fn[at]=st,ut._jQueryInterface};var dt=o.default.fn.tab,ft=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("active")||o.default(this._element).hasClass("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?"> li > .active":".active";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,"bs.tab"),this._element=null},e._activate=function(t,e,n){var i=this,a=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?o.default(e).children(".active"):o.default(e).find("> li > .active"))[0],s=n&&a&&o.default(a).hasClass("fade"),l=function(){return i._transitionComplete(t,a,n)};if(a&&s){var r=d.getTransitionDurationFromElement(a);o.default(a).removeClass("show").one(d.TRANSITION_END,l).emulateTransitionEnd(r)}else l()},e._transitionComplete=function(t,e,n){if(e){o.default(e).removeClass("active");var i=o.default(e.parentNode).find("> .dropdown-menu .active")[0];i&&o.default(i).removeClass("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(o.default(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),d.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&o.default(t.parentNode).hasClass("dropdown-menu")){var a=o.default(t).closest(".dropdown")[0];if(a){var s=[].slice.call(a.querySelectorAll(".dropdown-toggle"));o.default(s).addClass("active")}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.tab");if(i||(i=new t(this),n.data("bs.tab",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.0"}}]),t}();o.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),ft._jQueryInterface.call(o.default(this),"show")})),o.default.fn.tab=ft._jQueryInterface,o.default.fn.tab.Constructor=ft,o.default.fn.tab.noConflict=function(){return o.default.fn.tab=dt,ft._jQueryInterface};var ct=o.default.fn.toast,ht={animation:"boolean",autohide:"boolean",delay:"number"},gt={animation:!0,autohide:!0,delay:500},mt=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("showing"),t._element.classList.add("show"),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("hide"),d.reflow(this._element),this._element.classList.add("showing"),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("show")){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("show")&&this._element.classList.remove("show"),o.default(this._element).off("click.dismiss.bs.toast"),o.default.removeData(this._element,"bs.toast"),this._element=null,this._config=null},e._getConfig=function(t){return t=r({},gt,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("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add("hide"),o.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),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("bs.toast");if(i||(i=new t(this,"object"==typeof e&&e),n.data("bs.toast",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.0"}},{key:"DefaultType",get:function(){return ht}},{key:"Default",get:function(){return gt}}]),t}();o.default.fn.toast=mt._jQueryInterface,o.default.fn.toast.Constructor=mt,o.default.fn.toast.noConflict=function(){return o.default.fn.toast=ct,mt._jQueryInterface},t.Alert=h,t.Button=m,t.Carousel=w,t.Collapse=D,t.Dropdown=x,t.Modal=q,t.Popover=ot,t.Scrollspy=ut,t.Tab=ft,t.Toast=mt,t.Tooltip=J,t.Util=d,Object.defineProperty(t,"__esModule",{value:!0})})); //# sourceMappingURL=bootstrap.min.js.map \ No newline at end of file diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.min.js.map b/vendor/twbs/bootstrap/dist/js/bootstrap.min.js.map index 69c273671..16db08112 100644 --- a/vendor/twbs/bootstrap/dist/js/bootstrap.min.js.map +++ b/vendor/twbs/bootstrap/dist/js/bootstrap.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../js/src/util.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/modal.js","../../js/src/tools/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"names":["transitionEndEmulator","duration","_this","this","called","$","one","Util","TRANSITION_END","setTimeout","triggerTransitionEnd","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","trigger","supportsTransitionEnd","Boolean","isElement","obj","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","call","expectedTypes","value","valueType","toString","match","toLowerCase","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","TypeError","version","fn","jquery","emulateTransitionEnd","event","special","bindType","delegateType","handle","target","is","handleObj","handler","apply","arguments","NAME","JQUERY_NO_CONFLICT","Alert","_element","close","rootElement","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","parent","closest","closeEvent","Event","removeClass","hasClass","_destroyElement","detach","remove","_jQueryInterface","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","Constructor","noConflict","Button","shouldAvoidTriggerChange","toggle","triggerChangeEvent","addAriaPressed","input","type","checked","classList","contains","activeElement","focus","hasAttribute","setAttribute","toggleClass","avoidTriggerChange","button","initialButton","inputBtn","tagName","window","buttons","slice","querySelectorAll","i","len","length","add","EVENT_KEY","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","clearInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","direction","off","_extends","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","start","originalEvent","pointerType","clientX","touches","end","clearTimeout","e","move","which","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","children","addClass","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","nextElementInterval","parseInt","defaultInterval","CLASS_NAME_ACTIVE","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","not","startEvent","dimension","_getDimension","style","attr","setTransitioning","scrollSize","CLASS_NAME_COLLAPSE","getBoundingClientRect","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","selectors","$target","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","offset","flip","boundary","reference","display","popperConfig","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","Popper","referenceElement","_getPopperConfig","body","noop","hideEvent","destroy","update","scheduleUpdate","stopPropagation","constructor","_getPlacement","$parentDropdown","placement","_getOffset","offsets","modifiers","enabled","preventOverflow","boundariesElement","applyStyle","toggles","context","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","EVENT_CLICK_DATA_API","backdrop","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","forEach","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","clientHeight","overflowY","modalTransitionDuration","modalBody","Node","ELEMENT_NODE","appendChild","removeAttribute","scrollTop","_enforceFocus","shownEvent","transitionComplete","_this5","has","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","callback","_this9","animate","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","paddingLeft","paddingRight","rect","round","left","right","innerWidth","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","marginRight","calculatedMargin","padding","elements","margin","scrollDiv","scrollbarWidth","width","clientWidth","removeChild","_this11","uriAttrs","DefaultWhitelist","*","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","DOMParser","parseFromString","whitelistKeys","keys","_loop","el","elName","nodeName","attributeList","attributes","whitelistedAttributes","concat","allowedAttributeList","attrName","nodeValue","regExp","attrRegex","allowedAttribute","innerHTML","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","animation","template","title","delay","html","container","fallbackPlacement","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","dataKey","DATA_KEY","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","ownerDocument","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","complete","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","setElementContent","CLASS_NAME_FADE","content","text","empty","append","behavior","arrow","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","find","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","key","$tip","tabClass","join","popperData","instance","popper","initConfigAnimation","Popover","_getContent","method","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","map","targetSelector","targetBCR","height","top","sort","pageYOffset","max","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","queries","$link","parents","SELECTOR_NAV_LINKS","node","scrollSpys","$spy","Tab","previous","listElement","itemSelector","makeArray","hiddenEvent","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","autohide","Toast","_clearTimeout","_close"],"mappings":"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","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (_) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n this.shouldAvoidTriggerChange = false\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $(input).trigger('change')\n }\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $element.data(DATA_KEY, data)\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n }\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n const $element = $(this._element)\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n DIRECTION_NEXT :\n DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, event => this.pause(event))\n .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, e => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n $(this._element).on(EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter(foundElem => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$element.data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this._config.offset(data.offsets, this._element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n if (this._config.backdrop === 'static') {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n } else {\n this.hide()\n }\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n}\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n}\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: data => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: data => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this.config.offset(data.offsets, this.element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n event => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, event => this._enter(event))\n .on(eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div></div>'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map(element => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .addClass(CLASS_NAME_ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(SELECTOR_NAV_ITEMS)\n .children(SELECTOR_NAV_LINKS)\n .addClass(CLASS_NAME_ACTIVE)\n }\n\n $(this._scrollElement).trigger(EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = '> li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(CLASS_NAME_ACTIVE) ||\n $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(EVENT_HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(EVENT_HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n $(container).find(SELECTOR_ACTIVE_UL) :\n $(container).children(SELECTOR_ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(CLASS_NAME_SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(CLASS_NAME_ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n SELECTOR_DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(CLASS_NAME_ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(CLASS_NAME_ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n Util.reflow(element)\n\n if (element.classList.contains(CLASS_NAME_FADE)) {\n element.classList.add(CLASS_NAME_SHOW)\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 500\n}\n\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast {\n constructor(element, config) {\n this._element = element\n this._config = this._getConfig(config)\n this._timeout = null\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n show() {\n const showEvent = $.Event(EVENT_SHOW)\n\n $(this._element).trigger(showEvent)\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n $(this._element).trigger(EVENT_SHOWN)\n\n if (this._config.autohide) {\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n Util.reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._close()\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n\n $.removeData(this._element, DATA_KEY)\n this._element = null\n this._config = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...$(this._element).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _setListeners() {\n $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n }\n\n _close() {\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n $(this._element).trigger(EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new Toast(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Toast._jQueryInterface\n$.fn[NAME].Constructor = Toast\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Toast._jQueryInterface\n}\n\nexport default Toast\n"]} \ No newline at end of file +{"version":3,"sources":["../../js/src/util.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/modal.js","../../js/src/tools/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"names":["transitionEndEmulator","duration","_this","this","called","$","one","Util","TRANSITION_END","setTimeout","triggerTransitionEnd","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","trigger","supportsTransitionEnd","Boolean","isElement","obj","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","call","expectedTypes","value","valueType","toString","match","toLowerCase","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","TypeError","version","fn","jquery","emulateTransitionEnd","event","special","bindType","delegateType","handle","target","is","handleObj","handler","apply","arguments","NAME","JQUERY_NO_CONFLICT","Alert","_element","close","rootElement","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","parent","closest","closeEvent","Event","removeClass","hasClass","_destroyElement","detach","remove","_jQueryInterface","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","Constructor","noConflict","Button","shouldAvoidTriggerChange","toggle","triggerChangeEvent","addAriaPressed","input","type","checked","classList","contains","activeElement","focus","hasAttribute","setAttribute","toggleClass","avoidTriggerChange","button","initialButton","inputBtn","tagName","window","buttons","slice","querySelectorAll","i","len","length","add","EVENT_KEY","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","clearInterval","_updateInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","direction","off","_extends","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","start","originalEvent","pointerType","clientX","touches","end","clearTimeout","e","move","which","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","children","addClass","elementInterval","parseInt","defaultInterval","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","CLASS_NAME_ACTIVE","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","not","startEvent","dimension","_getDimension","style","attr","setTransitioning","scrollSize","CLASS_NAME_COLLAPSE","getBoundingClientRect","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","selectors","$target","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","offset","flip","boundary","reference","display","popperConfig","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","Popper","referenceElement","_getPopperConfig","body","noop","hideEvent","destroy","update","scheduleUpdate","stopPropagation","constructor","_getPlacement","$parentDropdown","placement","_getOffset","offsets","modifiers","enabled","preventOverflow","boundariesElement","applyStyle","toggles","context","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","EVENT_CLICK_DATA_API","backdrop","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","forEach","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","clientHeight","overflowY","modalTransitionDuration","modalBody","Node","ELEMENT_NODE","appendChild","removeAttribute","scrollTop","_enforceFocus","shownEvent","transitionComplete","_this5","has","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","callback","_this9","animate","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","paddingLeft","paddingRight","rect","round","left","right","innerWidth","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","marginRight","calculatedMargin","padding","elements","margin","scrollDiv","scrollbarWidth","width","clientWidth","removeChild","_this11","uriAttrs","DefaultWhitelist","*","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","DOMParser","parseFromString","whitelistKeys","keys","_loop","el","elName","nodeName","attributeList","attributes","whitelistedAttributes","concat","allowedAttributeList","attrName","nodeValue","regExp","attrRegex","allowedAttribute","innerHTML","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","animation","template","title","delay","html","container","fallbackPlacement","customClass","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","dataKey","DATA_KEY","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","ownerDocument","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","complete","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","setElementContent","CLASS_NAME_FADE","content","text","empty","append","behavior","arrow","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","find","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","key","$tip","tabClass","join","popperData","instance","popper","initConfigAnimation","Popover","_getContent","method","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","map","targetSelector","targetBCR","height","top","sort","pageYOffset","max","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","queries","$link","parents","SELECTOR_NAV_LINKS","node","scrollSpys","$spy","Tab","previous","listElement","itemSelector","makeArray","hiddenEvent","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","autohide","Toast","_clearTimeout","_close"],"mappings":"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","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (_) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n this.shouldAvoidTriggerChange = false\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $(input).trigger('change')\n }\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $element.data(DATA_KEY, data)\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n }\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n const $element = $(this._element)\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._updateInterval()\n\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n DIRECTION_NEXT :\n DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, event => this.pause(event))\n .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, e => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n $(this._element).on(EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n if (!element) {\n return\n }\n\n const elementInterval = parseInt(element.getAttribute('data-interval'), 10)\n\n if (elementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = elementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n this._activeElement = nextElement\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter(foundElem => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$element.data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Totally disable Popper for Dropdowns in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this._config.offset(data.offsets, this._element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n customClass: '(string|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n}\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n customClass: '',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n}\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n $(tip).addClass(this.config.customClass)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: data => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: data => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this.config.offset(data.offsets, this.element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n event => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, event => this._enter(event))\n .on(eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div></div>'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map(element => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .addClass(CLASS_NAME_ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(SELECTOR_NAV_ITEMS)\n .children(SELECTOR_NAV_LINKS)\n .addClass(CLASS_NAME_ACTIVE)\n }\n\n $(this._scrollElement).trigger(EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = '> li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(CLASS_NAME_ACTIVE) ||\n $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(EVENT_HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(EVENT_HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n $(container).find(SELECTOR_ACTIVE_UL) :\n $(container).children(SELECTOR_ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(CLASS_NAME_SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(CLASS_NAME_ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n SELECTOR_DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(CLASS_NAME_ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(CLASS_NAME_ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n Util.reflow(element)\n\n if (element.classList.contains(CLASS_NAME_FADE)) {\n element.classList.add(CLASS_NAME_SHOW)\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 500\n}\n\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast {\n constructor(element, config) {\n this._element = element\n this._config = this._getConfig(config)\n this._timeout = null\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n show() {\n const showEvent = $.Event(EVENT_SHOW)\n\n $(this._element).trigger(showEvent)\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n $(this._element).trigger(EVENT_SHOWN)\n\n if (this._config.autohide) {\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n Util.reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._close()\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n\n $.removeData(this._element, DATA_KEY)\n this._element = null\n this._config = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...$(this._element).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _setListeners() {\n $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n }\n\n _close() {\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n $(this._element).trigger(EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new Toast(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Toast._jQueryInterface\n$.fn[NAME].Constructor = Toast\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Toast._jQueryInterface\n}\n\nexport default Toast\n"]} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/js/dist/alert.js b/vendor/twbs/bootstrap/js/dist/alert.js index 3c3b376cf..2f5d80f12 100644 --- a/vendor/twbs/bootstrap/js/dist/alert.js +++ b/vendor/twbs/bootstrap/js/dist/alert.js @@ -1,11 +1,11 @@ /*! - * Bootstrap alert.js v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap alert.js v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : - typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) : + typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Alert = factory(global.jQuery, global.Util)); }(this, (function ($, Util) { 'use strict'; @@ -14,9 +14,22 @@ var $__default = /*#__PURE__*/_interopDefaultLegacy($); var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util); - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * ------------------------------------------------------------------------ * Constants @@ -24,7 +37,7 @@ */ var NAME = 'alert'; - var VERSION = '4.5.3'; + var VERSION = '4.6.0'; var DATA_KEY = 'bs.alert'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; diff --git a/vendor/twbs/bootstrap/js/dist/alert.js.map b/vendor/twbs/bootstrap/js/dist/alert.js.map index bc2be9aad..54e7e2ddb 100644 --- a/vendor/twbs/bootstrap/js/dist/alert.js.map +++ b/vendor/twbs/bootstrap/js/dist/alert.js.map @@ -1 +1 @@ -{"version":3,"file":"alert.js","sources":["../src/alert.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","SELECTOR_DISMISS","EVENT_CLOSE","EVENT_CLOSED","EVENT_CLICK_DATA_API","CLASS_NAME_ALERT","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","element","_element","close","rootElement","_getRootElement","customEvent","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","selector","Util","getSelectorFromElement","parent","document","querySelector","closest","closeEvent","Event","trigger","removeClass","hasClass","_destroyElement","transitionDuration","getTransitionDurationFromElement","one","TRANSITION_END","event","emulateTransitionEnd","detach","remove","_jQueryInterface","config","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"alert.js","sources":["../src/alert.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","SELECTOR_DISMISS","EVENT_CLOSE","EVENT_CLOSED","EVENT_CLICK_DATA_API","CLASS_NAME_ALERT","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","element","_element","close","rootElement","_getRootElement","customEvent","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","selector","Util","getSelectorFromElement","parent","document","querySelector","closest","closeEvent","Event","trigger","removeClass","hasClass","_destroyElement","transitionDuration","getTransitionDurationFromElement","one","TRANSITION_END","event","emulateTransitionEnd","detach","remove","_jQueryInterface","config","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/js/dist/button.js b/vendor/twbs/bootstrap/js/dist/button.js index 722c7c41b..b91fd0731 100644 --- a/vendor/twbs/bootstrap/js/dist/button.js +++ b/vendor/twbs/bootstrap/js/dist/button.js @@ -1,6 +1,6 @@ /*! - * Bootstrap button.js v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap button.js v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { @@ -13,9 +13,22 @@ var $__default = /*#__PURE__*/_interopDefaultLegacy($); - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * ------------------------------------------------------------------------ * Constants @@ -23,7 +36,7 @@ */ var NAME = 'button'; - var VERSION = '4.5.3'; + var VERSION = '4.6.0'; var DATA_KEY = 'bs.button'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; diff --git a/vendor/twbs/bootstrap/js/dist/button.js.map b/vendor/twbs/bootstrap/js/dist/button.js.map index 5220b0052..71770938b 100644 --- a/vendor/twbs/bootstrap/js/dist/button.js.map +++ b/vendor/twbs/bootstrap/js/dist/button.js.map @@ -1 +1 @@ -{"version":3,"file":"button.js","sources":["../src/button.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n this.shouldAvoidTriggerChange = false\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $(input).trigger('change')\n }\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $element.data(DATA_KEY, data)\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n }\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","CLASS_NAME_ACTIVE","CLASS_NAME_BUTTON","CLASS_NAME_FOCUS","SELECTOR_DATA_TOGGLE_CARROT","SELECTOR_DATA_TOGGLES","SELECTOR_DATA_TOGGLE","SELECTOR_DATA_TOGGLES_BUTTONS","SELECTOR_INPUT","SELECTOR_ACTIVE","SELECTOR_BUTTON","EVENT_CLICK_DATA_API","EVENT_FOCUS_BLUR_DATA_API","EVENT_LOAD_DATA_API","Button","element","_element","shouldAvoidTriggerChange","toggle","triggerChangeEvent","addAriaPressed","rootElement","closest","input","querySelector","type","checked","classList","contains","activeElement","removeClass","trigger","focus","hasAttribute","setAttribute","toggleClass","dispose","removeData","_jQueryInterface","config","avoidTriggerChange","each","$element","data","document","on","event","button","target","initialButton","hasClass","preventDefault","inputBtn","tagName","call","test","window","buttons","slice","querySelectorAll","i","len","length","add","remove","getAttribute","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"button.js","sources":["../src/button.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n this.shouldAvoidTriggerChange = false\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $(input).trigger('change')\n }\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $element.data(DATA_KEY, data)\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n }\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","CLASS_NAME_ACTIVE","CLASS_NAME_BUTTON","CLASS_NAME_FOCUS","SELECTOR_DATA_TOGGLE_CARROT","SELECTOR_DATA_TOGGLES","SELECTOR_DATA_TOGGLE","SELECTOR_DATA_TOGGLES_BUTTONS","SELECTOR_INPUT","SELECTOR_ACTIVE","SELECTOR_BUTTON","EVENT_CLICK_DATA_API","EVENT_FOCUS_BLUR_DATA_API","EVENT_LOAD_DATA_API","Button","element","_element","shouldAvoidTriggerChange","toggle","triggerChangeEvent","addAriaPressed","rootElement","closest","input","querySelector","type","checked","classList","contains","activeElement","removeClass","trigger","focus","hasAttribute","setAttribute","toggleClass","dispose","removeData","_jQueryInterface","config","avoidTriggerChange","each","$element","data","document","on","event","button","target","initialButton","hasClass","preventDefault","inputBtn","tagName","call","test","window","buttons","slice","querySelectorAll","i","len","length","add","remove","getAttribute","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/js/dist/carousel.js b/vendor/twbs/bootstrap/js/dist/carousel.js index b9d1ec6d8..4520f5409 100644 --- a/vendor/twbs/bootstrap/js/dist/carousel.js +++ b/vendor/twbs/bootstrap/js/dist/carousel.js @@ -1,11 +1,11 @@ /*! - * Bootstrap carousel.js v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap carousel.js v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : - typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) : + typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Carousel = factory(global.jQuery, global.Util)); }(this, (function ($, Util) { 'use strict'; @@ -14,11 +14,40 @@ var $__default = /*#__PURE__*/_interopDefaultLegacy($); var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util); - function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); + } - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * ------------------------------------------------------------------------ * Constants @@ -26,7 +55,7 @@ */ var NAME = 'carousel'; - var VERSION = '4.5.3'; + var VERSION = '4.6.0'; var DATA_KEY = 'bs.carousel'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; @@ -166,6 +195,8 @@ } if (this._config.interval && !this._isPaused) { + this._updateInterval(); + this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); } }; @@ -407,6 +438,23 @@ } }; + _proto._updateInterval = function _updateInterval() { + var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM); + + if (!element) { + return; + } + + var elementInterval = parseInt(element.getAttribute('data-interval'), 10); + + if (elementInterval) { + this._config.defaultInterval = this._config.defaultInterval || this._config.interval; + this._config.interval = elementInterval; + } else { + this._config.interval = this._config.defaultInterval || this._config.interval; + } + }; + _proto._slide = function _slide(direction, element) { var _this4 = this; @@ -457,6 +505,7 @@ this._setActiveIndicatorElement(nextElement); + this._activeElement = nextElement; var slidEvent = $__default['default'].Event(EVENT_SLID, { relatedTarget: nextElement, direction: eventDirectionName, @@ -469,15 +518,6 @@ Util__default['default'].reflow(nextElement); $__default['default'](activeElement).addClass(directionalClassName); $__default['default'](nextElement).addClass(directionalClassName); - var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); - - if (nextElementInterval) { - this._config.defaultInterval = this._config.defaultInterval || this._config.interval; - this._config.interval = nextElementInterval; - } else { - this._config.interval = this._config.defaultInterval || this._config.interval; - } - var transitionDuration = Util__default['default'].getTransitionDurationFromElement(activeElement); $__default['default'](activeElement).one(Util__default['default'].TRANSITION_END, function () { $__default['default'](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE); diff --git a/vendor/twbs/bootstrap/js/dist/carousel.js.map b/vendor/twbs/bootstrap/js/dist/carousel.js.map index f3a092193..b4662008c 100644 --- a/vendor/twbs/bootstrap/js/dist/carousel.js.map +++ b/vendor/twbs/bootstrap/js/dist/carousel.js.map @@ -1 +1 @@ -{"version":3,"file":"carousel.js","sources":["../src/carousel.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n const $element = $(this._element)\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n DIRECTION_NEXT :\n DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, event => this.pause(event))\n .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, e => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n $(this._element).on(EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","ARROW_LEFT_KEYCODE","ARROW_RIGHT_KEYCODE","TOUCHEVENT_COMPAT_WAIT","SWIPE_THRESHOLD","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","DIRECTION_NEXT","DIRECTION_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","EVENT_DRAG_START","EVENT_LOAD_DATA_API","EVENT_CLICK_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE","CLASS_NAME_SLIDE","CLASS_NAME_RIGHT","CLASS_NAME_LEFT","CLASS_NAME_NEXT","CLASS_NAME_PREV","CLASS_NAME_POINTER_EVENT","SELECTOR_ACTIVE","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM","SELECTOR_ITEM_IMG","SELECTOR_NEXT_PREV","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","PointerType","TOUCH","PEN","Carousel","element","config","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_element","_indicatorsElement","querySelector","_touchSupported","document","documentElement","navigator","maxTouchPoints","_pointerEvent","Boolean","window","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","$element","hidden","is","css","prev","event","Util","triggerTransitionEnd","cycle","clearInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","length","one","direction","dispose","off","removeData","typeCheckConfig","_handleSwipe","absDeltax","Math","abs","on","_keydown","_addTouchEventListeners","start","originalEvent","pointerType","toUpperCase","clientX","touches","move","end","clearTimeout","setTimeout","querySelectorAll","e","preventDefault","classList","add","test","target","tagName","which","parentNode","slice","call","indexOf","_getItemByDirection","activeElement","isNextDirection","isPrevDirection","lastItemIndex","isGoingToWrap","delta","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","Event","from","trigger","_setActiveIndicatorElement","indicators","removeClass","nextIndicator","children","addClass","activeElementIndex","nextElement","nextElementIndex","isCycling","directionalClassName","orderClassName","hasClass","isDefaultPrevented","slidEvent","reflow","nextElementInterval","parseInt","getAttribute","defaultInterval","transitionDuration","getTransitionDurationFromElement","TRANSITION_END","emulateTransitionEnd","_jQueryInterface","each","data","action","TypeError","ride","_dataApiClickHandler","selector","getSelectorFromElement","slideIndex","carousels","i","len","$carousel","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"carousel.js","sources":["../src/carousel.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n const $element = $(this._element)\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._updateInterval()\n\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n DIRECTION_NEXT :\n DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, event => this.pause(event))\n .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, e => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n $(this._element).on(EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n if (!element) {\n return\n }\n\n const elementInterval = parseInt(element.getAttribute('data-interval'), 10)\n\n if (elementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = elementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n this._activeElement = nextElement\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","ARROW_LEFT_KEYCODE","ARROW_RIGHT_KEYCODE","TOUCHEVENT_COMPAT_WAIT","SWIPE_THRESHOLD","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","DIRECTION_NEXT","DIRECTION_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","EVENT_DRAG_START","EVENT_LOAD_DATA_API","EVENT_CLICK_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE","CLASS_NAME_SLIDE","CLASS_NAME_RIGHT","CLASS_NAME_LEFT","CLASS_NAME_NEXT","CLASS_NAME_PREV","CLASS_NAME_POINTER_EVENT","SELECTOR_ACTIVE","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM","SELECTOR_ITEM_IMG","SELECTOR_NEXT_PREV","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","PointerType","TOUCH","PEN","Carousel","element","config","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_element","_indicatorsElement","querySelector","_touchSupported","document","documentElement","navigator","maxTouchPoints","_pointerEvent","Boolean","window","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","$element","hidden","is","css","prev","event","Util","triggerTransitionEnd","cycle","clearInterval","_updateInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","length","one","direction","dispose","off","removeData","typeCheckConfig","_handleSwipe","absDeltax","Math","abs","on","_keydown","_addTouchEventListeners","start","originalEvent","pointerType","toUpperCase","clientX","touches","move","end","clearTimeout","setTimeout","querySelectorAll","e","preventDefault","classList","add","test","target","tagName","which","parentNode","slice","call","indexOf","_getItemByDirection","activeElement","isNextDirection","isPrevDirection","lastItemIndex","isGoingToWrap","delta","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","Event","from","trigger","_setActiveIndicatorElement","indicators","removeClass","nextIndicator","children","addClass","elementInterval","parseInt","getAttribute","defaultInterval","activeElementIndex","nextElement","nextElementIndex","isCycling","directionalClassName","orderClassName","hasClass","isDefaultPrevented","slidEvent","reflow","transitionDuration","getTransitionDurationFromElement","TRANSITION_END","emulateTransitionEnd","_jQueryInterface","each","data","action","TypeError","ride","_dataApiClickHandler","selector","getSelectorFromElement","slideIndex","carousels","i","len","$carousel","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/js/dist/collapse.js b/vendor/twbs/bootstrap/js/dist/collapse.js index b5d663243..427e2711f 100644 --- a/vendor/twbs/bootstrap/js/dist/collapse.js +++ b/vendor/twbs/bootstrap/js/dist/collapse.js @@ -1,11 +1,11 @@ /*! - * Bootstrap collapse.js v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap collapse.js v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : - typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) : + typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.jQuery, global.Util)); }(this, (function ($, Util) { 'use strict'; @@ -14,11 +14,40 @@ var $__default = /*#__PURE__*/_interopDefaultLegacy($); var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util); - function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); + } - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * ------------------------------------------------------------------------ * Constants @@ -26,7 +55,7 @@ */ var NAME = 'collapse'; - var VERSION = '4.5.3'; + var VERSION = '4.6.0'; var DATA_KEY = 'bs.collapse'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; diff --git a/vendor/twbs/bootstrap/js/dist/collapse.js.map b/vendor/twbs/bootstrap/js/dist/collapse.js.map index d14e4647d..dd3bac4b9 100644 --- a/vendor/twbs/bootstrap/js/dist/collapse.js.map +++ b/vendor/twbs/bootstrap/js/dist/collapse.js.map @@ -1 +1 @@ -{"version":3,"file":"collapse.js","sources":["../src/collapse.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter(foundElem => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$element.data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","Default","toggle","parent","DefaultType","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","EVENT_CLICK_DATA_API","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","DIMENSION_WIDTH","DIMENSION_HEIGHT","SELECTOR_ACTIVES","SELECTOR_DATA_TOGGLE","Collapse","element","config","_isTransitioning","_element","_config","_getConfig","_triggerArray","slice","call","document","querySelectorAll","id","toggleList","i","len","length","elem","selector","Util","getSelectorFromElement","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hasClass","hide","show","actives","activesData","getAttribute","classList","contains","not","data","startEvent","Event","trigger","isDefaultPrevented","_jQueryInterface","dimension","_getDimension","removeClass","addClass","style","attr","setTransitioning","complete","capitalizedDimension","toUpperCase","scrollSize","transitionDuration","getTransitionDurationFromElement","one","TRANSITION_END","emulateTransitionEnd","getBoundingClientRect","reflow","triggerArrayLength","$elem","isTransitioning","dispose","removeData","Boolean","typeCheckConfig","hasWidth","isElement","jquery","querySelector","children","each","_getTargetFromElement","triggerArray","isOpen","toggleClass","$element","test","TypeError","on","event","currentTarget","tagName","preventDefault","$trigger","selectors","$target","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"collapse.js","sources":["../src/collapse.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter(foundElem => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$element.data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","Default","toggle","parent","DefaultType","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","EVENT_CLICK_DATA_API","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","DIMENSION_WIDTH","DIMENSION_HEIGHT","SELECTOR_ACTIVES","SELECTOR_DATA_TOGGLE","Collapse","element","config","_isTransitioning","_element","_config","_getConfig","_triggerArray","slice","call","document","querySelectorAll","id","toggleList","i","len","length","elem","selector","Util","getSelectorFromElement","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hasClass","hide","show","actives","activesData","getAttribute","classList","contains","not","data","startEvent","Event","trigger","isDefaultPrevented","_jQueryInterface","dimension","_getDimension","removeClass","addClass","style","attr","setTransitioning","complete","capitalizedDimension","toUpperCase","scrollSize","transitionDuration","getTransitionDurationFromElement","one","TRANSITION_END","emulateTransitionEnd","getBoundingClientRect","reflow","triggerArrayLength","$elem","isTransitioning","dispose","removeData","Boolean","typeCheckConfig","hasWidth","isElement","jquery","querySelector","children","each","_getTargetFromElement","triggerArray","isOpen","toggleClass","$element","test","TypeError","on","event","currentTarget","tagName","preventDefault","$trigger","selectors","$target","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/js/dist/dropdown.js b/vendor/twbs/bootstrap/js/dist/dropdown.js index 9ba052ef6..772617ce8 100644 --- a/vendor/twbs/bootstrap/js/dist/dropdown.js +++ b/vendor/twbs/bootstrap/js/dist/dropdown.js @@ -1,11 +1,11 @@ /*! - * Bootstrap dropdown.js v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap dropdown.js v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) : - typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) : + typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.jQuery, global.Popper, global.Util)); }(this, (function ($, Popper, Util) { 'use strict'; @@ -15,11 +15,40 @@ var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper); var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util); - function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); + } - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * ------------------------------------------------------------------------ * Constants @@ -27,7 +56,7 @@ */ var NAME = 'dropdown'; - var VERSION = '4.5.3'; + var VERSION = '4.6.0'; var DATA_KEY = 'bs.dropdown'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; @@ -144,7 +173,7 @@ if (showEvent.isDefaultPrevented()) { return; - } // Disable totally Popper.js for Dropdown in Navbar + } // Totally disable Popper for Dropdowns in Navbar if (!this._inNavbar && usePopper) { @@ -153,7 +182,7 @@ * Popper - https://popper.js.org */ if (typeof Popper__default['default'] === 'undefined') { - throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); + throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); } var referenceElement = this._element; @@ -321,7 +350,7 @@ boundariesElement: this._config.boundary } } - }; // Disable Popper.js if we have a static display + }; // Disable Popper if we have a static display if (this._config.display === 'static') { popperConfig.modifiers.applyStyle = { diff --git a/vendor/twbs/bootstrap/js/dist/dropdown.js.map b/vendor/twbs/bootstrap/js/dist/dropdown.js.map index a033a2d4a..70346d88f 100644 --- a/vendor/twbs/bootstrap/js/dist/dropdown.js.map +++ b/vendor/twbs/bootstrap/js/dist/dropdown.js.map @@ -1 +1 @@ -{"version":3,"file":"dropdown.js","sources":["../src/dropdown.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this._config.offset(data.offsets, this._element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","ESCAPE_KEYCODE","SPACE_KEYCODE","TAB_KEYCODE","ARROW_UP_KEYCODE","ARROW_DOWN_KEYCODE","RIGHT_MOUSE_BUTTON_WHICH","REGEXP_KEYDOWN","RegExp","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_CLICK","EVENT_CLICK_DATA_API","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DISABLED","CLASS_NAME_SHOW","CLASS_NAME_DROPUP","CLASS_NAME_DROPRIGHT","CLASS_NAME_DROPLEFT","CLASS_NAME_MENURIGHT","CLASS_NAME_POSITION_STATIC","SELECTOR_DATA_TOGGLE","SELECTOR_FORM_CHILD","SELECTOR_MENU","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","Default","offset","flip","boundary","reference","display","popperConfig","DefaultType","Dropdown","element","config","_element","_popper","_config","_getConfig","_menu","_getMenuElement","_inNavbar","_detectNavbar","_addEventListeners","toggle","disabled","hasClass","isActive","_clearMenus","show","usePopper","relatedTarget","showEvent","Event","parent","_getParentFromElement","trigger","isDefaultPrevented","Popper","TypeError","referenceElement","Util","isElement","jquery","addClass","_getPopperConfig","document","documentElement","closest","length","body","children","on","noop","focus","setAttribute","toggleClass","hide","hideEvent","destroy","dispose","removeData","off","update","scheduleUpdate","event","preventDefault","stopPropagation","constructor","data","typeCheckConfig","querySelector","_getPlacement","$parentDropdown","parentNode","placement","_getOffset","offsets","modifiers","enabled","preventOverflow","boundariesElement","applyStyle","_jQueryInterface","each","which","type","toggles","slice","call","querySelectorAll","i","len","context","clickEvent","dropdownMenu","test","target","tagName","contains","removeClass","selector","getSelectorFromElement","_dataApiKeydownHandler","items","filter","item","is","index","indexOf","e","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"dropdown.js","sources":["../src/dropdown.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Totally disable Popper for Dropdowns in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this._config.offset(data.offsets, this._element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","ESCAPE_KEYCODE","SPACE_KEYCODE","TAB_KEYCODE","ARROW_UP_KEYCODE","ARROW_DOWN_KEYCODE","RIGHT_MOUSE_BUTTON_WHICH","REGEXP_KEYDOWN","RegExp","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_CLICK","EVENT_CLICK_DATA_API","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DISABLED","CLASS_NAME_SHOW","CLASS_NAME_DROPUP","CLASS_NAME_DROPRIGHT","CLASS_NAME_DROPLEFT","CLASS_NAME_MENURIGHT","CLASS_NAME_POSITION_STATIC","SELECTOR_DATA_TOGGLE","SELECTOR_FORM_CHILD","SELECTOR_MENU","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","Default","offset","flip","boundary","reference","display","popperConfig","DefaultType","Dropdown","element","config","_element","_popper","_config","_getConfig","_menu","_getMenuElement","_inNavbar","_detectNavbar","_addEventListeners","toggle","disabled","hasClass","isActive","_clearMenus","show","usePopper","relatedTarget","showEvent","Event","parent","_getParentFromElement","trigger","isDefaultPrevented","Popper","TypeError","referenceElement","Util","isElement","jquery","addClass","_getPopperConfig","document","documentElement","closest","length","body","children","on","noop","focus","setAttribute","toggleClass","hide","hideEvent","destroy","dispose","removeData","off","update","scheduleUpdate","event","preventDefault","stopPropagation","constructor","data","typeCheckConfig","querySelector","_getPlacement","$parentDropdown","parentNode","placement","_getOffset","offsets","modifiers","enabled","preventOverflow","boundariesElement","applyStyle","_jQueryInterface","each","which","type","toggles","slice","call","querySelectorAll","i","len","context","clickEvent","dropdownMenu","test","target","tagName","contains","removeClass","selector","getSelectorFromElement","_dataApiKeydownHandler","items","filter","item","is","index","indexOf","e","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/js/dist/index.js b/vendor/twbs/bootstrap/js/dist/index.js index d209db97b..5f219ec1a 100644 --- a/vendor/twbs/bootstrap/js/dist/index.js +++ b/vendor/twbs/bootstrap/js/dist/index.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): index.js + * Bootstrap (v4.6.0): index.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ diff --git a/vendor/twbs/bootstrap/js/dist/modal.js b/vendor/twbs/bootstrap/js/dist/modal.js index 92a9c77b6..f3738fbd7 100644 --- a/vendor/twbs/bootstrap/js/dist/modal.js +++ b/vendor/twbs/bootstrap/js/dist/modal.js @@ -1,11 +1,11 @@ /*! - * Bootstrap modal.js v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap modal.js v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : - typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) : + typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.jQuery, global.Util)); }(this, (function ($, Util) { 'use strict'; @@ -14,11 +14,40 @@ var $__default = /*#__PURE__*/_interopDefaultLegacy($); var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util); - function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); + } - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * ------------------------------------------------------------------------ * Constants @@ -26,7 +55,7 @@ */ var NAME = 'modal'; - var VERSION = '4.5.3'; + var VERSION = '4.6.0'; var DATA_KEY = 'bs.modal'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; @@ -226,38 +255,34 @@ _proto._triggerBackdropTransition = function _triggerBackdropTransition() { var _this3 = this; - if (this._config.backdrop === 'static') { - var hideEventPrevented = $__default['default'].Event(EVENT_HIDE_PREVENTED); - $__default['default'](this._element).trigger(hideEventPrevented); + var hideEventPrevented = $__default['default'].Event(EVENT_HIDE_PREVENTED); + $__default['default'](this._element).trigger(hideEventPrevented); - if (hideEventPrevented.isDefaultPrevented()) { - return; - } + if (hideEventPrevented.isDefaultPrevented()) { + return; + } - var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; + var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; + + if (!isModalOverflowing) { + this._element.style.overflowY = 'hidden'; + } + + this._element.classList.add(CLASS_NAME_STATIC); + + var modalTransitionDuration = Util__default['default'].getTransitionDurationFromElement(this._dialog); + $__default['default'](this._element).off(Util__default['default'].TRANSITION_END); + $__default['default'](this._element).one(Util__default['default'].TRANSITION_END, function () { + _this3._element.classList.remove(CLASS_NAME_STATIC); if (!isModalOverflowing) { - this._element.style.overflowY = 'hidden'; + $__default['default'](_this3._element).one(Util__default['default'].TRANSITION_END, function () { + _this3._element.style.overflowY = ''; + }).emulateTransitionEnd(_this3._element, modalTransitionDuration); } + }).emulateTransitionEnd(modalTransitionDuration); - this._element.classList.add(CLASS_NAME_STATIC); - - var modalTransitionDuration = Util__default['default'].getTransitionDurationFromElement(this._dialog); - $__default['default'](this._element).off(Util__default['default'].TRANSITION_END); - $__default['default'](this._element).one(Util__default['default'].TRANSITION_END, function () { - _this3._element.classList.remove(CLASS_NAME_STATIC); - - if (!isModalOverflowing) { - $__default['default'](_this3._element).one(Util__default['default'].TRANSITION_END, function () { - _this3._element.style.overflowY = ''; - }).emulateTransitionEnd(_this3._element, modalTransitionDuration); - } - }).emulateTransitionEnd(modalTransitionDuration); - - this._element.focus(); - } else { - this.hide(); - } + this._element.focus(); }; _proto._showElement = function _showElement(relatedTarget) { @@ -412,7 +437,11 @@ return; } - _this9._triggerBackdropTransition(); + if (_this9._config.backdrop === 'static') { + _this9._triggerBackdropTransition(); + } else { + _this9.hide(); + } }); if (animate) { diff --git a/vendor/twbs/bootstrap/js/dist/modal.js.map b/vendor/twbs/bootstrap/js/dist/modal.js.map index 5c13b2e88..db9bc20cf 100644 --- a/vendor/twbs/bootstrap/js/dist/modal.js.map +++ b/vendor/twbs/bootstrap/js/dist/modal.js.map @@ -1 +1 @@ -{"version":3,"file":"modal.js","sources":["../src/modal.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n if (this._config.backdrop === 'static') {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n } else {\n this.hide()\n }\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","ESCAPE_KEYCODE","Default","backdrop","keyboard","focus","show","DefaultType","EVENT_HIDE","EVENT_HIDE_PREVENTED","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_FOCUSIN","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_KEYDOWN_DISMISS","EVENT_MOUSEUP_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_CLICK_DATA_API","CLASS_NAME_SCROLLABLE","CLASS_NAME_SCROLLBAR_MEASURER","CLASS_NAME_BACKDROP","CLASS_NAME_OPEN","CLASS_NAME_FADE","CLASS_NAME_SHOW","CLASS_NAME_STATIC","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","SELECTOR_DATA_TOGGLE","SELECTOR_DATA_DISMISS","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","Modal","element","config","_config","_getConfig","_element","_dialog","querySelector","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_isTransitioning","_scrollbarWidth","toggle","relatedTarget","hide","hasClass","showEvent","Event","trigger","isDefaultPrevented","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","on","event","one","target","is","_showBackdrop","_showElement","preventDefault","hideEvent","transition","document","off","removeClass","transitionDuration","Util","getTransitionDurationFromElement","TRANSITION_END","_hideModal","emulateTransitionEnd","dispose","window","forEach","htmlElement","removeData","handleUpdate","typeCheckConfig","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","documentElement","clientHeight","style","overflowY","classList","add","modalTransitionDuration","remove","modalBody","parentNode","nodeType","Node","ELEMENT_NODE","body","appendChild","display","removeAttribute","setAttribute","scrollTop","reflow","addClass","_enforceFocus","shownEvent","transitionComplete","has","length","which","_resetAdjustments","_resetScrollbar","_removeBackdrop","callback","animate","createElement","className","appendTo","currentTarget","backdropTransitionDuration","callbackRemove","paddingLeft","paddingRight","rect","getBoundingClientRect","Math","round","left","right","innerWidth","_getScrollbarWidth","fixedContent","slice","call","querySelectorAll","stickyContent","each","index","actualPadding","calculatedPadding","css","data","parseFloat","actualMargin","marginRight","calculatedMargin","padding","elements","margin","scrollDiv","scrollbarWidth","width","clientWidth","removeChild","_jQueryInterface","TypeError","selector","getSelectorFromElement","tagName","$target","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"modal.js","sources":["../src/modal.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","ESCAPE_KEYCODE","Default","backdrop","keyboard","focus","show","DefaultType","EVENT_HIDE","EVENT_HIDE_PREVENTED","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_FOCUSIN","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_KEYDOWN_DISMISS","EVENT_MOUSEUP_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_CLICK_DATA_API","CLASS_NAME_SCROLLABLE","CLASS_NAME_SCROLLBAR_MEASURER","CLASS_NAME_BACKDROP","CLASS_NAME_OPEN","CLASS_NAME_FADE","CLASS_NAME_SHOW","CLASS_NAME_STATIC","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","SELECTOR_DATA_TOGGLE","SELECTOR_DATA_DISMISS","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","Modal","element","config","_config","_getConfig","_element","_dialog","querySelector","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_isTransitioning","_scrollbarWidth","toggle","relatedTarget","hide","hasClass","showEvent","Event","trigger","isDefaultPrevented","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","on","event","one","target","is","_showBackdrop","_showElement","preventDefault","hideEvent","transition","document","off","removeClass","transitionDuration","Util","getTransitionDurationFromElement","TRANSITION_END","_hideModal","emulateTransitionEnd","dispose","window","forEach","htmlElement","removeData","handleUpdate","typeCheckConfig","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","documentElement","clientHeight","style","overflowY","classList","add","modalTransitionDuration","remove","modalBody","parentNode","nodeType","Node","ELEMENT_NODE","body","appendChild","display","removeAttribute","setAttribute","scrollTop","reflow","addClass","_enforceFocus","shownEvent","transitionComplete","has","length","which","_resetAdjustments","_resetScrollbar","_removeBackdrop","callback","animate","createElement","className","appendTo","currentTarget","backdropTransitionDuration","callbackRemove","paddingLeft","paddingRight","rect","getBoundingClientRect","Math","round","left","right","innerWidth","_getScrollbarWidth","fixedContent","slice","call","querySelectorAll","stickyContent","each","index","actualPadding","calculatedPadding","css","data","parseFloat","actualMargin","marginRight","calculatedMargin","padding","elements","margin","scrollDiv","scrollbarWidth","width","clientWidth","removeChild","_jQueryInterface","TypeError","selector","getSelectorFromElement","tagName","$target","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/js/dist/popover.js b/vendor/twbs/bootstrap/js/dist/popover.js index 00f3b9120..04cc5df73 100644 --- a/vendor/twbs/bootstrap/js/dist/popover.js +++ b/vendor/twbs/bootstrap/js/dist/popover.js @@ -1,11 +1,11 @@ /*! - * Bootstrap popover.js v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap popover.js v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./tooltip.js')) : - typeof define === 'function' && define.amd ? define(['jquery', './tooltip.js'], factory) : + typeof define === 'function' && define.amd ? define(['jquery', './tooltip'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.jQuery, global.Tooltip)); }(this, (function ($, Tooltip) { 'use strict'; @@ -14,13 +14,46 @@ var $__default = /*#__PURE__*/_interopDefaultLegacy($); var Tooltip__default = /*#__PURE__*/_interopDefaultLegacy(Tooltip); - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } - function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } + function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); + } + + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } - function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } /** * ------------------------------------------------------------------------ * Constants @@ -28,7 +61,7 @@ */ var NAME = 'popover'; - var VERSION = '4.5.3'; + var VERSION = '4.6.0'; var DATA_KEY = 'bs.popover'; var EVENT_KEY = "." + DATA_KEY; var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME]; diff --git a/vendor/twbs/bootstrap/js/dist/popover.js.map b/vendor/twbs/bootstrap/js/dist/popover.js.map index c0309af7a..b976d52ed 100644 --- a/vendor/twbs/bootstrap/js/dist/popover.js.map +++ b/vendor/twbs/bootstrap/js/dist/popover.js.map @@ -1 +1 @@ -{"version":3,"file":"popover.js","sources":["../src/popover.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div></div>'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","CLASS_PREFIX","BSCLS_PREFIX_REGEX","RegExp","Default","Tooltip","placement","trigger","content","template","DefaultType","CLASS_NAME_FADE","CLASS_NAME_SHOW","SELECTOR_TITLE","SELECTOR_CONTENT","Event","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Popover","isWithContent","getTitle","_getContent","addAttachmentClass","attachment","getTipElement","addClass","tip","config","setContent","$tip","setElementContent","find","call","element","removeClass","getAttribute","_cleanTipClass","tabClass","attr","match","length","join","_jQueryInterface","each","data","_config","test","TypeError","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"popover.js","sources":["../src/popover.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div></div>'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","CLASS_PREFIX","BSCLS_PREFIX_REGEX","RegExp","Default","Tooltip","placement","trigger","content","template","DefaultType","CLASS_NAME_FADE","CLASS_NAME_SHOW","SELECTOR_TITLE","SELECTOR_CONTENT","Event","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Popover","isWithContent","getTitle","_getContent","addAttachmentClass","attachment","getTipElement","addClass","tip","config","setContent","$tip","setElementContent","find","call","element","removeClass","getAttribute","_cleanTipClass","tabClass","attr","match","length","join","_jQueryInterface","each","data","_config","test","TypeError","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/js/dist/scrollspy.js b/vendor/twbs/bootstrap/js/dist/scrollspy.js index 366519656..9503a9589 100644 --- a/vendor/twbs/bootstrap/js/dist/scrollspy.js +++ b/vendor/twbs/bootstrap/js/dist/scrollspy.js @@ -1,11 +1,11 @@ /*! - * Bootstrap scrollspy.js v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap scrollspy.js v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : - typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) : + typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ScrollSpy = factory(global.jQuery, global.Util)); }(this, (function ($, Util) { 'use strict'; @@ -14,11 +14,40 @@ var $__default = /*#__PURE__*/_interopDefaultLegacy($); var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util); - function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); + } - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * ------------------------------------------------------------------------ * Constants @@ -26,7 +55,7 @@ */ var NAME = 'scrollspy'; - var VERSION = '4.5.3'; + var VERSION = '4.6.0'; var DATA_KEY = 'bs.scrollspy'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; diff --git a/vendor/twbs/bootstrap/js/dist/scrollspy.js.map b/vendor/twbs/bootstrap/js/dist/scrollspy.js.map index 0281b63d5..5fe94b368 100644 --- a/vendor/twbs/bootstrap/js/dist/scrollspy.js.map +++ b/vendor/twbs/bootstrap/js/dist/scrollspy.js.map @@ -1 +1 @@ -{"version":3,"file":"scrollspy.js","sources":["../src/scrollspy.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map(element => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .addClass(CLASS_NAME_ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(SELECTOR_NAV_ITEMS)\n .children(SELECTOR_NAV_LINKS)\n .addClass(CLASS_NAME_ACTIVE)\n }\n\n $(this._scrollElement).trigger(EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","Default","offset","method","target","DefaultType","EVENT_ACTIVATE","EVENT_SCROLL","EVENT_LOAD_DATA_API","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE","SELECTOR_DATA_SPY","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_ITEMS","SELECTOR_DROPDOWN_TOGGLE","METHOD_OFFSET","METHOD_POSITION","ScrollSpy","element","config","_element","_scrollElement","tagName","window","_config","_getConfig","_selector","_offsets","_targets","_activeTarget","_scrollHeight","on","event","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targets","slice","call","document","querySelectorAll","map","targetSelector","Util","getSelectorFromElement","querySelector","targetBCR","getBoundingClientRect","width","height","top","filter","item","sort","a","b","forEach","push","dispose","removeData","off","isElement","id","attr","getUID","typeCheckConfig","pageYOffset","scrollTop","scrollHeight","Math","max","body","documentElement","_getOffsetHeight","innerHeight","maxScroll","length","_activate","_clear","i","isActiveTarget","queries","split","selector","$link","join","hasClass","closest","find","addClass","parents","prev","children","trigger","relatedTarget","node","classList","contains","remove","_jQueryInterface","each","data","TypeError","scrollSpys","scrollSpysLength","$spy","Constructor","noConflict"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAUA;;;;;;EAMA,IAAMA,IAAI,GAAG,WAAb;EACA,IAAMC,OAAO,GAAG,OAAhB;EACA,IAAMC,QAAQ,GAAG,cAAjB;EACA,IAAMC,SAAS,SAAOD,QAAtB;EACA,IAAME,YAAY,GAAG,WAArB;EACA,IAAMC,kBAAkB,GAAGC,qBAAC,CAACC,EAAF,CAAKP,IAAL,CAA3B;EAEA,IAAMQ,OAAO,GAAG;EACdC,EAAAA,MAAM,EAAE,EADM;EAEdC,EAAAA,MAAM,EAAE,MAFM;EAGdC,EAAAA,MAAM,EAAE;EAHM,CAAhB;EAMA,IAAMC,WAAW,GAAG;EAClBH,EAAAA,MAAM,EAAE,QADU;EAElBC,EAAAA,MAAM,EAAE,QAFU;EAGlBC,EAAAA,MAAM,EAAE;EAHU,CAApB;EAMA,IAAME,cAAc,gBAAcV,SAAlC;EACA,IAAMW,YAAY,cAAYX,SAA9B;EACA,IAAMY,mBAAmB,YAAUZ,SAAV,GAAsBC,YAA/C;EAEA,IAAMY,wBAAwB,GAAG,eAAjC;EACA,IAAMC,iBAAiB,GAAG,QAA1B;EAEA,IAAMC,iBAAiB,GAAG,qBAA1B;EACA,IAAMC,uBAAuB,GAAG,mBAAhC;EACA,IAAMC,kBAAkB,GAAG,WAA3B;EACA,IAAMC,kBAAkB,GAAG,WAA3B;EACA,IAAMC,mBAAmB,GAAG,kBAA5B;EACA,IAAMC,iBAAiB,GAAG,WAA1B;EACA,IAAMC,uBAAuB,GAAG,gBAAhC;EACA,IAAMC,wBAAwB,GAAG,kBAAjC;EAEA,IAAMC,aAAa,GAAG,QAAtB;EACA,IAAMC,eAAe,GAAG,UAAxB;EAEA;;;;;;MAMMC;EACJ,qBAAYC,OAAZ,EAAqBC,MAArB,EAA6B;EAAA;;EAC3B,SAAKC,QAAL,GAAgBF,OAAhB;EACA,SAAKG,cAAL,GAAsBH,OAAO,CAACI,OAAR,KAAoB,MAApB,GAA6BC,MAA7B,GAAsCL,OAA5D;EACA,SAAKM,OAAL,GAAe,KAAKC,UAAL,CAAgBN,MAAhB,CAAf;EACA,SAAKO,SAAL,GAAoB,KAAKF,OAAL,CAAaxB,MAAhB,SAA0BS,kBAA1B,UACQ,KAAKe,OAAL,CAAaxB,MADrB,SAC+BW,mBAD/B,WAEQ,KAAKa,OAAL,CAAaxB,MAFrB,SAE+Ba,uBAF/B,CAAjB;EAGA,SAAKc,QAAL,GAAgB,EAAhB;EACA,SAAKC,QAAL,GAAgB,EAAhB;EACA,SAAKC,aAAL,GAAqB,IAArB;EACA,SAAKC,aAAL,GAAqB,CAArB;EAEAnC,IAAAA,qBAAC,CAAC,KAAK0B,cAAN,CAAD,CAAuBU,EAAvB,CAA0B5B,YAA1B,EAAwC,UAAA6B,KAAK;EAAA,aAAI,KAAI,CAACC,QAAL,CAAcD,KAAd,CAAJ;EAAA,KAA7C;EAEA,SAAKE,OAAL;;EACA,SAAKD,QAAL;EACD;;;;;EAYD;WAEAC,UAAA,mBAAU;EAAA;;EACR,QAAMC,UAAU,GAAG,KAAKd,cAAL,KAAwB,KAAKA,cAAL,CAAoBE,MAA5C,GACjBR,aADiB,GACDC,eADlB;EAGA,QAAMoB,YAAY,GAAG,KAAKZ,OAAL,CAAazB,MAAb,KAAwB,MAAxB,GACnBoC,UADmB,GACN,KAAKX,OAAL,CAAazB,MAD5B;EAGA,QAAMsC,UAAU,GAAGD,YAAY,KAAKpB,eAAjB,GACjB,KAAKsB,aAAL,EADiB,GACM,CADzB;EAGA,SAAKX,QAAL,GAAgB,EAAhB;EACA,SAAKC,QAAL,GAAgB,EAAhB;EAEA,SAAKE,aAAL,GAAqB,KAAKS,gBAAL,EAArB;EAEA,QAAMC,OAAO,GAAG,GAAGC,KAAH,CAASC,IAAT,CAAcC,QAAQ,CAACC,gBAAT,CAA0B,KAAKlB,SAA/B,CAAd,CAAhB;EAEAc,IAAAA,OAAO,CACJK,GADH,CACO,UAAA3B,OAAO,EAAI;EACd,UAAIlB,MAAJ;EACA,UAAM8C,cAAc,GAAGC,wBAAI,CAACC,sBAAL,CAA4B9B,OAA5B,CAAvB;;EAEA,UAAI4B,cAAJ,EAAoB;EAClB9C,QAAAA,MAAM,GAAG2C,QAAQ,CAACM,aAAT,CAAuBH,cAAvB,CAAT;EACD;;EAED,UAAI9C,MAAJ,EAAY;EACV,YAAMkD,SAAS,GAAGlD,MAAM,CAACmD,qBAAP,EAAlB;;EACA,YAAID,SAAS,CAACE,KAAV,IAAmBF,SAAS,CAACG,MAAjC,EAAyC;EACvC;EACA,iBAAO,CACL1D,qBAAC,CAACK,MAAD,CAAD,CAAUoC,YAAV,IAA0BkB,GAA1B,GAAgCjB,UAD3B,EAELS,cAFK,CAAP;EAID;EACF;;EAED,aAAO,IAAP;EACD,KArBH,EAsBGS,MAtBH,CAsBU,UAAAC,IAAI;EAAA,aAAIA,IAAJ;EAAA,KAtBd,EAuBGC,IAvBH,CAuBQ,UAACC,CAAD,EAAIC,CAAJ;EAAA,aAAUD,CAAC,CAAC,CAAD,CAAD,GAAOC,CAAC,CAAC,CAAD,CAAlB;EAAA,KAvBR,EAwBGC,OAxBH,CAwBW,UAAAJ,IAAI,EAAI;EACf,MAAA,MAAI,CAAC7B,QAAL,CAAckC,IAAd,CAAmBL,IAAI,CAAC,CAAD,CAAvB;;EACA,MAAA,MAAI,CAAC5B,QAAL,CAAciC,IAAd,CAAmBL,IAAI,CAAC,CAAD,CAAvB;EACD,KA3BH;EA4BD;;WAEDM,UAAA,mBAAU;EACRnE,IAAAA,qBAAC,CAACoE,UAAF,CAAa,KAAK3C,QAAlB,EAA4B7B,QAA5B;EACAI,IAAAA,qBAAC,CAAC,KAAK0B,cAAN,CAAD,CAAuB2C,GAAvB,CAA2BxE,SAA3B;EAEA,SAAK4B,QAAL,GAAgB,IAAhB;EACA,SAAKC,cAAL,GAAsB,IAAtB;EACA,SAAKG,OAAL,GAAe,IAAf;EACA,SAAKE,SAAL,GAAiB,IAAjB;EACA,SAAKC,QAAL,GAAgB,IAAhB;EACA,SAAKC,QAAL,GAAgB,IAAhB;EACA,SAAKC,aAAL,GAAqB,IAArB;EACA,SAAKC,aAAL,GAAqB,IAArB;EACD;;;WAIDL,aAAA,oBAAWN,MAAX,EAAmB;EACjBA,IAAAA,MAAM,gBACDtB,OADC,EAEA,OAAOsB,MAAP,KAAkB,QAAlB,IAA8BA,MAA9B,GAAuCA,MAAvC,GAAgD,EAFhD,CAAN;;EAKA,QAAI,OAAOA,MAAM,CAACnB,MAAd,KAAyB,QAAzB,IAAqC+C,wBAAI,CAACkB,SAAL,CAAe9C,MAAM,CAACnB,MAAtB,CAAzC,EAAwE;EACtE,UAAIkE,EAAE,GAAGvE,qBAAC,CAACwB,MAAM,CAACnB,MAAR,CAAD,CAAiBmE,IAAjB,CAAsB,IAAtB,CAAT;;EACA,UAAI,CAACD,EAAL,EAAS;EACPA,QAAAA,EAAE,GAAGnB,wBAAI,CAACqB,MAAL,CAAY/E,IAAZ,CAAL;EACAM,QAAAA,qBAAC,CAACwB,MAAM,CAACnB,MAAR,CAAD,CAAiBmE,IAAjB,CAAsB,IAAtB,EAA4BD,EAA5B;EACD;;EAED/C,MAAAA,MAAM,CAACnB,MAAP,SAAoBkE,EAApB;EACD;;EAEDnB,IAAAA,wBAAI,CAACsB,eAAL,CAAqBhF,IAArB,EAA2B8B,MAA3B,EAAmClB,WAAnC;EAEA,WAAOkB,MAAP;EACD;;WAEDmB,gBAAA,yBAAgB;EACd,WAAO,KAAKjB,cAAL,KAAwBE,MAAxB,GACL,KAAKF,cAAL,CAAoBiD,WADf,GAC6B,KAAKjD,cAAL,CAAoBkD,SADxD;EAED;;WAEDhC,mBAAA,4BAAmB;EACjB,WAAO,KAAKlB,cAAL,CAAoBmD,YAApB,IAAoCC,IAAI,CAACC,GAAL,CACzC/B,QAAQ,CAACgC,IAAT,CAAcH,YAD2B,EAEzC7B,QAAQ,CAACiC,eAAT,CAAyBJ,YAFgB,CAA3C;EAID;;WAEDK,mBAAA,4BAAmB;EACjB,WAAO,KAAKxD,cAAL,KAAwBE,MAAxB,GACLA,MAAM,CAACuD,WADF,GACgB,KAAKzD,cAAL,CAAoB8B,qBAApB,GAA4CE,MADnE;EAED;;WAEDpB,WAAA,oBAAW;EACT,QAAMsC,SAAS,GAAG,KAAKjC,aAAL,KAAuB,KAAKd,OAAL,CAAa1B,MAAtD;;EACA,QAAM0E,YAAY,GAAG,KAAKjC,gBAAL,EAArB;;EACA,QAAMwC,SAAS,GAAG,KAAKvD,OAAL,CAAa1B,MAAb,GAAsB0E,YAAtB,GAAqC,KAAKK,gBAAL,EAAvD;;EAEA,QAAI,KAAK/C,aAAL,KAAuB0C,YAA3B,EAAyC;EACvC,WAAKtC,OAAL;EACD;;EAED,QAAIqC,SAAS,IAAIQ,SAAjB,EAA4B;EAC1B,UAAM/E,MAAM,GAAG,KAAK4B,QAAL,CAAc,KAAKA,QAAL,CAAcoD,MAAd,GAAuB,CAArC,CAAf;;EAEA,UAAI,KAAKnD,aAAL,KAAuB7B,MAA3B,EAAmC;EACjC,aAAKiF,SAAL,CAAejF,MAAf;EACD;;EAED;EACD;;EAED,QAAI,KAAK6B,aAAL,IAAsB0C,SAAS,GAAG,KAAK5C,QAAL,CAAc,CAAd,CAAlC,IAAsD,KAAKA,QAAL,CAAc,CAAd,IAAmB,CAA7E,EAAgF;EAC9E,WAAKE,aAAL,GAAqB,IAArB;;EACA,WAAKqD,MAAL;;EACA;EACD;;EAED,SAAK,IAAIC,CAAC,GAAG,KAAKxD,QAAL,CAAcqD,MAA3B,EAAmCG,CAAC,EAApC,GAAyC;EACvC,UAAMC,cAAc,GAAG,KAAKvD,aAAL,KAAuB,KAAKD,QAAL,CAAcuD,CAAd,CAAvB,IACnBZ,SAAS,IAAI,KAAK5C,QAAL,CAAcwD,CAAd,CADM,KAElB,OAAO,KAAKxD,QAAL,CAAcwD,CAAC,GAAG,CAAlB,CAAP,KAAgC,WAAhC,IACGZ,SAAS,GAAG,KAAK5C,QAAL,CAAcwD,CAAC,GAAG,CAAlB,CAHG,CAAvB;;EAKA,UAAIC,cAAJ,EAAoB;EAClB,aAAKH,SAAL,CAAe,KAAKrD,QAAL,CAAcuD,CAAd,CAAf;EACD;EACF;EACF;;WAEDF,YAAA,mBAAUjF,MAAV,EAAkB;EAChB,SAAK6B,aAAL,GAAqB7B,MAArB;;EAEA,SAAKkF,MAAL;;EAEA,QAAMG,OAAO,GAAG,KAAK3D,SAAL,CACb4D,KADa,CACP,GADO,EAEbzC,GAFa,CAET,UAAA0C,QAAQ;EAAA,aAAOA,QAAP,uBAAgCvF,MAAhC,YAA4CuF,QAA5C,gBAA8DvF,MAA9D;EAAA,KAFC,CAAhB;;EAIA,QAAMwF,KAAK,GAAG7F,qBAAC,CAAC,GAAG8C,KAAH,CAASC,IAAT,CAAcC,QAAQ,CAACC,gBAAT,CAA0ByC,OAAO,CAACI,IAAR,CAAa,GAAb,CAA1B,CAAd,CAAD,CAAf;;EAEA,QAAID,KAAK,CAACE,QAAN,CAAerF,wBAAf,CAAJ,EAA8C;EAC5CmF,MAAAA,KAAK,CAACG,OAAN,CAAc/E,iBAAd,EACGgF,IADH,CACQ9E,wBADR,EAEG+E,QAFH,CAEYvF,iBAFZ;EAGAkF,MAAAA,KAAK,CAACK,QAAN,CAAevF,iBAAf;EACD,KALD,MAKO;EACL;EACAkF,MAAAA,KAAK,CAACK,QAAN,CAAevF,iBAAf,EAFK;EAIL;;EACAkF,MAAAA,KAAK,CAACM,OAAN,CAActF,uBAAd,EACGuF,IADH,CACWtF,kBADX,UACkCE,mBADlC,EAEGkF,QAFH,CAEYvF,iBAFZ,EALK;;EASLkF,MAAAA,KAAK,CAACM,OAAN,CAActF,uBAAd,EACGuF,IADH,CACQrF,kBADR,EAEGsF,QAFH,CAEYvF,kBAFZ,EAGGoF,QAHH,CAGYvF,iBAHZ;EAID;;EAEDX,IAAAA,qBAAC,CAAC,KAAK0B,cAAN,CAAD,CAAuB4E,OAAvB,CAA+B/F,cAA/B,EAA+C;EAC7CgG,MAAAA,aAAa,EAAElG;EAD8B,KAA/C;EAGD;;WAEDkF,SAAA,kBAAS;EACP,OAAGzC,KAAH,CAASC,IAAT,CAAcC,QAAQ,CAACC,gBAAT,CAA0B,KAAKlB,SAA/B,CAAd,EACG6B,MADH,CACU,UAAA4C,IAAI;EAAA,aAAIA,IAAI,CAACC,SAAL,CAAeC,QAAf,CAAwB/F,iBAAxB,CAAJ;EAAA,KADd,EAEGsD,OAFH,CAEW,UAAAuC,IAAI;EAAA,aAAIA,IAAI,CAACC,SAAL,CAAeE,MAAf,CAAsBhG,iBAAtB,CAAJ;EAAA,KAFf;EAGD;;;cAIMiG,mBAAP,0BAAwBpF,MAAxB,EAAgC;EAC9B,WAAO,KAAKqF,IAAL,CAAU,YAAY;EAC3B,UAAIC,IAAI,GAAG9G,qBAAC,CAAC,IAAD,CAAD,CAAQ8G,IAAR,CAAalH,QAAb,CAAX;;EACA,UAAMiC,OAAO,GAAG,OAAOL,MAAP,KAAkB,QAAlB,IAA8BA,MAA9C;;EAEA,UAAI,CAACsF,IAAL,EAAW;EACTA,QAAAA,IAAI,GAAG,IAAIxF,SAAJ,CAAc,IAAd,EAAoBO,OAApB,CAAP;EACA7B,QAAAA,qBAAC,CAAC,IAAD,CAAD,CAAQ8G,IAAR,CAAalH,QAAb,EAAuBkH,IAAvB;EACD;;EAED,UAAI,OAAOtF,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,YAAI,OAAOsF,IAAI,CAACtF,MAAD,CAAX,KAAwB,WAA5B,EAAyC;EACvC,gBAAM,IAAIuF,SAAJ,wBAAkCvF,MAAlC,QAAN;EACD;;EAEDsF,QAAAA,IAAI,CAACtF,MAAD,CAAJ;EACD;EACF,KAhBM,CAAP;EAiBD;;;;0BAlNoB;EACnB,aAAO7B,OAAP;EACD;;;0BAEoB;EACnB,aAAOO,OAAP;EACD;;;;;EA+MH;;;;;;;AAMAF,uBAAC,CAAC4B,MAAD,CAAD,CAAUQ,EAAV,CAAa3B,mBAAb,EAAkC,YAAM;EACtC,MAAMuG,UAAU,GAAG,GAAGlE,KAAH,CAASC,IAAT,CAAcC,QAAQ,CAACC,gBAAT,CAA0BrC,iBAA1B,CAAd,CAAnB;EACA,MAAMqG,gBAAgB,GAAGD,UAAU,CAAC3B,MAApC;;EAEA,OAAK,IAAIG,CAAC,GAAGyB,gBAAb,EAA+BzB,CAAC,EAAhC,GAAqC;EACnC,QAAM0B,IAAI,GAAGlH,qBAAC,CAACgH,UAAU,CAACxB,CAAD,CAAX,CAAd;;EACAlE,IAAAA,SAAS,CAACsF,gBAAV,CAA2B7D,IAA3B,CAAgCmE,IAAhC,EAAsCA,IAAI,CAACJ,IAAL,EAAtC;EACD;EACF,CARD;EAUA;;;;;;AAMA9G,uBAAC,CAACC,EAAF,CAAKP,IAAL,IAAa4B,SAAS,CAACsF,gBAAvB;AACA5G,uBAAC,CAACC,EAAF,CAAKP,IAAL,EAAWyH,WAAX,GAAyB7F,SAAzB;;AACAtB,uBAAC,CAACC,EAAF,CAAKP,IAAL,EAAW0H,UAAX,GAAwB,YAAM;EAC5BpH,EAAAA,qBAAC,CAACC,EAAF,CAAKP,IAAL,IAAaK,kBAAb;EACA,SAAOuB,SAAS,CAACsF,gBAAjB;EACD,CAHD;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"scrollspy.js","sources":["../src/scrollspy.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map(element => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .addClass(CLASS_NAME_ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(SELECTOR_NAV_ITEMS)\n .children(SELECTOR_NAV_LINKS)\n .addClass(CLASS_NAME_ACTIVE)\n }\n\n $(this._scrollElement).trigger(EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","Default","offset","method","target","DefaultType","EVENT_ACTIVATE","EVENT_SCROLL","EVENT_LOAD_DATA_API","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE","SELECTOR_DATA_SPY","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_ITEMS","SELECTOR_DROPDOWN_TOGGLE","METHOD_OFFSET","METHOD_POSITION","ScrollSpy","element","config","_element","_scrollElement","tagName","window","_config","_getConfig","_selector","_offsets","_targets","_activeTarget","_scrollHeight","on","event","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targets","slice","call","document","querySelectorAll","map","targetSelector","Util","getSelectorFromElement","querySelector","targetBCR","getBoundingClientRect","width","height","top","filter","item","sort","a","b","forEach","push","dispose","removeData","off","isElement","id","attr","getUID","typeCheckConfig","pageYOffset","scrollTop","scrollHeight","Math","max","body","documentElement","_getOffsetHeight","innerHeight","maxScroll","length","_activate","_clear","i","isActiveTarget","queries","split","selector","$link","join","hasClass","closest","find","addClass","parents","prev","children","trigger","relatedTarget","node","classList","contains","remove","_jQueryInterface","each","data","TypeError","scrollSpys","scrollSpysLength","$spy","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/js/dist/tab.js b/vendor/twbs/bootstrap/js/dist/tab.js index 84d6169bd..757761d33 100644 --- a/vendor/twbs/bootstrap/js/dist/tab.js +++ b/vendor/twbs/bootstrap/js/dist/tab.js @@ -1,11 +1,11 @@ /*! - * Bootstrap tab.js v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap tab.js v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : - typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) : + typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.jQuery, global.Util)); }(this, (function ($, Util) { 'use strict'; @@ -14,9 +14,22 @@ var $__default = /*#__PURE__*/_interopDefaultLegacy($); var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util); - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * ------------------------------------------------------------------------ * Constants @@ -24,7 +37,7 @@ */ var NAME = 'tab'; - var VERSION = '4.5.3'; + var VERSION = '4.6.0'; var DATA_KEY = 'bs.tab'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; diff --git a/vendor/twbs/bootstrap/js/dist/tab.js.map b/vendor/twbs/bootstrap/js/dist/tab.js.map index 2890e9765..58a93c71b 100644 --- a/vendor/twbs/bootstrap/js/dist/tab.js.map +++ b/vendor/twbs/bootstrap/js/dist/tab.js.map @@ -1 +1 @@ -{"version":3,"file":"tab.js","sources":["../src/tab.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = '> li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(CLASS_NAME_ACTIVE) ||\n $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(EVENT_HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(EVENT_HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n $(container).find(SELECTOR_ACTIVE_UL) :\n $(container).children(SELECTOR_ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(CLASS_NAME_SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(CLASS_NAME_ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n SELECTOR_DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(CLASS_NAME_ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(CLASS_NAME_ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n Util.reflow(element)\n\n if (element.classList.contains(CLASS_NAME_FADE)) {\n element.classList.add(CLASS_NAME_SHOW)\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_CLICK_DATA_API","CLASS_NAME_DROPDOWN_MENU","CLASS_NAME_ACTIVE","CLASS_NAME_DISABLED","CLASS_NAME_FADE","CLASS_NAME_SHOW","SELECTOR_DROPDOWN","SELECTOR_NAV_LIST_GROUP","SELECTOR_ACTIVE","SELECTOR_ACTIVE_UL","SELECTOR_DATA_TOGGLE","SELECTOR_DROPDOWN_TOGGLE","SELECTOR_DROPDOWN_ACTIVE_CHILD","Tab","element","_element","show","parentNode","nodeType","Node","ELEMENT_NODE","hasClass","target","previous","listElement","closest","selector","Util","getSelectorFromElement","itemSelector","nodeName","makeArray","find","length","hideEvent","Event","relatedTarget","showEvent","trigger","isDefaultPrevented","document","querySelector","_activate","complete","hiddenEvent","shownEvent","dispose","removeData","container","callback","activeElements","children","active","isTransitioning","_transitionComplete","transitionDuration","getTransitionDurationFromElement","removeClass","one","TRANSITION_END","emulateTransitionEnd","dropdownChild","getAttribute","setAttribute","addClass","reflow","classList","contains","add","dropdownElement","dropdownToggleList","slice","call","querySelectorAll","_jQueryInterface","config","each","$this","data","TypeError","on","event","preventDefault","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tab.js","sources":["../src/tab.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = '> li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(CLASS_NAME_ACTIVE) ||\n $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(EVENT_HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(EVENT_HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n $(container).find(SELECTOR_ACTIVE_UL) :\n $(container).children(SELECTOR_ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(CLASS_NAME_SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(CLASS_NAME_ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n SELECTOR_DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(CLASS_NAME_ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(CLASS_NAME_ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n Util.reflow(element)\n\n if (element.classList.contains(CLASS_NAME_FADE)) {\n element.classList.add(CLASS_NAME_SHOW)\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","JQUERY_NO_CONFLICT","$","fn","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_CLICK_DATA_API","CLASS_NAME_DROPDOWN_MENU","CLASS_NAME_ACTIVE","CLASS_NAME_DISABLED","CLASS_NAME_FADE","CLASS_NAME_SHOW","SELECTOR_DROPDOWN","SELECTOR_NAV_LIST_GROUP","SELECTOR_ACTIVE","SELECTOR_ACTIVE_UL","SELECTOR_DATA_TOGGLE","SELECTOR_DROPDOWN_TOGGLE","SELECTOR_DROPDOWN_ACTIVE_CHILD","Tab","element","_element","show","parentNode","nodeType","Node","ELEMENT_NODE","hasClass","target","previous","listElement","closest","selector","Util","getSelectorFromElement","itemSelector","nodeName","makeArray","find","length","hideEvent","Event","relatedTarget","showEvent","trigger","isDefaultPrevented","document","querySelector","_activate","complete","hiddenEvent","shownEvent","dispose","removeData","container","callback","activeElements","children","active","isTransitioning","_transitionComplete","transitionDuration","getTransitionDurationFromElement","removeClass","one","TRANSITION_END","emulateTransitionEnd","dropdownChild","getAttribute","setAttribute","addClass","reflow","classList","contains","add","dropdownElement","dropdownToggleList","slice","call","querySelectorAll","_jQueryInterface","config","each","$this","data","TypeError","on","event","preventDefault","Constructor","noConflict"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUA;EACA;EACA;EACA;EACA;;EAEA,IAAMA,IAAI,GAAG,KAAb;EACA,IAAMC,OAAO,GAAG,OAAhB;EACA,IAAMC,QAAQ,GAAG,QAAjB;EACA,IAAMC,SAAS,SAAOD,QAAtB;EACA,IAAME,YAAY,GAAG,WAArB;EACA,IAAMC,kBAAkB,GAAGC,qBAAC,CAACC,EAAF,CAAKP,IAAL,CAA3B;EAEA,IAAMQ,UAAU,YAAUL,SAA1B;EACA,IAAMM,YAAY,cAAYN,SAA9B;EACA,IAAMO,UAAU,YAAUP,SAA1B;EACA,IAAMQ,WAAW,aAAWR,SAA5B;EACA,IAAMS,oBAAoB,aAAWT,SAAX,GAAuBC,YAAjD;EAEA,IAAMS,wBAAwB,GAAG,eAAjC;EACA,IAAMC,iBAAiB,GAAG,QAA1B;EACA,IAAMC,mBAAmB,GAAG,UAA5B;EACA,IAAMC,eAAe,GAAG,MAAxB;EACA,IAAMC,eAAe,GAAG,MAAxB;EAEA,IAAMC,iBAAiB,GAAG,WAA1B;EACA,IAAMC,uBAAuB,GAAG,mBAAhC;EACA,IAAMC,eAAe,GAAG,SAAxB;EACA,IAAMC,kBAAkB,GAAG,gBAA3B;EACA,IAAMC,oBAAoB,GAAG,iEAA7B;EACA,IAAMC,wBAAwB,GAAG,kBAAjC;EACA,IAAMC,8BAA8B,GAAG,0BAAvC;EAEA;EACA;EACA;EACA;EACA;;MAEMC;EACJ,eAAYC,OAAZ,EAAqB;EACnB,SAAKC,QAAL,GAAgBD,OAAhB;EACD;;;;;EAQD;WAEAE,OAAA,gBAAO;EAAA;;EACL,QAAI,KAAKD,QAAL,CAAcE,UAAd,IACA,KAAKF,QAAL,CAAcE,UAAd,CAAyBC,QAAzB,KAAsCC,IAAI,CAACC,YAD3C,IAEA1B,qBAAC,CAAC,KAAKqB,QAAN,CAAD,CAAiBM,QAAjB,CAA0BnB,iBAA1B,CAFA,IAGAR,qBAAC,CAAC,KAAKqB,QAAN,CAAD,CAAiBM,QAAjB,CAA0BlB,mBAA1B,CAHJ,EAGoD;EAClD;EACD;;EAED,QAAImB,MAAJ;EACA,QAAIC,QAAJ;EACA,QAAMC,WAAW,GAAG9B,qBAAC,CAAC,KAAKqB,QAAN,CAAD,CAAiBU,OAAjB,CAAyBlB,uBAAzB,EAAkD,CAAlD,CAApB;EACA,QAAMmB,QAAQ,GAAGC,wBAAI,CAACC,sBAAL,CAA4B,KAAKb,QAAjC,CAAjB;;EAEA,QAAIS,WAAJ,EAAiB;EACf,UAAMK,YAAY,GAAGL,WAAW,CAACM,QAAZ,KAAyB,IAAzB,IAAiCN,WAAW,CAACM,QAAZ,KAAyB,IAA1D,GAAiErB,kBAAjE,GAAsFD,eAA3G;EACAe,MAAAA,QAAQ,GAAG7B,qBAAC,CAACqC,SAAF,CAAYrC,qBAAC,CAAC8B,WAAD,CAAD,CAAeQ,IAAf,CAAoBH,YAApB,CAAZ,CAAX;EACAN,MAAAA,QAAQ,GAAGA,QAAQ,CAACA,QAAQ,CAACU,MAAT,GAAkB,CAAnB,CAAnB;EACD;;EAED,QAAMC,SAAS,GAAGxC,qBAAC,CAACyC,KAAF,CAAQvC,UAAR,EAAoB;EACpCwC,MAAAA,aAAa,EAAE,KAAKrB;EADgB,KAApB,CAAlB;EAIA,QAAMsB,SAAS,GAAG3C,qBAAC,CAACyC,KAAF,CAAQrC,UAAR,EAAoB;EACpCsC,MAAAA,aAAa,EAAEb;EADqB,KAApB,CAAlB;;EAIA,QAAIA,QAAJ,EAAc;EACZ7B,MAAAA,qBAAC,CAAC6B,QAAD,CAAD,CAAYe,OAAZ,CAAoBJ,SAApB;EACD;;EAEDxC,IAAAA,qBAAC,CAAC,KAAKqB,QAAN,CAAD,CAAiBuB,OAAjB,CAAyBD,SAAzB;;EAEA,QAAIA,SAAS,CAACE,kBAAV,MACAL,SAAS,CAACK,kBAAV,EADJ,EACoC;EAClC;EACD;;EAED,QAAIb,QAAJ,EAAc;EACZJ,MAAAA,MAAM,GAAGkB,QAAQ,CAACC,aAAT,CAAuBf,QAAvB,CAAT;EACD;;EAED,SAAKgB,SAAL,CACE,KAAK3B,QADP,EAEES,WAFF;;EAKA,QAAMmB,QAAQ,GAAG,SAAXA,QAAW,GAAM;EACrB,UAAMC,WAAW,GAAGlD,qBAAC,CAACyC,KAAF,CAAQtC,YAAR,EAAsB;EACxCuC,QAAAA,aAAa,EAAE,KAAI,CAACrB;EADoB,OAAtB,CAApB;EAIA,UAAM8B,UAAU,GAAGnD,qBAAC,CAACyC,KAAF,CAAQpC,WAAR,EAAqB;EACtCqC,QAAAA,aAAa,EAAEb;EADuB,OAArB,CAAnB;EAIA7B,MAAAA,qBAAC,CAAC6B,QAAD,CAAD,CAAYe,OAAZ,CAAoBM,WAApB;EACAlD,MAAAA,qBAAC,CAAC,KAAI,CAACqB,QAAN,CAAD,CAAiBuB,OAAjB,CAAyBO,UAAzB;EACD,KAXD;;EAaA,QAAIvB,MAAJ,EAAY;EACV,WAAKoB,SAAL,CAAepB,MAAf,EAAuBA,MAAM,CAACL,UAA9B,EAA0C0B,QAA1C;EACD,KAFD,MAEO;EACLA,MAAAA,QAAQ;EACT;EACF;;WAEDG,UAAA,mBAAU;EACRpD,IAAAA,qBAAC,CAACqD,UAAF,CAAa,KAAKhC,QAAlB,EAA4BzB,QAA5B;EACA,SAAKyB,QAAL,GAAgB,IAAhB;EACD;;;WAID2B,YAAA,mBAAU5B,OAAV,EAAmBkC,SAAnB,EAA8BC,QAA9B,EAAwC;EAAA;;EACtC,QAAMC,cAAc,GAAGF,SAAS,KAAKA,SAAS,CAAClB,QAAV,KAAuB,IAAvB,IAA+BkB,SAAS,CAAClB,QAAV,KAAuB,IAA3D,CAAT,GACrBpC,qBAAC,CAACsD,SAAD,CAAD,CAAahB,IAAb,CAAkBvB,kBAAlB,CADqB,GAErBf,qBAAC,CAACsD,SAAD,CAAD,CAAaG,QAAb,CAAsB3C,eAAtB,CAFF;EAIA,QAAM4C,MAAM,GAAGF,cAAc,CAAC,CAAD,CAA7B;EACA,QAAMG,eAAe,GAAGJ,QAAQ,IAAKG,MAAM,IAAI1D,qBAAC,CAAC0D,MAAD,CAAD,CAAU/B,QAAV,CAAmBjB,eAAnB,CAA/C;;EACA,QAAMuC,QAAQ,GAAG,SAAXA,QAAW;EAAA,aAAM,MAAI,CAACW,mBAAL,CACrBxC,OADqB,EAErBsC,MAFqB,EAGrBH,QAHqB,CAAN;EAAA,KAAjB;;EAMA,QAAIG,MAAM,IAAIC,eAAd,EAA+B;EAC7B,UAAME,kBAAkB,GAAG5B,wBAAI,CAAC6B,gCAAL,CAAsCJ,MAAtC,CAA3B;EAEA1D,MAAAA,qBAAC,CAAC0D,MAAD,CAAD,CACGK,WADH,CACepD,eADf,EAEGqD,GAFH,CAEO/B,wBAAI,CAACgC,cAFZ,EAE4BhB,QAF5B,EAGGiB,oBAHH,CAGwBL,kBAHxB;EAID,KAPD,MAOO;EACLZ,MAAAA,QAAQ;EACT;EACF;;WAEDW,sBAAA,6BAAoBxC,OAApB,EAA6BsC,MAA7B,EAAqCH,QAArC,EAA+C;EAC7C,QAAIG,MAAJ,EAAY;EACV1D,MAAAA,qBAAC,CAAC0D,MAAD,CAAD,CAAUK,WAAV,CAAsBvD,iBAAtB;EAEA,UAAM2D,aAAa,GAAGnE,qBAAC,CAAC0D,MAAM,CAACnC,UAAR,CAAD,CAAqBe,IAArB,CACpBpB,8BADoB,EAEpB,CAFoB,CAAtB;;EAIA,UAAIiD,aAAJ,EAAmB;EACjBnE,QAAAA,qBAAC,CAACmE,aAAD,CAAD,CAAiBJ,WAAjB,CAA6BvD,iBAA7B;EACD;;EAED,UAAIkD,MAAM,CAACU,YAAP,CAAoB,MAApB,MAAgC,KAApC,EAA2C;EACzCV,QAAAA,MAAM,CAACW,YAAP,CAAoB,eAApB,EAAqC,KAArC;EACD;EACF;;EAEDrE,IAAAA,qBAAC,CAACoB,OAAD,CAAD,CAAWkD,QAAX,CAAoB9D,iBAApB;;EACA,QAAIY,OAAO,CAACgD,YAAR,CAAqB,MAArB,MAAiC,KAArC,EAA4C;EAC1ChD,MAAAA,OAAO,CAACiD,YAAR,CAAqB,eAArB,EAAsC,IAAtC;EACD;;EAEDpC,IAAAA,wBAAI,CAACsC,MAAL,CAAYnD,OAAZ;;EAEA,QAAIA,OAAO,CAACoD,SAAR,CAAkBC,QAAlB,CAA2B/D,eAA3B,CAAJ,EAAiD;EAC/CU,MAAAA,OAAO,CAACoD,SAAR,CAAkBE,GAAlB,CAAsB/D,eAAtB;EACD;;EAED,QAAIS,OAAO,CAACG,UAAR,IAAsBvB,qBAAC,CAACoB,OAAO,CAACG,UAAT,CAAD,CAAsBI,QAAtB,CAA+BpB,wBAA/B,CAA1B,EAAoF;EAClF,UAAMoE,eAAe,GAAG3E,qBAAC,CAACoB,OAAD,CAAD,CAAWW,OAAX,CAAmBnB,iBAAnB,EAAsC,CAAtC,CAAxB;;EAEA,UAAI+D,eAAJ,EAAqB;EACnB,YAAMC,kBAAkB,GAAG,GAAGC,KAAH,CAASC,IAAT,CAAcH,eAAe,CAACI,gBAAhB,CAAiC9D,wBAAjC,CAAd,CAA3B;EAEAjB,QAAAA,qBAAC,CAAC4E,kBAAD,CAAD,CAAsBN,QAAtB,CAA+B9D,iBAA/B;EACD;;EAEDY,MAAAA,OAAO,CAACiD,YAAR,CAAqB,eAArB,EAAsC,IAAtC;EACD;;EAED,QAAId,QAAJ,EAAc;EACZA,MAAAA,QAAQ;EACT;EACF;;;QAIMyB,mBAAP,0BAAwBC,MAAxB,EAAgC;EAC9B,WAAO,KAAKC,IAAL,CAAU,YAAY;EAC3B,UAAMC,KAAK,GAAGnF,qBAAC,CAAC,IAAD,CAAf;EACA,UAAIoF,IAAI,GAAGD,KAAK,CAACC,IAAN,CAAWxF,QAAX,CAAX;;EAEA,UAAI,CAACwF,IAAL,EAAW;EACTA,QAAAA,IAAI,GAAG,IAAIjE,GAAJ,CAAQ,IAAR,CAAP;EACAgE,QAAAA,KAAK,CAACC,IAAN,CAAWxF,QAAX,EAAqBwF,IAArB;EACD;;EAED,UAAI,OAAOH,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,YAAI,OAAOG,IAAI,CAACH,MAAD,CAAX,KAAwB,WAA5B,EAAyC;EACvC,gBAAM,IAAII,SAAJ,wBAAkCJ,MAAlC,QAAN;EACD;;EAEDG,QAAAA,IAAI,CAACH,MAAD,CAAJ;EACD;EACF,KAhBM,CAAP;EAiBD;;;;0BA1KoB;EACnB,aAAOtF,OAAP;EACD;;;;;EA2KH;EACA;EACA;EACA;EACA;;;AAEAK,uBAAC,CAAC8C,QAAD,CAAD,CACGwC,EADH,CACMhF,oBADN,EAC4BU,oBAD5B,EACkD,UAAUuE,KAAV,EAAiB;EAC/DA,EAAAA,KAAK,CAACC,cAAN;;EACArE,EAAAA,GAAG,CAAC6D,gBAAJ,CAAqBF,IAArB,CAA0B9E,qBAAC,CAAC,IAAD,CAA3B,EAAmC,MAAnC;EACD,CAJH;EAMA;EACA;EACA;EACA;EACA;;AAEAA,uBAAC,CAACC,EAAF,CAAKP,IAAL,IAAayB,GAAG,CAAC6D,gBAAjB;AACAhF,uBAAC,CAACC,EAAF,CAAKP,IAAL,EAAW+F,WAAX,GAAyBtE,GAAzB;;AACAnB,uBAAC,CAACC,EAAF,CAAKP,IAAL,EAAWgG,UAAX,GAAwB,YAAM;EAC5B1F,EAAAA,qBAAC,CAACC,EAAF,CAAKP,IAAL,IAAaK,kBAAb;EACA,SAAOoB,GAAG,CAAC6D,gBAAX;EACD,CAHD;;;;;;;;"} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/js/dist/toast.js b/vendor/twbs/bootstrap/js/dist/toast.js index f74f29d46..62694e44b 100644 --- a/vendor/twbs/bootstrap/js/dist/toast.js +++ b/vendor/twbs/bootstrap/js/dist/toast.js @@ -1,11 +1,11 @@ /*! - * Bootstrap toast.js v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap toast.js v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : - typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) : + typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Toast = factory(global.jQuery, global.Util)); }(this, (function ($, Util) { 'use strict'; @@ -14,11 +14,40 @@ var $__default = /*#__PURE__*/_interopDefaultLegacy($); var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util); - function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); + } - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * ------------------------------------------------------------------------ * Constants @@ -26,7 +55,7 @@ */ var NAME = 'toast'; - var VERSION = '4.5.3'; + var VERSION = '4.6.0'; var DATA_KEY = 'bs.toast'; var EVENT_KEY = "." + DATA_KEY; var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME]; diff --git a/vendor/twbs/bootstrap/js/dist/toast.js.map b/vendor/twbs/bootstrap/js/dist/toast.js.map index 71675b7c3..eafaad649 100644 --- a/vendor/twbs/bootstrap/js/dist/toast.js.map +++ b/vendor/twbs/bootstrap/js/dist/toast.js.map @@ -1 +1 @@ -{"version":3,"file":"toast.js","sources":["../src/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 500\n}\n\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast {\n constructor(element, config) {\n this._element = element\n this._config = this._getConfig(config)\n this._timeout = null\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n show() {\n const showEvent = $.Event(EVENT_SHOW)\n\n $(this._element).trigger(showEvent)\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n $(this._element).trigger(EVENT_SHOWN)\n\n if (this._config.autohide) {\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n Util.reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._close()\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n\n $.removeData(this._element, DATA_KEY)\n this._element = null\n this._config = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...$(this._element).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _setListeners() {\n $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n }\n\n _close() {\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n $(this._element).trigger(EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new Toast(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Toast._jQueryInterface\n$.fn[NAME].Constructor = Toast\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Toast._jQueryInterface\n}\n\nexport default Toast\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","EVENT_CLICK_DISMISS","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_FADE","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","DefaultType","animation","autohide","delay","Default","SELECTOR_DATA_DISMISS","Toast","element","config","_element","_config","_getConfig","_timeout","_setListeners","show","showEvent","Event","trigger","isDefaultPrevented","_clearTimeout","classList","add","complete","remove","setTimeout","hide","Util","reflow","transitionDuration","getTransitionDurationFromElement","one","TRANSITION_END","emulateTransitionEnd","contains","hideEvent","_close","dispose","off","removeData","data","typeCheckConfig","constructor","on","clearTimeout","_jQueryInterface","each","$element","TypeError","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"toast.js","sources":["../src/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 500\n}\n\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast {\n constructor(element, config) {\n this._element = element\n this._config = this._getConfig(config)\n this._timeout = null\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n show() {\n const showEvent = $.Event(EVENT_SHOW)\n\n $(this._element).trigger(showEvent)\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n $(this._element).trigger(EVENT_SHOWN)\n\n if (this._config.autohide) {\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n Util.reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._close()\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n\n $.removeData(this._element, DATA_KEY)\n this._element = null\n this._config = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...$(this._element).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _setListeners() {\n $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n }\n\n _close() {\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n $(this._element).trigger(EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new Toast(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Toast._jQueryInterface\n$.fn[NAME].Constructor = Toast\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Toast._jQueryInterface\n}\n\nexport default Toast\n"],"names":["NAME","VERSION","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","EVENT_CLICK_DISMISS","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_FADE","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","DefaultType","animation","autohide","delay","Default","SELECTOR_DATA_DISMISS","Toast","element","config","_element","_config","_getConfig","_timeout","_setListeners","show","showEvent","Event","trigger","isDefaultPrevented","_clearTimeout","classList","add","complete","remove","setTimeout","hide","Util","reflow","transitionDuration","getTransitionDurationFromElement","one","TRANSITION_END","emulateTransitionEnd","contains","hideEvent","_close","dispose","off","removeData","data","typeCheckConfig","constructor","on","clearTimeout","_jQueryInterface","each","$element","TypeError","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/js/dist/tooltip.js b/vendor/twbs/bootstrap/js/dist/tooltip.js index 663337862..ae6ec8ed7 100644 --- a/vendor/twbs/bootstrap/js/dist/tooltip.js +++ b/vendor/twbs/bootstrap/js/dist/tooltip.js @@ -1,11 +1,11 @@ /*! - * Bootstrap tooltip.js v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap tooltip.js v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) : - typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) : + typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tooltip = factory(global.jQuery, global.Popper, global.Util)); }(this, (function ($, Popper, Util) { 'use strict'; @@ -15,9 +15,43 @@ var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper); var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util); + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); + } + /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): tools/sanitizer.js + * Bootstrap (v4.6.0): tools/sanitizer.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -136,11 +170,6 @@ return createdDocument.body.innerHTML; } - function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * ------------------------------------------------------------------------ * Constants @@ -148,7 +177,7 @@ */ var NAME = 'tooltip'; - var VERSION = '4.5.3'; + var VERSION = '4.6.0'; var DATA_KEY = 'bs.tooltip'; var EVENT_KEY = "." + DATA_KEY; var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME]; @@ -168,6 +197,7 @@ container: '(string|element|boolean)', fallbackPlacement: '(string|array)', boundary: '(string|element)', + customClass: '(string|function)', sanitize: 'boolean', sanitizeFn: '(null|function)', whiteList: 'object', @@ -193,6 +223,7 @@ container: false, fallbackPlacement: 'flip', boundary: 'scrollParent', + customClass: '', sanitize: true, sanitizeFn: null, whiteList: DefaultWhitelist, @@ -229,7 +260,7 @@ var Tooltip = /*#__PURE__*/function () { function Tooltip(element, config) { if (typeof Popper__default['default'] === 'undefined') { - throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); + throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); } // private @@ -363,7 +394,8 @@ $__default['default'](this.element).trigger(this.constructor.Event.INSERTED); this._popper = new Popper__default['default'](this.element, tip, this._getPopperConfig(attachment)); - $__default['default'](tip).addClass(CLASS_NAME_SHOW); // If this is a touch-enabled device we add extra + $__default['default'](tip).addClass(CLASS_NAME_SHOW); + $__default['default'](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; // only needed because of broken event delegation on iOS // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html diff --git a/vendor/twbs/bootstrap/js/dist/tooltip.js.map b/vendor/twbs/bootstrap/js/dist/tooltip.js.map index b48d5030b..065d3e743 100644 --- a/vendor/twbs/bootstrap/js/dist/tooltip.js.map +++ b/vendor/twbs/bootstrap/js/dist/tooltip.js.map @@ -1 +1 @@ -{"version":3,"file":"tooltip.js","sources":["../src/tools/sanitizer.js","../src/tooltip.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.5.3'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n}\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n}\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: data => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: data => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this.config.offset(data.offsets, this.element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n event => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, event => this._enter(event))\n .on(eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n"],"names":["uriAttrs","ARIA_ATTRIBUTE_PATTERN","DefaultWhitelist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attr","allowedAttributeList","attrName","nodeName","toLowerCase","indexOf","Boolean","nodeValue","match","regExp","filter","attrRegex","RegExp","len","length","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","domParser","window","DOMParser","createdDocument","parseFromString","whitelistKeys","Object","keys","elements","slice","call","body","querySelectorAll","el","elName","parentNode","removeChild","attributeList","attributes","whitelistedAttributes","concat","forEach","removeAttribute","innerHTML","NAME","VERSION","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","CLASS_PREFIX","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","DefaultType","animation","template","title","trigger","delay","html","selector","placement","offset","container","fallbackPlacement","boundary","sanitize","popperConfig","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default","HOVER_STATE_SHOW","HOVER_STATE_OUT","Event","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","CLASS_NAME_FADE","CLASS_NAME_SHOW","SELECTOR_TOOLTIP_INNER","SELECTOR_ARROW","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","Tooltip","element","config","Popper","TypeError","_isEnabled","_timeout","_hoverState","_activeTrigger","_popper","_getConfig","tip","_setListeners","enable","disable","toggleEnabled","toggle","event","dataKey","constructor","context","currentTarget","data","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","hasClass","dispose","clearTimeout","removeData","off","closest","_hideModalHandler","remove","destroy","show","css","Error","showEvent","isWithContent","shadowRoot","Util","findShadowRoot","isInTheDom","contains","ownerDocument","documentElement","isDefaultPrevented","tipId","getUID","setAttribute","setContent","addClass","attachment","_getAttachment","addAttachmentClass","_getContainer","appendTo","_getPopperConfig","document","children","on","noop","complete","_fixTransition","prevHoverState","transitionDuration","getTransitionDurationFromElement","one","TRANSITION_END","emulateTransitionEnd","hide","callback","hideEvent","_cleanTipClass","removeClass","update","scheduleUpdate","getTitle","setElementContent","$element","content","nodeType","jquery","parent","is","empty","append","text","getAttribute","defaultBsConfig","modifiers","_getOffset","flip","behavior","arrow","preventOverflow","boundariesElement","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","offsets","isElement","find","toUpperCase","triggers","split","eventIn","eventOut","_fixTitle","titleType","type","setTimeout","dataAttributes","dataAttr","toString","typeCheckConfig","key","$tip","tabClass","join","popperData","instance","popper","initConfigAnimation","_jQueryInterface","each","_config","test","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tooltip.js","sources":["../src/tools/sanitizer.js","../src/tooltip.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n customClass: '(string|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n}\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n customClass: '',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n}\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n $(tip).addClass(this.config.customClass)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: data => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: data => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this.config.offset(data.offsets, this.element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n event => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, event => this._enter(event))\n .on(eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n"],"names":["uriAttrs","ARIA_ATTRIBUTE_PATTERN","DefaultWhitelist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attr","allowedAttributeList","attrName","nodeName","toLowerCase","indexOf","Boolean","nodeValue","match","regExp","filter","attrRegex","RegExp","len","length","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","domParser","window","DOMParser","createdDocument","parseFromString","whitelistKeys","Object","keys","elements","slice","call","body","querySelectorAll","el","elName","parentNode","removeChild","attributeList","attributes","whitelistedAttributes","concat","forEach","removeAttribute","innerHTML","NAME","VERSION","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","CLASS_PREFIX","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","DefaultType","animation","template","title","trigger","delay","html","selector","placement","offset","container","fallbackPlacement","boundary","customClass","sanitize","popperConfig","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default","HOVER_STATE_SHOW","HOVER_STATE_OUT","Event","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","CLASS_NAME_FADE","CLASS_NAME_SHOW","SELECTOR_TOOLTIP_INNER","SELECTOR_ARROW","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","Tooltip","element","config","Popper","TypeError","_isEnabled","_timeout","_hoverState","_activeTrigger","_popper","_getConfig","tip","_setListeners","enable","disable","toggleEnabled","toggle","event","dataKey","constructor","context","currentTarget","data","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","hasClass","dispose","clearTimeout","removeData","off","closest","_hideModalHandler","remove","destroy","show","css","Error","showEvent","isWithContent","shadowRoot","Util","findShadowRoot","isInTheDom","contains","ownerDocument","documentElement","isDefaultPrevented","tipId","getUID","setAttribute","setContent","addClass","attachment","_getAttachment","addAttachmentClass","_getContainer","appendTo","_getPopperConfig","document","children","on","noop","complete","_fixTransition","prevHoverState","transitionDuration","getTransitionDurationFromElement","one","TRANSITION_END","emulateTransitionEnd","hide","callback","hideEvent","_cleanTipClass","removeClass","update","scheduleUpdate","getTitle","setElementContent","$element","content","nodeType","jquery","parent","is","empty","append","text","getAttribute","defaultBsConfig","modifiers","_getOffset","flip","behavior","arrow","preventOverflow","boundariesElement","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","offsets","isElement","find","toUpperCase","triggers","split","eventIn","eventOut","_fixTitle","titleType","type","setTimeout","dataAttributes","dataAttr","toString","typeCheckConfig","key","$tip","tabClass","join","popperData","instance","popper","initConfigAnimation","_jQueryInterface","each","_config","test","Constructor","noConflict"],"mappings":"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"} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/js/dist/util.js b/vendor/twbs/bootstrap/js/dist/util.js index e3b5c1180..55b6d244b 100644 --- a/vendor/twbs/bootstrap/js/dist/util.js +++ b/vendor/twbs/bootstrap/js/dist/util.js @@ -1,6 +1,6 @@ /*! - * Bootstrap util.js v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap util.js v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { @@ -15,7 +15,7 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): util.js + * Bootstrap (v4.6.0): util.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ diff --git a/vendor/twbs/bootstrap/js/dist/util.js.map b/vendor/twbs/bootstrap/js/dist/util.js.map index 246cf3d2e..1740a2f3b 100644 --- a/vendor/twbs/bootstrap/js/dist/util.js.map +++ b/vendor/twbs/bootstrap/js/dist/util.js.map @@ -1 +1 @@ -{"version":3,"file":"util.js","sources":["../src/util.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (_) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n"],"names":["TRANSITION_END","MAX_UID","MILLISECONDS_MULTIPLIER","toType","obj","toString","call","match","toLowerCase","getSpecialTransitionEndEvent","bindType","delegateType","handle","event","$","target","is","handleObj","handler","apply","arguments","undefined","transitionEndEmulator","duration","called","one","Util","setTimeout","triggerTransitionEnd","setTransitionEndSupport","fn","emulateTransitionEnd","special","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","trigger","supportsTransitionEnd","Boolean","isElement","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","expectedTypes","value","valueType","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","TypeError","version","jquery","minMajor","ltMajor","minMinor","minPatch","maxMajor"],"mappings":";;;;;;;;;;;;;;;EAAA;;;;;;EASA;;;;;;EAMA,IAAMA,cAAc,GAAG,eAAvB;EACA,IAAMC,OAAO,GAAG,OAAhB;EACA,IAAMC,uBAAuB,GAAG,IAAhC;;EAGA,SAASC,MAAT,CAAgBC,GAAhB,EAAqB;EACnB,MAAIA,GAAG,KAAK,IAAR,IAAgB,OAAOA,GAAP,KAAe,WAAnC,EAAgD;EAC9C,gBAAUA,GAAV;EACD;;EAED,SAAO,GAAGC,QAAH,CAAYC,IAAZ,CAAiBF,GAAjB,EAAsBG,KAAtB,CAA4B,aAA5B,EAA2C,CAA3C,EAA8CC,WAA9C,EAAP;EACD;;EAED,SAASC,4BAAT,GAAwC;EACtC,SAAO;EACLC,IAAAA,QAAQ,EAAEV,cADL;EAELW,IAAAA,YAAY,EAAEX,cAFT;EAGLY,IAAAA,MAHK,kBAGEC,KAHF,EAGS;EACZ,UAAIC,qBAAC,CAACD,KAAK,CAACE,MAAP,CAAD,CAAgBC,EAAhB,CAAmB,IAAnB,CAAJ,EAA8B;EAC5B,eAAOH,KAAK,CAACI,SAAN,CAAgBC,OAAhB,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC,CAAP,CAD4B;EAE7B;;EAED,aAAOC,SAAP;EACD;EATI,GAAP;EAWD;;EAED,SAASC,qBAAT,CAA+BC,QAA/B,EAAyC;EAAA;;EACvC,MAAIC,MAAM,GAAG,KAAb;EAEAV,EAAAA,qBAAC,CAAC,IAAD,CAAD,CAAQW,GAAR,CAAYC,IAAI,CAAC1B,cAAjB,EAAiC,YAAM;EACrCwB,IAAAA,MAAM,GAAG,IAAT;EACD,GAFD;EAIAG,EAAAA,UAAU,CAAC,YAAM;EACf,QAAI,CAACH,MAAL,EAAa;EACXE,MAAAA,IAAI,CAACE,oBAAL,CAA0B,KAA1B;EACD;EACF,GAJS,EAIPL,QAJO,CAAV;EAMA,SAAO,IAAP;EACD;;EAED,SAASM,uBAAT,GAAmC;EACjCf,EAAAA,qBAAC,CAACgB,EAAF,CAAKC,oBAAL,GAA4BT,qBAA5B;EACAR,EAAAA,qBAAC,CAACD,KAAF,CAAQmB,OAAR,CAAgBN,IAAI,CAAC1B,cAArB,IAAuCS,4BAA4B,EAAnE;EACD;EAED;;;;;;;MAMMiB,IAAI,GAAG;EACX1B,EAAAA,cAAc,EAAE,iBADL;EAGXiC,EAAAA,MAHW,kBAGJC,MAHI,EAGI;EACb,OAAG;EACDA,MAAAA,MAAM,IAAI,CAAC,EAAEC,IAAI,CAACC,MAAL,KAAgBnC,OAAlB,CAAX,CADC;EAEF,KAFD,QAESoC,QAAQ,CAACC,cAAT,CAAwBJ,MAAxB,CAFT;;EAIA,WAAOA,MAAP;EACD,GATU;EAWXK,EAAAA,sBAXW,kCAWYC,OAXZ,EAWqB;EAC9B,QAAIC,QAAQ,GAAGD,OAAO,CAACE,YAAR,CAAqB,aAArB,CAAf;;EAEA,QAAI,CAACD,QAAD,IAAaA,QAAQ,KAAK,GAA9B,EAAmC;EACjC,UAAME,QAAQ,GAAGH,OAAO,CAACE,YAAR,CAAqB,MAArB,CAAjB;EACAD,MAAAA,QAAQ,GAAGE,QAAQ,IAAIA,QAAQ,KAAK,GAAzB,GAA+BA,QAAQ,CAACC,IAAT,EAA/B,GAAiD,EAA5D;EACD;;EAED,QAAI;EACF,aAAOP,QAAQ,CAACQ,aAAT,CAAuBJ,QAAvB,IAAmCA,QAAnC,GAA8C,IAArD;EACD,KAFD,CAEE,OAAOK,CAAP,EAAU;EACV,aAAO,IAAP;EACD;EACF,GAxBU;EA0BXC,EAAAA,gCA1BW,4CA0BsBP,OA1BtB,EA0B+B;EACxC,QAAI,CAACA,OAAL,EAAc;EACZ,aAAO,CAAP;EACD,KAHuC;;;EAMxC,QAAIQ,kBAAkB,GAAGlC,qBAAC,CAAC0B,OAAD,CAAD,CAAWS,GAAX,CAAe,qBAAf,CAAzB;EACA,QAAIC,eAAe,GAAGpC,qBAAC,CAAC0B,OAAD,CAAD,CAAWS,GAAX,CAAe,kBAAf,CAAtB;EAEA,QAAME,uBAAuB,GAAGC,UAAU,CAACJ,kBAAD,CAA1C;EACA,QAAMK,oBAAoB,GAAGD,UAAU,CAACF,eAAD,CAAvC,CAVwC;;EAaxC,QAAI,CAACC,uBAAD,IAA4B,CAACE,oBAAjC,EAAuD;EACrD,aAAO,CAAP;EACD,KAfuC;;;EAkBxCL,IAAAA,kBAAkB,GAAGA,kBAAkB,CAACM,KAAnB,CAAyB,GAAzB,EAA8B,CAA9B,CAArB;EACAJ,IAAAA,eAAe,GAAGA,eAAe,CAACI,KAAhB,CAAsB,GAAtB,EAA2B,CAA3B,CAAlB;EAEA,WAAO,CAACF,UAAU,CAACJ,kBAAD,CAAV,GAAiCI,UAAU,CAACF,eAAD,CAA5C,IAAiEhD,uBAAxE;EACD,GAhDU;EAkDXqD,EAAAA,MAlDW,kBAkDJf,OAlDI,EAkDK;EACd,WAAOA,OAAO,CAACgB,YAAf;EACD,GApDU;EAsDX5B,EAAAA,oBAtDW,gCAsDUY,OAtDV,EAsDmB;EAC5B1B,IAAAA,qBAAC,CAAC0B,OAAD,CAAD,CAAWiB,OAAX,CAAmBzD,cAAnB;EACD,GAxDU;EA0DX0D,EAAAA,qBA1DW,mCA0Da;EACtB,WAAOC,OAAO,CAAC3D,cAAD,CAAd;EACD,GA5DU;EA8DX4D,EAAAA,SA9DW,qBA8DDxD,GA9DC,EA8DI;EACb,WAAO,CAACA,GAAG,CAAC,CAAD,CAAH,IAAUA,GAAX,EAAgByD,QAAvB;EACD,GAhEU;EAkEXC,EAAAA,eAlEW,2BAkEKC,aAlEL,EAkEoBC,MAlEpB,EAkE4BC,WAlE5B,EAkEyC;EAClD,SAAK,IAAMC,QAAX,IAAuBD,WAAvB,EAAoC;EAClC,UAAIE,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgC/D,IAAhC,CAAqC2D,WAArC,EAAkDC,QAAlD,CAAJ,EAAiE;EAC/D,YAAMI,aAAa,GAAGL,WAAW,CAACC,QAAD,CAAjC;EACA,YAAMK,KAAK,GAAGP,MAAM,CAACE,QAAD,CAApB;EACA,YAAMM,SAAS,GAAGD,KAAK,IAAI7C,IAAI,CAACkC,SAAL,CAAeW,KAAf,CAAT,GAChB,SADgB,GACJpE,MAAM,CAACoE,KAAD,CADpB;;EAGA,YAAI,CAAC,IAAIE,MAAJ,CAAWH,aAAX,EAA0BI,IAA1B,CAA+BF,SAA/B,CAAL,EAAgD;EAC9C,gBAAM,IAAIG,KAAJ,CACDZ,aAAa,CAACa,WAAd,EAAH,yBACWV,QADX,2BACuCM,SADvC,sCAEsBF,aAFtB,SADI,CAAN;EAID;EACF;EACF;EACF,GAlFU;EAoFXO,EAAAA,cApFW,0BAoFIrC,OApFJ,EAoFa;EACtB,QAAI,CAACH,QAAQ,CAACyC,eAAT,CAAyBC,YAA9B,EAA4C;EAC1C,aAAO,IAAP;EACD,KAHqB;;;EAMtB,QAAI,OAAOvC,OAAO,CAACwC,WAAf,KAA+B,UAAnC,EAA+C;EAC7C,UAAMC,IAAI,GAAGzC,OAAO,CAACwC,WAAR,EAAb;EACA,aAAOC,IAAI,YAAYC,UAAhB,GAA6BD,IAA7B,GAAoC,IAA3C;EACD;;EAED,QAAIzC,OAAO,YAAY0C,UAAvB,EAAmC;EACjC,aAAO1C,OAAP;EACD,KAbqB;;;EAgBtB,QAAI,CAACA,OAAO,CAAC2C,UAAb,EAAyB;EACvB,aAAO,IAAP;EACD;;EAED,WAAOzD,IAAI,CAACmD,cAAL,CAAoBrC,OAAO,CAAC2C,UAA5B,CAAP;EACD,GAzGU;EA2GXC,EAAAA,eA3GW,6BA2GO;EAChB,QAAI,OAAOtE,qBAAP,KAAa,WAAjB,EAA8B;EAC5B,YAAM,IAAIuE,SAAJ,CAAc,kGAAd,CAAN;EACD;;EAED,QAAMC,OAAO,GAAGxE,qBAAC,CAACgB,EAAF,CAAKyD,MAAL,CAAYjC,KAAZ,CAAkB,GAAlB,EAAuB,CAAvB,EAA0BA,KAA1B,CAAgC,GAAhC,CAAhB;EACA,QAAMkC,QAAQ,GAAG,CAAjB;EACA,QAAMC,OAAO,GAAG,CAAhB;EACA,QAAMC,QAAQ,GAAG,CAAjB;EACA,QAAMC,QAAQ,GAAG,CAAjB;EACA,QAAMC,QAAQ,GAAG,CAAjB;;EAEA,QAAIN,OAAO,CAAC,CAAD,CAAP,GAAaG,OAAb,IAAwBH,OAAO,CAAC,CAAD,CAAP,GAAaI,QAArC,IAAiDJ,OAAO,CAAC,CAAD,CAAP,KAAeE,QAAf,IAA2BF,OAAO,CAAC,CAAD,CAAP,KAAeI,QAA1C,IAAsDJ,OAAO,CAAC,CAAD,CAAP,GAAaK,QAApH,IAAgIL,OAAO,CAAC,CAAD,CAAP,IAAcM,QAAlJ,EAA4J;EAC1J,YAAM,IAAIjB,KAAJ,CAAU,8EAAV,CAAN;EACD;EACF;EA1HU;EA6HbjD,IAAI,CAAC0D,eAAL;EACAvD,uBAAuB;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"util.js","sources":["../src/util.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (_) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n"],"names":["TRANSITION_END","MAX_UID","MILLISECONDS_MULTIPLIER","toType","obj","toString","call","match","toLowerCase","getSpecialTransitionEndEvent","bindType","delegateType","handle","event","$","target","is","handleObj","handler","apply","arguments","undefined","transitionEndEmulator","duration","called","one","Util","setTimeout","triggerTransitionEnd","setTransitionEndSupport","fn","emulateTransitionEnd","special","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","trigger","supportsTransitionEnd","Boolean","isElement","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","expectedTypes","value","valueType","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","TypeError","version","jquery","minMajor","ltMajor","minMinor","minPatch","maxMajor"],"mappings":"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"} \ No newline at end of file diff --git a/vendor/twbs/bootstrap/js/index.js b/vendor/twbs/bootstrap/js/index.js new file mode 100644 index 000000000..4f96305a3 --- /dev/null +++ b/vendor/twbs/bootstrap/js/index.js @@ -0,0 +1,34 @@ +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.6.0): index.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + * -------------------------------------------------------------------------- + */ + +import Alert from './src/alert' +import Button from './src/button' +import Carousel from './src/carousel' +import Collapse from './src/collapse' +import Dropdown from './src/dropdown' +import Modal from './src/modal' +import Popover from './src/popover' +import Scrollspy from './src/scrollspy' +import Tab from './src/tab' +import Toast from './src/toast' +import Tooltip from './src/tooltip' +import Util from './src/util' + +export { + Util, + Alert, + Button, + Carousel, + Collapse, + Dropdown, + Modal, + Popover, + Scrollspy, + Tab, + Toast, + Tooltip +} diff --git a/vendor/twbs/bootstrap/js/src/alert.js b/vendor/twbs/bootstrap/js/src/alert.js index 421da7435..afd7736c7 100644 --- a/vendor/twbs/bootstrap/js/src/alert.js +++ b/vendor/twbs/bootstrap/js/src/alert.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): alert.js + * Bootstrap (v4.6.0): alert.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -15,7 +15,7 @@ import Util from './util' */ const NAME = 'alert' -const VERSION = '4.5.3' +const VERSION = '4.6.0' const DATA_KEY = 'bs.alert' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' diff --git a/vendor/twbs/bootstrap/js/src/button.js b/vendor/twbs/bootstrap/js/src/button.js index ec40af333..316387e8e 100644 --- a/vendor/twbs/bootstrap/js/src/button.js +++ b/vendor/twbs/bootstrap/js/src/button.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): button.js + * Bootstrap (v4.6.0): button.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -14,7 +14,7 @@ import $ from 'jquery' */ const NAME = 'button' -const VERSION = '4.5.3' +const VERSION = '4.6.0' const DATA_KEY = 'bs.button' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' diff --git a/vendor/twbs/bootstrap/js/src/carousel.js b/vendor/twbs/bootstrap/js/src/carousel.js index 5f738fd92..b63d406bd 100644 --- a/vendor/twbs/bootstrap/js/src/carousel.js +++ b/vendor/twbs/bootstrap/js/src/carousel.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): carousel.js + * Bootstrap (v4.6.0): carousel.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -15,7 +15,7 @@ import Util from './util' */ const NAME = 'carousel' -const VERSION = '4.5.3' +const VERSION = '4.6.0' const DATA_KEY = 'bs.carousel' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' @@ -169,6 +169,8 @@ class Carousel { } if (this._config.interval && !this._isPaused) { + this._updateInterval() + this._interval = setInterval( (document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval @@ -401,6 +403,23 @@ class Carousel { } } + _updateInterval() { + const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM) + + if (!element) { + return + } + + const elementInterval = parseInt(element.getAttribute('data-interval'), 10) + + if (elementInterval) { + this._config.defaultInterval = this._config.defaultInterval || this._config.interval + this._config.interval = elementInterval + } else { + this._config.interval = this._config.defaultInterval || this._config.interval + } + } + _slide(direction, element) { const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM) const activeElementIndex = this._getItemIndex(activeElement) @@ -445,6 +464,7 @@ class Carousel { } this._setActiveIndicatorElement(nextElement) + this._activeElement = nextElement const slidEvent = $.Event(EVENT_SLID, { relatedTarget: nextElement, @@ -461,14 +481,6 @@ class Carousel { $(activeElement).addClass(directionalClassName) $(nextElement).addClass(directionalClassName) - const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10) - if (nextElementInterval) { - this._config.defaultInterval = this._config.defaultInterval || this._config.interval - this._config.interval = nextElementInterval - } else { - this._config.interval = this._config.defaultInterval || this._config.interval - } - const transitionDuration = Util.getTransitionDurationFromElement(activeElement) $(activeElement) diff --git a/vendor/twbs/bootstrap/js/src/collapse.js b/vendor/twbs/bootstrap/js/src/collapse.js index 0ec037704..af3163be9 100644 --- a/vendor/twbs/bootstrap/js/src/collapse.js +++ b/vendor/twbs/bootstrap/js/src/collapse.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): collapse.js + * Bootstrap (v4.6.0): collapse.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -15,7 +15,7 @@ import Util from './util' */ const NAME = 'collapse' -const VERSION = '4.5.3' +const VERSION = '4.6.0' const DATA_KEY = 'bs.collapse' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' diff --git a/vendor/twbs/bootstrap/js/src/dropdown.js b/vendor/twbs/bootstrap/js/src/dropdown.js index c2779f05f..76dda8f57 100644 --- a/vendor/twbs/bootstrap/js/src/dropdown.js +++ b/vendor/twbs/bootstrap/js/src/dropdown.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): dropdown.js + * Bootstrap (v4.6.0): dropdown.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -16,7 +16,7 @@ import Util from './util' */ const NAME = 'dropdown' -const VERSION = '4.5.3' +const VERSION = '4.6.0' const DATA_KEY = 'bs.dropdown' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' @@ -143,14 +143,14 @@ class Dropdown { return } - // Disable totally Popper.js for Dropdown in Navbar + // Totally disable Popper for Dropdowns in Navbar if (!this._inNavbar && usePopper) { /** * Check for Popper dependency * Popper - https://popper.js.org */ if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)') + throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)') } let referenceElement = this._element @@ -334,7 +334,7 @@ class Dropdown { } } - // Disable Popper.js if we have a static display + // Disable Popper if we have a static display if (this._config.display === 'static') { popperConfig.modifiers.applyStyle = { enabled: false diff --git a/vendor/twbs/bootstrap/js/src/index.js b/vendor/twbs/bootstrap/js/src/index.js deleted file mode 100644 index f407cffa5..000000000 --- a/vendor/twbs/bootstrap/js/src/index.js +++ /dev/null @@ -1,34 +0,0 @@ -import Alert from './alert' -import Button from './button' -import Carousel from './carousel' -import Collapse from './collapse' -import Dropdown from './dropdown' -import Modal from './modal' -import Popover from './popover' -import Scrollspy from './scrollspy' -import Tab from './tab' -import Toast from './toast' -import Tooltip from './tooltip' -import Util from './util' - -/** - * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): index.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - -export { - Util, - Alert, - Button, - Carousel, - Collapse, - Dropdown, - Modal, - Popover, - Scrollspy, - Tab, - Toast, - Tooltip -} diff --git a/vendor/twbs/bootstrap/js/src/modal.js b/vendor/twbs/bootstrap/js/src/modal.js index 975a20be6..2e3017024 100644 --- a/vendor/twbs/bootstrap/js/src/modal.js +++ b/vendor/twbs/bootstrap/js/src/modal.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): modal.js + * Bootstrap (v4.6.0): modal.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -15,7 +15,7 @@ import Util from './util' */ const NAME = 'modal' -const VERSION = '4.5.3' +const VERSION = '4.6.0' const DATA_KEY = 'bs.modal' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' @@ -230,39 +230,35 @@ class Modal { } _triggerBackdropTransition() { - if (this._config.backdrop === 'static') { - const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED) + const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED) - $(this._element).trigger(hideEventPrevented) - if (hideEventPrevented.isDefaultPrevented()) { - return - } - - const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight - - if (!isModalOverflowing) { - this._element.style.overflowY = 'hidden' - } - - this._element.classList.add(CLASS_NAME_STATIC) - - const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog) - $(this._element).off(Util.TRANSITION_END) - - $(this._element).one(Util.TRANSITION_END, () => { - this._element.classList.remove(CLASS_NAME_STATIC) - if (!isModalOverflowing) { - $(this._element).one(Util.TRANSITION_END, () => { - this._element.style.overflowY = '' - }) - .emulateTransitionEnd(this._element, modalTransitionDuration) - } - }) - .emulateTransitionEnd(modalTransitionDuration) - this._element.focus() - } else { - this.hide() + $(this._element).trigger(hideEventPrevented) + if (hideEventPrevented.isDefaultPrevented()) { + return } + + const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight + + if (!isModalOverflowing) { + this._element.style.overflowY = 'hidden' + } + + this._element.classList.add(CLASS_NAME_STATIC) + + const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog) + $(this._element).off(Util.TRANSITION_END) + + $(this._element).one(Util.TRANSITION_END, () => { + this._element.classList.remove(CLASS_NAME_STATIC) + if (!isModalOverflowing) { + $(this._element).one(Util.TRANSITION_END, () => { + this._element.style.overflowY = '' + }) + .emulateTransitionEnd(this._element, modalTransitionDuration) + } + }) + .emulateTransitionEnd(modalTransitionDuration) + this._element.focus() } _showElement(relatedTarget) { @@ -400,7 +396,11 @@ class Modal { return } - this._triggerBackdropTransition() + if (this._config.backdrop === 'static') { + this._triggerBackdropTransition() + } else { + this.hide() + } }) if (animate) { diff --git a/vendor/twbs/bootstrap/js/src/popover.js b/vendor/twbs/bootstrap/js/src/popover.js index ee7a4ca9a..4e2c260b9 100644 --- a/vendor/twbs/bootstrap/js/src/popover.js +++ b/vendor/twbs/bootstrap/js/src/popover.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): popover.js + * Bootstrap (v4.6.0): popover.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -15,7 +15,7 @@ import Tooltip from './tooltip' */ const NAME = 'popover' -const VERSION = '4.5.3' +const VERSION = '4.6.0' const DATA_KEY = 'bs.popover' const EVENT_KEY = `.${DATA_KEY}` const JQUERY_NO_CONFLICT = $.fn[NAME] diff --git a/vendor/twbs/bootstrap/js/src/scrollspy.js b/vendor/twbs/bootstrap/js/src/scrollspy.js index 7daa51e86..351df0649 100644 --- a/vendor/twbs/bootstrap/js/src/scrollspy.js +++ b/vendor/twbs/bootstrap/js/src/scrollspy.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): scrollspy.js + * Bootstrap (v4.6.0): scrollspy.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -15,7 +15,7 @@ import Util from './util' */ const NAME = 'scrollspy' -const VERSION = '4.5.3' +const VERSION = '4.6.0' const DATA_KEY = 'bs.scrollspy' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' diff --git a/vendor/twbs/bootstrap/js/src/tab.js b/vendor/twbs/bootstrap/js/src/tab.js index 512016483..e9a6f555f 100644 --- a/vendor/twbs/bootstrap/js/src/tab.js +++ b/vendor/twbs/bootstrap/js/src/tab.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): tab.js + * Bootstrap (v4.6.0): tab.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -15,7 +15,7 @@ import Util from './util' */ const NAME = 'tab' -const VERSION = '4.5.3' +const VERSION = '4.6.0' const DATA_KEY = 'bs.tab' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' diff --git a/vendor/twbs/bootstrap/js/src/toast.js b/vendor/twbs/bootstrap/js/src/toast.js index 953879ebd..0c2186908 100644 --- a/vendor/twbs/bootstrap/js/src/toast.js +++ b/vendor/twbs/bootstrap/js/src/toast.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): toast.js + * Bootstrap (v4.6.0): toast.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -15,7 +15,7 @@ import Util from './util' */ const NAME = 'toast' -const VERSION = '4.5.3' +const VERSION = '4.6.0' const DATA_KEY = 'bs.toast' const EVENT_KEY = `.${DATA_KEY}` const JQUERY_NO_CONFLICT = $.fn[NAME] diff --git a/vendor/twbs/bootstrap/js/src/tools/sanitizer.js b/vendor/twbs/bootstrap/js/src/tools/sanitizer.js index 57768e45f..45fd6106c 100644 --- a/vendor/twbs/bootstrap/js/src/tools/sanitizer.js +++ b/vendor/twbs/bootstrap/js/src/tools/sanitizer.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): tools/sanitizer.js + * Bootstrap (v4.6.0): tools/sanitizer.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ diff --git a/vendor/twbs/bootstrap/js/src/tooltip.js b/vendor/twbs/bootstrap/js/src/tooltip.js index 4b58f3156..fd6ceea67 100644 --- a/vendor/twbs/bootstrap/js/src/tooltip.js +++ b/vendor/twbs/bootstrap/js/src/tooltip.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): tooltip.js + * Bootstrap (v4.6.0): tooltip.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -20,7 +20,7 @@ import Util from './util' */ const NAME = 'tooltip' -const VERSION = '4.5.3' +const VERSION = '4.6.0' const DATA_KEY = 'bs.tooltip' const EVENT_KEY = `.${DATA_KEY}` const JQUERY_NO_CONFLICT = $.fn[NAME] @@ -41,6 +41,7 @@ const DefaultType = { container: '(string|element|boolean)', fallbackPlacement: '(string|array)', boundary: '(string|element)', + customClass: '(string|function)', sanitize: 'boolean', sanitizeFn: '(null|function)', whiteList: 'object', @@ -70,6 +71,7 @@ const Default = { container: false, fallbackPlacement: 'flip', boundary: 'scrollParent', + customClass: '', sanitize: true, sanitizeFn: null, whiteList: DefaultWhitelist, @@ -112,7 +114,7 @@ const TRIGGER_MANUAL = 'manual' class Tooltip { constructor(element, config) { if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)') + throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)') } // private @@ -284,6 +286,7 @@ class Tooltip { this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment)) $(tip).addClass(CLASS_NAME_SHOW) + $(tip).addClass(this.config.customClass) // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; diff --git a/vendor/twbs/bootstrap/js/src/util.js b/vendor/twbs/bootstrap/js/src/util.js index 6ce6ca50b..cd9d5e3b8 100644 --- a/vendor/twbs/bootstrap/js/src/util.js +++ b/vendor/twbs/bootstrap/js/src/util.js @@ -1,6 +1,6 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v4.5.3): util.js + * Bootstrap (v4.6.0): util.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ diff --git a/vendor/twbs/bootstrap/nuget/bootstrap.nuspec b/vendor/twbs/bootstrap/nuget/bootstrap.nuspec index 9d8d190d3..8e7a0a322 100644 --- a/vendor/twbs/bootstrap/nuget/bootstrap.nuspec +++ b/vendor/twbs/bootstrap/nuget/bootstrap.nuspec @@ -14,7 +14,7 @@ <projectUrl>https://getbootstrap.com/</projectUrl> <icon>bootstrap.png</icon> <license type="file">LICENSE.txt</license> - <copyright>Copyright 2017-2020</copyright> + <copyright>Copyright 2017-2021</copyright> <requireLicenseAcceptance>false</requireLicenseAcceptance> <dependencies> <dependency id="jQuery" version="[3.0.0,4)" /> diff --git a/vendor/twbs/bootstrap/nuget/bootstrap.sass.nuspec b/vendor/twbs/bootstrap/nuget/bootstrap.sass.nuspec index 72b1e3aaf..015726a67 100644 --- a/vendor/twbs/bootstrap/nuget/bootstrap.sass.nuspec +++ b/vendor/twbs/bootstrap/nuget/bootstrap.sass.nuspec @@ -14,7 +14,7 @@ <projectUrl>https://getbootstrap.com/</projectUrl> <icon>bootstrap.png</icon> <license type="file">LICENSE.txt</license> - <copyright>Copyright 2017-2020</copyright> + <copyright>Copyright 2017-2021</copyright> <requireLicenseAcceptance>false</requireLicenseAcceptance> <dependencies> <dependency id="jQuery" version="[3.0.0,4)" /> diff --git a/vendor/twbs/bootstrap/package-lock.json b/vendor/twbs/bootstrap/package-lock.json index a162c170a..c2d6942f5 100644 --- a/vendor/twbs/bootstrap/package-lock.json +++ b/vendor/twbs/bootstrap/package-lock.json @@ -1,16 +1,17 @@ { "name": "bootstrap", - "version": "4.5.3", + "version": "4.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@babel/cli": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.11.6.tgz", - "integrity": "sha512-+w7BZCvkewSmaRM6H4L2QM3RL90teqEIHDIFXAmrW33+0jhlymnDAEdqVeCZATvxhQuio1ifoGVlJJbIiH9Ffg==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.12.10.tgz", + "integrity": "sha512-+y4ZnePpvWs1fc/LhZRTHkTesbXkyBYuOB+5CyodZqrEuETXi3zOVfpAQIdgC3lXbHLTDG9dQosxR9BhvLKDLQ==", "dev": true, "requires": { - "chokidar": "^2.1.8", + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", + "chokidar": "^3.4.0", "commander": "^4.0.1", "convert-source-map": "^1.1.0", "fs-readdir-recursive": "^1.1.0", @@ -22,53 +23,47 @@ } }, "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "requires": { "@babel/highlight": "^7.10.4" } }, "@babel/compat-data": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", - "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - } + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", + "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", + "dev": true }, "@babel/core": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", - "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", + "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.6", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/generator": "^7.12.10", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", "lodash": "^4.17.19", - "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -83,23 +78,23 @@ } }, "@babel/generator": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", - "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", "dev": true, "requires": { - "@babel/types": "^7.11.5", + "@babel/types": "^7.12.11", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", + "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.10" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -113,41 +108,38 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", + "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", "dev": true, "requires": { - "@babel/compat-data": "^7.10.4", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", + "@babel/compat-data": "^7.12.5", + "@babel/helper-validator-option": "^7.12.1", + "browserslist": "^4.14.5", "semver": "^5.5.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", "dev": true, "requires": { "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.5", + "@babel/helper-member-expression-to-functions": "^7.12.1", "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", "@babel/helper-split-export-declaration": "^7.10.4" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", + "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" + "regexpu-core": "^4.7.1" } }, "@babel/helper-define-map": { @@ -162,32 +154,32 @@ } }, "@babel/helper-explode-assignable-expression": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz", - "integrity": "sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.1" } }, "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", + "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-get-function-arity": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/types": "^7.12.11" } }, "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.10" } }, "@babel/helper-hoist-variables": { @@ -200,45 +192,47 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", - "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", "dev": true, "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.12.7" } }, "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.5" } }, "@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", "@babel/template": "^7.10.4", - "@babel/types": "^7.11.0", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", "lodash": "^4.17.19" } }, "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.10" } }, "@babel/helper-plugin-utils": { @@ -247,77 +241,72 @@ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", "dev": true }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, "@babel/helper-remap-async-to-generator": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz", - "integrity": "sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.1" } }, "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", + "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-member-expression-to-functions": "^7.12.7", + "@babel/helper-optimise-call-expression": "^7.12.10", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.11" } }, "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.1" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", - "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", "dev": true, "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.12.1" } }, "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", + "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", "dev": true, "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.12.11" } }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz", + "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", "dev": true, "requires": { "@babel/helper-function-name": "^7.10.4", @@ -327,14 +316,14 @@ } }, "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", + "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", "dev": true, "requires": { "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" } }, "@babel/highlight": { @@ -349,36 +338,36 @@ } }, "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", + "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz", + "integrity": "sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-create-class-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -386,9 +375,9 @@ } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", - "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -396,9 +385,9 @@ } }, "@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -406,9 +395,9 @@ } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", - "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -416,9 +405,9 @@ } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -426,9 +415,9 @@ } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", + "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -436,20 +425,20 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" + "@babel/plugin-transform-parameters": "^7.12.1" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -457,33 +446,33 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", - "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", + "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-create-class-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, @@ -497,9 +486,9 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -587,56 +576,56 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-module-imports": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" + "@babel/helper-remap-async-to-generator": "^7.12.1" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", - "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz", + "integrity": "sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", @@ -644,52 +633,52 @@ "@babel/helper-function-name": "^7.10.4", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", "@babel/helper-split-export-declaration": "^7.10.4", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", "dev": true, "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", @@ -697,18 +686,18 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", "dev": true, "requires": { "@babel/helper-function-name": "^7.10.4", @@ -716,225 +705,224 @@ } }, "@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-identifier": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.12.1" } }, "@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" + "@babel/helper-replace-supers": "^7.12.1" } }, "@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", - "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", + "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", + "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/preset-env": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.5.tgz", - "integrity": "sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz", + "integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==", "dev": true, "requires": { - "@babel/compat-data": "^7.11.0", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", + "@babel/compat-data": "^7.12.7", + "@babel/helper-compilation-targets": "^7.12.5", + "@babel/helper-module-imports": "^7.12.5", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-export-namespace-from": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.11.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.11.0", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/helper-validator-option": "^7.12.11", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.7", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-class-properties": "^7.12.1", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.0", @@ -944,45 +932,42 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.11.0", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.11", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.7", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.10", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.11.5", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", + "@babel/types": "^7.12.11", + "core-js-compat": "^3.8.0", "semver": "^5.5.0" } }, @@ -1000,46 +985,46 @@ } }, "@babel/runtime": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" } }, "@babel/traverse": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", - "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", + "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/code-frame": "^7.12.11", + "@babel/generator": "^7.12.11", + "@babel/helper-function-name": "^7.12.11", + "@babel/helper-split-export-declaration": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/types": "^7.12.12", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -1054,20 +1039,20 @@ } }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.12.11", "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, "@eslint/eslintrc": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", - "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -1083,9 +1068,9 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -1127,36 +1112,56 @@ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", "dev": true }, + "@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz", + "integrity": "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.stat": "2.0.4", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.3", + "@nodelib/fs.scandir": "2.1.4", "fastq": "^1.6.0" } }, "@rollup/plugin-babel": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.2.1.tgz", - "integrity": "sha512-Jd7oqFR2dzZJ3NWANDyBjwTtX/lYbZpVcmkHrfQcpvawHs9E4c0nYk5U2mfZ6I/DZcIvy506KZJi54XK/jxH7A==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.2.2.tgz", + "integrity": "sha512-MjmH7GvFT4TW8xFdIeFS3wqIX646y5tACdxkTO+khbHvS3ZcVJL6vkAHLw2wqPmkhwCfWHoNsp15VYNwW6JEJA==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.10.4", @@ -1164,9 +1169,9 @@ } }, "@rollup/plugin-commonjs": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-15.1.0.tgz", - "integrity": "sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.0.0.tgz", + "integrity": "sha512-/omBIJG1nHQc+bgkYDuLpb/V08QyutP9amOrJRUSlYJZP+b/68gM//D8sxJe3Yry2QnYIr3QjR3x4AlxJEN3GA==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -1179,17 +1184,17 @@ }, "dependencies": { "estree-walker": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.1.tgz", - "integrity": "sha512-tF0hv+Yi2Ot1cwj9eYHtxC0jB9bmjacjQs6ZBTj82H8JwUywFuc+7E83NWfNMwHXZc11mjfFcVXPe9gEP4B8dg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true } } }, "@rollup/plugin-node-resolve": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz", - "integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.0.1.tgz", + "integrity": "sha512-ltlsj/4Bhwwhb+Nb5xCz/6vieuEj2/BAkkqVIKmZwC7pIdl8srmgmglE4S0jFlZa32K4qvdQ6NHdmpRKD/LwoQ==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -1197,7 +1202,7 @@ "builtin-modules": "^3.1.0", "deepmerge": "^4.2.2", "is-module": "^1.0.0", - "resolve": "^1.17.0" + "resolve": "^1.19.0" } }, "@rollup/pluginutils": { @@ -1212,9 +1217,9 @@ } }, "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", "dev": true }, "@sinonjs/commons": { @@ -1263,13 +1268,13 @@ } }, "@stylelint/postcss-markdown": { - "version": "0.36.1", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.1.tgz", - "integrity": "sha512-iDxMBWk9nB2BPi1VFQ+Dc5+XpvODBHw2n3tYpaBZuEAFQlbtF9If0Qh5LTTwSi/XwdbJ2jt+0dis3i8omyggpw==", + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", + "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", "dev": true, "requires": { - "remark": "^12.0.0", - "unist-util-find-all-after": "^3.0.1" + "remark": "^13.0.0", + "unist-util-find-all-after": "^3.0.2" } }, "@szmarczak/http-timer": { @@ -1293,16 +1298,25 @@ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, + "@types/mdast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, "@types/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", + "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", "dev": true }, "@types/node": { - "version": "14.11.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.8.tgz", - "integrity": "sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw==", + "version": "14.14.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", + "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==", "dev": true }, "@types/normalize-package-data": { @@ -1415,6 +1429,46 @@ "dev": true, "requires": { "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "ansi-colors": { @@ -1467,6 +1521,29 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "dev": true, + "requires": { + "file-type": "^4.2.0" + }, + "dependencies": { + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "dev": true + } + } + }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", @@ -1520,35 +1597,16 @@ "dev": true }, "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", + "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", + "es-abstract": "^1.18.0-next.1", + "get-intrinsic": "^1.0.1", "is-string": "^1.0.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "array-union": { @@ -1565,34 +1623,14 @@ "optional": true }, "array.prototype.flat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", - "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } + "es-abstract": "^1.18.0-next.1" } }, "arraybuffer.slice": { @@ -1630,9 +1668,9 @@ "optional": true }, "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async-each": { @@ -1648,12 +1686,6 @@ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", "dev": true }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1674,17 +1706,16 @@ "optional": true }, "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.1.tgz", + "integrity": "sha512-dwP0UjyYvROUvtU+boBx8ff5pPWami1NGTrJs9YUsS/oZVbRAcdNHOOuXSA1fc46tgKqe072cVaKD69rvCc3QQ==", "dev": true, "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", + "browserslist": "^4.16.1", + "caniuse-lite": "^1.0.30001173", "colorette": "^1.2.1", + "fraction.js": "^4.0.13", "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", "postcss-value-parser": "^4.1.0" } }, @@ -1695,9 +1726,9 @@ "dev": true }, "aws4": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", - "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, "axios": { @@ -1837,6 +1868,12 @@ "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", "dev": true }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, "base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", @@ -1852,21 +1889,126 @@ "tweetnacl": "^0.14.3" } }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, "big-integer": { "version": "1.6.48", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", "dev": true }, + "bin-check": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", + "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "executable": "^4.1.0" + } + }, + "bin-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", + "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "find-versions": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "bin-version-check": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", + "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", + "dev": true, + "requires": { + "bin-version": "^3.0.0", + "semver": "^5.6.0", + "semver-truncate": "^1.1.2" + } + }, + "bin-wrapper": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", + "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", + "dev": true, + "requires": { + "bin-check": "^4.1.0", + "bin-version-check": "^4.0.0", + "download": "^7.1.0", + "import-lazy": "^3.1.0", + "os-filter-obj": "^2.0.0", + "pify": "^4.0.1" + } + }, "binary": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", @@ -1884,14 +2026,14 @@ "dev": true, "optional": true }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "dev": true, - "optional": true, "requires": { - "file-uri-to-path": "1.0.0" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, "blob": { @@ -1900,15 +2042,6 @@ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", "dev": true }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - }, "bluebird": { "version": "3.4.7", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", @@ -1989,35 +2122,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2071,15 +2181,16 @@ } }, "browserslist": { - "version": "4.14.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", - "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz", + "integrity": "sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001135", - "electron-to-chromium": "^1.3.571", - "escalade": "^3.1.0", - "node-releases": "^1.1.61" + "caniuse-lite": "^1.0.30001173", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.634", + "escalade": "^3.1.1", + "node-releases": "^1.1.69" } }, "browserstack": { @@ -2101,6 +2212,44 @@ "unzipper": "^0.9.3" } }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -2120,9 +2269,9 @@ "dev": true }, "builtin-modules": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "dev": true }, "bundlewatch": { @@ -2225,69 +2374,38 @@ } }, "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", "dev": true, "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" }, "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", "dev": true } } }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2312,9 +2430,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001148", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001148.tgz", - "integrity": "sha512-E66qcd0KMKZHNJQt9hiLZGE3J4zuTqE1OnU53miEVtylFbwOEmeA5OsRu90noZful+XGSQOni1aT2tiqu/9yYw==", + "version": "1.0.30001176", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001176.tgz", + "integrity": "sha512-VWdkYmqdkDLRe0lvfJlZQ43rnjKqIGKHWhWWRbkqMsJIUaYDNf/K/sdZZcVO6YKQklubokdkJY+ujArsuJ5cag==", "dev": true }, "caseless": { @@ -2323,11 +2441,17 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "ccount": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz", - "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==", - "dev": true + "caw": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", + "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "dev": true, + "requires": { + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" + } }, "chainsaw": { "version": "0.1.0", @@ -2355,12 +2479,6 @@ "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true }, - "character-entities-html4": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", - "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", - "dev": true - }, "character-entities-legacy": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", @@ -2374,40 +2492,133 @@ "dev": true }, "cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "version": "1.0.0-rc.5", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz", + "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==", "dev": true, "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" + "cheerio-select-tmp": "^0.1.0", + "dom-serializer": "~1.2.0", + "domhandler": "^4.0.0", + "entities": "~2.1.0", + "htmlparser2": "^6.0.0", + "parse5": "^6.0.0", + "parse5-htmlparser2-tree-adapter": "^6.0.0" + } + }, + "cheerio-select-tmp": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz", + "integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==", + "dev": true, + "requires": { + "css-select": "^3.1.2", + "css-what": "^4.0.0", + "domelementtype": "^2.1.0", + "domhandler": "^4.0.0", + "domutils": "^2.4.4" } }, "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.0.tgz", + "integrity": "sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q==", "dev": true, - "optional": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } } }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, "ci-env": { "version": "1.16.0", "resolved": "https://registry.npmjs.org/ci-env/-/ci-env-1.16.0.tgz", @@ -2496,21 +2707,6 @@ "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", - "dev": true - }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -2520,39 +2716,8 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - } } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, "clone-regexp": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", @@ -2577,12 +2742,6 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, - "collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", - "dev": true - }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -2666,6 +2825,16 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", @@ -2698,9 +2867,9 @@ } }, "confusing-browser-globals": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", - "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", "dev": true }, "connect": { @@ -2727,6 +2896,15 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -2743,9 +2921,9 @@ } }, "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", "dev": true }, "copy-descriptor": { @@ -2756,12 +2934,12 @@ "optional": true }, "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.2.tgz", + "integrity": "sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ==", "dev": true, "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.16.0", "semver": "7.0.0" }, "dependencies": { @@ -2801,9 +2979,9 @@ } }, "cross-env": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz", - "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, "requires": { "cross-spawn": "^7.0.1" @@ -2827,21 +3005,22 @@ "dev": true }, "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", + "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", "dev": true, "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^4.0.0", + "domhandler": "^4.0.0", + "domutils": "^2.4.3", + "nth-check": "^2.0.0" } }, "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", + "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", "dev": true }, "cssesc": { @@ -2917,8 +3096,48 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "dev": true, - "optional": true + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } }, "decompress-response": { "version": "3.3.0", @@ -2929,6 +3148,101 @@ "mimic-response": "^1.0.0" } }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + } + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + } + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "dev": true, + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -2947,15 +3261,6 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", @@ -3097,38 +3402,40 @@ } }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", + "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", "dev": true, "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "entities": "^2.0.0" } }, "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", "dev": true }, "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", + "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", "dev": true, "requires": { - "domelementtype": "1" + "domelementtype": "^2.1.0" } }, "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz", + "integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0" } }, "dot-prop": { @@ -3140,6 +3447,43 @@ "is-obj": "^2.0.0" } }, + "download": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", + "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", + "dev": true, + "requires": { + "archive-type": "^4.0.0", + "caw": "^2.0.1", + "content-disposition": "^0.5.2", + "decompress": "^4.2.0", + "ext-name": "^5.0.0", + "file-type": "^8.1.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^8.3.1", + "make-dir": "^1.2.0", + "p-event": "^2.1.0", + "pify": "^3.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -3178,15 +3522,15 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.578", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.578.tgz", - "integrity": "sha512-z4gU6dA1CbBJsAErW5swTGAaU2TBzc2mPAonJb00zqW1rOraDo2zfBMDRvaz9cVic+0JEZiYbHWPw/fTaZlG2Q==", + "version": "1.3.637", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.637.tgz", + "integrity": "sha512-924WXYMYquYybc+7pNApGlhY2RWg3MY3he4BrZ5BUmM2n1MGBsrS+PZxrlo6UAsWuNl4NE66fqFdwsWkBUGgkA==", "dev": true }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "encodeurl": { @@ -3205,17 +3549,17 @@ } }, "engine.io": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.2.tgz", - "integrity": "sha512-b4Q85dFkGw+TqgytGPrGgACRUhsdKc9S9ErRAXpPGy/CXKs4tYoHDkvIRdsseAF7NjfVwjRFIn6KTnbw7LwJZg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", + "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", "dev": true, "requires": { "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "0.3.1", + "cookie": "~0.4.1", "debug": "~4.1.0", "engine.io-parser": "~2.2.0", - "ws": "^7.1.2" + "ws": "~7.4.2" }, "dependencies": { "debug": { @@ -3228,17 +3572,17 @@ } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } }, "engine.io-client": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.4.tgz", - "integrity": "sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.0.tgz", + "integrity": "sha512-12wPRfMrugVw/DNyJk34GQ5vIVArEcVMXWugQGGuw2XxUSztFNmJggZmv8IZlLyEdnpO1QB9LkcjeWewO2vxtA==", "dev": true, "requires": { "component-emitter": "~1.3.0", @@ -3249,7 +3593,7 @@ "indexof": "0.0.1", "parseqs": "0.0.6", "parseuri": "0.0.6", - "ws": "~6.1.0", + "ws": "~7.4.2", "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" }, @@ -3262,27 +3606,6 @@ "requires": { "ms": "2.0.0" } - }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", - "dev": true - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", - "dev": true - }, - "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } } } }, @@ -3315,9 +3638,15 @@ "dev": true }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true + }, + "env-paths": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", + "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", "dev": true }, "error-ex": { @@ -3360,12 +3689,6 @@ "is-symbol": "^1.0.2" } }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", - "dev": true - }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -3406,13 +3729,13 @@ "dev": true }, "eslint": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", - "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.17.0.tgz", + "integrity": "sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.1.3", + "@eslint/eslintrc": "^0.2.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -3422,10 +3745,10 @@ "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", + "espree": "^7.3.1", "esquery": "^1.2.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", "globals": "^12.1.0", @@ -3445,7 +3768,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^5.2.3", + "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -3485,9 +3808,9 @@ "dev": true }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -3524,10 +3847,13 @@ "dev": true }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "supports-color": { "version": "7.2.0", @@ -3551,12 +3877,12 @@ } }, "eslint-config-xo": { - "version": "0.32.1", - "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.32.1.tgz", - "integrity": "sha512-achnYLilUTtljR1CGRikVj9HRAf5GplJeGgeyQMvph7mKo+AqTkNuig4EO/IrNOChcjoazgw9YT4cW/3+69i3Q==", + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.34.0.tgz", + "integrity": "sha512-lbpHNfVmSrEQsHsyQ44wY8VA5mEI4Jri5Dk1BJUH0jiCw6nTkj16VQeHiuWzIBJ/uf+mF2FzSqLVf3tD1cHhYA==", "dev": true, "requires": { - "confusing-browser-globals": "1.0.9" + "confusing-browser-globals": "1.0.10" } }, "eslint-import-resolver-node": { @@ -3683,9 +4009,9 @@ } }, "eslint-plugin-unicorn": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-22.0.0.tgz", - "integrity": "sha512-jXPOauNiVFYLr+AeU3l21Ao+iDl/G08vUWui21RCI2L1TJIIoJvAMjMR6I+QPKr8FgIumzuR6gzDKCtEx2IkzA==", + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-25.0.1.tgz", + "integrity": "sha512-MEyEWoyou/qhJH6rEER9YHACtCsQT+eewc6Fdxbi2eiTvsGrBR8JZMA6qaeof3oMQeRxOpaERoBKzU7R5c4A/w==", "dev": true, "requires": { "ci-info": "^2.0.0", @@ -3700,7 +4026,7 @@ "regexp-tree": "^0.1.21", "reserved-words": "^0.1.2", "safe-regex": "^2.1.1", - "semver": "^7.3.2" + "semver": "^7.3.4" }, "dependencies": { "safe-regex": { @@ -3713,10 +4039,13 @@ } }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, @@ -3731,23 +4060,15 @@ } }, "eslint-template-visitor": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/eslint-template-visitor/-/eslint-template-visitor-2.2.1.tgz", - "integrity": "sha512-q3SxoBXz0XjPGkUpwGVAwIwIPIxzCAJX1uwfVc8tW3v7u/zS7WXNH3I2Mu2MDz2NgSITAyKLRaQFPHu/iyKxDQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/eslint-template-visitor/-/eslint-template-visitor-2.2.2.tgz", + "integrity": "sha512-SkcLjzKw3JjKTWHacRDeLBa2gxb600zbCKTkXj/V97QnZ9yxkknoPL8vc8PFueqbFXP7mYNTQzjCjcMpTRdRaA==", "dev": true, "requires": { "babel-eslint": "^10.1.0", - "eslint-visitor-keys": "^1.3.0", + "eslint-visitor-keys": "^2.0.0", "esquery": "^1.3.1", "multimap": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } } }, "eslint-utils": { @@ -3774,13 +4095,13 @@ "dev": true }, "espree": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", - "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { "acorn": "^7.4.0", - "acorn-jsx": "^5.2.0", + "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^1.3.0" }, "dependencies": { @@ -3868,6 +4189,74 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, "execall": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", @@ -3877,6 +4266,23 @@ "clone-regexp": "^2.1.0" } }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "requires": { + "pify": "^2.2.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -3915,6 +4321,25 @@ } } }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -4114,29 +4539,63 @@ "dev": true }, "fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", + "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", "dev": true, "requires": { "reusify": "^1.0.4" } }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "pend": "~1.2.0" } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, - "optional": true + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", + "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-type": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", + "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", + "dev": true + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true + }, + "filenamify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "dev": true, + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } }, "fill-range": { "version": "4.0.0", @@ -4179,18 +4638,17 @@ } }, "find-unused-sass-variables": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-unused-sass-variables/-/find-unused-sass-variables-2.0.0.tgz", - "integrity": "sha512-P9QHY8AUkREpnAwCgzUysQJ5Z+Uf9NR3wpaeVN1886nNPXGxy4tgapdVzieYX9ISMi5akJGEKr0hrpzFcFMLQA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/find-unused-sass-variables/-/find-unused-sass-variables-3.1.0.tgz", + "integrity": "sha512-ttKh7u4KgbanzrR6Ax2d9fOb/TLDdbvWD3uM4Hx0sO9ofx4whzKIHrg2nCuRrzdiTcFNsWdnf5nOHIGVatOTUQ==", "dev": true, "requires": { - "chalk": "^4.0.0", + "chalk": "^4.1.0", "commander": "^5.1.0", "escape-string-regexp": "^4.0.0", "glob": "^7.1.6", - "ora": "^4.0.4", - "postcss": "^7.0.27", - "postcss-scss": "^2.0.0" + "postcss": "^8.2.2", + "postcss-scss": "^3.0.4" }, "dependencies": { "ansi-styles": { @@ -4266,21 +4724,29 @@ "path-exists": "^4.0.0" } }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "semver-regex": "^2.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", + "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", "dev": true }, "follow-redirects": { @@ -4327,6 +4793,12 @@ "mime-types": "^2.1.12" } }, + "fraction.js": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz", + "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==", + "dev": true + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -4343,6 +4815,22 @@ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -4354,6 +4842,15 @@ "universalify": "^0.1.0" } }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, "fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", @@ -4367,15 +4864,11 @@ "dev": true }, "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", + "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } + "optional": true }, "fstream": { "version": "1.0.12", @@ -4387,6 +4880,17 @@ "inherits": "~2.0.0", "mkdirp": ">=0.5 0", "rimraf": "2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "function-bind": { @@ -4455,9 +4959,9 @@ } }, "gaxios": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-3.2.0.tgz", - "integrity": "sha512-+6WPeVzPvOshftpxJwRi2Ozez80tn/hdtOUag7+gajDHRJvAblKxTFSSMPtr2hmnLy7p0mvYz0rMXLBl8pSO7Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.1.0.tgz", + "integrity": "sha512-vb0to8xzGnA2qcgywAjtshOKKVDf2eQhJoiL6fHhgW5tVN7wNk7egnYIO9zotfn3lQ3De1VPdf7V5/BWfCtCmg==", "dev": true, "requires": { "abort-controller": "^3.0.0", @@ -4468,18 +4972,18 @@ }, "dependencies": { "agent-base": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", - "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { "debug": "4" } }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -4495,6 +4999,12 @@ "debug": "4" } }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -4513,9 +5023,9 @@ } }, "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "get-caller-file": { @@ -4524,12 +5034,32 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", + "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, + "get-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "dev": true, + "requires": { + "npm-conf": "^1.1.0" + } + }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", @@ -4537,13 +5067,10 @@ "dev": true }, "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true }, "get-value": { "version": "2.0.6", @@ -4599,12 +5126,20 @@ } }, "global-dirs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", - "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", "dev": true, "requires": { - "ini": "^1.3.5" + "ini": "1.3.7" + }, + "dependencies": { + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + } } }, "global-modules": { @@ -4645,15 +5180,15 @@ "dev": true }, "globalyzer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.4.tgz", - "integrity": "sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", "dev": true }, "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", "dev": true, "requires": { "array-union": "^2.1.0", @@ -4711,22 +5246,36 @@ } }, "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", "dev": true, "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", "decompress-response": "^3.3.0", "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "graceful-fs": { @@ -4828,12 +5377,27 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true + }, "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -4900,36 +5464,21 @@ "dev": true }, "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.0.tgz", + "integrity": "sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw==", "dev": true, "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.4.4", + "entities": "^2.0.0" } }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", "dev": true }, "http-errors": { @@ -4986,22 +5535,34 @@ }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } }, + "hugo-bin": { + "version": "0.68.0", + "resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.68.0.tgz", + "integrity": "sha512-QdmnjN45BGCp4mlKMFUIZFzuZJ/ClW0dVUbeUkgRgxfRlf444Sg5aPKXtLkQgpbP/jCVlxoyVt5sRmhntwtI8Q==", + "dev": true, + "requires": { + "bin-wrapper": "^4.1.0", + "pkg-conf": "^3.1.0", + "rimraf": "^3.0.2", + "signale": "^1.4.0" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5011,6 +5572,12 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -5024,18 +5591,18 @@ "dev": true }, "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", "dev": true, "requires": { - "import-from": "^2.1.0" + "import-from": "^3.0.0" } }, "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -5051,32 +5618,24 @@ } }, "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", "dev": true, "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } + "resolve-from": "^5.0.0" } }, "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", + "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", "dev": true }, "import-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.0.0.tgz", - "integrity": "sha512-iczM/v9drffdNnABOKwj0f9G3cFDon99VcG1mxeBsdqnbd+vnQ5c2uAiCHNQITqFTOPaEvwg3VjoWCur0uHLEw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", + "integrity": "sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==", "dev": true }, "imurmurhash": { @@ -5085,12 +5644,6 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "in-publish": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", - "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==", - "dev": true - }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -5126,9 +5679,9 @@ "dev": true }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "interpret": { @@ -5137,13 +5690,14 @@ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", "dev": true, "requires": { - "loose-envify": "^1.0.0" + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" } }, "ip": { @@ -5180,12 +5734,6 @@ "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true }, - "is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", - "dev": true - }, "is-alphanumerical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", @@ -5234,6 +5782,15 @@ "ci-info": "^2.0.0" } }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -5289,12 +5846,6 @@ } } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, "is-docker": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", @@ -5321,9 +5872,9 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-glob": { @@ -5351,22 +5902,22 @@ "is-path-inside": "^3.0.1" } }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "dev": true + }, "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true }, "is-npm": { @@ -5403,6 +5954,12 @@ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true + }, "is-path-inside": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", @@ -5449,10 +6006,16 @@ "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", "dev": true }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true + }, "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, "is-string": { @@ -5482,12 +6045,6 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "dev": true - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -5495,12 +6052,6 @@ "dev": true, "optional": true }, - "is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "dev": true - }, "is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -5630,9 +6181,9 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -5650,6 +6201,15 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5668,6 +6228,16 @@ "istanbul-lib-report": "^3.0.0" } }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, "jquery": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", @@ -5693,9 +6263,9 @@ "dev": true }, "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -5766,9 +6336,9 @@ } }, "jsonexport": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonexport/-/jsonexport-3.0.1.tgz", - "integrity": "sha512-lxDoAZxmWDt1wa4S75CUYe/ZASdmOYyhV7iYbF4npTWxrDv19ofZpJMGbt20W5Orx0hYuid65zGHpt6rRW0Z3A==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonexport/-/jsonexport-3.2.0.tgz", + "integrity": "sha512-GbO9ugb0YTZatPd/hqCGR0FSwbr82H6OzG04yzdrG7XOe4QZ0jhQ+kOsB29zqkzoYJLmLxbbrFiuwbQu891XnQ==", "dev": true }, "jsonfile": { @@ -5835,22 +6405,6 @@ "yargs": "^15.3.1" }, "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true - }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -5860,22 +6414,6 @@ "fill-range": "^7.0.1" } }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -5885,55 +6423,12 @@ "to-regex-range": "^5.0.1" } }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6016,12 +6511,13 @@ } }, "karma-firefox-launcher": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.3.0.tgz", - "integrity": "sha512-Fi7xPhwrRgr+94BnHX0F5dCl1miIW4RHnzjIGxF8GaIEp7rNqX7LSi7ok63VXs3PS/5MQaQMhGxw+bvD+pibBQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.0.tgz", + "integrity": "sha512-dkiyqN2R6fCWt78rciOXJLFDWcQ7QEQi++HgebPJlw1y0ycDjGNDHuSrhdh48QG02fzZKK20WHFWVyBZ6CPngg==", "dev": true, "requires": { - "is-wsl": "^2.1.0" + "is-wsl": "^2.2.0", + "which": "^2.0.1" } }, "karma-qunit": { @@ -6037,9 +6533,9 @@ "dev": true }, "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", "dev": true, "requires": { "json-buffer": "3.0.0" @@ -6052,9 +6548,9 @@ "dev": true }, "known-css-properties": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.19.0.tgz", - "integrity": "sha512-eYboRV94Vco725nKMlpkn3nV2+96p9c3gKXRsYqAJSswSENvBhN7n5L+uDhY58xQa0UukWsDMTGELzmD8Q+wTA==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.20.0.tgz", + "integrity": "sha512-URvsjaA9ypfreqJ2/ylDr5MUERhJZ+DhguoWRr2xgS5C7aGCalXo+ewL+GixgKBfhT2vuL02nbIgNGqVWgTOYw==", "dev": true }, "latest-version": { @@ -6066,21 +6562,6 @@ "package-json": "^6.3.0" } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "requires": { - "leven": "^3.1.0" - } - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -6098,17 +6579,19 @@ "dev": true }, "linkinator": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/linkinator/-/linkinator-2.1.3.tgz", - "integrity": "sha512-MBjaTkMiBuoUq0+e8CtWhlSo6AR+TojNQ7USNCoIiaClI/71o6mF3wrPEizSCwMTjFviHbm/M7JD1M8/0vIFnw==", + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/linkinator/-/linkinator-2.11.2.tgz", + "integrity": "sha512-TmTtsxSiea6gL/vjd0rD1X7FZzRHLzWeaO+1QMiQh+OTKXCd+LW38ChTQjcxt1XNZ3BH9aAsoG+vxRhNkAY1Wg==", "dev": true, "requires": { "chalk": "^4.0.0", "cheerio": "^1.0.0-rc.2", "finalhandler": "^1.1.2", - "gaxios": "^3.0.0", + "gaxios": "^4.0.0", + "glob": "^7.1.6", "jsonexport": "^3.0.0", - "meow": "^7.0.0", + "marked": "^1.2.5", + "meow": "^8.0.0", "p-queue": "^6.2.1", "serve-static": "^1.14.1", "server-destroy": "^1.0.1", @@ -6223,9 +6706,9 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -6251,9 +6734,9 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -6273,18 +6756,42 @@ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "dev": true }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true + }, + "lodash.forown": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-4.4.0.tgz", + "integrity": "sha1-hRFc8E9z75ZuztUlEdOJPMRmg68=", + "dev": true + }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, + "lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, "lodash.zip": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", @@ -6292,12 +6799,63 @@ "dev": true }, "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", "dev": true, "requires": { - "chalk": "^2.4.2" + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "log4js": { @@ -6314,14 +6872,20 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" } }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -6342,15 +6906,6 @@ "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", @@ -6368,13 +6923,12 @@ "dev": true }, "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^4.0.0" } }, "magic-string": { @@ -6419,36 +6973,51 @@ "object-visit": "^1.0.0" } }, - "markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "marked": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.7.tgz", + "integrity": "sha512-No11hFYcXr/zkBvL6qFmAp1z6BKY3zqLMHny/JN/ey+al7qwCM2+CMBL9BOgqMxZU36fz4cCWfn2poWIf7QRXA==", "dev": true }, - "markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "requires": { - "repeat-string": "^1.0.0" - } - }, "mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true }, - "mdast-util-compact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", - "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", + "mdast-util-from-markdown": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.4.tgz", + "integrity": "sha512-jj891B5pV2r63n2kBTFh8cRI2uR9LQHsXG1zSDqfhXkIlDzrTcIlbB5+5aaYEkl8vOPIOPLf8VT7Ere1wWTMdw==", "dev": true, "requires": { - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" } }, + "mdast-util-to-markdown": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.2.tgz", + "integrity": "sha512-iRczns6WMvu0hUw02LXsPDJshBIwtUPbvHBWo19IQeU0YqmzlA8Pd30U8V7uiI0VPkxzS7A/NXBXH6u+HS87Zg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + } + }, + "mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "dev": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -6462,9 +7031,9 @@ "dev": true }, "meow": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", - "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "requires": { "@types/minimist": "^1.2.0", @@ -6472,18 +7041,54 @@ "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", - "normalize-package-data": "^2.5.0", + "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", - "type-fest": "^0.13.1", - "yargs-parser": "^18.1.3" + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "dependencies": { + "hosted-git-info": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", + "integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", + "integrity": "sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==", + "dev": true, + "requires": { + "hosted-git-info": "^3.0.6", + "resolve": "^1.17.0", + "semver": "^7.3.2", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, "type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true } } @@ -6494,6 +7099,33 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, + "micromark": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.2.tgz", + "integrity": "sha512-IXuP76p2uj8uMg4FQc1cRE7lPCLsfAXuEfdjtdO55VRiFO1asrCSQ5g43NmPqFtRwzEnEhafRVzn2jg0UiKArQ==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -6517,32 +7149,26 @@ } }, "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", + "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==", "dev": true }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", "dev": true }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", "dev": true, "requires": { - "mime-db": "1.44.0" + "mime-db": "1.45.0" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -6581,6 +7207,25 @@ "kind-of": "^6.0.3" } }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -6625,16 +7270,16 @@ "integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==", "dev": true }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", "dev": true }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", "dev": true }, "nanomatch": { @@ -6706,66 +7351,57 @@ "dev": true }, "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", "dev": true, "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" }, "dependencies": { "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, "requires": { - "isexe": "^2.0.0" + "lru-cache": "^6.0.0" } } } }, "node-releases": { - "version": "1.1.61", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.61.tgz", - "integrity": "sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==", + "version": "1.1.69", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.69.tgz", + "integrity": "sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA==", "dev": true }, "node-sass": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", - "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-5.0.0.tgz", + "integrity": "sha512-opNgmlu83ZCF792U281Ry7tak9IbVC+AKnXGovcQ8LG8wFaJv6cLnRlc6DIHlmNxWEexB5bZxi9SZ9JyUuOYjw==", "dev": true, "requires": { "async-foreach": "^0.1.3", "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", + "cross-spawn": "^7.0.3", "gaze": "^1.0.0", "get-stdin": "^4.0.1", "glob": "^7.0.3", - "in-publish": "^2.0.0", "lodash": "^4.17.15", "meow": "^3.7.0", "mkdirp": "^0.5.1", "nan": "^2.13.2", - "node-gyp": "^3.8.0", + "node-gyp": "^7.1.0", "npmlog": "^4.0.0", "request": "^2.88.0", "sass-graph": "2.2.5", @@ -6814,16 +7450,6 @@ "supports-color": "^2.0.0" } }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", @@ -6984,28 +7610,19 @@ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, "node-watch": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.6.4.tgz", - "integrity": "sha512-cI6CHzivIFESe8djiK3Wh90CtWQBxLwMem8x8S+2GSvCvFgoMuOKVlfJtQ/2v3Afg3wOnHl/+tXotEs8z5vOrg==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.1.tgz", + "integrity": "sha512-UWblPYuZYrkCQCW5PxAwYSxaELNBLUckrTBBk8xr1/bUgyOkYYTsUcV4e3ytcazFEOyiRyiUrsG37pu6I0I05g==", "dev": true }, "nodemon": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz", - "integrity": "sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz", + "integrity": "sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==", "dev": true, "requires": { "chokidar": "^3.2.2", @@ -7016,8 +7633,8 @@ "semver": "^5.7.1", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^4.0.0" + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" }, "dependencies": { "ansi-styles": { @@ -7029,31 +7646,6 @@ "color-convert": "^2.0.1" } }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -7075,22 +7667,6 @@ } } }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -7107,53 +7683,25 @@ "dev": true }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "is-binary-path": { + "import-lazy": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true }, "is-npm": { "version": "4.0.0", @@ -7161,36 +7709,12 @@ "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", "dev": true }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, "update-notifier": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", @@ -7215,9 +7739,9 @@ } }, "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, "requires": { "abbrev": "1" @@ -7254,10 +7778,44 @@ "dev": true }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "dependencies": { + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } + }, + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "requires": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } }, "npm-run-all": { "version": "4.1.5", @@ -7369,6 +7927,23 @@ } } }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + } + } + }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -7382,12 +7957,12 @@ } }, "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" } }, "num2fraction": { @@ -7414,12 +7989,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -7455,15 +8024,15 @@ } }, "object-hash": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz", - "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.1.1.tgz", + "integrity": "sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==", "dev": true }, "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", "dev": true }, "object-keys": { @@ -7483,13 +8052,13 @@ } }, "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" } @@ -7505,36 +8074,15 @@ } }, "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", + "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", + "es-abstract": "^1.18.0-next.1", "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "on-finished": { @@ -7555,15 +8103,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -7578,107 +8117,42 @@ "word-wrap": "^1.2.3" } }, - "ora": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", - "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", + "os-filter-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", + "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", "dev": true, "requires": { - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.2.0", - "is-interactive": "^1.0.0", - "log-symbols": "^3.0.0", - "mute-stream": "0.0.8", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "arch": "^2.1.0" } }, "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", "dev": true }, + "p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "dev": true, + "requires": { + "p-timeout": "^2.0.1" + } + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -7705,12 +8179,23 @@ "requires": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" + }, + "dependencies": { + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + } } }, "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", "dev": true, "requires": { "p-finally": "^1.0.0" @@ -7734,6 +8219,90 @@ "semver": "^6.2.0" }, "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -7778,31 +8347,31 @@ } }, "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, "requires": { - "@types/node": "*" + "parse5": "^6.0.1" } }, "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true }, "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "dev": true }, "parseurl": { "version": "1.3.3", @@ -7882,6 +8451,12 @@ } } }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -7921,6 +8496,81 @@ "pinkie": "^2.0.0" } }, + "pkg-conf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true + } + } + }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -8001,14 +8651,14 @@ "optional": true }, "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.4.tgz", + "integrity": "sha512-kRFftRoExRVXZlwUuay9iC824qmXPcQQVzAjbCCgjpXnkdMCJYBu2gTwAaFBzv8ewND6O8xFb3aELmEkh9zTzg==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "colorette": "^1.2.1", + "nanoid": "^3.1.20", + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -8016,22 +8666,13 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, "postcss-cli": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-7.1.2.tgz", - "integrity": "sha512-3mlEmN1v2NVuosMWZM2tP8bgZn7rO5PYxRRrXtdSyL5KipcgBDjJ9ct8/LKxImMCJJi3x5nYhCGFJOkGyEqXBQ==", + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-8.3.1.tgz", + "integrity": "sha512-leHXsQRq89S3JC9zw/tKyiVV2jAhnfQe0J8VI4eQQbUjwIe0XxVqLrR+7UsahF1s9wi4GlqP6SJ8ydf44cgF2Q==", "dev": true, "requires": { "chalk": "^4.0.0", @@ -8040,12 +8681,12 @@ "fs-extra": "^9.0.0", "get-stdin": "^8.0.0", "globby": "^11.0.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "postcss-reporter": "^6.0.0", + "postcss-load-config": "^3.0.0", + "postcss-reporter": "^7.0.0", "pretty-hrtime": "^1.0.3", "read-cache": "^1.0.0", - "yargs": "^15.0.2" + "slash": "^3.0.0", + "yargs": "^16.0.0" }, "dependencies": { "ansi-styles": { @@ -8057,31 +8698,6 @@ "color-convert": "^2.0.1" } }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, "chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", @@ -8092,20 +8708,15 @@ "supports-color": "^7.1.0" } }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, "color-convert": { @@ -8123,15 +8734,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, "fs-extra": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", @@ -8144,67 +8746,41 @@ "universalify": "^1.0.0" } }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, "get-stdin": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true }, "supports-color": { "version": "7.2.0", @@ -8215,20 +8791,49 @@ "has-flag": "^4.0.0" } }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, "universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true } } }, @@ -8239,6 +8844,88 @@ "dev": true, "requires": { "htmlparser2": "^3.10.0" + }, + "dependencies": { + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "dev": true + }, + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "postcss-less": { @@ -8248,54 +8935,63 @@ "dev": true, "requires": { "postcss": "^7.0.14" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.0.tgz", + "integrity": "sha512-lErrN8imuEF1cSiHBV8MiR7HeuzlDpCGNtaMyYHlOBuJHHOGw6S4xOMZp8BbXPr7AGQp14L6PZDlIOpfFJ6f7w==", "dev": true, "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" + "cosmiconfig": "^7.0.0", + "import-cwd": "^3.0.0" }, "dependencies": { "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" } }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "parse-json": { + "path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true } } @@ -8307,26 +9003,17 @@ "dev": true }, "postcss-reporter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz", - "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.2.tgz", + "integrity": "sha512-JyQ96NTQQsso42y6L1H1RqHfWH1C3Jr0pt91mVv5IdYddZAE9DUZxuferNgk6q0o6vBVOrfVJb10X1FgDzjmDw==", "dev": true, "requires": { - "chalk": "^2.4.1", - "lodash": "^4.17.11", - "log-symbols": "^2.2.0", - "postcss": "^7.0.7" - }, - "dependencies": { - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - } + "colorette": "^1.2.1", + "lodash.difference": "^4.5.0", + "lodash.forown": "^4.4.0", + "lodash.get": "^4.4.2", + "lodash.groupby": "^4.6.0", + "lodash.sortby": "^4.7.0" } }, "postcss-resolve-nested-selector": { @@ -8342,6 +9029,34 @@ "dev": true, "requires": { "postcss": "^7.0.26" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-sass": { @@ -8352,15 +9067,43 @@ "requires": { "gonzales-pe": "^4.3.0", "postcss": "^7.0.21" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-scss": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", - "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-3.0.4.tgz", + "integrity": "sha512-BAkBZ35aXhCeBRmliHylYqTN1PvNJyh9aBPQHUmk9SdDdbk7n3GExm7cQivDckOgJpB+agyig9TwRAmf6WnvfA==", "dev": true, "requires": { - "postcss": "^7.0.6" + "postcss": "^8.1.6" } }, "postcss-selector-parser": { @@ -8383,6 +9126,34 @@ "requires": { "lodash": "^4.17.14", "postcss": "^7.0.17" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-syntax": { @@ -8427,6 +9198,12 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -8462,9 +9239,9 @@ "dev": true }, "pupa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", - "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "dev": true, "requires": { "escape-goat": "^2.0.0" @@ -8488,6 +9265,17 @@ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, "quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", @@ -8495,21 +9283,21 @@ "dev": true }, "qunit": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.11.3.tgz", - "integrity": "sha512-38gyZblz6kjV4G+6cn18Vvsh3ESnCXH9YXtfMJQGpKXWzLzUj8W/8iUewP+TsLwv95GQUXtMf2nl8h1iKsybFA==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.14.0.tgz", + "integrity": "sha512-CYfenbgdpmhl2Ql2rDrrj0felY4h8k6lYhtWwGBCLL4qQC33YOj0psV8MWo85L1i0SIOmEDRXkFopWnGCLmf7g==", "dev": true, "requires": { - "commander": "6.0.0", + "commander": "6.2.0", "js-reporters": "1.2.3", - "node-watch": "0.6.4", - "tiny-glob": "0.2.6" + "node-watch": "0.7.1", + "tiny-glob": "0.2.8" }, "dependencies": { "commander": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.0.0.tgz", - "integrity": "sha512-s7EA+hDtTYNhuXkTlhqew4txMZVdszBmKWSPEMxGr8ru8JXR7bLUFIAtPhcSuFdJQ0ILMxnJi8GkQL0yvDy/YA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", "dev": true } } @@ -8647,9 +9435,9 @@ } }, "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { @@ -8714,9 +9502,9 @@ } }, "registry-auth-token": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", - "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", "dev": true, "requires": { "rc": "^1.2.8" @@ -8738,9 +9526,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.6.tgz", + "integrity": "sha512-jjyuCp+IEMIm3N1H1LLTJW1EISEJV9+5oHdEyrt43Pg9cDSb6rrLZei2cVWpl0xTjmmlpec/lEQGYgM7xfpGCQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -8755,60 +9543,32 @@ } }, "remark": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/remark/-/remark-12.0.1.tgz", - "integrity": "sha512-gS7HDonkdIaHmmP/+shCPejCEEW+liMp/t/QwmF0Xt47Rpuhl32lLtDV1uKWvGoq+kxr5jSgg5oAIpGuyULjUw==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", "dev": true, "requires": { - "remark-parse": "^8.0.0", - "remark-stringify": "^8.0.0", - "unified": "^9.0.0" + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" } }, "remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", "dev": true, "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" + "mdast-util-from-markdown": "^0.8.0" } }, "remark-stringify": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", - "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", + "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", "dev": true, "requires": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^2.0.0", - "mdast-util-compact": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^3.0.0", - "unherit": "^1.0.4", - "xtend": "^4.0.1" + "mdast-util-to-markdown": "^0.6.0" } }, "remove-trailing-separator": { @@ -8840,12 +9600,6 @@ "is-finite": "^1.0.0" } }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -8888,6 +9642,12 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -8907,11 +9667,12 @@ "dev": true }, "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, "requires": { + "is-core-module": "^2.1.0", "path-parse": "^1.0.6" } }, @@ -8937,16 +9698,6 @@ "lowercase-keys": "^1.0.0" } }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -8967,18 +9718,18 @@ "dev": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } }, "rollup": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.29.0.tgz", - "integrity": "sha512-gtU0sjxMpsVlpuAf4QXienPmUAhd6Kc7owQ4f5lypoxBW18fw2UNYZ4NssLGsri6WhUZkE/Ts3EMRebN+gNLiQ==", + "version": "2.36.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.36.1.tgz", + "integrity": "sha512-eAfqho8dyzuVvrGqpR0ITgEdq0zG2QJeWYh+HeuTbpcaXk8vNFc48B7bJa1xYosTCKx0CuW+447oQOW8HgBIZQ==", "dev": true, "requires": { "fsevents": "~2.1.2" @@ -8994,9 +9745,9 @@ } }, "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", "dev": true }, "safe-buffer": { @@ -9050,6 +9801,12 @@ "wrap-ansi": "^5.1.0" } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -9059,6 +9816,12 @@ "locate-path": "^3.0.0" } }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -9084,6 +9847,17 @@ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -9155,6 +9929,23 @@ } } }, + "seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "requires": { + "commander": "^2.8.1" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -9178,6 +9969,21 @@ } } }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "dev": true + }, + "semver-truncate": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", + "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -9306,23 +10112,112 @@ "rechoir": "^0.6.2" } }, - "shx": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.2.tgz", - "integrity": "sha512-aS0mWtW3T2sHAenrSrip2XGv39O9dXIFUqxAEWHEOS1ePtGIBavdPJY1kE2IHl14V/4iCbUiNDPGdyYTtmhSoA==", - "dev": true, - "requires": { - "es6-object-assign": "^1.0.3", - "minimist": "^1.2.0", - "shelljs": "^0.8.1" - } - }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, + "signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "dev": true, + "requires": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + } + } + } + }, "sinon": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz", @@ -9345,14 +10240,40 @@ "dev": true }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } } }, "snapdragon": { @@ -9473,16 +10394,16 @@ } }, "socket.io": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz", - "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", + "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", "dev": true, "requires": { "debug": "~4.1.0", - "engine.io": "~3.4.0", + "engine.io": "~3.5.0", "has-binary2": "~1.0.2", "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.3.0", + "socket.io-client": "2.4.0", "socket.io-parser": "~3.4.0" }, "dependencies": { @@ -9496,9 +10417,9 @@ } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } @@ -9510,46 +10431,31 @@ "dev": true }, "socket.io-client": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", - "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", + "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", "dev": true, "requires": { "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "engine.io-client": "~3.4.0", + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "engine.io-client": "~3.5.0", "has-binary2": "~1.0.2", - "has-cors": "1.1.0", "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", + "parseqs": "0.0.6", + "parseuri": "0.0.6", "socket.io-parser": "~3.3.0", "to-array": "0.1.4" }, "dependencies": { - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.0.0" } }, "isarray": { @@ -9558,44 +10464,15 @@ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "socket.io-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.1.tgz", - "integrity": "sha512-1QLvVAe8dTz+mKmZ07Swxt+LAo4Y1ff50rlyoEx00TQmDFVQYPfcqGvIDJLGaBdhdNCecXtyKpD+EgKGcmmbuQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", + "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", "dev": true, "requires": { "component-emitter": "~1.3.0", "debug": "~3.1.0", "isarray": "2.0.1" - }, - "dependencies": { - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } } } } @@ -9633,13 +10510,31 @@ "dev": true }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dev": true, + "requires": { + "sort-keys": "^1.0.0" + } + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -9718,9 +10613,9 @@ } }, "spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", "dev": true }, "specificity": { @@ -9762,12 +10657,6 @@ "tweetnacl": "~0.14.0" } }, - "state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", - "dev": true - }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -9824,9 +10713,9 @@ "dev": true }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -9840,125 +10729,52 @@ } } }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "string.prototype.padend": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz", - "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.1.tgz", + "integrity": "sha512-eCzTASPnoCr5Ht+Vn1YXgm8SB015hHKgEIMu9Nr9bQmLhRBxKRfmzSj/IQsxDFc8JInJDDFA0qXwK+xxI7wDkg==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } + "es-abstract": "^1.18.0-next.1" } }, "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } }, "string_decoder": { @@ -9970,19 +10786,6 @@ "safe-buffer": "~5.1.0" } }, - "stringify-entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.0.1.tgz", - "integrity": "sha512-Lsk3ISA2++eJYqBMPKcr/8eby1I6L0gP0NlxF8Zja6c05yr/yCYyb2c9PwXjd08Ib3If1vn1rbs1H5ZtVuOfvQ==", - "dev": true, - "requires": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.2", - "is-hexadecimal": "^1.0.0" - } - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -9998,6 +10801,21 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "requires": { + "is-natural-number": "^4.0.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, "strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -10013,6 +10831,15 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "style-search": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", @@ -10020,22 +10847,22 @@ "dev": true }, "stylelint": { - "version": "13.7.2", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.7.2.tgz", - "integrity": "sha512-mmieorkfmO+ZA6CNDu1ic9qpt4tFvH2QUB7vqXgrMVHe5ENU69q7YDq0YUg/UHLuCsZOWhUAvcMcLzLDIERzSg==", + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.8.0.tgz", + "integrity": "sha512-iHH3dv3UI23SLDrH4zMQDjLT9/dDIz/IpoFeuNxZmEx86KtfpjDOscxLTFioQyv+2vQjPlRZnK0UoJtfxLICXQ==", "dev": true, "requires": { "@stylelint/postcss-css-in-js": "^0.37.2", - "@stylelint/postcss-markdown": "^0.36.1", + "@stylelint/postcss-markdown": "^0.36.2", "autoprefixer": "^9.8.6", "balanced-match": "^1.0.0", "chalk": "^4.1.0", "cosmiconfig": "^7.0.0", - "debug": "^4.1.1", + "debug": "^4.2.0", "execall": "^2.0.0", "fast-glob": "^3.2.4", "fastest-levenshtein": "^1.0.12", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.0", "get-stdin": "^8.0.0", "global-modules": "^2.0.0", "globby": "^11.0.1", @@ -10044,14 +10871,14 @@ "ignore": "^5.1.8", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", - "known-css-properties": "^0.19.0", + "known-css-properties": "^0.20.0", "lodash": "^4.17.20", "log-symbols": "^4.0.0", "mathml-tag-names": "^2.1.3", - "meow": "^7.1.1", + "meow": "^8.0.0", "micromatch": "^4.0.2", "normalize-selector": "^0.2.0", - "postcss": "^7.0.32", + "postcss": "^7.0.35", "postcss-html": "^0.36.0", "postcss-less": "^3.1.4", "postcss-media-query-parser": "^0.2.3", @@ -10059,7 +10886,7 @@ "postcss-safe-parser": "^4.0.2", "postcss-sass": "^0.4.4", "postcss-scss": "^2.1.1", - "postcss-selector-parser": "^6.0.2", + "postcss-selector-parser": "^6.0.4", "postcss-syntax": "^0.36.2", "postcss-value-parser": "^4.1.0", "resolve-from": "^5.0.0", @@ -10070,26 +10897,26 @@ "style-search": "^0.1.0", "sugarss": "^2.0.0", "svg-tags": "^1.0.0", - "table": "^6.0.1", - "v8-compile-cache": "^2.1.1", + "table": "^6.0.3", + "v8-compile-cache": "^2.2.0", "write-file-atomic": "^3.0.3" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" } }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -10107,6 +10934,32 @@ "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "color-convert": { @@ -10138,20 +10991,14 @@ } }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -10167,12 +11014,6 @@ "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", @@ -10185,27 +11026,12 @@ "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, "micromatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", @@ -10228,53 +11054,69 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + } + } + }, + "postcss-scss": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "dev": true, + "requires": { + "postcss": "^7.0.6" + } + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "has-flag": "^4.0.0" - } - }, - "table": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.3.tgz", - "integrity": "sha512-8321ZMcf1B9HvVX/btKv8mMZahCjn2aYrDlpqHaBFCfnox64edeH9kEid0vTLTRR8gWR2A20aDgeuTTea4sVtw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "lodash": "^4.17.20", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "has-flag": "^3.0.0" } }, "to-regex-range": { @@ -10333,6 +11175,34 @@ "lodash": "^4.17.15", "postcss": "^7.0.31", "postcss-sorting": "^5.0.1" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "stylelint-scss": { @@ -10355,6 +11225,34 @@ "dev": true, "requires": { "postcss": "^7.0.2" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "supports-color": { @@ -10373,38 +11271,84 @@ "dev": true }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", "dev": true, "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz", + "integrity": "sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } } }, "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", "dev": true, "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" } }, "term-size": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", - "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", "dev": true }, "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.1.0.tgz", + "integrity": "sha512-pwC1Jbzahz1ZPU87NQ8B3g5pKbhyJSiHih4gLH6WZiPU8mmS1IlGbB0A2Nuvkj/LCNsgIKctg6GkYwWCeTvXZQ==", "dev": true, "requires": { "commander": "^2.20.0", @@ -10443,14 +11387,26 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, "tiny-glob": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.6.tgz", - "integrity": "sha512-A7ewMqPu1B5PWwC3m7KVgAu96Ch5LA0w4SnEN/LbDREj/gAD0nPWboRbn8YoP9ISZXqeNAlMvKSKoEuhcfK3Pw==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.8.tgz", + "integrity": "sha512-vkQP7qOslq63XRX9kMswlby99kyO5OvKptw7AMwBVMjXEI7Tb61eoI5DydyEMOseyGS5anDN1VPoVxEvH01q8w==", "dev": true, "requires": { - "globalyzer": "^0.1.0", - "globrex": "^0.1.1" + "globalyzer": "0.1.0", + "globrex": "^0.1.2" } }, "tmp": { @@ -10460,17 +11416,6 @@ "dev": true, "requires": { "rimraf": "^3.0.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } } }, "to-array": { @@ -10479,6 +11424,12 @@ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", "dev": true }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -10579,23 +11530,20 @@ "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", "dev": true }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", - "dev": true - }, "trim-newlines": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", "dev": true }, - "trim-trailing-lines": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", - "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==", - "dev": true + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } }, "trough": { "version": "1.0.5", @@ -10696,6 +11644,16 @@ "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==", "dev": true }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "undefsafe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", @@ -10705,16 +11663,6 @@ "debug": "^2.2.0" } }, - "unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "dev": true, - "requires": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - } - }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -10758,9 +11706,9 @@ }, "dependencies": { "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true }, "is-plain-obj": { @@ -10800,29 +11748,20 @@ } }, "unist-util-find-all-after": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.1.tgz", - "integrity": "sha512-0GICgc++sRJesLwEYDjFVJPJttBpVQaTNgc6Jw0Jhzvfs+jtKePEMu+uD+PqkRUrAvGQqwhpDwLGWo1PK8PDEw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", + "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", "dev": true, "requires": { "unist-util-is": "^4.0.0" } }, "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.4.tgz", + "integrity": "sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA==", "dev": true }, - "unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "dev": true, - "requires": { - "unist-util-visit": "^2.0.0" - } - }, "unist-util-stringify-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", @@ -10832,27 +11771,6 @@ "@types/unist": "^2.0.2" } }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.0.tgz", - "integrity": "sha512-0g4wbluTF93npyPrp/ymd3tCDTMnP0yo2akFD2FIBAYXq/Sga3lwaU1D8OYKbtpioaI6CkDcQ6fsMnmtzt7htw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -10934,9 +11852,9 @@ "optional": true }, "update-notifier": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.0.tgz", - "integrity": "sha512-8tqsiVrMv7aZsKNSjqA6DdBLKJpZG1hRpkj1RbOJu1PgyP69OX+EInAnP1EK/ShX5YdPFgwWdk19oquZ0HTM8g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.1.tgz", + "integrity": "sha512-BuVpRdlwxeIOvmc32AGYvO1KVdPlsmqSh8KDDBxS6kDE5VR7R8OMP1d8MdhaVBvxl4H3551k9akXr0Y1iIB2Wg==", "dev": true, "requires": { "boxen": "^4.2.0", @@ -10945,11 +11863,11 @@ "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", + "is-installed-globally": "^0.3.2", "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", "semver": "^7.3.2", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" @@ -10995,12 +11913,21 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", "dev": true }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11013,9 +11940,9 @@ } }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -11037,6 +11964,12 @@ "prepend-http": "^2.0.0" } }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -11063,9 +11996,9 @@ "dev": true }, "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", "dev": true }, "validate-npm-package-license": { @@ -11090,32 +12023,25 @@ } }, "vfile": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", - "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dev": true, "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", "unist-util-stringify-position": "^2.0.0", "vfile-message": "^2.0.0" }, "dependencies": { "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true } } }, - "vfile-location": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.1.0.tgz", - "integrity": "sha512-FCZ4AN9xMcjFIG1oGmZKo61PjwJHRVA+0/tPUP2ul4uIwjGGndIxavEMRpWn5p4xwm/ZsdXp9YNygf1ZyE4x8g==", - "dev": true - }, "vfile-message": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", @@ -11138,15 +12064,6 @@ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -11177,6 +12094,12 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -11205,31 +12128,6 @@ "dev": true, "requires": { "string-width": "^4.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - } } }, "word-wrap": { @@ -11272,29 +12170,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } } } }, @@ -11304,15 +12179,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -11326,9 +12192,9 @@ } }, "ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", + "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", "dev": true }, "xdg-basedir": { @@ -11350,15 +12216,15 @@ "dev": true }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yaml": { @@ -11384,31 +12250,6 @@ "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - } } }, "yargs-parser": { @@ -11421,11 +12262,27 @@ "decamelize": "^1.2.0" } }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", "dev": true + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true } } } diff --git a/vendor/twbs/bootstrap/package.js b/vendor/twbs/bootstrap/package.js index aca0bede0..c55620aab 100644 --- a/vendor/twbs/bootstrap/package.js +++ b/vendor/twbs/bootstrap/package.js @@ -1,17 +1,19 @@ // package metadata file for Meteor.js +/* eslint-env meteor */ + Package.describe({ name: 'twbs:bootstrap', // https://atmospherejs.com/twbs/bootstrap summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.', - version: '4.5.3', + version: '4.6.0', git: 'https://github.com/twbs/bootstrap.git' -}); +}) -Package.onUse(function (api) { - api.versionsFrom('METEOR@1.0'); - api.use('jquery', 'client'); +Package.onUse(api => { + api.versionsFrom('METEOR@1.0') + api.use('jquery', 'client') api.addFiles([ 'dist/css/bootstrap.css', 'dist/js/bootstrap.js' - ], 'client'); -}); + ], 'client') +}) diff --git a/vendor/twbs/bootstrap/package.json b/vendor/twbs/bootstrap/package.json index 7343246fc..4da8cdd70 100644 --- a/vendor/twbs/bootstrap/package.json +++ b/vendor/twbs/bootstrap/package.json @@ -1,8 +1,10 @@ { "name": "bootstrap", "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", - "version": "4.5.3", - "version_short": "4.5", + "version": "4.6.0", + "config": { + "version_short": "4.6" + }, "keywords": [ "css", "sass", @@ -20,73 +22,56 @@ "scripts": { "start": "npm-run-all --parallel watch docs-serve", "bundlewatch": "bundlewatch --config .bundlewatch.config.json", - "css": "npm-run-all css-compile css-prefix css-minify css-copy", - "css-copy": "cross-env-shell shx mkdir -p site/docs/$npm_package_version_short/dist/ && cross-env-shell shx cp -r dist/css/ site/docs/$npm_package_version_short/dist/", - "css-main": "npm-run-all css-lint css-compile-main css-prefix-main css-minify-main css-copy", - "css-docs": "npm-run-all css-compile-docs css-prefix-docs css-minify-docs", - "css-compile": "npm-run-all --parallel css-compile-*", - "css-compile-main": "node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/ -o dist/css/ && npm run css-copy", - "css-compile-docs": "cross-env-shell node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 site/docs/$npm_package_version_short/assets/scss/docs.scss site/docs/$npm_package_version_short/assets/css/docs.min.css", + "css": "npm-run-all css-compile css-prefix css-minify", + "css-compile": "node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/ -o dist/css/", "css-lint": "npm-run-all --continue-on-error --parallel css-lint-*", - "css-lint-main": "stylelint \"scss/**/*.scss\" --cache --cache-location .cache/.stylelintcache --rd", - "css-lint-docs": "stylelint \"site/docs/**/assets/scss/*.scss\" \"site/docs/**/*.css\" --cache --cache-location .cache/.stylelintcache", - "css-lint-vars": "fusv scss/ site/docs/", - "css-minify": "npm-run-all --parallel css-minify-*", - "css-minify-main": "cleancss --level 1 --format breakWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap.min.css dist/css/bootstrap.css && cleancss --level 1 --format breakWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap-grid.min.css dist/css/bootstrap-grid.css && cleancss --level 1 --format breakWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap-reboot.min.css dist/css/bootstrap-reboot.css", - "css-minify-docs": "cross-env-shell cleancss --level 1 --format breakWith=lf --source-map --source-map-inline-sources --output site/docs/$npm_package_version_short/assets/css/docs.min.css site/docs/$npm_package_version_short/assets/css/docs.min.css", + "css-lint-stylelint": "stylelint \"**/*.{css,scss}\" --cache --cache-location .cache/.stylelintcache --rd", + "css-lint-vars": "fusv scss/ site/assets/scss/", + "css-minify": "cleancss -O1 --format breakWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap.min.css dist/css/bootstrap.css && cleancss -O1 --format breakWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap-grid.min.css dist/css/bootstrap-grid.css && cleancss -O1 --format breakWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap-reboot.min.css dist/css/bootstrap-reboot.css", "css-prefix": "npm-run-all --parallel css-prefix-*", "css-prefix-main": "postcss --config build/postcss.config.js --replace \"dist/css/*.css\" \"!dist/css/*.min.css\"", - "css-prefix-docs": "postcss --config build/postcss.config.js --replace \"site/docs/**/*.css\"", - "js": "npm-run-all js-compile js-minify js-copy", - "js-copy": "cross-env-shell shx mkdir -p site/docs/$npm_package_version_short/dist/ && cross-env-shell shx cp -r dist/js/ site/docs/$npm_package_version_short/dist/", - "js-main": "npm-run-all js-lint js-compile js-minify-main", - "js-docs": "npm-run-all js-lint-docs js-minify-docs", - "js-compile": "npm-run-all --parallel js-compile-* --sequential js-copy", + "css-prefix-examples": "postcss --config build/postcss.config.js --replace \"site/content/**/*.css\"", + "js": "npm-run-all js-compile js-minify", + "js-compile": "npm-run-all --parallel js-compile-*", "js-compile-standalone": "rollup --environment BUNDLE:false --config build/rollup.config.js --sourcemap", "js-compile-bundle": "rollup --environment BUNDLE:true --config build/rollup.config.js --sourcemap", "js-compile-plugins": "node build/build-plugins.js", "js-compile-plugins-coverage": "cross-env NODE_ENV=test node build/build-plugins.js", - "js-lint": "npm-run-all --continue-on-error --parallel js-lint-*", - "js-lint-main": "eslint --report-unused-disable-directives --cache --cache-location .cache/.eslintcache js/src js/tests build/", - "js-lint-docs": "eslint --report-unused-disable-directives --cache --cache-location .cache/.eslintcache site/", - "js-minify": "npm-run-all --parallel js-minify-main js-minify-docs", - "js-minify-main": "npm-run-all js-minify-standalone js-minify-bundle", + "js-lint": "eslint --cache --cache-location .cache/.eslintcache --report-unused-disable-directives .", + "js-minify": "npm-run-all --parallel js-minify-*", "js-minify-standalone": "terser --compress typeofs=false --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map\" --output dist/js/bootstrap.min.js dist/js/bootstrap.js", "js-minify-bundle": "terser --compress typeofs=false --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.bundle.js.map,includeSources,url=bootstrap.bundle.min.js.map\" --output dist/js/bootstrap.bundle.min.js dist/js/bootstrap.bundle.js", - "js-minify-docs": "cross-env-shell terser --mangle --comments \\\"/^!/\\\" --output site/docs/$npm_package_version_short/assets/js/docs.min.js site/docs/$npm_package_version_short/assets/js/vendor/anchor.min.js site/docs/$npm_package_version_short/assets/js/vendor/clipboard.min.js site/docs/$npm_package_version_short/assets/js/vendor/bs-custom-file-input.min.js \"site/docs/$npm_package_version_short/assets/js/src/*.js\"", - "js-test": "npm-run-all js-test-karma* js-test-integration", + "js-test": "npm-run-all --parallel js-test-karma* --serial js-test-integration", "js-test-karma": "karma start js/tests/karma.conf.js", "js-test-karma-old": "cross-env USE_OLD_JQUERY=true npm run js-test-karma", "js-test-karma-bundle": "cross-env BUNDLE=true npm run js-test-karma", "js-test-karma-bundle-old": "cross-env BUNDLE=true USE_OLD_JQUERY=true npm run js-test-karma", "js-test-integration": "rollup --config js/tests/integration/rollup.bundle.js", - "js-test-cloud": "cross-env BROWSER=true npm run js-test-karma", + "js-test-cloud": "cross-env BROWSERSTACK=true npm run js-test-karma", "lint": "npm-run-all --parallel js-lint css-lint lockfile-lint", - "docs": "npm-run-all css-docs js-docs docs-build docs-lint", - "docs-build": "bundle exec jekyll build", + "docs": "npm-run-all docs-build docs-lint", + "docs-build": "hugo --cleanDestinationDir", "docs-compile": "npm run docs-build", - "docs-production": "cross-env JEKYLL_ENV=production npm run docs-build", - "docs-netlify": "cross-env JEKYLL_ENV=netlify npm run docs-build", "docs-linkinator": "linkinator _gh_pages --recurse --silent --skip \"^(?!http://localhost)\"", "docs-vnu": "node build/vnu-jar.js", "docs-lint": "npm-run-all --parallel docs-vnu docs-linkinator", - "docs-serve": "bundle exec jekyll serve", - "docs-serve-only": "npm run docs-serve -- --skip-initial-build --no-watch", + "docs-serve": "hugo server --port 9001 --disableFastRender", + "docs-serve-only": "npx sirv-cli _gh_pages --port 9001", "lockfile-lint": "lockfile-lint --allowed-hosts npm --allowed-schemes https: --empty-hostname false --type npm --path package-lock.json", - "update-deps": "ncu -u -x \"jquery,karma-browserstack-launcher,sinon\" && npm update && bundle update && cross-env-shell echo Manually update \\\"site/docs/$npm_package_version_short/assets/js/vendor/\\\"", - "release": "npm-run-all dist release-sri docs-production release-zip*", + "update-deps": "ncu -u -x \"jquery,karma-browserstack-launcher,sinon,terser\" && npm update && echo Manually update site/assets/js/vendor", + "release": "npm-run-all dist release-sri docs-build release-zip*", "release-sri": "node build/generate-sri.js", "release-version": "node build/change-version.js", - "release-zip": "cross-env-shell \"shx rm -rf bootstrap-$npm_package_version-dist && shx cp -r dist/ bootstrap-$npm_package_version-dist && zip -r9 bootstrap-$npm_package_version-dist.zip bootstrap-$npm_package_version-dist && shx rm -rf bootstrap-$npm_package_version-dist\"", + "release-zip": "cross-env-shell \"rm -rf bootstrap-$npm_package_version-dist && cp -r dist/ bootstrap-$npm_package_version-dist && zip -r9 bootstrap-$npm_package_version-dist.zip bootstrap-$npm_package_version-dist && rm -rf bootstrap-$npm_package_version-dist\"", "release-zip-examples": "node build/zip-examples.js", "dist": "npm-run-all --parallel css js", "test": "npm-run-all lint dist js-test docs-build docs-lint", - "netlify": "npm-run-all dist release-sri docs-netlify", + "netlify": "cross-env-shell HUGO_BASEURL=$DEPLOY_PRIME_URL npm-run-all dist release-sri docs-build", "watch": "npm-run-all --parallel watch-*", - "watch-css-main": "nodemon --watch scss/ --ext scss --exec \"npm run css-main\"", - "watch-css-docs": "nodemon --watch \"site/docs/**/assets/scss/\" --ext scss --exec \"npm run css-docs\"", - "watch-js-main": "nodemon --watch js/src/ --ext js --exec \"npm run js-compile\"", - "watch-js-docs": "nodemon --watch \"site/docs/**/assets/js/src/\" --ext js --exec \"npm run js-docs\"" + "watch-css-main": "nodemon --watch scss/ --ext scss --exec \"npm-run-all css-lint css-compile css-prefix\"", + "watch-css-docs": "nodemon --watch site/assets/scss/ --ext scss --exec \"npm run css-lint\"", + "watch-js-main": "nodemon --watch js/src/ --ext js --exec \"npm-run-all js-lint js-compile\"", + "watch-js-docs": "nodemon --watch site/assets/js/ --ext js --exec \"npm run js-lint\"" }, "style": "dist/css/bootstrap.css", "sass": "scss/bootstrap.scss", @@ -109,24 +94,25 @@ "popper.js": "^1.16.1" }, "devDependencies": { - "@babel/cli": "^7.11.6", - "@babel/core": "^7.11.6", - "@babel/preset-env": "^7.11.5", - "@rollup/plugin-babel": "^5.2.1", - "@rollup/plugin-commonjs": "^15.1.0", - "@rollup/plugin-node-resolve": "^9.0.0", - "autoprefixer": "^9.8.6", + "@babel/cli": "^7.12.10", + "@babel/core": "^7.12.10", + "@babel/preset-env": "^7.12.11", + "@rollup/plugin-babel": "^5.2.2", + "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-node-resolve": "^11.0.1", + "autoprefixer": "^10.2.1", "babel-plugin-istanbul": "^6.0.0", "bundlewatch": "^0.3.1", "clean-css-cli": "^4.3.0", - "cross-env": "^7.0.2", - "eslint": "^7.11.0", - "eslint-config-xo": "^0.32.1", + "cross-env": "^7.0.3", + "eslint": "^7.17.0", + "eslint-config-xo": "^0.34.0", "eslint-plugin-import": "^2.22.1", - "eslint-plugin-unicorn": "^22.0.0", - "find-unused-sass-variables": "^2.0.0", + "eslint-plugin-unicorn": "^25.0.1", + "find-unused-sass-variables": "^3.1.0", "glob": "^7.1.6", "hammer-simulator": "0.0.1", + "hugo-bin": "^0.68.0", "ip": "^1.1.5", "jquery": "^3.5.1", "karma": "^5.2.3", @@ -134,24 +120,24 @@ "karma-chrome-launcher": "^3.1.0", "karma-coverage-istanbul-reporter": "^3.0.3", "karma-detect-browsers": "^2.3.3", - "karma-firefox-launcher": "^1.3.0", + "karma-firefox-launcher": "^2.1.0", "karma-qunit": "^4.1.1", "karma-sinon": "^1.0.5", - "linkinator": "^2.1.3", + "linkinator": "^2.11.2", "lockfile-lint": "^4.3.7", - "node-sass": "^4.14.1", - "nodemon": "^2.0.4", + "node-sass": "^5.0.0", + "nodemon": "^2.0.7", "npm-run-all": "^4.1.5", "popper.js": "^1.16.1", - "postcss-cli": "^7.1.2", - "qunit": "^2.11.3", - "rollup": "^2.29.0", + "postcss": "^8.2.4", + "postcss-cli": "^8.3.1", + "qunit": "^2.14.0", + "rollup": "^2.36.1", "shelljs": "^0.8.4", - "shx": "^0.3.2", "sinon": "^7.5.0", - "stylelint": "^13.7.2", + "stylelint": "^13.8.0", "stylelint-config-twbs-bootstrap": "^2.1.0", - "terser": "^4.8.0", + "terser": "5.1.0", "vnu-jar": "20.6.30" }, "files": [ @@ -159,6 +145,9 @@ "js/{src,dist}/**/*.{js,map}", "scss/**/*.scss" ], + "hugo-bin": { + "buildTags": "extended" + }, "jspm": { "registry": "npm", "main": "js/bootstrap", diff --git a/vendor/twbs/bootstrap/scss/_breadcrumb.scss b/vendor/twbs/bootstrap/scss/_breadcrumb.scss index a0cf7e29b..9c204c7d5 100644 --- a/vendor/twbs/bootstrap/scss/_breadcrumb.scss +++ b/vendor/twbs/bootstrap/scss/_breadcrumb.scss @@ -10,14 +10,12 @@ } .breadcrumb-item { - display: flex; - // The separator between breadcrumbs (by default, a forward-slash: "/") + .breadcrumb-item { padding-left: $breadcrumb-item-padding; &::before { - display: inline-block; // Suppress underlining of the separator in modern browsers + float: left; // Suppress inline spacings and underlining of the separator padding-right: $breadcrumb-item-padding; color: $breadcrumb-divider-color; content: escape-svg($breadcrumb-divider); diff --git a/vendor/twbs/bootstrap/scss/_carousel.scss b/vendor/twbs/bootstrap/scss/_carousel.scss index fb5e9f856..db30bed8b 100644 --- a/vendor/twbs/bootstrap/scss/_carousel.scss +++ b/vendor/twbs/bootstrap/scss/_carousel.scss @@ -127,7 +127,7 @@ display: inline-block; width: $carousel-control-icon-width; height: $carousel-control-icon-width; - background: no-repeat 50% / 100% 100%; + background: 50% / 100% 100% no-repeat; } .carousel-control-prev-icon { background-image: escape-svg($carousel-control-prev-icon-bg); diff --git a/vendor/twbs/bootstrap/scss/_custom-forms.scss b/vendor/twbs/bootstrap/scss/_custom-forms.scss index 0057b330f..06725ff36 100644 --- a/vendor/twbs/bootstrap/scss/_custom-forms.scss +++ b/vendor/twbs/bootstrap/scss/_custom-forms.scss @@ -104,7 +104,7 @@ width: $custom-control-indicator-size; height: $custom-control-indicator-size; content: ""; - background: no-repeat 50% / #{$custom-control-indicator-bg-size}; + background: 50% / #{$custom-control-indicator-bg-size} no-repeat; } } @@ -315,6 +315,7 @@ width: 100%; height: $custom-file-height; margin: 0; + overflow: hidden; opacity: 0; &:focus ~ .custom-file-label { @@ -347,6 +348,7 @@ z-index: 1; height: $custom-file-height; padding: $custom-file-padding-y $custom-file-padding-x; + overflow: hidden; font-family: $custom-file-font-family; font-weight: $custom-file-font-weight; line-height: $custom-file-line-height; @@ -388,7 +390,7 @@ appearance: none; &:focus { - outline: none; + outline: 0; // Pseudo-elements must be split across multiple rulesets to have an effect. // No box-shadow() mixin for focus accessibility. diff --git a/vendor/twbs/bootstrap/scss/_dropdown.scss b/vendor/twbs/bootstrap/scss/_dropdown.scss index a8aaa585c..f39de1185 100644 --- a/vendor/twbs/bootstrap/scss/_dropdown.scss +++ b/vendor/twbs/bootstrap/scss/_dropdown.scss @@ -100,7 +100,7 @@ } } -// When enabled Popper.js, reset basic dropdown position +// When Popper is enabled, reset the basic dropdown position // stylelint-disable-next-line no-duplicate-selectors .dropdown-menu { &[x-placement^="top"], diff --git a/vendor/twbs/bootstrap/scss/_input-group.scss b/vendor/twbs/bootstrap/scss/_input-group.scss index cad8ea367..d72ebeaba 100644 --- a/vendor/twbs/bootstrap/scss/_input-group.scss +++ b/vendor/twbs/bootstrap/scss/_input-group.scss @@ -42,7 +42,6 @@ > .form-control, > .custom-select { - &:not(:last-child) { @include border-right-radius(0); } &:not(:first-child) { @include border-left-radius(0); } } @@ -53,9 +52,24 @@ align-items: center; &:not(:last-child) .custom-file-label, - &:not(:last-child) .custom-file-label::after { @include border-right-radius(0); } &:not(:first-child) .custom-file-label { @include border-left-radius(0); } } + + &:not(.has-validation) { + > .form-control:not(:last-child), + > .custom-select:not(:last-child), + > .custom-file:not(:last-child) .custom-file-label::after { + @include border-right-radius(0); + } + } + + &.has-validation { + > .form-control:nth-last-child(n + 3), + > .custom-select:nth-last-child(n + 3), + > .custom-file:nth-last-child(n + 3) .custom-file-label::after { + @include border-right-radius(0); + } + } } @@ -175,8 +189,10 @@ .input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .input-group-text, -.input-group > .input-group-append:not(:last-child) > .btn, -.input-group > .input-group-append:not(:last-child) > .input-group-text, +.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn, +.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text, +.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn, +.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text, .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { @include border-right-radius(0); diff --git a/vendor/twbs/bootstrap/scss/_nav.scss b/vendor/twbs/bootstrap/scss/_nav.scss index d866c9841..fad684e57 100644 --- a/vendor/twbs/bootstrap/scss/_nav.scss +++ b/vendor/twbs/bootstrap/scss/_nav.scss @@ -35,11 +35,8 @@ .nav-tabs { border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color; - .nav-item { - margin-bottom: -$nav-tabs-border-width; - } - .nav-link { + margin-bottom: -$nav-tabs-border-width; border: $nav-tabs-border-width solid transparent; @include border-top-radius($nav-tabs-border-radius); diff --git a/vendor/twbs/bootstrap/scss/_navbar.scss b/vendor/twbs/bootstrap/scss/_navbar.scss index 5f10a62f1..cf5b66790 100644 --- a/vendor/twbs/bootstrap/scss/_navbar.scss +++ b/vendor/twbs/bootstrap/scss/_navbar.scss @@ -136,8 +136,12 @@ height: 1.5em; vertical-align: middle; content: ""; - background: no-repeat center center; - background-size: 100% 100%; + background: 50% / 100% 100% no-repeat; +} + +.navbar-nav-scroll { + max-height: $navbar-nav-scroll-max-height; + overflow-y: auto; } // Generate series of `.navbar-expand-*` responsive classes for configuring @@ -199,6 +203,10 @@ } } + .navbar-nav-scroll { + overflow: visible; + } + .navbar-collapse { display: flex !important; // stylelint-disable-line declaration-no-important diff --git a/vendor/twbs/bootstrap/scss/_pagination.scss b/vendor/twbs/bootstrap/scss/_pagination.scss index d7d553cca..9313cc547 100644 --- a/vendor/twbs/bootstrap/scss/_pagination.scss +++ b/vendor/twbs/bootstrap/scss/_pagination.scss @@ -66,9 +66,9 @@ // .pagination-lg { - @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $border-radius-lg); + @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $pagination-border-radius-lg); } .pagination-sm { - @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $border-radius-sm); + @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $pagination-border-radius-sm); } diff --git a/vendor/twbs/bootstrap/scss/_progress.scss b/vendor/twbs/bootstrap/scss/_progress.scss index 1a037045a..e206474a8 100644 --- a/vendor/twbs/bootstrap/scss/_progress.scss +++ b/vendor/twbs/bootstrap/scss/_progress.scss @@ -36,7 +36,7 @@ @if $enable-transitions { .progress-bar-animated { - animation: progress-bar-stripes $progress-bar-animation-timing; + animation: $progress-bar-animation-timing progress-bar-stripes; @if $enable-prefers-reduced-motion-media-query { @media (prefers-reduced-motion: reduce) { diff --git a/vendor/twbs/bootstrap/scss/_reboot.scss b/vendor/twbs/bootstrap/scss/_reboot.scss index 6f73466d3..cd93bfe24 100644 --- a/vendor/twbs/bootstrap/scss/_reboot.scss +++ b/vendor/twbs/bootstrap/scss/_reboot.scss @@ -1,4 +1,4 @@ -// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix +// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix // Reboot // @@ -307,13 +307,13 @@ button { border-radius: 0; } -// Work around a Firefox/IE bug where the transparent `button` background -// results in a loss of the default `button` focus styles. -// -// Credit: https://github.com/suitcss/base/ -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; +// Explicitly remove focus outline in Chromium when it shouldn't be +// visible (e.g. as result of mouse click or touch tap). It already +// should be doing this automatically, but seems to currently be +// confused and applies its very visible two-tone outline anyway. + +button:focus:not(:focus-visible) { + outline: 0; } input, diff --git a/vendor/twbs/bootstrap/scss/_root.scss b/vendor/twbs/bootstrap/scss/_root.scss index 8110030c6..ad550df3b 100644 --- a/vendor/twbs/bootstrap/scss/_root.scss +++ b/vendor/twbs/bootstrap/scss/_root.scss @@ -1,4 +1,3 @@ -// Do not forget to update getting-started/theming.md! :root { // Custom variable values only support SassScript inside `#{}`. @each $color, $value in $colors { diff --git a/vendor/twbs/bootstrap/scss/_spinners.scss b/vendor/twbs/bootstrap/scss/_spinners.scss index 146c82067..7d8fba7a1 100644 --- a/vendor/twbs/bootstrap/scss/_spinners.scss +++ b/vendor/twbs/bootstrap/scss/_spinners.scss @@ -15,7 +15,7 @@ border-right-color: transparent; // stylelint-disable-next-line property-disallowed-list border-radius: 50%; - animation: spinner-border .75s linear infinite; + animation: .75s linear infinite spinner-border; } .spinner-border-sm { @@ -47,10 +47,19 @@ // stylelint-disable-next-line property-disallowed-list border-radius: 50%; opacity: 0; - animation: spinner-grow .75s linear infinite; + animation: .75s linear infinite spinner-grow; } .spinner-grow-sm { width: $spinner-width-sm; height: $spinner-height-sm; } + +@if $enable-prefers-reduced-motion-media-query { + @media (prefers-reduced-motion: reduce) { + .spinner-border, + .spinner-grow { + animation-duration: 1.5s; + } + } +} diff --git a/vendor/twbs/bootstrap/scss/_type.scss b/vendor/twbs/bootstrap/scss/_type.scss index 43dde7d0f..3112a734b 100644 --- a/vendor/twbs/bootstrap/scss/_type.scss +++ b/vendor/twbs/bootstrap/scss/_type.scss @@ -1,4 +1,4 @@ -// stylelint-disable declaration-no-important, selector-list-comma-newline-after +// stylelint-disable selector-list-comma-newline-after // // Headings diff --git a/vendor/twbs/bootstrap/scss/_variables.scss b/vendor/twbs/bootstrap/scss/_variables.scss index d7171e5a4..0a260b96f 100644 --- a/vendor/twbs/bootstrap/scss/_variables.scss +++ b/vendor/twbs/bootstrap/scss/_variables.scss @@ -274,7 +274,7 @@ $embed-responsive-aspect-ratios: join( // Font, line-height, and color for body text, headings, and more. // stylelint-disable value-keyword-case -$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default; +$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default; $font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default; $font-family-base: $font-family-sans-serif !default; // stylelint-enable value-keyword-case @@ -583,7 +583,7 @@ $custom-select-disabled-bg: $gray-200 !default; $custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions $custom-select-indicator-color: $gray-800 !default; $custom-select-indicator: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'><path fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>") !default; -$custom-select-background: escape-svg($custom-select-indicator) no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon) +$custom-select-background: escape-svg($custom-select-indicator) right $custom-select-padding-x center / $custom-select-bg-size no-repeat !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon) $custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default; $custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default; @@ -731,6 +731,8 @@ $navbar-toggler-padding-x: .75rem !default; $navbar-toggler-font-size: $font-size-lg !default; $navbar-toggler-border-radius: $btn-border-radius !default; +$navbar-nav-scroll-max-height: 75vh !default; + $navbar-dark-color: rgba($white, .5) !default; $navbar-dark-hover-color: rgba($white, .75) !default; $navbar-dark-active-color: $white !default; @@ -772,12 +774,12 @@ $dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default; $dropdown-link-color: $gray-900 !default; $dropdown-link-hover-color: darken($gray-900, 5%) !default; -$dropdown-link-hover-bg: $gray-100 !default; +$dropdown-link-hover-bg: $gray-200 !default; $dropdown-link-active-color: $component-active-color !default; $dropdown-link-active-bg: $component-active-bg !default; -$dropdown-link-disabled-color: $gray-600 !default; +$dropdown-link-disabled-color: $gray-500 !default; $dropdown-item-padding-y: .25rem !default; $dropdown-item-padding-x: 1.5rem !default; @@ -816,6 +818,8 @@ $pagination-disabled-color: $gray-600 !default; $pagination-disabled-bg: $white !default; $pagination-disabled-border-color: $gray-300 !default; +$pagination-border-radius-sm: $border-radius-sm !default; +$pagination-border-radius-lg: $border-radius-lg !default; // Jumbotron diff --git a/vendor/twbs/bootstrap/scss/bootstrap-grid.scss b/vendor/twbs/bootstrap/scss/bootstrap-grid.scss index a5cf3b789..6a6648377 100644 --- a/vendor/twbs/bootstrap/scss/bootstrap-grid.scss +++ b/vendor/twbs/bootstrap/scss/bootstrap-grid.scss @@ -1,7 +1,7 @@ /*! - * Bootstrap Grid v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors - * Copyright 2011-2020 Twitter, Inc. + * Bootstrap Grid v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ @@ -19,6 +19,7 @@ html { @import "functions"; @import "variables"; +@import "mixins/deprecate"; @import "mixins/breakpoints"; @import "mixins/grid-framework"; @import "mixins/grid"; diff --git a/vendor/twbs/bootstrap/scss/bootstrap-reboot.scss b/vendor/twbs/bootstrap/scss/bootstrap-reboot.scss index de63f528b..2b6cfc2f8 100644 --- a/vendor/twbs/bootstrap/scss/bootstrap-reboot.scss +++ b/vendor/twbs/bootstrap/scss/bootstrap-reboot.scss @@ -1,7 +1,7 @@ /*! - * Bootstrap Reboot v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors - * Copyright 2011-2020 Twitter, Inc. + * Bootstrap Reboot v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */ diff --git a/vendor/twbs/bootstrap/scss/bootstrap.scss b/vendor/twbs/bootstrap/scss/bootstrap.scss index 0a206557b..e86c49da5 100644 --- a/vendor/twbs/bootstrap/scss/bootstrap.scss +++ b/vendor/twbs/bootstrap/scss/bootstrap.scss @@ -1,7 +1,7 @@ /*! - * Bootstrap v4.5.3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors - * Copyright 2011-2020 Twitter, Inc. + * Bootstrap v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ diff --git a/vendor/twbs/bootstrap/scss/mixins/_forms.scss b/vendor/twbs/bootstrap/scss/mixins/_forms.scss index 39b52f3ca..a32163049 100644 --- a/vendor/twbs/bootstrap/scss/mixins/_forms.scss +++ b/vendor/twbs/bootstrap/scss/mixins/_forms.scss @@ -64,6 +64,13 @@ color: color-yiq($color); background-color: rgba($color, $form-feedback-tooltip-opacity); @include border-radius($form-feedback-tooltip-border-radius); + + // See https://github.com/twbs/bootstrap/pull/31557 + // Align tooltip to form elements + .form-row > .col > &, + .form-row > [class*="col-"] > & { + left: $form-grid-gutter-width / 2; + } } @include form-validation-state-selector($state) { @@ -108,7 +115,7 @@ @if $enable-validation-icons { padding-right: $custom-select-feedback-icon-padding-right; - background: $custom-select-background, escape-svg($icon) $custom-select-bg no-repeat $custom-select-feedback-icon-position / $custom-select-feedback-icon-size; + background: $custom-select-background, $custom-select-bg escape-svg($icon) $custom-select-feedback-icon-position / $custom-select-feedback-icon-size no-repeat; } &:focus { diff --git a/vendor/twbs/bootstrap/scss/mixins/_image.scss b/vendor/twbs/bootstrap/scss/mixins/_image.scss index c971e038b..3aaa0d704 100644 --- a/vendor/twbs/bootstrap/scss/mixins/_image.scss +++ b/vendor/twbs/bootstrap/scss/mixins/_image.scss @@ -26,7 +26,7 @@ // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio, // but doesn't convert dppx=>dpi. // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard. - // Compatibility info: https://caniuse.com/#feat=css-media-resolution + // Compatibility info: https://caniuse.com/css-media-resolution @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx only screen and (min-resolution: 2dppx) { // Standardized background-image: url($file-2x); diff --git a/vendor/twbs/bootstrap/site/.eslintrc.json b/vendor/twbs/bootstrap/site/.eslintrc.json index e911d46b2..11fae1928 100644 --- a/vendor/twbs/bootstrap/site/.eslintrc.json +++ b/vendor/twbs/bootstrap/site/.eslintrc.json @@ -35,10 +35,10 @@ "unicorn/no-for-loop": "off", "unicorn/no-null": "off", "unicorn/prefer-array-find": "off", - "unicorn/prefer-dataset": "off", + "unicorn/prefer-dom-node-dataset": "off", "unicorn/prefer-includes": "off", "unicorn/prefer-number-properties": "off", - "unicorn/prefer-node-append": "off", + "unicorn/prefer-dom-node-append": "off", "unicorn/prefer-query-selector": "off", "unicorn/prevent-abbreviations": "off" } diff --git a/vendor/twbs/bootstrap/site/_data/docs-versions.yml b/vendor/twbs/bootstrap/site/_data/docs-versions.yml deleted file mode 100644 index c211a01c7..000000000 --- a/vendor/twbs/bootstrap/site/_data/docs-versions.yml +++ /dev/null @@ -1,46 +0,0 @@ -- group: v1.x - baseurl: https://getbootstrap.com - description: Every minor and patch release from v1 is listed below. - versions: - - v: 1.0.0 - - v: 1.1.0 - - v: 1.1.1 - - v: 1.2.0 - - v: 1.3.0 - - v: 1.4.0 - -- group: v2.x - baseurl: https://getbootstrap.com - description: Every minor and patch release from v2 is listed below. - versions: - - v: 2.0.0 - - v: 2.0.1 - - v: 2.0.2 - - v: 2.0.3 - - v: 2.0.4 - - v: 2.1.0 - - v: 2.1.1 - - v: 2.2.0 - - v: 2.2.1 - - v: 2.2.2 - - v: 2.3.0 - - v: 2.3.1 - - v: 2.3.2 - -- group: v3.x - baseurl: https://getbootstrap.com/docs - description: Our previous major release and its minor versions. Last update was v3.4.1. - versions: - - v: 3.3 - - v: 3.4 - -- group: v4.x - baseurl: https://getbootstrap.com/docs - description: Current major release and its minor versions. Last update was v4.5.3. - versions: - - v: 4.0 - - v: 4.1 - - v: 4.2 - - v: 4.3 - - v: 4.4 - - v: 4.5 diff --git a/vendor/twbs/bootstrap/site/_includes/bugify.html b/vendor/twbs/bootstrap/site/_includes/bugify.html deleted file mode 100644 index 7f3340421..000000000 --- a/vendor/twbs/bootstrap/site/_includes/bugify.html +++ /dev/null @@ -1,42 +0,0 @@ -{%- comment -%} - Usage: include bugify.html content=text, - where content is a string that contains a bug reference name and id. - e.g. Bootstrap#19984 -{%- endcomment -%} - -{%- assign words = include.content | split: " " -%} - -{%- for word in words -%} - {% if word contains "#" %} - {% if word contains "," %}{% assign separator = true %}{% else %}{% assign separator = false %}{% endif %} - {%- assign data = word | split: "#" -%} - {%- assign bug_cat = data[0] | strip_newlines -%} - {%- assign bug_id = data[1] | strip_newlines | remove: "," -%} - - {%- case bug_cat -%} - {%- when "Bootstrap" -%} - <a href="https://github.com/twbs/bootstrap/issues/{{ bug_id }}">#{{ bug_id }}</a> - {%- when "Edge" -%} - <a href="https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/{{ bug_id }}/">Edge issue #{{ bug_id }}</a> - {%- when "A11yUserVoice" -%} - <a href="https://microsoftaccessibility.uservoice.com/forums/307429-microsoft-accessibility-feedback/suggestions/{{ bug_id }}">Microsoft A11y UserVoice idea #{{ bug_id }}</a> - {%- when "UserVoice" -%} - <a href="https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/{{ bug_id }}">Edge UserVoice idea #{{ bug_id }}</a> - {%- when "Mozilla" -%} - <a href="https://bugzilla.mozilla.org/show_bug.cgi?id={{ bug_id }}">Mozilla bug #{{ bug_id }}</a> - {%- when "Chromium" -%} - <a href="https://bugs.chromium.org/p/chromium/issues/detail?id={{ bug_id }}">Chromium issue #{{ bug_id }}</a> - {%- when "WebKit" -%} - <a href="https://bugs.webkit.org/show_bug.cgi?id={{ bug_id }}">WebKit bug #{{ bug_id }}</a> - {%- when "Safari" -%} - <a href="https://openradar.appspot.com/{{ bug_id }}">Apple Safari Radar #{{ bug_id }}</a> - {%- when "Normalize" -%} - <a href="https://github.com/necolas/normalize.css/issues/{{ bug_id }}">Normalize #{{ bug_id }}</a> - {%- else -%} - <strong>parse error</strong> - {%- endcase -%}{% if separator %}, {% endif %} - - {% else %} - {{ word }} - {%- endif -%} -{%- endfor -%} diff --git a/vendor/twbs/bootstrap/site/_includes/callout-info-prefersreducedmotion.md b/vendor/twbs/bootstrap/site/_includes/callout-info-prefersreducedmotion.md deleted file mode 100644 index 9c3090376..000000000 --- a/vendor/twbs/bootstrap/site/_includes/callout-info-prefersreducedmotion.md +++ /dev/null @@ -1,4 +0,0 @@ -{% capture callout %} -The animation effect of this component is dependent on the `prefers-reduced-motion` media query. See the [reduced motion section of our accessibility documentation]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/accessibility/#reduced-motion). -{% endcapture %} -{% include callout.html content=callout type="info" %} diff --git a/vendor/twbs/bootstrap/site/_includes/callout.html b/vendor/twbs/bootstrap/site/_includes/callout.html deleted file mode 100644 index 434d10e1e..000000000 --- a/vendor/twbs/bootstrap/site/_includes/callout.html +++ /dev/null @@ -1,9 +0,0 @@ -{%- comment -%} - Usage: include callout.html content=callout type="type", - where content is a capture with the content - and type is one of: info (default), danger, warning -{%- endcomment -%} -{%- assign css_class = include.type | default: "info" -%} -<div class="bd-callout bd-callout-{{ css_class }}"> - {{- include.content | markdownify -}} -</div> diff --git a/vendor/twbs/bootstrap/site/_includes/docs-navbar.html b/vendor/twbs/bootstrap/site/_includes/docs-navbar.html deleted file mode 100644 index aa77be0f0..000000000 --- a/vendor/twbs/bootstrap/site/_includes/docs-navbar.html +++ /dev/null @@ -1,70 +0,0 @@ -<header class="navbar navbar-expand navbar-dark flex-column flex-md-row bd-navbar"> - <a class="navbar-brand mr-0 mr-md-2" href="{{ site.baseurl }}/" aria-label="Bootstrap"> - {%- include icons/bootstrap.svg width="36" height="36" class="d-block" -%} - </a> - - <div class="navbar-nav-scroll"> - <ul class="navbar-nav bd-navbar-nav flex-row"> - <li class="nav-item"> - <a class="nav-link {% if page.layout == "home" %}active{% endif %}" href="{{ site.baseurl }}/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Bootstrap');">Home</a> - </li> - <li class="nav-item"> - <a class="nav-link {% if page.layout == "docs" %}active{% endif %}" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/introduction/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Docs');">Documentation</a> - </li> - <li class="nav-item"> - <a class="nav-link {% if page.title == "Examples" %}active{% endif %}" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/examples/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Examples');">Examples</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="{{ site.icons }}/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Icons');" target="_blank" rel="noopener">Icons</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="{{ site.themes }}/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Themes');" target="_blank" rel="noopener">Themes</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="{{ site.expo }}/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Expo');" target="_blank" rel="noopener">Expo</a> - </li> - <li class="nav-item"> - <a class="nav-link" href="{{ site.blog }}/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Blog');" target="_blank" rel="noopener">Blog</a> - </li> - </ul> - </div> - - <ul class="navbar-nav ml-md-auto"> - <li class="nav-item dropdown"> - <a class="nav-item nav-link dropdown-toggle mr-md-2" href="#" id="bd-versions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> - v{{ site.docs_version }} - </a> - <div class="dropdown-menu dropdown-menu-md-right" aria-labelledby="bd-versions"> - <a class="dropdown-item active" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/">Latest (4.5.x)</a> - <div class="dropdown-divider"></div> - <a class="dropdown-item" href="https://getbootstrap.com/docs/3.4/">v3.4.1</a> - <a class="dropdown-item" href="https://getbootstrap.com/2.3.2/">v2.3.2</a> - <div class="dropdown-divider"></div> - <a class="dropdown-item" href="{{ site.baseurl }}/docs/versions/">All versions</a> - </div> - </li> - - <li class="nav-item"> - <a class="nav-link pl-2 pr-1 mx-1 py-3 my-n2" href="{{ site.github_org }}" target="_blank" rel="noopener" aria-label="GitHub"> - {%- include icons/github.svg class="navbar-nav-svg" -%} - </a> - </li> - <li class="nav-item"> - <a class="nav-link px-1 mx-1 py-3 my-n2" href="https://twitter.com/{{ site.twitter }}" target="_blank" rel="noopener" aria-label="Twitter"> - {%- include icons/twitter.svg class="navbar-nav-svg" -%} - </a> - </li> - <li class="nav-item"> - <a class="nav-link px-1 mx-1 py-3 my-n2" href="{{ site.slack }}/" target="_blank" rel="noopener" aria-label="Slack"> - {%- include icons/slack.svg class="navbar-nav-svg" -%} - </a> - </li> - <li class="nav-item"> - <a class="nav-link px-1 mx-1 py-3 my-n2" href="{{ site.opencollective }}/" target="_blank" rel="noopener" aria-label="Open Collective"> - {%- include icons/opencollective.svg class="navbar-nav-svg" -%} - </a> - </li> - </ul> - - <a class="btn btn-bd-download d-none d-lg-inline-block mb-3 mb-md-0 ml-md-3" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/download/">Download</a> -</header> diff --git a/vendor/twbs/bootstrap/site/_includes/docs-sidebar.html b/vendor/twbs/bootstrap/site/_includes/docs-sidebar.html deleted file mode 100644 index 1fb4ff016..000000000 --- a/vendor/twbs/bootstrap/site/_includes/docs-sidebar.html +++ /dev/null @@ -1,43 +0,0 @@ -<form role="search" class="bd-search d-flex align-items-center"> - <input type="search" class="form-control" id="search-input" placeholder="Search..." aria-label="Search for..." autocomplete="off" data-docs-version="{{ site.docs_version }}"> - <button class="btn bd-search-docs-toggle d-md-none p-0 ml-3" type="button" data-toggle="collapse" data-target="#bd-docs-nav" aria-controls="bd-docs-nav" aria-expanded="false" aria-label="Toggle docs navigation"> - {%- include icons/menu.svg width="30" height="30" -%} - </button> -</form> - -<nav class="collapse bd-links" id="bd-docs-nav" aria-label="Main navigation"> - {%- assign page_slug = page.url | split: '/' | last -%} - {%- for group in site.data.nav -%} - {%- assign link = group.pages | first -%} - {%- assign link_slug = link.title | slugify -%} - {%- assign group_slug = group.title | slugify -%} - {%- assign active = nil -%} - - {%- if page.group == group_slug -%} - {%- assign active = 'active' -%} - {%- endif -%} - - <div class="bd-toc-item{% unless active == nil %} {{ active }}{% endunless %}"> - <a class="bd-toc-link" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/{{ group_slug }}/{{ link_slug }}{% if link_slug %}/{% endif %}"> - {{ group.title }} - </a> - - <ul class="nav bd-sidenav"> - {%- for doc in group.pages -%} - {%- assign doc_slug = doc.title | slugify -%} - {%- assign active = nil -%} - - {%- if page.group == group_slug and page_slug == doc_slug -%} - {%- assign active = 'active bd-sidenav-active' -%} - {%- endif -%} - - <li{% unless active == nil %} class="{{ active }}"{% endunless %}> - <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/{{ group_slug }}/{{ doc_slug }}/"> - {{ doc.title }} - </a> - </li> - {%- endfor -%} - </ul> - </div> - {%- endfor -%} -</nav> diff --git a/vendor/twbs/bootstrap/site/_includes/example.html b/vendor/twbs/bootstrap/site/_includes/example.html deleted file mode 100644 index dcd148b02..000000000 --- a/vendor/twbs/bootstrap/site/_includes/example.html +++ /dev/null @@ -1,51 +0,0 @@ -{%- comment -%} - Usage: include example.html content=markup [args], - where content is a capture with the HTML content - - args can be one of the following: - id - null (default) - class - "bd-example" (default) - optional: hide_preview - disabled (default) - optional: hide_markup - disabled (default) -{%- endcomment -%} - -{%- assign id = include.id -%} -{%- assign class = include.class -%} - -{%- if include.hide_preview == null -%} -<div{% if id %} id="{{ id }}"{% endif %} class="bd-example{% if class %} {{ class }}{% endif %}"> - {{- include.content -}} -</div> -{%- endif -%} - -{%- if include.hide_markup == null -%} - {%- highlight html -%} - {%- if include.content contains '<svg class="bd-placeholder-img' -%} - {%- assign modified_content = include.content - | replace: '<svg class="bd-placeholder-img', '✂️<svg class="bd-placeholder-img' - | replace: '</svg>', '</svg>✂️' - | split: '✂️' -%} - - {%- if include.content contains 'bd-placeholder-img ' -%} - {%- assign image_class = include.content - | replace_first: 'bd-placeholder-img', 'bd-placeholder-img ✂️' - | replace: '" width="', '✂️" width="' - | split: '✂️' -%} - {%- assign image_class = image_class[1] | replace: 'bd-placeholder-img-lg', '' | strip -%} - {%- endif -%} - - {%- for content_chunk in modified_content -%} - {%- if content_chunk contains '<svg class="bd-placeholder-img' -%} - {%- capture img_placeholder -%} - <img src="..." {% if image_class %}class="{{ image_class }}" {% endif %}alt="..."> - {%- endcapture -%} - {{- img_placeholder -}} - {%- else -%} - {{- content_chunk -}} - {%- endif -%} - {%- endfor -%} - {%- else -%} - {{- include.content -}} - {%- endif -%} - {%- endhighlight -%} -{%- endif -%} diff --git a/vendor/twbs/bootstrap/site/_includes/favicons.html b/vendor/twbs/bootstrap/site/_includes/favicons.html deleted file mode 100644 index 051259d99..000000000 --- a/vendor/twbs/bootstrap/site/_includes/favicons.html +++ /dev/null @@ -1,9 +0,0 @@ -<!-- Favicons --> -<link rel="apple-touch-icon" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/apple-touch-icon.png" sizes="180x180"> -<link rel="icon" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/favicon-32x32.png" sizes="32x32" type="image/png"> -<link rel="icon" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/favicon-16x16.png" sizes="16x16" type="image/png"> -<link rel="manifest" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/manifest.json"> -<link rel="mask-icon" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/safari-pinned-tab.svg" color="#563d7c"> -<link rel="icon" href="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/favicon.ico"> -<meta name="msapplication-config" content="{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/browserconfig.xml"> -<meta name="theme-color" content="#563d7c"> diff --git a/vendor/twbs/bootstrap/site/_includes/footer.html b/vendor/twbs/bootstrap/site/_includes/footer.html deleted file mode 100644 index cb15d7739..000000000 --- a/vendor/twbs/bootstrap/site/_includes/footer.html +++ /dev/null @@ -1,12 +0,0 @@ -<footer class="bd-footer text-muted"> - <div class="container-fluid p-3 p-md-5"> - <ul class="bd-footer-links"> - <li><a href="{{ site.github_org }}">GitHub</a></li> - <li><a href="https://twitter.com/{{ site.twitter }}">Twitter</a></li> - <li><a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/examples/">Examples</a></li> - <li><a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/about/overview/">About</a></li> - </ul> - <p>Designed and built with all the love in the world by the <a href="{{ site.baseurl }}/docs/{{ site.docs_version }}/about/team/">Bootstrap team</a> with the help of <a href="{{ site.repo }}/graphs/contributors">our contributors</a>.</p> - <p>Currently v{{ site.current_version }}. Code licensed <a href="{{ site.repo }}/blob/main/LICENSE" target="_blank" rel="license noopener">MIT</a>, docs <a href="https://creativecommons.org/licenses/by/3.0/" target="_blank" rel="license noopener">CC BY 3.0</a>.</p> - </div> -</footer> diff --git a/vendor/twbs/bootstrap/site/_includes/header.html b/vendor/twbs/bootstrap/site/_includes/header.html deleted file mode 100644 index 985918bd6..000000000 --- a/vendor/twbs/bootstrap/site/_includes/header.html +++ /dev/null @@ -1,23 +0,0 @@ -<meta charset="utf-8"> -<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> -<meta name="description" content="{{ page.description | default: site.description | smartify }}"> -<meta name="author" content="{{ site.authors }}"> -<meta name="generator" content="Jekyll v{{ jekyll.version }}"> - -<meta name="docsearch:language" content="en"> -<meta name="docsearch:version" content="{{ site.docs_version }}"> - -<title> - {%- if page.title -%} - {{ page.title | smartify }} · {{ site.title | smartify }} v{{ site.docs_version }} - {%- else -%} - {{ site.title | smartify }} · {{ site.description | smartify }} - {%- endif -%} - - - - -{% include stylesheet.html %} -{% include favicons.html %} -{% include social.html %} -{% include analytics.html %} diff --git a/vendor/twbs/bootstrap/site/_includes/icons/bootstrap-stack.svg b/vendor/twbs/bootstrap/site/_includes/icons/bootstrap-stack.svg deleted file mode 100644 index 2e3abbfc4..000000000 --- a/vendor/twbs/bootstrap/site/_includes/icons/bootstrap-stack.svg +++ /dev/null @@ -1 +0,0 @@ -Bootstrap \ No newline at end of file diff --git a/vendor/twbs/bootstrap/site/_includes/icons/bootstrap.svg b/vendor/twbs/bootstrap/site/_includes/icons/bootstrap.svg deleted file mode 100644 index ec6da152f..000000000 --- a/vendor/twbs/bootstrap/site/_includes/icons/bootstrap.svg +++ /dev/null @@ -1 +0,0 @@ -Bootstrap \ No newline at end of file diff --git a/vendor/twbs/bootstrap/site/_includes/icons/circle-square.svg b/vendor/twbs/bootstrap/site/_includes/icons/circle-square.svg deleted file mode 100644 index 432a5ab98..000000000 --- a/vendor/twbs/bootstrap/site/_includes/icons/circle-square.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/vendor/twbs/bootstrap/site/_includes/icons/cloud-fill.svg b/vendor/twbs/bootstrap/site/_includes/icons/cloud-fill.svg deleted file mode 100644 index 0116a0dcc..000000000 --- a/vendor/twbs/bootstrap/site/_includes/icons/cloud-fill.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/vendor/twbs/bootstrap/site/_includes/icons/droplet-fill.svg b/vendor/twbs/bootstrap/site/_includes/icons/droplet-fill.svg deleted file mode 100644 index 41b7b58f2..000000000 --- a/vendor/twbs/bootstrap/site/_includes/icons/droplet-fill.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/vendor/twbs/bootstrap/site/_includes/icons/github.svg b/vendor/twbs/bootstrap/site/_includes/icons/github.svg deleted file mode 100644 index 0243df5a2..000000000 --- a/vendor/twbs/bootstrap/site/_includes/icons/github.svg +++ /dev/null @@ -1 +0,0 @@ -GitHub \ No newline at end of file diff --git a/vendor/twbs/bootstrap/site/_includes/icons/menu.svg b/vendor/twbs/bootstrap/site/_includes/icons/menu.svg deleted file mode 100644 index f6c47035a..000000000 --- a/vendor/twbs/bootstrap/site/_includes/icons/menu.svg +++ /dev/null @@ -1 +0,0 @@ -Menu \ No newline at end of file diff --git a/vendor/twbs/bootstrap/site/_includes/icons/opencollective.svg b/vendor/twbs/bootstrap/site/_includes/icons/opencollective.svg deleted file mode 100644 index 090d41dff..000000000 --- a/vendor/twbs/bootstrap/site/_includes/icons/opencollective.svg +++ /dev/null @@ -1 +0,0 @@ -Open Collective \ No newline at end of file diff --git a/vendor/twbs/bootstrap/site/_includes/icons/placeholder.svg b/vendor/twbs/bootstrap/site/_includes/icons/placeholder.svg deleted file mode 100644 index 36883e82d..000000000 --- a/vendor/twbs/bootstrap/site/_includes/icons/placeholder.svg +++ /dev/null @@ -1,35 +0,0 @@ -{%- comment -%} - Usage: include icons/placeholder.svg args - - args can be one of the following: - title: Used in the SVG `title` tag - text: The text to show in the image - default: 'width x height' - class: default: 'bd-placeholder-img' - color: The text color (foreground) - default: '#dee2e6' - background: The background color - default: '#868e96' - width: default: 100% - height: default: 180px -{%- endcomment -%} - -{%- assign title = include.title | default: 'Placeholder' -%} -{%- assign class = include.class | default: '' -%} -{%- assign color = include.color | default: site.data.grays[2].hex -%} -{%- assign background = include.background | default: site.data.grays[5].hex -%} -{%- assign width = include.width | default: '100%' -%} -{%- assign height = include.height | default: '180' -%} - -{%- if include.text -%} - {%- assign text = include.text -%} -{%- else -%} - {%- assign text = width | append: 'x' | append: height -%} -{%- endif -%} - -{%- capture svg -%} - - {% if title != ' ' %}{{ title }}{% endif %} - - {% if text != ' ' %}{{ text }}{% endif %} - -{%- endcapture -%} - -{{- svg | replace: ' ', '' | strip_newlines -}} diff --git a/vendor/twbs/bootstrap/site/_includes/icons/slack.svg b/vendor/twbs/bootstrap/site/_includes/icons/slack.svg deleted file mode 100644 index d6ae455d8..000000000 --- a/vendor/twbs/bootstrap/site/_includes/icons/slack.svg +++ /dev/null @@ -1 +0,0 @@ -Slack \ No newline at end of file diff --git a/vendor/twbs/bootstrap/site/_includes/icons/twitter.svg b/vendor/twbs/bootstrap/site/_includes/icons/twitter.svg deleted file mode 100644 index 7b838be58..000000000 --- a/vendor/twbs/bootstrap/site/_includes/icons/twitter.svg +++ /dev/null @@ -1 +0,0 @@ -Twitter \ No newline at end of file diff --git a/vendor/twbs/bootstrap/site/_includes/scripts.html b/vendor/twbs/bootstrap/site/_includes/scripts.html deleted file mode 100644 index 2f90f1e5d..000000000 --- a/vendor/twbs/bootstrap/site/_includes/scripts.html +++ /dev/null @@ -1,23 +0,0 @@ - - - -{%- if jekyll.environment == "production" or jekyll.environment == "netlify" -%} - -{%- else -%} - -{%- endif -%} - -{%- if page.layout == "docs" -%} - -{%- endif -%} - -{%- if jekyll.environment == "production" or jekyll.environment == "netlify" -%} - -{%- else -%} - - - - - - -{%- endif -%} diff --git a/vendor/twbs/bootstrap/site/_includes/social.html b/vendor/twbs/bootstrap/site/_includes/social.html deleted file mode 100644 index cf5be1270..000000000 --- a/vendor/twbs/bootstrap/site/_includes/social.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/vendor/twbs/bootstrap/site/_includes/stylesheet.html b/vendor/twbs/bootstrap/site/_includes/stylesheet.html deleted file mode 100644 index 2f7599e13..000000000 --- a/vendor/twbs/bootstrap/site/_includes/stylesheet.html +++ /dev/null @@ -1,16 +0,0 @@ - -{%- if jekyll.environment == "production" or jekyll.environment == "netlify" %} - -{% else %} - -{% endif -%} - -{%- if page.layout == "docs" or page.layout != "examples" -%} - -{% if page.layout == "docs" %} - -{% endif %} -{% if page.layout != "examples" %} - -{% endif %} -{%- endif -%} diff --git a/vendor/twbs/bootstrap/site/_layouts/default.html b/vendor/twbs/bootstrap/site/_layouts/default.html deleted file mode 100644 index 59f5c122b..000000000 --- a/vendor/twbs/bootstrap/site/_layouts/default.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - {% include header.html %} - - - {% include skippy.html %} - - {% include docs-navbar.html %} - - {% if page.layout == "simple" %} - {{ content }} - {% else %} -
        - {{ content }} -
        - {% endif %} - - {% include footer.html %} - {% include scripts.html %} - - diff --git a/vendor/twbs/bootstrap/site/_layouts/docs.html b/vendor/twbs/bootstrap/site/_layouts/docs.html deleted file mode 100644 index 10c9fcb0c..000000000 --- a/vendor/twbs/bootstrap/site/_layouts/docs.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - {% include header.html %} - - - {% include skippy.html %} - - {% include docs-navbar.html %} - -
        -
        -
        - {% include docs-sidebar.html %} -
        - - {% if page.toc %} - - {% endif %} - -
        -
        - View on GitHub -

        {{ page.title | smartify }}

        -
        -

        {{ page.description | smartify }}

        - {% include ads.html %} - {{ content }} -
        -
        -
        - - {% include scripts.html %} - - diff --git a/vendor/twbs/bootstrap/site/_layouts/examples.html b/vendor/twbs/bootstrap/site/_layouts/examples.html deleted file mode 100644 index 4ca4c5681..000000000 --- a/vendor/twbs/bootstrap/site/_layouts/examples.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - {{ page.title | smartify }} · {{ site.title | smartify }} - - - - {% include stylesheet.html %} - {% include favicons.html %} - - - - {%- for css in page.extra_css %} - - - {%- endfor %} - - - {{ content }} - - {%- if page.include_js != false -%} - - - - {%- if jekyll.environment == "production" or jekyll.environment == "netlify" -%} - - {%- else -%} - - {%- endif -%} - - {%- for js in page.extra_js %} - - {%- endfor %} - {%- endif -%} - - diff --git a/vendor/twbs/bootstrap/site/_layouts/simple.html b/vendor/twbs/bootstrap/site/_layouts/simple.html deleted file mode 100644 index 833061b70..000000000 --- a/vendor/twbs/bootstrap/site/_layouts/simple.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: default ---- - -
        -
        -

        {{ page.title | smartify }}

        -

        {{ page.description | smartify }}

        - {%- if page.title == "Examples" -%} - - {%- endif -%} -
        - {% include ads.html %} -
        - -
        - {{ content }} -
        diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/js/src/application.js b/vendor/twbs/bootstrap/site/assets/js/application.js similarity index 93% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/js/src/application.js rename to vendor/twbs/bootstrap/site/assets/js/application.js index a3032173b..d9f8d1a4a 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/assets/js/src/application.js +++ b/vendor/twbs/bootstrap/site/assets/js/application.js @@ -4,8 +4,8 @@ /*! * JavaScript for Bootstrap's docs (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors - * Copyright 2011-2020 Twitter, Inc. + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. * Licensed under the Creative Commons Attribution 3.0 Unported License. * For details, see https://creativecommons.org/licenses/by/3.0/. */ @@ -24,12 +24,17 @@ $('[data-toggle="popover"]').popover() - $('.toast') + $('.bd-example .toast') .toast({ autohide: false }) .toast('show') + // Live toast demo + $('#liveToastBtn').click(function () { + $('#liveToast').toast('show') + }) + // Demos within modals $('.tooltip-test').tooltip() $('.popover-test').popover() @@ -59,7 +64,7 @@ }) // Insert copy to clipboard button before .highlight - $('figure.highlight, div.highlight').each(function () { + $('div.highlight').each(function () { var btnHtml = '
        ' $(this).before(btnHtml) $('.btn-clipboard') diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/js/src/ie-emulation-modes-warning.js b/vendor/twbs/bootstrap/site/assets/js/ie-emulation-modes-warning.js similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/js/src/ie-emulation-modes-warning.js rename to vendor/twbs/bootstrap/site/assets/js/ie-emulation-modes-warning.js diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/js/src/search.js b/vendor/twbs/bootstrap/site/assets/js/search.js similarity index 97% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/js/src/search.js rename to vendor/twbs/bootstrap/site/assets/js/search.js index bb97c5cf8..724c6aa33 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/assets/js/src/search.js +++ b/vendor/twbs/bootstrap/site/assets/js/search.js @@ -5,11 +5,12 @@ (function () { 'use strict' - if (!window.docsearch) { + var inputElement = document.getElementById('search-input') + + if (!window.docsearch || !inputElement) { return } - var inputElement = document.getElementById('search-input') var siteDocsVersion = inputElement.getAttribute('data-docs-version') function getOrigin() { diff --git a/vendor/twbs/bootstrap/site/assets/js/vendor/anchor.min.js b/vendor/twbs/bootstrap/site/assets/js/vendor/anchor.min.js new file mode 100644 index 000000000..1216eeac2 --- /dev/null +++ b/vendor/twbs/bootstrap/site/assets/js/vendor/anchor.min.js @@ -0,0 +1,9 @@ +// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat +// +// AnchorJS - v4.3.0 - 2020-10-21 +// https://www.bryanbraun.com/anchorjs/ +// Copyright (c) 2020 Bryan Braun; Licensed MIT +// +// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat +!function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";return function(A){function d(A){A.icon=Object.prototype.hasOwnProperty.call(A,"icon")?A.icon:"",A.visible=Object.prototype.hasOwnProperty.call(A,"visible")?A.visible:"hover",A.placement=Object.prototype.hasOwnProperty.call(A,"placement")?A.placement:"right",A.ariaLabel=Object.prototype.hasOwnProperty.call(A,"ariaLabel")?A.ariaLabel:"Anchor",A.class=Object.prototype.hasOwnProperty.call(A,"class")?A.class:"",A.base=Object.prototype.hasOwnProperty.call(A,"base")?A.base:"",A.truncate=Object.prototype.hasOwnProperty.call(A,"truncate")?Math.floor(A.truncate):64,A.titleText=Object.prototype.hasOwnProperty.call(A,"titleText")?A.titleText:""}function f(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new TypeError("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}this.options=A||{},this.elements=[],d(this.options),this.isTouchDevice=function(){return Boolean("ontouchstart"in window||window.TouchEvent||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var e,t,o,n,i,s,a,r,c,l,h,u,p=[];if(d(this.options),"touch"===(h=this.options.visible)&&(h=this.isTouchDevice()?"always":"hover"),0===(e=f(A=A||"h2, h3, h4, h5, h6")).length)return this;for(!function(){if(null!==document.head.querySelector("style.anchorjs"))return;var A,e=document.createElement("style");e.className="anchorjs",e.appendChild(document.createTextNode("")),void 0===(A=document.head.querySelector('[rel="stylesheet"],style'))?document.head.appendChild(e):document.head.insertBefore(e,A);e.sheet.insertRule(".anchorjs-link{opacity:0;text-decoration:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}",e.sheet.cssRules.length),e.sheet.insertRule(":hover>.anchorjs-link,.anchorjs-link:focus{opacity:1}",e.sheet.cssRules.length),e.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",e.sheet.cssRules.length),e.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',e.sheet.cssRules.length)}(),t=document.querySelectorAll("[id]"),o=[].map.call(t,function(A){return A.id}),i=0;i\]./()*\\\n\t\b\v\u00A0]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),t=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||t||!1}}}); +// @license-end \ No newline at end of file diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/js/vendor/bs-custom-file-input.min.js b/vendor/twbs/bootstrap/site/assets/js/vendor/bs-custom-file-input.min.js similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/js/vendor/bs-custom-file-input.min.js rename to vendor/twbs/bootstrap/site/assets/js/vendor/bs-custom-file-input.min.js diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/js/vendor/clipboard.min.js b/vendor/twbs/bootstrap/site/assets/js/vendor/clipboard.min.js similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/js/vendor/clipboard.min.js rename to vendor/twbs/bootstrap/site/assets/js/vendor/clipboard.min.js diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_ads.scss b/vendor/twbs/bootstrap/site/assets/scss/_ads.scss similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_ads.scss rename to vendor/twbs/bootstrap/site/assets/scss/_ads.scss diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_algolia.scss b/vendor/twbs/bootstrap/site/assets/scss/_algolia.scss similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_algolia.scss rename to vendor/twbs/bootstrap/site/assets/scss/_algolia.scss diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_anchor.scss b/vendor/twbs/bootstrap/site/assets/scss/_anchor.scss similarity index 95% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_anchor.scss rename to vendor/twbs/bootstrap/site/assets/scss/_anchor.scss index a712a78cd..d9e72cf54 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_anchor.scss +++ b/vendor/twbs/bootstrap/site/assets/scss/_anchor.scss @@ -3,6 +3,7 @@ color: rgba($link-color, .5); @include transition(color .15s ease-in-out, opacity .15s ease-in-out); + &:focus, &:hover { color: $link-color; text-decoration: none; diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_brand.scss b/vendor/twbs/bootstrap/site/assets/scss/_brand.scss similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_brand.scss rename to vendor/twbs/bootstrap/site/assets/scss/_brand.scss diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_browser-bugs.scss b/vendor/twbs/bootstrap/site/assets/scss/_browser-bugs.scss similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_browser-bugs.scss rename to vendor/twbs/bootstrap/site/assets/scss/_browser-bugs.scss diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_buttons.scss b/vendor/twbs/bootstrap/site/assets/scss/_buttons.scss similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_buttons.scss rename to vendor/twbs/bootstrap/site/assets/scss/_buttons.scss diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_callouts.scss b/vendor/twbs/bootstrap/site/assets/scss/_callouts.scss similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_callouts.scss rename to vendor/twbs/bootstrap/site/assets/scss/_callouts.scss diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_clipboard-js.scss b/vendor/twbs/bootstrap/site/assets/scss/_clipboard-js.scss similarity index 96% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_clipboard-js.scss rename to vendor/twbs/bootstrap/site/assets/scss/_clipboard-js.scss index b8c6a9e8f..3fcb9c9c0 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_clipboard-js.scss +++ b/vendor/twbs/bootstrap/site/assets/scss/_clipboard-js.scss @@ -29,7 +29,8 @@ border: 1px solid; @include border-radius(); - &:hover { + &:hover, + &:focus { color: $white; background-color: $primary; } diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_colors.scss b/vendor/twbs/bootstrap/site/assets/scss/_colors.scss similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_colors.scss rename to vendor/twbs/bootstrap/site/assets/scss/_colors.scss diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_component-examples.scss b/vendor/twbs/bootstrap/site/assets/scss/_component-examples.scss similarity index 98% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_component-examples.scss rename to vendor/twbs/bootstrap/site/assets/scss/_component-examples.scss index a29671897..89c52208f 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_component-examples.scss +++ b/vendor/twbs/bootstrap/site/assets/scss/_component-examples.scss @@ -333,10 +333,6 @@ } } -.bd-example-forms-input-group-workaround .fix-rounded-right { - @include border-right-radius(.2rem !important); -} - // // Code snippets // diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_content.scss b/vendor/twbs/bootstrap/site/assets/scss/_content.scss similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_content.scss rename to vendor/twbs/bootstrap/site/assets/scss/_content.scss diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_footer.scss b/vendor/twbs/bootstrap/site/assets/scss/_footer.scss similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_footer.scss rename to vendor/twbs/bootstrap/site/assets/scss/_footer.scss diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_masthead.scss b/vendor/twbs/bootstrap/site/assets/scss/_masthead.scss similarity index 94% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_masthead.scss rename to vendor/twbs/bootstrap/site/assets/scss/_masthead.scss index 62047fbbb..6a13562e3 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_masthead.scss +++ b/vendor/twbs/bootstrap/site/assets/scss/_masthead.scss @@ -44,8 +44,6 @@ } .masthead-followup { - .bd-clipboard { display: none; } - h2 { @include font-size(2.5rem); } @@ -60,10 +58,6 @@ pre code { display: inline-block; white-space: pre; - - &::before { - display: none; - } } } } diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_nav.scss b/vendor/twbs/bootstrap/site/assets/scss/_nav.scss similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_nav.scss rename to vendor/twbs/bootstrap/site/assets/scss/_nav.scss diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_placeholder-img.scss b/vendor/twbs/bootstrap/site/assets/scss/_placeholder-img.scss similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_placeholder-img.scss rename to vendor/twbs/bootstrap/site/assets/scss/_placeholder-img.scss diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_sidebar.scss b/vendor/twbs/bootstrap/site/assets/scss/_sidebar.scss similarity index 70% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_sidebar.scss rename to vendor/twbs/bootstrap/site/assets/scss/_sidebar.scss index 8f6f1284e..7c350f8e3 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_sidebar.scss +++ b/vendor/twbs/bootstrap/site/assets/scss/_sidebar.scss @@ -1,46 +1,3 @@ -// stylelint-disable declaration-no-important - -// -// Right side table of contents -// - -.bd-toc { - @supports (position: sticky) { - position: sticky; - top: 4rem; - height: subtract(100vh, 4rem); - overflow-y: auto; - } - order: 2; - padding-top: 1.5rem; - padding-bottom: 1.5rem; - @include font-size(.875rem); -} - -.section-nav { - padding-left: 0; - border-left: 1px solid #eee; - - ul { - padding-left: 1rem; - } -} - -.toc-entry { - display: block; - - a { - display: block; - padding: .125rem 1.5rem; - color: #77757a; - - &:hover { - color: $blue; - text-decoration: none; - } - } -} - // // Left side navigation // @@ -66,10 +23,10 @@ } .bd-links { + width: 100%; padding-top: 1rem; padding-bottom: 1rem; - margin-right: -15px; - margin-left: -15px; + border-top: 1px solid rgba(0, 0, 0, .05); @include media-breakpoint-up(md) { @supports (position: sticky) { @@ -77,11 +34,6 @@ overflow-y: auto; } } - - // Override collapse behaviors - @include media-breakpoint-up(md) { - display: block !important; - } } .bd-search { @@ -89,7 +41,6 @@ padding: 1rem 15px; margin-right: -15px; margin-left: -15px; - border-bottom: 1px solid rgba(0, 0, 0, .05); .form-control:focus { border-color: $bd-purple-bright; diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_skippy.scss b/vendor/twbs/bootstrap/site/assets/scss/_skippy.scss similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_skippy.scss rename to vendor/twbs/bootstrap/site/assets/scss/_skippy.scss diff --git a/vendor/twbs/bootstrap/site/assets/scss/_syntax.scss b/vendor/twbs/bootstrap/site/assets/scss/_syntax.scss new file mode 100644 index 000000000..8120bbef2 --- /dev/null +++ b/vendor/twbs/bootstrap/site/assets/scss/_syntax.scss @@ -0,0 +1,102 @@ +// stylelint-disable comment-empty-line-before, declaration-block-single-line-max-declarations, selector-class-pattern + +/* Background .chroma { background-color: #f0f0f0; } */ +/* Other .chroma .x { } */ +/* Error .chroma .err { } */ +/* LineTableTD .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } */ +/* LineTable .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; } */ +/* LineHighlight .chroma .hl { display: block; width: 100%; background-color: #ffffcc; } */ +/* LineNumbersTable .chroma .lnt { margin-right: .4em; padding: 0 .4em; } */ +/* LineNumbers .chroma .ln { margin-right: .4em; padding: 0 .4em; } */ + +/* Comment */ .chroma .c { color: #727272; } +/* CommentHashbang */ .chroma .ch { font-style: italic; color: #60a0b0; } +/* CommentMultiline */ .chroma .cm { color: #727272; } +/* CommentPreproc */ .chroma .cp { color: #008085; } +/* CommentPreprocFile */ .chroma .cpf { color: #007020; } +/* CommentSingle */ .chroma .c1 { color: #727272; } +/* CommentSpecial */ .chroma .cs { color: #727272; } +/* Generic .chroma .g { } */ +/* GenericDeleted */ .chroma .gd { background-color: #fcc; border: 1px solid #c00; } +/* GenericEmph */ .chroma .ge { font-style: italic; } +/* GenericError */ .chroma .gr { color: #f00; } +/* GenericHeading */ .chroma .gh { color: #030; } +/* GenericInserted */ .chroma .gi { background-color: #cfc; border: 1px solid #0c0; } +/* GenericOutput */ .chroma .go { color: #aaa; } +/* GenericPrompt */ .chroma .gp { color: #009; } +/* GenericStrong */ .chroma .gs { font-weight: 700; } +/* GenericSubheading */ .chroma .gu { color: #030; } +/* GenericTraceback */ .chroma .gt { color: #9c6; } +/* GenericUnderline */ .chroma .gl { text-decoration: underline; } +/* Keyword */ .chroma .k { color: #069; } +/* KeywordConstant */ .chroma .kc { color: #069; } +/* KeywordDeclaration */ .chroma .kd { color: #069; } +/* KeywordNamespace */ .chroma .kn { color: #069; } +/* KeywordPseudo */ .chroma .kp { color: #069; } +/* KeywordReserved */ .chroma .kr { color: #069; } +/* KeywordType */ .chroma .kt { color: #078; } +/* Literal .chroma .l { } */ +/* LiteralDate .chroma .ld { color: #c24f19 } */ +/* LiteralNumber */ .chroma .m { color: #c24f19; } +/* LiteralNumberBin */ .chroma .mb { color: #40a070; } +/* LiteralNumberFloat */ .chroma .mf { color: #c24f19; } +/* LiteralNumberHex */ .chroma .mh { color: #c24f19; } +/* LiteralNumberInteger */ .chroma .mi { color: #c24f19; } +/* LiteralNumberIntegerLong */ .chroma .il { color: #c24f19; } +/* LiteralNumberOct */ .chroma .mo { color: #c24f19; } +/* LiteralString */ .chroma .s { color: #d73038; } +/* LiteralStringAffix */ .chroma .sa { color: #4070a0; } +/* LiteralStringBacktick */ .chroma .sb { color: #c30; } +/* LiteralStringChar */ .chroma .sc { color: #c30; } +/* LiteralStringDelimiter */ .chroma .dl { color: #4070a0; } +/* LiteralStringDoc */ .chroma .sd { font-style: italic; color: #c30; } +/* LiteralStringDouble */ .chroma .s2 { color: #c30; } +/* LiteralStringEscape */ .chroma .se { color: #c30; } +/* LiteralStringHeredoc */ .chroma .sh { color: #c30; } +/* LiteralStringInterpol */ .chroma .si { color: #a00; } +/* LiteralStringOther */ .chroma .sx { color: #c30; } +/* LiteralStringRegex */ .chroma .sr { color: #337e7e; } +/* LiteralStringSingle */ .chroma .s1 { color: #c30; } +/* LiteralStringSymbol */ .chroma .ss { color: #fc3; } +/* Name .chroma .n { } */ +/* NameAttribute */ .chroma .na { color: #006ee0; } +/* NameBuiltin */ .chroma .nb { color: #366; } +/* NameBuiltinPseudo .chroma .bp { } */ +/* NameClass */ .chroma .nc { color: #168174; } +/* NameConstant */ .chroma .no { color: #360; } +/* NameDecorator */ .chroma .nd { color: #6b62de; } +/* NameEntity */ .chroma .ni { color: #727272; } +/* NameException */ .chroma .ne { color: #c00; } +/* NameFunction */ .chroma .nf { color: #b715f4; } +/* NameFunctionMagic .chroma .fm { } */ +/* NameLabel */ .chroma .nl { color: #6b62de; } +/* NameNamespace */ .chroma .nn { color: #007ca5; } +/* NameOther .chroma .nx { } */ +/* NameProperty .chroma .py { } */ +/* NameTag */ .chroma .nt { color: #2f6f9f; } +/* NameVariable */ .chroma .nv { color: #033; } +/* NameVariableClass .chroma .vc { } */ +/* NameVariableGlobal .chroma .vg { } */ +/* NameVariableInstance .chroma .vi { } */ +/* NameVariableMagic .chroma .vm { } */ +/* Operator */ .chroma .o { color: #555; } +/* OperatorWord */ .chroma .ow { color: #000; } +/* Punctuation .chroma .p { } */ +/* TextWhitespace */ .chroma .w { color: #bbb; } + +.chroma { + .language-bash, + .language-sh { + &::before { + color: #009; + content: "$ "; + user-select: none; + } + } + + .language-powershell::before { + color: #009; + content: "PM> "; + user-select: none; + } +} diff --git a/vendor/twbs/bootstrap/site/assets/scss/_toc.scss b/vendor/twbs/bootstrap/site/assets/scss/_toc.scss new file mode 100644 index 000000000..23d843a9b --- /dev/null +++ b/vendor/twbs/bootstrap/site/assets/scss/_toc.scss @@ -0,0 +1,54 @@ +// stylelint-disable selector-max-combinators, selector-max-type, selector-max-compound-selectors + +// +// Right side table of contents +// + +.bd-toc { + @supports (position: sticky) { + position: sticky; + top: 4rem; + height: subtract(100vh, 4rem); + overflow-y: auto; + } + order: 2; + padding-top: 1.5rem; + padding-bottom: 1.5rem; + @include font-size(.875rem); + + nav { + padding-left: 0; + border-left: 1px solid #eee; + + ul { + padding-left: 0; + + ul { + padding-left: 1rem; + } + } + + a code { + font: inherit; + } + + li { + display: block; + + ul li ul { + padding-left: 1rem; + } + + a { + display: block; + padding: .125rem 1.5rem; + color: #77757a; + + &:hover { + color: $blue; + text-decoration: none; + } + } + } + } +} diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_variables.scss b/vendor/twbs/bootstrap/site/assets/scss/_variables.scss similarity index 100% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/_variables.scss rename to vendor/twbs/bootstrap/site/assets/scss/_variables.scss diff --git a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/docs.scss b/vendor/twbs/bootstrap/site/assets/scss/docs.scss similarity index 86% rename from vendor/twbs/bootstrap/site/docs/4.5/assets/scss/docs.scss rename to vendor/twbs/bootstrap/site/assets/scss/docs.scss index 8dd3f5b56..1dc3016e0 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/assets/scss/docs.scss +++ b/vendor/twbs/bootstrap/site/assets/scss/docs.scss @@ -1,7 +1,7 @@ /*! * Bootstrap Docs (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors - * Copyright 2011-2020 Twitter, Inc. + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. * Licensed under the Creative Commons Attribution 3.0 Unported License. * For details, see https://creativecommons.org/licenses/by/3.0/. */ @@ -24,9 +24,9 @@ // Happy Bootstrapping! // Load Bootstrap variables and mixins -@import "../../../../../scss/functions"; -@import "../../../../../scss/variables"; -@import "../../../../../scss/mixins"; +@import "../../../scss/functions"; +@import "../../../scss/variables"; +@import "../../../scss/mixins"; // Load docs components @import "variables"; @@ -36,6 +36,7 @@ @import "content"; @import "skippy"; @import "sidebar"; +@import "toc"; @import "footer"; @import "component-examples"; @import "buttons"; diff --git a/vendor/twbs/bootstrap/site/content/docs/4.6/_index.html b/vendor/twbs/bootstrap/site/content/docs/4.6/_index.html new file mode 100644 index 000000000..b9b9f7cb3 --- /dev/null +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/_index.html @@ -0,0 +1,5 @@ +--- +layout: redirect +sitemap_exclude: true +redirect: "/docs/4.6/getting-started/introduction/" +--- diff --git a/vendor/twbs/bootstrap/site/docs/4.5/about/brand.md b/vendor/twbs/bootstrap/site/content/docs/4.6/about/brand.md similarity index 73% rename from vendor/twbs/bootstrap/site/docs/4.5/about/brand.md rename to vendor/twbs/bootstrap/site/content/docs/4.6/about/brand.md index 5e670091b..a640c180a 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/about/brand.md +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/about/brand.md @@ -14,10 +14,10 @@ Use either the Bootstrap mark (a capital **B**) or the standard logo (just **Boo
        - Bootstrap + Bootstrap
        - Bootstrap + Bootstrap
        @@ -35,13 +35,13 @@ Download the Bootstrap mark in one of three styles, each available as an SVG fil
        - Bootstrap + Bootstrap
        - Bootstrap + Bootstrap
        - Bootstrap + Bootstrap
        diff --git a/vendor/twbs/bootstrap/site/docs/4.5/about/license.md b/vendor/twbs/bootstrap/site/content/docs/4.6/about/license.md similarity index 84% rename from vendor/twbs/bootstrap/site/docs/4.5/about/license.md rename to vendor/twbs/bootstrap/site/content/docs/4.6/about/license.md index 39720029d..c7f130203 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/about/license.md +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/about/license.md @@ -5,7 +5,7 @@ description: Commonly asked questions about Bootstrap's open source license. group: about --- -Bootstrap is released under the MIT license and is copyright {{ site.time | date: "%Y" }} Twitter. Boiled down to smaller chunks, it can be described with the following conditions. +Bootstrap is released under the MIT license and is copyright {{< year >}} Twitter. Boiled down to smaller chunks, it can be described with the following conditions. #### It requires you to: @@ -31,4 +31,4 @@ Bootstrap is released under the MIT license and is copyright {{ site.time | date - Include the source of Bootstrap itself, or of any modifications you may have made to it, in any redistribution you may assemble that includes it - Submit changes that you make to Bootstrap back to the Bootstrap project (though such feedback is encouraged) -The full Bootstrap license is located [in the project repository]({{ site.repo }}/blob/v{{ site.current_version }}/LICENSE) for more information. +The full Bootstrap license is located [in the project repository]({{< param repo >}}/blob/v{{< param current_version >}}/LICENSE) for more information. diff --git a/vendor/twbs/bootstrap/site/docs/4.5/about/overview.md b/vendor/twbs/bootstrap/site/content/docs/4.6/about/overview.md similarity index 77% rename from vendor/twbs/bootstrap/site/docs/4.5/about/overview.md rename to vendor/twbs/bootstrap/site/content/docs/4.6/about/overview.md index 71572a47e..5fcea6a8b 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/about/overview.md +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/about/overview.md @@ -3,9 +3,9 @@ layout: docs title: About description: Learn more about the team maintaining Bootstrap, how and why the project started, and how to get involved. group: about -redirect_from: +aliases: - "/about/" - - "/docs/4.5/about/" + - "/docs/4.6/about/" --- ## Team @@ -18,10 +18,10 @@ Originally created by a designer and a developer at Twitter, Bootstrap has becom Bootstrap was created at Twitter in mid-2010 by [@mdo](https://twitter.com/mdo) and [@fat](https://twitter.com/fat). Prior to being an open-sourced framework, Bootstrap was known as _Twitter Blueprint_. A few months into development, Twitter held its [first Hack Week](https://blog.twitter.com/engineering/en_us/a/2010/hack-week.html) and the project exploded as developers of all skill levels jumped in without any external guidance. It served as the style guide for internal tools development at the company for over a year before its public release, and continues to do so today. -Originally [released](https://blog.twitter.com/developer/en_us/a/2011/bootstrap-twitter.html) on , we've since had over [twenty releases]({{ site.repo }}/releases), including two major rewrites with v2 and v3. With Bootstrap 2, we added responsive functionality to the entire framework as an optional stylesheet. Building on that with Bootstrap 3, we rewrote the library once more to make it responsive by default with a mobile first approach. +Originally [released](https://blog.twitter.com/developer/en_us/a/2011/bootstrap-twitter.html) on , we've since had over [twenty releases]({{< param repo >}}/releases), including two major rewrites with v2 and v3. With Bootstrap 2, we added responsive functionality to the entire framework as an optional stylesheet. Building on that with Bootstrap 3, we rewrote the library once more to make it responsive by default with a mobile first approach. With Bootstrap 4, we once again rewrote the project to account for two key architectural changes: a migration to Sass and the move to CSS's flexbox. Our intention is to help in a small way to move the web development community forward by pushing for newer CSS properties, fewer dependencies, and new technologies across more modern browsers. ## Get involved -Get involved with Bootstrap development by [opening an issue]({{ site.repo }}/issues/new) or submitting a pull request. Read our [contributing guidelines]({{ site.repo }}/blob/v{{ site.current_version }}/.github/CONTRIBUTING.md) for information on how we develop. +Get involved with Bootstrap development by [opening an issue]({{< param repo >}}/issues/new) or submitting a pull request. Read our [contributing guidelines]({{< param repo >}}/blob/v{{< param current_version >}}/.github/CONTRIBUTING.md) for information on how we develop. diff --git a/vendor/twbs/bootstrap/site/content/docs/4.6/about/team.md b/vendor/twbs/bootstrap/site/content/docs/4.6/about/team.md new file mode 100644 index 000000000..fd1d6bfa6 --- /dev/null +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/about/team.md @@ -0,0 +1,23 @@ +--- +layout: docs +title: Team +description: An overview of the founding team and core contributors to Bootstrap. +group: about +--- + +Bootstrap is maintained by the founding team and a small group of invaluable core contributors, with the massive support and involvement of our community. + +{{< team.inline >}} +
        + {{- range (index $.Site.Data "core-team") }} + + @{{ .user }} + + {{ .name }} @{{ .user }} + + + {{ end -}} +
        +{{< /team.inline >}} + +Get involved with Bootstrap development by [opening an issue]({{< param repo >}}/issues/new) or submitting a pull request. Read our [contributing guidelines]({{< param repo >}}/blob/v{{< param current_version >}}/.github/CONTRIBUTING.md) for information on how we develop. diff --git a/vendor/twbs/bootstrap/site/docs/4.5/about/translations.md b/vendor/twbs/bootstrap/site/content/docs/4.6/about/translations.md similarity index 69% rename from vendor/twbs/bootstrap/site/docs/4.5/about/translations.md rename to vendor/twbs/bootstrap/site/content/docs/4.6/about/translations.md index 576259d35..e719e3a84 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/about/translations.md +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/about/translations.md @@ -7,11 +7,13 @@ group: about Community members have translated Bootstrap's documentation into various languages. None are officially supported and they may not always be up to date. +{{< translations.inline >}} +{{< /translations.inline >}} **We don't help organize or host translations, we just link to them.** diff --git a/vendor/twbs/bootstrap/site/docs/4.5/browser-bugs.md b/vendor/twbs/bootstrap/site/content/docs/4.6/browser-bugs.md similarity index 61% rename from vendor/twbs/bootstrap/site/docs/4.5/browser-bugs.md rename to vendor/twbs/bootstrap/site/content/docs/4.6/browser-bugs.md index 15c99a67d..1180fb5e2 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/browser-bugs.md +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/browser-bugs.md @@ -2,19 +2,18 @@ layout: docs title: Wall of browser bugs group: browser-bugs -redirect_from: "/browser-bugs/" +aliases: "/browser-bugs/" --- -{% capture callout %} +{{< callout danger >}} ##### Outdated content This page is outdated and is no longer applicable to the latest versions of Bootstrap. It's here purely for historical purposes now and will be removed in our next major release. -{% endcapture %} -{% include callout.html content=callout type="danger" %} +{{< /callout >}} Bootstrap currently works around several outstanding browser bugs in major browsers to deliver the best cross-browser experience possible. Some bugs, like those listed below, cannot be solved by us. -We publicly list browser bugs that are impacting us here, in the hopes of expediting the process of fixing them. For information on Bootstrap's browser compatibility, [see our browser compatibility docs]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/browsers-devices/#supported-browsers). +We publicly list browser bugs that are impacting us here, in the hopes of expediting the process of fixing them. For information on Bootstrap's browser compatibility, [see our browser compatibility docs]({{< docsref "/getting-started/browsers-devices#supported-browsers" >}}). See also: @@ -23,26 +22,31 @@ See also: * [WebKit bug 159753: [meta] Issues affecting Bootstrap](https://bugs.webkit.org/show_bug.cgi?id=159753) * [jQuery's browser bug workarounds](https://docs.google.com/document/d/1LPaPA30bLUB_publLIMF0RlhdnPx_ePXm7oW02iiT6o) + +{{< bug.inline >}} +{{- $type := .Get "type" | default "bug" -}} +{{- $data := .Get "data" | default "browser-bugs" -}} - - + + - {% for bug in site.data.browser-bugs %} + {{- range (index $.Site.Data $data) }} - - - - + + + + - {% endfor %} + {{- end }}
        Browser(s)Summary of bugUpstream bug(s)Summary of {{ $type }}Upstream issue(s) Bootstrap issue(s)
        {{ bug.browser }}{{ bug.summary | markdownify }}{% include bugify.html content=bug.upstream_bug %}{% include bugify.html content=bug.origin %}{{ .browser | chomp }}{{ .summary | markdownify }}{{ partial "bugify" .upstream_bug }}{{ partial "bugify" .origin }}
        + {{< /bug.inline >}} # Most wanted features @@ -50,23 +54,4 @@ There are several features specified in Web standards which would allow us to ma We publicly list these "most wanted" feature requests here, in the hopes of expediting the process of getting them implemented. - - - - - - - - - - - {% for feat in site.data.browser-features %} - - - - - - - {% endfor %} - -
        Browser(s)Summary of featureUpstream issue(s)Bootstrap issue(s)
        {{ feat.browser }}{{ feat.summary | markdownify }}{% include bugify.html content=feat.upstream_bug %}{% include bugify.html content=feat.origin %}
        +{{< bug.inline data="browser-features" type="feature" />}} diff --git a/vendor/twbs/bootstrap/site/docs/4.5/components/alerts.md b/vendor/twbs/bootstrap/site/content/docs/4.6/components/alerts.md similarity index 72% rename from vendor/twbs/bootstrap/site/docs/4.5/components/alerts.md rename to vendor/twbs/bootstrap/site/content/docs/4.6/components/alerts.md index 5df7faa29..8d6cb3983 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/components/alerts.md +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/components/alerts.md @@ -3,9 +3,9 @@ layout: docs title: Alerts description: Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages. group: components -redirect_from: +aliases: - "/components/" - - "/docs/4.5/components/" + - "/docs/4.6/components/" toc: true --- @@ -13,41 +13,44 @@ toc: true Alerts are available for any length of text, as well as an optional dismiss button. For proper styling, use one of the eight **required** contextual classes (e.g., `.alert-success`). For inline dismissal, use the [alerts jQuery plugin](#dismissing). -{% capture example %} -{% for color in site.data.theme-colors %} -{% endfor %} -{% endcapture %} -{% include example.html content=example %} +{{< example >}} +{{< alerts.inline >}} +{{- range (index $.Site.Data "theme-colors") }} +{{- end -}} +{{< /alerts.inline >}} +{{< /example >}} -{% include callout-warning-color-assistive-technologies.md %} +{{< callout warning >}} +{{< partial "callout-warning-color-assistive-technologies.md" >}} +{{< /callout >}} ### Link color Use the `.alert-link` utility class to quickly provide matching colored links within any alert. -{% capture example %} -{% for color in site.data.theme-colors %} -{% endfor %} -{% endcapture %} -{% include example.html content=example %} +{{< example >}} +{{< alerts.inline >}} +{{- range (index $.Site.Data "theme-colors") }} +{{ end -}} +{{< /alerts.inline >}} +{{< /example >}} ### Additional content Alerts can also contain additional HTML elements like headings, paragraphs and dividers. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Dismissing @@ -55,22 +58,21 @@ Alerts can also contain additional HTML elements like headings, paragraphs and d Using the alert JavaScript plugin, it's possible to dismiss any alert inline. Here's how: - Be sure you've loaded the alert plugin, or the compiled Bootstrap JavaScript. -- If you're building our JavaScript from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util). The compiled version includes this. +- If you're building our JavaScript from source, it [requires `util.js`]({{< docsref "/getting-started/javascript#util" >}}). The compiled version includes this. - Add a dismiss button and the `.alert-dismissible` class, which adds extra padding to the right of the alert and positions the `.close` button. - On the dismiss button, add the `data-dismiss="alert"` attribute, which triggers the JavaScript functionality. Be sure to use the `
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## JavaScript behavior @@ -78,17 +80,17 @@ You can see this in action with a live demo: Enable dismissal of an alert via JavaScript: -{% highlight js %} +```js $('.alert').alert() -{% endhighlight %} +``` Or with `data` attributes on a button **within the alert**, as demonstrated above: -{% highlight html %} +```html -{% endhighlight %} +``` Note that closing an alert will remove it from the DOM. @@ -100,7 +102,9 @@ Note that closing an alert will remove it from the DOM. | `$().alert('close')` | Closes an alert by removing it from the DOM. If the `.fade` and `.show` classes are present on the element, the alert will fade out before it is removed. | | `$().alert('dispose')` | Destroys an element's alert. | -{% highlight js %}$('.alert').alert('close'){% endhighlight %} +```js +$('.alert').alert('close') +``` ### Events @@ -108,11 +112,11 @@ Bootstrap's alert plugin exposes a few events for hooking into alert functionali | Event | Description | | --- | --- | -| `close.bs.alert` | This event fires immediately when the close instance method is called. | +| `close.bs.alert` | This event fires immediately when the `close` instance method is called. | | `closed.bs.alert` | This event is fired when the alert has been closed (will wait for CSS transitions to complete). | -{% highlight js %} +```js $('#myAlert').on('closed.bs.alert', function () { // do something... }) -{% endhighlight %} +``` diff --git a/vendor/twbs/bootstrap/site/docs/4.5/components/badge.md b/vendor/twbs/bootstrap/site/content/docs/4.6/components/badge.md similarity index 68% rename from vendor/twbs/bootstrap/site/docs/4.5/components/badge.md rename to vendor/twbs/bootstrap/site/content/docs/4.6/components/badge.md index 8c1760045..7d55cabcf 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/components/badge.md +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/components/badge.md @@ -10,65 +10,67 @@ toc: true Badges scale to match the size of the immediate parent element by using relative font sizing and `em` units. -{% capture example %} +{{< example >}}

        Example heading New

        Example heading New

        Example heading New

        Example heading New

        Example heading New
        Example heading New
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Badges can be used as part of links or buttons to provide a counter. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Note that depending on how they are used, badges may be confusing for users of screen readers and similar assistive technologies. While the styling of badges provides a visual cue as to their purpose, these users will simply be presented with the content of the badge. Depending on the specific situation, these badges may seem like random additional words or numbers at the end of a sentence, link, or button. Unless the context is clear (as with the "Notifications" example, where it is understood that the "4" is the number of notifications), consider including additional context with a visually hidden piece of additional text. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Contextual variations Add any of the below mentioned modifier classes to change the appearance of a badge. -{% capture example %} -{% for color in site.data.theme-colors %} -{{ color.name | capitalize }}{% endfor %} -{% endcapture %} -{% include example.html content=example %} +{{< example >}} +{{< badge.inline >}} +{{- range (index $.Site.Data "theme-colors") }} +{{ .name | title }}{{- end -}} +{{< /badge.inline >}} +{{< /example >}} -{% include callout-warning-color-assistive-technologies.md %} +{{< callout warning >}} +{{< partial "callout-warning-color-assistive-technologies.md" >}} +{{< /callout >}} ## Pill badges Use the `.badge-pill` modifier class to make badges more rounded (with a larger `border-radius` and additional horizontal `padding`). Useful if you miss the badges from v3. -{% capture example %} -{% for color in site.data.theme-colors %} -{{ color.name | capitalize }}{% endfor %} -{% endcapture %} -{% include example.html content=example %} +{{< example >}} +{{< badge.inline >}} +{{- range (index $.Site.Data "theme-colors") }} +{{ .name | title }}{{- end -}} +{{< /badge.inline >}} +{{< /example >}} ## Links Using the contextual `.badge-*` classes on an `` element quickly provide _actionable_ badges with hover and focus states. -{% capture example %} -{% for color in site.data.theme-colors %} -{{ color.name | capitalize }}{% endfor %} -{% endcapture %} -{% include example.html content=example %} +{{< example >}} +{{< badge.inline >}} +{{- range (index $.Site.Data "theme-colors") }} +{{ .name | title }}{{- end -}} +{{< /badge.inline >}} +{{< /example >}} diff --git a/vendor/twbs/bootstrap/site/docs/4.5/components/breadcrumb.md b/vendor/twbs/bootstrap/site/content/docs/4.6/components/breadcrumb.md similarity index 96% rename from vendor/twbs/bootstrap/site/docs/4.5/components/breadcrumb.md rename to vendor/twbs/bootstrap/site/content/docs/4.6/components/breadcrumb.md index f6ce8f1be..9ed198fcd 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/components/breadcrumb.md +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/components/breadcrumb.md @@ -7,7 +7,7 @@ group: components ## Example -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Changing the separator diff --git a/vendor/twbs/bootstrap/site/docs/4.5/components/button-group.md b/vendor/twbs/bootstrap/site/content/docs/4.6/components/button-group.md similarity index 93% rename from vendor/twbs/bootstrap/site/docs/4.5/components/button-group.md rename to vendor/twbs/bootstrap/site/content/docs/4.6/components/button-group.md index 2261a5e72..07f60a9bb 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/components/button-group.md +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/components/button-group.md @@ -8,31 +8,29 @@ toc: true ## Basic example -Wrap a series of buttons with `.btn` in `.btn-group`. Add on optional JavaScript radio and checkbox style behavior with [our buttons plugin]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/buttons/#button-plugin). +Wrap a series of buttons with `.btn` in `.btn-group`. Add on optional JavaScript radio and checkbox style behavior with [our buttons plugin]({{< docsref "/components/buttons#button-plugin" >}}). -{% capture example %} +{{< example >}}
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture callout %} +{{< callout warning >}} ##### Ensure correct `role` and provide a label In order for assistive technologies (such as screen readers) to convey that a series of buttons is grouped, an appropriate `role` attribute needs to be provided. For button groups, this would be `role="group"`, while toolbars should have a `role="toolbar"`. In addition, groups and toolbars should be given an explicit label, as most assistive technologies will otherwise not announce them, despite the presence of the correct role attribute. In the examples provided here, we use `aria-label`, but alternatives such as `aria-labelledby` can also be used. -{% endcapture %} -{% include callout.html content=callout type="warning" %} +{{< /callout >}} ## Button toolbar Combine sets of button groups into button toolbars for more complex components. Use utility classes as needed to space out groups, buttons, and more. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Feel free to mix input groups with button groups in your toolbars. Similar to the example above, you'll likely need some utilities though to space things properly. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Sizing @@ -111,17 +107,17 @@ Instead of applying button sizing classes to every button in a group, just add ` -{% highlight html %} +```html
        ...
        ...
        ...
        -{% endhighlight %} +``` ## Nesting Place a `.btn-group` within another `.btn-group` when you want dropdown menus mixed with a series of buttons. -{% capture example %} +{{< example >}}
        @@ -136,8 +132,7 @@ Place a `.btn-group` within another `.btn-group` when you want dropdown menus mi
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Vertical variation @@ -200,8 +195,8 @@ Make a set of buttons appear vertically stacked rather than horizontally. **Spli -{% highlight html %} +```html
        ...
        -{% endhighlight %} +``` diff --git a/vendor/twbs/bootstrap/site/docs/4.5/components/buttons.md b/vendor/twbs/bootstrap/site/content/docs/4.6/components/buttons.md similarity index 82% rename from vendor/twbs/bootstrap/site/docs/4.5/components/buttons.md rename to vendor/twbs/bootstrap/site/content/docs/4.6/components/buttons.md index b0856f5fc..a54482319 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/components/buttons.md +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/components/buttons.md @@ -10,15 +10,19 @@ toc: true Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control. -{% capture example %} -{% for color in site.data.theme-colors %} -{% endfor %} +{{< example >}} +{{< buttons.inline >}} +{{- range (index $.Site.Data "theme-colors") }} + +{{- end -}} +{{< /buttons.inline >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% include callout-warning-color-assistive-technologies.md %} +{{< callout warning >}} +{{< partial "callout-warning-color-assistive-technologies.md" >}} +{{< /callout >}} ## Disable text wrapping @@ -30,68 +34,68 @@ The `.btn` classes are designed to be used with the ` -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Outline buttons In need of a button, but not the hefty background colors they bring? Replace the default modifier classes with the `.btn-outline-*` ones to remove all background images and colors on any button. -{% capture example %} -{% for color in site.data.theme-colors %} -{% endfor %} -{% endcapture %} -{% include example.html content=example %} +{{< example >}} +{{< buttons.inline >}} +{{- range (index $.Site.Data "theme-colors") }} + +{{- end -}} +{{< /buttons.inline >}} +{{< /example >}} + +{{< callout info >}} +Some of the button styles use a relatively light foreground color, and should only be used on a dark background in order to have sufficient contrast. +{{< /callout >}} ## Sizes Fancy larger or smaller buttons? Add `.btn-lg` or `.btn-sm` for additional sizes. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Create block level buttons—those that span the full width of a parent—by adding `.btn-block`. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Active state Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active. **There's no need to add a class to ` -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Disabled buttons using the `` element behave a bit different: @@ -99,18 +103,16 @@ Disabled buttons using the `` element behave a bit different: - Some future-friendly styles are included to disable all `pointer-events` on anchor buttons. In browsers which support that property, you won't see the disabled cursor at all. - Disabled buttons should include the `aria-disabled="true"` attribute to indicate the state of the element to assistive technologies. -{% capture example %} +{{< example >}} Primary link Link -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture callout %} +{{< callout warning >}} ##### Link functionality caveat The `.disabled` class uses `pointer-events: none` to try to disable the link functionality of ``s, but that CSS property is not yet standardized. In addition, even in browsers that do support `pointer-events: none`, keyboard navigation remains unaffected, meaning that sighted keyboard users and users of assistive technologies will still be able to activate these links. So to be safe, add a `tabindex="-1"` attribute on these links (to prevent them from receiving keyboard focus) and use custom JavaScript to disable their functionality. -{% endcapture %} -{% include callout.html content=callout type="warning" %} +{{< /callout >}} ## Button plugin @@ -120,12 +122,11 @@ Do more with buttons. Control button states or create groups of buttons for more Add `data-toggle="button"` to toggle a button's `active` state. If you're pre-toggling a button, you must manually add the `.active` class **and** `aria-pressed="true"` to the ` -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Checkbox and radio buttons @@ -135,16 +136,15 @@ The checked state for these buttons is **only updated via `click` event** on the Note that pre-checked buttons require you to manually add the `.active` class to the input's ` -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Content types @@ -36,14 +35,13 @@ Cards support a wide variety of content, including images, text, list groups, li The building block of a card is the `.card-body`. Use it whenever you need a padded section within a card. -{% capture example %} +{{< example >}}
        This is some text within a card body.
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Titles, text, and links @@ -51,7 +49,7 @@ Card titles are used by adding `.card-title` to a `` tag. In the same way, l Subtitles are used by adding a `.card-subtitle` to a `` tag. If the `.card-title` and the `.card-subtitle` items are placed in a `.card-body` item, the card title and subtitle are aligned nicely. -{% capture example %} +{{< example >}}
        Card title
        @@ -61,95 +59,89 @@ Subtitles are used by adding a `.card-subtitle` to a `` tag. If the `.card-t Another link
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Images `.card-img-top` places an image to the top of the card. With `.card-text`, text can be added to the card. Text within `.card-text` can also be styled with the standard HTML tags. -{% capture example %} +{{< example >}}
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}

        Some quick example text to build on the card title and make up the bulk of the card's content.

        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### List groups Create lists of content in a card with a flush list group. -{% capture example %} +{{< example >}}
          -
        • Cras justo odio
        • -
        • Dapibus ac facilisis in
        • -
        • Vestibulum at eros
        • +
        • An item
        • +
        • A second item
        • +
        • A third item
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
        Featured
          -
        • Cras justo odio
        • -
        • Dapibus ac facilisis in
        • -
        • Vestibulum at eros
        • +
        • An item
        • +
        • A second item
        • +
        • A third item
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
          -
        • Cras justo odio
        • -
        • Dapibus ac facilisis in
        • -
        • Vestibulum at eros
        • +
        • An item
        • +
        • A second item
        • +
        • A third item
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Kitchen sink Mix and match multiple content types to create the card you need, or throw everything in there. Shown below are image styles, blocks, text styles, and a list group—all wrapped in a fixed-width card. -{% capture example %} +{{< example >}}
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        Some quick example text to build on the card title and make up the bulk of the card's content.

          -
        • Cras justo odio
        • -
        • Dapibus ac facilisis in
        • -
        • Vestibulum at eros
        • +
        • An item
        • +
        • A second item
        • +
        • A third item
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Header and footer Add an optional header and/or footer within a card. -{% capture example %} +{{< example >}}
        Featured @@ -160,12 +152,11 @@ Add an optional header and/or footer within a card. Go somewhere
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Card headers can be styled by adding `.card-header` to `` elements. -{% capture example %} +{{< example >}}
        Featured
        @@ -174,25 +165,23 @@ Card headers can be styled by adding `.card-header` to `` elements. Go somewhere
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
        Quote
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

        +

        A well-known quote, contained in a blockquote element.

        Someone famous in Source Title
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
        Featured @@ -206,8 +195,7 @@ Card headers can be styled by adding `.card-header` to `` elements. 2 days ago
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Sizing @@ -217,7 +205,7 @@ Cards assume no specific `width` to start, so they'll be 100% wide unless otherw Using the grid, wrap cards in columns and rows as needed. -{% capture example %} +{{< example >}}
        @@ -238,14 +226,13 @@ Using the grid, wrap cards in columns and rows as needed.
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Using utilities -Use our handful of [available sizing utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/sizing/) to quickly set a card's width. +Use our handful of [available sizing utilities]({{< docsref "/utilities/sizing" >}}) to quickly set a card's width. -{% capture example %} +{{< example >}}
        Card title
        @@ -261,14 +248,13 @@ Use our handful of [available sizing utilities]({{ site.baseurl }}/docs/{{ site. Button
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Using custom CSS Use custom CSS in your stylesheets or as inline styles to set a width. -{% capture example %} +{{< example >}}
        Special title treatment
        @@ -276,14 +262,13 @@ Use custom CSS in your stylesheets or as inline styles to set a width. Go somewhere
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Text alignment -You can quickly change the text alignment of any card—in its entirety or specific parts—with our [text align classes]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/text/#text-alignment). +You can quickly change the text alignment of any card—in its entirety or specific parts—with our [text align classes]({{< docsref "/utilities/text#text-alignment" >}}). -{% capture example %} +{{< example >}}
        Special title treatment
        @@ -307,14 +292,13 @@ You can quickly change the text alignment of any card—in its entirety or speci Go somewhere
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Navigation -Add some navigation to a card's header (or block) with Bootstrap's [nav components]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/navs/). +Add some navigation to a card's header (or block) with Bootstrap's [nav components]({{< docsref "/components/navs" >}}). -{% capture example %} +{{< example >}}
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Images @@ -370,28 +352,9 @@ Cards include a few options for working with images. Choose from appending "imag Similar to headers and footers, cards can include top and bottom "image caps"—images at the top or bottom of a card. -
        -
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} -
        -
        Card title
        -

        This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        -

        Last updated 3 mins ago

        -
        -
        -
        -
        -
        Card title
        -

        This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        -

        Last updated 3 mins ago

        -
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-bottom" text="Image cap" %} -
        -
        - -{% highlight html %} +{{< example >}}
        - ... + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        @@ -404,40 +367,38 @@ Similar to headers and footers, cards can include top and bottom "image caps"—

        This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        Last updated 3 mins ago

        - ... + {{< placeholder width="100%" height="180" class="card-img-bottom" text="Image cap" >}}
        -{% endhighlight %} +{{< /example >}} ### Image overlays Turn an image into a card background and overlay your card's text. Depending on the image, you may or may not need additional styles or utilities. -{% capture example %} +{{< example >}}
        - {% include icons/placeholder.svg width="100%" height="270" class="bd-placeholder-img-lg card-img" text="Card image" %} + {{< placeholder width="100%" height="270" class="bd-placeholder-img-lg card-img" text="Card image" >}}
        Card title

        This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        Last updated 3 mins ago

        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture callout %} +{{< callout info >}} Note that content should not be larger than the height of the image. If content is larger than the image the content will be displayed outside the image. -{% endcapture %} -{% include callout.html content=callout type="info" %} +{{< /callout >}} ## Horizontal Using a combination of grid and utility classes, cards can be made horizontal in a mobile-friendly and responsive way. In the example below, we remove the grid gutters with `.no-gutters` and use `.col-md-*` classes to make the card horizontal at the `md` breakpoint. Further adjustments may be needed depending on your card content. -{% capture example %} +{{< example >}}
        - {% include icons/placeholder.svg width="100%" height="250" class="" text="Image" %} + {{< placeholder width="100%" height="250" class="" text="Image" >}}
        @@ -448,8 +409,7 @@ Using a combination of grid and utility classes, cards can be made horizontal in
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Card styles @@ -457,43 +417,49 @@ Cards include various options for customizing their backgrounds, borders, and co ### Background and color -Use [text and background utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/colors/) to change the appearance of a card. +Use [text and background utilities]({{< docsref "/utilities/colors" >}}) to change the appearance of a card. -{% capture example %} -{% for color in site.data.theme-colors %} -
        +{{< example >}} +{{< card.inline >}} +{{- range (index $.Site.Data "theme-colors") }} +
        Header
        -
        {{ color.name | capitalize }} card title
        +
        {{ .name | title }} card title

        Some quick example text to build on the card title and make up the bulk of the card's content.

        -
        {% endfor %} -{% endcapture %} -{% include example.html content=example %} +
        +{{- end -}} +{{< /card.inline >}} +{{< /example >}} -{% include callout-warning-color-assistive-technologies.md %} +{{< callout warning >}} +{{< partial "callout-warning-color-assistive-technologies.md" >}} +{{< /callout >}} ### Border -Use [border utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/borders/) to change just the `border-color` of a card. Note that you can put `.text-{color}` classes on the parent `.card` or a subset of the card's contents as shown below. +Use [border utilities]({{< docsref "/utilities/borders" >}}) to change just the `border-color` of a card. Note that you can put `.text-{color}` classes on the parent `.card` or a subset of the card's contents as shown below. -{% capture example %} -{% for color in site.data.theme-colors %} -
        +{{< example >}} +{{< card.inline >}} +{{- range (index $.Site.Data "theme-colors") }} +
        Header
        -
        -
        {{ color.name | capitalize }} card title
        +
        +
        {{ .name | title }} card title

        Some quick example text to build on the card title and make up the bulk of the card's content.

        -
        {% endfor %} -{% endcapture %} -{% include example.html content=example %} +
        +{{- end -}} +{{< /card.inline >}} +{{< /example >}} ### Mixins utilities You can also change the borders on the card header and footer as needed, and even remove their `background-color` with `.bg-transparent`. -{% capture example %} +{{< example >}}
        Header
        @@ -502,8 +468,7 @@ You can also change the borders on the card header and footer as needed, and eve
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Card layout @@ -513,10 +478,10 @@ In addition to styling the content within cards, Bootstrap includes a few option Use card groups to render cards as a single, attached element with equal width and height columns. Card groups start off stacked and use `display: flex;` to become attached with uniform dimensions starting at the `sm` breakpoint. -{% capture example %} +{{< example >}}
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        @@ -524,7 +489,7 @@ Use card groups to render cards as a single, attached element with equal width a
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This card has supporting text below as a natural lead-in to additional content.

        @@ -532,7 +497,7 @@ Use card groups to render cards as a single, attached element with equal width a
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.

        @@ -540,15 +505,14 @@ Use card groups to render cards as a single, attached element with equal width a
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} When using card groups with footers, their content will automatically line up. -{% capture example %} +{{< example >}}
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        @@ -558,7 +522,7 @@ When using card groups with footers, their content will automatically line up.
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This card has supporting text below as a natural lead-in to additional content.

        @@ -568,7 +532,7 @@ When using card groups with footers, their content will automatically line up.
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.

        @@ -578,17 +542,16 @@ When using card groups with footers, their content will automatically line up.
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Card decks Need a set of equal width and height cards that aren't attached to one another? Use card decks. -{% capture example %} +{{< example >}}
        - {% include icons/placeholder.svg width="100%" height="200" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="200" class="card-img-top" text="Image cap" >}}
        Card title

        This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        @@ -596,7 +559,7 @@ Need a set of equal width and height cards that aren't attached to one another?
        - {% include icons/placeholder.svg width="100%" height="200" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="200" class="card-img-top" text="Image cap" >}}
        Card title

        This card has supporting text below as a natural lead-in to additional content.

        @@ -604,7 +567,7 @@ Need a set of equal width and height cards that aren't attached to one another?
        - {% include icons/placeholder.svg width="100%" height="200" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="200" class="card-img-top" text="Image cap" >}}
        Card title

        This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.

        @@ -612,15 +575,14 @@ Need a set of equal width and height cards that aren't attached to one another?
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Just like with card groups, card footers in decks will automatically line up. -{% capture example %} +{{< example >}}
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        @@ -630,7 +592,7 @@ Just like with card groups, card footers in decks will automatically line up.
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This card has supporting text below as a natural lead-in to additional content.

        @@ -640,7 +602,7 @@ Just like with card groups, card footers in decks will automatically line up.
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.

        @@ -650,18 +612,17 @@ Just like with card groups, card footers in decks will automatically line up.
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Grid cards -Use the Bootstrap grid system and its [`.row-cols` classes]({{ site.baseurl }}/docs/{{ site.docs_version }}/layout/grid/#row-columns) to control how many grid columns (wrapped around your cards) you show per row. For example, here's `.row-cols-1` laying out the cards on one column, and `.row-cols-md-2` splitting four cards to equal width across multiple rows, from the medium breakpoint up. +Use the Bootstrap grid system and its [`.row-cols` classes]({{< docsref "/layout/grid#row-columns" >}}) to control how many grid columns (wrapped around your cards) you show per row. For example, here's `.row-cols-1` laying out the cards on one column, and `.row-cols-md-2` splitting four cards to equal width across multiple rows, from the medium breakpoint up. -{% capture example %} +{{< example >}}
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        @@ -670,7 +631,7 @@ Use the Bootstrap grid system and its [`.row-cols` classes]({{ site.baseurl }}/d
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        @@ -679,7 +640,7 @@ Use the Bootstrap grid system and its [`.row-cols` classes]({{ site.baseurl }}/d
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a longer card with supporting text below as a natural lead-in to additional content.

        @@ -688,7 +649,7 @@ Use the Bootstrap grid system and its [`.row-cols` classes]({{ site.baseurl }}/d
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        @@ -696,16 +657,15 @@ Use the Bootstrap grid system and its [`.row-cols` classes]({{ site.baseurl }}/d
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Change it to `.row-cols-3` and you'll see the fourth card wrap. -{% capture example %} +{{< example >}}
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        @@ -714,7 +674,7 @@ Change it to `.row-cols-3` and you'll see the fourth card wrap.
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        @@ -723,7 +683,7 @@ Change it to `.row-cols-3` and you'll see the fourth card wrap.
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a longer card with supporting text below as a natural lead-in to additional content.

        @@ -732,7 +692,7 @@ Change it to `.row-cols-3` and you'll see the fourth card wrap.
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        @@ -740,16 +700,15 @@ Change it to `.row-cols-3` and you'll see the fourth card wrap.
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} When you need equal height, add `.h-100` to the cards. If you want equal heights by default, you can set `$card-height: 100%` in Sass. -{% capture example %} +{{< example >}}
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        @@ -758,7 +717,7 @@ When you need equal height, add `.h-100` to the cards. If you want equal heights
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a short card.

        @@ -767,7 +726,7 @@ When you need equal height, add `.h-100` to the cards. If you want equal heights
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a longer card with supporting text below as a natural lead-in to additional content.

        @@ -776,7 +735,7 @@ When you need equal height, add `.h-100` to the cards. If you want equal heights
        - {% include icons/placeholder.svg width="100%" height="180" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
        Card title

        This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        @@ -784,8 +743,7 @@ When you need equal height, add `.h-100` to the cards. If you want equal heights
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Card columns @@ -793,10 +751,10 @@ Cards can be organized into [Masonry](https://masonry.desandro.com/)-like column **Heads up!** Your mileage with card columns may vary. To prevent cards breaking across columns, we must set them to `display: inline-block` as `column-break-inside: avoid` isn't a bulletproof solution yet. -{% capture example %} +{{< example >}}
        - {% include icons/placeholder.svg width="100%" height="160" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="160" class="card-img-top" text="Image cap" >}}
        Card title that wraps to a new line

        This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        @@ -804,7 +762,7 @@ Cards can be organized into [Masonry](https://masonry.desandro.com/)-like column
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

        +

        A well-known quote, contained in a blockquote element.

        Someone famous in Source Title @@ -813,7 +771,7 @@ Cards can be organized into [Masonry](https://masonry.desandro.com/)-like column
        - {% include icons/placeholder.svg width="100%" height="160" class="card-img-top" text="Image cap" %} + {{< placeholder width="100%" height="160" class="card-img-top" text="Image cap" >}}
        Card title

        This card has supporting text below as a natural lead-in to additional content.

        @@ -822,7 +780,7 @@ Cards can be organized into [Masonry](https://masonry.desandro.com/)-like column
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat.

        +

        A well-known quote, contained in a blockquote element.

        Someone famous in Source Title @@ -838,11 +796,11 @@ Cards can be organized into [Masonry](https://masonry.desandro.com/)-like column
        - {% include icons/placeholder.svg width="100%" height="260" class="card-img" text="Card image" %} + {{< placeholder width="100%" height="260" class="card-img" text="Card image" >}}
        -

        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

        +

        A well-known quote, contained in a blockquote element.

        Someone famous in Source Title @@ -858,12 +816,11 @@ Cards can be organized into [Masonry](https://masonry.desandro.com/)-like column
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Card columns can also be extended and customized with some additional code. Shown below is an extension of the `.card-columns` class using the same CSS we use—CSS columns— to generate a set of responsive tiers for changing the number of columns. -{% highlight scss %} +```scss .card-columns { @include media-breakpoint-only(lg) { column-count: 4; @@ -872,4 +829,4 @@ Card columns can also be extended and customized with some additional code. Show column-count: 5; } } -{% endhighlight %} +``` diff --git a/vendor/twbs/bootstrap/site/docs/4.5/components/carousel.md b/vendor/twbs/bootstrap/site/content/docs/4.6/components/carousel.md similarity index 70% rename from vendor/twbs/bootstrap/site/docs/4.5/components/carousel.md rename to vendor/twbs/bootstrap/site/content/docs/4.6/components/carousel.md index 35bdd198f..b8fac60d3 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/components/carousel.md +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/components/carousel.md @@ -12,11 +12,13 @@ The carousel is a slideshow for cycling through a series of content, built with In browsers where the [Page Visibility API](https://www.w3.org/TR/page-visibility/) is supported, the carousel will avoid sliding when the webpage is not visible to the user (such as when the browser tab is inactive, the browser window is minimized, etc.). -{% include callout-info-prefersreducedmotion.md %} +{{< callout info >}} +{{< partial "callout-info-prefersreducedmotion.md" >}} +{{< /callout >}} Please be aware that nested carousels are not supported, and carousels are generally not compliant with accessibility standards. -Lastly, if you're building our JavaScript from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util). +Lastly, if you're building our JavaScript from source, it [requires `util.js`]({{< docsref "/getting-started/javascript#util" >}}). ## Example @@ -28,38 +30,37 @@ Carousels don't automatically normalize slide dimensions. As such, you may need Here's a carousel with slides only. Note the presence of the `.d-block` and `.w-100` on carousel images to prevent browser default image alignment. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### With controls Adding in the previous and next controls: -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### With indicators You can also add the indicators to the carousel, alongside the controls, too. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### With captions -Add captions to your slides easily with the `.carousel-caption` element within any `.carousel-item`. They can be easily hidden on smaller viewports, as shown below, with optional [display utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/display/). We hide them initially with `.d-none` and bring them back on medium-sized devices with `.d-md-block`. +Add captions to your slides easily with the `.carousel-caption` element within any `.carousel-item`. They can be easily hidden on smaller viewports, as shown below, with optional [display utilities]({{< docsref "/utilities/display" >}}). We hide them initially with `.d-none` and bring them back on medium-sized devices with `.d-md-block`. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Crossfade Add `.carousel-fade` to your carousel to animate slides with a fade transition instead of a slide. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Individual `.carousel-item` interval Add `data-interval=""` to a `.carousel-item` to change the amount of time to delay between automatically cycling to the next item. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} +### Disable touch swiping + +Carousels support swiping left/right on touchscreen devices to move between slides. This can be disabled using the `data-touch` attribute. The example below also does not include the `data-ride` attribute and has `data-interval="false"` so it doesn't autoplay. + +{{< example >}} + +{{< /example >}} ## Usage @@ -225,9 +248,9 @@ The `data-ride="carousel"` attribute is used to mark a carousel as animating sta Call carousel manually with: -{% highlight js %} +```js $('.carousel').carousel() -{% endhighlight %} +``` ### Options @@ -247,7 +270,7 @@ Options can be passed via data attributes or JavaScript. For data attributes, ap interval number 5000 - The amount of time to delay between automatically cycling an item. If false, carousel will not automatically cycle. + The amount of time to delay between automatically cycling an item. If false, carousel will not automatically cycle. keyboard @@ -258,15 +281,15 @@ Options can be passed via data attributes or JavaScript. For data attributes, ap pause string | boolean - "hover" -

        If set to "hover", pauses the cycling of the carousel on mouseenter and resumes the cycling of the carousel on mouseleave. If set to false, hovering over the carousel won't pause it.

        -

        On touch-enabled devices, when set to "hover", cycling will pause on touchend (once the user finished interacting with the carousel) for two intervals, before automatically resuming. Note that this is in addition to the above mouse behavior.

        + 'hover' +

        If set to 'hover', pauses the cycling of the carousel on mouseenter and resumes the cycling of the carousel on mouseleave. If set to false, hovering over the carousel won't pause it.

        +

        On touch-enabled devices, when set to 'hover', cycling will pause on touchend (once the user finished interacting with the carousel) for two intervals, before automatically resuming. Note that this is in addition to the above mouse behavior.

        ride string false - Autoplays the carousel after the user manually cycles the first item. If "carousel", autoplays the carousel on load. + Autoplays the carousel after the user manually cycles the first item. If set to 'carousel', autoplays the carousel on load. wrap @@ -285,17 +308,19 @@ Options can be passed via data attributes or JavaScript. For data attributes, ap ### Methods -{% include callout-danger-async-methods.md %} +{{< callout danger >}} +{{< partial "callout-danger-async-methods.md" >}} +{{< /callout >}} #### `.carousel(options)` Initializes the carousel with an optional options `object` and starts cycling through items. -{% highlight js %} +```js $('.carousel').carousel({ interval: 2000 }) -{% endhighlight %} +``` #### `.carousel('cycle')` @@ -359,11 +384,11 @@ All carousel events are fired at the carousel itself (i.e. at the `
        }} +{{< /callout >}} ## Example @@ -20,9 +22,9 @@ Click the buttons below to show and hide another element via class changes: - `.collapsing` is applied during transitions - `.collapse.show` shows content -You can use a link with the `href` attribute, or a button with the `data-target` attribute. In both cases, the `data-toggle="collapse"` is required. +Generally, we recommend using a button with the `data-target` attribute. While not recommended from a semantic point of view, you can also use a link with the `href` attribute (and a `role="button"`). In both cases, the `data-toggle="collapse"` is required. -{% capture example %} +{{< example >}}

        @@ -54,26 +55,25 @@ Multiple `
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Accordion example -Using the [card]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/card/) component, you can extend the default collapse behavior to create an accordion. To properly achieve the accordion style, be sure to use `.accordion` as a wrapper. +Using the [card]({{< docsref "/components/card" >}}) component, you can extend the default collapse behavior to create an accordion. To properly achieve the accordion style, be sure to use `.accordion` as a wrapper. -{% capture example %} +{{< example >}}
        @@ -86,7 +86,7 @@ Using the [card]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/card
        - Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. + Some placeholder content for the first accordion panel. This panel is shown by default, thanks to the .show class.
        @@ -100,7 +100,7 @@ Using the [card]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/card
        - Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. + Some placeholder content for the second accordion panel. This panel is hidden by default.
        @@ -114,13 +114,12 @@ Using the [card]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/card
        - Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. + And lastly, the placeholder content for the third and final accordion panel. This panel is hidden by default.
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Accessibility @@ -150,9 +149,9 @@ To add accordion-like group management to a collapsible area, add the data attri Enable manually with: -{% highlight js %} +```js $('.collapse').collapse() -{% endhighlight %} +``` ### Options @@ -185,17 +184,19 @@ Options can be passed via data attributes or JavaScript. For data attributes, ap ### Methods -{% include callout-danger-async-methods.md %} +{{< callout danger >}} +{{< partial "callout-danger-async-methods.md" >}} +{{< /callout >}} #### `.collapse(options)` Activates your content as a collapsible element. Accepts an optional options `object`. -{% highlight js %} +```js $('#myCollapsible').collapse({ toggle: false }) -{% endhighlight %} +``` #### `.collapse('toggle')` @@ -244,8 +245,8 @@ Bootstrap's collapse class exposes a few events for hooking into collapse functi -{% highlight js %} +```js $('#myCollapsible').on('hidden.bs.collapse', function () { // do something... }) -{% endhighlight %} +``` diff --git a/vendor/twbs/bootstrap/site/docs/4.5/components/dropdowns.md b/vendor/twbs/bootstrap/site/content/docs/4.6/components/dropdowns.md similarity index 83% rename from vendor/twbs/bootstrap/site/docs/4.5/components/dropdowns.md rename to vendor/twbs/bootstrap/site/content/docs/4.6/components/dropdowns.md index 6b8ca2eac..ea7c226f2 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/components/dropdowns.md +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/components/dropdowns.md @@ -10,9 +10,9 @@ toc: true Dropdowns are toggleable, contextual overlays for displaying lists of links and more. They're made interactive with the included Bootstrap dropdown JavaScript plugin. They're toggled by clicking, not by hovering; this is [an intentional design decision](https://markdotto.com/2012/02/27/bootstrap-explained-dropdowns/). -Dropdowns are built on a third party library, [Popper.js](https://popper.js.org/), which provides dynamic positioning and viewport detection. Be sure to include [popper.min.js]({{ site.cdn.popper }}) before Bootstrap's JavaScript or use `bootstrap.bundle.min.js` / `bootstrap.bundle.js` which contains Popper.js. Popper.js isn't used to position dropdowns in navbars though as dynamic positioning isn't required. +Dropdowns are built on a third party library, [Popper](https://popper.js.org/), which provides dynamic positioning and viewport detection. Be sure to include [popper.min.js]({{< param "cdn.popper" >}}) before Bootstrap's JavaScript or use `bootstrap.bundle.min.js` / `bootstrap.bundle.js` which contains Popper. Popper isn't used to position dropdowns in navbars though as dynamic positioning isn't required. -If you're building our JavaScript from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util). +If you're building our JavaScript from source, it [requires `util.js`]({{< docsref "/getting-started/javascript#util" >}}). ## Accessibility @@ -30,7 +30,7 @@ Wrap the dropdown's toggle (your button or link) and the dropdown menu within `. Any single `.btn` can be turned into a dropdown toggle with some markup changes. Here's how you can put them to work with either `
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} And with `` elements: -{% capture example %} +{{< example >}}
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} The best part is you can do this with any button variant, too: @@ -126,7 +124,7 @@ The best part is you can do this with any button variant, too:
        -{% highlight html %} +```html
        -{% endhighlight %} +``` ### Split button @@ -229,7 +227,7 @@ We use this extra class to reduce the horizontal `padding` on either side of the
        -{% highlight html %} +```html
        @@ -244,70 +242,41 @@ We use this extra class to reduce the horizontal `padding` on either side of the Separated link
        -{% endhighlight %} +``` ## Sizing Button dropdowns work with buttons of all sizes, including default and split dropdown buttons.
        - - -
        +
        + + +
        +
        + + + +
        +
        -{% highlight html %} +```html
        +``` +
        +
        + + +
        +
        + + + +
        +
        + +```html
        -{% endhighlight %} +``` ## Directions @@ -370,7 +369,6 @@ Trigger dropdown menus above elements by adding `.dropup` to the parent element. Separated link
        -
        -{% highlight html %} +```html
        -{% endhighlight %} +``` ### Dropright @@ -430,7 +428,6 @@ Trigger dropdown menus at the right of the elements by adding `.dropright` to th Separated link
        -
        -{% highlight html %} +```html
        -{% endhighlight %} +``` ### Dropleft @@ -490,7 +487,6 @@ Trigger dropdown menus at the left of the elements by adding `.dropleft` to the Separated link -
        -{% highlight html %} +```html
        -{% endhighlight %} +``` ## Menu items Historically dropdown menu contents *had* to be links, but that's no longer the case with v4. Now you can optionally use ` -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} You can also create non-interactive dropdown items with `.dropdown-item-text`. Feel free to style further with custom CSS or text utilities. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Active Add `.active` to items in the dropdown to **style them as active**. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Disabled Add `.disabled` to items in the dropdown to **style them as disabled**. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Menu alignment By default, a dropdown menu is automatically positioned 100% from the top and along the left side of its parent. Add `.dropdown-menu-right` to a `.dropdown-menu` to right align the dropdown menu. -{% capture callout %} -**Heads up!** Dropdowns are positioned thanks to Popper.js (except when they are contained in a navbar). -{% endcapture %} -{% include callout.html content=callout type="info" %} +{{< callout info >}} +**Heads up!** Dropdowns are positioned thanks to Popper (except when they are contained in a navbar). +{{< /callout >}} -{% capture example %} +{{< example >}}
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Responsive alignment @@ -622,7 +612,7 @@ If you want to use responsive alignment, disable dynamic positioning by adding t To align **right** the dropdown menu with the given breakpoint or larger, add `.dropdown-menu{-sm|-md|-lg|-xl}-right`. -{% capture example %} +{{< example >}}
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} To align **left** the dropdown menu with the given breakpoint or larger, add `.dropdown-menu-right` and `.dropdown-menu{-sm|-md|-lg|-xl}-left`. -{% capture example %} +{{< example >}}
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -Note that you don't need to add a `data-display="static"` attribute to dropdown buttons in navbars, since Popper.js isn't used in navbars. +Note that you don't need to add a `data-display="static"` attribute to dropdown buttons in navbars, since Popper isn't used in navbars. ## Menu content @@ -660,20 +648,19 @@ Note that you don't need to add a `data-display="static"` attribute to dropdown Add a header to label sections of actions in any dropdown menu. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Dividers Separate groups of related menu items with a divider. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Text -Place any freeform text within a dropdown menu with text and use [spacing utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/). Note that you'll likely need additional sizing styles to constrain the menu width. +Place any freeform text within a dropdown menu with text and use [spacing utilities]({{< docsref "/utilities/spacing" >}}). Note that you'll likely need additional sizing styles to constrain the menu width. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Forms -Put a form within a dropdown menu, or make it into a dropdown menu, and use [margin or padding utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/) to give it the negative space you require. +Put a form within a dropdown menu, or make it into a dropdown menu, and use [margin or padding utilities]({{< docsref "/utilities/spacing" >}}) to give it the negative space you require. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Usage -Via data attributes or JavaScript, the dropdown plugin toggles hidden content (dropdown menus) by toggling the `.show` class on the parent list item. The `data-toggle="dropdown"` attribute is relied on for closing dropdown menus at an application level, so it's a good idea to always use it. +Via data attributes or JavaScript, the dropdown plugin toggles hidden content (dropdown menus) by toggling the `.show` class on the parent `.dropdown-menu`. The `data-toggle="dropdown"` attribute is relied on for closing dropdown menus at an application level, so it's a good idea to always use it. -{% capture callout %} +{{< callout info >}} On touch-enabled devices, opening a dropdown adds empty (`$.noop`) `mouseover` handlers to the immediate children of the `` element. This admittedly ugly hack is necessary to work around a [quirk in iOS' event delegation](https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html), which would otherwise prevent a tap anywhere outside of the dropdown from triggering the code that closes the dropdown. Once the dropdown is closed, these additional empty `mouseover` handlers are removed. -{% endcapture %} -{% include callout.html content=callout type="info" %} +{{< /callout >}} ### Via data attributes Add `data-toggle="dropdown"` to a link or button to toggle a dropdown. -{% highlight html %} +```html -{% endhighlight %} +``` ### Via JavaScript Call the dropdowns via JavaScript: -{% highlight js %} +```js $('.dropdown-toggle').dropdown() -{% endhighlight %} +``` -{% capture callout %} +{{< callout info >}} ##### `data-toggle="dropdown"` still required Regardless of whether you call your dropdown via JavaScript or instead use the data-api, `data-toggle="dropdown"` is always required to be present on the dropdown's trigger element. -{% endcapture %} -{% include callout.html content=callout type="info" %} +{{< /callout >}} ### Options @@ -848,38 +828,38 @@ Options can be passed via data attributes or JavaScript. For data attributes, ap

        Offset of the dropdown relative to its target.

        When a function is used to determine the offset, it is called with an object containing the offset data as its first argument. The function must return an object with the same structure. The triggering element DOM node is passed as the second argument.

        -

        For more information refer to Popper.js's offset docs.

        +

        For more information refer to Popper's offset docs.

        flip boolean true - Allow Dropdown to flip in case of an overlapping on the reference element. For more information refer to Popper.js's flip docs. + Allow Dropdown to flip in case of an overlapping on the reference element. For more information refer to Popper's flip docs. boundary string | element 'scrollParent' - Overflow constraint boundary of the dropdown menu. Accepts the values of 'viewport', 'window', 'scrollParent', or an HTMLElement reference (JavaScript only). For more information refer to Popper.js's preventOverflow docs. + Overflow constraint boundary of the dropdown menu. Accepts the values of 'viewport', 'window', 'scrollParent', or an HTMLElement reference (JavaScript only). For more information refer to Popper's preventOverflow docs. reference string | element 'toggle' - Reference element of the dropdown menu. Accepts the values of 'toggle', 'parent', or an HTMLElement reference. For more information refer to Popper.js's referenceObject docs. + Reference element of the dropdown menu. Accepts the values of 'toggle', 'parent', or an HTMLElement reference. For more information refer to Popper's referenceObject docs. display string 'dynamic' - By default, we use Popper.js for dynamic positioning. Disable this with static. + By default, we use Popper for dynamic positioning. Disable this with static. popperConfig null | object null - To change Bootstrap's default Popper.js config, see Popper.js's configuration + To change Bootstrap's default Popper config, see Popper's configuration @@ -908,8 +888,8 @@ All dropdown events are fired at the `.dropdown-menu`'s parent element and have | `hide.bs.dropdown` | This event is fired immediately when the hide instance method has been called. | | `hidden.bs.dropdown`| This event is fired when the dropdown has finished being hidden from the user (will wait for CSS transitions, to complete). | -{% highlight js %} +```js $('#myDropdown').on('show.bs.dropdown', function () { // do something... }) -{% endhighlight %} +``` diff --git a/vendor/twbs/bootstrap/site/docs/4.5/components/forms.md b/vendor/twbs/bootstrap/site/content/docs/4.6/components/forms.md similarity index 84% rename from vendor/twbs/bootstrap/site/docs/4.5/components/forms.md rename to vendor/twbs/bootstrap/site/content/docs/4.6/components/forms.md index 4a8f62947..b44ce67ad 100644 --- a/vendor/twbs/bootstrap/site/docs/4.5/components/forms.md +++ b/vendor/twbs/bootstrap/site/content/docs/4.6/components/forms.md @@ -8,13 +8,13 @@ toc: true ## Overview -Bootstrap's form controls expand on [our Rebooted form styles]({{ site.baseurl }}/docs/{{ site.docs_version }}/content/reboot/#forms) with classes. Use these classes to opt into their customized displays for a more consistent rendering across browsers and devices. +Bootstrap's form controls expand on [our Rebooted form styles]({{< docsref "/content/reboot#forms" >}}) with classes. Use these classes to opt into their customized displays for a more consistent rendering across browsers and devices. Be sure to use an appropriate `type` attribute on all inputs (e.g., `email` for email address or `number` for numerical information) to take advantage of newer input controls like email verification, number selection, and more. Here's a quick example to demonstrate Bootstrap's form styles. Keep reading for documentation on required classes, form layout, and more. -{% capture example %} +{{< example >}}
        @@ -31,8 +31,7 @@ Here's a quick example to demonstrate Bootstrap's form styles. Keep reading for
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Form controls @@ -40,7 +39,7 @@ Textual form controls—like ``s, ` -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} For file inputs, swap the `.form-control` for `.form-control-file`. -{% capture example %} +{{< example >}}
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Sizing Set heights using classes like `.form-control-lg` and `.form-control-sm`. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}} @@ -107,23 +103,21 @@ Set heights using classes like `.form-control-lg` and `.form-control-sm`. -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Readonly Add the `readonly` boolean attribute on an input to prevent modification of the input's value. Read-only inputs appear lighter (just like disabled inputs), but retain the standard cursor. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Readonly plain text If you want to have `` elements in your form styled as plain text, use the `.form-control-plaintext` class to remove the default form field styling and preserve the correct margin and padding. -{% capture example %} +{{< example >}}
        @@ -138,10 +132,9 @@ If you want to have `` elements in your form styled as plain tex
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
        @@ -153,22 +146,20 @@ If you want to have `` elements in your form styled as plain tex
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Range Inputs Set horizontally scrollable range inputs using `.form-control-range`. -{% capture example %} +{{< example >}}
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Checkboxes and radios @@ -182,7 +173,7 @@ Checkboxes and radio buttons support HTML-based form validation and provide conc By default, any number of checkboxes and radios that are immediate sibling will be vertically stacked and appropriately spaced with `.form-check`. -{% capture example %} +{{< example >}}
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Inline Group checkboxes or radios on the same horizontal row by adding `.form-check-inline` to any `.form-check`. -{% capture example %} +{{< example >}}
        @@ -237,10 +226,9 @@ Group checkboxes or radios on the same horizontal row by adding `.form-check-inl
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% capture example %} +{{< example >}}
        @@ -253,22 +241,20 @@ Group checkboxes or radios on the same horizontal row by adding `.form-check-inl
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Without labels Add `.position-static` to inputs within `.form-check` that don't have any label text. Remember to still provide some form of accessible name for assistive technologies (for instance, using `aria-label`). -{% capture example %} +{{< example >}}
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Layout @@ -278,7 +264,7 @@ Since Bootstrap applies `display: block` and `width: 100%` to almost all our for The `.form-group` class is the easiest way to add some structure to forms. It provides a flexible class that encourages proper grouping of labels, controls, optional help text, and form validation messaging. By default it only applies `margin-bottom`, but it picks up additional styles in `.form-inline` as needed. Use it with `
        `s, `
        `s, or nearly any other element. -{% capture example %} +{{< example >}}
        @@ -289,14 +275,13 @@ The `.form-group` class is the easiest way to add some structure to forms. It pr
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Form grid More complex forms can be built using our grid classes. Use these for form layouts that require multiple columns, varied widths, and additional alignment options. -{% capture example %} +{{< example >}}
        @@ -307,14 +292,13 @@ More complex forms can be built using our grid classes. Use these for form layou
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} #### Form row You may also swap `.row` for `.form-row`, a variation of our standard grid row that overrides the default column gutters for tighter and more compact layouts. -{% capture example %} +{{< example >}}
        @@ -325,12 +309,11 @@ You may also swap `.row` for `.form-row`, a variation of our standard grid row t
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} More complex layouts can also be created with the grid system. -{% capture example %} +{{< example >}}
        @@ -377,8 +360,7 @@ More complex layouts can also be created with the grid system.
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} #### Horizontal form @@ -386,7 +368,7 @@ Create horizontal forms with the grid by adding the `.row` class to form groups At times, you maybe need to use margin or padding utilities to create that perfect alignment you need. For example, we've removed the `padding-top` on our stacked radio inputs label to better align the text baseline. -{% capture example %} +{{< example >}}
        @@ -400,34 +382,31 @@ At times, you maybe need to use margin or padding utilities to create that perfe
        -
        -
        - Radios -
        -
        - - -
        -
        - - -
        -
        - - -
        +
        + Radios +
        +
        + + +
        +
        + + +
        +
        + +
        -
        Checkbox
        -
        +
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ##### Horizontal form label sizing Be sure to use `.col-form-label-sm` or `.col-form-label-lg` to your `
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} #### Column sizing As shown in the previous examples, our grid system allows you to place any number of `.col`s within a `.row` or `.form-row`. They'll split the available width equally between them. You may also pick a subset of your columns to take up more or less space, while the remaining `.col`s equally split the rest, with specific column classes like `.col-7`. -{% capture example %} +{{< example >}}
        @@ -491,14 +468,13 @@ As shown in the previous examples, our grid system allows you to place any numbe
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} #### Auto-sizing The example below uses a flexbox utility to vertically center the contents and changes `.col` to `.col-auto` so that your columns only take up as much space as needed. Put another way, the column sizes itself based on the contents. -{% capture example %} +{{< example >}}
        @@ -527,12 +503,11 @@ The example below uses a flexbox utility to vertically center the contents and c
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} You can then remix that once again with size-specific column classes. -{% capture example %} +{{< example >}}
        @@ -561,12 +536,11 @@ You can then remix that once again with size-specific column classes.
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} And of course [custom form controls](#custom-forms) are supported. -{% capture example %} +{{< example >}}
        @@ -589,20 +563,19 @@ And of course [custom form controls](#custom-forms) are supported.
        -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Inline forms Use the `.form-inline` class to display a series of labels, form controls, and buttons on a single horizontal row. Form controls within inline forms vary slightly from their default states. -- Controls are `display: flex`, collapsing any HTML white space and allowing you to provide alignment control with [spacing]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/) and [flexbox]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/) utilities. +- Controls are `display: flex`, collapsing any HTML white space and allowing you to provide alignment control with [spacing]({{< docsref "/utilities/spacing" >}}) and [flexbox]({{< docsref "/utilities/flex" >}}) utilities. - Controls and input groups receive `width: auto` to override the Bootstrap default `width: 100%`. - Controls **only appear inline in viewports that are at least 576px wide** to account for narrow viewports on mobile devices. -You may need to manually address the width and alignment of individual form controls with [spacing utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/) (as shown below). Lastly, be sure to always include a `
        -{% endhighlight %} - +``` ### Scrolling long content @@ -208,24 +209,14 @@ When modals become too long for the user's viewport or device, they scroll indep
        -{% highlight html %} +```html -{% endhighlight %} +``` ### Vertically centered @@ -307,7 +288,7 @@ Add `.modal-dialog-centered` to `.modal-dialog` to vertically center the modal.
        -{% highlight html %} +```html -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -{% highlight js %} +```js $('#exampleModal').on('show.bs.modal', function (event) { var button = $(event.relatedTarget) // Button that triggered the modal var recipient = button.data('whatever') // Extract info from data-* attributes @@ -542,7 +521,7 @@ $('#exampleModal').on('show.bs.modal', function (event) { modal.find('.modal-title').text('New message to ' + recipient) modal.find('.modal-body input').val(recipient) }) -{% endhighlight %} +``` ### Change animation @@ -554,11 +533,11 @@ If you want for example a zoom-in animation, you can set `$modal-fade-transform: For modals that simply appear rather than fade in to view, remove the `.fade` class from your modal markup. -{% highlight html %} +```html -{% endhighlight %} +``` ### Dynamic heights @@ -616,16 +595,15 @@ Our default modal without modifier class constitutes the "medium" size modal. -{% highlight html %} +```html -{% endhighlight %} +``` -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Forms Place various form controls and components within a navbar with `.form-inline`. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} -Immediate children elements in `.navbar` use flex layout and will default to `justify-content: space-between`. Use additional [flex utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/flex/) as needed to adjust this behavior. +Immediate child elements of `.navbar` use flex layout and will default to `justify-content: space-between`. Use additional [flex utilities]({{< docsref "/utilities/flex" >}}) as needed to adjust this behavior. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Input groups work, too: -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Various buttons are supported as part of these navbar forms, too. This is also a great reminder that vertical alignment utilities can be used to align different sized elements. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### Text Navbars may contain bits of text with the help of `.navbar-text`. This class adjusts vertical alignment and horizontal spacing for strings of text. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} Mix and match with other components and utilities as needed. -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ## Color schemes @@ -308,7 +295,6 @@ Theming the navbar has never been easier thanks to the combination of theming cl - -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} With a toggler on the left and brand name on the right: -{% capture example %} +{{< example >}} -{% endcapture %} -{% include example.html content=example %} +{{< /example >}} ### External content -Sometimes you want to use the collapse plugin to trigger hidden content elsewhere on the page. Because our plugin works on the `id` and `data-target` matching, that's easily done! +Sometimes you want to use the collapse plugin to trigger a container element for content that structurally sits outside of the `.navbar` . Because our plugin works on the `id` and `data-target` matching, that's easily done! -{% capture example %} +{{< example >}}
        -{% highlight html %} +```html
        -{% endhighlight %} +``` To help fit your needs, this works with `
          `-based markup, as shown above, or with any arbitrary "roll your own" markup. Note that if you're using `
        -

        Consequat occaecat ullamco amet non eiusmod nostrud dolore irure incididunt est duis anim sunt officia. Fugiat velit proident aliquip nisi incididunt nostrud exercitation proident est nisi. Irure magna elit commodo anim ex veniam culpa eiusmod id nostrud sit cupidatat in veniam ad. Eiusmod consequat eu adipisicing minim anim aliquip cupidatat culpa excepteur quis. Occaecat sit eu exercitation irure Lorem incididunt nostrud.

        +

        Placeholder content for the tab panel. This one relates to the home tab. Takes you miles high, so high, 'cause she’s got that one international smile. There's a stranger in my bed, there's a pounding in my head. Oh, no. In another life I would make you stay. ‘Cause I, I’m capable of anything. Suiting up for my crowning battle. Used to steal your parents' liquor and climb to the roof. Tone, tan fit and ready, turn it up cause its gettin' heavy. Her love is like a drug. I guess that I forgot I had a choice.

        -

        Ad pariatur nostrud pariatur exercitation ipsum ipsum culpa mollit commodo mollit ex. Aute sunt incididunt amet commodo est sint nisi deserunt pariatur do. Aliquip ex eiusmod voluptate exercitation cillum id incididunt elit sunt. Qui minim sit magna Lorem id et dolore velit Lorem amet exercitation duis deserunt. Anim id labore elit adipisicing ut in id occaecat pariatur ut ullamco ea tempor duis.

        +

        Placeholder content for the tab panel. This one relates to the profile tab. You got the finest architecture. Passport stamps, she's cosmopolitan. Fine, fresh, fierce, we got it on lock. Never planned that one day I'd be losing you. She eats your heart out. Your kiss is cosmic, every move is magic. I mean the ones, I mean like she's the one. Greetings loved ones let's take a journey. Just own the night like the 4th of July! But you'd rather get wasted.

        -

        Est quis nulla laborum officia ad nisi ex nostrud culpa Lorem excepteur aliquip dolor aliqua irure ex. Nulla ut duis ipsum nisi elit fugiat commodo sunt reprehenderit laborum veniam eu veniam. Eiusmod minim exercitation fugiat irure ex labore incididunt do fugiat commodo aliquip sit id deserunt reprehenderit aliquip nostrud. Amet ex cupidatat excepteur aute veniam incididunt mollit cupidatat esse irure officia elit do ipsum ullamco Lorem. Ullamco ut ad minim do mollit labore ipsum laboris ipsum commodo sunt tempor enim incididunt. Commodo quis sunt dolore aliquip aute tempor irure magna enim minim reprehenderit. Ullamco consectetur culpa veniam sint cillum aliqua incididunt velit ullamco sunt ullamco quis quis commodo voluptate. Mollit nulla nostrud adipisicing aliqua cupidatat aliqua pariatur mollit voluptate voluptate consequat non.

        +

        Placeholder content for the tab panel. This one relates to the contact tab. Her love is like a drug. All my girls vintage Chanel baby. Got a motel and built a fort out of sheets. 'Cause she's the muse and the artist. (This is how we do) So you wanna play with magic. So just be sure before you give it all to me. I'm walking, I'm walking on air (tonight). Skip the talk, heard it all, time to walk the walk. Catch her if you can. Stinging like a bee I earned my stripes.

        -{% highlight html %} +```html

        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 YeZXawGRK|`mgC1j*F>l6u2ana0M{HC3IG5A literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png b/doc/pl/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png new file mode 100644 index 0000000000000000000000000000000000000000..f992672b09abed4f161465f5c7fc586450dd0ce6 GIT binary patch literal 91478 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 EAL{D`-T(jq literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png b/doc/pl/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png new file mode 100644 index 0000000000000000000000000000000000000000..b656192dce79182677a1ccd9a6be7869dc3f6eda GIT binary patch literal 293611 zcmZs@bzD?$w>}IgAuZi4-CYtQAV_xzICLW|HAqVgNP|d8cL_+2bW7(jjI@+=$NaX> zbIyCd=RMD7&wOV1WA^NQueGjqUDv&aXe|w8JZvg#6ciLZl~*ryP*5HNZ_zriFo2iV zOgbXq<;lBO#-1oB_`QFhsHt4|)F>znC@L@I_1-V-cQ|}{Gw;299bo#$*jP$SzqFev z^fBru{wF*v?9pGXwTYg+F32%3UEd7b%yjP!@5ymccA^nj#ZvY?I}1GGrp>7xfb;kj zUMzgBYn^RkX<|nUDJbf0UK)7H{k6yWFpAaADJrjc0i`r8@){Uk3y%ZrygQz*Ms9_bNvYu6@8u zw}l+B7dJ~IVte)v&ckKN^R{N$cWsRoy1byJebz7^8OhB()~pLVNt;<-*_u|#TqieE zJ9xI>#gu~V{eDUVeanum9nx!<>-YVExOYW^F5lATelh*Q$S~si34X#03 zv$DQZ3-Cp@X4t|({65jtu zL(Ml{QA)taclRM%+^2c(G+V}}ZLF-h2RMcM_=W7rAoHq^s~k630Th~R#2s1e;6n8T zt?psO|D2tjIyYqMVocIAv{4nJ1Me=A(sKEvC*slJK-BR>OKcct(jY37NsfJtDhtoA z%^cR`AWT(RU9D3yui&QoOeKlsACE#`shtmpPmE86didX;O)6hcrFZt`JP-K2vy*>s z90Fmc$}27HmU~K_Mu^HT`a)csJ!M$`r&-1ZtR{PF)9G0yHU98xT^bGR>ltPGjTJuH zXJSc=sVey_Ue2@q@{Gk4zwrn;Ga^G-<-&YSQ8qm?GczeWk@ttE1@!kHU*!KSeR@g|9EKToq3?YfY?aESunb*S zNVH+pis>C2q{TlOGF=pvdww-gx2WE|{tpNAzFkyC=3xNz_&$Un@Pq74fvlyMSBeq0 zPlGAJUdb^w6}$Q+LrB5GLd*{j8rGWe6J*fs?cEOa8bkJ~k8AWZmyu=a@UVVdKj%De z&i4MIXQhUQB_B8OyjRk5V_~?QGP*u0sn%l?-N6s7U9Y*xtlqu*gh?Ox>H6A_*Swu# zNm1#4tvQQ|zgY6pLsag_U3%x)Got8lr$B`UPQ~AQ%4e2vhF|QWtfJnG;<6$=x!?oD zX$kUzPr^5diaGt+e6HLWS#7^T#$K)^hfL4f)H99jyC<>_KP^sspm(f>n%RoN&TDz{6@iL0&mqgRTT3ggC>#U2>bd_tkTzyQA z?Q(%E%H8qqCnsE$frdwYtEl}Khkf$$q}VZpST;eoHMJ5uYSTiXz`(oWm%<)|-%l|@ zvK@67lY zYaS=|3*C9Khq1yBym!SqWn@q=>;fsj%$^)oawJB_`J87{HF_*HryzR5Nk@bwpiW3F=FxBs)Uf7d!#ndk=t zSGbd92!sTQ7NSM7Af8Nad2a`*8uXO)%WPRBwJhU4H-UWC>CuY$?G7myRbKqenD}jH zF;zkQt=+C3O;j9RfpD(f)}7+0#RG-EDyCxBoCwL>DayBPlp`Wbl6==FMMti*yegT7 zRG*eqyn0r}I#I>Ce%C1UM$;vSSX({XXr^)3$|BG)J^CZ~x4Nv$!@@uRvCv>gHMchC zE;{0|y3@4CgV#u!w_umdy$Z2cxC5mNc>8K!^nNlti?O$ia26%VWU}c4iISDrSDcZT zTc_jhs}g8P$47)QKaOD{9QN-h$HGiuzwGiizUa19>ri1rU6k$Megi%{ZC#hCjF>#^ z)Sov$e=jpAPO|kA#!o5Uu|hc~NhP}Om~pEFAC7WJpeF!Td4np?Kz?WCvRFuY%2&-( zzMvZpXM}eE{eN0*WE(BAH5bhnyp7}4<&XB`obO$29c|R!HFb)W;tj$1ry0GJFJZ4p zCx$(ZQunNtgasc-knwXA={b^OmgG;CmI}X&>-~d@-9pk-o@f8FUnI=Uj_<5Zn6bQw zH|E(l>es6VmPMhJ(lAP=DfMf90WSE(m{0$l7wi(Wxqw$=S|=F=v5NT`3?KYvT5)V} z#))M|g#1rOmI?&>J40+TVb!NV8Z~T3x&Xt>E@sJ|b^M-to22J{R92+rP?C~|2XI`Q z(!@*bH0nZXE#4h&{pry~Dxn#Ui68P4THI=VN)70o!~RTidrJ7)n4$dlWIkH(>JVS9M?RnE4rdBU75hQfaCNwO{r=p! z%9_RhIglOk!OwT)^1t`OaOAWfv*VLdA73|x{Q&8k+4^0QaE88AWF|G#j&d%K>~fS; z7eQ|vBHElLD|VP1G^i!_AhF#m9K~pxA*GtuU1+3&oeQ)R{TwNu_xOTf%5Wl~gWXPI^3x=XTkuF@TmzBh>Rhs%PZLOA& z*)F6(kEP%u4=amnyIO}cZHJofg}(D#1B&zh1A3M#{m0!krhl~Azb&_eoIMHkhtM(V z2Q4iUt?cHJ3ONmZN!}ywT@3 zJw*84yTWG}SRu9gdSm9}lI(JM%PEWv*%naI_cjB#%*j9BV1ep2BNLq_8bG&Ps{Mlu z5A92br2eb=qA{Z#?=MD%cV}&({yk@5rn#7nLX~t^LyV4Oy0Wx*Bf8E0OL#RPcOp?@ zw;7ql{}Y(>D}>73UTb{yo-h@jVHx_UJG^QH;`iuGlIo&+3w-E9{?bj&bW%&BOC)7{B(g`l+6xg7%M> zicW1_wPyLBUtG4$6~Y$So9ngL`0hFhh^eP|+~DoZs?s`Qb+17%N>Kw&N7LCn z8FegGu|>ZE>$_!DqfwukHd_A$$b+-5bK!r$?cjwQ+#b1U;Xkc=ypfTSuGEKKaGqks zp3KrW92 zvBA;7(MZ>$!y-@ld!A#y`oX)BEnRi5>BRQIA%8gGfa8&}Us%75Q@3I~obYM8alEq@t1Rt?koS1Y8Qy$fK)E zLEdJhmnnNQa>YCf##9FbJCxXFyE^d$aR4Im=ZJ3`DMgN)bxchN+PC^5?jEYgx#@&; zB9zvcum~P+If#b8x^#M_#jRSQWAmIC8U}!JIbm;j=z8hdwvxoj4>luqUL6y2B~zXx zqo;beAmbse5lZ$lNv9SOs#aAu=158FNeZ6z%3YcrB*P)>64gs2_MMzA4avZZ*|_ud zU`3P%vJrNJ#?oV*A?u`oKP^$KtDtbgg(kco`3h05Sd+!$duC=xd=WunR#sM6jDK%m zNJyv}<3pY}F|-rgs!Wdry@#KIp5E^5+YduSDmrB(#KgpJIs-FXS|sKplt?nK8VefY ztp$fd9$`|@(c$a6b(n7h`O3}B?M0fr#U>@jRa9P1BmV9~7$(72c5E@%<+qlWq51iY z+#{C2ImK4qhvnqZX?zjy>h4Bk)6D6uuhb%&ElqQmZM|FxkO;iu&s2+4D(C{@S<`Vr zRiwk=Ase~bRY9k(FX6F)Rc92pxoJa2PA*1?^7SmtqJ@6}u5#yFVW;ihkbOm9Gtr@V zMQ~fq!1bW9if~H8_w@I!IEH3#HpL*>CHamI6SAB|N1}<@zVB7HmCo-4B5x6PwziSc z(NAP<7sr7MPUo}O8jyVufGDjO6ArQ-taM}{9u5$!iLc&mjZ${r!Vh&gQ>90mPrddR z1Y}M#$3KnPwgg@aHZ(NQ$b!GTWa=6Ze(-c%{@%4Mi}a&{V2sP$asyB2ij{*2o4;vt z$@x$)xajuN1M8>xK~v3C_B!`qrl6ujdq*p7n%XoZX%}xXhAS z$wK|zuOCqvre>h?zVzQ^yvbGi@>RN-Wjboq!sUuo5Ke#Y$f@*hI+dr??hDO!aRHdJ zuOvkt+viEJFZ_;aS+&aZ!|uHH`y|4n%AHER*aTnNf5KSHjWggbYJ8wRT{vm~ZMVUN z8rHNJvwz=t%0(XA_Zs!D zLBSWi>FZNPuQyKpES}@6NjM_el2!2Oq+e-j62yG{q{d1~O}*X^p?>rIU48`^cO=XL zw&YGIV(Z3rY-*md;Ckn#INqdip?wUct&4<3Bddl%CC3OJvah=*2FFn1zY%x!HeU<& z%v@PnncGRUG5#Xq842iL;5!D>p?5YUimOHG=4-(7t3gG6dAUh! zuJq}sP-*#6d0Y0KMj^|?GvL^~L%Q}rU0`C6k+I{sCYO_IX&f9J@puK`MimqkScswx zBxJ)vTwoc+(S)JzrT?@BpDgL_XmexaxZ0x0$!qHo?jamz}77 z=Y`!w-4}o2JY9df-!N`Tf$;*Xe3tVC7AqT@X)U&`bv>+1`v1M-@%hkpS-W>~l7O|c%QfV6a=E}~^tw`QIreT3&Qnjx&q z=V;-vK5sg6wgz!*pD60yO2DDw{Cu{9mznbPw`$DUQp%95LWd>R&bRRQPh(sVYbY7LqFr=}|B<*T~@r~+09h@x=X zL2de_{_Gs;i)q5_S1h8C2G{6MF!IVY8|{kO!A*~arj8-vA1;hR7yHH!Cw$1H&Q2L# zv)0~~jsUSBgzGOCIuG_3kLmC9!q9&UDrkep_vH7j(?*~-&c2s$)^Rh&L?&C~^skRHIjQXo+nOoUHA?H7EKmkY z3wV>PDKivw2_Ja4zjddH;xep0T5_ssY)5Ot{=lE2#(KRlAfv>YY6%AC+}~ajCkz{Q2XJA`^w)!Ff`LB77LTL8y+YNjdg!LuacC_%4`WQ;ml~VaSVI~#mzdrm@b4Q_ zo!5zwE8b#a^J9pLSm(>&YGYD zr>Ya>1iH=fhy8KjHcIq3kGF##wnxXtj@zKOZD(g^--bD2UbMUc?kTdXOI}GysnnoC z%;jQ9>?VHwXu&GsIJG7)qOPva;Q8yGI$!yVp9duSe zuc)t&+mmNd;l4Y=0T3AppZx{(JKy*ge?9s419ezGl(gsAxD-p-V^H!LNPeqqQ!F)R zjWjx(C_S<&{xKy%{CsZU&oVe=)Rk;+L@&mnnsnOQ>ei3_9_5J*is-J6_ETqZO5qNU zl%pYm`bF-61p4h?U13?v0yG1wch{%Vm&=}sQj`3+0J5u;Ok*(uhNHZ`zQ4b}Nl7li zL%X`V)NL&57Mk9phUdTG9Vn4G=h!`$1aON+(hJLMUYjH$G4Ux;^yB2@of90RA z&=W?0UbJ6tWo>v!$lR?G008>9GRm~$X1C&tly7`Q1p3s@S@C_73+ykudN2L+`Q>s? zMNOw_!Q@+SZ{TLHmbYaFV);4;0p@08Zf@)0kp$2p2({P(;PeqlAEA`##gvtmjm@KA zn9WX5T0nQcy|-fKC7JX6ZOKd{_o3hgYqHhX;4kwUvg0OT^lg*qqP-`T)}fn4Od1xU zIV;-rON6TJ3FVWqBy0s z;I=a+OI5W=o@|Df1|P2}=74V;;^}37V#;3016uV}kxt;ADS|0g^>{*oz#Sl&0GRI1 zR=jEPh#+Ru_$GZQY4#wcxe6fH`-?@p%&aU0eSMkBmT>_YnRpNdkfTj69{&&V7=XgS zMU(ab1ph5cAV5_&BI@e^cGCmB3#gx3H$1n z{Vf-M(}xU8{?bB~4O-PcK}b@+s#%W@ccn@8%kH=K<0$2?w1?6;2GSkGNomycutL`C z^JcVCB;yB}NVGoBqpsy({-~mLa&o%6+m^+A8yNVd!m#G#WP~rOGpQySU|K+_Z2<7` z0!zM3?*&%Z@UZF#J8+NUo?Ey8fp^_}!mmE9+YhSdi%w#(c6Uzr5RZ>3 z)0C%$TfBCNiXEor=Lcph3@L%eVp3KA?OV8wF;K&luqFUXqV+BfZiDBm&2aJXfO2_( zrKGHE>YA?pMbu1edwW~K>>26S(ia9pMOc&H^=3NI41gwDq_dcK5w$5WOfe6McTq(8 zQX%E*cQ2L-vs+I%cN>-e%1}d)iy;&q^MG);Q|?Oa4Ss*`OA}>i?iT^bAq)%*ard?G zJpCu2yrNBVkZHf8a9S>X&8+L{QkkkG?5qcF11w=F* z_-a+_AYot~;5YGf&xgsOSBf+P^3&hcRcb!B`)$&E`nNrFifltis(XxtSbk;&wii!6 zip-B^V@4k!L{8E5I7tC=KPe1ZTwFAGWmu%+;1>mfK->{Qmx-!H896xsKLRQk0Id&~ zA|EC(k|1$Ndn3yrt7@)2YTu9uLj2iTv{Y)(LMqN@Rk{AG5!wk>Dcrl8ep5m2f(0VB zF|jG!Ss7-(Ed2>EqkJbT@CX%PSX}m%0gu@a0=tx0yNj*GkZ}3GHCo{W)V)%b!D*w$ zwQ)Pp`4VJq*b52@0O9LY(*YpWaxn6~iUtL7{nPh7ApQ`Nik9~UV#%J9yS8A z=`r7%GiD+9&H!DB<}A9qN_Y7~d<9^awVX2wpVkuCYQiDss%ni(xTx$}j^n??jfANDYWU{wR4n$Dyv-vNtlyJClv^P1r7?VNyk zW%{6$C_4Y&tetxLHo$cQa&CO1v$c8}ff)bsL(XZ{;WO*s)v~zXH3ZZi(4ih44v{&! zB^t-a3Bk*=4O5VdL&W%BdI_|oQa#SQ4K~?T0G|N|#?61lC4>vGp!kl*i)B(yk=Y5s zVljP|0Mn|it^IMnHxH;eC%@+wK;o$ubx%x8s4G1JXoNoLNd2H~0|_=dAVG$6T12wjTkgd? z+cHxOcipa9mr?HCi!_c)v#;$YJ=*n^Y1GnUx44no+bQL=) zE(I{LzD%y0+3Z%)U3P9uP!0QVapmDyh1(JwCamt{t>jriExKr);$+?Z#`yOoU30~g z9+N*!%sXbftN@k*U>jM)YV!WSX8}5eL`E-7TbN$z>(?*tvp$mZRNx6`$W)sGuvT*C zw-OjWT-N}R|D)9`C?*eZiu?O}p7f%sHvx+-)J-NA*`MGVtHE4P;(bg+VIdLOKad8n zy6LOKru*jD2i3c%^@?j(ef{Wxb^FhAt-4fmn&;FIjADl*fY!|T8tBkumGDIx&mU@78lLHimk zM1U=~wY5b-P2D4`4k&?vcv>qD4 zYiki=wRKOev22g$6bAaGg?NM=r_v3-#xFLLf1Sq8#dWsA{Puk!HAKR32o*4x0;0vf zaLlFEe9&3f4azOj+)*Uu#QvIkkGLoLkR`>aHX4_nI_bu2!kaDu^Z{Vau^0jDaaHdJ ztVURqv6pmVC?_JPZ(W~&2L>B8SoTERr!I?l;}rVps65=L|S(%ynTI|ak z2UArMV#5xqx=}tvNcdo}=^Hn6B)omw;Fs*aRFm$Cl)H`oMD(D>s;t@~>=;`h8u{+~ z{u?<_t3#=6RajFC_+Ap=;>&=w2gEP|@R7g0IfTKH`udwdh0@3bQt0b*q^bs9wjuiX zaRIb8&HT#7%6ipkaVw%)q~l~Z{Zm=0apVus@&Vrl(36x@RBM;u!%Nq-W@Aw`={mq= zM+T50;VH?d$b+b0F+hUV)d|GYO7#P+P{Mnc1W3d&Ti{ccAW%qy-8fOg03|JL$4-k$ zRXJKGCfCKOCvEIk_ctd@LCOuiqUjWw!L<8L-(JQzJeIiP@y zSAd2)xP1z!ro+SSOuL+XBkmQV2QM=_dwct2E;}iScm==<1A|wl(JlTpdH~N!8M1zV z)P)J4U{5_a;4$U$1N0NHA+CQb%f=9f0$=y;=FH&_6bb$-7LrFc#eM(KYl+&z zuiDApQs!Qd+5w{kSd1o=_k4hdp{w~^5x@|j)SUd9M93Qf`NU18!a@W<=+A5^Wx%~S zTJ52T?COgp|9c7r`Wr%kyaPrE_sH6G?t?G@vfO-pLeHPWW6Xj8@%Fb=DA`<_+eZJ+ zs5nTKnb(}M1)s20Id#MEn9^(#$G3s=bP1~qX5zNIi3e1^My`yyn;Tz(?86mnLXB-U zz|8?O58(6=rAPYufY8$%IduZ`8UXmf!lGtmW-_L#CTf(lcx(=jVW99i4a(mAR;lkP zuqU%OT8NC4Q+O)EKeBKxd9j4ux2V5mXgg`;M1tcq+G!lFt9U_Tgsr0mr z0t*kc_n`rNkoOhD#fdFSFL4YS-t@4K)f6-M!O*J!wdpvJ`IWa*9Kz9BI^C|3fWf;TzP7xjn;PQkHZD zwu9#Z2EcY~FxM49Yz+hMD_|@}xz9COQs}Tb>S=ANFp zL)L@Vg8v>AGCg$bEIBnhAldS20a!U;m;)XRV6Rk3)KRkT=-2#v%j*jgp?(Fhz~E!P z2Xvrw|1RFsy!UD~|Cc}cS04ZaMLpK@6!8DX^AYH@vDI2GuX$a^LQ06gfl&tIi0Px~2~+6xirqY+S|Cko3Zv3YobZn(*!q}o_LfIV*n`#K zsWRU=;k-|x9&I^kR^w|wodV-}#Yf(}{ngjF$AY~CxOHz#R?oV#D9#!rJyZLxp>{`q zZdzR z#lSt)r*`-7wbgZedB-`gI` z_3Ww5D(gsyM^EH`?cyS{KLkS|!M6zTVu=*uApO1AponOx8A!DA-#ePkn7~@t-4thv z?f-QL0OOqlp#9B?h$twA7FX!t#P`E$^Zt|H+Uys+_3Q{64CLkwCgWHdBNdCA z2~wX<*+iV>sTODz7iPURwP#XMk4~IWzo3>--IPfy=KZ8Ky}#uBX^CWC{g2%ORbj23 zm5c=lRHVv8+he5q$)z`gosK2HRL_xXffW6mrv1*&jcMQf&+QrA%(qtX>mM!{{QvTy z{<=V>>Tu`sCXWb%8A#3F0f7$KD=hhZEqnNPpSHL#eJo zIjB-@lND(yn;50SYW|mYgZqa?Z#-UEd*f;=@JMCYpxaa_6_siWSQ?$ZpcJm?dY6yM zyr>z}l3-Mvp5yW5&MRa{B1&wVx-yN_r|6bKA2ZXqe3}nm%aDqMHtNd+B}vZ)Z#hZl zbH(-aNJ8HMG@dV}Ejl)BW}8c?Oln`#e)=l6EHOF0NUJ^hm?UQ{1&4(02C`LGEdKFt zzTHjw*~*NS!^o;_rHzIYJ87# zDWNXyYki$?h+1}sIrwcM{R#c}aXe)n@;sL{c9A2Ak=Wd2Q_e>`4hVaiR2 z2*mT+>zxYUxVXH0vm6Nrs$R7s*_t%cZvzz@@Y7?{4u7^IiKP$||E}3hrrQ{D< zNsR@1mRZlGJKn9+Yr zj=$Sw|2z<^&nu-Ot3DWaXq;3_tG51((Y5U#B|IGYbTFM)`KfHaE{)76GlvBjVp?xg zA&GodebE2$S*;a*@hcq&xz;)Aa3je`Do4sozR%f(&JHt4K`HYjKrgs3L3?Jwn%X?E ziw2t;%o0^;?4=NOERa{yEa(kjpGn#<6fE?gsvI+*G%xq}M|n?);i_mm=lX)E`#XJ0 zBd85-*|dv67Lm(-Pp01l+FMj1&#wAD;60stnDWP!ZKY{fhy7n#_^%%Rp95(=fK;bL zF;63alg&7$5B-?51lhqFu#u92#Rly1{ScNwqM-_A$5iSyNWH1e`UjCH1Cl`usnYIn?yH=GHiVX{fAP`KX>lyn?g5`2(!#Bu-#&(mV78>n6yo!(L!sXz{@fV#(<6U?(VRupaL;Yy`hQ{$@V+oRFAY;pYgsPnLVc=88ZEWVX=EcI6~qs* zsd_tWn+dIZg%F7~VU9LPSdS~#x>;MGOpe$kGT_kYSWxczW>2ALFd{l+9iyjX<+5UZ z5E&zC^|pFzLM=5iA5=_)HPYRb_VF1v)r%g%Bt2@@S;y#BTiqIw!CpNQ=6;=yP;Cr# z_*nPu8V~#q(}w-*&6x79o9&m-v~`l-%E!&4_To((FNwrP`BsE$MCL{5rvC!D|!JxWX1oiKWL z3rR`yB`QB-H;I1C-(w-P7tx~f^H54stEV?JTYYhin`XuMy^#(DBqY4Tk@Ez&4W|l9 zy@E7E*}v`tBsAqiOx$E#YV4n%EQ)ie{@FS{gkcj?31H7t|`8Rsnx_sp^Ux0sdb}rRmsd} zPY+98h6Qim$#TaOnYyC<-S+zD!&O-apGLgaA!>hnI4O3KhPuKMFI5G%m|`eCuSA$i zBf@d)g{NNRId0wOP#vNa&d}Wjtk*&JYN>l9YW!YdZ=_?*sD2pFaPS)Ir3%mlq}-T% zY4l2@B1?HZY!b2I__V>~YcWo^e*XNMEu&FZE@uoYPG%*dl8v_&lBxiw`z>A5*`MN% zr|cd`edvSta>41@-SR7+sm+qC3a+o;*%a@=CBqSA%;jw+B=Z>z5^k5X5+KC<7%8td zj8+NR%v9i0VNGZOAFjyi1XTCTp7*~}33*8Y%yS&x%lyl`oEH9fvqD&1rJq85EvO?y zY>X3K8NX*A)!faw-KR-2rL(9^NvXd0nDrnPAGR)Dh3dlwuOLwby?>tp{5)Zi^6#2` zlLvNO0Z;AZq@E=5?;5&j0o#wj&ZAO6UBRI?3A&=TNxzZ4zG-eFGT}{)3yg`AS>2;S z$;*UVl81ck1RQ&vci5A1x;71=Z$7*m#+W6IoUa{kN%d_gR7zE*p!AZV*7K#12$&^j z$t{&6o{_1!Y`Z_3Dqx5U-<*F9);=HA^z8s2+A?6rB5Q-DmzPb`BK|dw;_!LKQN$Ux zV*U6Z;oa$Y(OO;LKviB2IFACjk9znggsaZ|rU?ms?rWkJD}{%~(epj!={LTvUgFpI z`nAk`7pd&1L`0Tf3#sYE%%^Fo_Om_TcYtVyWTXr+RLA#@7QPf-as7SC*&6`>_OYJnDX@>*VZV{R$Q&u zMR;HCj5EA(D?)UCLV59&iP*q#OcZ{t-_!}k27^H5_&!DcDTj%Xm$@3s)XV4 z9wxiD{HARd)=BBfb=WL_2}5bSKWL^rMl&LmTiSz^zjbBH2Q5u?s>Gkr$rePxgv>YZ zM32DUinF;tx9>4*p?D3{huOT_=8{v3bNnv2Qugm>X<1Ggf{v1!(>o7H9(umzPahzf zTmVb8wYpgp3Gzma{3d$VP?x(}98`&I!g7_EjvIEv<18EDj^{a@?}OtZmgy08L@6wR z4rx0GyitG1w(>T@Rh~qY25m?B);yd!Hss1g_7$ef3ydz16(SFU*5@xS{Neq)P`iI} zFa+0?8#wJ1%g2FrU?bfb*5BkZ-tms2Wfu%N^~}V#$~;}Fy*7rlOA43fs$Sf_wDqKPE4>=cL|k>!E{fvg9A|6E4_cdPIC<_$c+obNU9}Mf`$u$s^HqVB<9KX z86NWWN7Pq6Mgj$AJ5rEfF#?nUcYbwZef=P|kF|94^8TyaPl>klm{gIs5dl{qZs&zK zL%4Z02(+};oPkX>(9T+)cLKtTlh08x$HA2CILgw!vnHD5C;P^aLtMTYWz(#vr4@`h zMh;$2M2M5vzQH@OP5#Hkb8yWX^g7Prvv~ZpiBQ0f{KSm~Fo(P^f_2rBpzN+raQcR# z*|$dH2^DwP2h!s8yQRZRUg$}->W-bhw=Nl!;*!1n%2@xNH8t-dJfFXXpdDi?@68i! z8G>mG`5b-_W*q-PtRO$SdU^Ashpf%z2j57A@Y$-`xmEtw4bkZDJXGz{A$Meat{MAh zF(+#xgO>X?p!hX3DxdrvyY_SJm}e68v8`Qr!2Tu5Y~Wmnc}R-c2|d zWhmO{<%HoLXm?cnGknh;7WFJVPY)wW#f)1TjeT`PtCB426un*WaYplQ!bA;S1$IG| z8X%%3MeXmkDp>GcJmM0BdZlkhlUIS1b_fM)og#(bOO-hCS^K93^Q}XU^rBDm5aA@n z`&IqW^t~kVtuWSAe&B;%T{uEuUOmwB_%1ZWXznB^BM`Vn>a!$m&+(1QHIqjN@w4P2m!1 zO<~PLKpaNCalV$mFg@~aTTJ`$kkBAImF?Z}=RwK6({iCWftf0TJJvb=`lGCO9U2MC zl_y|g+l4|&`4W10tMYUizmEBuAh4%-#)b;$e0s!+cd$dmzTN%w!~e=SzIEBsFNlC8 zo<;36(_NiBkI5cTw9p8Nn5JS1?)TKP|0-nE_oDj zuc6p4_gm@m+dvAZuLvPfhg6fN+(#lAPp%{Si1xUstX)j*k(XFguu% z^hnc*GtWJmY}OuoX*b}@W*^miV79!#F#ZYO#St=yGJY3fCf*!O=lv6_Ap=M9;0cw* z-3`OYVVwdb(-}Ou~+fh8LUj$Ql%_6b6y#70GTJ#9cyW34p?Bv&M!~Xvh z=-_~3dX`gu#FM(j$NX`7fku1rrppSSMtqEXZ>w78qZ~}N?53I=*Au~Ck5dr~|4AwpgZ$8_GSSaE z%CYbBOV-)>zieb+Uk4AFeZR#@U-RIAeB)x*X|^L7?88|E(`;5ZrD*nPZiNHWa-mk4 zMrn=UdsH!tvWaU1guGef$Wb>V{xm6K-p>5+EJ@qQkOjKEe6#r4989c8XcX4XdUvy^ zS#1s?lK-<~esf@Vf6)^@kC2xnJZq!pGry-&+P=5`bqTNP4bF%be3L|xwPVr#V{{1{ zj~bgCJeo;5tvfEsCNxsc=uFK?dUUQ@&(8erWo9ILd{qIvik4MI6WWC!@>mlo_Ar24 z)fDeAG7C;GVA^N#=hhg*4puM9`f|rQmiPTN;ljd9wq%oWm(TJI84b+ZyD{#aoTly0 z;UV-IdBl%55d4(znY>njte7o$SoS_lb|d(DDR$;Xt9E4eUB}tb9!uX|HpmLICoW&R zc5=uxqlIUfX~?PCJ-IRK%W}UX)EzdW%PR>CUGf71-1qyAzjh09qu7WAw)2lBk?|u%lAab(mGM=CUM?Hj@!w&i)&F;X~vLS7*M2zz2HJ`JtV7K}e}?U%z(wM?CtQ z_f5G3fvfb#GC?1Mg8ErACDT-Tz7c*X9*Cwa7wdP%nXa#+#T2CSH1*~~3l!2yFQ_+~# zpC!AJ7}!*el1+qIdT~ZH3a6LgC*4q32I)rmo)|tlqzinSGXI{)b|1exIOCd~9e>)1 z?zkID4wYw%09_G$_Pn2}Df;hOfcE~XysIVt)Atl%-|1!LaYoqvDGkJWDizz8HbmIG zqk_@Iu(dVf!rBr4-M8IHA3E6gft>KPII5W8i;hZv(b_k8HG6y!+BCeelkRs?ww+N$ zjeBNW>xhmm5)s{VxV@erGa6#nlC|b2<;Pvk{qDLOw_`nEQA*~6Zq6#Cx%w%>GhCsE zvOMDT-I&Gw$7to?RK(pvr<~SJ$coeSb_u`yqx$)`^mDVlID_VCs(gl&(AFL!(T>6K zdP?EM_v-kds`sFcP0VGV>udEN=KTz^I38MSWU`AGl-er}cTrDNo=~M^A<~P--36d( z&pM)d0%(3(e6c#|%dNlKX-Od~%d{*r>eI%p&y=52tj;SxBENN-W7%AVBfTt((BW4jHw2j``;n?C5h@9fQzNXwVd@ZaN z`_eTdAb1D0-}4wxA);?-jYijyHFKQYVFAAsqs2MCE-Y$M?2E(R7Xt;e{)}cE$~qQ> zf?J7Nx8{{zky?;be0HU-J3qOH>sqaV>M2&o13lrqv}&9+p$Y4-{XYzg1| zV9PRiaj^Eo?3VJ6dTrnXiQP)Zi>IQg-K6H%*A5pN`)pP`p57kOt3kJv)RaFK-hPt~ zNSoGu=CK|nA)S`r)HFELr;@TFZ|M_VwnMplk1649&A0fN+Z-J0ncP6)$XZ^UJd7vU z=_VWCbN&=IX!kZXUHozjy_#>M%v6+JvZL+t-O;aGiXC-7-i_{@wD9Ot91}wH?A{3D zZ`Y9^!oZu&ffAU})BdYN8x*{TE4XEaABzCSp;I{m5mkB zx6_8kGfEQ2iMI=4l5z#&J=bF6Cv(&_r~YpAZ8F!4f>^ncI445$eh--A?w4#bJy$tk zqwI~M+=oX)QT-C)DP124Jnr%dCS>P`OFx*0;w_1L%N$~EF!)l|ywA<64XJ&LC-mXQ zMKvrAU3<+t6ypp3!3i}(d$&aB((e+e{3DIqOYr^XHi)nh0y^@mIHtEH#91TPUSFmr zH!^=ygzOwY*&P23{EvYfu9!ZdcAuib?LT9#Gn=)do;kVC&!6Xj&(XMSVly~vXXG#9 z8#*fxSpH(Mr|rj63D-XfEPgHBQPpL{*l@(rFDTIcwx~&*-8q#$KSa`|-pUNDM+x2a zBqK9pJ<-DnrB4ssj;6XSwiA%BN79$`Nb+q=x?hG+j}I#ueP@dnM`r{NIfi`8Kh!Rg zX4MP~Dy)^_PkMAdV< z^E*ftEBlSn`gOt{%Lfq@H;{8hD&yhxrLbDZv~x801_oVCov(S@x5h$5HS0l{xHML$ z42}ps$-Hg3BM2U8HqS(T>vBQ*a8t8=-J1>$>xeMCu7H9Qqo8-xcf-~4|Bs5VjBD%N zmabEz(Bck-;O-8k6c11cuEmR6a7haVifeEwl2F{;TC`|zm*NBq5L{pW=f3Bhd%x~4 zJHMUvtY_BDtO2_lg(d|Y8Ql$eGKyT8-0k{ljA->0)GKkBcR`YQ%GXODOVHFOG} zv!#xs`a9Db5R8yG<0kNTLGW<)E2^isOkm$TV&m0Ip6WMvN0F%?*M74}r%^M-*~mFm zbH>*w7vb!`?p$Zbn)}tzI$j zRxS5v{ac{bUXik0esIg6_Pz|0$azaA@|v0_5z6M&@hexVTOa-j^}ea}9o2f?^|5;lv3-H0>v7AH?S*H?UNuN%$-5&pnN(SZj~21^+0xDLV%UM}aqLf&1a zc-yZSkX7M*xWsS%R77KzG|Dy04g}Ji1lX4TS~bgR%H#DrlsuRh`&L${YZaBsX5A>> z8cv{GX{RHVX88t1V`<+IBP=_d?Gt1d!9c00(P*^be?jeW+VynfP2zekh2Dc!9lAg8 zqYaCdWa=HhmVE9Z1&mtCTtWAT?EY>=rK7RCoIv6N?!)$6%k(3ABDjcJR+Vi$uTmZB-fo*-U;Y-7q!#p!7tJ-#Ao)vJ(e%j{iwKwWZ*0;lM?4Ma+()vW- z!+&{qqQT?NJ>al&D}@v8{Wq?+(Kk0nE+8%Y=7K0grSi#_yib@9m|&frru^g0k{ggK z-S01`eehwOwCmRkgWtrTL_Zoebf6J8Uy_H1xn1vNC?SW;GA`+bd|c@4Y^hGrah+Qpanc>YMwAz@J3JS(oKYUoMk_RA_DPL*&mBtm~y$;JowT)&!L}x^At|xxJ%7 zFTWnQo~%j)rNPw2jO5gjR}XoV#W?k7u0|zC5rO2XLIAItf!hlv=xffgB~NS`?@t)}sidIfX!O-QhWB;wbb}p2^a^#!OoM3Y03kAI zmm8y)vKBgfzEX~d{_5#Pw+8bEvmu|IvWe?9<&u*OXVFg1BF-?V%|Bhs#iM&KBMRDv z=4Au~7jH@H%k&gWczS;Oqnx+*NiJP-pl8FOdg`Ko#<^O4f3E$tmhGJ(kSSutm9?JP zT3&_fPDUbihl(&TDrFp-nwU8g_(US5={bC09f>TOqxlf9oPUaB$6piImpo*1W12;q z*6waegq`u*3drBxV6n59uIXdUHpABYzQdcpuTz zUKCt;pII^aR;7zyMHB10-OHvKYvk&iB@wMp<2#P7eZmf{>0avzF8zI~Sh$+KYUmxi z^5ZixrqmdQ%6`lEQYJF;*`dv^tXT1 z(g%gK>fZ5=Zo30T59`j!rU6N@3cHhorSM^_{7mu&4yXbGIWZP*}pxE zv=4kDdkqpOA*Ui)5HuCz4UUL!R-=Ae4wCGk`QBLDa(|@o87uh?VbjF89cxN%!Ye3m z{1+B`;beXsW1URx>G}_G=`E$AJ}I`cKe^w?Jx&o{*6>+)c@r8}xjDT=QT==S$Q%dn zmHGKXKZk#2zS;AG>p$87C)sDb-kSo$!%M^Pmd=x45T%4)hGKCH6ZI9dnq)=LRAT4C z#;b{*fEW_Q(^o$cQOZ?ZZ_VoFwKl-S~~7c#245aiu-&^DBv_ZM{SPA1jLI8oxiTesZP!&p1?`6^D?N?4sWJSZS&wsed&I_pAC)FqGw3- zl8X4{EW%~F2byp8in0Dg<9f&Bc&e|pMeKy<#e6k?i}0<#UE^t`8hR9CDz@T>=xFEm zA4|?QiGFZn4~H1_`sm&>wc8W^M(DiP$;!2&x9pN|4fAru{YlljdF?CLEqb-%%I5k} z_3v&s1}2+}14R0Q62D2L&@NLR8!mR}l3mB{>oZT0fIWarXS4Hz+-<_Lc3ryQgSfTd z1&%X2!P=P+2;3xOzy4g>Gq?|9leLx)FfF~P_-*dk{E!bl@VVuRH`Y?v&g;Us;{;7Vra->Mmfr6ashT7r&QP34<8N) zJEU2W>VSN^r-*`pu+8tq;09{Q6`ACA^CyXlq~oo2$f5nUUyV=2(YFJ8c0&n$>)U%s z>;0ZrB`8OR9&yy(GJ?V>6XuDa-C~S z2FUp_&SBFyV#p|Fdw3g4=%kll2Slo`8~hrO&FHN;q<5Nno)G^j-o}PJnB!;Z=#TfMmuKiDCxUhB*#QCo$_f9W0Evox0C@7eTyNO?=OaPypJkI;+Igl+avbW zyjm}XQ_MC7j{(E16swY%PXjXbRW3tHt7lJ$$EcnzRQvKFC>I76w)L!9G9#3ni5^_X zxdjrfv9MU=N;C)6-l9pKu+fX+gvoT&U-axGA)6be_nID~TtO-+%|^#1T^8PH(e)C$ zf9B(=51xQ3u+z*ihu!=U`84rkV3}T+xs2r%-CCPk4i5r`?)5qyGZnYDw@NJ$a89-M zD~ra!S-4aTaQKwbcnsi@@=fe3RP5>HbXgrF{rk6ZspF!ql^Yu+k;aOoViy79m6)Fo z@1N9I9^K;06v#X8QrCv@ZY}$#^Oa#I$y(Z{_`u}++dhHsr6|>F3;Uf43m;XXvci-EMJXhXw@oFC z`}(Kjt0HG*0#x9X<6I}8N%g#`t3fchB4j9Ul4=Af5CVSD@PRl8_j!{y(s2P$V;^9| zMDXvX56L^c511RPq%x8WE+o&lc@6p=y3Utm`DWl0y=~pr)kJ`*KxM8Oio0bL*~JM5 zM0%dJb(VTAb{ZM1X0(Ch$clq7rg29mlYUp}&$d-YfUd1coA#;->eDs%01j+d+a}e- zQj$PXWbD3v_m#k+W&szc<=ek}72bUH%kCIYOBGpklo`1|+zr2W2kItkvyY8u7xEm?2$T5p^8nQ#ONjL}hiA{UQgS}B> z6mHNeAr?ZTO6dg8z1xNO-S;ryl1HEP%m))22%{{gQ2}SnVNf6h*_6J;1G&VJAyMVo z(&s)QR`b8*RvirKVSjXL78h}S#_NCH`<>}Q>WwH{@;JUciN};_YTe%v89)D3ew{BS z%2HE@Z}L9Rt1YSouhved#bSTDbz(x?P~1>TUQGvkRugAH->~@M8+KLRyokD@g!VuY zU19UX(Bo&iNh);=uL52XOZF_x=ov!}t|=+g%-am%`h}okEgLUMZT5iu#1fc~ssm*= zn##UujVEhi+TY7(_5 z*4A6OsD8g!Qk&A9^kU8=+5WDP<^Je`43T48>wR-d$s0zFOL2dSI`pAAjk%p5OUJjO zkIAZADb7FmzNm$}q+oE+#XTw6$3vJrxQdKDwXK^hB>| zn~$g+a9z1W`+A}P+41`%qvlsi(MTH0xkzM-@{t)X8 zb(uw6=1hthN~zhj1wzr~Au;;whMbq%k$*@zE-4%BpZL*;wK>;rY43O$XX^4QKCn0} z6tt>3D5W_u?8qm=#a<`Tr+#Zp*WSA@Ywz>YWCeg5j(uZLjQBz+5uoou{#%YODq#JU zg5~#3WFjrRK>^(v_8|JnVde)p!MB!JIBp$o6tJtPm~G&9W46sY19X( z8`H4c*@bXGTg2(DL=Ai`0(CYr=@S>k)RRIf)-k$*f&AQ{xhpwgB#vnIz>PW|Zon4p z=y0R(D)ZgHh_V}BA+dJ7EpJ;TgRD@TinAZ4NIS`Z;sy3S!= zNb1*pJYHAilLB0nHR|`%3`wcqe>QA*IgCyMj_C>QBkNg;C|-qCs|2fQJ?4bQnPZ^^ zh{)nKkF=4DNMjgPm8(#$k4O~mD%I_(JU9Mmx|V$mUlD@ zD+=>+N_@H+a$+al_0pNn}~ z8Ot*$$E2TRktaHY)sMru32g+liSRmyx$Lh3ck~i;G@r9$es{kO!L;K$>eH;~&0heg zJM!HEYM)EKywG8}_#xuuW}eXq4sp|pk)ZL9SCew(GE&}IfWn85Cm}anBEo`wzgw-n z@`=nODW$l(F0%AqU}a+advk6r`CRMYev;m}VF}?f`4r%Wk=o6(HN0m&5r~^c-R5{a zWNUszHqS_09i~@JDe4<0=IKZ`pJwRnAxLg0>i2{#i*a;Jxu>b^oHlKOl>y${`?&`7 z7nFU=9i{D_Q`g-w&zN5w|8JwdAO-FeeUNpR;OSc@V zqdMu~VE6NL%1Um(CY16=^Pb=83rRGJqQ@EZn|08;kb9JivUNs^gF1zn!X%q|H8CaI z-KtmH^L%3W{YlM752-7aC9)>pg*wx@UcCX{z)t#O9l}g!Un9<{{jaZzT@BL3hxnu} zsjua9j%U>*eowSHp{=Ea{|s~8N=P=k;icE@Zyu=)x^7QqAId}S%tLxY$T$Q)J4D%a z;&$3Eh<3h{^(Bx4KF&~09do`%83W4_3juJ_y<+Kynk~Cd2^Bc$s9?pb=FSx>;v>G zXCvlR@WC@4zCXJz`+?>b_>zw1DO)C@J%fg+KIU(0YK1{&t~DRTS7IGdfP^9Z;)y;h z10)UUryouXlLTCc6L^rW%A>1QQclNKxx71L$r6;0=5ASZ#x%A(yL6uB>I{W1OA?zV z>qAR-%R=X2FEbc7A3lK``re02`MZa=oz@?AZMFR>_gmpPc7*D;1{S}`h4sr}I1|OB zc^84+vpyCgD&l4#Sj-6A#0Lnmru}qX(99AFO9sJkfN!408+vD+Oa9~n31_iR19!p% zy~CUUcd&l;@7YO~JT7@^ia*^D1za2#XHcg7(9PIbpn&v2yd17}QW_78uLPZ#Y@&`&&|K)NoN6FR#Gv8A zK=S>eh zAtz%mXU_x$_h#Q6`0%f zJ3rJQL~4XO>V%I}CkQBJN03CLTWMN`G%G*YIELp*-4Y{OE_khb8=73Wk}XFeU=n&zhPn5-ny)@-s3)hwb=7*7#x+C4F==E%(}RE*i(oN2)g3!3b*n@qu%;oGi`pL;jt zrqLJ0S)i31>d1NsXDhK}^``rQ_fv&KGf>dTP`$oGjUsVi{B{)3bBZ0e}LX`6Z zpUmz0O$Rro%C?iUu4H&MGjc_jZ*Tb;|LA?RQ6|r-Zidg@{7uEpOSL`YNb*)rbq}N( z_CQ@L70s?aBUpG)3$AVHjI+MaD6qw=nSuNR265ofLYQEwdA2KfwF{P$vbST2U8@T@pKoIX}^!TI4WCShun|t*kvJ? zTq!6#@m#E~1hOu#XsS@bkFmmd3x=cD@^vb_Z*Rpb8Xr|BL}a#~qtaA9xip0(Jz;w> z9V_PXg$A+~Gkb4H5jBe$Zk&t{W=yfKv$92)GTr^EZYOemf`!UyM& zo&5wF!n?pTD7Q z<{>@GnN$<-p49WT{9_w@7+Ka;0%`<}r(IR*{=CsE^C&_MU4GY%Nqs-IyqXk^du8B8 zxp)q``@3$C&q~DFCi6BMF1lr$nSjktY~#SCH@_3(7w>CAu^OCEaEV^NW)g2LikZ0q zkn}29=)dqj88)&v)cU2kG*l!b1I+S@hTP#Tnf8|Y1M#v~7B)mQ_S1DItG@=y{G^~H zno^ljCo?v6G6Ac47(FigA@TMzM|^EDj;o?%71sS&p!S$PKVzuljHalO3A_zmi&qd&iMnODNbB z{Z-|;40vT*)sZ1+QKTR3-eMb98K(~4vIQKo&3FwME%#WABZRzm>_7taT9>xmlG6T4#TUc$`56IA?GkZ*g)5lEZDjRtcP#%#sZke^aLFBAi z*h%>0$$1H_>7{OzH>aBRXQSG$nRYrOv&)L+Z6ETq3rrdM7}px0u+^a-08HfiU#_6l zO7v3sI-2*w1L8dhxY#KM6gy^^1C;S@{eu=uv>r1{mz&HvjZ|bi)9A;xw)NQ8?c4jq-FF~e=P(O2kVMQ06o38=+x!|6y4#D?tqkYz3`pd< z-SHHgT6v>gD2IsjcwdDz(?G4UC==j9(JhG80yf1R99# z9$YY+c)1ECB)F~5i}sbzb@d2F^o6}B7IHGZ{i}p8ZMNMw7-Q1GaZ>FvAgJvLgQirN zW6oU(jwYX{atJxEeq!RQad)pq|Bg8d4t31qNdHweR^V}Io2(Ty-(bE)TY3qAUXmArL;MUd7SmCi)ilk) zjq!*%j^^2g^zKr^)XXfn`zM0*sWL{2_Nrev^Jn&*S!6l3unNCyUEbdCrPGD$t^~jJ zEQj?qV%4@}cQy?mQ855t5^DQuKy`GoKCYQMATks+|9)<2Z7PwArBIc9NQXblhSxBO z08W~3_rN^#Ib-gyDI}+it${--RZ)tWYo@R4!j70mQSl-Q-kbt}ptHwX78#0??l&*1 z%dGT9_Ej{z$M>z{U$(zg({tYZw-?|6E&YSp+tn}1Cv6`bwHk$l(QAK&aVvH0c?2|u zs^5t>mhJ8yC%9iWH{H-FcK1~H2M!E&JwpqSFlEsu*u6~;H|hO;wZIN*im?=1*XQj@ zIzcvamhEy7`d4wV59AqpR%QtEoJ4;wc02MfLX$is!vqmt301kFX;~my1Wr=D)ly;| zAu+dDcneiwH5)-fh?y?RIx70C!SQ(I@2+>SNd^_~6ZnD~kyJjB5UlADNos+C5y zm1V8M-7YEt!NYK4q3=lI)Q0MgUd4bC`|Bf!1me%v9rgI?-C~XzPAuH`0s4e%T+JV~JlrhSEw<@K-|n z%`*cGQI{mWkq=D#rdwPhze2*OU*>&xS2AW5GDTJxiXa*K&5+6nPnH^O6d~%bukb;iq1=w7{Vx*?+he$}Ph<=%R zu0gg1I}t~I3RZED3a?eXNWx?K-=SfSqUNf+Itc;c|GqK)nGmG*F1VmdbQoVO0-^!y zb6xhBJSs~hLA_&0jWGUmCQLD&Q?@tyM%&HcVbQkqj(Xs`Bv-``b@NiQy0IZ`kVOkc_4C_WLVvqsf>7(IlnH8W$5{sOD{2%T?1AmFR-9V-OI@ zzz9@6O<)NwA!CD6L~{=-8%Z^70guh*rUCr1+uE6f>1X;-!_+f_gaGWZsDJa1|DR&t zSX=(K0XuQY?@C(o+Bv2LtZ<6TT4@O4uPS3&UA63YA(y>LjO+yYL<~Br*DSD~>sOJP zB{e#y9Xz@X$YTZw&BwR9n{p4NCL?dp$IJN>XbI4KbAGHKYFr0UhX`f+HLFivF`dqh6vg3>Ym; zkOes91=kaqerD$pPKqvIn9CejllAQ8feu6ul^rKL zkNXnq3FO{s?LzzeTze8fD5q@0a@#G;U%9a$;Wc>u0Qg0(3@0Gfv6YpFAr#vHzg8kHD8Vk`4_^EK_DJKRuXTz#35y9&a3=_|I+ zs;r%`*&icA$|Q6)O1tX&PE9;%-gc{vAMTZL-?FCSbmZ7d#mUjiJ}935zxZC>(=gub z>XTkCV_sFT7`{LCi#<$n%nSOa7%#)|IHRz9b2?ur3x1kTn8dFmm-`cjNT+)P6hh*c ze@+nz$!xZ1gY&;2;D7~-0kK9CRe$IQ@#FsnDC64)zuJ1ZuY?3Jjq$RA~nr?LZIKFXqxrrQ8{NICO5+Eh*Kd0Oo z0t;ydWo$m9Ku@E)kFR5a zliKbzNt=z|^opaW7~8hJisCWH;nrBS$;^64H`Dh|+~2$ysv5sRS*=LfgMxii*ExV` z5&WL&xxQ%|YUIN|S4&wZWww5f!E~OlFl>`SfoU2rfSVSqb(^legD@t3C!1E{El;jW zN|NKI^hwhCkP^;3Efr1Aj1z7qKkVX}MDe&uJahZM5B)zCb>A8JKq$`K*J1q{U@@i@ ziACa0!DZ5v`kp_QNyhzzB@@4HhY>}Ph?m>MA*AJt^F)Re1_y~sU*3zBC)GF+sQ{H^ z++Q2@3qb=%ScZS7uzijyIs|}BGiaZe9|sh#%OAI~EI5jY$S?*hY;wi1RKW1($uzAiwSp~xDBHgYs{h{t4h$Y??)Nu%e5C$%@W~$Q=p)Np z&_US24+2fy_e>4&&Zzv@Fk1*AxNgT*F$ez1PZ&;80DssgQs=LUz9;LGRRI>K*c6FBVzvGQeo0N^oGgVp>A zGALtfae}9o)DRj()?ZYi9+qb)U_GA2+SvD>aqM50>)=JQVAw4x<(Vi@A#5j>>1_&s zuYT_y?en|=NbGv-w)i{I&|p<=l_%C%`?&P6aFN|#aFCfOQ}m7iK{>;_L{=kERtDf+ zNk8E|6IYXaQ40)irGd}LP&WV5k^jz}gE-<%OmCR}L@sgdPgxFI^$7h5$-#%GVc7z+ z_t6K=gcC`i*D?ZRTK7erwVdLHBun||y5}M|U_?lv&L>xDg`%ROO@^G9XeQC#P+Q#i z4h9VoUZN_#(HQ`J(|dktJ8ZV%qL1`8ak2z>3@c)$Js(A!BtKu6%sm9i%-U-=Gh#*o zt{C^WU~vqh>|CMe1N#sWH^EVzG>ZC+#ydK%){KDUP6AB4jzJOow@gNJGuLt0Myfes z!={zYjT`?F!2k8Ffd2sRfutyyxqedZ$EQEYewucym5UQ3?wa@0#4pUG9rJ0vhhZ0v zVCJ!`OENn#*vDZ`no2N7%9DiAa(sM~=wvRs5YlI-v$2ux2xB-U1DmIIL4qMx0jfF!ghMWZdDTIG&!av2JR^RB%I(;8vjf@y`HUmMGv>JRy9@G82 z-?VD_trdK&d|a&JJu{X8F;eh-eZ+vFZsa0@Yyz8}Ha&4*6h#{I`5WsH$`UF5$W6_k zD_~(VI?Zr&z{h!3s&kxyi8pqae{=ogZ~H^`{VP_e(%&X6^VIbKk>^tGDZHifo@_Z+ z1{(A4d-9IeoRB-ny{13j0fY@)#199F|2u-_bm`CA-bw^?! zS!rIfO*v*-y9L+(t&zbCCw}s84y=B&q8&=lWqB{gwt@n7o@r_94Nho2si!RXy8Z~z zIyuRLnSej?^@F})naJXMpS)txhMl6XN?%H_3-NqZJd5qIZq*$)hxl!>(!=o>gG=+E z;hwCiAA_rq71l+BzSW2A3p`-e{2waHXks;?YY?*gjS}jTB{H*M$XWwXV=~faPIf`z%nfD7*h2qPDv5N4^#xONP zVXQF4T(^JonExt_m-j1(R>tdP?Z*aK9|=-4Ba&Zp+JEJpH0)TXNN+QiEwBehY7Geh zk8t{0+-da=reWWrrnviJIPV!=euL9}FH(_?FMxxdh;9HHZIVa&KA1p3vK=u$0)Wv4 z6b~vV7EmCG6QX>Yp-K$&c9uS63tZRVdZw|WUaPo01y2hK!-I>fE;7RTaKLU;{sVtp zbL)Vo8k*>r{qrD+f}$a_ev*k5UC-T5{cD;-2Jy{5$Icmq-8P)$SpiMu;~*Xe;Gd?Gk6a=bsp7Kn>B!ACE%ZpRU&?B*JJYrpp|&Gp<*pE&M6ms%qCZthkeQCnD2Bg ze*ndtDJJ~WznMqi21(a9w4p{nH|T2P^j3bJAiwayVS2&0W_gpu@1QvU^JnLJ;Vz-| zh#RZ3f|IY7aVxFJ*v7d~xoj>tf61EY3)q#8ql$!onp^cT=-c=Fsji`p_L@FNc0cjy z&Ih*udr6AFK(8WETS0olgnDjA)rXj$lIE=s-2#@9%!5V(~&m6is~D~_?+hTuj8YbB+mZ> zS|LLhLbcpykiXN9(i|aL?=Ab^j7FJ?W*~9Blp)!YF5!@iptn`6#h0y!awdxUsQ2(E z8Q{et_u&kY-iQri$;Le8{FW!vMwx3Dg)U~7xPqr!4HpOAaIvP@IcxNd$$qE5nNYS~ z`Y0=&kz~BB;Uu3ZLjjghLcYUxhcCDah96J}>a9@}WSi#(Yp{HyW%#7=tmz}e_!Y4K zIOq!`Ok=!sv3Qy+yNsJ(&#Z3jSGE1vCC*~wvtm&`;gF69R!dGryVyVFs>3%v&@}>g zeS@)*KV4-|5^*c5VjP6v%d2A&CadZqdYQL{c;$Q>a#u@%d7~a?*!=i^Jot?A)2*v3 zb9sR(mvI`i0wR(OyP7K^gG;b^YhX?kt7w{_7nKK~h8Ot}YMMu(X05B-;pKka&hmaQ z=sRRFEy<0bnf-?1Ebzaz1wkKiIpAL}k78Ey?@6b*If-_q{K{)GZJA3pF-0ATjMa7j z9#0lA(eF%}dPXd{F-BPsy4h%mwm}r=E@#pwACgjKZOnj!M2RVU^|zgrHCUj+e448o zLj?lK7XF^mN%_6AXtx?L$!F!B&l5@+WJP1+33=jr7DWf3q9&jq`_wt{_Ay(_MbGQ| zX>gp%qKIIr0#{jYfpMX;Oa7m3kr>?$Q*)EA(Ll<1Hn*!mcIzU^RLww+MVq2LbMez1 zSu-|rzc%&F#%WHsnt`o$$j?xfd4oeNo_-jeOmguBPj;M0GFY%L1nR9nCRm*}PDx!p zT48=-$$n!IK1rnr@39sUP`4hg(p!XDy8EViJ+M;GOk339S#4_*Dk|i;NK}CItJmTN~umiGijYCIRe^@oW-)OisM~eK=)y zyVDon>Gkhyi9cCwy9gI)<2(se9xsHwxkI3$UGEnuE^GHWbd|jiv}W!Pp0^$MO&OU?OgA5uAm~7ame)^X4N)8!xT249bSy}c!Y+?EY2|D*#k@UKwPQSkC}DMfFDe!uaoX(g1Sb7oQLE5X$L$V7_JLec!TyLmBI=piCtIgHSt6oC zNzF|^hm*b5HrD*^yC|a?UL|!VJUG~b1P~xZwl#C=4<4=D3Lgf@R@`KU-`cZf3H|)I z=oK@UtukrJroPp7anH2otcGAQU*184$)*~Ff4CfCOV1Q=#;K;JPlzvRZ6z*fPqU6K zVY!s@6O^5``YV_&y_pZ2z}=2g%I#}`F%9gSY~eazgZV4S+OS8+vPfrki?~vrM6ix) zqq)4$?VyWK{)%;)L&hp6eJ$QDlL_Fye^xlA?{cKxw%G0ufzh8w32;WL} z`-w}x%_#rXrsao>of~yJ;P%)0S8bN7AKuS~qyyh7;_AGcpq6o-vU>Y04vZ^I6(wk9|ArTmF}a z%ufY=ICeKUxMvACgxQIOi=9|F(4PTGQ$>V^AwK?T%R9UIVnm(q58eog>;Z%AfmyCL zl0Px$oA~K4ofv|R+*LI&>tMqOD}P%o6m+kXkzBzp?5BlVF9f8{$Z+@E)oBN1wPqp| za#E+W3P|4E3n^S7`0u>!#C`|+$5a(Bp2?jfi2q)}(E%1ZaDM0Le6Y=);23UDk2?Z! z36Waxjca$Yeh_uc#eJQlYduR=lBc@7R!*^TOsLl;X301K*f&G+I&tYugYCW^k+&oo zEr+Ucza@hFT>ZoA&$HH$Pm^`$m-;`nN>3W4ByTlGP8#l%AwE>9vdj*XpmyOt$M_Ie zv&2;QTfZi!$ksw)>bV&o_cr6w!MGe3)r8gd)^ZGA`;cj?0nHw+BY6bQxXZlHT~8Ui z{8{!!C`z^Bc-W(^JdM7xDxuk9i#aCahr6ZFybhzcPgRH!y0Dkr(8IxzY;R-j>EXUk zsMq-z|J}s1as=b$jm*=MvgC_%Dar1>Ff8-&@xA8ts*Sq<>OYq);9LdR)UR{@y;zJk zE7K$|CHF=pX++u=M{-auzvjvwe1s*eBfbruUL2Oi8sn3ak@pWdiVtErk+aG2FMtbc zgdbfTI7+q`N1R0lp|1B9^sRpQB;IfN1?vnCR{HCRwV^;9!)|*W?7h}THz`AKs9s&U z?e8;*Z~_n|g$vR?ibq_3#jv}8BYVB>x3*~Y@T%cXh7?cV*RU7py6&AbeuJxH!ZF<1 zSrJ^5vXLn>K1q#@28u0ov)BUx=q247N+{@BT0@uYsqlCgcIip= zb&829PO)aRau2Qay&xK}s$d(6*5b$~0ad~|W6(X9tmd2+1Uz-;^%Z4e%7dT$QXIvB z=~)vgy#A7ZW&{@}QX-?cBF(1Lr2&Kz83cdst zNrAF1CZ}2XTEO1XZm<`Sqp{~DW|?u7Hn>KdD_bhWoD#<~g@8M;VQof#n1N$yMZi;i`!;>TCVRYO_O8^4a z$I}~qyT4c$zXuY2wGD`GOLDZ5{`)HL6A+;wkx_K6f`ttF2APD91LtSM$hSDPNw-n! zzlW%5VCE=)#-z;yUmXy&GZLw^axIA_kj+|_>cUeSR>vTB_iE%Ak`VK`xT$+$o-B9K z&t^HNZPaTRon-fckNeqx2P<%454!l}_X%Y~S0y1}xS4{U=Tx+xsF=?v~y<25R zWO4CnoqHqqP3_rKt*-&gUh^9fMjQ|2ec>2IU(oAy=bFJ)m;a{;%wGq z_wl4j0wJJ)u^mz_S}erFu~>L zn$w82N+^`}PGL9w8%Ky8*5u@CMuMavp_nq-{&GG)<0xa(!bIInL(I*!9E}z`nuwkC=b2Ta(b?z5n-E>3dL^ZX zD$eJRODN=(BWp--% zRK-swrqS((h^G~4&lol<>e?f?dfW^-p&~B!87QMO-TL0=?1E<-NVTSkUEK60a{E1{ zDyPWq3`0ncnv=^H1`e{A(JXi35VW2!yVoZM$_n<18(GL#*|yk~%4UoijU!SKq5fTY zYozg_ijG}ceks>yrdNu5L>20f;hFju}K zE-m9C$pNkG)fU7j`EV%5QSjZCwTP=@^qg7EuzoM&ezR8;mM_9^bGLVMwy7|^cWUFi z*4D*R#6uxnF;LIUykB$|F>=*2_;ZvRdc~p{A@1&+L4p`O-iB-Q642iumoQt(p4_iJ zHCk_Bb)u$O34Xd(Q#f%ol7lLYUKLl$X<4()zrsYzq%f%mu;+dsXi<1sg z6EX22lhy?D!#g4%CH3Z{dW_m~ZAi0r7fbZe@$J*R7Vn&{G?jfn`+aeem?W>0rN;;Q zlYwHA!_JF&EebN&*=9rL;3e4Rld@igPRsR{-twhsMAGoH>b&I39WlO|liDML`T0MM z=$6ANQp5q3>2#BzXmrf+TuLtqwPEkRgJkls%F#3iT*Ub;f}>Thif2{_GZh@;SpJbL zkC9$BHydyvM8uADRf2iX>XU-w38Gih)Nh7aeN;cS;ZVeW z*?d{_{x2Z-GdTR(YSpBm3#>F$_d85axK4IZ-)lKDYh7(A#iC`8Bbvl~JdN|Nd67&t zJG)z@pdn9c=;})fLKmxS1K79h$+J9N6e4$hDGWrQ35hKAr`+43m3iFVzh9QsVBu z7yO2swj-anC9ZUC{n~oFE-063+-qNd>a0(lZHw=lfYs{KH{%om`~XMdm&>)vmF;AC!YouRy@B3{t| z=l%;_7Q*p3N;PO!6ewyrT=izO4~;45uPSAWmL>Mwz`5?(^zzIf+;`)AHN7_RusKy< zSK(kFWH;r3kANx6xyq<$s4;%79-nL&Sqw>WG!Jy-0@Mq!N)Rz}^bpSGUuE<$8#)H$ zD_LViaW$$W=6@;d!As~R1KTmK#1*|u1+1!QpqW3H&_3mfyivd^OC77$eB&&A13kd_ zUp&VR2jpXW)1|SE>WE4qXN$DPZ*~1H`kzinvm`-JtE3?F>XTBVp(`kd#W?mQ+yLds zbZJcxIf3oxv-RvAr51g>_KeWgCcw>;iw329>=fV?204VXwAe!T4RqYLb{uyMdM=LD zq7Mg^iFJ7-{qG-9_!?YZq`BN}e67Bj3d80Gb=oSL=s+phD>y1>7n6Q1iuE~3`Nu)f zUiTf%NI+)lvt|Dk9H}Kw%yxa#{Se6}?b216Wupz6Hs_43C2+-2!~K->lqWzqrRL(w zj%0QwAvbSv^=~tYm#s=t%`zoM#fX_Mz&>;l?;LbBY7=m7=W8=j4AlP79&1G#M=$0V zxO_JUAR7qQ3|FgRRMcN-!=(p4meMkPjr5ZKAsAeX6y$rLgg1s2gba+1$f>3Pm+sOn z+*E&6`cJL?O5wBz^*A(qw7Zz_Z*WbDcK0}37Egp7=ug;Lwp|7dL_&=gn$&9dcqBlZ z#R!wXc9qXFrnYt`#Iuj8l%---dPqO3#Z_>8*UL8}PTKv7;t|+g@jl$24)MAw4Sty; z*J;^*s=M#aPwf6{SW9GXOlKiTa1uM=rq}KCIfm?_dD)IeRXp}@5qumGOi6zen)C8u zqe&5J;^2pUP*Q$!=T);f$lWwL0_6)FYD{c-@e0vfSG?zI7g^5#%T2;oAjXWy!;mcI zlhHBtV$kw@bz!Dq2V6V&IAh?(FQ`2LjgL4m(bdWu`_%H7fGB2ZUdMU4@vZTLHMlZj zJRhIuMYF5lSshfk)R0O>pHkb>FwN0Ov&ZfAoz|&JzGg8Y89W&i0 zD2oy?3C?sxiz#W^;ieiUC4q55pS0f!HK%43zE&n;wpg>k7mSf?OE>Z)VHx(dsP-1c zvWbuG=D=I*Z=V-X>5hs+SXZ(~`1PCq1=X*KV9yd}&QGJ8DI_#lLUorp{Mgp z{VJlC+sow`6X@#7o@%(Pu3wr+p%TKL)*KefJ9SsH!-q30_YVYamOhd2_!(an>s+cz zs(G5=LAI2iOA3Ly7!>W^%G+^%Exp*`Qrr%BJ>ve}rhg?)lLX4lHEEq}kg28LpjvQ| zcFi}cc-{=K?+4pKs*h+wLWV*<2wJND=?Kg54q>#dac8Q)7ZEJ!Uwz6)utj>BBk^LY zgDh)lm_K`dwr8%TI#y+^F|n9?B-?6lW_5uWp}4yh_aMP3 z!HQdPD_-2)X&^86d+&Ge{oa3Y&RJ*gJ$u%ynGP{tReigR4ln&z^C`jeC$)3Z!+J+Bs!&tjx;Taw(UoJN*%s_nv~Z-)N_LHSS)F z&+=0*jLT#L#65k&Faa56YX;#M=OPAU-Rlc5I`HAm_Fl{QY{F)$hr6@BHs#!NkywS1 z0+h9{nEs!D$7ptcH`fHs5+<)>V0fx3ux1L~zaY*O)Q7Y59?}Gj1zsB+BykIrbA7x zsv<^jlbF!FD^|c`xjL5dpUzzeHFCJfiN}yKal9;z75gkXL@ZPYVJyoz%$QgU3mA=< zNO2?1QJk1bfuHx8s&pueEq-F3a#hX=H;+gTCu9+>q8gU((Vdv_TE49TBKB8nen=|% zx)?P|>f0Ry`T%EwRE94BaE!SsChC&9%AnCkyME;ojlu+NBez`zR{sJok;dC7=#yJD%B6{p-irGV}6%X;X2HnJJbt54gFk}Cb3{zLk3-4?|#2> z9w~0R)x)Z0J6H&NI!u?SRI~6^k6Fb^^%V=1^{<$7SO9MqSIbZ2vhMbbZY(%2dDYuF zE@_L$*E?#k2JPB5^Ckhq*EU75TVIV4GG|t=leglWCStt4d&liI+OVqk$9Uo^dgSb} z;4eLT4Kghl^XE0U%j79Ur|^{To~F(6HK%N=H;zVC_+0s|FPu(4p>>J&4mYEOnH9trx=kUP?50u6ZWGTvgJ5XV zhqo6AL^EfkJE}tvYDWddaWk~C6}AouLTT6hgO5cC=*v7NIL{`n$Nod7!*&{y97jfU zM?3W)8|20BdnT>uSBRDo;J4fo5uNbuVqqP5y%g#~=G=Y9OwbJL$j=!Tl9{zO)ZhXl zvI+}E$;KUjxQ@J?M&oxcd~RdP{G(LU0GjUuw`BfU3#{4YCs}RiKzA%(=rr<(wMOO2lR?N>Uoa|u) zTo-iza&#)0f}S7d30VR#D-6?n(^-sV``eX;5Sn$q7r_M8?1SMKZmodHpEqnVhU_lo zbvor=o}^!OzFcD9x}Q7$UEEd_{K~!fHYkVy;a}F(T~2wO^WN2Zb|(?HF@B`z2aK~z z+sf*8-;GH()B5y0Tqp*ZdohXComg2>!)AJm=*3l0Yq9!rR7UUK(1T){O}D`jm>VdL z_;S|}UD58!Fug7@rp~b&6*5D%?gPsy5KJ%PG+u+LYQNvo)6taMsEppAPTTP4@C#IR zP~h_Q4{7T2b-ygx9TlWIREXS=yZA$|(m>nI8dad?QD7QjtFbpvi-bm^lK!UvQKTKUs-B4fd4@f?ehDu)TRGWO4K*zS z0zTvB5nSI~T%2z#OI>UNPsN9`*w9~jE8Lb~CUc|P*V)Sl8v?RFNGaTB6pnt4;0Men z2O8ivn!8TR-J!fWkVL`zUer|w>u~lNTU53wDgsX-*s~}WtRI0*L2+|^=G-DXIOzI!pBTP~U!in|rOGGBYqVn^Dx+_OiQG+{og@o&E$b@M3p6ap z1Q*+*B+!C}1=hXubyXi_WrcCU%~+~GDAUVaPzUQ&`bMe;FDbDj8l!6PC2BWF?$efwQIGe3RA0%To1ql{bA?Ki(p zZWBYhTC5W~jTw6A@hq!DG)BKAIb}|TrtA7rOF^cpqa9O@(quBs#dgT7RA*=Ud+$e& z7#|;vUm(MUmJ9nsMNT7ddez^k{sfVlqEJ4g^u!CXZlatN-voVOje25kd;R2s8AoUH zAv3!G;h;*K6ry)I^3}yueN6kU!n!-)dB&NHjS~^>pT*boN1`sIC{CxnPdK&wJM1@B zmCeTBQP$;F)`9s*p)v5>B0_0$=5_pT6fNq)`aY#@OzykG$SsewRN3|WDr-H;6qqKu;w_X~FwzY^LpQe+#@RnGSgrG7 zn-ke!6I6j>=a_R#)8XmgMob02a;6}%jKuzK9;n1G|I0zm>4#2?AvhiwD`gIq|{@K`oV9W;cEnBM9n0R@H@ZJQxyz<#AOno$10Ke@T!9?j?uDr*8qkK!6IidbtgwJe@ zU`Z3jjBH@WJ?&(Y4uiLRZH#&8;U40+Z{&CLShQ-tHwVYRUG^<(wWYQa^2O1omFn%M zh(>Ome-bd_;Q-prik9a`m#r2B2$Tr1Hm%Z>6^NGV*cJ}=OV#nBwOgA_k}tQGhc zA4=OiJ|eoCdiq zgbdI4Iha z%#_Ru-Nxfb7$?h`E11M>3#acgvFVTkm1MLz)dXVyH8p34r59B7GuHM2ify^4lc3z- zWuU42Cd){Du%HZD{o$(Yt|Z2anOu?Ij4C8>voq-(IemXIwsJ2Ex?fNPUiziS_;+Pe zOnsm{b4PKj1`#gkE~FS?W|&qgF9rfw3FWo?vv2=P@{0_8iA-Q@Ksr!8O?_O(!kEfa z>Y`0d;N&vg*_-q;@|IIaFG3f@cS>asPyi{>vl?dZI1MEVOepKUQDwNC3`0*`$IL7* zIB!hf)Gqqd4J=L`S4_~SkEWjxG6gq71PG8C!NkB|$Q}ZS!%OrSc%RZ*0!6cP<65xVbxr9bCa?rWYfqn;SqZd4ZiNbeG>kKRm7wIuZ)qGKwsNWQ~HVgOfPL$X{$QpSlZ^b zYx7HCaMK`k2e=^@agyGLy&j9h3-?#Iv`Ej7bap;>TS>1LryZ*AdiY(=&2-zB$X${%R6^@4gyzLXIde-+*^iegtBqmQ_*J6qIhKu z@Y_w-Eq;%5zEDZD-=oBUMoW}LL0s`Jv&%G~F}RHF2d&xA=K*o1lU^{;0S1B4xkP6N zIt(TMf5u%ir#EA83k1M=Ro`jKf z+9QpeM&p6JzCW#+t{LPd-t0{F}>*7gVO*3QK766M_iEV+RO`eYr^M~Rouo9uRqXdJ zOcq}cy2)#8JhNQ?aKV&|mI=F<*UH$T%uzvr|9*00 z^@cHB3rZ0a|3u}Ly&-io{g`EQ^R0=*`w^PdZ+40=^vGYH`v1iq#+6TtJsu~q^qsdHTRZblECfUL-kQsFNag-gEMn~*h+w64;VR9TZt=&`$WGKby1 z><($lfMwcUXng7xq3r*jGQzs`Fif4F*JV>i{i_7TSj-G{lnlfn)(PDf7vGheMkKIi zN4k^#z7yR|cRf-z`9;z~O_8^*gsX3vh0>R5= zMgnVVGHb@n;>^8OQ)D9tye1!Z?>I9fZ2bZ0T5YfdT`F;iifSTd=`1BL&6ELsaE{Vl zK0wGQCNF=8C%Izg8v|7=Xe=WNvn&rkX^!kt$S?UrZaGhE+rn`~IgfYhsC6zPexs3BbDg019Ryjnd zx+Od;bh{?#GE`xd{v4maL!y3yi~)Z^uJsZimd?+FPMp%sVfZ2zr)0#9f0_QpRoRde zkSrrXl)*Y1?hD8|44I&r95I#_POgBOt2XeLDean9k-dUr3<1Rc)4u+n^LGmo_Zt}# za|VB7G38K?0W@(-=>CRR{>7Y`ZW7CS${RSwQKC^W8ua1i*AM-A__hom2Jm=8A}pa@ zZ;L;1o6tR{cS{KY1!K=l5N+tj94efCUe7D6R!sw@;L<%ZsL=0uE6apVPvl3^>BX#T zRZi8{$W@bDx?vOOzQdN78H9ybG1~8%_X1C4^JyN%uUB{!5)R=fh+z2~-Sn;Ug%(?J z(G{N)PM#-E@t$D6wv`srNa~phHFRmv%a(N6x<0km#{co=V?5#OXS7f7f0ANx`g0ar z!ApF+7nD4-|FWO3u=vUJ_?JSn_YXZ8YrV0E@dSgaenokr^1@G$?Kj6QHz62I%!pSF zuecZK5}Qh0t5pb79SJk5qLcT6Rc>9wkZ+K0A0-i?x436C>&D1QL!zd~*Ya++`U8LaY{*~ZTFnAzJnz*26fX7ND~-b-nbZ9YLNRl>&HAHFIdlyjp~ zgew7Mid12h@|`#C z<4v&QOdf8_X?^L5eZ@U~kXDD7vw;OSr{}hF)jS7||2U z!HipH%f&beA!>sQc>?NRPOxO1K|e7+n4f5OOZP?6zDCBRYZxhB97yK#-p$OJ$>Ze~K`TIQyQ*CK6!*k%#4wyL z;5=~yae2sk*DRzGyw_?7<=N{Z!{kQV{Z*J}Ru$Krx(uE%#S{iPWR#;rnWO%Yn@ zr)8iSQLyviEywc!;IIJXhRdjo z!?8XQL%Pj|rpKl8ah4`x?-)G>giYP%&S%_eL)2_8B_y;1adIgF7I#`p~M761Z< z9}*hRT`*ttluyzD)ro3rBD!`TI14EFcLZW$F_APWXIfc;yCKs1F%HdrM*WMG0Bn4( z#vm0zz{XVcrdrm|0Z-zjez+O7g6135HfDipvNoNVDnoX|IZ<^?*TKocPycTV{eM*( zIq0yDb{ZxJ1#=I#Ck8VdXnmif`mvVeDQ^6E297dh8NjdGiM=x$q|bRcKk}Rw^cNYM zKO=9L#WHRObm8LSoZrLUD;_TpfBiIl*G84?c}ngAawyjA=845J*)A4*rlM}lz3hE5 ztX6Z@Lqm&oy!^5ry6Y$@>h6{o0YV<&G@3)2&xY_WO&Ddts`3TyvE12tw!HrhuWa=C zKUx6c{=1V7INELQ!nPvMi8)2`fZs}sYoUgk+K|C`tP$U(mEh)3#nZt9(!)tTXR zvu@w5qB_L=)sevrQ9)9a^VO_7Kad$wQbXDVQ{}1Oc`>%Fu=JhBYh#>uM_A9(*C#|f zX5@6U^8>tC2-{VT;(*sM$0DyOjlIYM92@IvZ*@rh1jKVL^haG^RoLPuM*`)zfvP_R%*4bWR z#htYB-2`=EdsK`P*t}3!%rKMmzZV{oZp}D!41N%xZ}o?}GYpO040`C(@s)Xz6KlO# zzK^?lB=Q831>hSi!l}@i8s%8-2+C}U{60)$0dD=)^0wb;b$K)cQb}mJf0>~PWae{z zn?7>-XT(pW=AESe^#3$Sqm>}H=bTEqJ2;j!9`gZ+^kIZTe(~8vC*tAKG&oq|6Vvd*+(PN z7*wjiC0-i}%dXNa*Zwd|yPsCbU%5upv}0}4P-9({mgUG6jGFyr*Dg(oLhEQZ4?Zx5 zzrXkc#ZuwXi7#^4UDxxdy?cL31ExzIlw;&EoJVu{yvr^H-bkx;sLZ6)><=;Um$bA8eczWyq zx4OKwM|&bNv+{}GFD!5GUFkXa{O7F zxK=)Mrjkpf>C1)}kScW2KApsfV(s_w`xG0s7gbM1aJ3p4b?1_wQT}{R@-sJPQ29XP zBQ_=OTo8Q6Bt=2w%3EA~(QZu$V#-Ca@2`;jc_+gi2P?(vyurVnN84g!ALnt0&xW;s zYipTF@UrUbhUYX^CR?#AHpv|1=SAt$?8VPu(cM9Y-@g<4I1PTj?B7@_ls$;xMf?23 zz2^lhT-%~~X9#OmoV$;PQb?6K{?CcnY$rxaQ?n+SlwtKik}=1IWI>RQ(8j&nLu+T}6LOY=YL z-Wk0hf$a<~FLtwIDG?}{`M(nhn3+c|(2Kii`d-a7CbE#+E_mSb9C`it<@7hzh>xqK zMk&#gu@kn`7T(`vPAV$)vwTNnmO**N$n(0(vkgPCs(WUxYUiSozu+WiGr-R)svsCE z#lm%m?cmO8Zj+QE+Zj z5KU(lYUkOL#`c4L0e;&yW)-F!b54^@_2*90%iX;sTTd!;Kje~(OZA*1RII@mUPFfwr8M(&60+?68;PP!`n0<;lx2P8W{DY< z6_sW!7Aj)Nb(&TtME|`Ph2F{zGEEfKJvKqkgUQ3k?+p8e=S$PL3#Q)xj67-5nV1`` ze5WZ=w?pXW_EL+{0H;kkP>7|(ZP1;tX==LFK}&Ct577zKH!2elS+ImLS2 zN~~;*KSfV)ip_EA)-(hixZ_@k`@3iG#p`A-8h0)v6{T^UPiI=0K$zwr-k)W3X7GFY zACd=Do58LrQf1HJd(WYSFAOE~CfUfwA;+50n$sZzLC{3WVl!VUlh66#X9ay7Rd1)R zmWDJqrOc*2m=kQ0fn45#UWDX`5)Q7Okm31D-{VVZ0V0{il_L8{fh1CxqPlA=Ge3g9 zIYCu0&GA0gzARh4;ciQm?kQ_0SuW{{W7XCcP*qP>pr2~~-rtS zJUTsr8wR-_G5g>tr-HXbUe7qq(E028}h#G+Z1hX$$imY!J3sc*BkR<6hr%3ilov7v!V-Q%}n7EQEUf` za+wz;M`xZ1RQiD53O>}de+H8tJ#)@jeXVL3V zgbHBey4D<~p{L%NEJHSo<+-t%uUy6|E6Yy}!uY~!S~T(c<)HD@S^?BK8b?bi@wWdf zvUgSFU%pn9{hcn9%*hyMp5K)i3oNWH0J-{GAXyxVPt{;XldRreSL+GL@r%65`2|Y4 z3icAwd4v4L_JK3vOhaED)o;71~=>G=av}YvIv_OWsRjnUh2W2l39AqGRwhobTO59eQPu2Ne9#u zo>)^C&RKvIstNLdcb~JovFBWB3e>kkCM&hefOe#o->i89ZOFfb?#z~fD6xb;(VH6n zSaqRNGJ6bLaWXAC`WX=}r>hOWYRA#o!+oyW%|9Ksr-GGP;oi&ByG}tC**u9CA z=2Dg9&MCq`~(Bn7%dBLfCfln@V;HJ;_I_qgURA4{b zIpW&~;k?#Mu}rxo#(ar`;MK$T=zqJSyGA-jZ7MBftKWHh9T!tEn8;F`eD`=w&tBBY zUCBVh%KFq$@oyC5()nm;>boHS&$OM1MpFh{<0-zJmCt%o>*#bDwKLf9seUk@jEeP+ zLtg*0y5kRx?0(#OK{6l1`Ung2tHQMMnpC@e{>uOC7`QF#dIcJl$TF4V78&fKrVtHlDAe#e(aIU5-GIA zvV9{lbU!H+3<8B1B1T8+&rV0w`%0jMhCz+9gbsVwwDWt0s}SyfG*HT7GHXms@$Z+_>D-GbjE89Wf#xh@AP&AO?`n6rS!6R>gr}a1Xjt zfEqh=ssF##aHWX{o<-`xo+goDic1WH=>cf76qyW!7qO0A8ZD{ibHIr>j_b}aMu*ZHRpTa5?( zZWb@TsCY({23eM~MPRA(FxA5SN}=Ni^$abtkXn|Dm2l7ebx_LSj5J%B-3p zmHME~(sB(cbC}@SUwx3r=VotKyMVIPG1Y8|h>MrYxdHg69h7DziP}w+=@Ey~DoFTE z*zr^)M)}6u**pm?QGo#+@Pd(J!y@fQf{9pIMbLFgEeGI;FAkqO%&Re z!#|`{=qcQz?iIo|v zX29NOeVss2z>?EfvwNzf9dG`Yp_bA;83BHZFI6V( zT{IOF!(R5CyVeINO$^FIju4+|7Ipc4zttWz@;BYkfX%u*MdjPE5j>C8YY4&otRt05 zINAEm*fC3Qxwp1JhtabNGvuqumyKx`gXfElT-XymJL<3*=k$)Tj|hdS-eCyUK4fRz zMUNkE7?_R0civqFDuqKtcx0weoeioTFb!VyyVTI({dxj&4*E7xrowODaj*n)3nT!W z6pEi04O>`RS=l%^v>oET%fIU2e)$pTsm!#h z&4g^PF-%?$vyR*HKR^`oG+LhLf};Z~ej3K1OB18hK8MSF4f?)aZmp%PA#pxr&i&ez zj=Jz;grjxqsHe0FBS;)tQ-*QEdl2=P^9$g&&Pa+Yo$@e-6gnhQ@ zJyE6Jnd(5oepv0;<`>_$^}=6%HOI;6`-`~LvUm<*6rXQ{tFv-vSP(S5?gqdsS_agK z63!Eo4}r|DD}|e2?nvwLrkzuJkA-C|?A7B~<8BaDeV~zA@0~KZV-p z&|x(yb?2B=or7=;ZV6y*1a^O{Z#wHXh@-pAe~>dEjwR<4+R=CFE~Hfb z-yHX4$C;}Dp5tqYDp}}MV+}Dz0ZX?|eQ`6kY9A=Rbe~yfKkGwG1)LTMN8 zs6Bl8d}bLY_bD_j zNFN!ENOyQ@M`wUxO}aQ@np~#u{CCakX)4osc0D=}V;|E135%!9x7ktl1-*48+_vEh zSWaG%9j368fwD)<&l$VCat4LYr*oChssALC5YV(*TTVKc_^Af4kXtTZKK=29e9>L$8BI?d+hbcj6=v9Hyjb0+9BNB< z*O;$UvZdPPq)%e{mwL#uA32Q8Y)7bk_XKDxy-zTG|AzYf*uO9~t!t9AO7_S>&>Vh% zlUk{q{aS4wO^G4z&5#_ablq%rI-B!3uh=g=zg`S2t#@3nGe*#PI4Bt8_E!FKzC6;t zyKc(ax;-VFNP#T>L8>^V#cgL$asCB2e19&h)KxXKcO~tt1py#D>A1owP5v*N5zwRP$Pa#^LdXe zQACXVj7vD{sXW28ehjr z&xD`CpbD((vA-+_^6wGZ@oUEJlOGhd6XtDn4Krx>G$dv}0!mr|6ndbQD*Nt=3#ETn zd%*Ww62lqW*VC*C-&6t+6t68ewAdUUa>)$MtKWqv9bvD zJK|Wg%sJCKFY&(R@xP%h?espmI zNwR1FvNj3V>xWNbfy`N>eKP%a#8PNbuDf94a_fr%&AFg54Q{G;9ON6W-=6{!i{wf` z6Yt@C#9+}YiTlKcf()I9&2tngsaTD)sJm6p;45EzPbi!Iozi^s=M#53lFD8@=bvR- z>C}QFU`t`pT#+E(V9!sX^IrVXXNTCVwW0^Qc;bCZbc#+s5%cN(_o0TCihRGqZDjtg z(w!Lg&onI!q_>H03_3juQFT0IMgqB(J3@DI{1c{B1e#Wwg1)vnoj$<)li36wtsD=- zSeF`{XBY+jZ`q7aM|s>3@7;=+_mrY+Z36Sw-deJtwKz5hE3J`^JzP2o8QX2l{;etj z_y;xx+$$fhL@(7iVwcS^hFik-hBAIdWo?h|@d|9))w5r35PNRH9w`Fqd;%Q=Runys zNMRkPyzU~sY|UK$*ZUG0+N(XFJ!Ym+?CP6c!KO;5Zf=y+HXD);kb-CdkM7z2K%6jzd2 zhGYZ|b&|EA3%f)7=1_!*VHVau=nX}SM0cP}Wn1oUHV%IM!YZ~&7~UeDPhIi1>XpSRyL1#~qTAC^G6`F!{9L8NG;6Z900j|`7%sbV83;AFQ4>8c-BPsNa1 ztLp*xTf)|344wx?{`bdz-}rfCc0wp_r$x2L$?rZJkW}5jZ^0d1^CmtLWuvcikW!o? z>{HbUld2(5$C#=k{6!kRMDBiVUY#;9=G3JjR0AZPOW!olgXg%VhBwW6*5K0ojk~5}RsdXk2t5+oF?;ZoSOHi^HXxJVoGD|bcLQKCv z_21cr2ZI+lFdzWmO9U2W3ydFk;#k80Eg(AD8y}5a}fC)VK z{ah5z-Zq85!R;L1XV>&*di|Dx=@PG#D*@6h@LgBROsgGVtBOVEb2Ycz^)^UtS zn3;0oNFNtgWQr2T7>k-4F~xal3pHen)|6}-ie|Xzv>k&DnQf91&kZ<>^<)A1HBGtl+KiqI@5iP*eDixit|IN;vc~;p|Vu6Js&DaUKI|K0UJM?E?+dUflf@Xjlh^bFSa^t((oAw^~4ptyw|N8X@-tViOUwrS!KlIe2IeubjFIt^5^ z@u%LFjP@!@Cyu3kZ?*CnQc98D3sv#nU!6fwT7J9FTcN{COM)e1F&Z74F?iXJ6RIvS z>$Rd~NqW;GR7Q{dncx?BeX9@yyYEj6g82^SI9sj0l$8nP$1_M@5hKGIYanyVBEC2L zbiAZqxXy-H?>_14$7DMSo?cUHStt+n-*Ac=7M@HTNja$gID_$wQRE9XHtK)>CENp_ zs}4zQofcOfUShQh#h?U;4#EwE=Uel#2APbv)sU|t+7AnAGarU0Pl5>NG_q{@{8P5{ zhFm42&2+sxX#Ao#E-;6uXUwQ}T9|Dt#YI)w&W!EhYhA7dVHvIZKnJ|tXrhfsWX7|_*zQUS#OW^T!cks zn*YNrCF+$JkGb{F!g{9)%{T>8OAdb*PN5$L2Qj8!sP0s2(Z^cO{Q@}rmLO}ZmjJ0Z z^^FE?KXUM)6={U)RWf3oOk$T`YdX%i)rx^tN9s;rM+6nY7ny(r?LPK8aR`S5)&@F(yyY$_$tmPky8~|Q?SusV%atoZ8nwH&ocCwd7ZaN^}_54FFw|#CK zeC|1;HEH4+(@H;&B5g80lM?GVh+G~R|3L*eF?0CeaLg-)>)DG6I4w!2KD^jUpK85a z;&hM?@_jpMsA?eJ#mzC1OiOLMOsN#FtjUG}E{GvNahhGE=IvGNR~cAHm2TVJRNW^e znX-}O<=FLy`M`^Y_8hcU1BZagp%n_sgnqNSX1oPX5~}Dy`}+R|Ta%|JbJ+**1)H+S zF?bawW^WAk+blFodWj@vAQs&O>7ZazgxjA5dee!>72@$QZKCXq&VX^neNPt>Gcv;G zap*r))0i#dLEHAN9eR~Ur>DDt(pHiM+~$B85QGq9mB@gi3rA}0gV->UT4Y=kY0|ZG zd9sWgpcy?X&fOvDA_BlYquqvUl=h7<9uCOMxYh@;z@wb#DWbwlZbcFytlu z4Kk=>tTE2yD_vi3;xl_$TB@e2r*hJz8M^!Xi1n^)@6nDq!R?CrQ>Kp zN(NM8xU_h8_YZ$ENAUm*iygKU^h~MWS&eb>@+nq2POVIJN31v=dVj51lL%q5EQJ%Z z?Gbxx!SdLsutl180bSrLkuU-c-kcYm<&JNE4-@$n3zNL4VS>k~EhFYFk8JC%FI>;q z29_$<73)N18YYIf+<4qZx1w_YgQM_~JEK|MoLCxV)6%Om2N1Rll11er4KM_v_C3?Y z*PdJ;A-B9B+FS%GRY$< zio)Y1B_*;8E7Lhsb-;hL0Mmrs-QDJOx~4UxDDqd1KF~rpt(dIhxGVqp#}vB?)8f~M z(a)!C7MW-=b*|CJ!t;IP^y}1R*s5z`!Q{H z1po16Myh*+RU_3dmLpZnxGH$2_Uil{<=j@>;26P(#4(a{a{_Bsj1?dj#qy6@Ok4rM z0eCXGcNx6O$jF$Mo<6bClu;~?;uqQ2*aVZGX(keE4&$Uyy*1Sryb7Lss^{XZ1=h%- zOaMG#@4pYQwA@B{%kOFkJyE)tOnNcVzDP{ufeBrTPE`?oI@1;%rP(lLFYT4Z#decy zuh@a9P%@hN8l0o+xC-S@@##<@9SfCKRBIdGa#0hF7hP16o*8yHeQ<7}M7*L3WoDB} z%P3TDo#?0})j#$Q8*^%nWYMZOO(!mX%i!JqIcg5!^O+;>DJQn#9(|(mcJR%NkyNV9 zXa`;==QE*z2lFE4Peg@BTOtLLK~+ZtMQ-8uHkQ6{@1+V6^CPx7c}lrh1`({TrsC5M zB`;Q45^=2dmou1I?_2+&zL8#?$aSZA`;_M9=DTYD=;1~O)R*#AF4u`jsgPaH$~UM~ zubSIlY&1iWAOt+3(2#Hw*0qsO@#a`pnNsHG0=zhd?EPX|^)Zc^LRWL@+*u0Ofamtb zr8?s$4^a{94)70em@@)5^A5E7w4;mC&kS)gz<+T+C9*rvTtCpD1&Bxeg;?ZA23wxd zNUcEW@}p%m142f}uWA<5(wslZd4U-AeDlxA`u0&A zfDmXz36v`~A;8db|C+Y|V=Ve-_50<&E6+)GXC<*)lu>iv?eEWdLzNnm#1 z%(YA!L#S;c9o#(IRQ!1f01x*bO1K>7LG|ieSZwse-uL|jVul1F_oQW*{tGpx4i$cW z-3f{ro>WZah*G`;Wr#nX3NsbHXgRY6ePSpyJJ{YHaH~yJg=H%a-bIfHSiX}^wk-%k zpJDvSr+PcMqWa4GoN$7U*_@@zQf;T~cwGX-%KLsBXht$o+8y*y;r~YmO5dVn>93hR zwo^8DkV=TgtDJ~pVfFPX!lk-O#3OY? zfjDBXH^~29P{ca+Y8ieRippcwURr(sOBJ7*u~DdIh3G_c&av{%O9}Tf02tEvM;thE6;#|Rf<#g8|@$Q_7at@CBPpB z2E&;}bhJ8kOUBCvh=;)1g*yPZEQPs$1hD^7It0w$k{}&yY~H3TX}l*a1u~OpJYyZE zqmE5fC}JOsN77dyDIC<_EGO@!Fh6w7o{g4bMVGov$QTuVW`^aC_6?>}tc{=5rBV6W z>!?mnf=t;1jb!NUfNd6E*DW>>$flp9VQgHsNVlX|)mU_ZEYJUJP zCI#@jp`Bonx4zXTdZW$rJ9}bDEYGgR{10g4kG9-2mFT?*9!h|ayw8p|{|)4`t&(lz z1`E+JX^Jv0ac`XG*n<&EzJkqbjRJ|1pSiyj*`KEmygv9Mo&1U^Q|&WJv4%Z5_E2lUOThNeUYWGQafCkP?T!Mo#7J)PUVDEq+a507OD+6CE>uKE@P@zz}1 z0ybfn9AP|K+g}pS6nj{RP7st@{+O7_Jj#W#`CNmC`PMb`ZtlbUB(6I(;yK{MOyhmbZ~4~(c`~O9sYnz0P+7@I*ZKSG0`P%bYMAy`Roa*E91Qj^k>4X zoBa@x+pVT+9Eri@erwTwMPj@$_PEW40huddi_Lpzx$CTRa&@nDmH2_CmLdEv+$T&) zn)dn6rut}1@_TG5lbiM+EEVk!I8{i-rZ@+>|DP91{T-dKZ~fKznF}WQ1`vnTI>Sb^>{K=%KHQVKDRUpSzO=F zL#r25zOV*~d7ryh@tQn2AEW7J<3ht5K}-{^A}Ic9aS~}h#y`}Q&iT{w3^pvDH8>SZ z1K+?mDN4V@$g+CyT$gRip@tF@GLwUu-pp*4)uQ`5@VnI();4pu@9oZQy+_dN5kha9 zz!kO96;R{!5&ZetTuid%C8cz+LHp3E=zqh6H^>g1+c9%)k`?kT67;i+`bT3#n?~6a zR6t-xSHPQ=YVh|)ti${_@6#n|-^bTt2Qil%;7cC;Iv@R-SO{1o6}ks7SvhVD#k@dK z&f;S&J~v!zQt3xD=8X%HJ6?jpTq|B?0#+sEh1}8@)TCO0jiW?_%knFJf2|PatMtMO z>c_{&riNB%!@Q-bjDok@jxn($@=cJs4XB;YvaRd>fc!R8nlV&1Esdqdb&V}rDJjjP%cItWc0QYZ9N;i}RZH%-?BPQ>aah}wDz6{k-Z9q9ym}0!;Lr3m zo5{A!=Esc6O?>sGbJCO6N5&GS@*e$#`9?dYvMzL^he4iSMf?PR4ML`W%iESW*46L? zX%4z=|1nw5Z0x+`l-#IG+O{05To~%BdM~>&-#vdOWSZr-Zd*EUbI-}GR90@8=_-s8y3hzY zM!*$jN+OJ~CvIQG7ZCYo-c*@UHCe#0#A!z7;k1arw#*D>v8M`srsDq_c&7MG)sT8G z#1U<9ep+;STo=6eO=$mD5Oj)NSEXi`5NHt!?vjD1np(6@=vM5qpZ;fqLUIs4YL*eA z;I>AYRI@>`5$xi^cfK*&Lf4!-J<^sS>=afm&dtgVw@sQ`z#8pn)}U5Y!b)A z7D3;%n^*5py%fp+!_`-Zwbd>CwxxyQP~3|YcXx_=(BKZirMN?JhvE*!9g4fOxHouk z2=4BX%Q@eD&;8E*KhLwX*Pb{d_w2i~gM?z1`4kWonTtvG=@{>~{c4tJl zr|VmBUHxj_yL;_!aL{LOUJ;Jo#>45BSwc{~*lZQ+*#)w~T5IGr2|;-X!K&}emqq8! zv_ZdtM3&sV#)8zPI_(^hZ)u%07gtqQ8$(Jjp?P`y-A`xMXdQQyZgGX$vl^zSqtc~| zxjQNPOA(nSQ1X$Y`28^ZmW)?ZO57J__Ji>)n+R%mZLJh*6Rhnok&Eh{R3HGRwp^HD zd-<>>-<{z}k-$0gY6TJeK8@}x_M0zI6zTU6t^<8`QpjrAQQ4lrY+u!Mi7hEO-r`4= z4i2g)03?A`jz(toT=pj-NTPRNu%v<~_3{E)*PeQk`=4_4Um?JQ5;Qlb@me;A2*S|C z-9;itSy5ikrhj`SG~OVOoBWMSb>qO1NnNF6s4P)SuEYG?CUrBVsG6PV9T%@uW%4}0 zu;1~3)Ah1>sIbGiRk4u*e+MR#UU+C-gXUGV;rqgH{4NgO zqLCdJ>Sg!p)yC+Owq)YOCqA`{JWz)XGT6qsI`&uTwr(86WO+jQa`;$#_SEk;F;L$0 zQmxd69yVQnvz>KynGf@@hP`L7@5n`{*8ZK|{1WQWQI{FN#BE~M-f~`x(CTSHblUlX z!qO!Y?0G3(sn;Elb7EJyZw0cfmZ)udBRBsFDN869Sm@VQUFlrD+$-5*B3+;Dq}00} zDp+o{`OvE`veo@^Mo`^$k;>GjQKurwR(iG-rV9zoCqS>vB~FQgnG5ZTMvCt*@+6~93H2+7B#gM|mz*V$ z2@`teM^310Xx?O3AGw-UIZ^G;ME}UvD1DgSh=}D7l)t}C&B6P5lowDcK;kUq;~NnQ^;W66 zM9p~ia)7yO1t}5_cZe}s7MaQV7OnqH@-4ZDgrj+q`-I@{@`!154u*v;XCeJ_exYoA zDsv-ypC6Iaqsc_`e=}^z>zpZvU%$Aqk&&^EO8z;1e6Tb-X)n8-g2G5|7=bJQ{Zk{+ zFf~f$$!vpX*l^tVI)>@!&3L8mtoR%)CYQc>6sbAq?}+(alSv!uqI9bfNL5-jY(YT) zAc*;eP|3K>Rjz;rayflE1@j8_atwrkdDV*e?W)*rgzuSdI^H%VU3)$**6I#G@d1po4L@t@ox-foMO(@sQ6I@Q&E;gnI)d=@%DisgA z-Z~CG3)C_t4ajLIOHnzbyQ`SdO2DfW@swwMhP?kWQk6(xkqn-@{#ib-a96{~D9>Z} zr)GRK#9u$CI6(!&dv?e|+rZ7M_l}h|*?u zi=a@EB&YO`TF{UZ!ezOz>y_viBFqWN5>0+CW0y-R$s2Xf;{RP(!|(`T?AfW{x+Kje z#%8S@R4XZr@|Y}o1Q`uVqo+RdP$}zWzsVq5ofWwm`pbcNSVC@>Q&#tq=3pL5Xuxi| z1Pa#DSt&5GrSbj=6Yeu%Yax9;vPUt(0K%07rL1727P7B^eRkW1ku;@8T3sH+F9u;fVhmS zBI^6ZZodzY8Qr~WtspKenwztMF7Q2q5UV0<^gU{~8p7GPGFG*)rVz|Y*krFGy~ltx z>BCiT<-Uw5pIVl%W}$;3k@3)mI@KChtT?!ewa=vTsO4w_eDagA~OaE(eVyLhpe zM$%}FfMYpQ^N?U1{c{RV7NXa%^{3JYEJ=!?tZy-i4jAGyC@(A)dnseKa#aXkR89K%;TT-3DaeBe|fvv$Bbx({^}JH^9Xs|P~t17@A zbtZlQqo-LC6Rj&K#k1g+vCKeuyqkYDsjlmaEJ$~8_U9Ey^XfT(K!&FYKm4G7_S<*) z6_iqH+cc&Vn|Ou3#TG!(ilN^TfIXL7KDdzB_jb{0_!U2fsrjBqoCUA1R7OJHnL2~o z9_FUft2sQJL@29+)LeU*IN10U%hY>0QC2oF_dCh z)l0#U>4}+Dhs&Az8a5%vlvCg98V}bYqsL^;`qmPxdYyj9*_sfnVO{JDiYUSOY>&|c zgm6`Lb^gk7F9v=Bhv@ux90c_ZMNWHgCWlKFb$)F`^sh0t(#;CymmvJQem77&V%;7R ziGJd+rc~;Y-^ykL{h$`*a~n<~@ChSET3X7_q3mybL8Y%Ye;iV3Orri@wxKJ4MnN$_ zHU<;nlWnAJ{DymXES!Gmxw&m(Zr3PMYUD|(B=&z@BDzcOH1*4e){AZz+B_-!kP0I) zFha-@`=BatU&U;8W|6J7os0?k3Oae_jztQ6BCkKv%*ZR}-l2`mft%!l6lsz~E^ zYoOEa?DMe5-1WQ*OYsF$r8l7^6k&BVTcEG(6I&SGvz=BN_BI-}#A&`<$-azt`+VR? zpq^fRHJMz9z^&8BDBX_N^CjwbnPgq_*_pgcU8^#dEbzH;e-ZZ0b}e?;-_%`uiaWZe z#!rtCd>Hk0F}JlVQri!pt(0rtEBv_E*3SU48+x#Lssb-mI8~b^2BWy=|MKg8H0!^Y zhz%Z?q?cX^i}6nfcZA~sVpLnBZ6sv-3bcv?c3YEnk?sjvXCI@DvU|@w+%{gZO88i>=GP zChv7rRkmwkBG(v{sFoQIVo4~#YBi!f%MFs$*~_^IMy`MV@kTx4YGv|x!1|nx z1QuPibwC{vd3I#bWWH!p8&x~YULY{oCSK_8FdlF`m7ZUMTahMCBl)DL!h-#=Dnrf1 zgW5(!hP2q4=}HB<=Ab}E{SvfjpFPt!8s|UhZu({P5$&Jhwi5eGkU?E%>_%HPjrU$b z*At4|D*(cvhJoknRDd`0tW!D?ZiHFZP=fbC@;hg)#5sj2GN0-wQ~We!7}HZA6gw@w z3M0lsh9+N3k_QD&FIA^iY?xK{i%ARe>8}Pxc|!ZHyH*W4m8!PBL`2)Awr>tr_Gm1G zUvQ$7YXmOo&@iLCeA!TYg5*L1cjIq7`}!$&WQzMY~r{~X4d`HcxMQ&Y?kg}_mRlJ7$LRb~$1j1y0)bV4yRMc7$7AEC{N)pHyT1m8=+Nh| zdHXWqb#pA-f3s9m;&gyt({VvcMCy}eudk?6-Uj8OZh3nNE^4<$|PgwOUEbUzjN2YOuMR{v1XZ)+VKrv z;jt1eDP(QInf1XrGJ=XWdJ1I45y#@WR>hX%Ma&NX{0Gwvi3CIn4XL`({BO-Zqj2k}B4tuZ^KL5)iLmF5Z3iQ!=0Id9-ad z9o@YKMT%iu9bHu|sgQVQ${&YC0$AyBRB61U0Xzm<9ZS;E?kToouLF!gu~vAugq-Bg z!UA0Ruw(T|1wb^Lkmm1jD$CP@{C;|NRs(W-&2$E$tIDJP;W!R%z9>_v;U?Fqxr9I5 z#O4E1_?dL;UKo=N;FWmerz>&;e=C++JML^I-@eXw1*VBf<*pRN+#1!kGBX{>2%d7Sb_dan860*eo=g{TIoH9CX+MS5xGwl0x%rmu6$ zX>bO)HH(y$N6YoQUN|+3b6Q+_i3BDWmxjc;k!S$!*)m~>NzBA-MQs!mC3a$y05?K` zAv>E1TY7?xQy6eNk*VG7MG0nL^iowBD1!p6FFD7?S^4>8A#Adsr9Dd%7c*g*{fpmqLoZQB*=rPEao%oOjJo7ssJn@p*SG@w)S*|%zj1_?hNPLE zY^v$hZ)j!gDD@$S3;K`_+Rb=54bi!8ZN}^DC5>ahD>K?bC6@VrEX&n}vbiiUywsgN z{}bKnuLm!GrvD^X2R!RgS>>2>iMLLTz*m*M&>>SwtRy6fa_^_;MA{j#Moi#aO=-5L z2Xqr3^?|R+a99lsIU}Y!^Ic<~hfpG_YZL75GFONZ5QP%?1k`8Ef%irfB^eW9V#U&_ za4>rD9Sh17Kf_V(s3^wNI*{9Bk@8GPAyr3N2~qM&H9q^$DB&Ow+JqRPq&^v zHfYO)SiKe=w|BH55=o}d3`4DO9Z%*WIs5Usju5XyI6;?PZj)8PD*LLT_47_aSpBm? z@q(-c7lQl&`|BgS_q306R;O8WP^PT_CNO{_^=A<#IzA^c}iOXBqO zmOLWq%jPpm=L@m75^$&(MXw@i>9iZu!7}{!#=Gkg?SX+MUcW2W+H8THYxtmpW!^9Y zzxd8U_)-GuvN_iGF!iybPKb)`C3u> z_R_>U%FHE~MWCIO8MhRT9uUW#L07pg7VJu+5Ky<@oy$$+$R{njd^yGNiVA~?YmN4J{1iai6&VT zv5vj^axF1av=~b`X2R5=c6$1e&#Ls=0kH!wW(GAq8PMb`Xx3>1D3!;0oIF5lL9*zSgVYkJ~h!&IoqAcc$!3Y3Y1 z+dbW5%y*iHuJ|GxJ$o&`i;sC6d)t@?(8aUF8sYNUUsFMsLybs_)omjfA2q@RyG^6xym;K@ zop`emI*F-+e|jTPbFHH!PX*7Fu@dp__4BTF>m_c^-4&(nMD*E}T00$ce6m`NN?Hch zR9&R*No$;|TL4rXcYf{qGrHbVe_3Y@ySg)N@(!)~a)`yq7BZ;(T2f!h=~-w#A-rh8 z^>DUug-w59hU&~-c9-%%{^fd_z z|3INI0K1wS%h|{^y#g?@p|Ue{FvlZYu?p?zi5!!J*XKX@3a^+TIG+)i2HJ@zcWF9SM*X27|#qMS;;?O0~^FTzpRV!^z zuEsyU8uXkc)DqTPLi2hY3JIPM3Av$0{sMVz?Ut$zEA?4q?`4dJz<#Fgdg3=~PoU>Q zm#;Xb(Mi^?`rdEX77!EAt+%bGJI?7j^Jre#naHomnkhN-kQ$i z+4BjJ6W?qbI{pTX9?dXPLb-{Wj*Lb_WAxk)Nd#R+aoHn28aY1)-PZf+_ya zC$qP%)_H*!D1gb0V$HuP0FFif@0|#bWt+wx@DVPtb19rmt;ETYclQv&klIUPVW-%P z!_8+jY4s%dq+mOQT zmeAr>$a6(n7Kbo6bmzDpa{qFKnp>-R7Mn+Y@1G-b*m|(xW_2<8epi0j;<>BiHE(OQ zG;1@AcbPQ)eqSLaCze|$0W-RYrPI+m$zp;-J{uBonI*_2kp~|Hr#6#c)j%x-AYC2} zc#+jv)ci$H1lCyyw+%Yt%Qi8n>n}ao54KjxJEWbp65qCU*owEj%&Rx}i&};Q0j`{L zPjK*;d>_|qBSPzT4GmxOyZmnLSY08`p0gL6S55%{agN^QCBy^X7uYiWhqp||^8(_h z>aE`OBEZ!q?|ouS8z$@BX`*D^v}b51Ygnxocrf;ZIQ z`#&FANEg7^=?cj49!aP~n+=sC>`q6l(y?g2UdpRnnriYXeX|~XIC#I?d3Z46gWvC` zaF)4bEgUfE#Vf{hprDwF7UzWFDH+pDry)<$aHuFu|LkJ*!D1CW+Yx#@Q^5@A6g97A zSkF@&tN$g0P7(is)JOR%4&ISvbc#!)3)MtMjPKQ!mu!DkzrcbH)tcVEiboxT55KaZYT{z zBgn53E~+~0a$js+6F>Kp%f`%E5~HhZPt})3F61h6Hz<_zko5h&k=U*o-#-J4SG>*P zU#3M}eeActvc`WLd8hBH;%Jb!)ujJ5fxs)KNPlq_3l}t~Q>MWbqF^bccM_dVr49KR zpIZJ48%*c@*IN?&mVX0OXZ@4^VI7Z-;(|Sr`VBBR1R#np@)Bi6J_UN!JVW|$k@@u* zC1h=PG{&D~Eb_W-tn0}ei+ z@aT_J@)dB?6=T{x(-TGQ_d^vr&9qU?h=xj&SNq0|-Y|T(c1R;d)XG_;Ko)(!b%-Um z;sDY5SkIdfon&bHTCvvnuSOm>W8!q%gz7Qk-d!cu_}tC)Ooy{&qG#-p>-*v~|7W9O zp^)V8TCXLbt!`p(dS*|PjRFb^o89fVUPYeTqEVy#qYb{xNv}qVWVv{)Me3c_hML6z z*ZI@W>_WqRNst%buP^dU8Wf{;GS2& zbR@XennBY+H)wmSY>65=i2iNwnQl(s70!Ld`_)q!aRPPRI@f-0c{lZdQjX;l#6#ri z@l~VTwtmfL-J%{i;YlJ;;#^btG0oN>vB+Y0hYC27S*e(OjFd3-MeZ_TxKagOf?YjE zmUB1UquN?Prj~v-i&?HLY2~m)pzX3sfh=&H|35Ki`QE&USJzs{X?phk z`)MfC{3+G>NgTw#`ui>rpZAJlEp0)%>Hyq+P2FU7VDz+SQh}RxvuS9QCPAq}zpM1? z^mxT(*;ycSuEuEc_bu#S8gWCh4DFXsAmP)4&N^D;pX*GF)`UIDl!$bBZ?IGWi6@U{&tF`K#eW?>j%(pjinG z9XIEy$NcH}&wH^xqC`i!VK4Tt`Q$0;~)|;1@qz0X__e+SmCT}~-|6pxt&=q*S zyS9Fe*FE{xFg~k0B#dVs^HP89VG^u0LdEwImCNqYBR%)gX;A2Jzf#Ew1)bEl`saGx zV-DyV(!JAv`iw(f6}}PSbSt!Ebr!c84zI<#;rZ7`g)p@W8XKzVd0RyGZAg=1*Jksj z5tR|S$P?CM@UqdZH&8=V*vNZZZAih0^ra59yhIJ~N?G}p7f8wAUFxJ$V$Gm#h4I|I z$fk2%nemY^87tM=$p8p&s^H@S=BW(0C%*%-6K3O%)g{)Bv zm|ygt)&NhVTTGE|-L>wVD7{Hs6o)->%Iqd)$Kww5dd!K#X0JqyrZFrWZ!95A*>?JA zVDB{WK?5^oh@7%QuuK)B*IuvAIxF8zeV|#AB;Tvi>bn0f}dQj z0P|df$_A*-d`9fm87!7ZG|_5(?vO#f?Ue4+s!*#{s7(7~a#xl*k?Ip-3Zu3O3uV0m zw~+km6=sZ7%gYD8=y!=~vK{g73yX)6N47YuP#lulLUrIBJ6SHz)`w6ruT-5U&~4`*KDGks!7se&lPhDbm5brApOiEFx;n} zkhMXBtE5a8x86DBEZ9o|ZLp0*V~`5#GqlDaA-IASH)FA1xsqVYq~vAXo0yBpa-p8ooX+ zub`yF!Oso=Lre1V0v09SbxRAMYh*4uwO1=e8O;8WEotDD%~PxTRwY(39k~tIh4qj0 z4GYj;?v&(_(c6%K+nW!xX`Tf(lK%-r|HZr9j0_Vqv*1^7_-BmI7$4U!@6S90_u9JF zd-Mop^_Wu?ld(YX!$os!K(L_#`v#2=8_+m&s?H1-13I^7q$tsC9ap`C=;&gZ9_YyI6(ut_9XVq&5g!uJuc z?T2j~y6EIL62TRrwz`dUY6fwG;=IHuQx+d6;wj4fAU*qZb=JI1<)2EM%JRRm^YOi1 zGC>|0&PO-9NFV^v7`l9;P)pB=0L%hWt5<|n9%m&a7gp2=CQZ&yw-PzZ!IUY2v#!QN z8P{~*0aU9)564PpGbEXNrRXc)s22Q5-c}2|tGxTAjDS7GUTvq!RVlJdhi3P;#@PjZkUToym4p%4t`tRp#aKfbu#H-c19?$a-6hF&?aQ;451{Y`lmLlP{TZmpsr zU^|Mm&kPT%`=$X|z_k&Pgw|G^7N~O0?hjPyJVjj@4j`8}RY*-}oNl~_eR?U)I%&Ie z|MybDECT#z<>?f)linHe$UuaW*N&3puL)>~=KA&AzN$Y5hsg1|H+EFGO`jxbB=6!C zh?o0x@tL}y z-@dLkUmldNwjFT<16Zn*Rpce`o6qOkf+?Uy(cN{DRkXf?h%o#9`tr;8a_3tOa8*Xv z&cDC&|IOe2tLHTt?|#<3+)}g(N5wRa$TsOGE60=nh!F=}Qj{~(9hTIomaL>zS*k!< zhPk~o8Ww~cfIxLga{$jsRFw%GQD&s@&?=BAe9z3s&A0qQn`^URQLeHX3l_CeL86p> zrmJrHdqN5lqCNcWsIa_pHZ9AjHKT?loSs>8isIl^0mDo%B}O{g;`M%iB_nyOK0ui- zpM09!@#|1r!$+-86Y@t@wOvSw7^}fZ>D2+Z1b8Z-#)# zKWRYjEjLY2TG$?+08QYmR<;K{&{@>%E2d|lnH>406LShKri^4_m<(>YA&Rn{F0MVb zwI)zA`%Eq=j42AOb~8Q_D!JpD6yoKZa+kW%KU}nV+{DpGPxp?#Ve}6<&@%p9JmrC0 zF5;V4gc!c0n|fngbv8R-ZMKP{~|O)nf4^L)F+fcR_atL9GQ&>#M+VEHAwiKixs)>?Mz3IDYd zlG&K9<=XVCWD9vzeR@A~(Zl{&9V$KL|8l`c}(Fzl^2pX$=R_ z(DRik1s2s&#J0WJS+Q@qd3?)%WIBmzoEc9q11f&(&5|y}#b&?rF zY-Sdxcv$@ub&VAF^~d|NScc-IXHAYg~%r zuZEe*Z=(?|v$K?CtCkyR5b>&@#Y`)I!u+Nlqfmrd3yr~A zE&oeJR54O$yo;$H&7)qZ$!=QokhyaAI>;XTyf8dwZ*mXn>Bb_409|l~6{(%UkL=mX zTw?%g41uNMKUmtlC6R(=E|C4CNHtm9dtg}sUMtY!hkS}sM-VBG#rA-MOvssa$Xv~8gxaut&bPCAtntQWTNU)afV*R}3(Oc5Gc)yk zarHkgW=|L)!@8af$0%VVeO2Xn8qcsg=o&y+gB?$i8sM@0o+YZx;@5&8OUWcl@y`NU z9ciu-C7?fuOTcU)8SKz3ql{>$?l{JWnA)&eV2c8v>@{3_6m?AClY1*$sFdB^JT?{O;O(%Aic5|K9Q8uzrKfrN32TJvCSbgw!UD zR`r+Phs1KL#8QuP-1)V@5#HOE^d+z;CKC(SHu|N~iY*Yt(^0a+O|G7CP`-f==y(wx z{XN{@E&1a3q27tG)K5{Yup6-GLfA!}@dS$hL~(k3JkX8gRvC#Bc_kkV$M9$}h|aLm zY@^mV5sG5LPPG2Mw;YzTpD!muk49M%l3~WJ*#F49**P>2C58k9OiFa5Y$)MwmVHVo zO^Bm&(pZErW1bxCP|_IxS5&=L3jN1H$7ax~R~^nmgYCLYpYZ4~;A*RWX`z7g5i6ykmF3vvu~y zN>@hq28QQ~dPk}o{Az@|9%!n9`n?Pnwvr3XZGG)E?f2CmXr|r6HI?C(XyS!V2lsa~4GJZ0)+w)^XL z-IjK);8?_@^SN2m4C;Qd2wSV_s-J5?lLc?7L!Op>;XXbHzVBpR78#$sF#wHoAd=eM z1Qu^xA6R}ZQ~q=2adt@E+7VDJKK%XrT97%uSrq&itk?4mO*MwI&I+ z7{*=c0lru1Lwl zGmHqgoW9h-d$`2>oD5on>(37`PD?^f%tsWi3HxQ3JII06%SwkWw>A2`7!%3kY@e`L zn>v?a&64Bj)`;4|!xM(% z#g-iDtIk%w ztPEF;8u!}>v#LNY2vy}DoFNhKn!MO`xY^6<@&zzfQ!#;ikV*7)= z-|iAG;%S^_kUQ}y?zabTtjd`4xd)5Cvr+g-mXuo45U)y)nf0&K)2@YnZ@%odUvVs} z?Fl73!3)jJnabKZ0KoH}>+vBh@AK+je%rj9)J9mXiK)7BI&uQVEz-Y7lb$ZxJ&b5B;S@SLm zy{_*G9zjaZ)}S$X&DZuzc04=TDc`93WZ}>uzwReO&Ze_RbZ$q>Q$9Zz?okZFTYFpR z5;|i+BQ@(TN-bL`K=ktxO4Nn7It@_e?(ellcFsgpmWi87Bz35@Q-d(_6U)Glvboe> z_Rb_Xn=22BwL35WkJOd z(UJTx%c z*x9eJbr`$&gWk@oYd8rzwL?cdf|lbN-IK`HWyN zt~!LzX@NwXL4Q6ohx_teE-1n;_IqR|SjJQUb}X&1&o^VF(;rzzBl z!Ne#rP?NwdKqz^|$7D&bQ#h0_XjTHB-=Pqncmz+95fOowfW^@6xR{N-z$6I5|G}4_ zPU&OzP@2C>Z&xv)U6;ft@B%qk?}JMYCj%<*f)&AH;zfpFe4w+H{*yp&H{t+4l zXNiCMdG6?Ti`O-Mz}N4^#nekTW?oEFLh1H=zq_-0&HdWb6+&xk*)lRR?0Mg+pR-Jh zgS`!s-$prI90xOxL}+l$(JQpbh9MHVOr{m0{(Tc?V5Uhu8iFk8L*lxQC{8P#RS{is z@oK@dasDk$ea?uY3KK5UqtwCL$VxFHWk*L0i$l2uk}F(uDnr$Sh3>F^{^f&TgT?y- zHn{~dlL3b*?5xed$+9_C%oh)paWG@wKqvD4A}}U1E?0`Vi<~Sk52w_r3y14IRZwW$ zsUHZA2^;alB}ym9s1dt7The;OarQEVwD?Qr&Y1Lv=zSFf29LYboRyvfc$RTt^v)oQ zR^A_lq%Gcus-!EcqBfSn+hGY;v7pxG-y*xB5;P~*pXhdYMbNUV5dEq+WW>D!(MLg~ zhWe9#E76#^Jm6KYiWM^m;jnE?8<-smnS7GXyeU!H$TD_Av9%#t>&>Kw^5PHl(lryT ziAqkTEQ94ZB!Z2tL5n}b{AZuJ{rM{}udLn&{pHXo^tB51Zbs17Ci}{vsO$n?#*A{* zQ))dV5vml5MbP=`8bYI&&ZEJ}Rwj6B1vPXTzL>HP4%#kmnVKD4a0w_n_5#WAV_uy*xy(-ihZz6r9f)o&W?|B`AXUJV4P-wKANfc|x{-IkGm7r|JG&vjx7z zTGL}m!{>22a(x5!Qg3sl{Pd>hFXtZvlC*Z7v- zSC%O!Q3OcEamcCCKlLb#w)jM{^0-n5S$+F<;E_nt+q6v_GeZ6BG)<}N z3&EC=_kTJ6{{5R)P#-NNot>NU6QLTcOFs!0!O}ATlJ^kg`<))|2#6~#D|0X#E@r3x z%f%_`gfb!(@i2$c_%{2T$PYJ&ow``1i|xc_io6t|?AGQ-*NbfcV(({lsPyevE1<)G zYlqO#`sgS!;aPG;Eg{lPP*lB-Y?4H z#4rY-FbZAeD#3a$*EWF9@8ZMDR!!JlLH7d|_rO)_+8D}iT-TuCQ@^}fkm!>^jO~Qk z@Poe3Gf(%pcm)xd>Cd|=T-WVQ6o;qn-1Cd?agRAqNH$PB&-<3&^WFD2fnoj=?*4wU zEHCXMJGBBS8`D|)t%;JABo4=mwa|1dLWv8U5R#FjP{#K&R^-ey8x!>Xl}C3_7e`G< zj@s(dwN3LG(5@!qj|KaZPy1O7y`caKFJeJ8H_Gxq+0cRK1vw;e`@zr8?z>pt*D`gT zzs-}oy{EVSVkvIy8WAJ4n^7O#-MA&^T~T_qzFwNJBwu&W@6%ax(bQ6GW_7WwHdyW@ zN6-35^zxG^BEFmrqp8AadOn&Z=s4s&3)QE^TtEHB8U;(Y-4{&DMuOlv#&AkUu}j~= zOHaS1$r+^>Ctghx9G;r*ftRMx<1fQI(}u1^)Ye}bWo~2RO&AvYe?$6C=^cBy{W$*#`E>;niT8J2 zg*454$VVtOhj)Go3XH_V^_n$kyvmcx4&_1@9?24}xa#d5=@axz_#CUlh~H+U)EHkr z;M`fX@%i`#D=Vg%`LoD&hT>$pISoegM=vw#<0(0H*@P$10Cw9HZTD;kPMM~?k0@jH zNe4d8{W4k6;I6dlci3w6x@V-Ba8E?%`b3yjY@1YxK&thp$@|23G=sm`JMMf30padG zAgrZ=dH97=C>Tp+%r8u-^ zrZIVt!XEJ}RgXYnx@Ar~K0qyu*QYDDPDF0Et;$w!DYQGS7`90O&_ALCPL(+rj!ux+ z$li61L?LS9S6KU1j8MqlR3B_g?YJ}$={8C>sPCn2ca>w`s#{fDXeUcn%{teqiOi~@ z={_-J<(Iv7Tx+yua)8&)6Rl z+ODG0(!&Ln3EzCWPAV2P=0elKklfyUZ`9-N=EBkM$JGVdTtD5m)0IAH$&b?Q04_z& z_q$zU-_{Ns4SfBx(u;9?T(x=ppQECPwKhw-y>TfV`2{`&7n?&af8zjh!_Hr@>6qTd zoBR1r^ZMVcN)C7zP?eaU@$fiJMiSnjD=`~|hqXq&@OYGpn{)TJ(@^s*Cw|{2MrC3n z)XBWxX%iH=FU|bjMXLr)e4n9HitLT(p|~ovg|5J*xanJpl9N!1p*&iQXVAJLKXejYwNNkbI3)13#^KWmE;LK zLONe~tI+?W;*B;)t!v?3xZ4J>85ss(ZdY#JbRolg^d6e20aaOKz5IU8BJ&N6U1SY0 zV_|t7U%NQjk23Qmw|-|ZRb*}y8n?PMS@uG`sQJX5y(;f>ivYucU07I_D!mdQU%oT+ zPN(U7H|hu&^gmv*mGd7`GUSy2@0KLxfPChRo=-6Ube|KqB9on=vvi2T?yx^lDvVBX z`Rp1#y+x&TxM&vfNxclx{zD$rS8kB=oV>fRwZAc&`;;bR5lZ_WYX(7eD~c;OiTvl| zp>{inM@gtHcDO)WSkNh8f1kK4p3(>QSc6%PSn#-M>rXMFwSmFXaX~%}`2-1!i^Zb3 z8#wh1E4%goU248LS&YAT(5uTMciNJgZX3bMqm~&O+tG*acZEjNt`;l~vet09ysGhu z822KpdFu7wRu~CZh!p!7Z*Ylzf3q@r?mYweW(Eug;xf?lvoMH#LB_$!{=_#f?e+;! zK}cV&^TviPEn!$m{e!-l2#~(9LLEO)cAz-wFu$x zL1P6E@dcC%^_}nbn)2cZal;4VM@D0-e%vn#uTI$4szd@ zKqyY9vw1(y3AV&d`z@`emPM1JH`v0`6Z!C_TO04y#_#+5THmw#e&t>`My$tu_O7*+ z!&!l6N9DoMx^BQnyuo^W9VR8tnP08H*WLY!(u<5ytF|nTi@Bb1Nb}h|pr-DeRfp^7 zHiVWoWu~K0^2NuJ;Y@=Qy%h!hzmrpQtWu`oO)pd&9;Lc#6L_v<*LnE2LLF$G7NKP> z5k}G^HvHDw8E1KRh7q_Qv1Z=Z$2y3#M?5s0Dc(Pb+b%aC2?;9t^T*9C{=S&g(IKL2 zSUoK$cF0I?5H-6eoNMa00(i8z4_Y4x$TiFa%O2?r^Q688bqwbH6m@hHt*gAo`O^4H z>)EqR7R{-494Q*sgyJvL=}#A6+C4?iv8?SNkLV)#jQbl(zX?Dg9hUKYF(G$z|C!Zd zV23SEfo0JZ!1)Y#aiwkzzYy@+8~lVL9={zv?Bus&s>PYNiuR=Gyy7#zez47OWq1JE z*6$v{Qlxx3qw)55G-5%os8np_p#Arq7hymU5#3g;I40*7_BV`;}v*8 zHJL`(Q`&)aTA}_vdegVq>abMMXTfrIk^`4@_}VsfPk}%X|LAuAX?An}c2v~8rFF{3 zd~IvKQ_#H6%ze?P*)3(Vg`QaO9=ne$>}Ki;Uh}Z{!`eyKE8MVemk)dZ` z=oBqk*UQ`AAc6ZB1oz&v!Kb}hbkB`W;g`(8-24+L9wOsXe}TK}l=B5KC6;krD<8s} zH`{Cm{^xeFt{{({X1};O2=wWW27#}k5VNXiDE*SM@Bc9M6@E>>-QNlVA_~$S(j^@N z14Oz;j_ywBE~UFhr!&cU!htI)s+*`MXyWO+T@<4Eds(%Oyd zP5b#WQ&s!a@|yq+Z7QL>Nr+#v$I)S%ja3uljt(u@CcjPZzmUiC}RmQ=FIgQh%0-@VwBXI8AnoG4n6nipV_3j!iz#46!XPhzD|khw{CGZUFJ@ zW-=CXo=7Cl7gV4)rhGGY#V)4TDg&;$0mHuKuKT1$ylY$GC8gSHsPG?Xg9` zigLIci;h-f#oJxas;zd>26zUwk8pzrTV6*XK&c`$+t$S8NQ%U>jx+Xq=;%QQG)(y$ z8VN3ul_!9|i_p67z|&Jc%VhlXtgvT?%LkT0-Ggd4=GYfIT}sGdvKIBo$VZi?6qpso z2`?6bvSxol1c@9S?(#tgw!qliBI$w?$4v+KAC@FD@H@yxzIW)g0&y>Z| z`>+u=R_D);B|0U?BLMAnA^gs`=x)DBD9!G2@gNzfABK*qJ&KDirEpIPU<$5|qxDJ{QM3-{yB%)h_hRv!uc*+Skaz5PS*CnM~$ zJ%+7jBZs&5@l=3VapH|l;6!;1{{IQI*01S|Di!*B{+%x0#X8)4~Yv23_?axJhsyyAi zaQTLi1={h+)8gdEk0#1lGTDmYG&=ne6SWY5?wUpFd55BRNHBrBU-8r{(1VNgm`(Ea z<&g-=9e^*ZpBf zX0n=$*XHZbqu-5tns;FCtP@dzxl8iyz)*Bma;S=r z9dw_-u`iOwTurNDcX`8fm_o0@&=I5WBA=?_? z>H2-;n#ht0blTiBH@I7)plIL7oC@=mW1xjF2s3}kr&d_#V42j!e{_+{#gEazkV|$n zNLG`cuJ)N5KWuof%L~A5q!DDQ{nN!<3Aqp`+pJnJ0avc`a1qIN%XFF zovk7awdIOf;YJ?Bp;(`e340SPo)cjsa22+-aWVls|i?~)19@DZB1Mv1)0Bb zxm??U^^%5;8C&&}f*8bj8wn~rjhdgXbzc7Z8f2syvcy)nidj<^69!f?8aRus0EBRP zOHiSvV2GDv6 zreY5HqAoI-rwRw58njueyU7vsnpnOyTZ?fA7eTI9N5+c_4J(GGcH!Mappdwi=OVS-++;_piC z?$Vj|efOX~r(lLu*+gE~cAf7S`au`bTl0r4#A&K!8o#xYGU(o2bav$$de$XLvpJoq zijG!4QMNQMcVo4M3OMc~*~*pN&M*2MdS84Hq;bNTkMn}>h~}Mm=ENzz1GCKP3>sYH zR@)bLbUYUSHlPB$V1K9R*1&#VyOYd6ZW)#?9FVk@KG8+g`7ReGG{cXW5#KHq#;%<&8)_gMLzoMRjcFmSEBgZ!zxAe}Eu z&VGUsaOC$IG?u6`o4S(BFn7Z%Uk4Z{xH-<}ugE5Fx7lo%JlKNH)kFHHcZ1bPvNrRC z^1NzC1&OQwVN3+f+~hu=z$OEd72RsJdUzCu&X)4Ri}(27Jmh(Ool%?&;*n77n|NO- zt4zw3o{>QfI-6A13|if(jq$9>@3$6|Z8RKF)qeJ=OoONbdSO9ji3fJmO}qN({hCFu zL**J(8GdOpQ8PpWl`nt5arb#CX(e}2`KitgXBzl9_xuJSR zaq{4Kpp&pmDW6kL(UykWR6Ek10+EQ!d7?)GNVLZa_@0+X>2&%_-@S z?*G^>BAQ@zvrWtG@X*TenU&xJNlsK>nPFFyWvAfCh3G@HpTjfKnAYVc4H?KVRn^pjMoD+Z1MXK{E(2~677V>gKf_a-rms&g_&deb z&S*_bfah>sb{DfM{?7BZYwSy}B6sax0!>pikbNd>hf9({!TqEhxH+v(rTGz)j&!oJ zG>I)=mac0W{n`9Mb(o>aMMFcpd=l4?0fQ&GMZHHff$VTwoq?wekLdsN3>UvY-*%M| zh*wy>8g_Za-9Nv=FBY3mllQv15hvO@9KPQ9*zKB$yav0hk>g1mq8HdohTR!*M`tFN zsFy1XGQo;T{Pl1Bc^{!~inN)(eaU1tUa7lQ|5ci3N=q8Fi>EWwZ1eM>^5Lj{SE=a6 zkhji-+67w}$dMmOUUJr@f5Wc`MzDtw9%fps2&ct?opV~SEKbBL`4rY#-Xs{qi%>BE zaM2GR^e|*qo!>u{2f*xKIEZ?75=uZXhriNH}+W}k?eVEBq> z*Jr-W{?oA6J^&0Zs6<^u-OF=prfu#*ZfzdJceOQ?`uxevuSUC4fecJ3fF2wbz-%se zWZ?v{b0`o%@_Xk}W>V5jAT%FL4N4zWb(gr&D4N{wR6sK~9ErcA$>=ge$&*mwhiDN% zKf5c1xF=AQX1x#)ewj3Hlgt}5RBKxzPVMKBj{y;w*0?gnf3BO7oBt5~|4UTo=H%c& ze3B=Bd^hGA4Gj&tU~RG51g&XqiBi0|~C=OkeV$tX2)+>n_?ViO@jiPnvVt6%IGPoPtS zJrD?TT7KYJfDORU(Yn8O_3fnc@A7Mnn>H)DN9tKen03q3;FQ(=s)Jk@fNL27Z4(?wFG98ViMUS^xyMoQcOy z!}4kKMe15mrsgMXuAB9HD&!iX=}UhYb>TjR+Tn5 z@bZ_co2TqGv6{%^PeQJw)o~?)g^3?EHV6eu%HIh$bjK$@g&)R4fGz(e!~Tm`jP=BF zA1*;XG%~Vs^Y(|`17iEA%*b=y#{Zee0OO8z{tI?D2i)7w)A!}No7)XfkSdje7B~7$ z$FAV3FUB10{GC_DkZxw|Zr~~VMy}oC35ZvLy1V2{aAe&eA00I^O{;`L)1o@`Gc}3k z)(NxZbJm$VCnj3*0y=7{>8I=!=sXR2EIrjI&x77+=%6$pb1m65*+3dC50Ukz-${Hjp45R3UjcYKpJ18AXCv8~AB^8tcE-DYX-W5&?(f8qa#=i3W! z0ELaME#e}~S7v-YyR+t)CP7_mwAA@IJa|>9K`UR6Z_Jh5|M_y1%;$CQ0s62l1NLil zHSeQC1-fUm`}E$a)Y6CMY2j*x@oXY228JMa*m0rX{7Ic+dE8hd=rg)bd8xNxwMSsb&aM0b!dm%U943e^WYu` zU0kC`tm(!H0@mOW+ydKh(qR)wwkwl2|I>f|#Yn6Uj5}bs`#0}FRCDWjfxES8 zH~tEQMbs{DH)quNVk=3gU{dRtrOMqjRmen50$fTON(o-oPGaCIWsqa3Q_HA(7MZkz zlzPlZVPAfld7JesrHik*udhP4cwWJvg=$_(=3g}7Pvvvy2`dm_Co_X|K1xO8M;GTr zx{d6}tZck7XJ^$?2$n{jyLSWucQZthVN`&rr!bM9xuA?hJKS^UpHYkLNp$t5Sx~Zz zVuAAYE5y~3Bv*uj`J#GOp6b0L9+YK4ej#LkG(fYFug{IdO@Bv24|4E~!u!H(O@^8Z zLZpnH;6A$GRUwhgV2+9)Ip*(=*O3O1f2(-qpn39HLqd}GL^dVWyl7X$G$BTQrfYw% zM*mY6=u->hl46pMkz_S&Tcc4wL98CUS2@tF`MZdbdJ_Qz?gfAFkv1bVWB8D-j)!fi zPTyeD&nQ3bCcZM;(s{LA(ifRi*<<>Y7;8i>O^dD+1YZ z5`Kc|-0Di|*;ynydm)E~Bmcl|`VRsA@RRF%Lc3!Y^U{O6;RpZCgijiK+z=nAoCtKH z;s_J(UH8wm!uYjSD4p)}L4M5sgD3=5ZCl03W>*5lcEneqL4`vsr)~dI8#5M{hE??f zCXyZ9zyD-1!E*T7q2Gr^U{RRA>#;XDe-YnT9lDXIn3NAFzC9_QlCRka8Sr7WnU#e| z6qTrlt|4Z>^p|RiJ~flZ=><|nWBJoPj8Rf5OuI~^U65|*u~&JMgn^w-A!AaOcqGfsBTxd4~&9|)myjdTR!870l{?qu*LV5YT~6g59L+Q9Z|wD4aj*gseWjm z?DRKnVRki+64S=Eod(5nOLKJnbcoxGj4*4-^GYktkdyo|`D6~^ z5@+>}lCxO3HF_3(w?JEb@5A=o|DDvfn`T=f zyf@<$6M@D=ph~8I^r{1EjO5#AW~O7{jeXIxK{;i17GJsVAF(Dlm{?DRG=Hb!GgX1K z`d{%&^6_)`Kk?Z=Aa+aU49o8Ant9_9=VE>GZC&NbaSB)YxR&@Gb?ez`kF|;AGFQ#i z9fb>435yW{DwNE?2$-z;wo_G8Y|!#KFv|`S%fS$0CV{(SviE+^sxj@oq6S1#P7+1T z+|>)i z&a7l$4Qw`kDCKrb+=@bF(2hKKS_eK@ex+}{={)0XDaivdXj?D7fF$(qrk83u28akYKld;{8Y}a zcEU>3LK6v?Q3<5c)x(@S3nM6HJ2W!|Hy-`3c_MmA4xGI$tK!)$0U`cXAA8flj4Iiy zHTP&R9|w*ZF^NosMs5kf+XeQdX|0mge5N1xr}@;sJRe!P;apkpV}mA)Q{%SOyDFo9 z%5)t%|B?{Q&%X!$xvr$omdh#KJw_0u56R23_{+&8)2oI8nw>vT=Ws4E>tsz#7m)%6CE+cUQ`xz8!5`yO2^vPnWzu_R1YBYbOHOEMBIBvTpD zW`QH_?&=r)Z_eHCjPY9`CL7s>IsdDxe-pLJt9?u)!Bwrb@!0#p91JLb58Gq8dJ~yK zA>%6Z(Pg2-;YpJb#?|T?_~Jz-c%Zwc^VfpO$>jPFH`GJ=ayc)^c1_eK4YFzx<|2Il zE0PNDQ=NPYGW{7dLWHTwEtL?~;QV`?RzhWywq>PiH%ZK5=!jlF0q(v(#r+n1TR2oQ zJwn6wCx;azU-Y*i9L>E+LLvzN$bDQW8C(@f5m`g~2BlI@Mq}c`1hL9Z?KIL)RR(i! zJBD1Cs5{@dO_l~vgsW!K4g}{TLP6wJtM$*L7NPkVMSg~)!VnvBoCNLGba^wXo`2!JKEIMv{@^8ACQn$l+rBXa<5NF4O0!bDHv40k*){{iAU@cE<9 z?3+z@K)o|__}R4j!RrAt>L|>g%Qu<{1p`i+z_`g}{?7|-!PD}YuWv6=Q0I9RC)7+Y zu#~`7`f~F2r^T$%v?a0nv@gn;;@K6}n2FG>ab)A6GJo%4H$g$2@R0VVI&8%> z47e?aFxSACLd47!9}afzSZC?LFCImXH_=${#wJC9-4hmdP`rq%t>BW@7A|rGd1}k^ zRZBGWP(=H2ZUefxb2@A2F%8}Ym+LWLZ=t9{2S;-DP*iavDcAi&U|qP`7f3c7t9D{%#!|P44iVi(Bj zoRloV*OITJ~QX`%Ns&M z=6mzsU9b#!lxO!l7K~?t@x6b_i8^|qMzD*r?XrsvW3}=8LI9;h!Lv?nRL((eE15WR zJv(UG*TaEub$PLOwPSU7us>8L^+kQpKo96Dhm;1?gjIgKIR}frjH^G{1ch2gO*k#W zE1jdi(0t8Es$-%rskh1yV*^{b^U0^yo#Q7GtK_c8=Zu8cwAQ>>6~@`;49)v#_7858e}} z1KHVxw_jC1AJWCXEl%I<_glx6keEs3@%(S8$rnC*Z*L-F(}#c(DTb;(`{D{i?8| zxTqE^=esz6A}7S6YZrc)zpO`B9%SNSW5KVa1D$5$pS2E7np6zOpD}B93JtJb)?$4+ za?Yt-xpjqC6QFpt!K($I2TrRKX&n015|00o_jIWtEa@E>_^ahSt3e3uT#p?Cshmn) znB2ky4Q~6D7<*CZCl(z4A-zasv?x7d_S3ew#>CO0w2WXJ#V=b1GA`)}RpsrzWxrAn z3L1J4JLBIP*AiVHZvr?(q>{})sNtxH zVF?xNZA#3_CI!FwT)tHu>0h>Aw@hS4VW;wx@z#_Yt3bhk8T{`_ec`ExRwbv%)+oGU zyMSl1cdM3ofyCsME2EjzC-=XMrd~0JLwMYhxC*%3Lcd$oO7_SVv7@)3Nid?c;PuAf z0q3m?Y>`in={G-9?=?Lm`l&sI1&Nq|lmMAoEfNQ+FFSol6}A}M6N~-7PG7b7W~7^C zWHenKE=|b}7_L8jkNf#aFzOg%VyPuo(N>pJkujB-0V7Br?V7s^4QfE1_ddMd`N%?p zk3?^uf;wB4n>W4KrJrrz1)1!VcL5vtI^eht3`{O406KGUdVWIDAt%1RW1B|@R5#nK^oVMPj*1JaMDetC2jGSwt>UY}G zU`b_$ojK$ODLAKl(fT5=H5c)u4g|T0twbb#bL?yKJ_+RhQz|nBq54N99!BwYou8d;Pzx-WJdU-L{N_d_W>rK)gkNWf z+1Md{d55o)Qt~{+G;(23WM;!tz0`N*_EC9=W6CYZB^8b7W&>e)9)Vx!_L(>m^+nN_ zL=0)HN#2wXcn&5-nIGtTrJ-FVXtNS-@ft8!RolT4?ZrtB% zYcu+L0k3@|Q*Po0BV-}>6BF4VLjxhEu0_ID=}z=q27)scmdlZRX9Wm{^zAp?=}0RQ zXxA%k$!TnT9dbz-ut4!5sx;82l4Yb(Ye=r#8e77!`&}DC^*Pkc^;Fi$a@Vz-WuO>C zr~QshMW)%xpmci^7{X4Sam2?7#8g#xDF^Y*bEQKs47Xfo|MNV2Za@9^!=r;5RoCmS zI>4XHBs=su^6m1lyTX_sz*|}ftExhbWm~`_FZ220D?3Z-bPe}9U0&+AoHko7=^A0G zT6EIi6*qZLM|GO7@5XpyR5_suSZJPZ6%y1qfAeDG=O(cGWfWab zH$hi%c(0`b0Uo2yB=zFH*UROH>FDpNx<5a^>UZ{UPoOFX2=e;latjP80WEi56SprI z{^+FdIrng@VLdkW_RJDy=>M5Et(7}QMYQ(YzH%2={NeBy51~R#Y%xjB>bP8YyQ4+= z#NyUuxU2b-Upl9TlSC;}scOHv4az`dy%u7&9D{f&OOkqP>%S1fYPYFG!UwGU3-Rr| zt$m4lU!vXQMChhD;&OHPqD_Nm17q{{Zwb3oA;0W$9o-P7o{5I;cY}=e-QO;U0(0`F z^5p50nga;5dJCt(k8l^0Pnnbz%%03ha8BD_?d-(`s{@hi3148WJd}oA*^@F}Q|wfh z%SQJfe-L$y^;i**t*DGqb_(Psyf3qUr zsvKgvkX+=Gc18LbIkg&v)pV9597Vu;%D*Mmo&BFaHcZpDczQ)%4c{RNY=#2sEJvlS zDp|s}+PvhXNBmY$XlQS*~@CYuEvBJxka zK68zV>n`jHcgE59p$_Ui=slg1A$w`@Wq#*EguSUwqTG3hzHaQ<6MTFr-6~(PTWb7w zKm;|c-uLmKZCA85%;WBnhnH@wzFx02gJG9t!s8HmWHeX{Wb15qvZ#>m_OK8%Xh-p%8T$U6 zXZ}p_j(${s+aWflo;pu0hh)nKElhx$YvdrT?RKpU-G*Ayg6$o=tJCp&yAqAXH)-w& zpTQp2pkRylS9rwa3NFSxN)|SOxn##XN?6ggQ@JJATB6UMM!}oAwAIILJx_VGjkne- zpF{?pn*-9IzKNQKduxuZzlt+(gu}c&*Z#hilpX0P4GnzDlka$U+cgM0GRKWM4DLvz zS1HnE>2Otj7(Et9&Zo)uewjQ9YV*=?vOz$rn*2Fj;(pz4Oa3&tulybXU2d}FngCJ@ zvM9I5LX1;H??5>|`%K5n{tS&INr~OA`g;X__dp7tZR;GLClP89_E2lp0SiX&{05H- zGf7*PK}4-_RwO`EIL^8cMV-E9wB>9=!zkC+!YK2cwvkGd^zw{0^S(0ax{Hp~cbyS& zp0E;zswJV1w`|Df_#OH;IqXa1QkZ)3m~#^Z=~YQs-3kLPdrSe2JD7o*?9N+X*l+bR z`Ysne&srGJuX5McmERfOuHynO#%Pw>$|EocM-tGdYF)JvnUR&oAl-K%zA3)YH2E+N z#kxH<%q(&Q!)wELZI7YF)}9oc%Ff~JW?7RzX!NLFpG zFV)_2=6GKT@JVx#3ApC0#9ec6EcOw0UEsxu)MP5kBL$l_Hn_TvwfN)9>)J4FahYM5 zdt-Gd1wgW^{r6-k{4T`!sxh6f*1b?I&Ne40_*QD8`g46_rDyJTg`6YptOKilGX++b z&p(dQ031&&Z1P2-QG7ARTW_&*d>&pNFEynYIVXKj(2iD(&}&KI&Gb0mtT!|hkLhc1 zLB1egR2o$vUA=*E11@*FmpVGJwTPZY7gu{vJtK>Y4!m~ZJ6@h@LU)Is^rd4>P=!1n zFh);@Xmrt&yahx*i5)K-AU>y0+{OFFyHAFmXXx&$wV?{5C_w)U&Q$iIpQiW1fV;U# zfQKeVeYZ9rpe9C3F)K!B2AAuNnX^})51SMGj8(UJwVNgmFp}EUkew$_>9lV1UA0q! zc4}lpNp!HFZ3bHrlf!+B2bo6m!^}{M59P+7(orFkudQm2x?Sr&lFamzKrKeTpcwUH zAqi(=+8|`E9G11#FaVY-wJSP=Fg-Eb>K6UdX#}_@-a`Z_lAFx)#(_I>(^;nTKh@z| z|Lp<(H`P~lI_EwhaR?~t$Gorup$&U^{2uLt>59zG%K59(=`|bZFGf#K&6|@O`de2&*7&1SHz4Ir+n2Qdfz?CJCdssJl{jPi0ZRQp#}E#n`_zjhr2|kIFz9X z|Cz@}#c9PH8Tz`IcDbZ)U=v@BZ!RR2e+x+ugTg#hc10$YRj?^GgPxu2=NjZTe^G3p(eFqb>6HUV)GUjOdX$Uqw77f=*g z&-1coVbN@u*!&kZRLF&bWbag!v(Sw-a#)f!8qeIT&GZJPN4&pPk*BZV6=_E4B?;by zwt{PhPKLEZl+#V4_Qi~k)DB>8HL*+I*TYl|A6;O95Q1k<{!!xqMb9!pv3f| zo*`@96mQbCE#9El?ct$b4oSxF*Br#U8+^Lu6Fn6E{AuA=Q(Kb>fwRIpJ>!!>Q{Ths z0R_dxi!1nZ{q>5IyIz0CPILG0H4sQNL?w;%>Lu!X+83ztuek9Q=mud;c3!h9`dyb* zkF~4y*XLLBPZcu;@^!2Wi5~|Oi6m4DB_h≈Nzqflj^i_ALi@8kxiX@uMl~-@kQA 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 literal 0 HcmV?d00001 diff --git a/doc/pl/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png b/doc/pl/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png new file mode 100644 index 0000000000000000000000000000000000000000..6129195b6e9222d37f9bfca18618cdda187afdbb GIT binary patch literal 318766 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